From bbb93dc860c1c5501c9019a89fce14b34df76639 Mon Sep 17 00:00:00 2001 From: bergamot88 Date: Thu, 14 Aug 2025 16:10:17 +0300 Subject: [PATCH 1/2] Test --- ets2panda/checker/ETSAnalyzer.cpp | 2 +- ets2panda/checker/ETSchecker.cpp | 6 +- ets2panda/checker/ETSchecker.h | 6 +- ets2panda/checker/ets/arithmetic.cpp | 6 +- ets2panda/checker/ets/dynamic.cpp | 50 +++--- ets2panda/checker/ets/function.cpp | 84 ++++----- ets2panda/checker/ets/helpers.cpp | 114 ++++++------- ets2panda/checker/ets/object.cpp | 38 ++--- ets2panda/checker/ets/utilityTypeHandlers.cpp | 160 +++++++++--------- ets2panda/checker/ets/validateHelpers.cpp | 10 +- .../debugInfoDeserialization/classBuilder.cpp | 6 +- .../methodBuilder.cpp | 24 +-- ets2panda/public/public.h | 2 +- 13 files changed, 254 insertions(+), 254 deletions(-) diff --git a/ets2panda/checker/ETSAnalyzer.cpp b/ets2panda/checker/ETSAnalyzer.cpp index 2f25b810ce..2de733635a 100644 --- a/ets2panda/checker/ETSAnalyzer.cpp +++ b/ets2panda/checker/ETSAnalyzer.cpp @@ -3192,7 +3192,7 @@ static void ProcessRequiredFields(ArenaUnorderedMapLogError(diagnostic::ANNOT_FIELD_NO_VAL, {entry.first}, st->Start()); continue; } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *clone = entry.second->Clone(checker->Allocator(), st); st->AddProperty(clone); clone->Check(checker); diff --git a/ets2panda/checker/ETSchecker.cpp b/ets2panda/checker/ETSchecker.cpp index 88a71002f8..6d9cebf894 100644 --- a/ets2panda/checker/ETSchecker.cpp +++ b/ets2panda/checker/ETSchecker.cpp @@ -328,14 +328,14 @@ bool ETSChecker::StartChecker(varbinder::VarBinder *varbinder, const util::Optio bool isEvalMode = (debugInfoPlugin_ != nullptr); if (UNLIKELY(isEvalMode)) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + debugInfoPlugin_->PreCheck(); } CheckProgram(Program(), true); if (UNLIKELY(isEvalMode)) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + debugInfoPlugin_->PostCheck(); } @@ -772,7 +772,7 @@ Type *ETSChecker::TypeError(varbinder::Variable *var, const diagnostic::Diagnost void ETSChecker::HandleUpdatedCallExpressionNode(ir::CallExpression *callExpr) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + VarBinder()->AsETSBinder()->HandleCustomNodes(callExpr); } diff --git a/ets2panda/checker/ETSchecker.h b/ets2panda/checker/ETSchecker.h index 97e8a6d3c3..96f490191a 100644 --- a/ets2panda/checker/ETSchecker.h +++ b/ets2panda/checker/ETSchecker.h @@ -297,7 +297,7 @@ public: void AddElementsToModuleObject(ETSObjectType *moduleObj, const util::StringView &str); void ComputeApparentType(Type *type) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + [[maybe_unused]] auto x = GetApparentType(type); } [[nodiscard]] Type *GetApparentType(Type *type); @@ -889,14 +889,14 @@ public: template T *AllocNode(Args &&...args) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + return util::NodeAllocator::ForceSetParent(Allocator(), std::forward(args)...); } template T *ProgramAllocNode(Args &&...args) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + return util::NodeAllocator::ForceSetParent(ProgramAllocator(), std::forward(args)...); } diff --git a/ets2panda/checker/ets/arithmetic.cpp b/ets2panda/checker/ets/arithmetic.cpp index 0415b8a2ed..4ecb54d22e 100644 --- a/ets2panda/checker/ets/arithmetic.cpp +++ b/ets2panda/checker/ets/arithmetic.cpp @@ -1154,7 +1154,7 @@ std::tuple ETSChecker::CheckBinaryOperator(ir::Expression *left, ir::Expression *expr, lexer::TokenType operationType, lexer::SourcePosition pos, bool forcePromotion) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + checker::Type *leftType = left->Check(this); if (leftType == nullptr) { @@ -1168,7 +1168,7 @@ std::tuple ETSChecker::CheckBinaryOperator(ir::Expression *left, } Context().CheckTestSmartCastCondition(operationType); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + checker::Type *rightType = right->Check(this); if (right->IsTypeNode()) { @@ -1194,7 +1194,7 @@ std::tuple ETSChecker::CheckBinaryOperator(ir::Expression *left, return ResolveCheckBinaryOperatorForBigInt(this, leftType, rightType, operationType); } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + return CheckArithmeticOperations(expr, std::make_tuple(left, right, operationType, pos), isEqualOp, std::make_tuple(leftType, rightType, unboxedL, unboxedR)); } diff --git a/ets2panda/checker/ets/dynamic.cpp b/ets2panda/checker/ets/dynamic.cpp index 2a67acd88d..fdb308cc45 100644 --- a/ets2panda/checker/ets/dynamic.cpp +++ b/ets2panda/checker/ets/dynamic.cpp @@ -85,13 +85,13 @@ void ProcessScopesNode(ETSChecker *checker, ir::AstNode *node) ir::ETSParameterExpression *ETSChecker::AddParam(util::StringView name, ir::TypeNode *type) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *paramIdent = ProgramAllocNode(name, ProgramAllocator()); if (type != nullptr) { paramIdent->SetTsTypeAnnotation(type); type->SetParent(paramIdent); } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + return ProgramAllocNode(paramIdent, false, ProgramAllocator()); } @@ -105,13 +105,13 @@ std::pair ETSChecker::CreateStaticScript ir::Identifier *id; builder(&statements, nullptr); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *body = ProgramAllocNode(ProgramAllocator(), std::move(statements)); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + id = ProgramAllocNode(compiler::Signatures::CCTOR, ProgramAllocator()); auto signature = ir::FunctionSignature(nullptr, std::move(params), nullptr); // clang-format off - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + func = ProgramAllocNode( ProgramAllocator(), ir::ScriptFunction::ScriptFunctionData { body, @@ -136,12 +136,12 @@ std::pair ETSChecker::CreateScriptFuncti ir::Identifier *id; builder(&statements, ¶ms); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *body = ProgramAllocNode(ProgramAllocator(), std::move(statements)); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + id = ProgramAllocNode(compiler::Signatures::CTOR, ProgramAllocator()); auto funcSignature = ir::FunctionSignature(nullptr, std::move(params), nullptr); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + func = ProgramAllocNode( ProgramAllocator(), ir::ScriptFunction::ScriptFunctionData {body, std::move(funcSignature), ir::ScriptFunctionFlags::CONSTRUCTOR | @@ -156,13 +156,13 @@ std::pair ETSChecker::CreateScriptFuncti ir::ClassStaticBlock *ETSChecker::CreateClassStaticInitializer(const ClassInitializerBuilder &builder, [[maybe_unused]] ETSObjectType *type) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto [func, id] = CreateStaticScriptFunction(builder); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *funcExpr = ProgramAllocNode(func); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *staticBlock = ProgramAllocNode(funcExpr, ProgramAllocator()); ES2PANDA_ASSERT(staticBlock != nullptr); staticBlock->AddModifier(ir::ModifierFlags::STATIC); @@ -173,16 +173,16 @@ ir::ClassStaticBlock *ETSChecker::CreateClassStaticInitializer(const ClassInitia ir::MethodDefinition *ETSChecker::CreateClassInstanceInitializer(const ClassInitializerBuilder &builder, [[maybe_unused]] ETSObjectType *type) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto [func, id] = CreateScriptFunction(builder); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *funcExpr = ProgramAllocNode(func); auto *ctor = - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + ProgramAllocNode(ir::MethodDefinitionKind::CONSTRUCTOR, - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + id->Clone(ProgramAllocator(), nullptr), funcExpr, ir::ModifierFlags::NONE, ProgramAllocator(), false); return ctor; @@ -190,15 +190,15 @@ ir::MethodDefinition *ETSChecker::CreateClassInstanceInitializer(const ClassInit ir::ClassDeclaration *ETSChecker::BuildClass(util::StringView name, const ClassBuilder &builder) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *classId = ProgramAllocNode(name, ProgramAllocator()); auto *classDef = - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + ProgramAllocNode(ProgramAllocator(), classId, ir::ClassDefinitionModifiers::CLASS_DECL, ir::ModifierFlags::NONE, Language(Language::Id::ETS)); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *classDecl = ProgramAllocNode(classDef, ProgramAllocator()); VarBinder()->Program()->Ast()->AddStatement(classDecl); @@ -225,7 +225,7 @@ ir::MethodDefinition *ETSChecker::CreateClassMethod(const std::string_view name, ir::ModifierFlags modifierFlags, const MethodBuilder &builder) { ArenaVector params(ProgramAllocator()->Adapter()); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *id = ProgramAllocNode(name, ProgramAllocator()); ArenaVector statements(ProgramAllocator()->Adapter()); @@ -233,25 +233,25 @@ ir::MethodDefinition *ETSChecker::CreateClassMethod(const std::string_view name, builder(&statements, ¶ms, &returnType); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *body = ProgramAllocNode(ProgramAllocator(), std::move(statements)); auto funcSignature = ir::FunctionSignature( nullptr, std::move(params), - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + returnType == nullptr ? nullptr : ProgramAllocNode(returnType, ProgramAllocator())); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *func = ProgramAllocNode( ProgramAllocator(), ir::ScriptFunction::ScriptFunctionData {body, std::move(funcSignature), funcFlags, modifierFlags}); func->SetIdent(id); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *funcExpr = ProgramAllocNode(func); auto *method = - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + ProgramAllocNode(ir::MethodDefinitionKind::METHOD, - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + func->Id()->Clone(ProgramAllocator(), nullptr), funcExpr, modifierFlags, ProgramAllocator(), false); diff --git a/ets2panda/checker/ets/function.cpp b/ets2panda/checker/ets/function.cpp index 5ec50aaf72..f37eecffdf 100644 --- a/ets2panda/checker/ets/function.cpp +++ b/ets2panda/checker/ets/function.cpp @@ -573,7 +573,7 @@ bool ETSChecker::ValidateSignatureRequiredParams(Signature *substitutedSig, return false; } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + if (!ValidateSignatureInvocationContext(substitutedSig, argument, index, flags)) { return false; } @@ -586,7 +586,7 @@ bool ETSChecker::ValidateSignatureInvocationContext(Signature *substitutedSig, i std::size_t index, TypeRelationFlag flags) { Type *targetType = substitutedSig->Params()[index]->TsType(); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + Type *argumentType = argument->Check(this); flags |= (TypeRelationFlag::ONLY_CHECK_WIDENING); @@ -739,7 +739,7 @@ Signature *ETSChecker::ValidateSignature( } auto count = std::min(signature->ArgCount(), argCount); // Check all required formal parameter(s) first - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + if (!ValidateSignatureRequiredParams(signature, arguments, flags, argTypeInferenceRequired, reportError)) { return nullptr; } @@ -833,7 +833,7 @@ ArenaVector ETSChecker::CollectSignatures(ArenaVector // Bridges are never invoked direcly continue; } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *concreteSig = ValidateSignature(std::make_tuple(sig, typeArguments, relationFlags), arguments, pos, argTypeInferenceRequired, signatures.size() == 1); if (concreteSig == nullptr) { @@ -896,7 +896,7 @@ Signature *ETSChecker::GetMostSpecificSignature(ArenaVector &compat return nullptr; } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + if (!TypeInference(mostSpecificSignature, arguments, resolveFlags)) { return nullptr; } @@ -954,10 +954,10 @@ Signature *ETSChecker::ValidateSignatures(ArenaVector &signatures, const lexer::SourcePosition &pos, std::string_view signatureKind, TypeRelationFlag resolveFlags) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto compatibleSignatures = CollectSignatures(signatures, typeArguments, arguments, pos, resolveFlags); if (!compatibleSignatures.empty()) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *sig = GetMostSpecificSignature(compatibleSignatures, arguments, pos, resolveFlags); // NOTE (DZ): skip Promise constructor/then/catch check - // temporary solution, need to be removed after fixing OHOS code! @@ -1347,7 +1347,7 @@ Signature *ETSChecker::ResolvePotentialTrailingLambdaWithReceiver(ir::CallExpres auto *currentReceiver = candidateFunctionType->Params()[0]; trailingLambda->Function()->EmplaceParams(currentReceiver); sigContainLambdaWithReceiverAsParam.emplace_back(sig); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + signature = ValidateSignatures(sigContainLambdaWithReceiverAsParam, callExpr->TypeParams(), arguments, callExpr->Start(), "call", TypeRelationFlag::NO_THROW | TypeRelationFlag::NO_CHECK_TRAILING_LAMBDA); @@ -1357,7 +1357,7 @@ Signature *ETSChecker::ResolvePotentialTrailingLambdaWithReceiver(ir::CallExpres sigContainLambdaWithReceiverAsParam.clear(); trailingLambda->Function()->ClearParams(); } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + return ValidateSignatures(normalSig, callExpr->TypeParams(), arguments, callExpr->Start(), "call", TypeRelationFlag::NO_THROW | TypeRelationFlag::NO_CHECK_TRAILING_LAMBDA); } @@ -1432,28 +1432,28 @@ Signature *ETSChecker::ResolveCallExpressionAndTrailingLambda(ArenaVectorTrailingBlock() == nullptr) { auto sig = - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + ValidateSignatures(signatures, callExpr->TypeParams(), callExpr->Arguments(), pos, "call", reportFlag); sig = MakeSignatureInvocable(sig, callExpr); UpdateDeclarationFromSignature(callExpr, sig); return sig; } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto arguments = ExtendArgumentsWithFakeLamda(callExpr); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto sig = ResolvePotentialTrailingLambdaWithReceiver(callExpr, signatures, arguments); if (sig != nullptr) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + TransformTraillingLambda(callExpr, sig); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + TrailingLambdaTypeInference(sig, callExpr->Arguments()); UpdateDeclarationFromSignature(callExpr, sig); callExpr->SetIsTrailingCall(true); return sig; } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + sig = ValidateSignatures(signatures, callExpr->TypeParams(), callExpr->Arguments(), pos, "call", reportFlag); sig = MakeSignatureInvocable(sig, callExpr); if (sig != nullptr) { @@ -1476,7 +1476,7 @@ Signature *ETSChecker::ResolveConstructExpression(ETSObjectType *type, const Are } return sig; } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + return ValidateSignatures(type->ConstructSignatures(), nullptr, arguments, pos, "construct"); } @@ -2308,12 +2308,12 @@ ir::MethodDefinition *ETSChecker::CreateMethod(const util::StringView &name, ir: varbinder::FunctionParamScope *paramScope, ir::TypeNode *returnType, ir::AstNode *body) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *nameId = ProgramAllocNode(name, ProgramAllocator()); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *scope = ProgramAllocator()->New(ProgramAllocator(), paramScope); // clang-format off - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *const func = ProgramAllocNode( ProgramAllocator(), ir::ScriptFunction::ScriptFunctionData { // CC-OFFNXT(G.FMT.05-CPP) project codestyle clang format off @@ -2337,11 +2337,11 @@ ir::MethodDefinition *ETSChecker::CreateMethod(const util::StringView &name, ir: func->Scope()->Find(varbinder::VarBinder::MANDATORY_PARAM_THIS).variable->SetTsType(classDef->TsType()); } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *funcExpr = ProgramAllocNode(func); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *nameClone = nameId->Clone(ProgramAllocator(), nullptr); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *method = util::NodeAllocator::ForceSetParent( ProgramAllocator(), ir::MethodDefinitionKind::METHOD, nameClone, funcExpr, modifiers, ProgramAllocator(), false); @@ -2357,7 +2357,7 @@ varbinder::FunctionParamScope *ETSChecker::CopyParams( for (auto *const it : params) { auto *const paramOld = it->AsETSParameterExpression(); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *typeOld = paramOld->Clone(ProgramAllocator(), paramOld->Parent()); ES2PANDA_ASSERT(typeOld != nullptr); auto *const paramNew = typeOld->AsETSParameterExpression(); @@ -2451,7 +2451,7 @@ ir::ScriptFunction *ETSChecker::CreateLambdaFunction(ir::BlockStatement *trailin if (IsLastParameterLambdaWithReceiver(sig)) { auto *actualLambdaType = sig->Function()->Params().back()->AsETSParameterExpression()->TypeAnnotation()->AsETSFunctionType(); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *receiverOfTrailingBlock = actualLambdaType->Params()[0]->Clone(ProgramAllocator(), nullptr)->AsExpression(); auto *receiverVar = receiverOfTrailingBlock->AsETSParameterExpression()->Ident()->Variable(); @@ -2464,7 +2464,7 @@ ir::ScriptFunction *ETSChecker::CreateLambdaFunction(ir::BlockStatement *trailin params.emplace_back(receiverOfTrailingBlock); trailingLambdaHasReceiver = true; } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *funcNode = ProgramAllocNode( ProgramAllocator(), SFunctionData {trailingBlock, @@ -2483,13 +2483,13 @@ void ETSChecker::TransformTraillingLambda(ir::CallExpression *callExpr, Signatur auto *trailingBlock = callExpr->TrailingBlock(); ES2PANDA_ASSERT(trailingBlock != nullptr); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *funcNode = CreateLambdaFunction(trailingBlock, sig); funcNode->AddFlag(ir::ScriptFunctionFlags::TRAILING_LAMBDA); ReplaceScope(funcNode->Body(), trailingBlock, funcNode->Scope()); callExpr->SetTrailingBlock(nullptr); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *arrowFuncNode = ProgramAllocNode(funcNode, ProgramAllocator()); arrowFuncNode->SetRange(trailingBlock->Range()); arrowFuncNode->SetParent(callExpr); @@ -2503,12 +2503,12 @@ ArenaVector ETSChecker::ExtendArgumentsWithFakeLamda(ir::CallE ArenaVector params(ProgramAllocator()->Adapter()); ArenaVector statements(ProgramAllocator()->Adapter()); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *body = ProgramAllocNode(ProgramAllocator(), std::move(statements)); ES2PANDA_ASSERT(body != nullptr); body->SetScope(funcScope); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *funcNode = ProgramAllocNode( ProgramAllocator(), ir::ScriptFunction::ScriptFunctionData {body, ir::FunctionSignature(nullptr, std::move(params), nullptr), @@ -2516,7 +2516,7 @@ ArenaVector ETSChecker::ExtendArgumentsWithFakeLamda(ir::CallE ES2PANDA_ASSERT(funcNode != nullptr); funcNode->SetScope(funcScope); funcScope->BindNode(funcNode); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *arrowFuncNode = ProgramAllocNode(funcNode, ProgramAllocator()); ES2PANDA_ASSERT(arrowFuncNode != nullptr); arrowFuncNode->SetParent(callExpr); @@ -2647,7 +2647,7 @@ Signature *ETSChecker::FirstMatchSignatures(ir::CallExpression *expr, checker::T auto &signatures = expr->IsETSConstructorCall() ? calleeType->AsETSObjectType()->ConstructSignatures() : calleeType->AsETSFunctionType()->CallSignaturesOfMethodOrArrow(); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + return ResolveTrailingLambda(signatures, expr, expr->Start()); } @@ -2666,7 +2666,7 @@ Signature *ETSChecker::MatchOrderSignatures(ArenaVector &signatures !IsSignatureAccessible(sig, Context().ContainingClass(), Relation())) { continue; } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *concreteSig = ValidateOrderSignature(std::make_tuple(sig, typeArguments, relationFlags), arguments, pos, argTypeInferenceRequired, signatures.size() == 1); @@ -2737,7 +2737,7 @@ Signature *ETSChecker::ValidateOrderSignature( auto count = std::min(signature->ArgCount(), argCount); // Check all required formal parameter(s) first - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + if (!ValidateOrderSignatureRequiredParams(signature, arguments, flags, argTypeInferenceRequired) || !signatureMatchContext.ValidSignatureMatchStatus()) { return nullptr; @@ -2825,7 +2825,7 @@ bool ETSChecker::ValidateOrderSignatureRequiredParams(Signature *substitutedSig, return false; } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + if (!ValidateOrderSignatureInvocationContext(substitutedSig, argument, index, flags)) { return false; } @@ -2855,7 +2855,7 @@ bool ETSChecker::ValidateOrderSignatureInvocationContext(Signature *substitutedS std::size_t index, TypeRelationFlag flags) { Type *targetType = substitutedSig->Params()[index]->TsType(); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + Type *argumentType = argument->Check(this); flags |= TypeRelationFlag::ONLY_CHECK_WIDENING; @@ -2870,21 +2870,21 @@ bool ETSChecker::ValidateOrderSignatureInvocationContext(Signature *substitutedS Signature *ETSChecker::ResolveTrailingLambda(ArenaVector &signatures, ir::CallExpression *callExpr, const lexer::SourcePosition &pos, const TypeRelationFlag reportFlag) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto arguments = ExtendArgumentsWithFakeLamda(callExpr); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto sig = ResolvePotentialTrailingLambda(callExpr, signatures, arguments); if (sig != nullptr) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + TransformTraillingLambda(callExpr, sig); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + TrailingLambdaTypeInference(sig, callExpr->Arguments()); UpdateDeclarationFromSignature(callExpr, sig); callExpr->SetIsTrailingCall(true); return sig; } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + sig = MatchOrderSignatures(signatures, callExpr->TypeParams(), callExpr->Arguments(), pos, reportFlag); if (sig != nullptr) { EnsureValidCurlyBrace(callExpr); @@ -2913,7 +2913,7 @@ Signature *ETSChecker::ResolvePotentialTrailingLambda(ir::CallExpression *callEx auto *currentReceiver = candidateFunctionType->Params()[0]; trailingLambda->Function()->EmplaceParams(currentReceiver); sigContainLambdaWithReceiverAsParam.emplace_back(sig); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + signature = MatchOrderSignatures(sigContainLambdaWithReceiverAsParam, callExpr->TypeParams(), arguments, callExpr->Start(), TypeRelationFlag::NO_THROW | TypeRelationFlag::NO_CHECK_TRAILING_LAMBDA); @@ -2923,7 +2923,7 @@ Signature *ETSChecker::ResolvePotentialTrailingLambda(ir::CallExpression *callEx sigContainLambdaWithReceiverAsParam.clear(); trailingLambda->Function()->ClearParams(); } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + return MatchOrderSignatures(normalSig, callExpr->TypeParams(), arguments, callExpr->Start(), TypeRelationFlag::NO_THROW | TypeRelationFlag::NO_CHECK_TRAILING_LAMBDA); } diff --git a/ets2panda/checker/ets/helpers.cpp b/ets2panda/checker/ets/helpers.cpp index 7c7f91dbef..73de5fbd49 100644 --- a/ets2panda/checker/ets/helpers.cpp +++ b/ets2panda/checker/ets/helpers.cpp @@ -308,7 +308,7 @@ Type *ETSChecker::ResolveIdentifier(ir::Identifier *ident) // find the reference in the global class first, then in the global scope resolved = FindVariableInGlobal(ident, options); if (UNLIKELY(resolved == nullptr && debugInfoPlugin_ != nullptr)) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + resolved = debugInfoPlugin_->FindIdentifier(ident); } } @@ -332,7 +332,7 @@ Type *ETSChecker::ResolveIdentifier(ir::Identifier *ident) } ident->SetVariable(resolved); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + ValidateResolvedIdentifier(ident); ValidatePropertyAccess(resolved, Context().ContainingClass(), ident->Start()); @@ -594,7 +594,7 @@ checker::Type *ETSChecker::CheckArrayElements(ir::ArrayExpression *init) : GlobalDoubleBuiltinType() : CreateETSUnionType(std::move(elementTypes)); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + return CreateETSResizableArrayType(elementType); } @@ -681,7 +681,7 @@ void ETSChecker::InferAliasLambdaType(ir::TypeNode *localTypeAnnotation, ir::Arr ir::ScriptFunction *const lambda = arrowFuncExpr->Function(); if (lambda->Params().size() == localTypeAnnotation->AsETSFunctionType()->Params().size() && NeedTypeInference(lambda)) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + InferTypesForLambda(lambda, localTypeAnnotation->AsETSFunctionType()); } } @@ -770,7 +770,7 @@ static bool SetPreferredTypeForExpression(ETSChecker *checker, ir::Identifier *i } if (typeAnnotation != nullptr && init->IsArrowFunctionExpression()) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + checker->InferAliasLambdaType(typeAnnotation, init->AsArrowFunctionExpression()); } @@ -971,7 +971,7 @@ checker::Type *ETSChecker::CheckVariableDeclaration(ir::Identifier *ident, ir::T checker::Type *initType = nullptr; if (init != nullptr) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + if (!CheckInit(ident, typeAnnotation, init, annotationType, bindingVar)) { init->SetTsType(GlobalTypeError()); } else { @@ -1038,7 +1038,7 @@ void ETSChecker::VariableTypeFromInitializer(varbinder::Variable *variable, Type static checker::Type *ResolveGetter(checker::ETSChecker *checker, ir::MemberExpression *const expr, ETSFunctionType *funcType) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto signature = checker->FindRelativeExtensionGetter(expr, funcType); if (signature != nullptr) { return signature->ReturnType(); @@ -1074,7 +1074,7 @@ Signature *ETSChecker::FindRelativeExtensionGetter(ir::MemberExpression *const e ArenaVector arguments(ProgramAllocator()->Adapter()); arguments.insert(arguments.begin(), expr->Object()); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + Signature *signature = ValidateSignatures(funcType->GetExtensionAccessorSigs(), nullptr, arguments, expr->Start(), "call", TypeRelationFlag::NO_THROW); if (signature != nullptr) { @@ -1098,12 +1098,12 @@ Signature *ETSChecker::FindRelativeExtensionSetter(ir::MemberExpression *expr, E arguments.insert(arguments.begin(), expr->Object()); if (expr->Parent()->IsAssignmentExpression()) { arguments.emplace_back(expr->Parent()->AsAssignmentExpression()->Right()); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + signature = ValidateSignatures(funcType->GetExtensionAccessorSigs(), nullptr, arguments, expr->Start(), "call", TypeRelationFlag::NO_THROW); } else { // When handle ++a.m, a.m++, is mean to check whether a.m(xx, 1) existed. - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + Type *getterReturnType = ResolveGetter(this, expr, funcType); expr->SetTsType(getterReturnType); arguments.emplace_back(expr); @@ -1135,7 +1135,7 @@ checker::Type *ETSChecker::GetExtensionAccessorReturnType(ir::MemberExpression * LogError(diagnostic::EXTENSION_GETTER_INVALID_CTX, {}, assignExpr->Start()); return GlobalTypeError(); } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto signature = FindRelativeExtensionSetter(expr, eAccType); if (signature != nullptr && !expr->Parent()->IsUpdateExpression()) { // for a.m += otherExpr, we need to validateSignature again. @@ -1145,7 +1145,7 @@ checker::Type *ETSChecker::GetExtensionAccessorReturnType(ir::MemberExpression * arguments.emplace_back(expr->Object()); arguments.emplace_back(expr->Parent()->AsAssignmentExpression()->Right()); signature = - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + ValidateSignatures(candidateSig, nullptr, arguments, expr->Start(), "call", TypeRelationFlag::NO_THROW); } @@ -1155,7 +1155,7 @@ checker::Type *ETSChecker::GetExtensionAccessorReturnType(ir::MemberExpression * } } expr->SetExtensionAccessorType(eAccType); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + return ResolveGetter(this, expr, eAccType); } @@ -1682,7 +1682,7 @@ Type *ETSChecker::HandleTypeAlias(ir::Expression *const name, const ir::TSTypePa } if (typeParams == nullptr && typeAliasNode->TypeParams() == nullptr) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + return GetReferencedTypeBase(name); } @@ -1695,7 +1695,7 @@ Type *ETSChecker::HandleTypeAlias(ir::Expression *const name, const ir::TSTypePa } } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + Type *const aliasType = GetReferencedTypeBase(name); auto substitution = Substitution {}; auto relation = Relation(); @@ -1722,7 +1722,7 @@ Type *ETSChecker::HandleTypeAlias(ir::Expression *const name, const ir::TSTypePa } } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + ValidateGenericTypeAliasForClonedNode(typeAliasNode->AsTSTypeAliasDeclaration(), typeParams); return aliasType->Substitute(Relation(), &substitution); @@ -1913,7 +1913,7 @@ Type *ETSChecker::GetReferencedTypeBase(ir::Expression *name) ES2PANDA_ASSERT(name->IsIdentifier()); if (name->AsIdentifier()->Variable() == nullptr) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + VarBinder()->AsETSBinder()->LookupTypeReference(name->AsIdentifier()); } @@ -2666,7 +2666,7 @@ void ETSChecker::InferTypesForLambda(ir::ScriptFunction *lambda, ir::ETSFunction continue; } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + Type *inferredType = calleeType->Params()[i]->AsETSParameterExpression()->TypeAnnotation()->Check(this); bool isPrimitive = inferredType != nullptr && inferredType->IsETSPrimitiveType(); if (!isPrimitive && maybeSubstitutedFunctionSig != nullptr) { @@ -2759,7 +2759,7 @@ ir::Expression *ETSChecker::GenerateImplicitInstantiateArg(const std::string &cl std::string implicitInstantiateArgument = "()=>{return new " + className + "()}"; parser::Program program(ProgramAllocator(), VarBinder()); auto parser = parser::ETSParser(&program, nullptr, DiagnosticEngine()); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *argExpr = parser.CreateExpression(implicitInstantiateArgument); // NOTE(kaskov): #23399 We temporary delete SourceRange of all artificially created nodes (not from original // Lexer()), because all errors, which created by this code, will got a segfault. That caused because Program exist @@ -2818,19 +2818,19 @@ void ETSChecker::GenerateGetterSetterBody(ArenaVector &stmts, A ir::Expression *baseExpression; if ((field->Modifiers() & ir::ModifierFlags::SUPER_OWNER) != 0U) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + baseExpression = ProgramAllocator()->New(); } else { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + baseExpression = ProgramAllocator()->New(); } baseExpression->SetParent(classDef); baseExpression->SetTsType(classDef->TsType()); auto *memberExpression = - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + ProgramAllocNode(baseExpression, - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + field->Key()->AsIdentifier()->Clone(ProgramAllocator(), nullptr), ir::MemberExpressionKind::PROPERTY_ACCESS, false, false); memberExpression->SetTsType(field->TsType()); @@ -2841,15 +2841,15 @@ void ETSChecker::GenerateGetterSetterBody(ArenaVector &stmts, A } if (!isSetter) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + stmts.push_back(ProgramAllocNode(memberExpression)); return; } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *paramIdent = field->Key()->AsIdentifier()->Clone(ProgramAllocator(), nullptr); if (field->TypeAnnotation() != nullptr) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *const typeAnnotation = field->TypeAnnotation()->Clone(ProgramAllocator(), paramIdent); paramIdent->SetTsTypeAnnotation(typeAnnotation); ReInitScopesForTypeAnnotation(this, typeAnnotation, paramScope); @@ -2857,7 +2857,7 @@ void ETSChecker::GenerateGetterSetterBody(ArenaVector &stmts, A paramIdent->SetTsType(field->TsType()); } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *paramExpression = ProgramAllocNode(paramIdent, false, ProgramAllocator()); paramExpression->SetRange(paramIdent->Range()); @@ -2870,20 +2870,20 @@ void ETSChecker::GenerateGetterSetterBody(ArenaVector &stmts, A paramExpression->SetVariable(paramVar); params.push_back(paramExpression); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto ident = ProgramAllocNode(paramExpression->Ident()->Name(), ProgramAllocator()); ident->SetVariable(paramExpression->Variable()); ident->SetTsTypeAnnotation(nullptr); auto *assignmentExpression = - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + ProgramAllocNode(memberExpression, ident, lexer::TokenType::PUNCTUATOR_SUBSTITUTION); ident->SetParent(assignmentExpression); assignmentExpression->SetTsType(paramVar->TsType()); assignmentExpression->SetRange({field->Start(), field->End()}); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + stmts.push_back(ProgramAllocNode(assignmentExpression)); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + stmts.push_back(ProgramAllocator()->New(nullptr)); } @@ -2916,25 +2916,25 @@ static std::tuple params(checker->ProgramAllocator()->Adapter()); ArenaVector stmts(checker->ProgramAllocator()->Adapter()); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + checker->GenerateGetterSetterBody(stmts, params, field, paramScope, isSetter); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto funcFlags = isSetter ? ir::ScriptFunctionFlags::SETTER : ir::ScriptFunctionFlags::GETTER | ir::ScriptFunctionFlags::HAS_RETURN; auto *returnTypeAnn = isSetter || field->TypeAnnotation() == nullptr ? nullptr - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + : field->TypeAnnotation()->Clone(checker->ProgramAllocator(), nullptr); ReInitScopesForTypeAnnotation(checker, returnTypeAnn, paramScope); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + ir::ModifierFlags modifierFlag = (ir::ModifierFlags::PUBLIC | static_cast(property->Modifiers() & ir::ModifierFlags::DECLARE) | (isSetter ? ir::ModifierFlags::SETTER : ir::ModifierFlags::GETTER)); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *func = checker->ProgramAllocNode( checker->ProgramAllocator(), - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + ir::ScriptFunction::ScriptFunctionData {GenGetterSetterBodyHelper(checker, stmts, property, functionScope), ir::FunctionSignature(nullptr, std::move(params), returnTypeAnn), funcFlags, modifierFlag}); @@ -2948,18 +2948,18 @@ ir::MethodDefinition *ETSChecker::GenerateDefaultGetterSetter(ir::ClassProperty ETSChecker *checker) { auto [func, functionScope, modifierFlag] = - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + GenGetterSetterScriptFunc(property, field, classScope, isSetter, checker); func->SetRange(field->Range()); func->SetScope(functionScope); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *methodIdent = property->Key()->AsIdentifier()->Clone(checker->ProgramAllocator(), nullptr); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *funcExpr = checker->ProgramAllocNode(func); CHECK_NOT_NULL(funcExpr); funcExpr->SetRange(func->Range()); func->AddFlag(ir::ScriptFunctionFlags::METHOD); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *method = checker->ProgramAllocNode( isSetter ? ir::MethodDefinitionKind::SET : ir::MethodDefinitionKind::GET, methodIdent, funcExpr, modifierFlag, checker->ProgramAllocator(), false); @@ -2977,7 +2977,7 @@ ir::MethodDefinition *ETSChecker::GenerateDefaultGetterSetter(ir::ClassProperty method->SetRange(field->Range()); auto *methodFunc = method->Function(); CHECK_NOT_NULL(methodFunc); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + methodFunc->SetIdent(methodId->Clone(checker->ProgramAllocator(), nullptr)); methodFunc->AddModifier(method->Modifiers()); method->SetVariable(var); @@ -3001,7 +3001,7 @@ ir::ClassProperty *GetImplementationClassProp(ETSChecker *checker, ir::ClassProp if (!isSuperOwner) { auto *const classDef = classType->GetDeclNode()->AsClassDefinition(); auto *const scope = checker->Scope()->AsClassScope(); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *const classProp = checker->ClassPropToImplementationProp( interfaceProp->Clone(checker->ProgramAllocator(), originalProp->Parent()), scope); classType->AddProperty(classProp->Key()->Variable()->AsLocalVariable()); @@ -3060,7 +3060,7 @@ void ETSChecker::SetupGetterSetterFlags(ir::ClassProperty *originalProp, ETSObje void ETSChecker::GenerateGetterSetterPropertyAndMethod(ir::ClassProperty *originalProp, ETSObjectType *classType) { auto *const classDef = classType->GetDeclNode()->AsClassDefinition(); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *interfaceProp = originalProp->Clone(ProgramAllocator(), originalProp->Parent()); interfaceProp->ClearModifier(ir::ModifierFlags::GETTER_SETTER); @@ -3072,10 +3072,10 @@ void ETSChecker::GenerateGetterSetterPropertyAndMethod(ir::ClassProperty *origin ReInitScopesForTypeAnnotation(this, interfaceProp->TypeAnnotation(), scope); compiler::InitScopesPhaseETS::RunExternalNode(interfaceProp->Value(), VarBinder()); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *const classProp = GetImplementationClassProp(this, interfaceProp, originalProp, classType); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + ir::MethodDefinition *getter = GenerateDefaultGetterSetter(interfaceProp, classProp, scope, false, this); classDef->EmplaceBody(getter); @@ -3083,7 +3083,7 @@ void ETSChecker::GenerateGetterSetterPropertyAndMethod(ir::ClassProperty *origin ir::MethodDefinition *setter = !classProp->IsConst() - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + ? GenerateDefaultGetterSetter(interfaceProp, classProp, Scope()->AsClassScope(), true, this) : nullptr; @@ -3120,12 +3120,12 @@ void ETSChecker::CreateTransformedCallee(ir::Identifier *ident, ir::Identifier * ir::MemberExpression *transformedCallee = nullptr; classId->SetRange(ident->Range()); if (ident->Parent()->IsMemberExpression()) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + transformedCallee = ProgramAllocNode( ident->Parent()->AsMemberExpression(), methodId, ir::MemberExpressionKind::PROPERTY_ACCESS, false, false); ident->Parent()->AsMemberExpression()->SetParent(transformedCallee); } else { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + transformedCallee = ProgramAllocNode( classId, methodId, ir::MemberExpressionKind::PROPERTY_ACCESS, false, false); transformedCallee->SetParent(callExpr); @@ -3174,26 +3174,26 @@ bool ETSChecker::TryTransformingToStaticInvoke(ir::Identifier *const ident, cons ident->Start()); return true; } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *classId = ProgramAllocNode(className, ProgramAllocator()); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *methodId = ProgramAllocNode(propertyName, ProgramAllocator()); if (propertyName == compiler::Signatures::STATIC_INSTANTIATE_METHOD) { methodId->SetVariable(instantiateMethod); } else if (propertyName == compiler::Signatures::STATIC_INVOKE_METHOD) { methodId->SetVariable(invokeMethod); } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + CreateTransformedCallee(ident, classId, methodId, callExpr); if (instantiateMethod != nullptr) { auto lexScope {varbinder::LexicalScope::Enter(VarBinder(), compiler::NearestScope(callExpr))}; - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *argExpr = GenerateImplicitInstantiateArg(std::string(className)); argExpr->SetParent(callExpr); argExpr->SetRange(ident->Range()); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + VarBinder()->AsETSBinder()->HandleCustomNodes(argExpr); auto &arguments = callExpr->Arguments(); @@ -3277,7 +3277,7 @@ void ETSChecker::ETSObjectTypeDeclNode(ETSChecker *checker, ETSObjectType *const } if (declNode->IsClassDefinition() && !declNode->AsClassDefinition()->IsClassDefinitionChecked()) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + checker->CheckClassDefinition(declNode->AsClassDefinition()); } } @@ -3289,10 +3289,10 @@ ir::CallExpression *ETSChecker::CreateExtensionAccessorCall(ETSChecker *checker, if (expr->Object()->IsETSNewClassInstanceExpression()) { args.insert(args.begin(), expr->Object()); callExpr = - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + checker->ProgramAllocNode(expr->Property(), std::move(args), nullptr, false, false); } else { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + callExpr = checker->ProgramAllocNode(expr, std::move(args), nullptr, false, false); } ES2PANDA_ASSERT(callExpr != nullptr); diff --git a/ets2panda/checker/ets/object.cpp b/ets2panda/checker/ets/object.cpp index 7303f27a93..727d4ef625 100644 --- a/ets2panda/checker/ets/object.cpp +++ b/ets2panda/checker/ets/object.cpp @@ -1369,7 +1369,7 @@ void ETSChecker::CheckClassDefinition(ir::ClassDefinition *classDef) ValidateOverriding(classType, classDef->Start()); } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + TransformProperties(classType); CheckClassElement(classDef); @@ -2219,7 +2219,7 @@ ETSFunctionType *ETSChecker::ResolveAccessorTypeByFlag(ir::MemberExpression *con } if (funcType != nullptr && funcType->IsExtensionAccessorType() && - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + FindRelativeExtensionGetter(memberExpr, funcType) != nullptr) { finalRes = funcType; } @@ -2241,7 +2241,7 @@ ETSFunctionType *ETSChecker::ResolveAccessorTypeByFlag(ir::MemberExpression *con } if (funcType != nullptr && funcType->IsExtensionAccessorType() && - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + FindRelativeExtensionSetter(memberExpr, funcType) != nullptr) { finalRes = funcType; } @@ -2263,7 +2263,7 @@ std::vector ETSChecker::ValidateAccessor(ir::MemberExpression * auto *funcType = eAcc != nullptr ? eAcc->TsType()->AsETSFunctionType() : nullptr; auto *propType = oAcc != nullptr ? oAcc->TsType()->AsETSFunctionType() : nullptr; searchFlag = memberExpr->Parent()->IsUpdateExpression() ? searchFlag | PropertySearchFlags::IS_SETTER : searchFlag; - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + ETSFunctionType *finalRes = ResolveAccessorTypeByFlag(memberExpr, propType, funcType, searchFlag); std::vector resolveRes = {}; if (finalRes == nullptr) { @@ -2362,7 +2362,7 @@ std::vector ETSChecker::ResolveMemberReference(const ir::Member if (target->GetDeclNode() != nullptr && target->GetDeclNode()->IsClassDefinition() && !target->GetDeclNode()->AsClassDefinition()->IsClassDefinitionChecked()) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + this->CheckClassDefinition(target->GetDeclNode()->AsClassDefinition()); } const auto *const targetRef = GetTargetRef(memberExpr); @@ -2392,7 +2392,7 @@ std::vector ETSChecker::ResolveMemberReference(const ir::Member // Note: validate originalAccessor and extensionAccessor. if ((IsVariableGetterSetter(prop) || IsVariableExtensionAccessor(globalFunctionVar)) && ((searchFlag & PropertySearchFlags::IS_GETTER) != 0 || (searchFlag & PropertySearchFlags::IS_SETTER) != 0)) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + return ValidateAccessor(const_cast(memberExpr), prop, globalFunctionVar, searchFlag); } @@ -2597,7 +2597,7 @@ void ETSChecker::TransformProperties(ETSObjectType *classType) } CheckReadonlyClassPropertyInImplementedInterface(classType, field); classType->RemoveProperty(field); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + GenerateGetterSetterPropertyAndMethod(originalProp, classType); } @@ -2674,21 +2674,21 @@ void ETSChecker::AddElementsToModuleObject(ETSObjectType *moduleObj, const util: static Type *GetApparentTypeUtilityTypes(checker::ETSChecker *checker, Type *type) { if (type->IsETSReadonlyType()) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + return checker->GetApparentType(type->AsETSReadonlyType()->GetUnderlying()->GetConstraintType()); } if (type->IsETSAwaitedType()) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + return checker->GetApparentType(type->AsETSAwaitedType()->GetUnderlying()->GetConstraintType()); } if (type->IsETSPartialTypeParameter()) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + return checker->CreatePartialType( - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + checker->GetApparentType(type->AsETSPartialTypeParameter()->GetUnderlying()->GetConstraintType())); } if (type->IsETSNonNullishType()) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + return checker->GetApparentType(type->AsETSNonNullishType()->GetUnderlying()->GetConstraintType()); } return type; @@ -2717,7 +2717,7 @@ Type *ETSChecker::GetApparentType(Type *type) } if (type->IsETSTypeParameter()) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + return cached(GetApparentType(type->AsETSTypeParameter()->GetConstraintType())); } @@ -2725,16 +2725,16 @@ Type *ETSChecker::GetApparentType(Type *type) // For the recursive type aliases its target type is not ready at the moment of union type creation // (and assemblyLUB type constructing). if (auto *targetType = type->AsETSTypeAliasType()->GetTargetType(); targetType != nullptr) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + return cached(GetApparentType(targetType)); } return type; } if (type->IsETSNonNullishType()) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + return cached( - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + GetNonNullishType(GetApparentType(type->AsETSNonNullishType()->GetUnderlying()->GetConstraintType()))); } if (type->IsETSArrayType()) { @@ -2747,19 +2747,19 @@ Type *ETSChecker::GetApparentType(Type *type) bool differ = false; ArenaVector newConstituent(ProgramAllocator()->Adapter()); for (auto const &ct : type->AsETSUnionType()->ConstituentTypes()) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + newConstituent.push_back(GetApparentType(ct)); differ |= (newConstituent.back() != ct); } return cached(differ ? CreateETSUnionType(std::move(newConstituent)) : type); } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + return cached(GetApparentTypeUtilityTypes(this, type)); } Type const *ETSChecker::GetApparentType(Type const *type) const { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + return const_cast(const_cast(this)->GetApparentType(const_cast(type))); } diff --git a/ets2panda/checker/ets/utilityTypeHandlers.cpp b/ets2panda/checker/ets/utilityTypeHandlers.cpp index 0ee26101bb..a5cb179716 100644 --- a/ets2panda/checker/ets/utilityTypeHandlers.cpp +++ b/ets2panda/checker/ets/utilityTypeHandlers.cpp @@ -82,7 +82,7 @@ Type *ETSChecker::HandleUtilityTypeParameterNode(const ir::TSTypeParameterInstan } if (utilityType == compiler::Signatures::PARTIAL_TYPE_NAME) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + return CreatePartialType(baseType); } @@ -219,7 +219,7 @@ static std::pair GetPartialClassPro template static T *CloneNodeIfNotNullptr(T *node, ArenaAllocator *allocator) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + return node != nullptr ? node->Clone(allocator, nullptr) : nullptr; } @@ -231,7 +231,7 @@ Type *ETSChecker::CreatePartialType(Type *const typeToBePartial) } if (typeToBePartial->IsGradualType()) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + return CreatePartialType(typeToBePartial->AsGradualType()->GetBaseType()); } @@ -240,11 +240,11 @@ Type *ETSChecker::CreatePartialType(Type *const typeToBePartial) } if (typeToBePartial->IsETSUnionType()) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + return HandleUnionForPartialType(typeToBePartial->AsETSUnionType()); } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + return CreatePartialTypeClass(typeToBePartial->AsETSObjectType(), typeToBePartial->Variable()->Declaration()->Node()); } @@ -271,11 +271,11 @@ Type *ETSChecker::CreatePartialTypeClass(ETSObjectType *typeToBePartial, ir::Ast } if (typeDeclNode->IsTSInterfaceDeclaration()) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + return HandlePartialInterface(typeDeclNode->AsTSInterfaceDeclaration(), typeToBePartial); } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + ir::ClassDefinition *partialClassDef = CreateClassPrototype(partialName, partialProgram); partialClassDef->SetInternalName(partialQualifiedName); @@ -300,7 +300,7 @@ Type *ETSChecker::CreatePartialTypeClass(ETSObjectType *typeToBePartial, ir::Ast partialClassDef->Variable()); } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + return CreatePartialTypeClassDef(partialClassDef, typeDeclNode->AsClassDefinition(), typeToBePartial, recordTable); } @@ -310,7 +310,7 @@ Type *ETSChecker::HandlePartialInterface(ir::TSInterfaceDeclaration *interfaceDe auto const [partialProgram, recordTable] = GetPartialClassProgram(this, interfaceDecl); auto *const partialInterDecl = - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + CreateInterfaceProto(partialName, partialProgram, interfaceDecl->IsStatic(), interfaceDecl->Modifiers()); partialInterDecl->SetInternalName(partialQualifiedName); @@ -328,7 +328,7 @@ Type *ETSChecker::HandlePartialInterface(ir::TSInterfaceDeclaration *interfaceDe auto savedScope = VarBinder()->TopScope(); VarBinder()->ResetTopScope(partialProgram->GlobalScope()); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *partialType = CreatePartialTypeInterfaceDecl(interfaceDecl, typeToBePartial, partialInterDecl); VarBinder()->ResetTopScope(savedScope); ES2PANDA_ASSERT(partialType != nullptr); @@ -342,14 +342,14 @@ ir::ClassProperty *ETSChecker::CreateNullishPropertyFromAccessor(ir::MethodDefin { auto *id = accessor->Id(); ES2PANDA_ASSERT(id != nullptr); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *ident = id->Clone(ProgramAllocator(), nullptr); ES2PANDA_ASSERT(accessor->Function() != nullptr); auto modifierFlag = accessor->Function()->IsGetter() && accessor->Overloads().empty() ? ir::ModifierFlags::READONLY : ir::ModifierFlags::NONE; auto *prop = - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + ProgramAllocator()->New(ident, nullptr, nullptr, modifierFlag, ProgramAllocator(), false); ES2PANDA_ASSERT(prop != nullptr); prop->SetParent(newClassDefinition); @@ -361,7 +361,7 @@ ir::ClassProperty *ETSChecker::CreateNullishPropertyFromAccessor(ir::MethodDefin : accessor->Function()->Params()[0]->AsETSParameterExpression()->TypeAnnotation()); if (prop->TypeAnnotation() != nullptr) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + return CreateNullishProperty(prop, newClassDefinition); } @@ -371,10 +371,10 @@ ir::ClassProperty *ETSChecker::CreateNullishPropertyFromAccessor(ir::MethodDefin ES2PANDA_ASSERT(accessor->Function() != nullptr); auto tsType = accessor->Function()->IsGetter() ? callSign->ReturnType() : callSign->Params()[0]->TsType(); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + prop->SetTypeAnnotation(ProgramAllocator()->New(tsType, ProgramAllocator())); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + return CreateNullishProperty(prop, newClassDefinition); } @@ -386,12 +386,12 @@ ir::ClassProperty *ETSChecker::CreateNullishProperty(ir::ClassProperty *const pr // Set value to nullptr to prevent cloning it (as for arrow functions that is not possible yet), we set it // to 'undefined' anyway prop->SetValue(nullptr); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *const propClone = prop->Clone(ProgramAllocator(), newTSInterfaceDefinition->Body())->AsClassProperty(); // Revert original property value prop->SetValue(propSavedValue); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + propClone->SetValue(ProgramAllocator()->New()); auto *propTypeAnn = propClone->TypeAnnotation(); @@ -399,15 +399,15 @@ ir::ClassProperty *ETSChecker::CreateNullishProperty(ir::ClassProperty *const pr // Handle implicit type annotation if (propTypeAnn == nullptr) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + propTypeAnn = ProgramAllocator()->New(prop->TsType(), ProgramAllocator()); } // Create new nullish type types.push_back(propTypeAnn); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + types.push_back(ProgramAllocNode(ProgramAllocator())); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *const unionType = ProgramAllocNode(std::move(types), ProgramAllocator()); propClone->SetTypeAnnotation(unionType); @@ -426,28 +426,28 @@ ir::ClassProperty *ETSChecker::CreateNullishProperty(ir::ClassProperty *const pr // Set value to nullptr to prevent cloning it (as for arrow functions that is not possible yet), we set it // to 'undefined' anyway prop->SetValue(nullptr); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *const propClone = prop->Clone(ProgramAllocator(), newClassDefinition)->AsClassProperty(); propClone->CleanCheckInformation(); // Revert original property value prop->SetValue(propSavedValue); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + propClone->SetValue(ProgramAllocator()->New()); propClone->AsClassProperty()->Value()->Check(this); ir::TypeNode *propertyTypeAnnotation = propClone->TypeAnnotation(); if (propertyTypeAnnotation == nullptr) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + propertyTypeAnnotation = ProgramAllocator()->New(prop->Check(this), ProgramAllocator()); } // Create new nullish type annotation ArenaVector types(ProgramAllocator()->Adapter()); types.push_back(propertyTypeAnnotation); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + types.push_back(ProgramAllocNode(ProgramAllocator())); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + propertyTypeAnnotation = ProgramAllocNode(std::move(types), ProgramAllocator()); propClone->SetTypeAnnotation(propertyTypeAnnotation); propClone->SetTsType(nullptr); @@ -466,17 +466,17 @@ ir::TSTypeParameterDeclaration *ETSChecker::ProcessTypeParamAndGenSubstitution( { ArenaVector typeParams(ProgramAllocator()->Adapter()); if (newTypeParams == nullptr) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + newTypeParams = ProgramAllocNode(std::move(typeParams), typeParams.size()); } for (auto *const classOrInterfaceDefTypeParam : thisTypeParams->Params()) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *newTypeParam = ProgramAllocNode( - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + CloneNodeIfNotNullptr(classOrInterfaceDefTypeParam->Name(), ProgramAllocator()), - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + CloneNodeIfNotNullptr(classOrInterfaceDefTypeParam->Constraint(), ProgramAllocator()), - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + CloneNodeIfNotNullptr(classOrInterfaceDefTypeParam->DefaultType(), ProgramAllocator()), ProgramAllocator()); ES2PANDA_ASSERT(newTypeParam != nullptr); newTypeParams->AddParam(newTypeParam); @@ -497,7 +497,7 @@ ir::TSTypeParameterInstantiation *ETSChecker::CreateNewSuperPartialRefTypeParams return superPartialRefTypeParams; } superPartialRefTypeParams = - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + superRef->AsETSTypeReference()->Part()->TypeParams()->Clone(ProgramAllocator(), nullptr); superPartialRefTypeParams->SetTsType(nullptr); auto superRefParams = superPartialRefTypeParams->Params(); @@ -511,12 +511,12 @@ ir::TSTypeParameterInstantiation *ETSChecker::CreateNewSuperPartialRefTypeParams auto it = likeSubstitution->find(type->AsETSTypeParameter()->GetDeclNode()); if (it != likeSubstitution->end()) { auto *typeParamRefPart = - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + ProgramAllocNode(it->second->Name()->Clone(ProgramAllocator(), nullptr), ProgramAllocator()); ES2PANDA_ASSERT(typeParamRefPart != nullptr); typeParamRefPart->Name()->SetParent(typeParamRefPart); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *typeParamRef = ProgramAllocNode(typeParamRefPart, ProgramAllocator()); ES2PANDA_ASSERT(typeParamRef != nullptr); typeParamRefPart->SetParent(typeParamRef); @@ -536,12 +536,12 @@ ir::ETSTypeReference *ETSChecker::BuildSuperPartialTypeReference( auto *superPartialDeclNode = superPartialType->AsETSObjectType()->GetDeclNode(); auto *clonedId = superPartialDeclNode->IsClassDefinition() - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + ? superPartialDeclNode->AsClassDefinition()->Ident()->Clone(ProgramAllocator(), nullptr) - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + : superPartialDeclNode->AsTSInterfaceDeclaration()->Id()->Clone(ProgramAllocator(), nullptr); auto *superPartialRefPart = - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + ProgramAllocNode(clonedId, superPartialRefTypeParams, nullptr, ProgramAllocator()); ES2PANDA_ASSERT(superPartialRefPart != nullptr); @@ -550,7 +550,7 @@ ir::ETSTypeReference *ETSChecker::BuildSuperPartialTypeReference( superPartialRefTypeParams->SetParent(superPartialRefPart); } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + superPartialRef = ProgramAllocNode(superPartialRefPart, ProgramAllocator()); superPartialRefPart->SetParent(superPartialRef); } @@ -564,19 +564,19 @@ void ETSChecker::CreatePartialClassDeclaration(ir::ClassDefinition *const newCla if (classDef->TypeParams() != nullptr) { ArenaVector typeParams(ProgramAllocator()->Adapter()); for (auto *const classDefTypeParam : classDef->TypeParams()->Params()) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *const newTypeParam = ProgramAllocNode( - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + CloneNodeIfNotNullptr(classDefTypeParam->Name(), ProgramAllocator()), - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + CloneNodeIfNotNullptr(classDefTypeParam->Constraint(), ProgramAllocator()), - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + CloneNodeIfNotNullptr(classDefTypeParam->DefaultType(), ProgramAllocator()), ProgramAllocator()); typeParams.emplace_back(newTypeParam); } auto *const newTypeParams = - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + ProgramAllocNode(std::move(typeParams), classDef->TypeParams()->RequiredParams()); ES2PANDA_ASSERT(newTypeParams != nullptr); @@ -596,7 +596,7 @@ void ETSChecker::CreatePartialClassDeclaration(ir::ClassDefinition *const newCla continue; } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *const newProp = CreateNullishProperty(prop->AsClassProperty(), newClassDefinition); // Put the new property into the class declaration @@ -621,7 +621,7 @@ void ETSChecker::CreatePartialClassDeclaration(ir::ClassDefinition *const newCla } if (method->TsType() != nullptr && !method->TsType()->IsTypeError()) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + newClassDefinition->EmplaceBody(CreateNullishPropertyFromAccessor(method, newClassDefinition)); } } @@ -646,11 +646,11 @@ static void SetupFunctionParams(ir::ScriptFunction *function, varbinder::Functio paramExpr->Ident()->SetTsTypeAnnotation(nullptr); } else { auto *unionType = - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + checker->ProgramAllocNode( ArenaVector( {paramExpr->Ident()->TypeAnnotation(), - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + checker->ProgramAllocNode(checker->ProgramAllocator())}, checker->ProgramAllocator()->Adapter()), checker->ProgramAllocator()); @@ -683,7 +683,7 @@ ir::MethodDefinition *ETSChecker::CreateNullishAccessor(ir::MethodDefinition *co VarBinder()->AddMandatoryParam(varbinder::TypedBinder::MANDATORY_PARAM_THIS); } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + ir::MethodDefinition *nullishAccessor = accessor->Clone(ProgramAllocator(), interface->Body()); auto *decl = ProgramAllocator()->New(ProgramAllocator(), nullishAccessor->Id()->Name(), @@ -698,7 +698,7 @@ ir::MethodDefinition *ETSChecker::CreateNullishAccessor(ir::MethodDefinition *co auto *function = nullishAccessor->Function(); function->SetVariable(var); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + function->SetIdent(nullishAccessor->Id()->Clone(ProgramAllocator(), function)); function->SetScope(functionScope); paramScope->BindNode(function); @@ -707,14 +707,14 @@ ir::MethodDefinition *ETSChecker::CreateNullishAccessor(ir::MethodDefinition *co if (function->IsGetter()) { auto *propTypeAnn = function->ReturnTypeAnnotation(); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + function->SetReturnTypeAnnotation(ProgramAllocNode( - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + ArenaVector({propTypeAnn, ProgramAllocNode(ProgramAllocator())}, ProgramAllocator()->Adapter()), ProgramAllocator())); } else { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + SetupFunctionParams(function, paramScope, this); } @@ -730,21 +730,21 @@ ir::TSInterfaceDeclaration *ETSChecker::CreateInterfaceProto(util::StringView na const auto globalCtx = varbinder::LexicalScope::Enter(VarBinder(), interfaceDeclProgram->GlobalScope()); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *const interfaceId = ProgramAllocNode(name, ProgramAllocator()); const auto [decl, var] = VarBinder()->NewVarDecl(interfaceId->Start(), ProgramAllocator(), interfaceId->Name()); ES2PANDA_ASSERT(interfaceId != nullptr); interfaceId->SetVariable(var); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *body = ProgramAllocNode(ArenaVector(ProgramAllocator()->Adapter())); ArenaVector extends(ProgramAllocator()->Adapter()); ArenaVector typeParams(ProgramAllocator()->Adapter()); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *newTypeParams = ProgramAllocNode(std::move(typeParams), typeParams.size()); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto partialInterface = ProgramAllocNode( ProgramAllocator(), std::move(extends), ir::TSInterfaceDeclaration::ConstructorData {interfaceId, newTypeParams, body, isStatic, @@ -810,14 +810,14 @@ void ETSChecker::CreatePartialTypeInterfaceMethods(ir::TSInterfaceDeclaration *c ES2PANDA_ASSERT((func->Flags() & ir::ScriptFunctionFlags::OVERLOAD) == 0U); if (func->IsGetter() || func->IsSetter()) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + addNullishAccessor(CreateNullishAccessor(method, partialInterface)); } for (auto *overload : method->Overloads()) { ES2PANDA_ASSERT(overload->Function() != nullptr); if (overload->Function()->IsGetter() || overload->Function()->IsSetter()) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + addNullishAccessor(CreateNullishAccessor(overload, partialInterface)); } } @@ -828,7 +828,7 @@ Type *ETSChecker::CreatePartialTypeInterfaceDecl(ir::TSInterfaceDeclaration *con ETSObjectType *const typeToBePartial, ir::TSInterfaceDeclaration *partialInterface) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + CreatePartialTypeInterfaceMethods(interfaceDecl, partialInterface); // Create nullish properties of the partial class // Build the new Partial class based on the 'T' type parameter of 'Partial' @@ -836,7 +836,7 @@ Type *ETSChecker::CreatePartialTypeInterfaceDecl(ir::TSInterfaceDeclaration *con ProgramAllocator()->New>(ProgramAllocator()->Adapter()); if (interfaceDecl->TypeParams() != nullptr) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + ProcessTypeParamAndGenSubstitution(interfaceDecl->TypeParams(), likeSubstitution, partialInterface->TypeParams()); } @@ -857,18 +857,18 @@ Type *ETSChecker::CreatePartialTypeInterfaceDecl(ir::TSInterfaceDeclaration *con // Create partial type for super type for (auto *extend : interfaceDecl->Extends()) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *t = extend->Expr()->AsETSTypeReference()->Part()->GetType(this); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + if (auto *superPartialType = CreatePartialType(t); superPartialType != nullptr) { ir::TSTypeParameterInstantiation *superPartialRefTypeParams = - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + CreateNewSuperPartialRefTypeParamsDecl(likeSubstitution, superPartialType, extend->Expr()); ir::ETSTypeReference *superPartialRef = - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + BuildSuperPartialTypeReference(superPartialType, superPartialRefTypeParams); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + partialInterface->EmplaceExtends(ProgramAllocNode(superPartialRef)); partialInterface->Extends().back()->SetParent(partialInterface); } @@ -889,7 +889,7 @@ void ETSChecker::CreateConstructorForPartialType(ir::ClassDefinition *const part const auto classCtx = varbinder::LexicalScope::Enter(VarBinder(), scope); // Create ctor - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *const ctor = CreateNonStaticClassInitializer(classCtx.GetScope(), recordTable); auto *const ctorFunc = ctor->Function(); if (partialClassDef->IsDeclare()) { @@ -916,7 +916,7 @@ ir::ClassDefinition *ETSChecker::CreateClassPrototype(util::StringView name, par varbinder::LexicalScope::Enter(VarBinder(), classDeclProgram->GlobalScope()); // Create class name, and declaration variable - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *const classId = ProgramAllocNode(name, ProgramAllocator()); ES2PANDA_ASSERT(classId != nullptr); const auto [decl, var] = VarBinder()->NewVarDecl(classId->Start(), classId->Name()); @@ -925,7 +925,7 @@ ir::ClassDefinition *ETSChecker::CreateClassPrototype(util::StringView name, par // Create class definition node const auto classCtx = varbinder::LexicalScope(VarBinder()); auto *const classDef = - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + ProgramAllocNode(ProgramAllocator(), classId, ir::ClassDefinitionModifiers::DECLARATION, ir::ModifierFlags::NONE, Language(Language::Id::ETS)); ES2PANDA_ASSERT(classDef != nullptr); @@ -933,7 +933,7 @@ ir::ClassDefinition *ETSChecker::CreateClassPrototype(util::StringView name, par classDef->SetVariable(var); // Create class declaration node - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *const classDecl = ProgramAllocNode(classDef, ProgramAllocator()); ES2PANDA_ASSERT(classDecl != nullptr); classDecl->SetParent(classDeclProgram->Ast()); @@ -979,7 +979,7 @@ Type *ETSChecker::HandleUnionForPartialType(ETSUnionType *const typeToBePartial) for (auto *const typeFromUnion : unionTypeNode->ConstituentTypes()) { if ((typeFromUnion->Variable() != nullptr) && (typeFromUnion->Variable()->Declaration() != nullptr)) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + newTypesForUnion.emplace_back(CreatePartialType(typeFromUnion)); } else { newTypesForUnion.emplace_back(typeFromUnion); @@ -993,25 +993,25 @@ Type *ETSChecker::CreatePartialTypeClassDef(ir::ClassDefinition *const partialCl ir::ClassDefinition *const classDef, ETSObjectType *const typeToBePartial, varbinder::RecordTable *const recordTableToUse) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + CreatePartialClassDeclaration(partialClassDef, classDef); // Run checker auto *const partialType = partialClassDef->Check(this)->AsETSObjectType(); for (auto *interface : typeToBePartial->Interfaces()) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + partialType->AddInterface(CreatePartialType(interface)->AsETSObjectType()); } partialType->SetBaseType(typeToBePartial); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + CreateConstructorForPartialType(partialClassDef, partialType, recordTableToUse); // Create partial type for super type if (typeToBePartial != GlobalETSObjectType()) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *const partialSuper = CreatePartialType((classDef->Super() == nullptr || !classDef->Super()->IsTypeNode()) ? GlobalETSObjectType() : classDef->Super()->TsType()); @@ -1038,15 +1038,15 @@ std::pair ETSChecker::CreateScriptFuncti ir::ScriptFunction *func {}; ir::Identifier *id {}; - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *const body = ProgramAllocNode(ProgramAllocator(), std::move(statements)); ES2PANDA_ASSERT(body != nullptr); body->SetScope(scope); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + id = ProgramAllocNode(util::UString(std::string("constructor"), ProgramAllocator()).View(), ProgramAllocator()); auto funcSignature = ir::FunctionSignature(nullptr, std::move(params), nullptr); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + func = ProgramAllocNode( ProgramAllocator(), ir::ScriptFunction::ScriptFunctionData {body, std::move(funcSignature), ir::ScriptFunctionFlags::CONSTRUCTOR | @@ -1073,7 +1073,7 @@ ir::MethodDefinition *ETSChecker::CreateNonStaticClassInitializer(varbinder::Cla const auto funcParamCtx = varbinder::LexicalScope::Enter(VarBinder(), paramScope); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto [func, id] = CreateScriptFunctionForConstructor(functionScope); paramScope->BindNode(func); @@ -1087,12 +1087,12 @@ ir::MethodDefinition *ETSChecker::CreateNonStaticClassInitializer(varbinder::Cla VarBinder()->AsETSBinder()->BuildFunctionName(func); VarBinder()->Functions().push_back(functionScope); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *funcExpr = ProgramAllocNode(func); auto *const ctor = - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + ProgramAllocNode(ir::MethodDefinitionKind::CONSTRUCTOR, - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + id->Clone(ProgramAllocator(), classScope->Node()), funcExpr, ir::ModifierFlags::NONE, ProgramAllocator(), false); diff --git a/ets2panda/checker/ets/validateHelpers.cpp b/ets2panda/checker/ets/validateHelpers.cpp index 47363ca056..be1aec08e0 100644 --- a/ets2panda/checker/ets/validateHelpers.cpp +++ b/ets2panda/checker/ets/validateHelpers.cpp @@ -110,7 +110,7 @@ void ETSChecker::ValidateCallExpressionIdentifier(ir::Identifier *const ident, T if (type->IsETSFunctionType()) { return; } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + if (TryTransformingToStaticInvoke(ident, type)) { return; } @@ -200,14 +200,14 @@ void ETSChecker::ValidateResolvedIdentifier(ir::Identifier *const ident) } auto *smartType = Context().GetSmartCast(resolved); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *const resolvedType = GetApparentType(smartType != nullptr ? smartType : GetTypeOfVariable(resolved)); bool isValidResolved = resolved != nullptr && !resolved->Declaration()->PossibleTDZ() && !(resolvedType->IsETSFunctionType() && !resolved->Declaration()->Node()->IsTSTypeAliasDeclaration()); switch (ident->Parent()->Type()) { case ir::AstNodeType::CALL_EXPRESSION: - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + ValidateCallExpressionIdentifier(ident, resolvedType); break; case ir::AstNodeType::ETS_NEW_CLASS_INSTANCE_EXPRESSION: @@ -279,7 +279,7 @@ void ETSChecker::ValidateGenericTypeAliasForClonedNode(ir::TSTypeAliasDeclaratio return; } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *const clonedNode = typeAliasNode->TypeAnnotation()->Clone(Allocator(), typeAliasNode); // Basic check, we really don't want to change the original type nodes, more precise checking should be made @@ -324,7 +324,7 @@ void ETSChecker::ValidateGenericTypeAliasForClonedNode(ir::TSTypeAliasDeclaratio return node; } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + return typeParamType->Clone(Allocator(), nullptr); }, TRANSFORMATION_NAME); diff --git a/ets2panda/evaluate/debugInfoDeserialization/classBuilder.cpp b/ets2panda/evaluate/debugInfoDeserialization/classBuilder.cpp index df3118e7b6..77005fb205 100644 --- a/ets2panda/evaluate/debugInfoDeserialization/classBuilder.cpp +++ b/ets2panda/evaluate/debugInfoDeserialization/classBuilder.cpp @@ -47,10 +47,10 @@ ir::ClassDeclaration *ClassBuilder::Build(parser::Program *program) && BuildFields(classBody); BuildMethods(classBody); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *classId = checker_->AllocNode(className_, allocator); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *classDef = checker_->AllocNode( classId, nullptr, nullptr, ArenaVector(allocator->Adapter()), nullptr, superClass_, ArenaVector(allocator->Adapter()), classModifiers_, modifierFlags_, @@ -59,7 +59,7 @@ ir::ClassDeclaration *ClassBuilder::Build(parser::Program *program) && // Set parents for all class'es fields and methods. classDef->AddProperties(std::move(classBody)); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *classDecl = checker_->AllocNode(classDef, allocator); // Declare everything as exported for correct import resolution. classDecl->AddModifier(ir::ModifierFlags::EXPORT); diff --git a/ets2panda/evaluate/debugInfoDeserialization/methodBuilder.cpp b/ets2panda/evaluate/debugInfoDeserialization/methodBuilder.cpp index 574f543e1c..7da2c9f611 100644 --- a/ets2panda/evaluate/debugInfoDeserialization/methodBuilder.cpp +++ b/ets2panda/evaluate/debugInfoDeserialization/methodBuilder.cpp @@ -99,7 +99,7 @@ ir::AstNode *MethodBuilder::Build() && auto *retStatement = CreateTypedReturnStatement(checker_, returnType_); statements.push_back(retStatement); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *id = checker_->AllocNode(methodName_, checker_->Allocator()); auto *body = CreateBody(std::move(statements)); @@ -120,9 +120,9 @@ void MethodBuilder::CollectParametersAndReturnType() // Start from 1, because 0 is return type for (size_t idx = 1U; idx < parameters.size(); ++idx) { util::UString paramName(GetFieldName(idx), allocator); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *paramIdent = checker_->AllocNode(paramName.View(), parameters[idx], allocator); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *param = checker_->AllocNode(paramIdent, false, allocator); params_.push_back(param); } @@ -138,7 +138,7 @@ ir::BlockStatement *MethodBuilder::CreateBody(ArenaVector state ir::BlockStatement *body = nullptr; if (needToCreateBody) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + body = checker_->AllocNode(checker_->Allocator(), std::move(statements)); } @@ -151,12 +151,12 @@ ir::ExpressionStatement *MethodBuilder::CreateSuperConstructorExpressionCall() // but currently frontend do not check args number. ArenaVector callArguments(checker_->Allocator()->Adapter()); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *callee = checker_->AllocNode(); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *superConstructorCall = checker_->AllocNode(callee, std::move(callArguments), nullptr, false); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + return checker_->AllocNode(superConstructorCall); } @@ -170,13 +170,13 @@ ir::AstNode *MethodBuilder::CreateIrConstructor(ir::Identifier *id, ir::BlockSta auto *allocator = checker_->Allocator(); if constexpr (IS_STATIC) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *staticBlock = checker_->AllocNode(funcExpr, allocator); ES2PANDA_ASSERT(staticBlock != nullptr); staticBlock->AddModifier(ir::ModifierFlags::STATIC); return staticBlock; } - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + return checker_->AllocNode(ir::MethodDefinitionKind::CONSTRUCTOR, id->Clone(allocator, nullptr), funcExpr, ir::ModifierFlags::NONE, allocator, false); @@ -187,7 +187,7 @@ ir::MethodDefinition *MethodBuilder::CreateIrMethod(ir::Identifier *id, ir::Bloc auto *allocator = checker_->Allocator(); auto *funcExpr = CreateFunctionExpression(id, body, ir::ScriptFunctionFlags::METHOD); ES2PANDA_ASSERT(funcExpr != nullptr); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *method = checker_->AllocNode(ir::MethodDefinitionKind::METHOD, funcExpr->Function()->Id()->Clone(allocator, nullptr), funcExpr, modifierFlags_, allocator, false); @@ -199,7 +199,7 @@ ir::FunctionExpression *MethodBuilder::CreateFunctionExpression(ir::Identifier * { auto funcSignature = ir::FunctionSignature(nullptr, std::move(params_), nullptr); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + auto *func = checker_->AllocNode( checker_->Allocator(), ir::ScriptFunction::ScriptFunctionData {body, std::move(funcSignature), scriptFuncFlags, modifierFlags_}); @@ -208,7 +208,7 @@ ir::FunctionExpression *MethodBuilder::CreateFunctionExpression(ir::Identifier * func->SetIdent(id); func->SetReturnTypeAnnotation(returnType_); - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + return checker_->AllocNode(func); } diff --git a/ets2panda/public/public.h b/ets2panda/public/public.h index 72c7553a18..b0047d9e07 100644 --- a/ets2panda/public/public.h +++ b/ets2panda/public/public.h @@ -164,7 +164,7 @@ struct Context { template T *AllocNode(Args &&...args) { - // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) + return util::NodeAllocator::ForceSetParent(Allocator(), std::forward(args)...); } -- Gitee From c80a6ebaa75d8e6532a5ec7d7f5be761161c5864 Mon Sep 17 00:00:00 2001 From: bergamot88 Date: Thu, 14 Aug 2025 17:50:31 +0300 Subject: [PATCH 2/2] Update function.cpp --- ets2panda/checker/ets/function.cpp | 84 +++++++++++++++--------------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/ets2panda/checker/ets/function.cpp b/ets2panda/checker/ets/function.cpp index f37eecffdf..5ec50aaf72 100644 --- a/ets2panda/checker/ets/function.cpp +++ b/ets2panda/checker/ets/function.cpp @@ -573,7 +573,7 @@ bool ETSChecker::ValidateSignatureRequiredParams(Signature *substitutedSig, return false; } - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) if (!ValidateSignatureInvocationContext(substitutedSig, argument, index, flags)) { return false; } @@ -586,7 +586,7 @@ bool ETSChecker::ValidateSignatureInvocationContext(Signature *substitutedSig, i std::size_t index, TypeRelationFlag flags) { Type *targetType = substitutedSig->Params()[index]->TsType(); - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) Type *argumentType = argument->Check(this); flags |= (TypeRelationFlag::ONLY_CHECK_WIDENING); @@ -739,7 +739,7 @@ Signature *ETSChecker::ValidateSignature( } auto count = std::min(signature->ArgCount(), argCount); // Check all required formal parameter(s) first - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) if (!ValidateSignatureRequiredParams(signature, arguments, flags, argTypeInferenceRequired, reportError)) { return nullptr; } @@ -833,7 +833,7 @@ ArenaVector ETSChecker::CollectSignatures(ArenaVector // Bridges are never invoked direcly continue; } - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) auto *concreteSig = ValidateSignature(std::make_tuple(sig, typeArguments, relationFlags), arguments, pos, argTypeInferenceRequired, signatures.size() == 1); if (concreteSig == nullptr) { @@ -896,7 +896,7 @@ Signature *ETSChecker::GetMostSpecificSignature(ArenaVector &compat return nullptr; } - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) if (!TypeInference(mostSpecificSignature, arguments, resolveFlags)) { return nullptr; } @@ -954,10 +954,10 @@ Signature *ETSChecker::ValidateSignatures(ArenaVector &signatures, const lexer::SourcePosition &pos, std::string_view signatureKind, TypeRelationFlag resolveFlags) { - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) auto compatibleSignatures = CollectSignatures(signatures, typeArguments, arguments, pos, resolveFlags); if (!compatibleSignatures.empty()) { - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) auto *sig = GetMostSpecificSignature(compatibleSignatures, arguments, pos, resolveFlags); // NOTE (DZ): skip Promise constructor/then/catch check - // temporary solution, need to be removed after fixing OHOS code! @@ -1347,7 +1347,7 @@ Signature *ETSChecker::ResolvePotentialTrailingLambdaWithReceiver(ir::CallExpres auto *currentReceiver = candidateFunctionType->Params()[0]; trailingLambda->Function()->EmplaceParams(currentReceiver); sigContainLambdaWithReceiverAsParam.emplace_back(sig); - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) signature = ValidateSignatures(sigContainLambdaWithReceiverAsParam, callExpr->TypeParams(), arguments, callExpr->Start(), "call", TypeRelationFlag::NO_THROW | TypeRelationFlag::NO_CHECK_TRAILING_LAMBDA); @@ -1357,7 +1357,7 @@ Signature *ETSChecker::ResolvePotentialTrailingLambdaWithReceiver(ir::CallExpres sigContainLambdaWithReceiverAsParam.clear(); trailingLambda->Function()->ClearParams(); } - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) return ValidateSignatures(normalSig, callExpr->TypeParams(), arguments, callExpr->Start(), "call", TypeRelationFlag::NO_THROW | TypeRelationFlag::NO_CHECK_TRAILING_LAMBDA); } @@ -1432,28 +1432,28 @@ Signature *ETSChecker::ResolveCallExpressionAndTrailingLambda(ArenaVectorTrailingBlock() == nullptr) { auto sig = - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) ValidateSignatures(signatures, callExpr->TypeParams(), callExpr->Arguments(), pos, "call", reportFlag); sig = MakeSignatureInvocable(sig, callExpr); UpdateDeclarationFromSignature(callExpr, sig); return sig; } - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) auto arguments = ExtendArgumentsWithFakeLamda(callExpr); - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) auto sig = ResolvePotentialTrailingLambdaWithReceiver(callExpr, signatures, arguments); if (sig != nullptr) { - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) TransformTraillingLambda(callExpr, sig); - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) TrailingLambdaTypeInference(sig, callExpr->Arguments()); UpdateDeclarationFromSignature(callExpr, sig); callExpr->SetIsTrailingCall(true); return sig; } - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) sig = ValidateSignatures(signatures, callExpr->TypeParams(), callExpr->Arguments(), pos, "call", reportFlag); sig = MakeSignatureInvocable(sig, callExpr); if (sig != nullptr) { @@ -1476,7 +1476,7 @@ Signature *ETSChecker::ResolveConstructExpression(ETSObjectType *type, const Are } return sig; } - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) return ValidateSignatures(type->ConstructSignatures(), nullptr, arguments, pos, "construct"); } @@ -2308,12 +2308,12 @@ ir::MethodDefinition *ETSChecker::CreateMethod(const util::StringView &name, ir: varbinder::FunctionParamScope *paramScope, ir::TypeNode *returnType, ir::AstNode *body) { - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) auto *nameId = ProgramAllocNode(name, ProgramAllocator()); - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) auto *scope = ProgramAllocator()->New(ProgramAllocator(), paramScope); // clang-format off - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) auto *const func = ProgramAllocNode( ProgramAllocator(), ir::ScriptFunction::ScriptFunctionData { // CC-OFFNXT(G.FMT.05-CPP) project codestyle clang format off @@ -2337,11 +2337,11 @@ ir::MethodDefinition *ETSChecker::CreateMethod(const util::StringView &name, ir: func->Scope()->Find(varbinder::VarBinder::MANDATORY_PARAM_THIS).variable->SetTsType(classDef->TsType()); } - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) auto *funcExpr = ProgramAllocNode(func); - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) auto *nameClone = nameId->Clone(ProgramAllocator(), nullptr); - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) auto *method = util::NodeAllocator::ForceSetParent( ProgramAllocator(), ir::MethodDefinitionKind::METHOD, nameClone, funcExpr, modifiers, ProgramAllocator(), false); @@ -2357,7 +2357,7 @@ varbinder::FunctionParamScope *ETSChecker::CopyParams( for (auto *const it : params) { auto *const paramOld = it->AsETSParameterExpression(); - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) auto *typeOld = paramOld->Clone(ProgramAllocator(), paramOld->Parent()); ES2PANDA_ASSERT(typeOld != nullptr); auto *const paramNew = typeOld->AsETSParameterExpression(); @@ -2451,7 +2451,7 @@ ir::ScriptFunction *ETSChecker::CreateLambdaFunction(ir::BlockStatement *trailin if (IsLastParameterLambdaWithReceiver(sig)) { auto *actualLambdaType = sig->Function()->Params().back()->AsETSParameterExpression()->TypeAnnotation()->AsETSFunctionType(); - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) auto *receiverOfTrailingBlock = actualLambdaType->Params()[0]->Clone(ProgramAllocator(), nullptr)->AsExpression(); auto *receiverVar = receiverOfTrailingBlock->AsETSParameterExpression()->Ident()->Variable(); @@ -2464,7 +2464,7 @@ ir::ScriptFunction *ETSChecker::CreateLambdaFunction(ir::BlockStatement *trailin params.emplace_back(receiverOfTrailingBlock); trailingLambdaHasReceiver = true; } - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) auto *funcNode = ProgramAllocNode( ProgramAllocator(), SFunctionData {trailingBlock, @@ -2483,13 +2483,13 @@ void ETSChecker::TransformTraillingLambda(ir::CallExpression *callExpr, Signatur auto *trailingBlock = callExpr->TrailingBlock(); ES2PANDA_ASSERT(trailingBlock != nullptr); - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) auto *funcNode = CreateLambdaFunction(trailingBlock, sig); funcNode->AddFlag(ir::ScriptFunctionFlags::TRAILING_LAMBDA); ReplaceScope(funcNode->Body(), trailingBlock, funcNode->Scope()); callExpr->SetTrailingBlock(nullptr); - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) auto *arrowFuncNode = ProgramAllocNode(funcNode, ProgramAllocator()); arrowFuncNode->SetRange(trailingBlock->Range()); arrowFuncNode->SetParent(callExpr); @@ -2503,12 +2503,12 @@ ArenaVector ETSChecker::ExtendArgumentsWithFakeLamda(ir::CallE ArenaVector params(ProgramAllocator()->Adapter()); ArenaVector statements(ProgramAllocator()->Adapter()); - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) auto *body = ProgramAllocNode(ProgramAllocator(), std::move(statements)); ES2PANDA_ASSERT(body != nullptr); body->SetScope(funcScope); - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) auto *funcNode = ProgramAllocNode( ProgramAllocator(), ir::ScriptFunction::ScriptFunctionData {body, ir::FunctionSignature(nullptr, std::move(params), nullptr), @@ -2516,7 +2516,7 @@ ArenaVector ETSChecker::ExtendArgumentsWithFakeLamda(ir::CallE ES2PANDA_ASSERT(funcNode != nullptr); funcNode->SetScope(funcScope); funcScope->BindNode(funcNode); - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) auto *arrowFuncNode = ProgramAllocNode(funcNode, ProgramAllocator()); ES2PANDA_ASSERT(arrowFuncNode != nullptr); arrowFuncNode->SetParent(callExpr); @@ -2647,7 +2647,7 @@ Signature *ETSChecker::FirstMatchSignatures(ir::CallExpression *expr, checker::T auto &signatures = expr->IsETSConstructorCall() ? calleeType->AsETSObjectType()->ConstructSignatures() : calleeType->AsETSFunctionType()->CallSignaturesOfMethodOrArrow(); - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) return ResolveTrailingLambda(signatures, expr, expr->Start()); } @@ -2666,7 +2666,7 @@ Signature *ETSChecker::MatchOrderSignatures(ArenaVector &signatures !IsSignatureAccessible(sig, Context().ContainingClass(), Relation())) { continue; } - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) auto *concreteSig = ValidateOrderSignature(std::make_tuple(sig, typeArguments, relationFlags), arguments, pos, argTypeInferenceRequired, signatures.size() == 1); @@ -2737,7 +2737,7 @@ Signature *ETSChecker::ValidateOrderSignature( auto count = std::min(signature->ArgCount(), argCount); // Check all required formal parameter(s) first - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) if (!ValidateOrderSignatureRequiredParams(signature, arguments, flags, argTypeInferenceRequired) || !signatureMatchContext.ValidSignatureMatchStatus()) { return nullptr; @@ -2825,7 +2825,7 @@ bool ETSChecker::ValidateOrderSignatureRequiredParams(Signature *substitutedSig, return false; } - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) if (!ValidateOrderSignatureInvocationContext(substitutedSig, argument, index, flags)) { return false; } @@ -2855,7 +2855,7 @@ bool ETSChecker::ValidateOrderSignatureInvocationContext(Signature *substitutedS std::size_t index, TypeRelationFlag flags) { Type *targetType = substitutedSig->Params()[index]->TsType(); - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) Type *argumentType = argument->Check(this); flags |= TypeRelationFlag::ONLY_CHECK_WIDENING; @@ -2870,21 +2870,21 @@ bool ETSChecker::ValidateOrderSignatureInvocationContext(Signature *substitutedS Signature *ETSChecker::ResolveTrailingLambda(ArenaVector &signatures, ir::CallExpression *callExpr, const lexer::SourcePosition &pos, const TypeRelationFlag reportFlag) { - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) auto arguments = ExtendArgumentsWithFakeLamda(callExpr); - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) auto sig = ResolvePotentialTrailingLambda(callExpr, signatures, arguments); if (sig != nullptr) { - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) TransformTraillingLambda(callExpr, sig); - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) TrailingLambdaTypeInference(sig, callExpr->Arguments()); UpdateDeclarationFromSignature(callExpr, sig); callExpr->SetIsTrailingCall(true); return sig; } - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) sig = MatchOrderSignatures(signatures, callExpr->TypeParams(), callExpr->Arguments(), pos, reportFlag); if (sig != nullptr) { EnsureValidCurlyBrace(callExpr); @@ -2913,7 +2913,7 @@ Signature *ETSChecker::ResolvePotentialTrailingLambda(ir::CallExpression *callEx auto *currentReceiver = candidateFunctionType->Params()[0]; trailingLambda->Function()->EmplaceParams(currentReceiver); sigContainLambdaWithReceiverAsParam.emplace_back(sig); - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) signature = MatchOrderSignatures(sigContainLambdaWithReceiverAsParam, callExpr->TypeParams(), arguments, callExpr->Start(), TypeRelationFlag::NO_THROW | TypeRelationFlag::NO_CHECK_TRAILING_LAMBDA); @@ -2923,7 +2923,7 @@ Signature *ETSChecker::ResolvePotentialTrailingLambda(ir::CallExpression *callEx sigContainLambdaWithReceiverAsParam.clear(); trailingLambda->Function()->ClearParams(); } - + // SUPPRESS_CSA_NEXTLINE(alpha.core.AllocatorETSCheckerHint) return MatchOrderSignatures(normalSig, callExpr->TypeParams(), arguments, callExpr->Start(), TypeRelationFlag::NO_THROW | TypeRelationFlag::NO_CHECK_TRAILING_LAMBDA); } -- Gitee