Lines Matching +full:parserprogram +full:-
2 * Copyright (c) 2021-2024 Huawei Device Co., Ltd.
7 * http://www.apache.org/licenses/LICENSE-2.0
77 ASSERT(Program()->Ast()); in IdentifierAnalysis()
81 recordTable_->SetProgram(Program()); in IdentifierAnalysis()
82 globalRecordTable_.SetClassDefinition(Program()->GlobalClass()); in IdentifierAnalysis()
85 ASSERT(globalRecordTable_.ClassDefinition() == Program()->GlobalClass()); in IdentifierAnalysis()
90 auto *iter = typeRef->Part(); in LookupTypeArgumentReferences()
93 if (iter->TypeParams() == nullptr) { in LookupTypeArgumentReferences()
94 iter = iter->Previous(); in LookupTypeArgumentReferences()
98 ResolveReferences(iter->TypeParams()); in LookupTypeArgumentReferences()
99 iter = iter->Previous(); in LookupTypeArgumentReferences()
105 const auto &name = ident->Name(); in LookupTypeReference()
114 …auto res = iter->Find(name, ResolveBindingOptions::DECLARATION | ResolveBindingOptions::TYPE_ALIAS… in LookupTypeReference()
120 ident->SetVariable(res.variable); in LookupTypeReference()
125 ident->SetVariable(res.variable); in LookupTypeReference()
129 switch (res.variable->Declaration()->Node()->Type()) { in LookupTypeReference()
139 ident->SetVariable(res.variable); in LookupTypeReference()
143 iter = iter->Parent(); in LookupTypeReference()
148 auto *checker = GetContext()->checker->AsETSChecker(); in LookupTypeReference()
149 auto *debugInfoPlugin = checker->GetDebugInfoPlugin(); in LookupTypeReference()
151 auto *var = debugInfoPlugin->FindClass(ident); in LookupTypeReference()
153 ident->SetVariable(var); in LookupTypeReference()
159 ThrowUnresolvableType(ident->Start(), name); in LookupTypeReference()
164 parent->Iterate([this, scope](auto *node) { ResolveReferenceForScope(node, scope); }); in ResolveReferencesForScope()
169 switch (node->Type()) { in ResolveReferenceForScope()
171 auto *ident = node->AsIdentifier(); in ResolveReferenceForScope()
172 if (ident->Variable() != nullptr) { in ResolveReferenceForScope()
175 …if (auto const res = scope->Find(ident->Name(), ResolveBindingOptions::ALL); res.variable != nullp… in ResolveReferenceForScope()
176 ident->SetVariable(res.variable); in ResolveReferenceForScope()
182 BuildVarDeclarator(node->AsVariableDeclarator()); in ResolveReferenceForScope()
187 auto scope_ctx = LexicalScope<Scope>::Enter(this, node->AsBlockStatement()->Scope()); in ResolveReferenceForScope()
193 auto scopeCtx = LexicalScope<Scope>::Enter(this, node->AsBlockExpression()->Scope()); in ResolveReferenceForScope()
212 const auto &name = ident->Name(); in LookupIdentReference()
213 auto res = GetScope()->Find(name, ResolveBindingOptions::ALL); in LookupIdentReference()
217 auto *outerFunction = GetScope()->EnclosingVariableScope()->Node(); in LookupIdentReference()
219 if ((!outerFunction->IsScriptFunction() || !outerFunction->AsScriptFunction()->IsArrow()) && in LookupIdentReference()
220 …!res.variable->IsGlobalVariable() && res.variable->HasFlag(VariableFlags::LOCAL) && res.level > 1)… in LookupIdentReference()
221 ThrowInvalidCapture(ident->Start(), name); in LookupIdentReference()
229 if (ident->IsReference(Extension()) && res.variable->Declaration()->IsLetOrConstDecl() && in LookupIdentReference()
230 !res.variable->HasFlag(VariableFlags::INITIALIZED)) { in LookupIdentReference()
231 ThrowTDZ(ident->Start(), name); in LookupIdentReference()
242 auto *baseName = typeRef->BaseName(); in BuildETSTypeReference()
243 ASSERT(baseName->IsReference(Extension())); in BuildETSTypeReference()
248 bool allowDynamicNamespaces = typeRef->Part()->Name() != baseName; in BuildETSTypeReference()
255 for (auto *it : obj->Decorators()) { in BuildObjectExpression()
268 for (auto expr : obj->Properties()) { in BuildObjectExpression()
269 if (expr->IsProperty()) { in BuildObjectExpression()
270 auto *prop = expr->AsProperty(); in BuildObjectExpression()
271 ResolveReference(prop->Value()); in BuildObjectExpression()
275 if (obj->TypeAnnotation() != nullptr) { in BuildObjectExpression()
276 ResolveReference(obj->TypeAnnotation()); in BuildObjectExpression()
282 auto res = GetScope()->Find(decl->Id()->Name()); in InitializeInterfaceIdent()
284 ASSERT(res.variable && res.variable->Declaration()->IsInterfaceDecl()); in InitializeInterfaceIdent()
285 res.variable->AddFlag(VariableFlags::INITIALIZED); in InitializeInterfaceIdent()
286 decl->Id()->SetVariable(res.variable); in InitializeInterfaceIdent()
291 auto enumScopeCtx = LexicalScope<LocalScope>::Enter(this, enumDecl->Scope()); in ResolveEnumDeclaration()
293 for (auto *member : enumDecl->Members()) { in ResolveEnumDeclaration()
302 for (auto *extend : decl->Extends()) { in ResolveInterfaceDeclaration()
306 auto scopeCtx = LexicalScope<ClassScope>::Enter(this, decl->Scope()->AsClassScope()); in ResolveInterfaceDeclaration()
308 for (auto *stmt : decl->Body()->Body()) { in ResolveInterfaceDeclaration()
309 if (!stmt->IsClassProperty()) { in ResolveInterfaceDeclaration()
316 ResolvePropertyReference(stmt->AsClassProperty(), decl->Scope()->AsClassScope()) in ResolveInterfaceDeclaration()
317 … ->FindLocal(stmt->AsClassProperty()->Id()->Name(), varbinder::ResolveBindingOptions::BINDINGS); in ResolveInterfaceDeclaration()
318 fieldVar->AddFlag(VariableFlags::INITIALIZED); in ResolveInterfaceDeclaration()
321 for (auto *stmt : decl->Body()->Body()) { in ResolveInterfaceDeclaration()
322 if (stmt->IsClassProperty()) { in ResolveInterfaceDeclaration()
331 if (decl->TypeParams() != nullptr) { in BuildInterfaceDeclaration()
332 auto typeParamScopeCtx = LexicalScope<LocalScope>::Enter(this, decl->TypeParams()->Scope()); in BuildInterfaceDeclaration()
333 ResolveReferences(decl->TypeParams()); in BuildInterfaceDeclaration()
343 if (methodDef->Function()->TypeParams() != nullptr) { in BuildMethodDefinition()
344 …auto scopeCtx = LexicalScope<LocalScope>::Enter(this, methodDef->Function()->TypeParams()->Scope()… in BuildMethodDefinition()
345 ResolveReferences(methodDef->Function()->TypeParams()); in BuildMethodDefinition()
353 if (annoDecl->Expr()->IsIdentifier()) { in BuildAnnotationDeclaration()
354 LookupTypeReference(annoDecl->AsAnnotationDeclaration()->Expr()->AsIdentifier(), false); in BuildAnnotationDeclaration()
356 ResolveReference(annoDecl->Expr()); in BuildAnnotationDeclaration()
358 auto scopeCtx = LexicalScope<LocalScope>::Enter(this, annoDecl->Scope()); in BuildAnnotationDeclaration()
359 for (auto *property : annoDecl->Properties()) { in BuildAnnotationDeclaration()
366 if (annoUsage->Expr()->IsIdentifier()) { in BuildAnnotationUsage()
367 LookupTypeReference(annoUsage->AsAnnotationUsage()->Expr()->AsIdentifier(), false); in BuildAnnotationUsage()
369 ResolveReference(annoUsage->Expr()); in BuildAnnotationUsage()
372 for (auto *property : annoUsage->Properties()) { in BuildAnnotationUsage()
379 methodDef->ResolveReferences([this](auto *childNode) { ResolveReference(childNode); }); in ResolveMethodDefinition()
381 auto *func = methodDef->Function(); in ResolveMethodDefinition()
382 for (auto *anno : func->Annotations()) { in ResolveMethodDefinition()
385 if (methodDef->IsStatic() || func->IsStaticBlock()) { in ResolveMethodDefinition()
389 auto paramScopeCtx = LexicalScope<FunctionParamScope>::Enter(this, func->Scope()->ParamScope()); in ResolveMethodDefinition()
391 auto params = func->Scope()->ParamScope()->Params(); in ResolveMethodDefinition()
392 if (!params.empty() && params.front()->Name() == MANDATORY_PARAM_THIS) { in ResolveMethodDefinition()
397 thisParam->Declaration()->BindNode(thisParam_); in ResolveMethodDefinition()
402 ResolveReference(memberExpr->Object()); in BuildMemberExpression()
404 if (memberExpr->Kind() == ir::MemberExpressionKind::ELEMENT_ACCESS) { in BuildMemberExpression()
405 ResolveReference(memberExpr->Property()); in BuildMemberExpression()
413 if (classDef->TypeParams() != nullptr) { in BuildClassDefinition()
414 auto scopeCtx = LexicalScope<LocalScope>::Enter(this, classDef->TypeParams()->Scope()); in BuildClassDefinition()
415 ResolveReferences(classDef->TypeParams()); in BuildClassDefinition()
427 if (prop->IsStatic()) { in ResolvePropertyReference()
428 return scope->StaticFieldScope(); in ResolvePropertyReference()
431 return scope->InstanceFieldScope(); in ResolvePropertyReference()
436 auto classCtx = LexicalScope<ClassScope>::Enter(this, classDef->Scope()->AsClassScope()); in BuildClassDefinitionImpl()
438 if (classDef->Super() != nullptr) { in BuildClassDefinitionImpl()
439 ResolveReference(classDef->Super()); in BuildClassDefinitionImpl()
442 for (auto *impl : classDef->Implements()) { in BuildClassDefinitionImpl()
445 for (auto *anno : classDef->Annotations()) { in BuildClassDefinitionImpl()
449 for (auto *stmt : classDef->Body()) { in BuildClassDefinitionImpl()
450 if (!stmt->IsClassProperty()) { in BuildClassDefinitionImpl()
454 …auto fieldScope = ResolvePropertyReference(stmt->AsClassProperty(), classDef->Scope()->AsClassScop… in BuildClassDefinitionImpl()
455 auto fieldName = stmt->AsClassProperty()->Id()->Name(); in BuildClassDefinitionImpl()
456 … auto fieldVar = fieldScope->FindLocal(fieldName, varbinder::ResolveBindingOptions::BINDINGS); in BuildClassDefinitionImpl()
457 fieldVar->AddFlag(VariableFlags::INITIALIZED); in BuildClassDefinitionImpl()
458 if ((fieldVar->Declaration()->IsConstDecl() || fieldVar->Declaration()->IsReadonlyDecl()) && in BuildClassDefinitionImpl()
459 stmt->AsClassProperty()->Value() == nullptr) { in BuildClassDefinitionImpl()
460 fieldVar->AddFlag(VariableFlags::EXPLICIT_INIT_REQUIRED); in BuildClassDefinitionImpl()
464 for (auto *stmt : classDef->Body()) { in BuildClassDefinitionImpl()
465 if (stmt->IsClassProperty()) { in BuildClassDefinitionImpl()
474 auto paramScopeCtx = LexicalScope<FunctionParamScope>::Enter(this, func->Scope()->ParamScope()); in AddFunctionThisParam()
476 thisParam->Declaration()->BindNode(thisParam_); in AddFunctionThisParam()
482 func->Scope()->BindName(containingClassName); in BuildProxyMethod()
484 if (!func->IsAsyncFunc() && !isExternal) { in BuildProxyMethod()
485 Functions().push_back(func->Scope()); in BuildProxyMethod()
493 if (specifier->IsImportNamespaceSpecifier()) { in AddDynamicSpecifiersToTopBindings()
494 return specifier->AsImportNamespaceSpecifier()->Local()->Name(); in AddDynamicSpecifiersToTopBindings()
497 return specifier->AsImportSpecifier()->Local()->Name(); in AddDynamicSpecifiersToTopBindings()
500 ASSERT(GetScope()->Find(name, ResolveBindingOptions::DECLARATION).variable != nullptr); in AddDynamicSpecifiersToTopBindings()
501 auto specDecl = GetScope()->Find(name, ResolveBindingOptions::DECLARATION); in AddDynamicSpecifiersToTopBindings()
504 if (specifier->IsImportSpecifier()) { in AddDynamicSpecifiersToTopBindings()
505 auto importSpecifier = specifier->AsImportSpecifier(); in AddDynamicSpecifiersToTopBindings()
506 importSpecifier->Imported()->SetVariable(specDecl.variable); in AddDynamicSpecifiersToTopBindings()
507 importSpecifier->Local()->SetVariable(specDecl.variable); in AddDynamicSpecifiersToTopBindings()
514 if (import->Language().IsDynamic()) { in InsertForeignBinding()
518 TopScope()->InsertForeignBinding(name, var); in InsertForeignBinding()
524 auto type = var->Declaration()->Node()->IsClassDefinition() ? "Class '" in RedeclarationErrorMessageAssembler()
525 : var->Declaration()->IsFunctionDecl() ? "Function '" in RedeclarationErrorMessageAssembler()
528 str += variable->Declaration()->Type() == var->Declaration()->Type() ? " is already defined." in RedeclarationErrorMessageAssembler()
536 Scope *scope = var->GetScope(); in GetPackageName()
538 while (scope->Parent() != nullptr) { in GetPackageName()
539 scope = scope->Parent(); in GetPackageName()
542 ASSERT(scope->Node()->IsETSScript()); in GetPackageName()
544 return scope->Node()->AsETSScript()->Program()->ModuleName(); in GetPackageName()
550 auto *const currentNode = variable->Declaration()->Node()->AsMethodDefinition(); in AddOverloadFlag()
551 auto *const method = importedVar->Declaration()->Node()->AsMethodDefinition(); in AddOverloadFlag()
558 if (!method->Overloads().empty() && !method->HasOverload(currentNode)) { in AddOverloadFlag()
559 method->AddOverload(currentNode); in AddOverloadFlag()
560 currentNode->Function()->Id()->SetVariable(importedVar); in AddOverloadFlag()
561 currentNode->Function()->AddFlag(ir::ScriptFunctionFlags::OVERLOAD); in AddOverloadFlag()
562 currentNode->Function()->AddFlag(ir::ScriptFunctionFlags::EXTERNAL_OVERLOAD); in AddOverloadFlag()
563 util::UString newInternalName(currentNode->Function()->Scope()->Name(), allocator); in AddOverloadFlag()
564 currentNode->Function()->Scope()->BindInternalName(newInternalName.View()); in AddOverloadFlag()
568 if (!currentNode->HasOverload(method)) { in AddOverloadFlag()
569 currentNode->AddOverload(method); in AddOverloadFlag()
570 method->Function()->Id()->SetVariable(variable); in AddOverloadFlag()
571 method->Function()->AddFlag(ir::ScriptFunctionFlags::OVERLOAD); in AddOverloadFlag()
572 method->Function()->AddFlag(ir::ScriptFunctionFlags::EXTERNAL_OVERLOAD); in AddOverloadFlag()
573 util::UString newInternalName(method->Function()->Scope()->Name(), allocator); in AddOverloadFlag()
574 method->Function()->Scope()->BindInternalName(newInternalName.View()); in AddOverloadFlag()
586 … const auto *const classDef = var->Declaration()->Node()->AsClassDeclaration()->Definition(); in ImportAllForeignBindings()
591 …if (!importGlobalScope->IsForeignBinding(bindingName) && !var->Declaration()->Node()->IsDefaultExp… in ImportAllForeignBindings()
592 (var->AsLocalVariable()->Declaration()->Node()->IsExported() || in ImportAllForeignBindings()
593 var->AsLocalVariable()->Declaration()->Node()->IsExportedType())) { in ImportAllForeignBindings()
594 … auto variable = Program()->GlobalClassScope()->FindLocal(bindingName, ResolveBindingOptions::ALL); in ImportAllForeignBindings()
595 … if (variable != nullptr && var != variable && variable->Declaration()->IsFunctionDecl() && in ImportAllForeignBindings()
596 var->Declaration()->IsFunctionDecl()) { in ImportAllForeignBindings()
602 …ThrowError(import->Source()->Start(), RedeclarationErrorMessageAssembler(var, variable, bindingNam… in ImportAllForeignBindings()
608 …for (const auto [bindingName, var] : importProgram->GlobalClassScope()->StaticMethodScope()->Bindi… in ImportAllForeignBindings()
609 if (!var->Declaration()->Node()->IsDefaultExported()) { in ImportAllForeignBindings()
614 …for (const auto [bindingName, var] : importProgram->GlobalClassScope()->StaticFieldScope()->Bindin… in ImportAllForeignBindings()
615 if (!var->Declaration()->Node()->IsDefaultExported()) { in ImportAllForeignBindings()
624 auto importSource = import->ResolvedSource()->Str(); in ReexportPathMatchesImportPath()
625 auto reexportSource = reexport->GetProgramPath(); in ReexportPathMatchesImportPath()
635 if (!specifier->IsImportNamespaceSpecifier()) { in AddImportNamespaceSpecifiersToTopBindings()
638 const auto *const namespaceSpecifier = specifier->AsImportNamespaceSpecifier(); in AddImportNamespaceSpecifiersToTopBindings()
640 if (namespaceSpecifier->Local()->Name().Empty()) { in AddImportNamespaceSpecifiersToTopBindings()
650 for (auto it : item->GetETSImportDeclarations()->Specifiers()) { in AddImportNamespaceSpecifiersToTopBindings()
651 if (it->IsImportNamespaceSpecifier() && !namespaceSpecifier->Local()->Name().Empty()) { in AddImportNamespaceSpecifiersToTopBindings()
655 AddSpecifiersToTopBindings(it, item->GetETSImportDeclarations(), in AddImportNamespaceSpecifiersToTopBindings()
656 item->GetETSImportDeclarations()->Source()); in AddImportNamespaceSpecifiersToTopBindings()
669 …const auto &staticMethodBindings = recordRes.front()->GlobalClassScope()->StaticMethodScope()->Bin… in FindImportSpecifiersVariable()
672 return foundVar->second; in FindImportSpecifiersVariable()
676 … const auto &staticFieldBindings = res->GlobalClassScope()->StaticFieldScope()->Bindings(); in FindImportSpecifiersVariable()
680 foundVar->second->AsLocalVariable()->AddFlag(VariableFlags::INITIALIZED); in FindImportSpecifiersVariable()
689 return foundVar->second; in FindImportSpecifiersVariable()
703 viewedReExport.push_back(item->GetETSImportDeclarations()); in FindImportDeclInReExports()
705 auto specifiers = item->GetETSImportDeclarations()->Specifiers(); in FindImportDeclInReExports()
706 if (specifiers[0]->IsImportSpecifier()) { in FindImportDeclInReExports()
708 return it->AsImportSpecifier()->Local()->Name().Is(imported.Mutf8()); in FindImportDeclInReExports()
712 implDecl = item->GetETSImportDeclarations(); in FindImportDeclInReExports()
715 … GetExternalProgram(item->GetETSImportDeclarations()->ResolvedSource()->Str(), importPath); in FindImportDeclInReExports()
716 …auto *const var = FindImportSpecifiersVariable(imported, record.front()->GlobalScope()->Bindings()… in FindImportDeclInReExports()
718 implDecl = item->GetETSImportDeclarations(); in FindImportDeclInReExports()
721 auto reExportImport = item->GetETSImportDeclarations(); in FindImportDeclInReExports()
722 auto reExportImportPath = reExportImport->Source(); in FindImportDeclInReExports()
736 if (var->Declaration()->Node()->IsDefaultExported()) { in ValidateImportVariable()
737 …ThrowError(importPath->Start(), "Use the default import syntax to import a default exported elemen… in ValidateImportVariable()
740 if (import->IsTypeKind() && !var->Declaration()->Node()->IsExportedType()) { in ValidateImportVariable()
741 ThrowError(importPath->Start(), in ValidateImportVariable()
745 … if (!var->Declaration()->Node()->IsExported() && !var->Declaration()->Node()->IsExportedType()) { in ValidateImportVariable()
746 …ThrowError(importPath->Start(), "Imported element not exported '" + var->Declaration()->Name().Mut… in ValidateImportVariable()
755 if (importSpecifier->Local() != nullptr) { in ImportLocalName()
757 return importPath->Str() != savedSpecifier.first && imported == savedSpecifier.second; in ImportLocalName()
760 topScope->EraseBinding(imported); in ImportLocalName()
763 importSpecifiers.push_back(std::make_pair(importPath->Str(), imported)); in ImportLocalName()
765 return importSpecifier->Local()->Name(); in ImportLocalName()
778 …if (overloadAllowed && var->Declaration()->IsFunctionDecl() && otherVar->Declaration()->IsFunction… in DetectNameConflict()
783 …bool isAmbient = var->Declaration()->Node()->IsDeclare() && !otherVar->Declaration()->Node()->IsDe… in DetectNameConflict()
788 ThrowError(importPath->Start(), RedeclarationErrorMessageAssembler(var, otherVar, localName)); in DetectNameConflict()
797 if (!specifier->IsImportSpecifier()) { in AddImportSpecifiersToTopBindings()
800 const ir::StringLiteral *const importPath = import->Source(); in AddImportSpecifiersToTopBindings()
802 auto importSpecifier = specifier->AsImportSpecifier(); in AddImportSpecifiersToTopBindings()
803 if (!importSpecifier->Imported()->IsIdentifier()) { in AddImportSpecifiersToTopBindings()
807 auto imported = importSpecifier->Imported()->Name(); in AddImportSpecifiersToTopBindings()
809 for (auto const item : import->Specifiers()) { in AddImportSpecifiersToTopBindings()
810 …if (item->IsImportSpecifier() && item->AsImportSpecifier()->Local()->Name().Is(imported.Mutf8()) && in AddImportSpecifiersToTopBindings()
811 …!item->AsImportSpecifier()->Local()->Name().Is(item->AsImportSpecifier()->Imported()->Name().Mutf8… in AddImportSpecifiersToTopBindings()
812 imported = item->AsImportSpecifier()->Imported()->Name(); in AddImportSpecifiersToTopBindings()
816 … util::StringView nameToSearchFor = FindNameInAliasMap(import->ResolvedSource()->Str(), imported); in AddImportSpecifiersToTopBindings()
822 importSpecifier->Imported()->SetVariable(var); in AddImportSpecifiersToTopBindings()
823 importSpecifier->Local()->SetVariable(var); in AddImportSpecifiersToTopBindings()
830 AddSpecifiersToTopBindings(specifier, implDecl, implDecl->Source(), viewedReExport); in AddImportSpecifiersToTopBindings()
834 ThrowError(importPath->Start(), "Cannot find imported element '" + imported.Mutf8() + "'"); in AddImportSpecifiersToTopBindings()
839 …auto varInGlobalClassScope = Program()->GlobalClassScope()->FindLocal(localName, ResolveBindingOpt… in AddImportSpecifiersToTopBindings()
840 auto previouslyImportedVariable = TopScope()->FindLocal(localName, ResolveBindingOptions::ALL); in AddImportSpecifiersToTopBindings()
846 if (var->Declaration()->Node()->IsAnnotationDeclaration() && in AddImportSpecifiersToTopBindings()
847 var->Declaration()->Node()->AsAnnotationDeclaration()->GetBaseName()->Name() != localName) { in AddImportSpecifiersToTopBindings()
848 …ThrowError(importPath->Start(), "Can not rename annotation '" + var->Declaration()->Name().Mutf8()… in AddImportSpecifiersToTopBindings()
854 if (nameToSearchFor == imported && var->Declaration()->Node()->HasExportAlias()) { in AddImportSpecifiersToTopBindings()
855 ThrowError(specifier->Start(), "Cannot find imported element '" + imported.Mutf8() + "'"); in AddImportSpecifiersToTopBindings()
865 …auto predicateFunc = [](const auto &item) { return item.second->Declaration()->Node()->IsDefaultEx… in FindStaticBinding()
866 …const auto &staticMethodBindings = recordRes.front()->GlobalClassScope()->StaticMethodScope()->Bin… in FindStaticBinding()
869 …const auto &staticFieldBindings = recordRes.front()->GlobalClassScope()->StaticFieldScope()->Bindi… in FindStaticBinding()
872 ThrowError(importPath->Start(), "Cannot find default imported element in the target"); in FindStaticBinding()
875 return result->second; in FindStaticBinding()
882 if (sourceName.Compare(globalRecordTable_.Program()->AbsoluteName()) == 0) { in GetExternalProgram()
883 ArenaVector<parser::Program *> mainModule(Allocator()->Adapter()); in GetExternalProgram()
892 ThrowError(importPath->Start(), in GetExternalProgram()
893 … "Cannot find index.[sts|ts] or package module in folder: " + importPath->Str().Mutf8()); in GetExternalProgram()
896 ThrowError(importPath->Start(), "Cannot find import: " + importPath->Str().Mutf8()); in GetExternalProgram()
908 if (import->IsPureDynamic()) { in AddSpecifiersToTopBindings()
913 const util::StringView sourceName = import->ResolvedSource()->Str(); in AddSpecifiersToTopBindings()
917 const auto *const importGlobalScope = importProgram->GlobalScope(); in AddSpecifiersToTopBindings()
918 const auto &globalBindings = importGlobalScope->Bindings(); in AddSpecifiersToTopBindings()
926 ASSERT(specifier->IsImportDefaultSpecifier()); in AddSpecifiersToTopBindings()
927 …auto predicateFunc = [](const auto &item) { return item.second->Declaration()->Node()->IsDefaultEx… in AddSpecifiersToTopBindings()
932 specifier->AsImportDefaultSpecifier()->Local()->SetVariable(var); in AddSpecifiersToTopBindings()
933 …InsertForeignBinding(specifier, import, specifier->AsImportDefaultSpecifier()->Local()->Name(), va… in AddSpecifiersToTopBindings()
937 specifier->AsImportDefaultSpecifier()->Local()->SetVariable(item->second); in AddSpecifiersToTopBindings()
938 …InsertForeignBinding(specifier, import, specifier->AsImportDefaultSpecifier()->Local()->Name(), it… in AddSpecifiersToTopBindings()
943 switch (childNode->Type()) { in HandleCustomNodes()
945 return BuildETSTypeReference(childNode->AsETSTypeReference()); in HandleCustomNodes()
948 return BuildInterfaceDeclaration(childNode->AsTSInterfaceDeclaration()); in HandleCustomNodes()
951 return ResolveEnumDeclaration(childNode->AsTSEnumDeclaration()); in HandleCustomNodes()
957 return BuildImportDeclaration(childNode->AsETSImportDeclaration()); in HandleCustomNodes()
960 return BuildMemberExpression(childNode->AsMemberExpression()); in HandleCustomNodes()
963 return BuildMethodDefinition(childNode->AsMethodDefinition()); in HandleCustomNodes()
966 return BuildETSNewClassInstanceExpression(childNode->AsETSNewClassInstanceExpression()); in HandleCustomNodes()
972 return BuildObjectExpression(childNode->AsObjectExpression()); in HandleCustomNodes()
975 return BuildAnnotationUsage(childNode->AsAnnotationUsage()); in HandleCustomNodes()
978 BuildAnnotationDeclaration(childNode->AsAnnotationDeclaration()); in HandleCustomNodes()
989 const bool isExternal = recordTable_->IsExternal(); in BuildInternalName()
991 scriptFunc->AddFlag(ir::ScriptFunctionFlags::EXTERNAL); in BuildInternalName()
994 if (scriptFunc->IsArrow()) { in BuildInternalName()
998 auto *funcScope = scriptFunc->Scope(); in BuildInternalName()
999 funcScope->BindName(recordTable_->RecordName()); in BuildInternalName()
1001 bool compilable = scriptFunc->Body() != nullptr && !isExternal; in BuildInternalName()
1003 recordTable_->Signatures().push_back(funcScope); in BuildInternalName()
1012 const bool isExternal = recordTable->IsExternal(); in BuildInternalNameWithCustomRecordTable()
1014 scriptFunc->AddFlag(ir::ScriptFunctionFlags::EXTERNAL); in BuildInternalNameWithCustomRecordTable()
1017 if (scriptFunc->IsArrow()) { in BuildInternalNameWithCustomRecordTable()
1021 auto *const funcScope = scriptFunc->Scope(); in BuildInternalNameWithCustomRecordTable()
1022 funcScope->BindName(recordTable->RecordName()); in BuildInternalNameWithCustomRecordTable()
1024 const bool compilable = scriptFunc->Body() != nullptr && !isExternal; in BuildInternalNameWithCustomRecordTable()
1026 recordTable->Signatures().push_back(funcScope); in BuildInternalNameWithCustomRecordTable()
1034 if (func->IsArrow() || func->IsAsyncFunc()) { in AddCompilableFunction()
1038 AddCompilableFunctionScope(func->Scope()); in AddCompilableFunction()
1043 auto *funcScope = func->Scope(); in BuildFunctionName()
1046 ASSERT(func->IsArrow() || !funcScope->Name().Empty()); in BuildFunctionName()
1047 ss << (func->IsExternalOverload() ? funcScope->InternalName() : funcScope->Name()) in BuildFunctionName()
1050 const auto *signature = func->Signature(); in BuildFunctionName()
1052 if (func->IsStaticBlock()) { in BuildFunctionName()
1054 } else if (func->IsConstructor()) { in BuildFunctionName()
1057 if (func->IsGetter()) { in BuildFunctionName()
1059 } else if (func->IsSetter()) { in BuildFunctionName()
1065 signature->ToAssemblerType(ss); in BuildFunctionName()
1068 funcScope->BindInternalName(internalName.View()); in BuildFunctionName()
1073 thisParam_ = Allocator()->New<ir::Identifier>("this", Allocator()); in InitImplicitThisParam()
1078 for (auto &[_, extPrograms] : Program()->ExternalSources()) { in BuildProgram()
1091 auto &stmts = Program()->Ast()->Statements(); in BuildProgram()
1093 return stmt->IsClassDeclaration() && in BuildProgram()
1094 … stmt->AsClassDeclaration()->Definition()->Ident()->Name().Is(compiler::Signatures::ETS_GLOBAL); in BuildProgram()
1098 … return stmt->IsETSImportDeclaration() || stmt->IsETSPackageDeclaration(); in BuildProgram()
1116 …auto flags = Program()->VarBinder()->IsGenStdLib() ? RecordTableFlags::NONE : RecordTableFlags::EX… in BuildExternalProgram()
1117 auto *extRecordTable = Allocator()->New<RecordTable>(Allocator(), extProgram, flags); in BuildExternalProgram()
1120 ResetTopScope(extProgram->GlobalScope()); in BuildExternalProgram()
1133 BoundContext boundCtx(recordTable_, classInstance->ClassDefinition()); in BuildETSNewClassInstanceExpression()
1134 ResolveReference(classInstance->GetTypeRef()); in BuildETSNewClassInstanceExpression()
1136 for (auto *arg : classInstance->GetArguments()) { in BuildETSNewClassInstanceExpression()
1140 if (classInstance->ClassDefinition() == nullptr) { in BuildETSNewClassInstanceExpression()
1144 ResolveReference(classInstance->ClassDefinition()); in BuildETSNewClassInstanceExpression()
1149 if (decl->Source()->Str() == Program()->SourceFile().GetAbsolutePath()) { in BuildImportDeclaration()
1153 const auto &specifiers = decl->Specifiers(); in BuildImportDeclaration()
1156 AddSpecifiersToTopBindings(specifier, decl, decl->Source()); in BuildImportDeclaration()
1164 const auto sourceName = import->ResolvedSource()->Str(); in ValidateImportSpecifier()
1165 const auto &record = GetExternalProgram(sourceName, import->Source()); in ValidateImportSpecifier()
1167 const auto *const importGlobalScope = importProgram->GlobalScope(); in ValidateImportSpecifier()
1168 const auto &globalBindings = importGlobalScope->Bindings(); in ValidateImportSpecifier()
1170 auto imported = specifier->Imported()->Name(); in ValidateImportSpecifier()
1171 for (const auto *const item : import->Specifiers()) { in ValidateImportSpecifier()
1174 …if (item->IsImportSpecifier() && item->AsImportSpecifier()->Local()->Name().Is(imported.Mutf8()) && in ValidateImportSpecifier()
1175 …!item->AsImportSpecifier()->Local()->Name().Is(item->AsImportSpecifier()->Imported()->Name().Mutf8… in ValidateImportSpecifier()
1176 imported = item->AsImportSpecifier()->Imported()->Name(); in ValidateImportSpecifier()
1187 FindImportDeclInReExports(import, viewedReExport, imported, import->Source()); in ValidateImportSpecifier()
1210 const auto program = Program()->SourceFile().GetAbsolutePath(); in ValidateReexportDeclaration()
1211 const auto reexportSource = os::GetAbsolutePath(decl->GetProgramPath().Utf8()); in ValidateReexportDeclaration()
1216 const auto *const import = decl->GetETSImportDeclarations(); in ValidateReexportDeclaration()
1217 const auto &specifiers = import->Specifiers(); in ValidateReexportDeclaration()
1220 if (specifier->IsImportSpecifier()) { in ValidateReexportDeclaration()
1221 auto importSpecifier = specifier->AsImportSpecifier(); in ValidateReexportDeclaration()
1222 const auto reexported = importSpecifier->Imported()->Name(); in ValidateReexportDeclaration()
1226 ThrowError(import->Start(), "Incorrect export \"" + reexported.Mutf8() + "\""); in ValidateReexportDeclaration()
1229 importSpecifier->Imported()->SetVariable(var); in ValidateReexportDeclaration()
1230 importSpecifier->Local()->SetVariable(var); in ValidateReexportDeclaration()
1234 ThrowError(import->Start(), "Ambiguous export \"" + reexported.Mutf8() + "\""); in ValidateReexportDeclaration()
1238 if (specifier->IsImportNamespaceSpecifier()) { in ValidateReexportDeclaration()
1251 if (var->Declaration()->Node()->IsDefaultExported()) { in ImportGlobalPropertiesForNotDefaultedExports()
1255 auto variable = Program()->GlobalClassScope()->FindLocal(name, ResolveBindingOptions::ALL); in ImportGlobalPropertiesForNotDefaultedExports()
1259 if (variable->Declaration()->IsFunctionDecl() && var->Declaration()->IsFunctionDecl()) { in ImportGlobalPropertiesForNotDefaultedExports()
1264 …ThrowError(classElement->Id()->Start(), RedeclarationErrorMessageAssembler(var, variable, name.Utf… in ImportGlobalPropertiesForNotDefaultedExports()
1267 const auto insRes = TopScope()->InsertForeignBinding(name, var); in ImportGlobalPropertiesForNotDefaultedExports()
1268 …if (!(!insRes.second && insRes.first != TopScope()->Bindings().end()) || !(insRes.first->second !=… in ImportGlobalPropertiesForNotDefaultedExports()
1271 …if (insRes.first->second->Declaration()->IsFunctionDecl() && var->Declaration()->IsFunctionDecl())… in ImportGlobalPropertiesForNotDefaultedExports()
1272 AddOverloadFlag(Allocator(), isStdLib, var, insRes.first->second); in ImportGlobalPropertiesForNotDefaultedExports()
1276 …ThrowError(classElement->Id()->Start(), RedeclarationErrorMessageAssembler(var, insRes.first->seco… in ImportGlobalPropertiesForNotDefaultedExports()
1281 const auto scopeCtx = LexicalScope<ClassScope>::Enter(this, classDef->Scope()->AsClassScope()); in ImportGlobalProperties()
1283 for (const auto *const prop : classDef->Body()) { in ImportGlobalProperties()
1284 const auto *const classElement = prop->AsClassElement(); in ImportGlobalProperties()
1286 if (classElement->IsClassStaticBlock()) { in ImportGlobalProperties()
1290 ASSERT(classElement->IsStatic()); in ImportGlobalProperties()
1291 const auto &name = classElement->Id()->Name(); in ImportGlobalProperties()
1292 auto *const var = scopeCtx.GetScope()->FindLocal(name, ResolveBindingOptions::ALL); in ImportGlobalProperties()
1308 return &it->second; in DynamicImportDataForVar()
1313 for (const auto &extRecords : globalRecordTable_.Program()->ExternalSources()) { in GetProgramList()
1315 if (program->AbsoluteName() == path) { in GetProgramList()
1320 if (program->IsPackageModule() && program->SourceFileFolder() == path) { in GetProgramList()
1326 bool globalIsPackage = globalRecordTable_.Program()->IsPackageModule(); in GetProgramList()
1327 if (globalIsPackage && path.Compare(globalRecordTable_.Program()->SourceFileFolder()) == 0) { in GetProgramList()
1328 … return ArenaVector<parser::Program *>({GetContext()->parserProgram}, Allocator()->Adapter()); in GetProgramList()
1331 return ArenaVector<parser::Program *>(Allocator()->Adapter()); in GetProgramList()
1341 return data->specifier->IsImportSpecifier(); in IsDynamicModuleVariable()
1351 return data->specifier->IsImportNamespaceSpecifier(); in IsDynamicNamespaceVariable()