Lines Matching +full:parser +full:-
2 * Copyright (c) 2023-2024 Huawei Device Co., Ltd.
7 * http://www.apache.org/licenses/LICENSE-2.0
21 #include "parser/ETSparser.h"
27 // NOLINTBEGIN(modernize-avoid-c-arrays)
41 // NOLINTEND(modernize-avoid-c-arrays)
44 parser::ETSParser *parser, checker::ETSChecker *checker, in ProcessNewArrayInstanceExpression() argument
47 auto *dimension = newInstanceExpression->Dimension(); in ProcessNewArrayInstanceExpression()
48 auto *dimType = dimension->TsType(); in ProcessNewArrayInstanceExpression()
49 if (auto *unboxed = checker->MaybeUnboxInRelation(dimType); unboxed != nullptr) { in ProcessNewArrayInstanceExpression()
52 if (!dimType->HasTypeFlag(checker::TypeFlag::ETS_FLOATING_POINT)) { in ProcessNewArrayInstanceExpression()
58 scope = checker->VarBinder()->VarScope() != nullptr ? checker->VarBinder()->VarScope() in ProcessNewArrayInstanceExpression()
59 : checker->VarBinder()->TopScope(); in ProcessNewArrayInstanceExpression()
61 …auto expressionCtx = varbinder::LexicalScope<varbinder::Scope>::Enter(checker->VarBinder(), scope); in ProcessNewArrayInstanceExpression()
63 auto const identName = GenName(checker->Allocator()); in ProcessNewArrayInstanceExpression()
64 auto *exprType = checker->AllocNode<ir::OpaqueTypeNode>(dimType); in ProcessNewArrayInstanceExpression()
65 auto *const newInstanceParent = newInstanceExpression->Parent(); in ProcessNewArrayInstanceExpression()
67 …auto *blockExpression = parser->CreateFormattedExpression(FORMAT_NEW_ARRAY_EXPRESSION, identName, … in ProcessNewArrayInstanceExpression()
69 blockExpression->SetParent(newInstanceParent); in ProcessNewArrayInstanceExpression()
71 …auto *castedDimension = parser->CreateFormattedExpression(CAST_NEW_DIMENSION_EXPRESSION, identName… in ProcessNewArrayInstanceExpression()
72 newInstanceExpression->SetDimension(castedDimension); in ProcessNewArrayInstanceExpression()
74 newInstanceExpression->SetTsType(nullptr); in ProcessNewArrayInstanceExpression()
75 InitScopesPhaseETS::RunExternalNode(blockExpression, checker->VarBinder()); in ProcessNewArrayInstanceExpression()
76 …checker->VarBinder()->AsETSBinder()->ResolveReferencesForScope(blockExpression, NearestScope(block… in ProcessNewArrayInstanceExpression()
77 blockExpression->Check(checker); in ProcessNewArrayInstanceExpression()
83 parser::ETSParser *parser, checker::ETSChecker *checker, in ProcessNewMultiDimArrayInstanceExpression() argument
90 scope = checker->VarBinder()->VarScope() != nullptr ? checker->VarBinder()->VarScope() in ProcessNewMultiDimArrayInstanceExpression()
91 : checker->VarBinder()->TopScope(); in ProcessNewMultiDimArrayInstanceExpression()
93 …auto expressionCtx = varbinder::LexicalScope<varbinder::Scope>::Enter(checker->VarBinder(), scope); in ProcessNewMultiDimArrayInstanceExpression()
95 for (std::size_t i = 0U; i < newInstanceExpression->Dimensions().size(); ++i) { in ProcessNewMultiDimArrayInstanceExpression()
96 auto *dimension = newInstanceExpression->Dimensions()[i]; in ProcessNewMultiDimArrayInstanceExpression()
97 auto *dimType = dimension->TsType(); in ProcessNewMultiDimArrayInstanceExpression()
98 if (auto *unboxed = checker->MaybeUnboxInRelation(dimType); unboxed != nullptr) { in ProcessNewMultiDimArrayInstanceExpression()
101 if (!dimType->HasTypeFlag(checker::TypeFlag::ETS_FLOATING_POINT)) { in ProcessNewMultiDimArrayInstanceExpression()
105 if (dimension->IsNumberLiteral()) { in ProcessNewMultiDimArrayInstanceExpression()
106 …auto *castedDimension = parser->CreateFormattedExpression(CAST_OLD_DIMENSION_EXPRESSION, dimension… in ProcessNewMultiDimArrayInstanceExpression()
107 castedDimension->SetParent(newInstanceExpression); in ProcessNewMultiDimArrayInstanceExpression()
108 newInstanceExpression->Dimensions()[i] = castedDimension; in ProcessNewMultiDimArrayInstanceExpression()
110 auto const identName = GenName(checker->Allocator()); in ProcessNewMultiDimArrayInstanceExpression()
111 auto *exprType = checker->AllocNode<ir::OpaqueTypeNode>(dimType); in ProcessNewMultiDimArrayInstanceExpression()
113 auto *blockExpression = parser in ProcessNewMultiDimArrayInstanceExpression()
114 … ->CreateFormattedExpression(FORMAT_NEW_MULTI_DIM_ARRAY_EXPRESSION, identName, in ProcessNewMultiDimArrayInstanceExpression()
116 ->AsBlockExpression(); in ProcessNewMultiDimArrayInstanceExpression()
121 returnExpression->AddStatements(blockExpression->Statements()); in ProcessNewMultiDimArrayInstanceExpression()
124 …auto *castedDimension = parser->CreateFormattedExpression(CAST_NEW_DIMENSION_EXPRESSION, identName… in ProcessNewMultiDimArrayInstanceExpression()
125 castedDimension->SetParent(newInstanceExpression); in ProcessNewMultiDimArrayInstanceExpression()
126 newInstanceExpression->Dimensions()[i] = castedDimension; in ProcessNewMultiDimArrayInstanceExpression()
142 blockExpression->SetParent(newInstanceExpression->Parent()); in CreateNewMultiDimArrayInstanceExpression()
143 newInstanceExpression->SetTsType(nullptr); in CreateNewMultiDimArrayInstanceExpression()
144 … blockExpression->AddStatement(checker->AllocNode<ir::ExpressionStatement>(newInstanceExpression)); in CreateNewMultiDimArrayInstanceExpression()
146 InitScopesPhaseETS::RunExternalNode(blockExpression, checker->VarBinder()); in CreateNewMultiDimArrayInstanceExpression()
147 …checker->VarBinder()->AsETSBinder()->ResolveReferencesForScope(blockExpression, NearestScope(block… in CreateNewMultiDimArrayInstanceExpression()
148 blockExpression->Check(checker); in CreateNewMultiDimArrayInstanceExpression()
153 bool ExpandBracketsPhase::Perform(public_lib::Context *ctx, parser::Program *program) in Perform()
155 auto *const parser = ctx->parser->AsETSParser(); in Perform() local
156 ASSERT(parser != nullptr); in Perform()
157 auto *const checker = ctx->checker->AsETSChecker(); in Perform()
160 program->Ast()->TransformChildrenRecursively( in Perform()
161 // CC-OFFNXT(G.FMT.14-CPP) project code style in Perform()
162 [this, parser, checker](ir::AstNode *const ast) -> ir::AstNode * { in Perform()
163 if (ast->IsETSNewArrayInstanceExpression()) { in Perform()
164 … return ProcessNewArrayInstanceExpression(parser, checker, ast->AsETSNewArrayInstanceExpression()); in Perform()
167 if (ast->IsETSNewMultiDimArrayInstanceExpression()) { in Perform()
168 return ProcessNewMultiDimArrayInstanceExpression(parser, checker, in Perform()
169 … ast->AsETSNewMultiDimArrayInstanceExpression()); in Perform()