Lines Matching defs:enumDecl
96 if (functionInfo.enumDecl->IsDeclare()) {
107 ir::ScriptFunctionFlags::METHOD, functionInfo.flags, functionInfo.enumDecl->IsDeclare()});
121 const ir::TSEnumDeclaration *const enumDecl)
124 className.Append(enumDecl->Key()->Name());
129 [[nodiscard]] ir::Identifier *EnumLoweringPhase::MakeArray(const ir::TSEnumDeclaration *const enumDecl,
138 elements.reserve(enumDecl->Members().size());
139 for (const auto *const member : enumDecl->Members()) {
160 ir::Identifier *EnumLoweringPhase::CreateEnumNamesArray(const ir::TSEnumDeclaration *const enumDecl,
167 return MakeArray(enumDecl, enumClass, "NamesArray", arrayTypeAnnotation,
176 ir::ClassDefinition *EnumLoweringPhase::CreateClass(ir::TSEnumDeclaration *const enumDecl)
179 auto *ident = Allocator()->New<ir::Identifier>(GetEnumClassName(checker_, enumDecl).View(), Allocator());
186 enumDecl->IsDeclare() ? ir::ClassDefinitionModifiers::DECLARATION : ir::ClassDefinitionModifiers::NONE,
187 enumDecl->IsDeclare() ? ir::ModifierFlags::DECLARE : ir::ModifierFlags::NONE, Language(Language::Id::ETS));
195 enumDecl->SetBoxedClass(classDef);
333 void EnumLoweringPhase::CreateEnumIntClassFromEnumDeclaration(ir::TSEnumDeclaration *const enumDecl)
335 auto *const enumClass = CreateClass(enumDecl);
336 auto *const namesArrayIdent = CreateEnumNamesArray(enumDecl, enumClass);
337 auto *const valuesArrayIdent = CreateEnumValuesArray(enumDecl, enumClass);
338 auto *const stringValuesArrayIdent = CreateEnumStringValuesArray(enumDecl, enumClass);
339 auto *const itemsArrayIdent = CreateEnumItemsArray(enumDecl, enumClass);
340 auto *const boxedItemsArrayIdent = CreateBoxedEnumItemsArray(enumDecl, enumClass);
343 CreateEnumGetNameMethod(enumDecl, enumClass, identClone);
346 CreateEnumGetValueOfMethod(enumDecl, enumClass, identClone);
349 CreateEnumValueOfMethod(enumDecl, enumClass, identClone);
352 CreateEnumToStringMethod(enumDecl, enumClass, identClone);
355 CreateEnumValuesMethod(enumDecl, enumClass, identClone);
358 CreateEnumFromIntMethod(enumDecl, enumClass, identClone, checker::ETSEnumType::FROM_INT_METHOD_NAME,
359 enumDecl->Key()->Name());
362 CreateUnboxingMethod(enumDecl, enumClass, identClone);
365 CreateEnumFromIntMethod(enumDecl, enumClass, identClone, checker::ETSEnumType::BOXED_FROM_INT_METHOD_NAME,
366 GetEnumClassName(checker_, enumDecl).View());
369 void EnumLoweringPhase::CreateEnumStringClassFromEnumDeclaration(ir::TSEnumDeclaration *const enumDecl)
371 auto *const enumClass = CreateClass(enumDecl);
372 auto *const namesArrayIdent = CreateEnumNamesArray(enumDecl, enumClass);
373 auto *const stringValuesArrayIdent = CreateEnumStringValuesArray(enumDecl, enumClass);
374 auto *const itemsArrayIdent = CreateEnumItemsArray(enumDecl, enumClass);
375 auto *const boxedItemsArrayIdent = CreateBoxedEnumItemsArray(enumDecl, enumClass);
378 CreateEnumGetNameMethod(enumDecl, enumClass, identClone);
381 CreateEnumGetValueOfMethod(enumDecl, enumClass, identClone);
384 CreateEnumToStringMethod(enumDecl, enumClass, identClone);
387 CreateEnumValuesMethod(enumDecl, enumClass, identClone);
390 CreateEnumFromIntMethod(enumDecl, enumClass, identClone, checker::ETSEnumType::FROM_INT_METHOD_NAME,
391 enumDecl->Key()->Name());
394 CreateUnboxingMethod(enumDecl, enumClass, identClone);
397 CreateEnumFromIntMethod(enumDecl, enumClass, identClone, checker::ETSEnumType::BOXED_FROM_INT_METHOD_NAME,
398 GetEnumClassName(checker_, enumDecl).View());
420 auto *enumDecl = ast->AsTSEnumDeclaration();
422 if (auto *const itemInit = enumDecl->Members().front()->AsTSEnumMember()->Init();
424 CreateEnumIntClassFromEnumDeclaration(enumDecl);
426 CreateEnumStringClassFromEnumDeclaration(enumDecl);
428 checker_->LogTypeError("Invalid enumeration value type.", enumDecl->Start());
436 ir::Identifier *EnumLoweringPhase::CreateEnumValuesArray(const ir::TSEnumDeclaration *const enumDecl,
442 return MakeArray(enumDecl, enumClass, "ValuesArray", arrayTypeAnnotation,
455 ir::Identifier *EnumLoweringPhase::CreateEnumStringValuesArray(const ir::TSEnumDeclaration *const enumDecl,
462 return MakeArray(enumDecl, enumClass, "StringValuesArray", arrayTypeAnnotation,
481 ir::Identifier *EnumLoweringPhase::CreateEnumItemsArray(const ir::TSEnumDeclaration *const enumDecl,
484 auto *const enumTypeAnnotation = MakeTypeReference(checker_, enumDecl->Key()->Name());
487 return MakeArray(enumDecl, enumClass, "ItemsArray", arrayTypeAnnotation,
488 [this, enumDecl](const ir::TSEnumMember *const member) {
490 checker_->AllocNode<ir::Identifier>(enumDecl->Key()->Name(), Allocator());
503 ir::Identifier *EnumLoweringPhase::CreateBoxedEnumItemsArray(const ir::TSEnumDeclaration *const enumDecl,
506 auto boxedClassName = GetEnumClassName(checker_, enumDecl).View();
510 return MakeArray(enumDecl, enumClass, "BoxedItemsArray", arrayTypeAnnotation,
511 [this, enumDecl, &boxedClassName](const ir::TSEnumMember *const member) {
513 checker_->AllocNode<ir::Identifier>(enumDecl->Key()->Name(), Allocator());
602 void EnumLoweringPhase::CreateEnumFromIntMethod(const ir::TSEnumDeclaration *const enumDecl,
618 messageString.Append(enumDecl->Key()->Name());
631 auto *const function = MakeFunction({paramScope, std::move(params), std::move(body), returnTypeAnnotation, enumDecl,
643 void EnumLoweringPhase::CreateEnumToStringMethod(const ir::TSEnumDeclaration *const enumDecl,
649 auto *const enumTypeAnnotation = MakeTypeReference(checker_, enumDecl->Key()->Name());
659 auto *const function = MakeFunction({paramScope, std::move(params), std::move(body), stringTypeAnnotation, enumDecl,
671 void EnumLoweringPhase::CreateEnumValueOfMethod(const ir::TSEnumDeclaration *const enumDecl,
678 auto *const enumTypeAnnotation = MakeTypeReference(checker_, enumDecl->Key()->Name());
688 auto *const function = MakeFunction({paramScope, std::move(params), std::move(body), intTypeAnnotation, enumDecl,
700 void EnumLoweringPhase::CreateEnumGetNameMethod(const ir::TSEnumDeclaration *const enumDecl,
707 auto *const enumTypeAnnotation = MakeTypeReference(checker_, enumDecl->Key()->Name());
718 auto *const function = MakeFunction({paramScope, std::move(params), std::move(body), stringTypeAnnotation, enumDecl,
782 ir::IfStatement *CreateIf(EnumLoweringPhase *const elp, const ir::TSEnumDeclaration *const enumDecl,
797 auto *const enumTypeAnnotation = MakeTypeReference(checker, enumDecl->Key()->Name());
806 void EnumLoweringPhase::CreateEnumGetValueOfMethod(const ir::TSEnumDeclaration *const enumDecl,
821 auto *const ifStmt = CreateIf(this, enumDecl, namesArrayIdent, forLoopIIdent, inputNameIdent);
832 messageString.Append(enumDecl->Key()->Name());
843 auto *const enumTypeAnnotation = MakeTypeReference(checker_, enumDecl->Key()->Name());
845 auto *const function = MakeFunction({paramScope, std::move(params), std::move(body), enumTypeAnnotation, enumDecl,
857 void EnumLoweringPhase::CreateEnumValuesMethod(const ir::TSEnumDeclaration *const enumDecl,
869 checker_->AllocNode<ir::TSArrayType>(MakeTypeReference(checker_, enumDecl->Key()->Name()));
872 enumDecl, ir::ModifierFlags::PUBLIC | ir::ModifierFlags::STATIC});
882 void EnumLoweringPhase::CreateUnboxingMethod(ir::TSEnumDeclaration const *const enumDecl,
907 auto *const returnTypeAnnotation = MakeTypeReference(checker_, enumDecl->Key()->Name());
910 {paramScope, std::move(params), std::move(body), returnTypeAnnotation, enumDecl, ir::ModifierFlags::PUBLIC});