Lines Matching refs:checker

19 #include "checker/ETSchecker.h"
20 #include "checker/ets/conversion.h"
21 #include "checker/ets/boxingConverter.h"
22 #include "checker/ets/unboxingConverter.h"
43 static ir::ClassDefinition *GetUnionFieldClass(checker::ETSChecker *checker, varbinder::VarBinder *varbinder)
46 util::UString unionFieldClassName(util::StringView(panda_file::GetDummyClassName()), checker->Allocator());
48 if ((foundVar = checker->Scope()->FindLocal(unionFieldClassName.View(),
52 auto *ident = checker->AllocNode<ir::Identifier>(unionFieldClassName.View(), checker->Allocator());
58 checker->AllocNode<ir::ClassDefinition>(checker->Allocator(), ident, ir::ClassDefinitionModifiers::GLOBAL,
61 auto *classDecl = checker->AllocNode<ir::ClassDeclaration>(classDef, checker->Allocator());
63 classDef->SetTsType(checker->GlobalETSObjectType());
71 static varbinder::LocalVariable *CreateUnionFieldClassProperty(checker::ETSChecker *checker,
73 checker::Type *fieldType,
76 auto *const allocator = checker->Allocator();
77 auto *const dummyClass = GetUnionFieldClass(checker, varbinder);
88 auto *fieldIdent = checker->AllocNode<ir::Identifier>(propName, allocator);
92 checker->AllocNode<ir::ClassProperty>(fieldIdent, nullptr, nullptr, ir::ModifierFlags::NONE, allocator, false);
108 static void HandleUnionPropertyAccess(checker::ETSChecker *checker, varbinder::VarBinder *vbind,
116 parent->AsCallExpression()->Signature()->HasSignatureFlag(checker::SignatureFlags::TYPE)));
118 CreateUnionFieldClassProperty(checker, vbind, expr->TsType(), expr->Property()->AsIdentifier()->Name()));
122 static ir::TSAsExpression *GenAsExpression(checker::ETSChecker *checker, checker::Type *const opaqueType,
125 auto *const typeNode = checker->AllocNode<ir::OpaqueTypeNode>(opaqueType);
126 auto *const asExpression = checker->AllocNode<ir::TSAsExpression>(node, typeNode, false);
128 asExpression->Check(checker);
138 static ir::TSAsExpression *UnionCastToPrimitive(checker::ETSChecker *checker, checker::ETSObjectType *unboxableRef,
139 checker::Type *unboxedPrim, ir::Expression *unionNode)
141 auto *const unionAsRefExpression = GenAsExpression(checker, unboxableRef, unionNode, nullptr);
142 return GenAsExpression(checker, unboxedPrim, unionAsRefExpression, unionNode->Parent());
145 static ir::TSAsExpression *HandleUnionCastToPrimitive(checker::ETSChecker *checker, ir::TSAsExpression *expr)
148 auto *sourceType = unionType->FindExactOrBoxedType(checker, expr->TsType());
150 sourceType = unionType->AsETSUnionType()->FindTypeIsCastableToSomeType(expr->Expr(), checker->Relation(),
154 if (expr->TsType()->HasTypeFlag(checker::TypeFlag::ETS_PRIMITIVE)) {
155 auto *const asExpr = GenAsExpression(checker, sourceType, expr->Expr(), expr);
157 checker->GetUnboxingFlag(checker->ETSBuiltinTypeAsPrimitiveType(sourceType)));
164 auto *const unboxedUnionType = checker->ETSBuiltinTypeAsPrimitiveType(unboxableUnionType);
166 UnionCastToPrimitive(checker, unboxableUnionType->AsETSObjectType(), unboxedUnionType, expr->Expr());
181 checker::ETSChecker *checker = ctx->checker->AsETSChecker();
184 [checker](ir::AstNode *ast) -> ir::AstNode * {
187 checker->GetApparentType(checker->GetNonNullishType(ast->AsMemberExpression()->Object()->TsType()));
189 HandleUnionPropertyAccess(checker, checker->VarBinder(), ast->AsMemberExpression());
197 ast->AsTSAsExpression()->TsType()->HasTypeFlag(checker::TypeFlag::ETS_PRIMITIVE)) {
198 return HandleUnionCastToPrimitive(checker, ast->AsTSAsExpression());
210 bool current = !program->Ast()->IsAnyChild([checker = ctx->checker->AsETSChecker()](ir::AstNode *ast) {
215 checker->GetApparentType(checker->GetNonNullishType(ast->AsMemberExpression()->Object()->TsType()));
218 parent->AsCallExpression()->Signature()->HasSignatureFlag(checker::SignatureFlags::TYPE))) {