Lines Matching refs:ir
93 ir::AstNode *Transformer::VisitTSNodes(ir::AstNode *parent) in VisitTSNodes()
130 void Transformer::PushVariablesToNearestStatements(ir::BlockStatement *ast) in PushVariablesToNearestStatements()
196 ir::UpdateNodes Transformer::VisitTSNode(ir::AstNode *childNode) in VisitTSNode()
200 case ir::AstNodeType::IDENTIFIER: { in VisitTSNode()
230 case ir::AstNodeType::TS_MODULE_DECLARATION: { in VisitTSNode()
239 case ir::AstNodeType::TS_ENUM_DECLARATION: { in VisitTSNode()
248 case ir::AstNodeType::EXPORT_NAMED_DECLARATION: { in VisitTSNode()
281 return VisitExportClassDeclaration<ir::ExportNamedDeclaration>(node); in VisitTSNode()
286 case ir::AstNodeType::EXPORT_DEFAULT_DECLARATION: { in VisitTSNode()
291 return VisitExportClassDeclaration<ir::ExportDefaultDeclaration>(node); in VisitTSNode()
301 case ir::AstNodeType::TS_IMPORT_EQUALS_DECLARATION: { in VisitTSNode()
311 case ir::AstNodeType::CLASS_DECLARATION: { in VisitTSNode()
324 case ir::AstNodeType::CLASS_EXPRESSION: { in VisitTSNode()
333 case ir::AstNodeType::CLASS_DEFINITION: { in VisitTSNode()
343 case ir::AstNodeType::TS_PRIVATE_IDENTIFIER: { in VisitTSNode()
357 ir::UpdateNodes Transformer::VisitExportClassDeclaration(T *node) in VisitExportClassDeclaration()
361 if (std::holds_alternative<ir::AstNode *>(newDecl)) { in VisitExportClassDeclaration()
362 auto statement = std::get<ir::AstNode *>(newDecl); in VisitExportClassDeclaration()
367 auto statements = std::get<std::vector<ir::AstNode *>>(newDecl); in VisitExportClassDeclaration()
368 std::vector<ir::AstNode *> res; in VisitExportClassDeclaration()
422 ir::UpdateNodes Transformer::VisitClassExpression(ir::ClassExpression *node) in VisitClassExpression()
447 auto assignment = AllocNode<ir::AssignmentExpression>(CreateReferenceIdentifier(varName), in VisitClassExpression()
449 ArenaVector<ir::Expression *> sequence(Allocator()->Adapter()); in VisitClassExpression()
460 return AllocNode<ir::SequenceExpression>(std::move(sequence)); in VisitClassExpression()
463 void Transformer::VisitComputedProperty(ir::ClassDefinition *node) in VisitComputedProperty()
499 auto *newKey = AllocNode<ir::AssignmentExpression>(CreateReferenceIdentifier(name), in VisitComputedProperty()
511 auto *newKey = AllocNode<ir::AssignmentExpression>(CreateReferenceIdentifier(name), in VisitComputedProperty()
519 const ir::ClassDefinition *Transformer::GetClassReference(util::StringView name) const in GetClassReference()
540 util::StringView Transformer::CreateClassAliasName(ir::ClassDeclaration *node) in CreateClassAliasName()
548 void Transformer::VisitPrivateElement(ir::ClassDefinition *node) in VisitPrivateElement()
601 size_t Transformer::GetInsertPosForConstructor(ir::ClassDefinition *node) in GetInsertPosForConstructor()
604 ir::BlockStatement *blockStat = node->Ctor()->Function()->Body()->AsBlockStatement(); in GetInsertPosForConstructor()
633 void Transformer::FindSuperCall(const ir::AstNode *parent, bool *hasSuperCall) in FindSuperCall()
640 void Transformer::FindSuperCallInCtorChildNode(const ir::AstNode *childNode, bool *hasSuperCall) in FindSuperCallInCtorChildNode()
646 case ir::AstNodeType::CALL_EXPRESSION: { in FindSuperCallInCtorChildNode()
653 case ir::AstNodeType::CLASS_DEFINITION: in FindSuperCallInCtorChildNode()
654 case ir::AstNodeType::FUNCTION_DECLARATION: in FindSuperCallInCtorChildNode()
655 case ir::AstNodeType::FUNCTION_EXPRESSION: in FindSuperCallInCtorChildNode()
656 case ir::AstNodeType::ARROW_FUNCTION_EXPRESSION: { in FindSuperCallInCtorChildNode()
666 std::vector<ir::ExpressionStatement *> Transformer::VisitInstanceProperty(ir::ClassDefinition *node) in VisitInstanceProperty()
682 std::vector<ir::ClassProperty *> addToCtor; in VisitInstanceProperty()
684 std::vector<ir::ExpressionStatement *> computedProps; in VisitInstanceProperty()
697 ir::BlockStatement *blockStat = node->Ctor()->Function()->Body()->AsBlockStatement(); in VisitInstanceProperty()
701 computedProps.push_back(AllocNode<ir::ExpressionStatement>(it->Key())); in VisitInstanceProperty()
704 ir::MemberExpression *left = nullptr; in VisitInstanceProperty()
707 left = AllocNode<ir::MemberExpression>(AllocNode<ir::ThisExpression>(), member, in VisitInstanceProperty()
708 … ir::MemberExpression::MemberExpressionKind::PROPERTY_ACCESS, in VisitInstanceProperty()
711 left = AllocNode<ir::MemberExpression>(AllocNode<ir::ThisExpression>(), member, in VisitInstanceProperty()
712 … ir::MemberExpression::MemberExpressionKind::ELEMENT_ACCESS, in VisitInstanceProperty()
715 auto assignment = AllocNode<ir::AssignmentExpression>(left, it->Value(), in VisitInstanceProperty()
719 blockStat->AddStatementAtPos(insertPos, AllocNode<ir::ExpressionStatement>(assignment)); in VisitInstanceProperty()
725 void Transformer::VisitTSParameterProperty(ir::ClassDefinition *node) in VisitTSParameterProperty()
763 auto left = AllocNode<ir::MemberExpression>(AllocNode<ir::ThisExpression>(), in VisitTSParameterProperty()
764 AllocNode<ir::Identifier>(name), in VisitTSParameterProperty()
765 ir::MemberExpression::MemberExpressionKind::PROPERTY_ACCESS, false, false); in VisitTSParameterProperty()
767 auto assignment = AllocNode<ir::AssignmentExpression>(left, right, in VisitTSParameterProperty()
769 … blockStatement->AddStatementAtPos(insertPos, AllocNode<ir::ExpressionStatement>(assignment)); in VisitTSParameterProperty()
774 void Transformer::VisitAutoAccessorProperty(ir::ClassDefinition *node) in VisitAutoAccessorProperty()
777 std::vector<ir::ClassProperty *> autoAccessorPropertyList; in VisitAutoAccessorProperty()
793 ir::Expression *Transformer::CopyClassKeyExpression(ir::Expression *orginalExpr) in CopyClassKeyExpression()
795 ir::Expression *newExpr = nullptr; in CopyClassKeyExpression()
797 case ir::AstNodeType::IDENTIFIER: { in CopyClassKeyExpression()
798 ir::Identifier *ident = orginalExpr->AsIdentifier(); in CopyClassKeyExpression()
799 newExpr = AllocNode<ir::Identifier>(ident->Name()); in CopyClassKeyExpression()
802 case ir::AstNodeType::PRIVATE_IDENTIFIER: { in CopyClassKeyExpression()
803 ir::PrivateIdentifier *ident = orginalExpr->AsPrivateIdentifier(); in CopyClassKeyExpression()
804 newExpr = AllocNode<ir::PrivateIdentifier>(ident->Name()); in CopyClassKeyExpression()
807 case ir::AstNodeType::TS_PRIVATE_IDENTIFIER: { in CopyClassKeyExpression()
808 ir::Identifier *ident = orginalExpr->AsTSPrivateIdentifier()->Key()->AsIdentifier(); in CopyClassKeyExpression()
809 newExpr = AllocNode<ir::Identifier>(ident->Name()); in CopyClassKeyExpression()
812 case ir::AstNodeType::STRING_LITERAL: { in CopyClassKeyExpression()
813 ir::StringLiteral *stringLiteral = orginalExpr->AsStringLiteral(); in CopyClassKeyExpression()
814 newExpr = AllocNode<ir::StringLiteral>(stringLiteral->Str()); in CopyClassKeyExpression()
817 case ir::AstNodeType::BIGINT_LITERAL: { in CopyClassKeyExpression()
818 ir::BigIntLiteral *bigIntLiteral = orginalExpr->AsBigIntLiteral(); in CopyClassKeyExpression()
819 newExpr = AllocNode<ir::BigIntLiteral>(bigIntLiteral->Str()); in CopyClassKeyExpression()
822 case ir::AstNodeType::NUMBER_LITERAL: { in CopyClassKeyExpression()
824 newExpr = AllocNode<ir::NumberLiteral>(numberLiteral->Number(), numberLiteral->Str()); in CopyClassKeyExpression()
835 void Transformer::ProcessAutoAccessorProperty(ir::ClassProperty *node, ir::ClassDefinition *classDe… in ProcessAutoAccessorProperty()
877 auto *internalIdentifier = AllocNode<ir::Identifier>(transformedName); in ProcessAutoAccessorProperty()
889 ir::ModifierFlags modifierMask = ir::ModifierFlags::ACCESS | ir::ModifierFlags::STATIC; in ProcessAutoAccessorProperty()
890 ir::ModifierFlags modifiers = static_cast<ir::ModifierFlags>(node->Modifiers() & modifierMask); in ProcessAutoAccessorProperty()
892 …MethodInfo getMethodInfo = {CopyClassKeyExpression(originKeyNode), backupVarName, ir::MethodDefini… in ProcessAutoAccessorProperty()
895 …MethodInfo setMethodInfo = {CopyClassKeyExpression(originKeyNode), backupVarName, ir::MethodDefini… in ProcessAutoAccessorProperty()
900 ir::MethodDefinition* Transformer::AddMethodToClass(ir::ClassDefinition *classDefinition, in AddMethodToClass()
902 ArenaVector<ir::Expression *> ¶ms, in AddMethodToClass()
903 ArenaVector<ir::Statement *> &statements) in AddMethodToClass()
906 …ASSERT((methodInfo.kind == ir::MethodDefinitionKind::GET) || (methodInfo.kind == ir::MethodDefinit… in AddMethodToClass()
914 auto *body = AllocNode<ir::BlockStatement>(scope, std::move(statements)); in AddMethodToClass()
915 auto *func = AllocNode<ir::ScriptFunction>(scope, std::move(params), nullptr, body, nullptr, in AddMethodToClass()
916 ir::ScriptFunctionFlags::METHOD, false, false); in AddMethodToClass()
921 auto *funcExpr = AllocNode<ir::FunctionExpression>(func); in AddMethodToClass()
922 ir::Expression *keyNode = nullptr; in AddMethodToClass()
926 if (methodInfo.kind == ir::MethodDefinitionKind::GET) { in AddMethodToClass()
928 keyNode = AllocNode<ir::AssignmentExpression>(backupNode, methodInfo.key, in AddMethodToClass()
936 ArenaVector<ir::Decorator *> decorators(Allocator()->Adapter()); in AddMethodToClass()
937 ArenaVector<ir::ParamDecorators> paramDecorators(Allocator()->Adapter()); in AddMethodToClass()
938 auto *method = AllocNode<ir::MethodDefinition>(methodInfo.kind, keyNode, funcExpr, in AddMethodToClass()
948 ir::MethodDefinition* Transformer::AddGeneratedMethodToClass(ir::ClassDefinition *classDefinition, in AddGeneratedMethodToClass()
953 ArenaVector<ir::Expression *> params(Allocator()->Adapter()); in AddGeneratedMethodToClass()
954 ArenaVector<ir::Statement *> statements(Allocator()->Adapter()); in AddGeneratedMethodToClass()
956 if (methodInfo.kind == ir::MethodDefinitionKind::GET) { in AddGeneratedMethodToClass()
960 auto *identNode = AllocNode<ir::Identifier>(propName); in AddGeneratedMethodToClass()
961 … auto *returnExpr = AllocNode<ir::MemberExpression>(AllocNode<ir::ThisExpression>(), identNode, in AddGeneratedMethodToClass()
962 ir::MemberExpression::MemberExpressionKind::PROPERTY_ACCESS, false, false); in AddGeneratedMethodToClass()
963 ir::ReturnStatement *returnStatement = AllocNode<ir::ReturnStatement>(returnExpr); in AddGeneratedMethodToClass()
965 } else if (methodInfo.kind == ir::MethodDefinitionKind::SET) { in AddGeneratedMethodToClass()
971 auto *identNode = AllocNode<ir::Identifier>(paramName); in AddGeneratedMethodToClass()
974 auto *identNodeProp = AllocNode<ir::Identifier>(propName); in AddGeneratedMethodToClass()
975 …auto *propAccessExpr = AllocNode<ir::MemberExpression>(AllocNode<ir::ThisExpression>(), identNodeP… in AddGeneratedMethodToClass()
976 ir::MemberExpression::MemberExpressionKind::PROPERTY_ACCESS, false, false); in AddGeneratedMethodToClass()
977 auto *identNodeRight = AllocNode<ir::Identifier>(paramName); in AddGeneratedMethodToClass()
978 auto *setExpr = AllocNode<ir::AssignmentExpression>(propAccessExpr, identNodeRight, in AddGeneratedMethodToClass()
980 auto *exprStatementNode = AllocNode<ir::ExpressionStatement>(setExpr); in AddGeneratedMethodToClass()
989 void Transformer::AddGeneratedSetOrGetMethodToClass(ir::ClassDefinition *classDefinition, in AddGeneratedSetOrGetMethodToClass()
990 ir::ClassProperty *propertyNode, in AddGeneratedSetOrGetMethodToClass()
1002 std::vector<ir::ExpressionStatement *> Transformer::VisitStaticProperty(ir::ClassDefinition *node, in VisitStaticProperty()
1029 std::vector<ir::ExpressionStatement *> res; in VisitStaticProperty()
1041 res.push_back(AllocNode<ir::ExpressionStatement>(classProperty->Key())); in VisitStaticProperty()
1048 ir::MemberExpression *left = nullptr; in VisitStaticProperty()
1051 left = AllocNode<ir::MemberExpression>(CreateReferenceIdentifier(name), member, in VisitStaticProperty()
1052 … ir::MemberExpression::MemberExpressionKind::PROPERTY_ACCESS, in VisitStaticProperty()
1055 left = AllocNode<ir::MemberExpression>(CreateReferenceIdentifier(name), member, in VisitStaticProperty()
1056 … ir::MemberExpression::MemberExpressionKind::ELEMENT_ACCESS, in VisitStaticProperty()
1059 …auto assignment = AllocNode<ir::AssignmentExpression>(left, right, lexer::TokenType::PUNCTUATOR_SU… in VisitStaticProperty()
1060 res.push_back(AllocNode<ir::ExpressionStatement>(assignment)); in VisitStaticProperty()
1065 ir::UpdateNodes Transformer::VisitClassDeclaration(ir::ClassDeclaration *node) in VisitClassDeclaration()
1069 std::vector<ir::AstNode *> res; in VisitClassDeclaration()
1074 auto *clsExpression = AllocNode<ir::ClassExpression>(node->Definition()); in VisitClassDeclaration()
1075 …auto *assignExpr = AllocNode<ir::AssignmentExpression>(CreateReferenceIdentifier(aliasName), clsEx… in VisitClassDeclaration()
1098 ir::ClassStaticBlock *staticBlock = CreateClassStaticBlock(node, hasPrivateIdentifier); in VisitClassDeclaration()
1101 std::vector<ir::AstNode *> staticMemberDecorators; in VisitClassDeclaration()
1159 res.push_back(AllocNode<ir::ExpressionStatement>(classProperty->Key())); in VisitClassDeclaration()
1221 ir::ClassStaticBlock *Transformer::CreateClassStaticBlock(ir::ClassDeclaration *node, bool hasPriva… in CreateClassStaticBlock()
1227 ir::MethodDefinition *staticInitializer = node->Definition()->StaticInitializer(); in CreateClassStaticBlock()
1232 ir::BlockStatement *blockStatement = nullptr; in CreateClassStaticBlock()
1236 ArenaVector<ir::Statement *> statements(Allocator()->Adapter()); in CreateClassStaticBlock()
1237 blockStatement = AllocNode<ir::BlockStatement>(localCtx.GetScope(), std::move(statements)); in CreateClassStaticBlock()
1241 …ir::ClassStaticBlock *staticBlock = AllocNode<ir::ClassStaticBlock>(lexScope.GetScope(), blockStat… in CreateClassStaticBlock()
1248 bool Transformer::HasPrivateIdentifierInDecorators(const ir::ClassDefinition *classDefinition) in HasPrivateIdentifierInDecorators()
1285 void Transformer::FindPrivateIdentifierInDecorator(const ir::AstNode *parent, bool *hasprivateIdent… in FindPrivateIdentifierInDecorator()
1292 void Transformer::FindPrivateIdentifierInChildNode(const ir::AstNode *childNode, bool *hasprivateId… in FindPrivateIdentifierInChildNode()
1299 case ir::AstNodeType::MEMBER_EXPRESSION: { in FindPrivateIdentifierInChildNode()
1313 std::vector<ir::AstNode *> Transformer::CreateVariableDeclarationForDecorators(ir::AstNode *node) in CreateVariableDeclarationForDecorators()
1315 std::vector<ir::AstNode *> res; in CreateVariableDeclarationForDecorators()
1318 case ir::AstNodeType::METHOD_DEFINITION: { in CreateVariableDeclarationForDecorators()
1337 case ir::AstNodeType::CLASS_PROPERTY: { in CreateVariableDeclarationForDecorators()
1346 case ir::AstNodeType::CLASS_DECLARATION: { in CreateVariableDeclarationForDecorators()
1371 std::vector<ir::AstNode *> Transformer::CreateParamDecorators(util::StringView className, in CreateParamDecorators()
1372 ir::MethodDefinition *node, in CreateParamDecorators()
1373 … const std::vector<ir::AstNode *> &variableDeclarations, in CreateParamDecorators()
1392 std::vector<ir::AstNode *> res; in CreateParamDecorators()
1399 ArenaVector<ir::Expression *> arguments(Allocator()->Adapter()); in CreateParamDecorators()
1404 arguments.push_back(AllocNode<ir::NumberLiteral>(paramIndex)); in CreateParamDecorators()
1405 auto *callExpr = AllocNode<ir::CallExpression>( in CreateParamDecorators()
1408 res.push_back(AllocNode<ir::ExpressionStatement>(callExpr)); in CreateParamDecorators()
1414 std::vector<ir::AstNode *> Transformer::CreatePropertyDecorators(util::StringView className, in CreatePropertyDecorators()
1415 ir::ClassProperty *node, in CreatePropertyDecorators()
1416 … const std::vector<ir::AstNode *> &variableDeclarations, in CreatePropertyDecorators()
1434 std::vector<ir::AstNode *> res; in CreatePropertyDecorators()
1437 ArenaVector<ir::Expression *> arguments(Allocator()->Adapter()); in CreatePropertyDecorators()
1440 auto *callExpr = AllocNode<ir::CallExpression>( in CreatePropertyDecorators()
1444 res.push_back(AllocNode<ir::ExpressionStatement>(callExpr)); in CreatePropertyDecorators()
1449 std::vector<ir::AstNode *> Transformer::CreateMethodDecorators(util::StringView className, in CreateMethodDecorators()
1450 ir::MethodDefinition *node, in CreateMethodDecorators()
1451 … const std::vector<ir::AstNode *> &variableDeclarations, in CreateMethodDecorators()
1473 std::vector<ir::AstNode *> res; in CreateMethodDecorators()
1477 ArenaVector<ir::Expression *> arguments(Allocator()->Adapter()); in CreateMethodDecorators()
1485 arguments.push_back(AllocNode<ir::Identifier>(varName)); in CreateMethodDecorators()
1486 auto *callExpr = AllocNode<ir::CallExpression>( in CreateMethodDecorators()
1490 … auto newValue = AllocNode<ir::BinaryExpression>(callExpr, AllocNode<ir::Identifier>(varName), in CreateMethodDecorators()
1496 res.push_back(AllocNode<ir::ExpressionStatement>(defineProperty)); in CreateMethodDecorators()
1501 ir::Expression *Transformer::CreateDecoratorTarget(util::StringView className, bool isStatic) in CreateDecoratorTarget()
1509 ir::MemberExpression *Transformer::CreateClassPrototype(util::StringView className) in CreateClassPrototype()
1512 return AllocNode<ir::MemberExpression>(cls, AllocNode<ir::Identifier>(CLASS_PROTOTYPE), in CreateClassPrototype()
1513 ir::MemberExpression::MemberExpressionKind::PROPERTY_ACCESS, false, false); in CreateClassPrototype()
1516 ir::CallExpression *Transformer::CreateDefinePropertyCall(ir::Expression *target, in CreateDefinePropertyCall()
1517 ir::Expression *key, in CreateDefinePropertyCall()
1518 ir::Expression *value) in CreateDefinePropertyCall()
1521 …auto *caller = AllocNode<ir::MemberExpression>(id, AllocNode<ir::Identifier>(FUNC_NAME_OF_DEFINE_P… in CreateDefinePropertyCall()
1522 ir::MemberExpression::MemberExpressionKind::PROPERTY_ACCESS, false, false); in CreateDefinePropertyCall()
1523 ArenaVector<ir::Expression *> arguments(Allocator()->Adapter()); in CreateDefinePropertyCall()
1527 return AllocNode<ir::CallExpression>(caller, std::move(arguments), nullptr, false); in CreateDefinePropertyCall()
1530 ir::CallExpression *Transformer::CreateGetOwnPropertyDescriptorCall(ir::Expression *target, ir::Exp… in CreateGetOwnPropertyDescriptorCall()
1533 auto *caller = AllocNode<ir::MemberExpression>(id, in CreateGetOwnPropertyDescriptorCall()
1534 AllocNode<ir::Identifier>(FUNC_NAME_OF_GET_OWN_PROPERTY_DESCRIPTOR), in CreateGetOwnPropertyDescriptorCall()
1535 ir::MemberExpression::MemberExpressionKind::PROPERTY_ACCESS, false, false); in CreateGetOwnPropertyDescriptorCall()
1536 ArenaVector<ir::Expression *> arguments(Allocator()->Adapter()); in CreateGetOwnPropertyDescriptorCall()
1539 return AllocNode<ir::CallExpression>(caller, std::move(arguments), nullptr, false); in CreateGetOwnPropertyDescriptorCall()
1542 ir::Expression *Transformer::GetClassMemberName(ir::Expression *key, bool isComputed, in GetClassMemberName()
1543 ir::Statement *node, bool inDecorator) in GetClassMemberName()
1547 return AllocNode<ir::Identifier>(name); in GetClassMemberName()
1551 return AllocNode<ir::StringLiteral>(key->AsIdentifier()->Name()); in GetClassMemberName()
1553 return AllocNode<ir::Identifier>(key->AsIdentifier()->Name()); in GetClassMemberName()
1556 return AllocNode<ir::StringLiteral>(key->AsStringLiteral()->Str()); in GetClassMemberName()
1558 …return AllocNode<ir::NumberLiteral>(key->AsNumberLiteral()->Number(), key->AsNumberLiteral()->Str(… in GetClassMemberName()
1560 return AllocNode<ir::BigIntLiteral>(key->AsBigIntLiteral()->Str()); in GetClassMemberName()
1566 std::vector<ir::AstNode *> Transformer::CreateClassDecorators(ir::ClassDeclaration *node, in CreateClassDecorators()
1567 … const std::vector<ir::AstNode *> &variableDeclarations) in CreateClassDecorators()
1587 std::vector<ir::AstNode *> res; in CreateClassDecorators()
1589 ArenaVector<ir::Expression *> arguments(Allocator()->Adapter()); in CreateClassDecorators()
1591 auto *callExpr = AllocNode<ir::CallExpression>( in CreateClassDecorators()
1597 …auto right = AllocNode<ir::BinaryExpression>(callExpr, id, lexer::TokenType::PUNCTUATOR_LOGICAL_OR… in CreateClassDecorators()
1599 auto innerAssignExpr = AllocNode<ir::AssignmentExpression>(middle, right, in CreateClassDecorators()
1601 auto *assignExpr = AllocNode<ir::AssignmentExpression>(left, innerAssignExpr, in CreateClassDecorators()
1604 res.push_back(AllocNode<ir::ExpressionStatement>(assignExpr)); in CreateClassDecorators()
1609 ir::AstNode *Transformer::VisitTsImportEqualsDeclaration(ir::TSImportEqualsDeclaration *node) in VisitTsImportEqualsDeclaration()
1619 auto *left = AllocNode<ir::MemberExpression>(id, AllocNode<ir::Identifier>(name), in VisitTsImportEqualsDeclaration()
1620 ir::MemberExpression::MemberExpressionKind::PROPERTY_ACCESS, false, false); in VisitTsImportEqualsDeclaration()
1621 ir::Expression *right = CreateMemberExpressionFromQualified(express); in VisitTsImportEqualsDeclaration()
1622 auto *assignExpr = AllocNode<ir::AssignmentExpression>(left, right, in VisitTsImportEqualsDeclaration()
1624 auto *res = AllocNode<ir::ExpressionStatement>(assignExpr); in VisitTsImportEqualsDeclaration()
1628 ir::Expression *init = CreateMemberExpressionFromQualified(express); in VisitTsImportEqualsDeclaration()
1629 … ir::Statement *res = CreateVariableDeclarationWithIdentify(name, VariableParsingFlags::VAR, node, in VisitTsImportEqualsDeclaration()
1632 ArenaVector<ir::ExportSpecifier *> specifiers(Allocator()->Adapter()); in VisitTsImportEqualsDeclaration()
1633 res = AllocNode<ir::ExportNamedDeclaration>(res, std::move(specifiers)); in VisitTsImportEqualsDeclaration()
1639 bool Transformer::IsInstantiatedImportEquals(const ir::TSImportEqualsDeclaration *node, binder::Sco… in IsInstantiatedImportEquals()
1655 binder::Variable *Transformer::FindTSModuleVariable(const ir::Expression *node, in FindTSModuleVariable()
1738 std::vector<ir::AstNode *> Transformer::VisitExportNamedVariable(ir::Statement *decl) in VisitExportNamedVariable()
1740 std::vector<ir::AstNode *> res; in VisitExportNamedVariable()
1745 auto *left = std::get<ir::AstNode *>(VisitTSNode(it->Id()))->AsExpression(); in VisitExportNamedVariable()
1746 auto *right = std::get<ir::AstNode *>(VisitTSNode(it->Init()))->AsExpression(); in VisitExportNamedVariable()
1747 auto *assignExpr = AllocNode<ir::AssignmentExpression>(left, right, in VisitExportNamedVariable()
1749 res.push_back(AllocNode<ir::ExpressionStatement>(assignExpr)); in VisitExportNamedVariable()
1754 if (std::holds_alternative<ir::AstNode *>(newDecl)) { in VisitExportNamedVariable()
1755 res.push_back(std::get<ir::AstNode *>(newDecl)); in VisitExportNamedVariable()
1757 auto statements = std::get<std::vector<ir::AstNode *>>(newDecl); in VisitExportNamedVariable()
1770 ir::Expression *Transformer::CreateMemberExpressionFromQualified(ir::Expression *node) in CreateMemberExpressionFromQualified()
1775 auto *right = AllocNode<ir::Identifier>(tsQualifiedName->Right()->Name()); in CreateMemberExpressionFromQualified()
1776 return AllocNode<ir::MemberExpression>(left, right, in CreateMemberExpressionFromQualified()
1777 ir::MemberExpression::MemberExpressionKind::PROPERTY_ACCESS, false, false); in CreateMemberExpressionFromQualified()
1784 void Transformer::SetOriginalNode(ir::UpdateNodes res, ir::AstNode *originalNode) const in SetOriginalNode()
1786 if (std::holds_alternative<ir::AstNode *>(res)) { in SetOriginalNode()
1787 auto *node = std::get<ir::AstNode *>(res); in SetOriginalNode()
1794 auto nodes = std::get<std::vector<ir::AstNode *>>(res); in SetOriginalNode()
1802 void Transformer::ResetParentScope(ir::UpdateNodes res, binder::Scope *parentScope) const in ResetParentScope()
1804 if (std::holds_alternative<ir::AstNode *>(res)) { in ResetParentScope()
1805 auto *node = std::get<ir::AstNode *>(res); in ResetParentScope()
1811 auto nodes = std::get<std::vector<ir::AstNode *>>(res); in ResetParentScope()
1818 ir::ExpressionStatement *Transformer::CreateTsModuleAssignment(util::StringView name) in CreateTsModuleAssignment()
1822 auto *left = AllocNode<ir::MemberExpression>(id, AllocNode<ir::Identifier>(name), in CreateTsModuleAssignment()
1823 ir::MemberExpression::MemberExpressionKind::PROPERTY_ACCESS, false, false); in CreateTsModuleAssignment()
1825 …auto *assignExpr = AllocNode<ir::AssignmentExpression>(left, right, lexer::TokenType::PUNCTUATOR_S… in CreateTsModuleAssignment()
1826 return AllocNode<ir::ExpressionStatement>(assignExpr); in CreateTsModuleAssignment()
1829 util::StringView Transformer::GetNameFromModuleDeclaration(ir::TSModuleDeclaration *node) const in GetNameFromModuleDeclaration()
1834 ir::VariableDeclaration *Transformer::CreateVariableDeclarationWithIdentify(util::StringView name, in CreateVariableDeclarationWithIdentify()
1836 ir::AstNode *node, in CreateVariableDeclarationWithIdentify()
1838 ir::Expression *init, in CreateVariableDeclarationWithIdentify()
1842 auto *declarator = AllocNode<ir::VariableDeclarator>(ident, init); in CreateVariableDeclarationWithIdentify()
1843 ArenaVector<ir::VariableDeclarator *> declarators(Allocator()->Adapter()); in CreateVariableDeclarationWithIdentify()
1846 auto varKind = ir::VariableDeclaration::VariableDeclarationKind::VAR; in CreateVariableDeclarationWithIdentify()
1849 varKind = ir::VariableDeclaration::VariableDeclarationKind::LET; in CreateVariableDeclarationWithIdentify()
1851 varKind = ir::VariableDeclaration::VariableDeclarationKind::CONST; in CreateVariableDeclarationWithIdentify()
1853 auto *declaration = AllocNode<ir::VariableDeclaration>(varKind, std::move(declarators), false); in CreateVariableDeclarationWithIdentify()
1877 util::StringView Transformer::GetParamName(ir::AstNode *node, util::StringView name) const in GetParamName()
1896 ir::CallExpression *Transformer::CreateCallExpressionForTsModule(ir::TSModuleDeclaration *node, in CreateCallExpressionForTsModule()
1900 ir::ScriptFunction *funcNode = nullptr; in CreateCallExpressionForTsModule()
1908 ArenaVector<ir::Expression *> params(Allocator()->Adapter()); in CreateCallExpressionForTsModule()
1913 ir::BlockStatement *blockNode = nullptr; in CreateCallExpressionForTsModule()
1919 … auto body = std::get<std::vector<ir::AstNode *>>(VisitTsModuleDeclaration(tsModule, true)); in CreateCallExpressionForTsModule()
1920 ArenaVector<ir::Statement *> statements(Allocator()->Adapter()); in CreateCallExpressionForTsModule()
1922 statements.push_back(static_cast<ir::Statement *>(it)); in CreateCallExpressionForTsModule()
1924 blockNode = AllocNode<ir::BlockStatement>(funcScope, std::move(statements)); in CreateCallExpressionForTsModule()
1927 blockNode = AllocNode<ir::BlockStatement>(funcScope, in CreateCallExpressionForTsModule()
1934 …funcNode = AllocNode<ir::ScriptFunction>(funcScope, std::move(params), nullptr, blockNode, nullptr, in CreateCallExpressionForTsModule()
1935 ir::ScriptFunctionFlags::NONE, false, Extension() == ScriptExtension::TS); in CreateCallExpressionForTsModule()
1941 auto *funcExpr = AllocNode<ir::FunctionExpression>(funcNode); in CreateCallExpressionForTsModule()
1943 ArenaVector<ir::Expression *> arguments = CreateCallExpressionArguments(name, isExport); in CreateCallExpressionForTsModule()
1944 auto *callExpr = AllocNode<ir::CallExpression>(funcExpr, std::move(arguments), nullptr, false); in CreateCallExpressionForTsModule()
1949 ir::Expression *Transformer::CreateTsModuleParam(util::StringView paramName, bool isExport) in CreateTsModuleParam()
1954 return AllocNode<ir::MemberExpression>(id, AllocNode<ir::Identifier>(paramName), in CreateTsModuleParam()
1955 ir::MemberExpression::MemberExpressionKind::PROPERTY_ACCESS, false, false); in CreateTsModuleParam()
1962 void Transformer::AddExportLocalEntryItem(util::StringView name, const ir::Identifier *identifier) in AddExportLocalEntryItem()
1970 ir::UpdateNodes Transformer::VisitTsModuleDeclaration(ir::TSModuleDeclaration *node, bool isExport) in VisitTsModuleDeclaration()
1972 std::vector<ir::AstNode *> res; in VisitTsModuleDeclaration()
1982 auto *exprStatementNode = AllocNode<ir::ExpressionStatement>(callExpr); in VisitTsModuleDeclaration()
1988 ir::Identifier *Transformer::CreateReferenceIdentifier(util::StringView name) in CreateReferenceIdentifier()
1990 auto *node = AllocNode<ir::Identifier>(name); in CreateReferenceIdentifier()
1995 ir::UpdateNodes Transformer::VisitTsEnumDeclaration(ir::TSEnumDeclaration *node, bool isExport) in VisitTsEnumDeclaration()
1997 std::vector<ir::AstNode *> res; in VisitTsEnumDeclaration()
2007 auto *exprStatementNode = AllocNode<ir::ExpressionStatement>(callExpr); in VisitTsEnumDeclaration()
2013 ir::AstNode *Transformer::CreateVariableDeclarationForTSEnumOrTSModule(util::StringView name, in CreateVariableDeclarationForTSEnumOrTSModule()
2014 … ir::AstNode *node, bool isExport) in CreateVariableDeclarationForTSEnumOrTSModule()
2020 ArenaVector<ir::ExportSpecifier *> specifiers(Allocator()->Adapter()); in CreateVariableDeclarationForTSEnumOrTSModule()
2021 …auto *exportDeclaration = AllocNode<ir::ExportNamedDeclaration>(variableDeclaration, std::move(spe… in CreateVariableDeclarationForTSEnumOrTSModule()
2030 util::StringView Transformer::GetNameFromTsEnumDeclaration(const ir::TSEnumDeclaration *node) const in GetNameFromTsEnumDeclaration()
2036 ir::CallExpression *Transformer::CreateCallExpressionForTsEnum(ir::TSEnumDeclaration *node, util::S… in CreateCallExpressionForTsEnum()
2039 ir::ScriptFunction *funcNode = nullptr; in CreateCallExpressionForTsEnum()
2047 ArenaVector<ir::Expression *> params(Allocator()->Adapter()); in CreateCallExpressionForTsEnum()
2052 ir::BlockStatement *blockNode = nullptr; in CreateCallExpressionForTsEnum()
2057 ArenaVector<ir::TSEnumMember *> members = node->Members(); in CreateCallExpressionForTsEnum()
2058 ArenaVector<ir::Statement *> statements(Allocator()->Adapter()); in CreateCallExpressionForTsEnum()
2059 ir::TSEnumMember *preTsEnumMember = nullptr; in CreateCallExpressionForTsEnum()
2067 blockNode = AllocNode<ir::BlockStatement>(funcScope, std::move(statements)); in CreateCallExpressionForTsEnum()
2071 …funcNode = AllocNode<ir::ScriptFunction>(funcScope, std::move(params), nullptr, blockNode, nullptr, in CreateCallExpressionForTsEnum()
2072 ir::ScriptFunctionFlags::NONE, false, Extension() == ScriptExtension::TS); in CreateCallExpressionForTsEnum()
2077 auto *funcExpr = AllocNode<ir::FunctionExpression>(funcNode); in CreateCallExpressionForTsEnum()
2079 ArenaVector<ir::Expression *> arguments = CreateCallExpressionArguments(name, isExport); in CreateCallExpressionForTsEnum()
2080 auto *callExpr = AllocNode<ir::CallExpression>(funcExpr, std::move(arguments), nullptr, false); in CreateCallExpressionForTsEnum()
2085 ArenaVector<ir::Expression *> Transformer::CreateCallExpressionArguments(util::StringView name, boo… in CreateCallExpressionArguments()
2087 ArenaVector<ir::Expression *> arguments(Allocator()->Adapter()); in CreateCallExpressionArguments()
2088 ArenaVector<ir::Expression *> properties(Allocator()->Adapter()); in CreateCallExpressionArguments()
2089 auto *objectExpression = AllocNode<ir::ObjectExpression>(ir::AstNodeType::OBJECT_EXPRESSION, in CreateCallExpressionArguments()
2092 auto assignExpr = AllocNode<ir::AssignmentExpression>(CreateTsModuleParam(name, isExport), in CreateCallExpressionArguments()
2095 auto argument = AllocNode<ir::BinaryExpression>(CreateTsModuleParam(name, isExport), in CreateCallExpressionArguments()
2100 arguments.push_back(AllocNode<ir::AssignmentExpression>(id, argument, in CreateCallExpressionArguments()
2109 ir::ExpressionStatement *Transformer::CreateTsEnumMember(ir::TSEnumMember *node, ir::TSEnumMember *… in CreateTsEnumMember()
2132 ir::ExpressionStatement *Transformer::CreateTsEnumMemberWithStringInit(ir::TSEnumMember *node, in CreateTsEnumMemberWithStringInit()
2138 auto *property = AllocNode<ir::StringLiteral>(enumMemberName); in CreateTsEnumMemberWithStringInit()
2139 auto *left = AllocNode<ir::MemberExpression>(object, property, in CreateTsEnumMemberWithStringInit()
2140 … ir::MemberExpression::MemberExpressionKind::ELEMENT_ACCESS, in CreateTsEnumMemberWithStringInit()
2142 auto *right = std::get<ir::AstNode *>(VisitTSNode(node->Init()))->AsExpression(); in CreateTsEnumMemberWithStringInit()
2144 …auto *assignExpr = AllocNode<ir::AssignmentExpression>(left, right, lexer::TokenType::PUNCTUATOR_S… in CreateTsEnumMemberWithStringInit()
2145 auto *exprStatementNode = AllocNode<ir::ExpressionStatement>(assignExpr); in CreateTsEnumMemberWithStringInit()
2150 ir::ExpressionStatement *Transformer::CreateTsEnumMemberWithNumberInit(ir::TSEnumMember *node, in CreateTsEnumMemberWithNumberInit()
2156 auto *innerProperty = AllocNode<ir::StringLiteral>(enumMemberName); in CreateTsEnumMemberWithNumberInit()
2157 auto *innerLeft = AllocNode<ir::MemberExpression>(innerObject, innerProperty, in CreateTsEnumMemberWithNumberInit()
2158 … ir::MemberExpression::MemberExpressionKind::ELEMENT_ACCESS, in CreateTsEnumMemberWithNumberInit()
2160 auto *innerRight = std::get<ir::AstNode *>(VisitTSNode(node->Init()))->AsExpression(); in CreateTsEnumMemberWithNumberInit()
2163 auto *property = AllocNode<ir::AssignmentExpression>(innerLeft, innerRight, in CreateTsEnumMemberWithNumberInit()
2165 auto *left = AllocNode<ir::MemberExpression>(object, property, in CreateTsEnumMemberWithNumberInit()
2166 … ir::MemberExpression::MemberExpressionKind::ELEMENT_ACCESS, in CreateTsEnumMemberWithNumberInit()
2169 auto *right = AllocNode<ir::StringLiteral>(enumMemberName); in CreateTsEnumMemberWithNumberInit()
2171 …auto *assignExpr = AllocNode<ir::AssignmentExpression>(left, right, lexer::TokenType::PUNCTUATOR_S… in CreateTsEnumMemberWithNumberInit()
2172 auto *exprStatementNode = AllocNode<ir::ExpressionStatement>(assignExpr); in CreateTsEnumMemberWithNumberInit()
2177 ir::ExpressionStatement *Transformer::CreateTsEnumMemberWithoutInit(ir::TSEnumMember *node, in CreateTsEnumMemberWithoutInit()
2178 ir::TSEnumMember *preNode, in CreateTsEnumMemberWithoutInit()
2184 auto *innerProperty = AllocNode<ir::StringLiteral>(enumMemberName); in CreateTsEnumMemberWithoutInit()
2185 auto *innerLeft = AllocNode<ir::MemberExpression>(innerObject, innerProperty, in CreateTsEnumMemberWithoutInit()
2186 … ir::MemberExpression::MemberExpressionKind::ELEMENT_ACCESS, in CreateTsEnumMemberWithoutInit()
2189 ir::AssignmentExpression *property = nullptr; in CreateTsEnumMemberWithoutInit()
2191 auto *innerRight = AllocNode<ir::NumberLiteral>(0); in CreateTsEnumMemberWithoutInit()
2192 property = AllocNode<ir::AssignmentExpression>(innerLeft, innerRight, in CreateTsEnumMemberWithoutInit()
2196 … auto *innerPropertyForMemberExpr = AllocNode<ir::Identifier>(GetNameFromEnumMember(preNode)); in CreateTsEnumMemberWithoutInit()
2197 …auto *innerMemberExpr = AllocNode<ir::MemberExpression>(innerRightObject, innerPropertyForMemberEx… in CreateTsEnumMemberWithoutInit()
2198 ir::MemberExpression::MemberExpressionKind::PROPERTY_ACCESS, false, false); in CreateTsEnumMemberWithoutInit()
2199 …auto *innerRight = AllocNode<ir::BinaryExpression>(innerMemberExpr, AllocNode<ir::NumberLiteral>(1… in CreateTsEnumMemberWithoutInit()
2201 property = AllocNode<ir::AssignmentExpression>(innerLeft, innerRight, in CreateTsEnumMemberWithoutInit()
2205 auto *left = AllocNode<ir::MemberExpression>(object, property, in CreateTsEnumMemberWithoutInit()
2206 … ir::MemberExpression::MemberExpressionKind::ELEMENT_ACCESS, in CreateTsEnumMemberWithoutInit()
2209 auto *right = AllocNode<ir::StringLiteral>(enumMemberName); in CreateTsEnumMemberWithoutInit()
2211 …auto *assignExpr = AllocNode<ir::AssignmentExpression>(left, right, lexer::TokenType::PUNCTUATOR_S… in CreateTsEnumMemberWithoutInit()
2212 auto *exprStatementNode = AllocNode<ir::ExpressionStatement>(assignExpr); in CreateTsEnumMemberWithoutInit()
2217 bool Transformer::IsStringInitForEnumMember(const ir::Expression *expr, binder::Scope *scope) const in IsStringInitForEnumMember()
2225 case ir::AstNodeType::STRING_LITERAL: in IsStringInitForEnumMember()
2226 case ir::AstNodeType::TEMPLATE_LITERAL: { in IsStringInitForEnumMember()
2230 case ir::AstNodeType::IDENTIFIER: { in IsStringInitForEnumMember()
2251 case ir::AstNodeType::MEMBER_EXPRESSION: { in IsStringInitForEnumMember()
2254 case ir::AstNodeType::BINARY_EXPRESSION: { in IsStringInitForEnumMember()
2270 bool Transformer::IsStringForMemberExpression(const ir::MemberExpression *memberExpr, binder::Scope… in IsStringForMemberExpression()
2273 const ir::Expression *expr = memberExpr; in IsStringForMemberExpression()
2274 ArenaDeque<const ir::Expression *> members(Allocator()->Adapter()); in IsStringForMemberExpression()
2302 ArenaVector<binder::Variable *> Transformer::FindFrontIdentifierTSVariables(const ir::Identifier *i… in FindFrontIdentifierTSVariables()
2364 ArenaVector<ir::TSModuleDeclaration *> nodes = decl->AsNamespaceDecl()->Decls(); in IsInstantiatedNamespaceVariable()
2365 for (ir::TSModuleDeclaration *node : nodes) { in IsInstantiatedNamespaceVariable()
2446 ArenaDeque<const ir::Expression *> members) const in VerifyMemberExpressionDeque()
2531 util::StringView Transformer::GetNameForMemberExpressionItem(const ir::Expression *node) const in GetNameForMemberExpressionItem()
2544 util::StringView Transformer::GetNameFromEnumMember(const ir::TSEnumMember *node) const in GetNameFromEnumMember()
2582 ir::MemberExpression *Transformer::CreateMemberExpressionFromIdentifier(binder::Scope *scope, ir::I… in CreateMemberExpressionFromIdentifier()
2587 auto *res = AllocNode<ir::MemberExpression>(id, AllocNode<ir::Identifier>(identName), in CreateMemberExpressionFromIdentifier()
2588 … ir::MemberExpression::MemberExpressionKind::PROPERTY_ACCESS, in CreateMemberExpressionFromIdentifier()
2603 void Transformer::CheckTransformedAstNodes(const ir::AstNode *parent, bool *passed) const in CheckTransformedAstNodes()
2608 void Transformer::CheckTransformedAstNode(const ir::AstNode *parent, ir::AstNode *childNode, bool *… in CheckTransformedAstNode()
2618 childNode->AsMethodDefinition()->Kind() == ir::MethodDefinitionKind::CONSTRUCTOR) { in CheckTransformedAstNode()
2632 void Transformer::ResetParentScopeForAstNodes(const ir::AstNode *parent, binder::Scope *parentScope… in ResetParentScopeForAstNodes()
2637 void Transformer::ResetParentScopeForAstNode(ir::AstNode *childNode, binder::Scope *parentScope) co… in ResetParentScopeForAstNode()
2640 case ir::AstNodeType::SCRIPT_FUNCTION: { in ResetParentScopeForAstNode()
2646 case ir::AstNodeType::CATCH_CLAUSE: { in ResetParentScopeForAstNode()
2652 case ir::AstNodeType::CLASS_DEFINITION: { in ResetParentScopeForAstNode()
2658 case ir::AstNodeType::BLOCK_STATEMENT: { in ResetParentScopeForAstNode()
2664 case ir::AstNodeType::DO_WHILE_STATEMENT: { in ResetParentScopeForAstNode()
2670 case ir::AstNodeType::WHILE_STATEMENT: { in ResetParentScopeForAstNode()
2676 case ir::AstNodeType::FOR_IN_STATEMENT: { in ResetParentScopeForAstNode()
2682 case ir::AstNodeType::FOR_OF_STATEMENT: { in ResetParentScopeForAstNode()
2688 case ir::AstNodeType::FOR_UPDATE_STATEMENT: { in ResetParentScopeForAstNode()
2694 case ir::AstNodeType::SWITCH_STATEMENT: { in ResetParentScopeForAstNode()
2700 case ir::AstNodeType::TS_ENUM_DECLARATION: { in ResetParentScopeForAstNode()
2706 case ir::AstNodeType::TS_INTERFACE_DECLARATION: { in ResetParentScopeForAstNode()
2712 case ir::AstNodeType::TS_METHOD_SIGNATURE: { in ResetParentScopeForAstNode()
2718 case ir::AstNodeType::TS_MODULE_DECLARATION: { in ResetParentScopeForAstNode()
2724 case ir::AstNodeType::TS_SIGNATURE_DECLARATION: { in ResetParentScopeForAstNode()
2730 case ir::AstNodeType::TS_TYPE_PARAMETER_DECLARATION: { in ResetParentScopeForAstNode()
2736 case ir::AstNodeType::TS_CONSTRUCTOR_TYPE: { in ResetParentScopeForAstNode()
2742 case ir::AstNodeType::TS_FUNCTION_TYPE: { in ResetParentScopeForAstNode()
2755 bool Transformer::IsValueReference(ir::Identifier *node) in IsValueReference()