diff --git a/es2panda/parser/parserImpl.h b/es2panda/parser/parserImpl.h index 3254760260be2bb6559dcbfb1eab16d30ff0af67..6a10b154700ff8fef7016c0878fc989442b51fcb 100644 --- a/es2panda/parser/parserImpl.h +++ b/es2panda/parser/parserImpl.h @@ -476,7 +476,6 @@ private: ir::ExportAllDeclaration *ParseExportAllDeclaration(const lexer::SourcePosition &startLoc); ir::ExportNamedDeclaration *ParseExportNamedSpecifiers(const lexer::SourcePosition &startLoc, bool isType); ir::ExportNamedDeclaration *ParseNamedExportDeclaration(const lexer::SourcePosition &startLoc, - ArenaVector &&decorators, ArenaVector &&annotations); ir::Identifier *ParseNamedExport(const lexer::Token &exportedToken); void CheckStrictReservedWord() const; @@ -576,8 +575,7 @@ private: ir::ClassDeclaration *ParseClassStatement(StatementParsingFlags flags, bool isDeclare, ArenaVector &&decorators, ArenaVector &&annotations, bool isAbstract = false); - ir::ClassDeclaration *ParseClassDeclaration(bool idRequired, ArenaVector &&decorators, - ArenaVector &&annotations, bool isDeclare = false, + ir::ClassDeclaration *ParseClassDeclaration(bool idRequired, ArenaVector &&annotations, bool isDeclare = false, bool isAbstract = false, bool isExported = false, bool isAnnotation = false); ir::TSTypeAliasDeclaration *ParseTsTypeAliasDeclaration(bool isDeclare); diff --git a/es2panda/parser/statementParser.cpp b/es2panda/parser/statementParser.cpp index b158dbae4e889c22e9181b959a159b02d6afdbd6..3fe4583133182619649045afee23844913c2fbcd 100644 --- a/es2panda/parser/statementParser.cpp +++ b/es2panda/parser/statementParser.cpp @@ -208,7 +208,7 @@ ir::Statement *ParserImpl::ParseStatement(StatementParsingFlags flags) ThrowSyntaxError("Annotations can not be used with annotation declaration", annotations.front()->Start()); } - return ParseClassDeclaration(true, std::move(decorators), std::move(annotations), isDeclare, false, + return ParseClassDeclaration(true, std::move(annotations), isDeclare, false, false, true); } @@ -681,12 +681,11 @@ ir::ClassDeclaration *ParserImpl::ParseClassStatement(StatementParsingFlags flag ThrowSyntaxError("Lexical 'class' declaration is not allowed in single statement context"); } - return ParseClassDeclaration(true, std::move(decorators), std::move(annotations), isDeclare, isAbstract, false, + return ParseClassDeclaration(true, std::move(annotations), isDeclare, isAbstract, false, false); } -ir::ClassDeclaration *ParserImpl::ParseClassDeclaration(bool idRequired, ArenaVector &&decorators, - ArenaVector &&annotations, bool isDeclare, +ir::ClassDeclaration *ParserImpl::ParseClassDeclaration(bool idRequired, ArenaVector &&annotations, bool isDeclare, bool isAbstract, bool isExported, bool isAnnotation) { lexer::SourcePosition startLoc = lexer_->GetToken().Start(); @@ -695,10 +694,6 @@ ir::ClassDeclaration *ParserImpl::ParseClassDeclaration(bool idRequired, ArenaVe classDefinition->SetAsExportDefault(); } - if (!decorators.empty()) { - classDefinition->SetClassDecoratorPresent(); - } - auto location = classDefinition->Ident() ? classDefinition->Ident()->Start() : startLoc; auto className = classDefinition->GetName(); ASSERT(!className.Empty()); @@ -709,8 +704,7 @@ ir::ClassDeclaration *ParserImpl::ParseClassDeclaration(bool idRequired, ArenaVe decl->BindNode(classDefinition); lexer::SourcePosition endLoc = classDefinition->End(); - auto *classDecl = AllocNode(classDefinition, std::move(decorators), std::move(annotations), - isAnnotation); + auto *classDecl = AllocNode(classDefinition, Allocator()); classDecl->SetRange({startLoc, endLoc}); return classDecl; } @@ -2490,7 +2484,7 @@ ir::ExportDefaultDeclaration *ParserImpl::ParseExportDefaultDeclaration(const le if (lexer_->GetToken().Type() == lexer::TokenType::KEYW_FUNCTION) { declNode = ParseFunctionDeclaration(true, ParserStatus::EXPORT_REACHED); } else if (lexer_->GetToken().Type() == lexer::TokenType::KEYW_CLASS) { - declNode = ParseClassDeclaration(false, std::move(decorators), std::move(annotations), false, false, true); + declNode = ParseClassDeclaration(false, std::move(annotations), false, false, true); } else if (lexer_->GetToken().IsAsyncModifier()) { lexer_->NextToken(); // eat `async` keyword declNode = ParseFunctionDeclaration(false, ParserStatus::ASYNC_FUNCTION | ParserStatus::EXPORT_REACHED); @@ -2508,7 +2502,7 @@ ir::ExportDefaultDeclaration *ParserImpl::ParseExportDefaultDeclaration(const le ThrowSyntaxError("Annotations can not be used with abstract classes", annotations.front()->Start()); } - declNode = ParseClassDeclaration(false, std::move(decorators), std::move(annotations), false, true, true); + declNode = ParseClassDeclaration(false, std::move(annotations), false, true, true); } else { declNode = ParseExpression(); Binder()->AddDecl(declNode->Start(), binder::DeclarationFlags::EXPORT, @@ -2677,7 +2671,6 @@ ir::ExportNamedDeclaration *ParserImpl::ParseExportNamedSpecifiers(const lexer:: } ir::ExportNamedDeclaration *ParserImpl::ParseNamedExportDeclaration(const lexer::SourcePosition &startLoc, - ArenaVector &&decorators, ArenaVector &&annotations) { ir::Statement *decl = nullptr; @@ -2689,12 +2682,7 @@ ir::ExportNamedDeclaration *ParserImpl::ParseNamedExportDeclaration(const lexer: isDeclare = CheckDeclare(); } - if (!decorators.empty() && lexer_->GetToken().Type() != lexer::TokenType::KEYW_CLASS && - (context_.Status() & ParserStatus::IN_CLASS_BODY) == 0 && - !(lexer_->GetToken().Type() == lexer::TokenType::LITERAL_IDENT && - (lexer_->GetToken().KeywordType() == lexer::TokenType::KEYW_ABSTRACT))) { - ThrowSyntaxError("Decorators are not valid here.", decorators.front()->Start()); - } + if (!annotations.empty() && lexer_->GetToken().Type() != lexer::TokenType::KEYW_CLASS && (context_.Status() & ParserStatus::IN_CLASS_BODY) == 0) { @@ -2723,7 +2711,7 @@ ir::ExportNamedDeclaration *ParserImpl::ParseNamedExportDeclaration(const lexer: break; } case lexer::TokenType::KEYW_CLASS: { - decl = ParseClassDeclaration(true, std::move(decorators), std::move(annotations), isDeclare || IsDtsFile(), + decl = ParseClassDeclaration(true, std::move(annotations), isDeclare || IsDtsFile(), false, !isTsModule); break; } @@ -2733,15 +2721,11 @@ ir::ExportNamedDeclaration *ParserImpl::ParseNamedExportDeclaration(const lexer: ThrowSyntaxError("'interface' keyword expected."); } - if (!decorators.empty()) { - ThrowSyntaxError("Decorators are not valid here.", decorators.front()->Start()); - } - if (!annotations.empty()) { ThrowSyntaxError("Annotations can not be used with annotation declaration", annotations.front()->Start()); } - decl = ParseClassDeclaration(true, std::move(decorators), std::move(annotations), isDeclare || IsDtsFile(), + decl = ParseClassDeclaration(true, std::move(annotations), isDeclare || IsDtsFile(), false, !isTsModule, true); break; } @@ -2793,7 +2777,7 @@ ir::ExportNamedDeclaration *ParserImpl::ParseNamedExportDeclaration(const lexer: ThrowSyntaxError("Annotations can not be used with abstract classes", annotations.front()->Start()); } - decl = ParseClassDeclaration(true, std::move(decorators), std::move(annotations), + decl = ParseClassDeclaration(true, std::move(annotations), isDeclare || IsDtsFile(), true, !isTsModule); break; } @@ -2896,8 +2880,7 @@ ir::Statement *ParserImpl::ParseExportDeclaration(StatementParsingFlags flags, [[fallthrough]]; } default: { // export [var] id - ir::ExportNamedDeclaration *exportDecl = ParseNamedExportDeclaration(startLoc, std::move(decorators), - std::move(annotations)); + ir::ExportNamedDeclaration *exportDecl = ParseNamedExportDeclaration(startLoc, std::move(annotations)); if (Extension() == ScriptExtension::TS && exportDecl->Decl()->IsVariableDeclaration() && !(flags & StatementParsingFlags::GLOBAL) && exportDecl->Parent() && diff --git a/es2panda/parser/transformer/transformer.cpp b/es2panda/parser/transformer/transformer.cpp index ff06eafee3354db6d79f5cb4889f430b837439eb..8e0c4a12a10a5dcabcba6b60fad787ef9af2e180 100644 --- a/es2panda/parser/transformer/transformer.cpp +++ b/es2panda/parser/transformer/transformer.cpp @@ -1365,13 +1365,6 @@ std::vector Transformer::CreateVariableDeclarationForDecorators(i return res; } case ir::AstNodeType::CLASS_DECLARATION: { - auto classDecorators = node->AsClassDeclaration()->Decorators(); - for (size_t i = 0; i < classDecorators.size(); i++) { - util::StringView varName = CreateNewVariable(false); - res.push_back(CreateVariableDeclarationWithIdentify(varName, VariableParsingFlags::LET, nullptr, - false, classDecorators[i]->Expr(), true)); - } - auto ctorParamsDecorators = node->AsClassDeclaration()->Definition()->Ctor()->GetParamDecorators(); for (size_t i = 0; i < ctorParamsDecorators.size(); i++) { auto ctorParamDecorators = ctorParamsDecorators[i].decorators; diff --git a/ets2panda/ir/base/classElement.cpp b/ets2panda/ir/base/classElement.cpp index 24c42eeb71e3e6c5ec239cbf148dc7b242d12b50..c774d558d0e135cbc430f9943d123a7e5016dda8 100644 --- a/ets2panda/ir/base/classElement.cpp +++ b/ets2panda/ir/base/classElement.cpp @@ -30,37 +30,7 @@ void ClassElement::SetKey(Expression *key) this->GetOrCreateHistoryNodeAs()->key_ = key; } -void ClassElement::EmplaceDecorators(Decorator *decorators) -{ - auto newNode = this->GetOrCreateHistoryNodeAs(); - newNode->decorators_.emplace_back(decorators); -} -void ClassElement::ClearDecorators() -{ - auto newNode = this->GetOrCreateHistoryNodeAs(); - newNode->decorators_.clear(); -} - -void ClassElement::SetValueDecorators(Decorator *decorators, size_t index) -{ - auto newNode = this->GetOrCreateHistoryNodeAs(); - auto &arenaVector = newNode->decorators_; - ES2PANDA_ASSERT(arenaVector.size() > index); - arenaVector[index] = decorators; -} - -[[nodiscard]] const ArenaVector &ClassElement::Decorators() -{ - auto newNode = this->GetHistoryNodeAs(); - return newNode->decorators_; -} - -[[nodiscard]] ArenaVector &ClassElement::DecoratorsForUpdate() -{ - auto newNode = this->GetOrCreateHistoryNodeAs(); - return newNode->decorators_; -} void ClassElement::SetValue(Expression *value) noexcept { @@ -102,7 +72,6 @@ void ClassElement::CopyTo(AstNode *other) const otherImpl->key_ = key_; otherImpl->value_ = value_; - otherImpl->decorators_ = decorators_; otherImpl->isComputed_ = isComputed_; otherImpl->enumMember_ = enumMember_; diff --git a/ets2panda/ir/base/classElement.h b/ets2panda/ir/base/classElement.h index 45101a888b954d2572312277fcc91a058e44d166..720dbf00e19a3b575f71e074cc14530160cd65ac 100644 --- a/ets2panda/ir/base/classElement.h +++ b/ets2panda/ir/base/classElement.h @@ -31,11 +31,10 @@ public: NO_MOVE_SEMANTIC(ClassElement); // CC-OFFNXT(G.FUN.01-CPP) solid logic explicit ClassElement(AstNodeType const elementType, Expression *const key, Expression *const value, - ModifierFlags const modifiers, ArenaAllocator *const allocator, bool const isComputed) + ModifierFlags const modifiers, [[maybe_unused]] ArenaAllocator *const allocator, bool const isComputed) : TypedStatement(elementType, modifiers), key_(key), value_(value), - decorators_(allocator->Adapter()), isComputed_(isComputed) { InitHistory(); @@ -43,12 +42,11 @@ public: // CC-OFFNXT(G.FUN.01-CPP) solid logic explicit ClassElement(AstNodeType const elementType, Expression *const key, Expression *const value, - ModifierFlags const modifiers, ArenaAllocator *const allocator, bool const isComputed, + ModifierFlags const modifiers, [[maybe_unused]] ArenaAllocator *const allocator, bool const isComputed, AstNodeHistory *history) : TypedStatement(elementType, modifiers), key_(key), value_(value), - decorators_(allocator->Adapter()), isComputed_(isComputed) { if (history != nullptr) { @@ -93,44 +91,19 @@ public: [[nodiscard]] bool IsPrivateElement() const noexcept; - [[nodiscard]] const ArenaVector &Decorators() const noexcept - { - return GetHistoryNodeAs()->decorators_; - } + [[nodiscard]] bool IsComputed() const noexcept { return GetHistoryNodeAs()->isComputed_; } - void AddDecorators([[maybe_unused]] ArenaVector &&decorators) override - { - auto newNode = reinterpret_cast(GetOrCreateHistoryNode()); - newNode->decorators_ = std::move(decorators); - } - - void AddDecorator(ir::Decorator *const decorator) - { - if (decorator != nullptr) { - auto newNode = reinterpret_cast(GetOrCreateHistoryNode()); - newNode->decorators_.emplace_back(decorator); - } - } - - bool CanHaveDecorator([[maybe_unused]] bool inTs) const override - { - return true; - } [[nodiscard]] virtual PrivateFieldKind ToPrivateFieldKind(bool isStatic) const = 0; void CopyTo(AstNode *other) const override; - void EmplaceDecorators(Decorator *decorators); - void ClearDecorators(); - void SetValueDecorators(Decorator *decorators, size_t index); - const ArenaVector &Decorators(); - ArenaVector &DecoratorsForUpdate(); + protected: friend class SizeOfNodeTest; @@ -141,7 +114,6 @@ protected: // NOLINTBEGIN(misc-non-private-member-variables-in-classes) Expression *key_; Expression *value_; - ArenaVector decorators_; bool isComputed_; TSEnumMember *enumMember_ {}; // NOLINTEND(misc-non-private-member-variables-in-classes) diff --git a/ets2panda/ir/base/classProperty.cpp b/ets2panda/ir/base/classProperty.cpp index 7a0a40ed25079805bbbbb0336d75b6b2e24ecddf..5f6881f8290666675a9b4f378bc2dfb47fbe5591 100644 --- a/ets2panda/ir/base/classProperty.cpp +++ b/ets2panda/ir/base/classProperty.cpp @@ -59,14 +59,6 @@ void ClassProperty::TransformChildren(const NodeTransformer &cb, std::string_vie } } - auto const &decorators = Decorators(); - for (size_t ix = 0; ix < decorators.size(); ix++) { - if (auto *transformedNode = cb(decorators[ix]); decorators[ix] != transformedNode) { - decorators[ix]->SetTransformedNode(transformationName, transformedNode); - SetValueDecorators(transformedNode->AsDecorator(), ix); - } - } - auto const &annotations = Annotations(); for (size_t ix = 0; ix < annotations.size(); ix++) { if (auto *transformedNode = cb(annotations[ix]); annotations[ix] != transformedNode) { @@ -90,10 +82,6 @@ void ClassProperty::Iterate(const NodeTraverser &cb) const cb(TypeAnnotation()); } - for (auto *it : VectorIterationGuard(Decorators())) { - cb(it); - } - for (auto *it : Annotations()) { cb(it); } @@ -112,7 +100,6 @@ void ClassProperty::Dump(ir::AstDumper *dumper) const {"computed", IsComputed()}, {"typeAnnotation", AstDumper::Optional(TypeAnnotation())}, {"definite", IsDefinite()}, - {"decorators", Decorators()}, {"annotations", AstDumper::Optional(Annotations())}}); } @@ -309,9 +296,7 @@ ClassProperty *ClassProperty::Clone(ArenaAllocator *const allocator, AstNode *co typeAnnotation->SetParent(clone); } - for (auto *const decorator : Decorators()) { - clone->AddDecorator(decorator->Clone(allocator, clone)); - } + if (!Annotations().empty()) { ArenaVector annotationUsages {allocator->Adapter()}; diff --git a/ets2panda/ir/base/classStaticBlock.h b/ets2panda/ir/base/classStaticBlock.h index 63ffc33f16fcea10152958679bcf6b25a4c7ec75..1c8cd08be9f04d81f15f9caf6088ba780f3e975f 100644 --- a/ets2panda/ir/base/classStaticBlock.h +++ b/ets2panda/ir/base/classStaticBlock.h @@ -23,7 +23,7 @@ class Expression; class ClassStaticBlock : public ClassElement { public: - explicit ClassStaticBlock(Expression *value, ArenaAllocator *allocator) + explicit ClassStaticBlock(Expression *value, [[maybe_unused]] ArenaAllocator *allocator) : ClassElement(AstNodeType::CLASS_STATIC_BLOCK, nullptr, value, ModifierFlags::NONE, allocator, false) { InitHistory(); diff --git a/ets2panda/ir/base/methodDefinition.cpp b/ets2panda/ir/base/methodDefinition.cpp index d2ac48bf3d10ca8a0ef73724832cb06667c0647e..2cb8fc4c55ab94882d6aff0e24f7f7d7fba0585d 100644 --- a/ets2panda/ir/base/methodDefinition.cpp +++ b/ets2panda/ir/base/methodDefinition.cpp @@ -80,9 +80,6 @@ void MethodDefinition::ResolveReferences(const NodeTraverser &cb) const cb(it); } - for (auto *it : VectorIterationGuard(Decorators())) { - cb(it); - } } void MethodDefinition::Iterate(const NodeTraverser &cb) const @@ -97,10 +94,6 @@ void MethodDefinition::Iterate(const NodeTraverser &cb) const cb(it); } } - - for (auto *it : VectorIterationGuard(Decorators())) { - cb(it); - } } void MethodDefinition::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) @@ -125,13 +118,6 @@ void MethodDefinition::TransformChildren(const NodeTransformer &cb, std::string_ } } - auto const &decorators = Decorators(); - for (size_t ix = 0; ix < decorators.size(); ix++) { - if (auto *transformedNode = cb(decorators[ix]); decorators[ix] != transformedNode) { - decorators[ix]->SetTransformedNode(transformationName, transformedNode); - SetValueDecorators(transformedNode->AsDecorator(), ix); - } - } } void MethodDefinition::Dump(ir::AstDumper *dumper) const @@ -180,8 +166,7 @@ void MethodDefinition::Dump(ir::AstDumper *dumper) const {"optional", IsOptionalDeclaration()}, {"computed", IsComputed()}, {"value", Value()}, - {"overloads", Overloads()}, - {"decorators", Decorators()}}); + {"overloads", Overloads()}}); } void MethodDefinition::DumpModifierPrefix(ir::SrcDumper *dumper) const @@ -394,9 +379,7 @@ MethodDefinition *MethodDefinition::Clone(ArenaAllocator *const allocator, AstNo key->SetParent(clone); value->SetParent(clone); - for (auto *const decorator : Decorators()) { - clone->AddDecorator(decorator->Clone(allocator, clone)); - } + clone->SetBaseOverloadMethod(BaseOverloadMethod()); diff --git a/ets2panda/ir/base/methodDefinition.h b/ets2panda/ir/base/methodDefinition.h index 6ae3271cf5a6febf1a9a253e09ac1cab73c9c162..1786446a068c02ba8414fcda833dd7690b9dd9fd 100644 --- a/ets2panda/ir/base/methodDefinition.h +++ b/ets2panda/ir/base/methodDefinition.h @@ -59,7 +59,7 @@ public: using OverloadsT = ArenaVector; // CC-OFFNXT(G.FUN.01-CPP) solid logic explicit MethodDefinition(MethodDefinitionKind const kind, Expression *const key, Expression *const value, - ModifierFlags const modifiers, ArenaAllocator *const allocator, bool const isComputed) + ModifierFlags const modifiers, [[maybe_unused]] ArenaAllocator *const allocator, bool const isComputed) : ClassElement(AstNodeType::METHOD_DEFINITION, key, value, modifiers, allocator, isComputed), kind_(kind), overloads_(allocator->Adapter()), @@ -71,7 +71,7 @@ public: // CC-OFFNXT(G.FUN.01-CPP) solid logic explicit MethodDefinition(MethodDefinitionKind const kind, Expression *const key, Expression *const value, - ModifierFlags const modifiers, ArenaAllocator *const allocator, bool const isComputed, + ModifierFlags const modifiers, [[maybe_unused]] ArenaAllocator *const allocator, bool const isComputed, AstNodeHistory *history) : ClassElement(AstNodeType::METHOD_DEFINITION, key, value, modifiers, allocator, isComputed), kind_(kind), diff --git a/ets2panda/ir/base/overloadDeclaration.h b/ets2panda/ir/base/overloadDeclaration.h index 667c653f8dc1decc1bf59b7f69315e8a4fc4b520..e126a5fb73b0d6565c00ef4545edacfaa4ff82bf 100644 --- a/ets2panda/ir/base/overloadDeclaration.h +++ b/ets2panda/ir/base/overloadDeclaration.h @@ -50,7 +50,7 @@ public: NO_COPY_SEMANTIC(OverloadDeclaration); NO_MOVE_SEMANTIC(OverloadDeclaration); - explicit OverloadDeclaration(Expression *const key, ModifierFlags const modifiers, ArenaAllocator *const allocator) + explicit OverloadDeclaration(Expression *const key, ModifierFlags const modifiers, [[maybe_unused]] ArenaAllocator *const allocator) : ClassElement(AstNodeType::OVERLOAD_DECLARATION, key, nullptr, modifiers, allocator, false), overloadedList_(allocator->Adapter()), overloadFlags_(OverloadDeclFlags::NONE) diff --git a/ets2panda/ir/base/spreadElement.cpp b/ets2panda/ir/base/spreadElement.cpp index 39bac966aa0a0de6bf868a467374b21ba50b0dfa..9b504315154444509a9647ceb807d7c9d9109def 100644 --- a/ets2panda/ir/base/spreadElement.cpp +++ b/ets2panda/ir/base/spreadElement.cpp @@ -22,15 +22,11 @@ namespace ark::es2panda::ir { SpreadElement::SpreadElement([[maybe_unused]] Tag const tag, SpreadElement const &other, ArenaAllocator *const allocator) - : AnnotatedExpression(static_cast(other), allocator), decorators_(allocator->Adapter()) + : AnnotatedExpression(static_cast(other), allocator) { optional_ = other.optional_; argument_ = other.argument_->Clone(allocator, this)->AsExpression(); - - for (auto *decorator : other.decorators_) { - decorators_.emplace_back(decorator->Clone(allocator, this)); - } } SpreadElement *SpreadElement::Clone(ArenaAllocator *const allocator, AstNode *const parent) @@ -98,13 +94,6 @@ bool SpreadElement::ConvertibleToRest(bool isDeclaration, bool allowPattern) void SpreadElement::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { - for (auto *&it : VectorIterationGuard(decorators_)) { - if (auto *transformedNode = cb(it); it != transformedNode) { - it->SetTransformedNode(transformationName, transformedNode); - it = transformedNode->AsDecorator(); - } - } - if (auto *transformedNode = cb(argument_); argument_ != transformedNode) { argument_->SetTransformedNode(transformationName, transformedNode); argument_ = transformedNode->AsExpression(); @@ -120,10 +109,6 @@ void SpreadElement::TransformChildren(const NodeTransformer &cb, std::string_vie void SpreadElement::Iterate(const NodeTraverser &cb) const { - for (auto *it : VectorIterationGuard(decorators_)) { - cb(it); - } - cb(argument_); if (TypeAnnotation() != nullptr) { @@ -134,7 +119,6 @@ void SpreadElement::Iterate(const NodeTraverser &cb) const void SpreadElement::Dump(ir::AstDumper *dumper) const { dumper->Add({{"type", (type_ == AstNodeType::SPREAD_ELEMENT) ? "SpreadElement" : "RestElement"}, - {"decorators", AstDumper::Optional(decorators_)}, {"argument", argument_}, {"typeAnnotation", AstDumper::Optional(TypeAnnotation())}}); } diff --git a/ets2panda/ir/base/spreadElement.h b/ets2panda/ir/base/spreadElement.h index f9eefb502c5e3b282ce2c8bfe3d530fc0d64354e..3cb2a3111b97790d07b25d25df31b7f8bb56f373 100644 --- a/ets2panda/ir/base/spreadElement.h +++ b/ets2panda/ir/base/spreadElement.h @@ -31,8 +31,8 @@ public: NO_COPY_SEMANTIC(SpreadElement); NO_MOVE_SEMANTIC(SpreadElement); - explicit SpreadElement(AstNodeType const nodeType, ArenaAllocator *const allocator, Expression *const argument) - : AnnotatedExpression(nodeType), decorators_(allocator->Adapter()), argument_(argument) + explicit SpreadElement(AstNodeType const nodeType, [[maybe_unused]] ArenaAllocator *const allocator, Expression *const argument) + : AnnotatedExpression(nodeType), argument_(argument) { ES2PANDA_ASSERT(argument_ != nullptr); } @@ -54,21 +54,6 @@ public: return optional_; } - [[nodiscard]] const ArenaVector &Decorators() const noexcept - { - return decorators_; - } - - void AddDecorators(ArenaVector &&decorators) override - { - decorators_ = std::move(decorators); - } - - bool CanHaveDecorator([[maybe_unused]] bool inTs) const override - { - return true; - } - void SetOptional(bool optional) noexcept { optional_ = optional; @@ -96,7 +81,6 @@ public: } private: - ArenaVector decorators_; Expression *argument_ = nullptr; bool optional_ {false}; }; diff --git a/ets2panda/ir/ets/etsStructDeclaration.cpp b/ets2panda/ir/ets/etsStructDeclaration.cpp index f583cd4c6a84851838a88d987d0825baf3349f6b..70fa2201ffc523d4e0ba89253093112a58002047 100644 --- a/ets2panda/ir/ets/etsStructDeclaration.cpp +++ b/ets2panda/ir/ets/etsStructDeclaration.cpp @@ -23,8 +23,7 @@ namespace ark::es2panda::ir { void ETSStructDeclaration::Dump(ir::AstDumper *dumper) const { dumper->Add({{"type", "ETSStructDeclaration"}, - {"definition", Definition()}, - {"decorators", AstDumper::Optional(Decorators())}}); + {"definition", Definition()}}); } void ETSStructDeclaration::Dump(ir::SrcDumper *dumper) const diff --git a/ets2panda/ir/expressions/arrayExpression.cpp b/ets2panda/ir/expressions/arrayExpression.cpp index 76bc0c22bcad75860b20e7979b2d9b2bd89e8d3f..ade2bd767d3b95f6a28e5c1429ee5b9038f5ea37 100644 --- a/ets2panda/ir/expressions/arrayExpression.cpp +++ b/ets2panda/ir/expressions/arrayExpression.cpp @@ -28,7 +28,6 @@ namespace ark::es2panda::ir { ArrayExpression::ArrayExpression([[maybe_unused]] Tag const tag, ArrayExpression const &other, ArenaAllocator *const allocator) : AnnotatedExpression(static_cast(other), allocator), - decorators_(allocator->Adapter()), elements_(allocator->Adapter()) { SetPreferredType(other.PreferredType()); @@ -39,10 +38,6 @@ ArrayExpression::ArrayExpression([[maybe_unused]] Tag const tag, ArrayExpression for (auto *element : other.elements_) { elements_.emplace_back(element->Clone(allocator, this)->AsExpression()); } - - for (auto *decorator : other.decorators_) { - decorators_.emplace_back(decorator->Clone(allocator, this)); - } } ArrayExpression *ArrayExpression::Clone(ArenaAllocator *const allocator, AstNode *const parent) @@ -159,13 +154,6 @@ ValidationInfo ArrayExpression::ValidateExpression() void ArrayExpression::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { - for (auto *&it : VectorIterationGuard(decorators_)) { - if (auto *transformedNode = cb(it); it != transformedNode) { - it->SetTransformedNode(transformationName, transformedNode); - it = transformedNode->AsDecorator(); - } - } - for (auto *&it : VectorIterationGuard(elements_)) { if (auto *transformedNode = cb(it); it != transformedNode) { it->SetTransformedNode(transformationName, transformedNode); @@ -183,10 +171,6 @@ void ArrayExpression::TransformChildren(const NodeTransformer &cb, std::string_v void ArrayExpression::Iterate(const NodeTraverser &cb) const { - for (auto *it : VectorIterationGuard(decorators_)) { - cb(it); - } - for (auto *it : VectorIterationGuard(elements_)) { cb(it); } @@ -199,7 +183,6 @@ void ArrayExpression::Iterate(const NodeTraverser &cb) const void ArrayExpression::Dump(ir::AstDumper *dumper) const { dumper->Add({{"type", type_ == AstNodeType::ARRAY_EXPRESSION ? "ArrayExpression" : "ArrayPattern"}, - {"decorators", AstDumper::Optional(decorators_)}, {"elements", elements_}, {"typeAnnotation", AstDumper::Optional(TypeAnnotation())}, {"optional", AstDumper::Optional(optional_)}}); diff --git a/ets2panda/ir/expressions/arrayExpression.h b/ets2panda/ir/expressions/arrayExpression.h index c49bd60998e99cf67cdedd158d5e7040c056fe58..032e0d0f528b55addf7878fb952b292706c303be 100644 --- a/ets2panda/ir/expressions/arrayExpression.h +++ b/ets2panda/ir/expressions/arrayExpression.h @@ -45,9 +45,8 @@ public: } explicit ArrayExpression(AstNodeType nodeType, ArenaVector &&elements, - ArenaAllocator *const allocator, bool const trailingComma) + [[maybe_unused]] ArenaAllocator *const allocator, bool const trailingComma) : AnnotatedExpression(nodeType), - decorators_(allocator->Adapter()), elements_(std::move(elements)), trailingComma_(trailingComma) { @@ -99,21 +98,6 @@ public: optional_ = optional; } - [[nodiscard]] const ArenaVector &Decorators() const noexcept - { - return decorators_; - } - - void AddDecorators([[maybe_unused]] ArenaVector &&decorators) override - { - decorators_ = std::move(decorators); - } - - bool CanHaveDecorator([[maybe_unused]] bool inTs) const override - { - return true; - } - void CleanUp() override { AstNode::CleanUp(); @@ -149,7 +133,6 @@ public: checker::TypeRelationFlag flags); private: - ArenaVector decorators_; ArenaVector elements_; bool isDeclaration_ {}; bool trailingComma_ {}; diff --git a/ets2panda/ir/expressions/identifier.cpp b/ets2panda/ir/expressions/identifier.cpp index 57419e853914b1d62f72e90cb909b73ab99b197e..7efefffaf45f1671f53d73db26fb9973d5b73f49 100644 --- a/ets2panda/ir/expressions/identifier.cpp +++ b/ets2panda/ir/expressions/identifier.cpp @@ -22,14 +22,10 @@ namespace ark::es2panda::ir { Identifier::Identifier([[maybe_unused]] Tag const tag, Identifier const &other, ArenaAllocator *const allocator) - : AnnotatedExpression(static_cast(other), allocator), decorators_(allocator->Adapter()) + : AnnotatedExpression(static_cast(other), allocator) { name_ = other.name_; flags_ = other.flags_; - - for (auto *decorator : other.decorators_) { - decorators_.emplace_back(decorator->Clone(allocator, this)); - } InitHistory(); } @@ -39,8 +35,8 @@ Identifier::Identifier(ArenaAllocator *const allocator) : Identifier(ERROR_LITER InitHistory(); } -Identifier::Identifier(util::StringView const name, ArenaAllocator *const allocator) - : AnnotatedExpression(AstNodeType::IDENTIFIER), name_(name), decorators_(allocator->Adapter()) +Identifier::Identifier(util::StringView const name, [[maybe_unused]] ArenaAllocator *const allocator) + : AnnotatedExpression(AstNodeType::IDENTIFIER), name_(name) { if (name == ERROR_LITERAL) { flags_ |= IdentifierFlags::ERROR_PLACEHOLDER; @@ -48,8 +44,8 @@ Identifier::Identifier(util::StringView const name, ArenaAllocator *const alloca InitHistory(); } -Identifier::Identifier(util::StringView const name, TypeNode *const typeAnnotation, ArenaAllocator *const allocator) - : AnnotatedExpression(AstNodeType::IDENTIFIER, typeAnnotation), name_(name), decorators_(allocator->Adapter()) +Identifier::Identifier(util::StringView const name, TypeNode *const typeAnnotation, [[maybe_unused]] ArenaAllocator *const allocator) + : AnnotatedExpression(AstNodeType::IDENTIFIER, typeAnnotation), name_(name) { if (name == ERROR_LITERAL) { flags_ |= IdentifierFlags::ERROR_PLACEHOLDER; @@ -77,12 +73,7 @@ Identifier *Identifier::Clone(ArenaAllocator *const allocator, AstNode *const pa return clone; } -void Identifier::SetValueDecorators(Decorator *source, size_t index) -{ - auto newNode = this->GetOrCreateHistoryNodeAs(); - auto &arenaVector = newNode->decorators_; - arenaVector[index] = source; -} + Identifier *Identifier::CloneReference(ArenaAllocator *const allocator, AstNode *const parent) { @@ -102,14 +93,6 @@ void Identifier::TransformChildren(const NodeTransformer &cb, std::string_view c SetTsTypeAnnotation(static_cast(transformedNode)); } } - - auto const &decorators = Decorators(); - for (size_t ix = 0; ix < decorators.size(); ix++) { - if (auto *transformedNode = cb(decorators[ix]); decorators[ix] != transformedNode) { - decorators[ix]->SetTransformedNode(transformationName, transformedNode); - SetValueDecorators(transformedNode->AsDecorator(), ix); - } - } } void Identifier::Iterate(const NodeTraverser &cb) const @@ -117,10 +100,6 @@ void Identifier::Iterate(const NodeTraverser &cb) const if (TypeAnnotation() != nullptr) { cb(TypeAnnotation()); } - - for (auto *it : VectorIterationGuard(Decorators())) { - cb(it); - } } ValidationInfo Identifier::ValidateExpression() @@ -142,8 +121,7 @@ void Identifier::Dump(ir::AstDumper *dumper) const dumper->Add({{"type", IsPrivateIdent() ? "PrivateIdentifier" : "Identifier"}, {"name", Name()}, {"typeAnnotation", AstDumper::Optional(TypeAnnotation())}, - {"optional", AstDumper::Optional(IsOptional())}, - {"decorators", Decorators()}}); + {"optional", AstDumper::Optional(IsOptional())}}); } void Identifier::Dump(ir::SrcDumper *dumper) const diff --git a/ets2panda/ir/expressions/identifier.h b/ets2panda/ir/expressions/identifier.h index 6f8814018bebeb38c880903f844442d571181f34..3b1ff8817541a1fc6c8b60e75c36c20468ccb1cc 100644 --- a/ets2panda/ir/expressions/identifier.h +++ b/ets2panda/ir/expressions/identifier.h @@ -78,12 +78,9 @@ public: void SetName(const util::StringView &newName) noexcept; - void SetValueDecorators(Decorator *source, size_t index); - [[nodiscard]] const ArenaVector &Decorators() const noexcept - { - return GetHistoryNodeAs()->decorators_; - } + + bool IsErrorPlaceHolder() const noexcept { @@ -188,18 +185,11 @@ public: AddIdFlags(IdentifierFlags::ANNOTATIONUSAGE); } - void AddDecorators([[maybe_unused]] ArenaVector &&decorators) override - { - GetOrCreateHistoryNodeAs()->decorators_ = std::move(decorators); - } + [[nodiscard]] Identifier *Clone(ArenaAllocator *allocator, AstNode *parent) override; [[nodiscard]] Identifier *CloneReference(ArenaAllocator *allocator, AstNode *parent); - bool CanHaveDecorator([[maybe_unused]] bool inTs) const override - { - return true; - } [[nodiscard]] ValidationInfo ValidateExpression(); @@ -230,7 +220,6 @@ public: otherImpl->name_ = name_; otherImpl->flags_ = flags_; - otherImpl->decorators_ = decorators_; AnnotatedExpression::CopyTo(other); }; @@ -263,7 +252,6 @@ private: util::StringView name_; IdentifierFlags flags_ {IdentifierFlags::NONE}; - ArenaVector decorators_; }; } // namespace ark::es2panda::ir diff --git a/ets2panda/ir/expressions/objectExpression.cpp b/ets2panda/ir/expressions/objectExpression.cpp index 13fff0d89becf892c87450b2639bffa86fe9a857..526e023b9e303cf44c238a90c27675ecff060e94 100644 --- a/ets2panda/ir/expressions/objectExpression.cpp +++ b/ets2panda/ir/expressions/objectExpression.cpp @@ -23,7 +23,6 @@ namespace ark::es2panda::ir { ObjectExpression::ObjectExpression([[maybe_unused]] Tag const tag, ObjectExpression const &other, ArenaAllocator *const allocator) : AnnotatedExpression(static_cast(other), allocator), - decorators_(allocator->Adapter()), properties_(allocator->Adapter()) { SetPreferredType(other.PreferredType()); @@ -34,10 +33,6 @@ ObjectExpression::ObjectExpression([[maybe_unused]] Tag const tag, ObjectExpress for (auto *property : other.properties_) { properties_.emplace_back(property->Clone(allocator, this)->AsExpression()); } - - for (auto *decorator : other.decorators_) { - decorators_.emplace_back(decorator->Clone(allocator, this)); - } } ObjectExpression *ObjectExpression::Clone(ArenaAllocator *const allocator, AstNode *const parent) @@ -176,13 +171,6 @@ void ObjectExpression::SetOptional(bool optional) void ObjectExpression::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - for (auto *&it : VectorIterationGuard(decorators_)) { - if (auto *transformedNode = cb(it); it != transformedNode) { - it->SetTransformedNode(transformationName, transformedNode); - it = transformedNode->AsDecorator(); - } - } - for (auto *&it : VectorIterationGuard(properties_)) { if (auto *transformedNode = cb(it); it != transformedNode) { it->SetTransformedNode(transformationName, transformedNode); @@ -200,10 +188,6 @@ void ObjectExpression::TransformChildren(const NodeTransformer &cb, std::string_ void ObjectExpression::Iterate(const NodeTraverser &cb) const { - for (auto *it : VectorIterationGuard(decorators_)) { - cb(it); - } - for (auto *it : VectorIterationGuard(properties_)) { cb(it); } @@ -216,7 +200,6 @@ void ObjectExpression::Iterate(const NodeTraverser &cb) const void ObjectExpression::Dump(ir::AstDumper *dumper) const { dumper->Add({{"type", (type_ == AstNodeType::OBJECT_EXPRESSION) ? "ObjectExpression" : "ObjectPattern"}, - {"decorators", AstDumper::Optional(decorators_)}, {"properties", properties_}, {"typeAnnotation", AstDumper::Optional(TypeAnnotation())}, {"optional", AstDumper::Optional(optional_)}}); diff --git a/ets2panda/ir/expressions/objectExpression.h b/ets2panda/ir/expressions/objectExpression.h index 7c7abd4ca72466ed6fd2a2c2a17685a18699fa6f..d0148629a9e1d48ea0e4948244460937433fef65 100644 --- a/ets2panda/ir/expressions/objectExpression.h +++ b/ets2panda/ir/expressions/objectExpression.h @@ -38,10 +38,9 @@ public: NO_COPY_SEMANTIC(ObjectExpression); NO_MOVE_SEMANTIC(ObjectExpression); - explicit ObjectExpression(AstNodeType nodeType, ArenaAllocator *allocator, ArenaVector &&properties, + explicit ObjectExpression(AstNodeType nodeType, [[maybe_unused]] ArenaAllocator *allocator, ArenaVector &&properties, bool trailingComma) : AnnotatedExpression(nodeType), - decorators_(allocator->Adapter()), properties_(std::move(properties)), trailingComma_(trailingComma) { @@ -66,20 +65,6 @@ public: return optional_; } - [[nodiscard]] const ArenaVector &Decorators() const noexcept - { - return decorators_; - } - - void AddDecorators([[maybe_unused]] ArenaVector &&decorators) override - { - decorators_ = std::move(decorators); - } - - bool CanHaveDecorator([[maybe_unused]] bool inTs) const override - { - return true; - } [[nodiscard]] ObjectExpression *Clone(ArenaAllocator *allocator, AstNode *parent) override; @@ -125,7 +110,6 @@ private: std::tuple CheckPatternIsShorthand( CheckPatternIsShorthandArgs *args); - ArenaVector decorators_; ArenaVector properties_; bool isDeclaration_ {}; bool trailingComma_ {}; diff --git a/ets2panda/ir/module/exportNamedDeclaration.cpp b/ets2panda/ir/module/exportNamedDeclaration.cpp index 8225acdd1bc0d10f92aa9b31dccc1b40d07d2a76..9c6450b1b929dfcce3add9047fb06c02b6d2d97a 100644 --- a/ets2panda/ir/module/exportNamedDeclaration.cpp +++ b/ets2panda/ir/module/exportNamedDeclaration.cpp @@ -24,13 +24,6 @@ namespace ark::es2panda::ir { void ExportNamedDeclaration::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - for (auto *&it : VectorIterationGuard(decorators_)) { - if (auto *transformedNode = cb(it); it != transformedNode) { - it->SetTransformedNode(transformationName, transformedNode); - it = transformedNode->AsDecorator(); - } - } - if (decl_ != nullptr) { if (auto *transformedNode = cb(decl_); decl_ != transformedNode) { decl_->SetTransformedNode(transformationName, transformedNode); @@ -55,10 +48,6 @@ void ExportNamedDeclaration::TransformChildren(const NodeTransformer &cb, std::s void ExportNamedDeclaration::Iterate(const NodeTraverser &cb) const { - for (auto *it : VectorIterationGuard(decorators_)) { - cb(it); - } - if (decl_ != nullptr) { cb(decl_); } else { @@ -75,7 +64,6 @@ void ExportNamedDeclaration::Iterate(const NodeTraverser &cb) const void ExportNamedDeclaration::Dump(ir::AstDumper *dumper) const { dumper->Add({{"type", "ExportNamedDeclaration"}, - {"decorators", AstDumper::Optional(decorators_)}, {"declaration", AstDumper::Nullish(decl_)}, {"source", AstDumper::Nullish(source_)}, {"specifiers", specifiers_}}); diff --git a/ets2panda/ir/module/exportNamedDeclaration.h b/ets2panda/ir/module/exportNamedDeclaration.h index d4d15acd71437b55acf31065c4517e9739b8f5eb..d6ea0e02b8dbd2cf46d82b95e6ab6abd27dabec4 100644 --- a/ets2panda/ir/module/exportNamedDeclaration.h +++ b/ets2panda/ir/module/exportNamedDeclaration.h @@ -24,27 +24,24 @@ class ExportSpecifier; class ExportNamedDeclaration : public Statement { public: - explicit ExportNamedDeclaration(ArenaAllocator *allocator, StringLiteral *source, + explicit ExportNamedDeclaration([[maybe_unused]] ArenaAllocator *allocator, StringLiteral *source, ArenaVector &&specifiers) : Statement(AstNodeType::EXPORT_NAMED_DECLARATION), - decorators_(allocator->Adapter()), source_(source), specifiers_(std::move(specifiers)) { } - explicit ExportNamedDeclaration(ArenaAllocator *allocator, AstNode *decl, + explicit ExportNamedDeclaration([[maybe_unused]] ArenaAllocator *allocator, AstNode *decl, ArenaVector &&specifiers) : Statement(AstNodeType::EXPORT_NAMED_DECLARATION), - decorators_(allocator->Adapter()), decl_(decl), specifiers_(std::move(specifiers)) { } - explicit ExportNamedDeclaration(ArenaAllocator *allocator, AstNode *decl) + explicit ExportNamedDeclaration([[maybe_unused]] ArenaAllocator *allocator, AstNode *decl) : Statement(AstNodeType::EXPORT_NAMED_DECLARATION), - decorators_(allocator->Adapter()), decl_(decl), specifiers_(allocator->Adapter()) { @@ -70,16 +67,6 @@ public: specifiers_ = std::move(specifiers); } - void AddDecorators([[maybe_unused]] ArenaVector &&decorators) override - { - decorators_ = std::move(decorators); - } - - bool CanHaveDecorator([[maybe_unused]] bool inTs) const override - { - return !inTs && (source_ == nullptr); - } - void TransformChildren(const NodeTransformer &cb, std::string_view transformationName) override; void Iterate(const NodeTraverser &cb) const override; void Dump(ir::AstDumper *dumper) const override; @@ -95,7 +82,6 @@ public: } private: - ArenaVector decorators_; StringLiteral *source_ {}; AstNode *decl_ {}; ArenaVector specifiers_; diff --git a/ets2panda/ir/statements/classDeclaration.cpp b/ets2panda/ir/statements/classDeclaration.cpp index 398e74f231c4a3fad40511c8d6f3c13d1b066703..5075b2636a67220a16e576acd224167ca5a90802 100644 --- a/ets2panda/ir/statements/classDeclaration.cpp +++ b/ets2panda/ir/statements/classDeclaration.cpp @@ -34,53 +34,19 @@ ClassDeclaration *ClassDeclaration::Construct(ArenaAllocator *allocator) return allocator->New(nullptr, allocator); } -void ClassDeclaration::EmplaceDecorators(Decorator *decorators) -{ - this->GetOrCreateHistoryNodeAs()->decorators_.emplace_back(decorators); -} -void ClassDeclaration::ClearDecorators() -{ - this->GetOrCreateHistoryNodeAs()->decorators_.clear(); -} - -void ClassDeclaration::SetValueDecorators(Decorator *decorators, size_t index) -{ - auto &arenaVector = this->GetOrCreateHistoryNodeAs()->decorators_; - ES2PANDA_ASSERT(arenaVector.size() > index); - arenaVector[index] = decorators; -} - -[[nodiscard]] const ArenaVector &ClassDeclaration::Decorators() -{ - return this->GetHistoryNodeAs()->decorators_; -} - -[[nodiscard]] ArenaVector &ClassDeclaration::DecoratorsForUpdate() -{ - return this->GetOrCreateHistoryNodeAs()->decorators_; -} void ClassDeclaration::CopyTo(AstNode *other) const { auto otherImpl = reinterpret_cast(other); otherImpl->def_ = def_; - otherImpl->decorators_ = decorators_; Statement::CopyTo(other); } void ClassDeclaration::TransformChildren(const NodeTransformer &cb, std::string_view const transformationName) { - auto const &decorators = Decorators(); - for (size_t ix = 0; ix < decorators.size(); ix++) { - if (auto *transformedNode = cb(decorators[ix]); decorators[ix] != transformedNode) { - decorators[ix]->SetTransformedNode(transformationName, transformedNode); - SetValueDecorators(transformedNode->AsDecorator(), ix); - } - } - auto const def = Definition(); if (auto *transformedNode = cb(def); def != transformedNode) { def->SetTransformedNode(transformationName, transformedNode); @@ -90,10 +56,6 @@ void ClassDeclaration::TransformChildren(const NodeTransformer &cb, std::string_ void ClassDeclaration::Iterate(const NodeTraverser &cb) const { - for (auto *it : VectorIterationGuard(Decorators())) { - cb(it); - } - auto def = GetHistoryNodeAs()->def_; cb(def); } @@ -101,8 +63,7 @@ void ClassDeclaration::Iterate(const NodeTraverser &cb) const void ClassDeclaration::Dump(ir::AstDumper *dumper) const { dumper->Add({{"type", "ClassDeclaration"}, - {"definition", Definition()}, - {"decorators", AstDumper::Optional(Decorators())}}); + {"definition", Definition()}}); } void ClassDeclaration::Dump(ir::SrcDumper *dumper) const @@ -110,8 +71,6 @@ void ClassDeclaration::Dump(ir::SrcDumper *dumper) const if (Definition() != nullptr) { Definition()->Dump(dumper); } - // NOTE(nsizov): support decorators when supported in ArkTS - ES2PANDA_ASSERT(Decorators().empty()); } void ClassDeclaration::Compile(compiler::PandaGen *pg) const diff --git a/ets2panda/ir/statements/classDeclaration.h b/ets2panda/ir/statements/classDeclaration.h index 5ea6d0e8d01f3ca3d9c240541138d807d62e1308..df2e8beca9e72828bf685a328f39510305128a13 100644 --- a/ets2panda/ir/statements/classDeclaration.h +++ b/ets2panda/ir/statements/classDeclaration.h @@ -21,14 +21,14 @@ namespace ark::es2panda::ir { class ClassDeclaration : public Statement { public: - explicit ClassDeclaration(ClassDefinition *def, ArenaAllocator *allocator) - : Statement(AstNodeType::CLASS_DECLARATION), def_(def), decorators_(allocator->Adapter()) + explicit ClassDeclaration(ClassDefinition *def, [[maybe_unused]] ArenaAllocator *allocator) + : Statement(AstNodeType::CLASS_DECLARATION), def_(def) { InitHistory(); } - explicit ClassDeclaration(ClassDefinition *def, ArenaAllocator *allocator, AstNodeHistory *history) - : Statement(AstNodeType::CLASS_DECLARATION), def_(def), decorators_(allocator->Adapter()) + explicit ClassDeclaration(ClassDefinition *def, [[maybe_unused]] ArenaAllocator *allocator, AstNodeHistory *history) + : Statement(AstNodeType::CLASS_DECLARATION), def_(def) { if (history != nullptr) { history_ = history; @@ -47,22 +47,6 @@ public: return GetHistoryNodeAs()->def_; } - const ArenaVector &Decorators() const - { - return GetHistoryNodeAs()->decorators_; - } - - void AddDecorators(ArenaVector &&decorators) override - { - auto newNode = GetOrCreateHistoryNodeAs(); - newNode->decorators_ = std::move(decorators); - } - - bool CanHaveDecorator([[maybe_unused]] bool inTs) const override - { - return true; - } - void TransformChildren(const NodeTransformer &cb, std::string_view transformationName) override; void Iterate(const NodeTraverser &cb) const override; void Dump(ir::AstDumper *dumper) const override; @@ -78,17 +62,13 @@ public: v->Accept(this); } - void EmplaceDecorators(Decorator *decorators); - void ClearDecorators(); - void SetValueDecorators(Decorator *decorators, size_t index); - const ArenaVector &Decorators(); - ArenaVector &DecoratorsForUpdate(); + void SetDefinition(ClassDefinition *def); protected: - explicit ClassDeclaration(AstNodeType type, ClassDefinition *const def, ArenaAllocator *const allocator) - : Statement(type), def_(def), decorators_(allocator->Adapter()) + explicit ClassDeclaration(AstNodeType type, ClassDefinition *const def, [[maybe_unused]] ArenaAllocator *const allocator) + : Statement(type), def_(def) { InitHistory(); } @@ -100,7 +80,6 @@ protected: private: friend class SizeOfNodeTest; ClassDefinition *def_; - ArenaVector decorators_; }; } // namespace ark::es2panda::ir diff --git a/ets2panda/ir/statements/functionDeclaration.cpp b/ets2panda/ir/statements/functionDeclaration.cpp index 96a4c9feba71a32459588122675f91dcb6a7e020..83da4b0d39bb65b99afb624e72f44bf1efda33be 100644 --- a/ets2panda/ir/statements/functionDeclaration.cpp +++ b/ets2panda/ir/statements/functionDeclaration.cpp @@ -31,14 +31,6 @@ void FunctionDeclaration::SetFunction(ScriptFunction *func) void FunctionDeclaration::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - auto const &decorators = Decorators(); - for (size_t ix = 0; ix < decorators.size(); ix++) { - if (auto *transformedNode = cb(decorators[ix]); decorators[ix] != transformedNode) { - decorators[ix]->SetTransformedNode(transformationName, transformedNode); - SetValueDecorators(transformedNode->AsDecorator(), ix); - } - } - TransformAnnotations(cb, transformationName); auto const func = Function(); @@ -50,10 +42,6 @@ void FunctionDeclaration::TransformChildren(const NodeTransformer &cb, std::stri void FunctionDeclaration::Iterate(const NodeTraverser &cb) const { - for (auto *it : VectorIterationGuard(Decorators())) { - cb(it); - } - for (auto *it : VectorIterationGuard(Annotations())) { cb(it); } @@ -65,7 +53,6 @@ void FunctionDeclaration::Iterate(const NodeTraverser &cb) const void FunctionDeclaration::Dump(ir::AstDumper *dumper) const { dumper->Add({{"type", Function()->IsOverload() ? "TSDeclareFunction" : "FunctionDeclaration"}, - {"decorators", AstDumper::Optional(Decorators())}, {"annotations", AstDumper::Optional(Annotations())}, {"function", Function()}}); } @@ -125,37 +112,12 @@ void FunctionDeclaration::CopyTo(AstNode *other) const { auto otherImpl = other->AsFunctionDeclaration(); - otherImpl->decorators_ = decorators_; otherImpl->func_ = func_; otherImpl->isAnonymous_ = isAnonymous_; AnnotationAllowed::CopyTo(other); } -void FunctionDeclaration::EmplaceDecorators(Decorator *decorators) -{ - auto newNode = this->GetOrCreateHistoryNodeAs(); - newNode->decorators_.emplace_back(decorators); -} -void FunctionDeclaration::ClearDecorators() -{ - auto newNode = this->GetOrCreateHistoryNodeAs(); - newNode->decorators_.clear(); -} - -void FunctionDeclaration::SetValueDecorators(Decorator *decorators, size_t index) -{ - auto newNode = this->GetOrCreateHistoryNodeAs(); - auto &arenaVector = newNode->decorators_; - ES2PANDA_ASSERT(arenaVector.size() > index); - arenaVector[index] = decorators; -} - -[[nodiscard]] ArenaVector &FunctionDeclaration::DecoratorsForUpdate() -{ - auto newNode = this->GetOrCreateHistoryNodeAs(); - return newNode->decorators_; -} } // namespace ark::es2panda::ir diff --git a/ets2panda/ir/statements/functionDeclaration.h b/ets2panda/ir/statements/functionDeclaration.h index 264207ceba3cc3ecfaad3bc3185ee35972f171e0..cf3a992c0d777e881a6dff9a9ea1f2a06f1faa22 100644 --- a/ets2panda/ir/statements/functionDeclaration.h +++ b/ets2panda/ir/statements/functionDeclaration.h @@ -27,10 +27,9 @@ class AnnotationUsage; class FunctionDeclaration : public AnnotationAllowed { public: - explicit FunctionDeclaration(ArenaAllocator *allocator, ScriptFunction *func, + explicit FunctionDeclaration([[maybe_unused]] ArenaAllocator *allocator, ScriptFunction *func, ArenaVector &&annotations, bool isAnonymous = false) : AnnotationAllowed(AstNodeType::FUNCTION_DECLARATION, std::move(annotations)), - decorators_(allocator->Adapter()), func_(func), isAnonymous_(isAnonymous) { @@ -40,9 +39,8 @@ public: } } - explicit FunctionDeclaration(ArenaAllocator *allocator, ScriptFunction *func, bool isAnonymous = false) + explicit FunctionDeclaration([[maybe_unused]] ArenaAllocator *allocator, ScriptFunction *func, bool isAnonymous = false) : AnnotationAllowed(AstNodeType::FUNCTION_DECLARATION, allocator), - decorators_(allocator->Adapter()), func_(func), isAnonymous_(isAnonymous) { @@ -52,10 +50,9 @@ public: } } - explicit FunctionDeclaration(ArenaAllocator *allocator, ScriptFunction *func, bool isAnonymous, + explicit FunctionDeclaration([[maybe_unused]] ArenaAllocator *allocator, ScriptFunction *func, bool isAnonymous, AstNodeHistory *history) : AnnotationAllowed(AstNodeType::FUNCTION_DECLARATION, allocator), - decorators_(allocator->Adapter()), func_(func), isAnonymous_(isAnonymous) { @@ -81,17 +78,6 @@ public: return GetHistoryNodeAs()->func_; } - void AddDecorators([[maybe_unused]] ArenaVector &&decorators) override - { - auto newNode = this->GetOrCreateHistoryNode()->AsFunctionDeclaration(); - newNode->decorators_ = std::move(decorators); - } - - bool CanHaveDecorator([[maybe_unused]] bool inTs) const override - { - return !inTs; - } - void TransformChildren(const NodeTransformer &cb, std::string_view transformationName) override; void Iterate(const NodeTraverser &cb) const override; void Dump(ir::AstDumper *dumper) const override; @@ -109,20 +95,12 @@ public: FunctionDeclaration *Construct(ArenaAllocator *allocator) override; void CopyTo(AstNode *other) const override; - [[nodiscard]] const ArenaVector &Decorators() const - { - return GetHistoryNodeAs()->decorators_; - }; + private: friend class SizeOfNodeTest; void SetFunction(ScriptFunction *func); - void EmplaceDecorators(Decorator *decorators); - void ClearDecorators(); - void SetValueDecorators(Decorator *decorators, size_t index); - [[nodiscard]] ArenaVector &DecoratorsForUpdate(); - ArenaVector decorators_; ScriptFunction *func_; bool isAnonymous_; }; diff --git a/ets2panda/ir/statements/variableDeclaration.cpp b/ets2panda/ir/statements/variableDeclaration.cpp index 0f752dec946c007df30b4468bb641f01dd2bce74..bf448f782f2b43a486389c6cd616ba20fdca1ed7 100644 --- a/ets2panda/ir/statements/variableDeclaration.cpp +++ b/ets2panda/ir/statements/variableDeclaration.cpp @@ -23,38 +23,6 @@ namespace ark::es2panda::ir { -void VariableDeclaration::EmplaceDecorators(Decorator *source) -{ - auto newNode = this->GetOrCreateHistoryNodeAs(); - newNode->decorators_.emplace_back(source); -} - -void VariableDeclaration::ClearDecorators() -{ - auto newNode = this->GetOrCreateHistoryNodeAs(); - newNode->decorators_.clear(); -} - -void VariableDeclaration::SetValueDecorators(Decorator *source, size_t index) -{ - auto newNode = this->GetOrCreateHistoryNodeAs(); - auto &arenaVector = newNode->decorators_; - ES2PANDA_ASSERT(arenaVector.size() > index); - arenaVector[index] = source; -} - -[[nodiscard]] const ArenaVector &VariableDeclaration::Decorators() -{ - auto newNode = this->GetHistoryNodeAs(); - return newNode->decorators_; -} - -[[nodiscard]] ArenaVector &VariableDeclaration::DecoratorsForUpdate() -{ - auto newNode = this->GetOrCreateHistoryNodeAs(); - return newNode->decorators_; -} - void VariableDeclaration::EmplaceDeclarators(VariableDeclarator *source) { auto newNode = this->GetOrCreateHistoryNodeAs(); @@ -89,14 +57,6 @@ void VariableDeclaration::SetValueDeclarators(VariableDeclarator *source, size_t void VariableDeclaration::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - auto const &decorators = Decorators(); - for (size_t index = 0; index < decorators.size(); ++index) { - if (auto *transformedNode = cb(decorators[index]); decorators[index] != transformedNode) { - decorators[index]->SetTransformedNode(transformationName, transformedNode); - SetValueDecorators(transformedNode->AsDecorator(), index); - } - } - auto const &annotations = Annotations(); for (size_t index = 0; index < annotations.size(); ++index) { if (auto *transformedNode = cb(annotations[index]); annotations[index] != transformedNode) { @@ -116,10 +76,6 @@ void VariableDeclaration::TransformChildren(const NodeTransformer &cb, std::stri void VariableDeclaration::Iterate(const NodeTraverser &cb) const { - for (auto *it : VectorIterationGuard(Decorators())) { - cb(it); - } - for (auto *it : VectorIterationGuard(Annotations())) { cb(it); } @@ -154,7 +110,6 @@ void VariableDeclaration::Dump(ir::AstDumper *dumper) const dumper->Add({{"type", "VariableDeclaration"}, {"declarations", Declarators()}, {"kind", kind}, - {"decorators", AstDumper::Optional(Decorators())}, {"annotations", AstDumper::Optional(Annotations())}, {"declare", AstDumper::Optional(IsDeclare())}}); } @@ -201,14 +156,8 @@ VariableDeclaration::VariableDeclaration([[maybe_unused]] Tag const tag, Variabl ArenaAllocator *const allocator) : AnnotationAllowed(static_cast const &>(other)), kind_(other.kind_), - decorators_(allocator->Adapter()), declarators_(allocator->Adapter()) { - for (auto const &d : other.decorators_) { - decorators_.emplace_back(d->Clone(allocator, nullptr)); - decorators_.back()->SetParent(this); - } - for (auto const &d : other.declarators_) { auto *dClone = d->Clone(allocator, nullptr); ES2PANDA_ASSERT(dClone != nullptr); @@ -223,14 +172,8 @@ VariableDeclaration::VariableDeclaration([[maybe_unused]] Tag const tag, Variabl ArenaAllocator *const allocator, AstNodeHistory *history) : AnnotationAllowed(static_cast const &>(other)), kind_(other.kind_), - decorators_(allocator->Adapter()), declarators_(allocator->Adapter()) { - for (auto const &d : other.decorators_) { - decorators_.emplace_back(d->Clone(allocator, nullptr)); - decorators_.back()->SetParent(this); - } - for (auto const &d : other.declarators_) { declarators_.emplace_back(d->Clone(allocator, nullptr)->AsVariableDeclarator()); declarators_.back()->SetParent(this); @@ -285,9 +228,7 @@ void VariableDeclaration::CopyTo(AstNode *other) const auto otherImpl = other->AsVariableDeclaration(); otherImpl->kind_ = kind_; - otherImpl->decorators_ = decorators_; otherImpl->declarators_ = declarators_; - AnnotationAllowed::CopyTo(other); } diff --git a/ets2panda/ir/statements/variableDeclaration.h b/ets2panda/ir/statements/variableDeclaration.h index 1e9a54a233b2a4fdc2075af81a0d66fa202c3bf6..0caa2fba8c633f8cc1207ac23cd70c381c87315a 100644 --- a/ets2panda/ir/statements/variableDeclaration.h +++ b/ets2panda/ir/statements/variableDeclaration.h @@ -36,7 +36,6 @@ public: ArenaVector &&declarators) : AnnotationAllowed(AstNodeType::VARIABLE_DECLARATION, allocator), kind_(kind), - decorators_(allocator->Adapter()), declarators_(std::move(declarators)) { InitHistory(); @@ -46,7 +45,6 @@ public: ArenaVector &&declarators, AstNodeHistory *history) : AnnotationAllowed(AstNodeType::VARIABLE_DECLARATION, allocator), kind_(kind), - decorators_(allocator->Adapter()), declarators_(std::move(declarators)) { if (history != nullptr) { @@ -75,14 +73,7 @@ public: return GetHistoryNodeAs()->kind_; } - const ArenaVector &Decorators() const - { - return GetHistoryNodeAs()->decorators_; - } - - [[nodiscard]] const ArenaVector &Decorators(); - [[nodiscard]] ArenaVector &DecoratorsForUpdate(); VariableDeclarator *GetDeclaratorByName(util::StringView name) const { @@ -94,17 +85,6 @@ public: return nullptr; } - void AddDecorators([[maybe_unused]] ArenaVector &&decorators) override - { - auto newNode = reinterpret_cast(this->GetOrCreateHistoryNode()); - newNode->decorators_ = std::move(decorators); - } - - bool CanHaveDecorator([[maybe_unused]] bool inTs) const override - { - return true; - } - void TransformChildren(const NodeTransformer &cb, std::string_view transformationName) override; void Iterate(const NodeTraverser &cb) const override; void Dump(ir::AstDumper *dumper) const override; @@ -126,15 +106,11 @@ public: private: friend class SizeOfNodeTest; - void SetValueDecorators(Decorator *source, size_t index); void SetValueDeclarators(VariableDeclarator *source, size_t index); - void EmplaceDecorators(Decorator *source); - void ClearDecorators(); void EmplaceDeclarators(VariableDeclarator *source); void ClearDeclarators(); VariableDeclarationKind kind_; - ArenaVector decorators_; ArenaVector declarators_; }; } // namespace ark::es2panda::ir diff --git a/ets2panda/ir/ts/tsEnumDeclaration.cpp b/ets2panda/ir/ts/tsEnumDeclaration.cpp index 93e14b5f32cb50aa76c3e9dd704c6fd3560b2b04..e857d1978012fb14392c6be8214d3eb55ca0c693 100644 --- a/ets2panda/ir/ts/tsEnumDeclaration.cpp +++ b/ets2panda/ir/ts/tsEnumDeclaration.cpp @@ -43,14 +43,6 @@ void TSEnumDeclaration::SetKey(Identifier *key) void TSEnumDeclaration::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - auto const &decorators = Decorators(); - for (size_t ix = 0; ix < decorators.size(); ix++) { - if (auto *transformedNode = cb(decorators[ix]); decorators[ix] != transformedNode) { - decorators[ix]->SetTransformedNode(transformationName, transformedNode); - SetValueDecorators(transformedNode->AsDecorator(), ix); - } - } - auto const key = Key(); if (auto *transformedNode = cb(key); key != transformedNode) { key->SetTransformedNode(transformationName, transformedNode); @@ -61,17 +53,13 @@ void TSEnumDeclaration::TransformChildren(const NodeTransformer &cb, std::string for (size_t ix = 0; ix < members.size(); ix++) { if (auto *transformedNode = cb(members[ix]); members[ix] != transformedNode) { members[ix]->SetTransformedNode(transformationName, transformedNode); - SetValueMembers(transformedNode->AsDecorator(), ix); + SetValueMembers(transformedNode, ix); } } } void TSEnumDeclaration::Iterate(const NodeTraverser &cb) const { - for (auto *it : VectorIterationGuard(Decorators())) { - cb(it); - } - auto const key = GetHistoryNode()->AsTSEnumDeclaration()->key_; cb(key); @@ -83,7 +71,6 @@ void TSEnumDeclaration::Iterate(const NodeTraverser &cb) const void TSEnumDeclaration::Dump(ir::AstDumper *dumper) const { dumper->Add({{"type", "TSEnumDeclaration"}, - {"decorators", AstDumper::Optional(Decorators())}, {"id", Key()}, {"members", Members()}, {"const", IsConst()}, @@ -199,7 +186,6 @@ void TSEnumDeclaration::CopyTo(AstNode *other) const auto otherImpl = other->AsTSEnumDeclaration(); otherImpl->scope_ = scope_; - otherImpl->decorators_ = decorators_; otherImpl->key_ = key_; otherImpl->members_ = members_; otherImpl->internalName_ = internalName_; @@ -209,31 +195,7 @@ void TSEnumDeclaration::CopyTo(AstNode *other) const TypedStatement::CopyTo(other); } -void TSEnumDeclaration::EmplaceDecorators(Decorator *source) -{ - auto newNode = this->GetOrCreateHistoryNodeAs(); - newNode->decorators_.emplace_back(source); -} - -void TSEnumDeclaration::ClearDecorators() -{ - auto newNode = this->GetOrCreateHistoryNodeAs(); - newNode->decorators_.clear(); -} - -void TSEnumDeclaration::SetValueDecorators(Decorator *source, size_t index) -{ - auto newNode = this->GetOrCreateHistoryNodeAs(); - auto &arenaVector = newNode->decorators_; - ES2PANDA_ASSERT(arenaVector.size() > index); - arenaVector[index] = source; -} -[[nodiscard]] ArenaVector &TSEnumDeclaration::DecoratorsForUpdate() -{ - auto newNode = this->GetOrCreateHistoryNodeAs(); - return newNode->decorators_; -} void TSEnumDeclaration::EmplaceMembers(AstNode *source) { diff --git a/ets2panda/ir/ts/tsEnumDeclaration.h b/ets2panda/ir/ts/tsEnumDeclaration.h index 2a992d9c3941b05d4b44c541c939fac2c760a609..5f743d6bb1367cf40bccedef394867cfd7c17ec6 100644 --- a/ets2panda/ir/ts/tsEnumDeclaration.h +++ b/ets2panda/ir/ts/tsEnumDeclaration.h @@ -38,10 +38,9 @@ public: }; // NOLINTEND(cppcoreguidelines-pro-type-member-init) - explicit TSEnumDeclaration(ArenaAllocator *allocator, Identifier *key, ArenaVector &&members, + explicit TSEnumDeclaration([[maybe_unused]] ArenaAllocator *allocator, Identifier *key, ArenaVector &&members, ConstructorFlags &&flags, Language lang) : TypedStatement(AstNodeType::TS_ENUM_DECLARATION), - decorators_(allocator->Adapter()), key_(key), typeNode_(nullptr), members_(std::move(members)), @@ -57,10 +56,9 @@ public: } // CC-OFFNXT(G.FUN.01-CPP) solid logic - explicit TSEnumDeclaration(ArenaAllocator *allocator, Identifier *key, ArenaVector &&members, + explicit TSEnumDeclaration([[maybe_unused]] ArenaAllocator *allocator, Identifier *key, ArenaVector &&members, ConstructorFlags &&flags, ir::TypeNode *typeNode, Language lang) : TypedStatement(AstNodeType::TS_ENUM_DECLARATION), - decorators_(allocator->Adapter()), key_(key), typeNode_(typeNode), members_(std::move(members)), @@ -77,10 +75,9 @@ public: } // CC-OFFNXT(G.FUN.01-CPP) solid logic - explicit TSEnumDeclaration(ArenaAllocator *allocator, Identifier *key, ArenaVector &&members, + explicit TSEnumDeclaration([[maybe_unused]] ArenaAllocator *allocator, Identifier *key, ArenaVector &&members, ConstructorFlags &&flags, Language lang, AstNodeHistory *history) : TypedStatement(AstNodeType::TS_ENUM_DECLARATION), - decorators_(allocator->Adapter()), key_(key), typeNode_(nullptr), members_(std::move(members)), @@ -160,21 +157,7 @@ public: return GetHistoryNodeAs()->isConst_; } - const ArenaVector &Decorators() const - { - return GetHistoryNodeAs()->decorators_; - } - void AddDecorators([[maybe_unused]] ArenaVector &&decorators) override - { - auto newNode = GetOrCreateHistoryNodeAs(); - newNode->decorators_ = std::move(decorators); - } - - bool CanHaveDecorator([[maybe_unused]] bool inTs) const override - { - return !inTs; - } [[nodiscard]] es2panda::Language Language() const noexcept { @@ -199,12 +182,6 @@ public: TSEnumDeclaration *Construct(ArenaAllocator *allocator) override; void CopyTo(AstNode *other) const override; - - void EmplaceDecorators(Decorator *source); - void ClearDecorators(); - void SetValueDecorators(Decorator *source, size_t index); - [[nodiscard]] ArenaVector &DecoratorsForUpdate(); - void EmplaceMembers(AstNode *source); void ClearMembers(); void SetValueMembers(AstNode *source, size_t index); @@ -216,7 +193,6 @@ private: void SetKey(Identifier *key); varbinder::LocalScope *scope_ {nullptr}; - ArenaVector decorators_; Identifier *key_; ir::TypeNode *typeNode_; ArenaVector members_; diff --git a/ets2panda/ir/ts/tsInterfaceDeclaration.cpp b/ets2panda/ir/ts/tsInterfaceDeclaration.cpp index 7670586186185452ba8d1194c84739dc0163faa6..bfb1c78429569d13e9ccde36d446c99fd051c1e3 100644 --- a/ets2panda/ir/ts/tsInterfaceDeclaration.cpp +++ b/ets2panda/ir/ts/tsInterfaceDeclaration.cpp @@ -25,7 +25,7 @@ #include "compiler/core/pandagen.h" #include "ir/astDump.h" #include "ir/srcDump.h" -#include "ir/base/decorator.h" + #include "ir/expressions/identifier.h" #include "ir/ts/tsInterfaceBody.h" #include "ir/ts/tsInterfaceHeritage.h" @@ -91,48 +91,10 @@ void TSInterfaceDeclaration::SetValueExtends(TSInterfaceHeritage *extends, size_ return newNode->extends_; } -void TSInterfaceDeclaration::EmplaceDecorators(Decorator *decorators) -{ - auto newNode = this->GetOrCreateHistoryNodeAs(); - newNode->decorators_.emplace_back(decorators); -} -void TSInterfaceDeclaration::ClearDecorators() -{ - auto newNode = this->GetOrCreateHistoryNodeAs(); - newNode->decorators_.clear(); -} - -void TSInterfaceDeclaration::SetValueDecorators(Decorator *decorators, size_t index) -{ - auto newNode = this->GetOrCreateHistoryNodeAs(); - auto &arenaVector = newNode->decorators_; - ES2PANDA_ASSERT(arenaVector.size() > index); - arenaVector[index] = decorators; -} - -[[nodiscard]] const ArenaVector &TSInterfaceDeclaration::Decorators() -{ - auto newNode = this->GetHistoryNodeAs(); - return newNode->decorators_; -} - -[[nodiscard]] ArenaVector &TSInterfaceDeclaration::DecoratorsForUpdate() -{ - auto newNode = this->GetOrCreateHistoryNodeAs(); - return newNode->decorators_; -} void TSInterfaceDeclaration::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - auto const &decorators = Decorators(); - for (size_t ix = 0; ix < decorators.size(); ix++) { - if (auto *transformedNode = cb(decorators[ix]); decorators[ix] != transformedNode) { - decorators[ix]->SetTransformedNode(transformationName, transformedNode); - SetValueDecorators(transformedNode->AsDecorator(), ix); - } - } - TransformAnnotations(cb, transformationName); auto const id = Id(); @@ -166,10 +128,6 @@ void TSInterfaceDeclaration::TransformChildren(const NodeTransformer &cb, std::s void TSInterfaceDeclaration::Iterate(const NodeTraverser &cb) const { - for (auto *it : VectorIterationGuard(Decorators())) { - cb(it); - } - for (auto *it : Annotations()) { cb(it); } @@ -193,7 +151,6 @@ void TSInterfaceDeclaration::Iterate(const NodeTraverser &cb) const void TSInterfaceDeclaration::Dump(ir::AstDumper *dumper) const { dumper->Add({{"type", "TSInterfaceDeclaration"}, - {"decorators", AstDumper::Optional(Decorators())}, {"annotations", AstDumper::Optional(Annotations())}, {"body", Body()}, {"id", Id()}, @@ -305,7 +262,6 @@ void TSInterfaceDeclaration::CopyTo(AstNode *other) const { auto otherImpl = other->AsTSInterfaceDeclaration(); - otherImpl->decorators_ = decorators_; otherImpl->scope_ = scope_; otherImpl->id_ = id_; otherImpl->typeParams_ = typeParams_; diff --git a/ets2panda/ir/ts/tsInterfaceDeclaration.h b/ets2panda/ir/ts/tsInterfaceDeclaration.h index 327a692a5dbf403f7f4b91afe925374cadb6191f..236ce835d4478452a9c57a23287e473fc728a797 100644 --- a/ets2panda/ir/ts/tsInterfaceDeclaration.h +++ b/ets2panda/ir/ts/tsInterfaceDeclaration.h @@ -44,10 +44,9 @@ public: }; // NOLINTEND(cppcoreguidelines-pro-type-member-init) - explicit TSInterfaceDeclaration(ArenaAllocator *allocator, ArenaVector &&extends, + explicit TSInterfaceDeclaration([[maybe_unused]] ArenaAllocator *allocator, ArenaVector &&extends, ConstructorData &&data) : AnnotationAllowed(AstNodeType::TS_INTERFACE_DECLARATION, allocator), - decorators_(allocator->Adapter()), id_(data.id), typeParams_(data.typeParams), body_(data.body), @@ -62,10 +61,9 @@ public: InitHistory(); } - explicit TSInterfaceDeclaration(ArenaAllocator *allocator, ArenaVector &&extends, + explicit TSInterfaceDeclaration([[maybe_unused]] ArenaAllocator *allocator, ArenaVector &&extends, ConstructorData &&data, AstNodeHistory *history) : AnnotationAllowed(AstNodeType::TS_INTERFACE_DECLARATION, allocator), - decorators_(allocator->Adapter()), id_(data.id), typeParams_(data.typeParams), body_(data.body), @@ -160,22 +158,6 @@ public: return GetHistoryNodeAs()->extends_; } - const ArenaVector &Decorators() const - { - return GetHistoryNodeAs()->decorators_; - } - - void AddDecorators([[maybe_unused]] ArenaVector &&decorators) override - { - auto newNode = reinterpret_cast(this->GetOrCreateHistoryNode()); - newNode->decorators_ = std::move(decorators); - } - - bool CanHaveDecorator([[maybe_unused]] bool inTs) const override - { - return !inTs; - } - void TransformChildren(const NodeTransformer &cb, std::string_view transformationName) override; [[nodiscard]] es2panda::Language Language() const noexcept @@ -216,12 +198,6 @@ public: void ClearExtends(); void SetValueExtends(TSInterfaceHeritage *extends, size_t index); - void EmplaceDecorators(Decorator *decorators); - void ClearDecorators(); - void SetValueDecorators(Decorator *decorators, size_t index); - [[nodiscard]] const ArenaVector &Decorators(); - [[nodiscard]] ArenaVector &DecoratorsForUpdate(); - private: bool RegisterUnexportedForDeclGen(ir::SrcDumper *dumper) const; friend class SizeOfNodeTest; @@ -229,7 +205,6 @@ private: void SetTypeParams(TSTypeParameterDeclaration *typeParams); void SetBody(TSInterfaceBody *body); - ArenaVector decorators_; varbinder::LocalScope *scope_ {nullptr}; Identifier *id_; TSTypeParameterDeclaration *typeParams_; diff --git a/ets2panda/ir/ts/tsModuleDeclaration.cpp b/ets2panda/ir/ts/tsModuleDeclaration.cpp index 88d0f01fb6a8e4380b0545189f3a3e3f6a310dfa..a4ce088a0106770776cd820fe22de384499bd468 100644 --- a/ets2panda/ir/ts/tsModuleDeclaration.cpp +++ b/ets2panda/ir/ts/tsModuleDeclaration.cpp @@ -20,18 +20,10 @@ #include "compiler/core/pandagen.h" #include "ir/astDump.h" #include "ir/srcDump.h" -#include "ir/base/decorator.h" namespace ark::es2panda::ir { void TSModuleDeclaration::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - for (auto *&it : VectorIterationGuard(decorators_)) { - if (auto *transformedNode = cb(it); it != transformedNode) { - it->SetTransformedNode(transformationName, transformedNode); - it = transformedNode->AsDecorator(); - } - } - if (auto *transformedNode = cb(name_); name_ != transformedNode) { name_->SetTransformedNode(transformationName, transformedNode); name_ = transformedNode->AsExpression(); @@ -47,10 +39,6 @@ void TSModuleDeclaration::TransformChildren(const NodeTransformer &cb, std::stri void TSModuleDeclaration::Iterate(const NodeTraverser &cb) const { - for (auto *it : VectorIterationGuard(decorators_)) { - cb(it); - } - cb(name_); if (body_ != nullptr) { @@ -61,7 +49,6 @@ void TSModuleDeclaration::Iterate(const NodeTraverser &cb) const void TSModuleDeclaration::Dump(ir::AstDumper *dumper) const { dumper->Add({{"type", "TSModuleDeclaration"}, - {"decorators", AstDumper::Optional(decorators_)}, {"id", name_}, {"body", AstDumper::Optional(body_)}, {"global", global_}}); diff --git a/ets2panda/ir/ts/tsModuleDeclaration.h b/ets2panda/ir/ts/tsModuleDeclaration.h index fec5a5990d633c910f3770772ac441c99bef8889..62501e213da2279a36db2a321a6865ce3abcdd45 100644 --- a/ets2panda/ir/ts/tsModuleDeclaration.h +++ b/ets2panda/ir/ts/tsModuleDeclaration.h @@ -31,9 +31,8 @@ public: }; // NOLINTEND(cppcoreguidelines-pro-type-member-init) - explicit TSModuleDeclaration(ArenaAllocator *allocator, Expression *name, Statement *body, ConstructorFlags &&flags) + explicit TSModuleDeclaration([[maybe_unused]] ArenaAllocator *allocator, Expression *name, Statement *body, ConstructorFlags &&flags) : Statement(AstNodeType::TS_MODULE_DECLARATION), - decorators_(allocator->Adapter()), name_(name), body_(body), global_(flags.global), @@ -82,15 +81,7 @@ public: return isExternalAmbient_; } - void AddDecorators([[maybe_unused]] ArenaVector &&decorators) override - { - decorators_ = std::move(decorators); - } - bool CanHaveDecorator([[maybe_unused]] bool inTs) const override - { - return !inTs; - } void TransformChildren(const NodeTransformer &cb, std::string_view transformationName) override; void Iterate(const NodeTraverser &cb) const override; @@ -107,7 +98,6 @@ public: } private: - ArenaVector decorators_; varbinder::LocalScope *scope_ {nullptr}; Expression *name_; Statement *body_; diff --git a/ets2panda/ir/ts/tsTypeAliasDeclaration.cpp b/ets2panda/ir/ts/tsTypeAliasDeclaration.cpp index 5f2276dd48a156d0b1ea24bfcf524fc934c8e0e0..0c5b4880ee5773d73a9fea70ce180eda2a6315a1 100644 --- a/ets2panda/ir/ts/tsTypeAliasDeclaration.cpp +++ b/ets2panda/ir/ts/tsTypeAliasDeclaration.cpp @@ -21,7 +21,7 @@ #include "ir/astDump.h" #include "ir/srcDump.h" #include "ir/typeNode.h" -#include "ir/base/decorator.h" + #include "ir/expressions/identifier.h" #include "ir/ts/tsTypeParameter.h" #include "ir/ts/tsTypeParameterDeclaration.h" @@ -40,14 +40,6 @@ void TSTypeAliasDeclaration::SetId(Identifier *id) void TSTypeAliasDeclaration::TransformChildren(const NodeTransformer &cb, std::string_view transformationName) { - auto const &decorators = Decorators(); - for (size_t ix = 0; ix < decorators.size(); ix++) { - if (auto *transformedNode = cb(decorators[ix]); decorators[ix] != transformedNode) { - decorators[ix]->SetTransformedNode(transformationName, transformedNode); - SetValueDecorators(transformedNode->AsDecorator(), ix); - } - } - auto const &annotations = Annotations(); for (size_t ix = 0; ix < annotations.size(); ix++) { if (auto *transformedNode = cb(annotations[ix]); annotations[ix] != transformedNode) { @@ -80,10 +72,6 @@ void TSTypeAliasDeclaration::TransformChildren(const NodeTransformer &cb, std::s void TSTypeAliasDeclaration::Iterate(const NodeTraverser &cb) const { - for (auto *it : VectorIterationGuard(Decorators())) { - cb(it); - } - for (auto *it : Annotations()) { cb(it); } @@ -104,7 +92,6 @@ void TSTypeAliasDeclaration::Iterate(const NodeTraverser &cb) const void TSTypeAliasDeclaration::Dump(ir::AstDumper *dumper) const { dumper->Add({{"type", "TSTypeAliasDeclaration"}, - {"decorators", AstDumper::Optional(Decorators())}, {"annotations", AstDumper::Optional(Annotations())}, {"id", Id()}, {"typeAnnotation", AstDumper::Optional(TypeAnnotation())}, @@ -187,9 +174,8 @@ TSTypeAliasDeclaration *TSTypeAliasDeclaration::Construct(ArenaAllocator *alloca void TSTypeAliasDeclaration::CopyTo(AstNode *other) const { - auto otherImpl = other->AsTSTypeAliasDeclaration(); + auto *otherImpl = other->AsTSTypeAliasDeclaration(); - otherImpl->decorators_ = decorators_; otherImpl->annotations_ = annotations_; otherImpl->id_ = id_; otherImpl->typeParams_ = typeParams_; @@ -198,31 +184,7 @@ void TSTypeAliasDeclaration::CopyTo(AstNode *other) const AnnotatedStatement::CopyTo(other); } -void TSTypeAliasDeclaration::EmplaceDecorators(Decorator *decorators) -{ - auto newNode = this->GetOrCreateHistoryNodeAs(); - newNode->decorators_.emplace_back(decorators); -} - -void TSTypeAliasDeclaration::ClearDecorators() -{ - auto newNode = this->GetOrCreateHistoryNodeAs(); - newNode->decorators_.clear(); -} -void TSTypeAliasDeclaration::SetValueDecorators(Decorator *decorators, size_t index) -{ - auto newNode = this->GetOrCreateHistoryNodeAs(); - auto &arenaVector = newNode->decorators_; - ES2PANDA_ASSERT(arenaVector.size() > index); - arenaVector[index] = decorators; -} - -[[nodiscard]] ArenaVector &TSTypeAliasDeclaration::DecoratorsForUpdate() -{ - auto newNode = this->GetOrCreateHistoryNodeAs(); - return newNode->decorators_; -} void TSTypeAliasDeclaration::EmplaceTypeParamterTypes(checker::Type *typeParamTypes) { diff --git a/ets2panda/ir/ts/tsTypeAliasDeclaration.h b/ets2panda/ir/ts/tsTypeAliasDeclaration.h index 44022d21aca11129f3ddb46ada9f6d9ae79188e5..03c193e3bd811ebd66ce8a07f6c6ae1cbb80b81f 100644 --- a/ets2panda/ir/ts/tsTypeAliasDeclaration.h +++ b/ets2panda/ir/ts/tsTypeAliasDeclaration.h @@ -30,10 +30,9 @@ class TSTypeParameterDeclaration; class TSTypeAliasDeclaration : public AnnotatedStatement { public: - explicit TSTypeAliasDeclaration(ArenaAllocator *allocator, Identifier *id, TSTypeParameterDeclaration *typeParams, + explicit TSTypeAliasDeclaration([[maybe_unused]] ArenaAllocator *allocator, Identifier *id, TSTypeParameterDeclaration *typeParams, TypeNode *typeAnnotation) : AnnotatedStatement(AstNodeType::TS_TYPE_ALIAS_DECLARATION, typeAnnotation), - decorators_(allocator->Adapter()), annotations_(allocator->Adapter()), id_(id), typeParams_(typeParams), @@ -42,9 +41,8 @@ public: InitHistory(); } - explicit TSTypeAliasDeclaration(ArenaAllocator *allocator, Identifier *id) + explicit TSTypeAliasDeclaration([[maybe_unused]] ArenaAllocator *allocator, Identifier *id) : AnnotatedStatement(AstNodeType::TS_TYPE_ALIAS_DECLARATION), - decorators_(allocator->Adapter()), annotations_(allocator->Adapter()), id_(id), typeParams_(nullptr), @@ -68,24 +66,8 @@ public: return GetHistoryNodeAs()->typeParams_; } - const ArenaVector &Decorators() const - { - return GetHistoryNodeAs()->decorators_; - } - void SetTypeParameters(ir::TSTypeParameterDeclaration *typeParams); - void AddDecorators([[maybe_unused]] ArenaVector &&decorators) override - { - auto newNode = reinterpret_cast(this->GetOrCreateHistoryNode()); - newNode->decorators_ = std::move(decorators); - } - - bool CanHaveDecorator([[maybe_unused]] bool inTs) const override - { - return !inTs; - } - void SetTypeParameterTypes(ArenaVector &&typeParamTypes) { auto newNode = reinterpret_cast(GetOrCreateHistoryNode()); @@ -144,17 +126,14 @@ public: void SetValueTypeParamterTypes(checker::Type *typeParamTypes, size_t index); [[nodiscard]] ArenaVector &TypeParamterTypesForUpdate(); - void EmplaceDecorators(Decorator *decorators); - void ClearDecorators(); - void SetValueDecorators(Decorator *decorators, size_t index); - [[nodiscard]] ArenaVector &DecoratorsForUpdate(); + private: bool RegisterUnexportedForDeclGen(ir::SrcDumper *dumper) const; friend class SizeOfNodeTest; void SetId(Identifier *id); - ArenaVector decorators_; + ArenaVector annotations_; Identifier *id_; TSTypeParameterDeclaration *typeParams_; diff --git a/ets2panda/parser/ETSparser.cpp b/ets2panda/parser/ETSparser.cpp index 73ab94b616b1e7374ef3ad0cbca3debb0c08d65c..0bcffbd64070ed7cd67c3bc81ba50efdf3b7fd24 100644 --- a/ets2panda/parser/ETSparser.cpp +++ b/ets2panda/parser/ETSparser.cpp @@ -1615,12 +1615,9 @@ ir::AnnotatedExpression *ETSParser::GetAnnotatedExpressionFromParam() case lexer::TokenType::LITERAL_IDENT: { parameter = AllocNode(Lexer()->GetToken().Ident(), Allocator()); ES2PANDA_ASSERT(parameter != nullptr); - if (parameter->AsIdentifier()->Decorators().empty()) { - parameter->SetRange(Lexer()->GetToken().Loc()); - } else { - parameter->SetRange( - {parameter->AsIdentifier()->Decorators().front()->Start(), Lexer()->GetToken().End()}); - } + + parameter->SetRange(Lexer()->GetToken().Loc()); + break; } diff --git a/ets2panda/parser/expressionTSParser.cpp b/ets2panda/parser/expressionTSParser.cpp index fc615e5bff722255fb137d151aea15f5c5fb9915..db51d03572968bb10d61c6a10049cf60f5ad94f9 100644 --- a/ets2panda/parser/expressionTSParser.cpp +++ b/ets2panda/parser/expressionTSParser.cpp @@ -172,12 +172,7 @@ ir::AnnotatedExpression *TSParser::ParsePatternElementGetReturnNode(ExpressionPa ir::AnnotatedExpression *returnNode = AllocNode(Lexer()->GetToken().Ident(), Allocator()); ES2PANDA_ASSERT(returnNode != nullptr); - if (returnNode->AsIdentifier()->Decorators().empty()) { - returnNode->SetRange(Lexer()->GetToken().Loc()); - } else { - returnNode->SetRange( - {returnNode->AsIdentifier()->Decorators().front()->Start(), Lexer()->GetToken().End()}); - } + returnNode->SetRange(Lexer()->GetToken().Loc()); Lexer()->NextToken(); diff --git a/ets2panda/test/unit/sizeof_node_test.cpp b/ets2panda/test/unit/sizeof_node_test.cpp index 5980cba512fa4d025bd7114ab44edff712304031..4ebeff39b6a5b33c7fe4915a58d6b1319afe6bc0 100644 --- a/ets2panda/test/unit/sizeof_node_test.cpp +++ b/ets2panda/test/unit/sizeof_node_test.cpp @@ -145,8 +145,7 @@ size_t SizeOfNodeTest::SizeOf() // clang-format off return SizeOf() + - sizeof(node->def_) + - sizeof(node->decorators_); + sizeof(node->def_); // clang-format on } @@ -177,7 +176,6 @@ size_t SizeOfNodeTest::SizeOf() return SizeOf() + sizeof(node->key_) + sizeof(node->value_) + - sizeof(node->decorators_) + Align(sizeof(node->isComputed_)) + sizeof(node->enumMember_); // clang-format on @@ -284,7 +282,6 @@ size_t SizeOfNodeTest::SizeOf() // clang-format off return SizeOf>() + - sizeof(node->decorators_) + sizeof(node->func_) + Align(sizeof(node->isAnonymous_)); // clang-format on @@ -401,7 +398,6 @@ size_t SizeOfNodeTest::SizeOf() // clang-format off return SizeOf>() + Align(sizeof(node->kind_) + - sizeof(node->decorators_) + sizeof(node->declarators_)); // clang-format on } diff --git a/ets2panda/util/ast-builders/classDeclarationBuilder.h b/ets2panda/util/ast-builders/classDeclarationBuilder.h index 6335bd0b9b018c7a2ad064397ad3b47f21e5587a..2416ac2642c57612cd084eba9d47f753033608b5 100644 --- a/ets2panda/util/ast-builders/classDeclarationBuilder.h +++ b/ets2panda/util/ast-builders/classDeclarationBuilder.h @@ -25,7 +25,7 @@ namespace ark::es2panda::ir { class ClassDeclarationBuilder : public AstBuilder { public: explicit ClassDeclarationBuilder(ark::ArenaAllocator *allocator) - : AstBuilder(allocator), decorators_(Allocator()->Adapter()) + : AstBuilder(allocator) { } @@ -35,22 +35,13 @@ public: return *this; } - ClassDeclarationBuilder &SetDecorators(ArenaVector &&decorators) - { - decorators_ = std::move(decorators); - return *this; - } - ClassDeclaration *Build() { - auto *node = AllocNode(def_, Allocator()); - node->AddDecorators(std::move(decorators_)); - return node; + return AllocNode(def_, Allocator()); } private: ClassDefinition *def_ = nullptr; - ArenaVector decorators_; }; } // namespace ark::es2panda::ir diff --git a/ets2panda/varbinder/ETSBinder.cpp b/ets2panda/varbinder/ETSBinder.cpp index d9cb8a738b58cf826eb18c5ba84b4faf0ce3071d..850810d3397b3eb723be4e3919908712ecc2b216 100644 --- a/ets2panda/varbinder/ETSBinder.cpp +++ b/ets2panda/varbinder/ETSBinder.cpp @@ -286,10 +286,6 @@ void ETSBinder::BuildETSTypeReference(ir::ETSTypeReference *typeRef) void ETSBinder::BuildObjectExpression(ir::ObjectExpression *obj) { - for (auto *it : obj->Decorators()) { - ResolveReference(it); - } - // NOTE: when we try to resolve references for Object Expression // we visit properties, example: // class C { x : boolean }