• Home
  • Raw
  • Download

Lines Matching full:ir

29 [[nodiscard]] ir::ETSParameterExpression *MakeFunctionParam(checker::ETSChecker *const checker,  in MakeFunctionParam()
31 ir::TypeNode *const typeAnnotation) in MakeFunctionParam()
33 …auto *const paramIdent = checker->AllocNode<ir::Identifier>(name, typeAnnotation, checker->Allocat… in MakeFunctionParam()
34 auto *const param = checker->AllocNode<ir::ETSParameterExpression>(paramIdent, nullptr); in MakeFunctionParam()
39 [[nodiscard]] ir::Identifier *MakeParamRefIdent(checker::ETSChecker *const checker, in MakeParamRefIdent()
40 ir::ETSParameterExpression *paramExpr) in MakeParamRefIdent()
42 …auto *const refIdent = checker->AllocNode<ir::Identifier>(paramExpr->Ident()->Name(), checker->All… in MakeParamRefIdent()
47 [[nodiscard]] ir::ETSTypeReference *MakeTypeReference(checker::ETSChecker *const checker, const uti… in MakeTypeReference()
49 auto *const ident = checker->AllocNode<ir::Identifier>(name, checker->Allocator()); in MakeTypeReference()
50 auto *const referencePart = checker->AllocNode<ir::ETSTypeReferencePart>(ident); in MakeTypeReference()
51 return checker->AllocNode<ir::ETSTypeReference>(referencePart); in MakeTypeReference()
54 ir::MethodDefinition *MakeMethodDef(checker::ETSChecker *const checker, ir::ClassDefinition *enumCl… in MakeMethodDef()
55 ir::Identifier *const ident, ir::ScriptFunction *const function) in MakeMethodDef()
57 auto *const functionExpr = checker->AllocNode<ir::FunctionExpression>(function); in MakeMethodDef()
60 auto *const methodDef = checker->AllocNode<ir::MethodDefinition>( in MakeMethodDef()
61ir::MethodDefinitionKind::METHOD, identClone, functionExpr, function->Modifiers(), checker->Alloca… in MakeMethodDef()
70 [[nodiscard]] ir::ScriptFunction *EnumLoweringPhase::MakeFunction(FunctionInfo &&functionInfo) in MakeFunction()
72 ir::BlockStatement *bodyBlock = nullptr; in MakeFunction()
75 functionInfo.flags |= ir::ModifierFlags::DECLARE; in MakeFunction()
77 … bodyBlock = checker_->AllocNode<ir::BlockStatement>(Allocator(), std::move(functionInfo.body)); in MakeFunction()
80 auto *const function = checker_->AllocNode<ir::ScriptFunction>( in MakeFunction()
81 Allocator(), ir::ScriptFunction::ScriptFunctionData { in MakeFunction()
83ir::FunctionSignature(nullptr, std::move(functionInfo.params), functionInfo.returnTypeAnnotation), in MakeFunction()
84 ir::ScriptFunctionFlags::METHOD, functionInfo.flags}); in MakeFunction()
91 const ir::TSEnumDeclaration *const enumDecl) in GetEnumClassName()
99 [[nodiscard]] ir::Identifier *EnumLoweringPhase::MakeArray(const ir::TSEnumDeclaration *const enumD… in MakeArray()
100 ir::ClassDefinition *const enumClass, in MakeArray()
102 ir::TypeNode *const typeAnnotation, in MakeArray()
105 ArenaVector<ir::Expression *> elements(Allocator()->Adapter()); in MakeArray()
110 …auto *const arrayExpr = checker_->AllocNode<ir::ArrayExpression>(std::move(elements), Allocator()); in MakeArray()
111 auto *const arrayIdent = checker_->AllocNode<ir::Identifier>(name, Allocator()); in MakeArray()
112 auto *const arrayClassProp = checker_->AllocNode<ir::ClassProperty>( in MakeArray()
114ir::ModifierFlags::STATIC | ir::ModifierFlags::PROTECTED | ir::ModifierFlags::READONLY, Allocator(… in MakeArray()
121 ir::Identifier *EnumLoweringPhase::CreateEnumNamesArray(const ir::TSEnumDeclaration *const enumDecl, in CreateEnumNamesArray()
122 ir::ClassDefinition *const enumClass) in CreateEnumNamesArray()
125 auto *const arrayTypeAnnotation = checker_->AllocNode<ir::TSArrayType>(stringTypeAnnotation); in CreateEnumNamesArray()
129 [this](const ir::TSEnumMember *const member) { in CreateEnumNamesArray()
131 … checker_->AllocNode<ir::StringLiteral>(member->Key()->AsIdentifier()->Name()); in CreateEnumNamesArray()
137 ir::ClassDeclaration *EnumLoweringPhase::CreateClass(ir::TSEnumDeclaration *const enumDecl) in CreateClass()
139 …auto *ident = Allocator()->New<ir::Identifier>(GetEnumClassName(checker_, enumDecl).View(), Alloca… in CreateClass()
142 auto *classDef = checker_->AllocNode<ir::ClassDefinition>( in CreateClass()
144 … localDeclaration ? ir::ClassDefinitionModifiers::CLASS_DECL | ir::ClassDefinitionModifiers::LOCAL in CreateClass()
145 : ir::ClassDefinitionModifiers::CLASS_DECL, in CreateClass()
146 …enumDecl->IsDeclare() ? ir::ModifierFlags::DECLARE : ir::ModifierFlags::NONE, Language(Language::I… in CreateClass()
148 auto *classDecl = checker_->AllocNode<ir::ClassDeclaration>(classDef, Allocator()); in CreateClass()
170 void EnumLoweringPhase::CreateCCtorForEnumClass(ir::ClassDefinition *const enumClass) in CreateCCtorForEnumClass()
172 ArenaVector<ir::Expression *> params(Allocator()->Adapter()); in CreateCCtorForEnumClass()
173 auto *id = checker_->AllocNode<ir::Identifier>(compiler::Signatures::CCTOR, Allocator()); in CreateCCtorForEnumClass()
175 ArenaVector<ir::Statement *> statements(Allocator()->Adapter()); in CreateCCtorForEnumClass()
177 auto *body = checker_->AllocNode<ir::BlockStatement>(Allocator(), std::move(statements)); in CreateCCtorForEnumClass()
178 auto *func = checker_->AllocNode<ir::ScriptFunction>( in CreateCCtorForEnumClass()
180ir::ScriptFunction::ScriptFunctionData {body, ir::FunctionSignature(nullptr, std::move(params), nu… in CreateCCtorForEnumClass()
181ir::ScriptFunctionFlags::STATIC_BLOCK | ir::ScriptFunctionFlags::HIDDEN, in CreateCCtorForEnumClass()
182ir::ModifierFlags::STATIC, Language(Language::Id::ETS)}); in CreateCCtorForEnumClass()
187 auto *funcExpr = checker_->AllocNode<ir::FunctionExpression>(func); in CreateCCtorForEnumClass()
190 auto *const methodDef = checker_->AllocNode<ir::MethodDefinition>( in CreateCCtorForEnumClass()
191ir::MethodDefinitionKind::METHOD, identClone, funcExpr, ir::ModifierFlags::PUBLIC | ir::ModifierFl… in CreateCCtorForEnumClass()
197 ir::ClassProperty *EnumLoweringPhase::CreateOrdinalField(ir::ClassDefinition *const enumClass) in CreateOrdinalField()
199 auto *const fieldIdent = Allocator()->New<ir::Identifier>("ordinal", Allocator()); in CreateOrdinalField()
200 auto *const intTypeAnnotation = Allocator()->New<ir::ETSPrimitiveType>(ir::PrimitiveType::INT); in CreateOrdinalField()
201 auto *field = checker_->AllocNode<ir::ClassProperty>(fieldIdent, nullptr, intTypeAnnotation, in CreateOrdinalField()
202ir::ModifierFlags::PROTECTED, Allocator(), false); in CreateOrdinalField()
209 ir::ScriptFunction *EnumLoweringPhase::CreateFunctionForCtorOfEnumClass(ir::ClassDefinition *const … in CreateFunctionForCtorOfEnumClass()
211 ArenaVector<ir::Expression *> params(Allocator()->Adapter()); in CreateFunctionForCtorOfEnumClass()
213 … auto *const intTypeAnnotation = checker_->AllocNode<ir::ETSPrimitiveType>(ir::PrimitiveType::INT); in CreateFunctionForCtorOfEnumClass()
217 auto *id = checker_->AllocNode<ir::Identifier>("constructor", Allocator()); in CreateFunctionForCtorOfEnumClass()
218 ArenaVector<ir::Statement *> statements(Allocator()->Adapter()); in CreateFunctionForCtorOfEnumClass()
220 auto *body = checker_->AllocNode<ir::BlockStatement>(Allocator(), std::move(statements)); in CreateFunctionForCtorOfEnumClass()
222 auto scriptFlags = ir::ScriptFunctionFlags::CONSTRUCTOR; in CreateFunctionForCtorOfEnumClass()
223 …scriptFlags |= enumClass->IsDeclare() ? ir::ScriptFunctionFlags::EXTERNAL : ir::ScriptFunctionFlag… in CreateFunctionForCtorOfEnumClass()
225 auto *func = checker_->AllocNode<ir::ScriptFunction>( in CreateFunctionForCtorOfEnumClass()
227ir::ScriptFunction::ScriptFunctionData {body, ir::FunctionSignature(nullptr, std::move(params), nu… in CreateFunctionForCtorOfEnumClass()
229ir::ModifierFlags::CONSTRUCTOR, // CC-OFF(G.FMT.02) project code style in CreateFunctionForCtorOfEnumClass()
234 auto *thisExpr = Allocator()->New<ir::ThisExpression>(); in CreateFunctionForCtorOfEnumClass()
235 auto *fieldIdentifier = Allocator()->New<ir::Identifier>("ordinal", Allocator()); in CreateFunctionForCtorOfEnumClass()
236 auto *leftHandSide = checker_->AllocNode<ir::MemberExpression>( in CreateFunctionForCtorOfEnumClass()
237 thisExpr, fieldIdentifier, ir::MemberExpressionKind::PROPERTY_ACCESS, false, false); in CreateFunctionForCtorOfEnumClass()
238 auto *rightHandSide = checker_->AllocNode<ir::Identifier>("ordinal", Allocator()); in CreateFunctionForCtorOfEnumClass()
240 auto *initializer = checker_->AllocNode<ir::AssignmentExpression>(leftHandSide, rightHandSide, in CreateFunctionForCtorOfEnumClass()
242 auto initStatement = checker_->AllocNode<ir::ExpressionStatement>(initializer); in CreateFunctionForCtorOfEnumClass()
249 void EnumLoweringPhase::CreateCtorForEnumClass(ir::ClassDefinition *const enumClass) in CreateCtorForEnumClass()
252 auto *funcExpr = checker_->AllocNode<ir::FunctionExpression>(func); in CreateCtorForEnumClass()
255 auto *const methodDef = checker_->AllocNode<ir::MethodDefinition>( in CreateCtorForEnumClass()
256ir::MethodDefinitionKind::CONSTRUCTOR, identClone, funcExpr, ir::ModifierFlags::PUBLIC, Allocator(… in CreateCtorForEnumClass()
261 void EnumLoweringPhase::CreateEnumIntClassFromEnumDeclaration(ir::TSEnumDeclaration *const enumDecl) in CreateEnumIntClassFromEnumDeclaration()
302 void EnumLoweringPhase::CreateEnumStringClassFromEnumDeclaration(ir::TSEnumDeclaration *const enumD… in CreateEnumStringClassFromEnumDeclaration()
357 program->Ast()->IterateRecursively([this, &isPerformedSuccess](ir::AstNode *ast) -> void { in Perform()
375 ir::Identifier *EnumLoweringPhase::CreateEnumValuesArray(const ir::TSEnumDeclaration *const enumDec… in CreateEnumValuesArray()
376 ir::ClassDefinition *const enumClass) in CreateEnumValuesArray()
378 auto *const intType = checker_->AllocNode<ir::ETSPrimitiveType>(ir::PrimitiveType::INT); in CreateEnumValuesArray()
379 auto *const arrayTypeAnnotation = checker_->AllocNode<ir::TSArrayType>(intType); in CreateEnumValuesArray()
382 [this](const ir::TSEnumMember *const member) { in CreateEnumValuesArray()
383 auto *const enumValueLiteral = checker_->AllocNode<ir::NumberLiteral>( in CreateEnumValuesArray()
394 ir::Identifier *EnumLoweringPhase::CreateEnumStringValuesArray(const ir::TSEnumDeclaration *const e… in CreateEnumStringValuesArray()
395 ir::ClassDefinition *const enumClass) in CreateEnumStringValuesArray()
398 auto *const arrayTypeAnnotation = checker_->AllocNode<ir::TSArrayType>(stringTypeAnnotation); in CreateEnumStringValuesArray()
402 [this](const ir::TSEnumMember *const member) { in CreateEnumStringValuesArray()
414 … auto *const enumValueStringLiteral = checker_->AllocNode<ir::StringLiteral>(stringValue); in CreateEnumStringValuesArray()
420 ir::Identifier *EnumLoweringPhase::CreateEnumItemsArray(const ir::TSEnumDeclaration *const enumDecl, in CreateEnumItemsArray()
421 ir::ClassDefinition *const enumClass) in CreateEnumItemsArray()
424 auto *const arrayTypeAnnotation = checker_->AllocNode<ir::TSArrayType>(enumTypeAnnotation); in CreateEnumItemsArray()
427 [this, enumDecl](const ir::TSEnumMember *const member) { in CreateEnumItemsArray()
429 … checker_->AllocNode<ir::Identifier>(enumDecl->Key()->Name(), Allocator()); in CreateEnumItemsArray()
431 auto *const enumMemberIdent = checker_->AllocNode<ir::Identifier>( in CreateEnumItemsArray()
433 auto *const enumMemberExpr = checker_->AllocNode<ir::MemberExpression>( in CreateEnumItemsArray()
434 … enumTypeIdent, enumMemberIdent, ir::MemberExpressionKind::PROPERTY_ACCESS, false, false); in CreateEnumItemsArray()
440 ir::Identifier *EnumLoweringPhase::CreateBoxedEnumItemsArray(const ir::TSEnumDeclaration *const enu… in CreateBoxedEnumItemsArray()
441 ir::ClassDefinition *const enumClass) in CreateBoxedEnumItemsArray()
445 auto *const arrayTypeAnnotation = checker_->AllocNode<ir::TSArrayType>(enumTypeAnnotation); in CreateBoxedEnumItemsArray()
448 [this, enumDecl, &boxedClassName](const ir::TSEnumMember *const member) { in CreateBoxedEnumItemsArray()
450 … checker_->AllocNode<ir::Identifier>(enumDecl->Key()->Name(), Allocator()); in CreateBoxedEnumItemsArray()
452 auto *const enumMemberIdent = checker_->AllocNode<ir::Identifier>( in CreateBoxedEnumItemsArray()
454 auto *const enumMemberExpr = checker_->AllocNode<ir::MemberExpression>( in CreateBoxedEnumItemsArray()
455 … enumTypeIdent, enumMemberIdent, ir::MemberExpressionKind::PROPERTY_ACCESS, false, false); in CreateBoxedEnumItemsArray()
457 … auto intType = checker_->AllocNode<ir::ETSPrimitiveType>(ir::PrimitiveType::INT); in CreateBoxedEnumItemsArray()
458 … auto asExpression = checker_->AllocNode<ir::TSAsExpression>(enumMemberExpr, intType, false); in CreateBoxedEnumItemsArray()
460 ArenaVector<ir::Expression *> newExprArgs(Allocator()->Adapter()); in CreateBoxedEnumItemsArray()
465 … auto *const newExpression = checker_->AllocNode<ir::ETSNewClassInstanceExpression>( in CreateBoxedEnumItemsArray()
474 ir::MemberExpression *CreateStaticAccessMemberExpression(checker::ETSChecker *checker, in CreateStaticAccessMemberExpression()
475 ir::Identifier *const enumClassIdentifier, in CreateStaticAccessMemberExpression()
476 ir::Identifier *const arrayIdentifier) in CreateStaticAccessMemberExpression()
481 return checker->AllocNode<ir::MemberExpression>(enumClassIdentifierClone, arrayIdentifierClone, in CreateStaticAccessMemberExpression()
482ir::MemberExpressionKind::PROPERTY_ACCESS, false, false); in CreateStaticAccessMemberExpression()
485 ir::BinaryExpression *CreateIfTest(checker::ETSChecker *checker, ir::Identifier *const enumClassIde… in CreateIfTest()
486 ir::Identifier *const itemsArrayIdentifier, in CreateIfTest()
487 ir::ETSParameterExpression *const parameter) in CreateIfTest()
489 auto *const lengthIdent = checker->AllocNode<ir::Identifier>("length", checker->Allocator()); in CreateIfTest()
492 auto *const valuesArrayLengthExpr = checker->AllocNode<ir::MemberExpression>( in CreateIfTest()
493 propertyAccessExpr, lengthIdent, ir::MemberExpressionKind::PROPERTY_ACCESS, false, false); in CreateIfTest()
495 … auto *const expr = checker->AllocNode<ir::BinaryExpression>(paramRefIdent, valuesArrayLengthExpr, in CreateIfTest()
500 ir::ReturnStatement *CreateReturnEnumStatement(checker::ETSChecker *checker, ir::Identifier *const … in CreateReturnEnumStatement()
501 ir::Identifier *const itemsArrayIdentifier, in CreateReturnEnumStatement()
502 ir::ETSParameterExpression *const parameter) in CreateReturnEnumStatement()
507 auto *const arrayAccessExpr = checker->AllocNode<ir::MemberExpression>( in CreateReturnEnumStatement()
508 propertyAccessExpr, paramRefIdent, ir::MemberExpressionKind::ELEMENT_ACCESS, true, false); in CreateReturnEnumStatement()
509 auto *const returnStatement = checker->AllocNode<ir::ReturnStatement>(arrayAccessExpr); in CreateReturnEnumStatement()
513 ir::ThrowStatement *CreateThrowStatement(checker::ETSChecker *checker, ir::ETSParameterExpression *… in CreateThrowStatement()
517 auto *const message = checker->AllocNode<ir::StringLiteral>(messageString.View()); in CreateThrowStatement()
519 …checker->AllocNode<ir::BinaryExpression>(message, paramRefIdent, lexer::TokenType::PUNCTUATOR_PLUS… in CreateThrowStatement()
522 ArenaVector<ir::Expression *> newExprArgs(checker->Allocator()->Adapter()); in CreateThrowStatement()
527 …checker->AllocNode<ir::ETSNewClassInstanceExpression>(exceptionReference, std::move(newExprArgs), … in CreateThrowStatement()
528 return checker->AllocNode<ir::ThrowStatement>(newExpr); in CreateThrowStatement()
531 ir::ReturnStatement *CreateReturnWitAsStatement(checker::ETSChecker *checker, ir::Identifier *const… in CreateReturnWitAsStatement()
532 ir::Identifier *const arrayIdentifier, in CreateReturnWitAsStatement()
533 ir::ETSParameterExpression *const parameter) in CreateReturnWitAsStatement()
536 auto intType = checker->AllocNode<ir::ETSPrimitiveType>(ir::PrimitiveType::INT); in CreateReturnWitAsStatement()
537 auto asExpression = checker->AllocNode<ir::TSAsExpression>(paramRefIdent, intType, false); in CreateReturnWitAsStatement()
542 auto *const arrayAccessExpr = checker->AllocNode<ir::MemberExpression>( in CreateReturnWitAsStatement()
543 propertyAccessExpr, asExpression, ir::MemberExpressionKind::ELEMENT_ACCESS, true, false); in CreateReturnWitAsStatement()
545 return checker->AllocNode<ir::ReturnStatement>(arrayAccessExpr); in CreateReturnWitAsStatement()
550 void EnumLoweringPhase::CreateEnumFromIntMethod(const ir::TSEnumDeclaration *const enumDecl, in CreateEnumFromIntMethod()
551ir::ClassDefinition *const enumClass, ir::Identifier *const arrayIdent, in CreateEnumFromIntMethod()
555 … auto *const intTypeAnnotation = checker_->AllocNode<ir::ETSPrimitiveType>(ir::PrimitiveType::INT); in CreateEnumFromIntMethod()
560 …auto *const ifOrdinalExistsStmt = checker_->AllocNode<ir::IfStatement>(inArraySizeExpr, returnEnum… in CreateEnumFromIntMethod()
568 ArenaVector<ir::Expression *> params(Allocator()->Adapter()); in CreateEnumFromIntMethod()
571 ArenaVector<ir::Statement *> body(Allocator()->Adapter()); in CreateEnumFromIntMethod()
577 ir::ModifierFlags::PUBLIC | ir::ModifierFlags::STATIC}); in CreateEnumFromIntMethod()
578 function->AddFlag(ir::ScriptFunctionFlags::THROWS); in CreateEnumFromIntMethod()
579 auto *const ident = checker_->AllocNode<ir::Identifier>(methodName, Allocator()); in CreateEnumFromIntMethod()
586 void EnumLoweringPhase::CreateEnumToStringMethod(const ir::TSEnumDeclaration *const enumDecl, in CreateEnumToStringMethod()
587 ir::ClassDefinition *const enumClass, in CreateEnumToStringMethod()
588 ir::Identifier *const stringValuesArrayIdent) in CreateEnumToStringMethod()
595 ArenaVector<ir::Statement *> body(Allocator()->Adapter()); in CreateEnumToStringMethod()
598 ArenaVector<ir::Expression *> params(Allocator()->Adapter()); in CreateEnumToStringMethod()
602 ir::ModifierFlags::PUBLIC | ir::ModifierFlags::STATIC}); in CreateEnumToStringMethod()
605 … checker_->AllocNode<ir::Identifier>(checker::ETSEnumType::TO_STRING_METHOD_NAME, Allocator()); in CreateEnumToStringMethod()
611 void EnumLoweringPhase::CreateEnumValueOfMethod(const ir::TSEnumDeclaration *const enumDecl, in CreateEnumValueOfMethod()
612 ir::ClassDefinition *const enumClass, in CreateEnumValueOfMethod()
613 ir::Identifier *const valuesArrayIdent) in CreateEnumValueOfMethod()
619 ArenaVector<ir::Statement *> body(Allocator()->Adapter()); in CreateEnumValueOfMethod()
622 ArenaVector<ir::Expression *> params(Allocator()->Adapter()); in CreateEnumValueOfMethod()
624 … auto *const intTypeAnnotation = checker_->AllocNode<ir::ETSPrimitiveType>(ir::PrimitiveType::INT); in CreateEnumValueOfMethod()
626 ir::ModifierFlags::PUBLIC | ir::ModifierFlags::STATIC}); in CreateEnumValueOfMethod()
628 … checker_->AllocNode<ir::Identifier>(checker::ETSEnumType::VALUE_OF_METHOD_NAME, Allocator()); in CreateEnumValueOfMethod()
634 void EnumLoweringPhase::CreateEnumGetNameMethod(const ir::TSEnumDeclaration *const enumDecl, in CreateEnumGetNameMethod()
635 ir::ClassDefinition *const enumClass, in CreateEnumGetNameMethod()
636 ir::Identifier *const namesArrayIdent) in CreateEnumGetNameMethod()
642 ArenaVector<ir::Statement *> body(Allocator()->Adapter()); in CreateEnumGetNameMethod()
645 ArenaVector<ir::Expression *> params(Allocator()->Adapter()); in CreateEnumGetNameMethod()
650 ir::ModifierFlags::PUBLIC | ir::ModifierFlags::STATIC}); in CreateEnumGetNameMethod()
652 … checker_->AllocNode<ir::Identifier>(checker::ETSEnumType::GET_NAME_METHOD_NAME, Allocator()); in CreateEnumGetNameMethod()
661 ir::VariableDeclaration *CreateForLoopInitVariableDeclaration(checker::ETSChecker *checker, in CreateForLoopInitVariableDeclaration()
662 ir::Identifier *const loopIdentifier) in CreateForLoopInitVariableDeclaration()
664 auto *const init = checker->AllocNode<ir::NumberLiteral>("0"); in CreateForLoopInitVariableDeclaration()
666 … checker->AllocNode<ir::VariableDeclarator>(ir::VariableDeclaratorFlag::LET, loopIdentifier, init); in CreateForLoopInitVariableDeclaration()
668 ArenaVector<ir::VariableDeclarator *> decls(checker->Allocator()->Adapter()); in CreateForLoopInitVariableDeclaration()
670 auto *const declaration = checker->AllocNode<ir::VariableDeclaration>( in CreateForLoopInitVariableDeclaration()
671ir::VariableDeclaration::VariableDeclarationKind::LET, checker->Allocator(), std::move(decls)); in CreateForLoopInitVariableDeclaration()
676 ir::BinaryExpression *CreateForLoopTest(checker::ETSChecker *checker, ir::Identifier *const enumCla… in CreateForLoopTest()
677 ir::Identifier *const namesArrayIdentifier, in CreateForLoopTest()
678 ir::Identifier *const loopIdentifier) in CreateForLoopTest()
680 auto *const lengthIdent = checker->AllocNode<ir::Identifier>("length", checker->Allocator()); in CreateForLoopTest()
683 auto *const arrayLengthExpr = checker->AllocNode<ir::MemberExpression>( in CreateForLoopTest()
684 propertyAccessExpr, lengthIdent, ir::MemberExpressionKind::PROPERTY_ACCESS, false, false); in CreateForLoopTest()
686 …auto *const binaryExpr = checker->AllocNode<ir::BinaryExpression>(forLoopIdentClone, arrayLengthEx… in CreateForLoopTest()
691 ir::UpdateExpression *CreateForLoopUpdate(checker::ETSChecker *checker, ir::Identifier *const loopI… in CreateForLoopUpdate()
695 …checker->AllocNode<ir::UpdateExpression>(forLoopIdentClone, lexer::TokenType::PUNCTUATOR_PLUS_PLUS… in CreateForLoopUpdate()
699 ir::IfStatement *CreateIf(checker::ETSChecker *checker, const ir::TSEnumDeclaration *const enumDecl, in CreateIf()
700ir::MemberExpression *propertyAccessExpr, ir::Identifier *const loopIdentifier, in CreateIf()
701 ir::ETSParameterExpression *const parameter) in CreateIf()
704 auto *const namesArrayElementExpr = checker->AllocNode<ir::MemberExpression>( in CreateIf()
705 … propertyAccessExpr, forLoopIdentClone1, ir::MemberExpressionKind::ELEMENT_ACCESS, true, false); in CreateIf()
708 …auto *const namesEqualExpr = checker->AllocNode<ir::BinaryExpression>(paramRefIdent, namesArrayEle… in CreateIf()
713 …auto asExpression = checker->AllocNode<ir::TSAsExpression>(forLoopIdentClone2, enumTypeAnnotation,… in CreateIf()
715 auto *const returnStmt = checker->AllocNode<ir::ReturnStatement>(asExpression); in CreateIf()
716 return checker->AllocNode<ir::IfStatement>(namesEqualExpr, returnStmt, nullptr); in CreateIf()
721 void EnumLoweringPhase::CreateEnumGetValueOfMethod(const ir::TSEnumDeclaration *const enumDecl, in CreateEnumGetValueOfMethod()
722 ir::ClassDefinition *const enumClass, in CreateEnumGetValueOfMethod()
723 ir::Identifier *const namesArrayIdent) in CreateEnumGetValueOfMethod()
725 auto *const forLoopIIdent = checker_->AllocNode<ir::Identifier>("i", checker_->Allocator()); in CreateEnumGetValueOfMethod()
736 …checker_->AllocNode<ir::ForUpdateStatement>(forLoopInitVarDecl, forLoopTest, forLoopUpdate, ifStmt… in CreateEnumGetValueOfMethod()
744 ArenaVector<ir::Statement *> body(Allocator()->Adapter()); in CreateEnumGetValueOfMethod()
748 ArenaVector<ir::Expression *> params(Allocator()->Adapter()); in CreateEnumGetValueOfMethod()
753 ir::ModifierFlags::PUBLIC | ir::ModifierFlags::STATIC}); in CreateEnumGetValueOfMethod()
754 function->AddFlag(ir::ScriptFunctionFlags::THROWS); in CreateEnumGetValueOfMethod()
756 … checker_->AllocNode<ir::Identifier>(checker::ETSEnumType::GET_VALUE_OF_METHOD_NAME, Allocator()); in CreateEnumGetValueOfMethod()
762 void EnumLoweringPhase::CreateEnumValuesMethod(const ir::TSEnumDeclaration *const enumDecl, in CreateEnumValuesMethod()
763 ir::ClassDefinition *const enumClass, in CreateEnumValuesMethod()
764 ir::Identifier *const itemsArrayIdent) in CreateEnumValuesMethod()
767 auto *const returnStmt = checker_->AllocNode<ir::ReturnStatement>(propertyAccessExpr); in CreateEnumValuesMethod()
768 ArenaVector<ir::Statement *> body(Allocator()->Adapter()); in CreateEnumValuesMethod()
771 ArenaVector<ir::Expression *> params(Allocator()->Adapter()); in CreateEnumValuesMethod()
773 checker_->AllocNode<ir::TSArrayType>(MakeTypeReference(checker_, enumDecl->Key()->Name())); in CreateEnumValuesMethod()
776 ir::ModifierFlags::PUBLIC | ir::ModifierFlags::STATIC}); in CreateEnumValuesMethod()
778 checker_->AllocNode<ir::Identifier>(checker::ETSEnumType::VALUES_METHOD_NAME, Allocator()); in CreateEnumValuesMethod()
784 void EnumLoweringPhase::CreateUnboxingMethod(ir::TSEnumDeclaration const *const enumDecl, in CreateUnboxingMethod()
785 ir::ClassDefinition *const enumClass, in CreateUnboxingMethod()
786 ir::Identifier *const itemsArrayIdent) in CreateUnboxingMethod()
789 ArenaVector<ir::Statement *> body(Allocator()->Adapter()); in CreateUnboxingMethod()
791 auto *thisExpr = Allocator()->New<ir::ThisExpression>(); in CreateUnboxingMethod()
792 auto *fieldIdentifier = Allocator()->New<ir::Identifier>("ordinal", Allocator()); in CreateUnboxingMethod()
793 auto *arrayIndexExpr = checker_->AllocNode<ir::MemberExpression>( in CreateUnboxingMethod()
794 thisExpr, fieldIdentifier, ir::MemberExpressionKind::PROPERTY_ACCESS, false, false); in CreateUnboxingMethod()
797 auto *const arrayAccessExpr = checker_->AllocNode<ir::MemberExpression>( in CreateUnboxingMethod()
798 propertyAccessExpr, arrayIndexExpr, ir::MemberExpressionKind::ELEMENT_ACCESS, true, false); in CreateUnboxingMethod()
800 auto *const returnStmt = checker_->AllocNode<ir::ReturnStatement>(arrayAccessExpr); in CreateUnboxingMethod()
803 ArenaVector<ir::Expression *> params(Allocator()->Adapter()); in CreateUnboxingMethod()
808 …MakeFunction({std::move(params), std::move(body), returnTypeAnnotation, enumDecl, ir::ModifierFlag… in CreateUnboxingMethod()
811 checker_->AllocNode<ir::Identifier>(checker::ETSEnumType::UNBOX_METHOD_NAME, Allocator()); in CreateUnboxingMethod()