Lines Matching +full:checker +full:-
2 * Copyright (c) 2021-2024 Huawei Device Co., Ltd.
7 * http://www.apache.org/licenses/LICENSE-2.0
17 #include "checker/types/ets/etsEnumType.h"
18 #include "checker/ETSchecker.h"
19 #include "checker/types/type.h"
28 for (ir::AstNode *curr = ast->Parent(); curr != nullptr; curr = curr->Parent()) { in FindEnclosingClass()
29 if (curr->IsClassDeclaration()) { in FindEnclosingClass()
30 return curr->AsClassDeclaration(); in FindEnclosingClass()
36 static ir::CallExpression *CallStaticEnumMethod(checker::ETSChecker *checker, checker::ETSEnumType … in CallStaticEnumMethod() argument
37 … checker::ETSEnumType::Method (checker::ETSEnumType::*getMethod)() const, in CallStaticEnumMethod()
40 auto classDef = enumType->BoxedType()->AsETSObjectType()->GetDeclNode()->AsClassDefinition(); in CallStaticEnumMethod()
41 auto methodName = (enumType->*getMethod)().memberProxyType->Name(); in CallStaticEnumMethod()
43 …auto classId = checker->AllocNode<ir::Identifier>(classDef->Ident()->Name(), checker->Allocator()); in CallStaticEnumMethod()
44 auto methodId = checker->AllocNode<ir::Identifier>(methodName, checker->Allocator()); in CallStaticEnumMethod()
45 …auto callee = checker->AllocNode<ir::MemberExpression>(classId, methodId, ir::MemberExpressionKind… in CallStaticEnumMethod()
48 ArenaVector<ir::Expression *> callArguments({argument}, checker->Allocator()->Adapter()); in CallStaticEnumMethod()
49 return checker->AllocNode<ir::CallExpression>(callee, std::move(callArguments), nullptr, false); in CallStaticEnumMethod()
52 static ir::CallExpression *CallInstanceEnumMethod(checker::ETSChecker *checker, checker::ETSEnumTyp… in CallInstanceEnumMethod() argument
53 … checker::ETSEnumType::Method (checker::ETSEnumType::*getMethod)() in CallInstanceEnumMethod()
57 auto methodName = (enumType->*getMethod)().memberProxyType->Name(); in CallInstanceEnumMethod()
59 auto methodId = checker->AllocNode<ir::Identifier>(methodName, checker->Allocator()); in CallInstanceEnumMethod()
60 …auto callee = checker->AllocNode<ir::MemberExpression>(thisArg, methodId, ir::MemberExpressionKind… in CallInstanceEnumMethod()
63 ArenaVector<ir::Expression *> callArguments({}, checker->Allocator()->Adapter()); in CallInstanceEnumMethod()
64 return checker->AllocNode<ir::CallExpression>(callee, std::move(callArguments), nullptr, false); in CallInstanceEnumMethod()
67 static ir::CallExpression *GenerateValueOfCall(checker::ETSChecker *checker, ir::AstNode *const nod… in GenerateValueOfCall() argument
69 ASSERT(node->IsExpression()); in GenerateValueOfCall()
70 auto expr = node->AsExpression(); in GenerateValueOfCall()
71 auto parent = expr->Parent(); in GenerateValueOfCall()
72 parent->AddAstNodeFlags(ir::AstNodeFlags::RECHECK); in GenerateValueOfCall()
74 checker::ETSEnumType *enumIf; in GenerateValueOfCall()
76 if (!expr->TsType()->IsETSEnumType()) { in GenerateValueOfCall()
77 expr->RemoveBoxingUnboxingFlags(ir::BoxingUnboxingFlags::UNBOX_TO_ENUM); in GenerateValueOfCall()
78 enumIf = expr->TsType()->AsETSObjectType()->GetUnboxedEnumType(); in GenerateValueOfCall()
79 expr = CallInstanceEnumMethod(checker, enumIf, &checker::ETSEnumType::UnboxMethod, expr); in GenerateValueOfCall()
81 enumIf = expr->TsType()->AsETSEnumType(); in GenerateValueOfCall()
84 …auto *callExpr = CallStaticEnumMethod(checker, enumIf, &checker::ETSEnumType::ValueOfMethod, expr); in GenerateValueOfCall()
85 callExpr->SetParent(parent); in GenerateValueOfCall()
89 auto *varBinder = checker->VarBinder()->AsETSBinder(); in GenerateValueOfCall()
93 varBinder->ResolveReferencesForScopeWithContext(callExpr, nearestScope); in GenerateValueOfCall()
95 auto checkerCtx = checker::SavedCheckerContext(checker, checker::CheckerStatus::IN_CLASS, in GenerateValueOfCall()
96 … calleClass->Definition()->TsType()->AsETSObjectType()); in GenerateValueOfCall()
97 auto scopeCtx = checker::ScopeContext(checker, nearestScope); in GenerateValueOfCall()
99 callExpr->Check(checker); in GenerateValueOfCall()
100 node->RemoveAstNodeFlags(ir::AstNodeFlags::GENERATE_VALUE_OF); in GenerateValueOfCall()
106 if (program->Extension() != ScriptExtension::ETS) { in Perform()
110 for (auto &[_, extPrograms] : program->ExternalSources()) { in Perform()
116 program->Ast()->TransformChildrenRecursivelyPostorder( in Perform()
117 // clang-format off in Perform()
118 [ctx](ir::AstNode *const node) -> ir::AstNode* { in Perform()
119 if (node->HasAstNodeFlags(ir::AstNodeFlags::RECHECK)) { in Perform()
120 if (node->IsExpression()) { in Perform()
121 node->AsExpression()->SetTsType(nullptr); // force recheck in Perform()
123 node->Check(ctx->checker->AsETSChecker()); in Perform()
124 node->RemoveAstNodeFlags(ir::AstNodeFlags::RECHECK); in Perform()
126 if (node->HasAstNodeFlags(ir::AstNodeFlags::GENERATE_VALUE_OF)) { in Perform()
127 return GenerateValueOfCall(ctx->checker->AsETSChecker(), node); in Perform()
129 if (node->HasAstNodeFlags(ir::AstNodeFlags::GENERATE_GET_NAME)) { in Perform()
130 ASSERT(node->IsMemberExpression()); in Perform()
131 auto memberExpr = node->AsMemberExpression(); in Perform()
133 auto *enumIf = memberExpr->Object()->TsType()->AsETSEnumType(); in Perform()
134 auto *callExpr = CallStaticEnumMethod(ctx->checker->AsETSChecker(), enumIf, in Perform()
135 // CC-OFFNXT(G.FMT.06-CPP) project code style in Perform()
136 … &checker::ETSEnumType::GetNameMethod, memberExpr->Property()); in Perform()
138 callExpr->SetParent(node->Parent()); in Perform()
139 callExpr->Check(ctx->checker->AsETSChecker()); in Perform()
140 node->RemoveAstNodeFlags(ir::AstNodeFlags::GENERATE_GET_NAME); in Perform()
145 // clang-format on in Perform()