From 72cf861b5ddf663c04d4c4a393a9e2454a5bfe67 Mon Sep 17 00:00:00 2001 From: Zelentsov Dmitry Date: Tue, 13 May 2025 12:47:49 +0300 Subject: [PATCH] Get interface signatures for synthetic classes Signed-off-by: Zelentsov Dmitry --- ets2panda/checker/types/ets/etsObjectType.cpp | 8 +++++++- ets2panda/checker/types/ets/etsObjectType.h | 4 ++-- .../lowering/ets/constantExpressionLowering.cpp | 2 +- ets2panda/compiler/lowering/ets/opAssignment.cpp | 13 +++++++------ 4 files changed, 17 insertions(+), 10 deletions(-) diff --git a/ets2panda/checker/types/ets/etsObjectType.cpp b/ets2panda/checker/types/ets/etsObjectType.cpp index e1564d8e3b..7f07ea057c 100644 --- a/ets2panda/checker/types/ets/etsObjectType.cpp +++ b/ets2panda/checker/types/ets/etsObjectType.cpp @@ -253,7 +253,13 @@ void ETSObjectType::CollectSignaturesForSyntheticType(std::multimapCollectSignaturesForSyntheticType(signatureSet, name, flags); + superType_->CollectSignaturesForSyntheticType(signatureSet, name, flags); + } + + if ((flags & PropertySearchFlags::SEARCH_IN_INTERFACES) != 0) { + for (auto *interface : interfaces_) { + interface->CollectSignaturesForSyntheticType(signatureSet, name, flags); + } } } diff --git a/ets2panda/checker/types/ets/etsObjectType.h b/ets2panda/checker/types/ets/etsObjectType.h index 3894142c77..82b7b190aa 100644 --- a/ets2panda/checker/types/ets/etsObjectType.h +++ b/ets2panda/checker/types/ets/etsObjectType.h @@ -405,8 +405,8 @@ protected: virtual ETSFunctionType *CreateMethodTypeForProp(const util::StringView &name) const; private: - void CollectSignaturesForSyntheticType(std::multimap &signatures, - const util::StringView &name, PropertySearchFlags flags) const; + void CollectSignaturesForSyntheticType(std::multimap &signatures, const util::StringView &name, + PropertySearchFlags flags) const; template explicit ETSObjectType(ArenaAllocator *allocator, util::StringView name, util::StringView assemblerName, diff --git a/ets2panda/compiler/lowering/ets/constantExpressionLowering.cpp b/ets2panda/compiler/lowering/ets/constantExpressionLowering.cpp index 131b839841..0683c5bc79 100644 --- a/ets2panda/compiler/lowering/ets/constantExpressionLowering.cpp +++ b/ets2panda/compiler/lowering/ets/constantExpressionLowering.cpp @@ -461,7 +461,7 @@ static bool PerformRelationOperation(InputType left, InputType right, lexer::Tok } case lexer::TokenType::PUNCTUATOR_STRICT_EQUAL: case lexer::TokenType::PUNCTUATOR_EQUAL: { - return left == right; + return left == right; } case lexer::TokenType::PUNCTUATOR_NOT_STRICT_EQUAL: case lexer::TokenType::PUNCTUATOR_NOT_EQUAL: { diff --git a/ets2panda/compiler/lowering/ets/opAssignment.cpp b/ets2panda/compiler/lowering/ets/opAssignment.cpp index 8f9c6584b1..427de9932e 100644 --- a/ets2panda/compiler/lowering/ets/opAssignment.cpp +++ b/ets2panda/compiler/lowering/ets/opAssignment.cpp @@ -193,9 +193,11 @@ static std::string GetCastString(checker::ETSChecker *checker, ir::Expression *e return " as @@T" + std::to_string(vec.size()); } -static ir::Expression *GenerateLoweredResultForLoweredAssignment( - const lexer::TokenType opEqual, ir::MemberExpression *expr, checker::ETSChecker *const checker, - parser::ETSParser *parser, ir::Expression * additionalAssignmentExpression) +static ir::Expression *GenerateLoweredResultForLoweredAssignment(const lexer::TokenType opEqual, + ir::MemberExpression *expr, + checker::ETSChecker *const checker, + parser::ETSParser *parser, + ir::Expression *additionalAssignmentExpression) { auto *allocator = checker->Allocator(); // Generated a formatString for the new lowered assignment expression @@ -250,7 +252,7 @@ static ir::Expression *ConstructOpAssignmentResult(public_lib::Context *ctx, ir: if (left->IsIdentifier()) { std::string formatString = "@@I1 = (@@I2 " + std::string(lexer::TokenToString(CombinedOpToOp(opEqual))) + " (@@E3))"; - ArenaVector retVec (allocator->Adapter()); + ArenaVector retVec(allocator->Adapter()); retVec.push_back(GetClone(allocator, left->AsIdentifier())); retVec.push_back(GetClone(allocator, left->AsIdentifier())); retVec.push_back(right); @@ -258,8 +260,7 @@ static ir::Expression *ConstructOpAssignmentResult(public_lib::Context *ctx, ir: retVal = parser->CreateFormattedExpression(formatString, retVec); } else if (left->IsMemberExpression()) { // Generate ArkTS code string for new lowered assignment expression: - retVal = GenerateLoweredResultForLoweredAssignment(opEqual, left->AsMemberExpression(), checker, parser, - right); + retVal = GenerateLoweredResultForLoweredAssignment(opEqual, left->AsMemberExpression(), checker, parser, right); } else { ES2PANDA_UNREACHABLE(); } -- Gitee