From 90f60ddc09ce0cba13b5d602b9604b900b9b1807 Mon Sep 17 00:00:00 2001 From: luobohua Date: Thu, 31 Jul 2025 17:40:05 +0800 Subject: [PATCH] ArenaVector optimization v1.0: simple opt Issue: https://gitee.com/openharmony/arkcompiler_ets_frontend/issues/ICQ7OP Change-Id: Iaa1d997ad80c8f488ab411d85bf01ac62944ed0b Signed-off-by: luobohua --- ets2panda/checker/ETSAnalyzer.cpp | 10 +- ets2panda/checker/ETSAnalyzerHelpers.cpp | 2 +- ets2panda/checker/ETSchecker.h | 17 ++ ets2panda/checker/TSchecker.h | 10 +- ets2panda/checker/ets/function.cpp | 214 +++++++++++++++++- ets2panda/checker/ets/typeCheckingHelpers.cpp | 2 +- ets2panda/checker/ts/function.cpp | 4 +- ets2panda/checker/ts/object.cpp | 16 +- ets2panda/compiler/core/ETSCompiler.cpp | 4 +- ets2panda/compiler/core/ETSGen.cpp | 2 +- ets2panda/compiler/core/ETSGen.h | 55 +++++ ets2panda/compiler/core/ETSemitter.cpp | 2 +- .../lowering/ets/exportAnonymousConst.cpp | 2 +- .../compiler/lowering/ets/lambdaLowering.cpp | 10 +- .../compiler/lowering/ets/opAssignment.cpp | 12 +- .../lowering/ets/stringComparison.cpp | 3 +- .../debugInfoDeserializer.h | 2 +- .../inheritanceResolution.cpp | 4 +- ets2panda/lsp/include/get_adjusted_location.h | 36 +-- ets2panda/lsp/include/internal_api.h | 2 +- ets2panda/lsp/src/get_adjusted_location.cpp | 58 ++--- ets2panda/lsp/src/internal_api.cpp | 12 +- ets2panda/lsp/src/services/services.cpp | 2 +- ets2panda/parser/ETSFormattedParser.cpp | 12 + ets2panda/parser/ETSparser.cpp | 8 +- ets2panda/parser/ETSparser.h | 8 +- ets2panda/parser/ETSparserAnnotations.cpp | 2 +- 27 files changed, 402 insertions(+), 109 deletions(-) diff --git a/ets2panda/checker/ETSAnalyzer.cpp b/ets2panda/checker/ETSAnalyzer.cpp index 6f1a8fbd83..79759099e4 100644 --- a/ets2panda/checker/ETSAnalyzer.cpp +++ b/ets2panda/checker/ETSAnalyzer.cpp @@ -756,7 +756,7 @@ checker::Type *ETSAnalyzer::Check(ir::ETSKeyofType *node) const // compile methods for EXPRESSIONS in alphabetical order static void AddSpreadElementTypes(ETSChecker *checker, ir::SpreadElement *const element, - ArenaVector> &elementTypes) + std::vector> &elementTypes) { Type *const spreadType = element->Check(checker); @@ -790,9 +790,9 @@ static bool ValidArrayExprSizeForTupleSize(ETSChecker *checker, Type *possibleTu possibleTupleType->AsETSTupleType()); } -static ArenaVector> GetElementTypes(ETSChecker *checker, ir::ArrayExpression *expr) +static std::vector> GetElementTypes(ETSChecker *checker, ir::ArrayExpression *expr) { - ArenaVector> elementTypes(checker->ProgramAllocator()->Adapter()); + std::vector> elementTypes {}; auto *const exprPreferredType = expr->PreferredType(); auto *const exprTupleType = exprPreferredType->IsETSTupleType() ? exprPreferredType->AsETSTupleType() : nullptr; @@ -834,7 +834,7 @@ static Type *GetArrayElementType(ETSChecker *checker, Type *preferredType) } static bool CheckElement(ETSChecker *checker, Type *const preferredType, - ArenaVector> arrayExprElementTypes, std::size_t idx) + std::vector> arrayExprElementTypes, std::size_t idx) { auto [elementType, currentElement] = arrayExprElementTypes[idx]; @@ -921,7 +921,7 @@ static Type *InferPreferredTypeFromElements(ETSChecker *checker, ir::ArrayExpres static bool CheckArrayExpressionElements(ETSChecker *checker, ir::ArrayExpression *arrayExpr) { - const ArenaVector> arrayExprElementTypes = GetElementTypes(checker, arrayExpr); + const std::vector> arrayExprElementTypes = GetElementTypes(checker, arrayExpr); bool allElementsAssignable = !std::any_of(arrayExprElementTypes.begin(), arrayExprElementTypes.end(), [](auto &pair) { return pair.first->IsTypeError(); }); diff --git a/ets2panda/checker/ETSAnalyzerHelpers.cpp b/ets2panda/checker/ETSAnalyzerHelpers.cpp index 2075563dcd..b37095a0d1 100644 --- a/ets2panda/checker/ETSAnalyzerHelpers.cpp +++ b/ets2panda/checker/ETSAnalyzerHelpers.cpp @@ -403,7 +403,7 @@ checker::Signature *GetMostSpecificSigFromExtensionFuncAndClassMethod(checker::E // So we temporarily transfer expr node from `a.foo(...)` to `a.foo(a, ...)`. // For allCallSignatures in ClassMethodType, temporarily insert the dummyReceiver into their signatureInfo, // otherwise we can't get the most suitable classMethod signature if all the extensionFunction signature mismatched. - ArenaVector signatures(checker->ProgramAllocator()->Adapter()); + std::vector signatures {}; signatures.insert(signatures.end(), type->ClassMethodType()->CallSignatures().begin(), type->ClassMethodType()->CallSignatures().end()); signatures.insert(signatures.end(), type->ExtensionMethodType()->CallSignatures().begin(), diff --git a/ets2panda/checker/ETSchecker.h b/ets2panda/checker/ETSchecker.h index 9494c61473..5b84b99243 100644 --- a/ets2panda/checker/ETSchecker.h +++ b/ets2panda/checker/ETSchecker.h @@ -482,6 +482,8 @@ public: TypeRelationFlag flags, bool reportError, bool unique); void ThrowSignatureMismatch(ArenaVector &signatures, const ArenaVector &arguments, const lexer::SourcePosition &pos, std::string_view signatureKind); + void ThrowSignatureMismatch(std::vector &signatures, const ArenaVector &arguments, + const lexer::SourcePosition &pos, std::string_view signatureKind); Signature *FirstMatchSignatures(ir::CallExpression *expr, checker::Type *calleeType); Signature *MatchOrderSignatures(ArenaVector &signatures, const ir::TSTypeParameterInstantiation *typeArguments, @@ -513,6 +515,11 @@ public: const ArenaVector &arguments, const lexer::SourcePosition &pos, std::string_view signatureKind, TypeRelationFlag resolveFlags = TypeRelationFlag::NONE); + Signature *ValidateSignatures(std::vector &signatures, + const ir::TSTypeParameterInstantiation *typeArguments, + const ArenaVector &arguments, const lexer::SourcePosition &pos, + std::string_view signatureKind, + TypeRelationFlag resolveFlags = TypeRelationFlag::NONE); Signature *FindMostSpecificSignature(const ArenaVector &signatures, const ArenaMultiMap &bestSignaturesForParameter, size_t paramCount); @@ -534,10 +541,16 @@ public: Signature *ResolvePotentialTrailingLambdaWithReceiver(ir::CallExpression *callExpr, ArenaVector const &signatures, ArenaVector &arguments); + Signature *ResolvePotentialTrailingLambdaWithReceiver(ir::CallExpression *callExpr, + std::vector const &signatures, + ArenaVector &arguments); Signature *MakeSignatureInvocable(Signature *sig, ir::CallExpression *callExpr); Signature *ResolveCallExpressionAndTrailingLambda(ArenaVector &signatures, ir::CallExpression *callExpr, const lexer::SourcePosition &pos, TypeRelationFlag reportFlag = TypeRelationFlag::NONE); + Signature *ResolveCallExpressionAndTrailingLambda(std::vector &signatures, + ir::CallExpression *callExpr, const lexer::SourcePosition &pos, + TypeRelationFlag reportFlag = TypeRelationFlag::NONE); void UpdateDeclarationFromSignature(ir::CallExpression *expr, checker::Signature *signature); Signature *ResolveConstructExpression(ETSObjectType *type, const ArenaVector &arguments, const lexer::SourcePosition &pos); @@ -1076,6 +1089,10 @@ private: const ir::TSTypeParameterInstantiation *typeArguments, const ArenaVector &arguments, const lexer::SourcePosition &pos, TypeRelationFlag resolveFlags); + ArenaVector CollectSignatures(std::vector &signatures, + const ir::TSTypeParameterInstantiation *typeArguments, + const ArenaVector &arguments, + const lexer::SourcePosition &pos, TypeRelationFlag resolveFlags); // Trailing lambda void MoveTrailingBlockToEnclosingBlockStatement(ir::CallExpression *callExpr); ir::ScriptFunction *CreateLambdaFunction(ir::BlockStatement *trailingBlock, Signature *sig); diff --git a/ets2panda/checker/TSchecker.h b/ets2panda/checker/TSchecker.h index 77756cb489..e608533439 100644 --- a/ets2panda/checker/TSchecker.h +++ b/ets2panda/checker/TSchecker.h @@ -320,11 +320,11 @@ public: // Object void ResolvePropertiesOfObjectType(ObjectType *type, ir::AstNode *member, - ArenaVector &signatureDeclarations, - ArenaVector &indexDeclarations, bool isInterface); + std::vector &signatureDeclarations, + std::vector &indexDeclarations, bool isInterface); void ResolveSignaturesOfObjectType(ObjectType *type, - ArenaVector &signatureDeclarations); - void ResolveIndexInfosOfObjectType(ObjectType *type, ArenaVector &indexDeclarations); + std::vector &signatureDeclarations); + void ResolveIndexInfosOfObjectType(ObjectType *type, std::vector &indexDeclarations); void ResolveDeclaredMembers(InterfaceType *type); bool ValidateInterfaceMemberRedeclaration(ObjectType *type, varbinder::Variable *prop, const lexer::SourcePosition &locInfo); @@ -366,7 +366,7 @@ public: void CreatePatternParameterName(ir::AstNode *node, std::stringstream &ss); void HandlePropertyPatternParameterName(ir::Property *prop, std::stringstream &ss); void ThrowReturnTypeCircularityError(ir::ScriptFunction *func); - ArgRange GetArgRange(const ArenaVector &signatures, ArenaVector *potentialSignatures, + ArgRange GetArgRange(const ArenaVector &signatures, std::vector *potentialSignatures, uint32_t callArgsSize, bool *haveSignatureWithRest); bool CallMatchesSignature(const ArenaVector &args, Signature *signature, bool throwError); Type *ResolveCallOrNewExpression(const ArenaVector &signatures, diff --git a/ets2panda/checker/ets/function.cpp b/ets2panda/checker/ets/function.cpp index 0719ed1705..77312600c8 100644 --- a/ets2panda/checker/ets/function.cpp +++ b/ets2panda/checker/ets/function.cpp @@ -166,7 +166,7 @@ bool ETSChecker::EnhanceSubstitutionForUnion(const ArenaVector &typePara } auto *const argUn = argumentType->AsETSUnionType(); - ArenaVector paramWlist(ProgramAllocator()->Adapter()); + std::vector paramWlist {}; ArenaVector argWlist(ProgramAllocator()->Adapter()); for (auto *pc : paramUn->ConstituentTypes()) { @@ -806,6 +806,67 @@ ArenaVector ETSChecker::CollectSignatures(ArenaVector return compatibleSignatures; } +// CC-OFFNXT(huge_method) solid logic +ArenaVector ETSChecker::CollectSignatures(std::vector &signatures, + const ir::TSTypeParameterInstantiation *typeArguments, + const ArenaVector &arguments, + const lexer::SourcePosition &pos, TypeRelationFlag resolveFlags) +{ + ArenaVector compatibleSignatures(ProgramAllocator()->Adapter()); + std::vector argTypeInferenceRequired = FindTypeInferenceArguments(arguments); + Signature *notVisibleSignature = nullptr; + + if (signatures.size() > 1) { + resolveFlags |= TypeRelationFlag::OVERLOADING_CONTEXT; + } + + auto collectSignatures = [&](TypeRelationFlag relationFlags) { + for (auto *sig : signatures) { + if (notVisibleSignature != nullptr && + !IsSignatureAccessible(sig, Context().ContainingClass(), Relation())) { + continue; + } + if (sig->HasSignatureFlag(SignatureFlags::BRIDGE)) { + // 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) { + continue; + } + if (notVisibleSignature == nullptr && + !IsSignatureAccessible(sig, Context().ContainingClass(), Relation())) { + notVisibleSignature = concreteSig; + } else { + compatibleSignatures.push_back(concreteSig); + } + } + }; + + // If there's only one signature, we don't need special checks for boxing/unboxing/widening. + // We are also able to provide more specific error messages. + if (signatures.size() == 1) { + TypeRelationFlag flags = TypeRelationFlag::WIDENING | resolveFlags; + collectSignatures(flags); + } else { + for (auto flags : GetFlagVariants()) { + flags = flags | resolveFlags; + collectSignatures(flags); + if (!compatibleSignatures.empty()) { + break; + } + } + } + + if (compatibleSignatures.empty() && notVisibleSignature != nullptr && + ((resolveFlags & TypeRelationFlag::NO_THROW) == 0)) { + LogError(diagnostic::SIG_INVISIBLE, {notVisibleSignature->Function()->Id()->Name(), notVisibleSignature}, pos); + } + return compatibleSignatures; +} + static void UpdateArrayArgsAndUnboxingFlags(ETSChecker *checker, Signature *sig, const ArenaVector &arguments) { @@ -884,6 +945,47 @@ void ETSChecker::ThrowSignatureMismatch(ArenaVector &signatures, LogError(diagnostic::NO_MATCHING_SIG_2, {signatureKind}, pos); } +void ETSChecker::ThrowSignatureMismatch(std::vector &signatures, + const ArenaVector &arguments, + const lexer::SourcePosition &pos, std::string_view signatureKind) +{ + if (!arguments.empty() && !signatures.empty()) { + std::string msg {}; + auto someSignature = signatures[0]; + + if (someSignature->HasFunction()) { + if (someSignature->Function()->IsConstructor()) { + msg.append(util::Helpers::GetClassDefiniton(someSignature->Function())->InternalName().Mutf8()); + } else { + msg.append(someSignature->Function()->Id()->Name().Mutf8()); + } + } + + msg += "("; + + for (std::size_t index = 0U; index < arguments.size(); ++index) { + auto const &argument = arguments[index]; + Type const *const argumentType = argument->Check(this); + if (!argumentType->IsTypeError()) { + msg += argumentType->ToString(); + } else { + // NOTE (DZ): extra cases for some specific nodes can be added here (as for 'ArrowFunctionExpression') + msg += argument->ToString(); + } + + if (index == arguments.size() - 1U) { + msg += ")"; + LogError(diagnostic::NO_MATCHING_SIG, {signatureKind, msg.c_str()}, pos); + return; + } + + msg += ", "; + } + } + + LogError(diagnostic::NO_MATCHING_SIG_2, {signatureKind}, pos); +} + Signature *ETSChecker::ValidateSignatures(ArenaVector &signatures, const ir::TSTypeParameterInstantiation *typeArguments, const ArenaVector &arguments, @@ -915,6 +1017,37 @@ Signature *ETSChecker::ValidateSignatures(ArenaVector &signatures, return nullptr; } +Signature *ETSChecker::ValidateSignatures(std::vector &signatures, + const ir::TSTypeParameterInstantiation *typeArguments, + const ArenaVector &arguments, + 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! + if (sig == nullptr || !sig->HasFunction() || + !(sig->Function()->IsConstructor() || sig->Function()->Id()->Name().Is("then") || + sig->Function()->Id()->Name().Is("catch")) || + !sig->Owner()->Name().Is("Promise")) { + // May need to re-check the arguments now that we know the particular signature to call. + ValidateSignature({sig, nullptr, TypeRelationFlag::WIDENING | TypeRelationFlag::NO_SUBSTITUTION_NEEDED}, + arguments, pos, FindTypeInferenceArguments(arguments), true); + } + return sig; + } + + if ((resolveFlags & TypeRelationFlag::NO_THROW) == 0) { + ThrowSignatureMismatch(signatures, arguments, pos, signatureKind); + } + + return nullptr; +} + Signature *ETSChecker::FindMostSpecificSignature(const ArenaVector &signatures, const ArenaMultiMap &bestSignaturesForParameter, size_t paramCount) @@ -1288,6 +1421,44 @@ Signature *ETSChecker::ResolvePotentialTrailingLambdaWithReceiver(ir::CallExpres TypeRelationFlag::NO_THROW | TypeRelationFlag::NO_CHECK_TRAILING_LAMBDA); } +Signature *ETSChecker::ResolvePotentialTrailingLambdaWithReceiver(ir::CallExpression *callExpr, + std::vector const &signatures, + ArenaVector &arguments) +{ + auto *trailingLambda = arguments.back()->AsArrowFunctionExpression(); + std::vector normalSig; + std::vector sigContainLambdaWithReceiverAsParam; + Signature *signature = nullptr; + for (auto sig : signatures) { + if (!sig->HasFunction()) { + continue; + } + + if (!IsLastParameterLambdaWithReceiver(sig)) { + normalSig.emplace_back(sig); + continue; + } + + auto *candidateFunctionType = + sig->Function()->Params().back()->AsETSParameterExpression()->TypeAnnotation()->AsETSFunctionType(); + 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); + if (signature != nullptr) { + return signature; + } + 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); +} + void ETSChecker::UpdateDeclarationFromSignature(ir::CallExpression *expr, checker::Signature *signature) { if (signature == nullptr) { @@ -1390,6 +1561,45 @@ Signature *ETSChecker::ResolveCallExpressionAndTrailingLambda(ArenaVector &signatures, + ir::CallExpression *callExpr, + const lexer::SourcePosition &pos, + const TypeRelationFlag reportFlag) +{ + if (callExpr->TrailingBlock() == 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) { + EnsureValidCurlyBrace(callExpr); + } + + UpdateDeclarationFromSignature(callExpr, sig); + return sig; +} + Signature *ETSChecker::ResolveConstructExpression(ETSObjectType *type, const ArenaVector &arguments, const lexer::SourcePosition &pos) { @@ -1436,7 +1646,7 @@ void ETSChecker::CheckObjectLiteralArguments(Signature *signature, ArenaVectorGetOverloadInfoForUpdate(); - ArenaVector overloads(checker->ProgramAllocator()->Adapter()); + std::vector overloads {}; for (ir::MethodDefinition *const currentFunc : method->Overloads()) { if (currentFunc->IsDeclare() != ldInfo.isDeclare) { diff --git a/ets2panda/checker/ets/typeCheckingHelpers.cpp b/ets2panda/checker/ets/typeCheckingHelpers.cpp index dd0a84f46e..57c4f370b1 100644 --- a/ets2panda/checker/ets/typeCheckingHelpers.cpp +++ b/ets2panda/checker/ets/typeCheckingHelpers.cpp @@ -1531,7 +1531,7 @@ bool ETSChecker::CheckLambdaTypeAnnotation(ir::ETSParameterExpression *param, // Preserve actual lambda types ir::ScriptFunction *const lambda = arrowFuncExpr->Function(); - ArenaVector lambdaParamTypes {ProgramAllocator()->Adapter()}; + std::vector lambdaParamTypes {}; for (auto *const lambdaParam : lambda->Params()) { lambdaParamTypes.emplace_back(lambdaParam->AsETSParameterExpression()->Ident()->TypeAnnotation()); } diff --git a/ets2panda/checker/ts/function.cpp b/ets2panda/checker/ts/function.cpp index 7b0634260a..967bdaf008 100644 --- a/ets2panda/checker/ts/function.cpp +++ b/ets2panda/checker/ts/function.cpp @@ -683,7 +683,7 @@ void TSChecker::CheckAllCodePathsInNonVoidFunctionReturnOrThrow(ir::ScriptFuncti } ArgRange TSChecker::GetArgRange(const ArenaVector &signatures, - ArenaVector *potentialSignatures, uint32_t callArgsSize, + std::vector *potentialSignatures, uint32_t callArgsSize, bool *haveSignatureWithRest) { uint32_t minArg = UINT32_MAX; @@ -752,7 +752,7 @@ Type *TSChecker::ResolveCallOrNewExpression(const ArenaVector &sign ThrowTypeError("This expression is not callable.", errPos); } - ArenaVector potentialSignatures(Allocator()->Adapter()); + std::vector potentialSignatures {}; bool haveSignatureWithRest = false; auto argRange = GetArgRange(signatures, &potentialSignatures, arguments.size(), &haveSignatureWithRest); diff --git a/ets2panda/checker/ts/object.cpp b/ets2panda/checker/ts/object.cpp index 0c9e3c25c3..e8c7bc1db6 100644 --- a/ets2panda/checker/ts/object.cpp +++ b/ets2panda/checker/ts/object.cpp @@ -177,8 +177,8 @@ void TSChecker::ResolveObjectTypeMembers(ObjectType *type) ES2PANDA_ASSERT(type->Variable() && type->Variable()->Declaration()->Node()->IsTSTypeLiteral()); auto *typeLiteral = type->Variable()->Declaration()->Node()->AsTSTypeLiteral(); - ArenaVector signatureDeclarations(Allocator()->Adapter()); - ArenaVector indexDeclarations(Allocator()->Adapter()); + std::vector signatureDeclarations {}; + std::vector indexDeclarations {}; for (auto *it : typeLiteral->Members()) { ResolvePropertiesOfObjectType(type, it, signatureDeclarations, indexDeclarations, false); @@ -191,8 +191,8 @@ void TSChecker::ResolveObjectTypeMembers(ObjectType *type) } void TSChecker::ResolvePropertiesOfObjectType(ObjectType *type, ir::AstNode *member, - ArenaVector &signatureDeclarations, - ArenaVector &indexDeclarations, bool isInterface) + std::vector &signatureDeclarations, + std::vector &indexDeclarations, bool isInterface) { if (member->IsTSPropertySignature()) { varbinder::Variable *prop = member->AsTSPropertySignature()->Variable(); @@ -226,7 +226,7 @@ void TSChecker::ResolvePropertiesOfObjectType(ObjectType *type, ir::AstNode *mem } void TSChecker::ResolveSignaturesOfObjectType(ObjectType *type, - ArenaVector &signatureDeclarations) + std::vector &signatureDeclarations) { for (auto *it : signatureDeclarations) { Type *placeholderObj = it->Check(this); @@ -240,7 +240,7 @@ void TSChecker::ResolveSignaturesOfObjectType(ObjectType *type, type->AddConstructSignature(placeholderObj->AsObjectType()->ConstructSignatures()[0]); } } -void TSChecker::ResolveIndexInfosOfObjectType(ObjectType *type, ArenaVector &indexDeclarations) +void TSChecker::ResolveIndexInfosOfObjectType(ObjectType *type, std::vector &indexDeclarations) { for (auto *it : indexDeclarations) { Type *placeholderObj = it->Check(this); @@ -512,8 +512,8 @@ void TSChecker::ResolveDeclaredMembers(InterfaceType *type) ES2PANDA_ASSERT(type->Variable() && type->Variable()->Declaration()->IsInterfaceDecl()); varbinder::InterfaceDecl *decl = type->Variable()->Declaration()->AsInterfaceDecl(); - ArenaVector signatureDeclarations(Allocator()->Adapter()); - ArenaVector indexDeclarations(Allocator()->Adapter()); + std::vector signatureDeclarations {}; + std::vector indexDeclarations {}; for (const auto *declaration : decl->Decls()) { for (auto *member : declaration->Body()->Body()) { diff --git a/ets2panda/compiler/core/ETSCompiler.cpp b/ets2panda/compiler/core/ETSCompiler.cpp index 9e26143b69..0e1d60af22 100644 --- a/ets2panda/compiler/core/ETSCompiler.cpp +++ b/ets2panda/compiler/core/ETSCompiler.cpp @@ -137,7 +137,7 @@ void ETSCompiler::Compile(const ir::ETSNewArrayInstanceExpression *expr) const if (expr->Signature() != nullptr) { const compiler::TargetTypeContext ttctx2(etsg, elementType); - static const ArenaVector ARGUMENTS(GetCodeGen()->Allocator()->Adapter()); + static const std::vector ARGUMENTS {}; etsg->InitObject(expr, expr->Signature(), ARGUMENTS); } else { etsg->LoadAccumulatorPoison(expr, elementType); @@ -188,7 +188,7 @@ static void ConvertRestArguments(checker::ETSChecker *const checker, const ir::E static void HandleUnionTypeInForOf(compiler::ETSGen *etsg, checker::Type const *const exprType, const ir::ForOfStatement *st, VReg objReg, VReg *countReg) { - ArenaVector