Lines Matching +full:checker +full:-
2 * Copyright (c) 2021-2024 Huawei Device Co., Ltd.
7 * http://www.apache.org/licenses/LICENSE-2.0
18 #include "checker/ETSchecker.h"
19 #include "checker/TSchecker.h"
20 #include "checker/types/ets/etsTupleType.h"
21 #include "checker/ets/typeRelationContext.h"
22 #include "checker/ts/destructuringContext.h"
39 decorators_(allocator->Adapter()), in ArrayExpression()
40 elements_(allocator->Adapter()) in ArrayExpression()
48 elements_.emplace_back(element->Clone(allocator, this)->AsExpression()); in ArrayExpression()
52 decorators_.emplace_back(decorator->Clone(allocator, this)); in ArrayExpression()
58 …if (auto *const clone = allocator->New<ArrayExpression>(Tag {}, *this, allocator); clone != nullpt… in Clone()
60 clone->SetParent(parent); in Clone()
72 switch (it->Type()) { in ConvertibleToArrayPattern()
74 convResult = it->AsArrayExpression()->ConvertibleToArrayPattern(); in ConvertibleToArrayPattern()
79 convResult = it->AsSpreadElement()->ConvertibleToRest(isDeclaration_); in ConvertibleToArrayPattern()
87 convResult = it->AsObjectExpression()->ConvertibleToObjectPattern(); in ConvertibleToArrayPattern()
91 convResult = it->AsAssignmentExpression()->ConvertibleToAssignmentPattern(); in ConvertibleToArrayPattern()
125 return {"Unexpected token.", TypeAnnotation()->Start()}; in ValidateExpression()
131 switch (it->Type()) { in ValidateExpression()
133 info = it->AsObjectExpression()->ValidateExpression(); in ValidateExpression()
137 info = it->AsArrayExpression()->ValidateExpression(); in ValidateExpression()
141 auto *assignmentExpr = it->AsAssignmentExpression(); in ValidateExpression()
143 if (assignmentExpr->Left()->IsArrayExpression()) { in ValidateExpression()
144 info = assignmentExpr->Left()->AsArrayExpression()->ValidateExpression(); in ValidateExpression()
145 } else if (assignmentExpr->Left()->IsObjectExpression()) { in ValidateExpression()
146 info = assignmentExpr->Left()->AsObjectExpression()->ValidateExpression(); in ValidateExpression()
152 info = it->AsSpreadElement()->ValidateExpression(); in ValidateExpression()
172 it->SetTransformedNode(transformationName, transformedNode); in TransformChildren()
173 it = transformedNode->AsDecorator(); in TransformChildren()
179 it->SetTransformedNode(transformationName, transformedNode); in TransformChildren()
180 it = transformedNode->AsExpression(); in TransformChildren()
186 typeAnnotation->SetTransformedNode(transformationName, transformedNode); in TransformChildren()
209 …dumper->Add({{"type", type_ == AstNodeType::ARRAY_EXPRESSION ? "ArrayExpression" : "ArrayPattern"}, in Dump()
218 dumper->Add("["); in Dump()
220 element->Dump(dumper); in Dump()
222 dumper->Add(", "); in Dump()
225 dumper->Add("]"); in Dump()
230 pg->GetAstCompiler()->Compile(this); in Compile()
235 etsg->GetAstCompiler()->Compile(this); in Compile()
238 checker::Type *ArrayExpression::Check(checker::TSChecker *checker) in Check() argument
240 return checker->GetAnalyzer()->Check(this); in Check()
243 checker::Type *CheckAssignmentPattern(Expression *it, checker::TSChecker *checker, checker::Type *e… in CheckAssignmentPattern() argument
244 bool &addOptional, checker::ElementFlags &memberFlag) in CheckAssignmentPattern()
246 auto *assignmentPattern = it->AsAssignmentPattern(); in CheckAssignmentPattern()
247 if (assignmentPattern->Left()->IsIdentifier()) { in CheckAssignmentPattern()
248 const ir::Identifier *ident = assignmentPattern->Left()->AsIdentifier(); in CheckAssignmentPattern()
249 ASSERT(ident->Variable()); in CheckAssignmentPattern()
250 varbinder::Variable *bindingVar = ident->Variable(); in CheckAssignmentPattern()
251 …checker::Type *initializerType = checker->GetBaseTypeOfLiteralType(assignmentPattern->Right()->Che… in CheckAssignmentPattern()
252 bindingVar->SetTsType(initializerType); in CheckAssignmentPattern()
254 } else if (assignmentPattern->Left()->IsArrayPattern()) { in CheckAssignmentPattern()
255 … auto savedContext = checker::SavedCheckerContext(checker, checker::CheckerStatus::FORCE_TUPLE); in CheckAssignmentPattern()
256 auto destructuringContext = checker::ArrayDestructuringContext( in CheckAssignmentPattern()
257 …{checker, assignmentPattern->Left()->AsArrayPattern(), false, true, nullptr, assignmentPattern->Ri… in CheckAssignmentPattern()
261 ASSERT(assignmentPattern->Left()->IsObjectPattern()); in CheckAssignmentPattern()
262 … auto savedContext = checker::SavedCheckerContext(checker, checker::CheckerStatus::FORCE_TUPLE); in CheckAssignmentPattern()
263 auto destructuringContext = checker::ObjectDestructuringContext( in CheckAssignmentPattern()
264 …{checker, assignmentPattern->Left()->AsObjectPattern(), false, true, nullptr, assignmentPattern->R… in CheckAssignmentPattern()
270 memberFlag = checker::ElementFlags::OPTIONAL; in CheckAssignmentPattern()
272 memberFlag = checker::ElementFlags::REQUIRED; in CheckAssignmentPattern()
277 checker::Type *CheckElementPattern(Expression *it, checker::Type *elementType, checker::TSChecker *… in CheckElementPattern() argument
278 bool &addOptional, checker::ElementFlags &memberFlag) in CheckElementPattern()
280 switch (it->Type()) { in CheckElementPattern()
282 elementType = checker->Allocator()->New<checker::ArrayType>(checker->GlobalAnyType()); in CheckElementPattern()
283 memberFlag = checker::ElementFlags::REST; in CheckElementPattern()
288 elementType = it->AsObjectPattern()->CheckPattern(checker); in CheckElementPattern()
289 memberFlag = checker::ElementFlags::REQUIRED; in CheckElementPattern()
294 elementType = it->AsArrayPattern()->CheckPattern(checker); in CheckElementPattern()
295 memberFlag = checker::ElementFlags::REQUIRED; in CheckElementPattern()
300 return CheckAssignmentPattern(it, checker, elementType, addOptional, memberFlag); in CheckElementPattern()
303 elementType = checker->GlobalAnyType(); in CheckElementPattern()
304 memberFlag = checker::ElementFlags::REQUIRED; in CheckElementPattern()
309 const ir::Identifier *ident = it->AsIdentifier(); in CheckElementPattern()
310 ASSERT(ident->Variable()); in CheckElementPattern()
311 elementType = checker->GlobalAnyType(); in CheckElementPattern()
312 ident->Variable()->SetTsType(elementType); in CheckElementPattern()
313 memberFlag = checker::ElementFlags::REQUIRED; in CheckElementPattern()
323 checker::Type *ArrayExpression::CheckPattern(checker::TSChecker *checker) in CheckPattern() argument
325 …checker::ObjectDescriptor *desc = checker->Allocator()->New<checker::ObjectDescriptor>(checker->Al… in CheckPattern()
326 ArenaVector<checker::ElementFlags> elementFlags(checker->Allocator()->Adapter()); in CheckPattern()
327 checker::ElementFlags combinedFlags = checker::ElementFlags::NO_OPTS; in CheckPattern()
333 checker::Type *elementType = nullptr; in CheckPattern()
334 checker::ElementFlags memberFlag = checker::ElementFlags::NO_OPTS; in CheckPattern()
336 elementType = CheckElementPattern(*it, elementType, checker, addOptional, memberFlag); in CheckPattern()
338 util::StringView memberIndex = util::Helpers::ToStringView(checker->Allocator(), index - 1); in CheckPattern()
341 …varbinder::Scope::CreateVar(checker->Allocator(), memberIndex, varbinder::VariableFlags::PROPERTY,… in CheckPattern()
343 if (memberFlag == checker::ElementFlags::OPTIONAL) { in CheckPattern()
344 memberVar->AddFlag(varbinder::VariableFlags::OPTIONAL); in CheckPattern()
349 memberVar->SetTsType(elementType); in CheckPattern()
351 desc->properties.insert(desc->properties.begin(), memberVar); in CheckPattern()
354 index--; in CheckPattern()
357 const checker::TupleTypeInfo tupleTypeInfo = {combinedFlags, minLength, in CheckPattern()
358 … static_cast<uint32_t>(desc->properties.size()), false}; in CheckPattern()
359 return checker->CreateTupleType(desc, std::move(elementFlags), tupleTypeInfo); in CheckPattern()
362 bool ArrayExpression::HandleNestedArrayExpression(checker::ETSChecker *const checker, in HandleNestedArrayExpression() argument
367 currentElement->SetPreferredType(preferredType_->AsETSTupleType()->GetTypeAtIndex(idx)); in HandleNestedArrayExpression()
369 if (currentElement->GetPreferredType()->IsETSTupleType()) { in HandleNestedArrayExpression()
370 if (!checker->ValidateTupleMinElementSize(currentElement, in HandleNestedArrayExpression()
371 … currentElement->GetPreferredType()->AsETSTupleType())) { in HandleNestedArrayExpression()
379 if (preferredType_->IsETSArrayType()) { in HandleNestedArrayExpression()
380 if (preferredType_->AsETSArrayType()->ElementType()->IsETSTupleType()) { in HandleNestedArrayExpression()
381 if (!checker->ValidateTupleMinElementSize( in HandleNestedArrayExpression()
382 // CC-OFFNXT(G.FMT.06-CPP) project code style in HandleNestedArrayExpression()
383 … currentElement, preferredType_->AsETSArrayType()->ElementType()->AsETSTupleType())) { in HandleNestedArrayExpression()
388 currentElement->SetPreferredType(preferredType_->AsETSArrayType()->ElementType()); in HandleNestedArrayExpression()
392 if (currentElement->GetPreferredType() == nullptr) { in HandleNestedArrayExpression()
393 currentElement->SetPreferredType(preferredType_); in HandleNestedArrayExpression()
398 checker::Type *ArrayExpression::Check(checker::ETSChecker *checker) in Check() argument
400 return checker->GetAnalyzer()->Check(this); in Check()
403 void ArrayExpression::GetPrefferedTypeFromFuncParam(checker::ETSChecker *checker, Expression *param, in GetPrefferedTypeFromFuncParam() argument
404 checker::TypeRelationFlag flags) in GetPrefferedTypeFromFuncParam()
409 auto paramType = param->Check(checker); in GetPrefferedTypeFromFuncParam()
410 if (paramType->IsETSArrayType()) { in GetPrefferedTypeFromFuncParam()
411 auto *elementType = paramType->AsETSArrayType()->ElementType(); in GetPrefferedTypeFromFuncParam()
415 …checker::AssignmentContext(checker->Relation(), elem, elem->Check(checker), elementType, elem->Sta… in GetPrefferedTypeFromFuncParam()
416 {""}, checker::TypeRelationFlag::NO_THROW | flags); in GetPrefferedTypeFromFuncParam()