From 30f421c62e5f5ed6f720ef034f11b3382330de4a Mon Sep 17 00:00:00 2001 From: Zelentsov Dmitry Date: Wed, 21 May 2025 15:50:21 +0300 Subject: [PATCH] Fix for tests in '...\ets_test_suite\...' folders Signed-off-by: Zelentsov Dmitry --- ets2panda/checker/ETSAnalyzer.cpp | 18 +++++++++++++++--- .../ast/parser/ets/recordKeyTypeCheck02.ets | 2 +- .../ast/parser/ets/recordKeyTypeCheck03.ets | 2 +- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/ets2panda/checker/ETSAnalyzer.cpp b/ets2panda/checker/ETSAnalyzer.cpp index 799a85359..a7e926e7a 100644 --- a/ets2panda/checker/ETSAnalyzer.cpp +++ b/ets2panda/checker/ETSAnalyzer.cpp @@ -1655,16 +1655,28 @@ static Type *TransformTypeForMethodReference(ETSChecker *checker, ir::Expression return type; // type is actually used as method } - if (type->AsETSFunctionType()->CallSignatures().at(0)->HasSignatureFlag(SignatureFlags::PRIVATE)) { + auto *const functionType = type->AsETSFunctionType(); + auto &signatures = functionType->CallSignatures(); + + if (signatures.at(0)->HasSignatureFlag(SignatureFlags::PRIVATE)) { checker->LogError(diagnostic::PRIVATE_METHOD_AS_VALUE, getUseSite()); return checker->GlobalTypeError(); } - if (type->AsETSFunctionType()->CallSignatures().size() > 1) { + auto it = signatures.begin(); + while (it != signatures.end()) { + if ((*it)->HasSignatureFlag(SignatureFlags::ABSTRACT)) { + it = signatures.erase(it); + } else { + ++it; + } + } + + if (signatures.size() > 1U) { checker->LogError(diagnostic::OVERLOADED_METHOD_AS_VALUE, getUseSite()); return checker->GlobalTypeError(); } - return type->AsETSFunctionType()->MethodToArrow(checker); + return functionType->MethodToArrow(checker); } checker::Type *ETSAnalyzer::Check(ir::Identifier *expr) const diff --git a/ets2panda/test/ast/parser/ets/recordKeyTypeCheck02.ets b/ets2panda/test/ast/parser/ets/recordKeyTypeCheck02.ets index d1e722c34..a8af2cbfa 100644 --- a/ets2panda/test/ast/parser/ets/recordKeyTypeCheck02.ets +++ b/ets2panda/test/ast/parser/ets/recordKeyTypeCheck02.ets @@ -21,4 +21,4 @@ function main(){ 2: 2 } } -/* @@@ label Error TypeError: Type argument 'A|Double' should be a subtype of 'Numeric|String'-constraint */ +/* @@@ label Error TypeError: Type argument 'A|Double' should be a subtype of 'Numeric|String|BaseEnum'-constraint */ diff --git a/ets2panda/test/ast/parser/ets/recordKeyTypeCheck03.ets b/ets2panda/test/ast/parser/ets/recordKeyTypeCheck03.ets index 70e71e125..a1fcd36cf 100644 --- a/ets2panda/test/ast/parser/ets/recordKeyTypeCheck03.ets +++ b/ets2panda/test/ast/parser/ets/recordKeyTypeCheck03.ets @@ -18,4 +18,4 @@ class A{} function main(){ let a: Record/* @@ label */ } -/* @@@ label Error TypeError: Type argument 'BigInt' should be a subtype of 'Numeric|String'-constraint */ +/* @@@ label Error TypeError: Type argument 'BigInt' should be a subtype of 'Numeric|String|BaseEnum'-constraint */ -- Gitee