• Home
  • Raw
  • Download

Lines Matching full:symbol

17 #include "flang/Semantics/symbol.h"
46 const Scope &GetTopLevelUnitContaining(const Symbol &symbol) { in GetTopLevelUnitContaining() argument
47 return GetTopLevelUnitContaining(symbol.owner()); in GetTopLevelUnitContaining()
70 const Scope &GetProgramUnitContaining(const Symbol &symbol) { in GetProgramUnitContaining() argument
71 return GetProgramUnitContaining(symbol.owner()); in GetProgramUnitContaining()
155 bool IsGenericDefinedOp(const Symbol &symbol) { in IsGenericDefinedOp() argument
156 const Symbol &ultimate{symbol.GetUltimate()}; in IsGenericDefinedOp()
179 bool IsCommonBlockContaining(const Symbol &block, const Symbol &object) { in IsCommonBlockContaining()
185 bool IsUseAssociated(const Symbol &symbol, const Scope &scope) { in IsUseAssociated() argument
186 const Scope &owner{GetProgramUnitContaining(symbol.GetUltimate().owner())}; in IsUseAssociated()
198 bool DoesScopeContain(const Scope *maybeAncestor, const Symbol &symbol) { in DoesScopeContain() argument
199 return DoesScopeContain(maybeAncestor, symbol.owner()); in DoesScopeContain()
202 static const Symbol &FollowHostAssoc(const Symbol &symbol) { in FollowHostAssoc() argument
203 for (const Symbol *s{&symbol};;) { in FollowHostAssoc()
208 s = &details->symbol(); in FollowHostAssoc()
212 bool IsHostAssociated(const Symbol &symbol, const Scope &scope) { in IsHostAssociated() argument
215 &GetProgramUnitContaining(FollowHostAssoc(symbol)), subprogram); in IsHostAssociated()
218 bool IsInStmtFunction(const Symbol &symbol) { in IsInStmtFunction() argument
219 if (const Symbol * function{symbol.owner().symbol()}) { in IsInStmtFunction()
225 bool IsStmtFunctionDummy(const Symbol &symbol) { in IsStmtFunctionDummy() argument
226 return IsDummy(symbol) && IsInStmtFunction(symbol); in IsStmtFunctionDummy()
229 bool IsStmtFunctionResult(const Symbol &symbol) { in IsStmtFunctionResult() argument
230 return IsFunctionResult(symbol) && IsInStmtFunction(symbol); in IsStmtFunctionResult()
233 bool IsPointerDummy(const Symbol &symbol) { in IsPointerDummy() argument
234 return IsPointer(symbol) && IsDummy(symbol); in IsPointerDummy()
238 bool IsProcName(const Symbol &symbol) { in IsProcName() argument
239 return symbol.GetUltimate().has<ProcEntityDetails>(); in IsProcName()
242 bool IsBindCProcedure(const Symbol &symbol) { in IsBindCProcedure() argument
243 if (const auto *procDetails{symbol.detailsIf<ProcEntityDetails>()}) { in IsBindCProcedure()
244 if (const Symbol * procInterface{procDetails->interface().symbol()}) { in IsBindCProcedure()
249 return symbol.attrs().test(Attr::BIND_C) && IsProcedure(symbol); in IsBindCProcedure()
253 if (const Symbol * symbol{scope.GetSymbol()}) { in IsBindCProcedure() local
254 return IsBindCProcedure(*symbol); in IsBindCProcedure()
260 static const Symbol *FindPointerComponent( in FindPointerComponent()
271 const Symbol &symbol{*pair.second}; in FindPointerComponent() local
272 if (IsPointer(symbol)) { in FindPointerComponent()
273 return &symbol; in FindPointerComponent()
277 const Symbol &symbol{*pair.second}; in FindPointerComponent() local
278 if (const auto *details{symbol.detailsIf<ObjectEntityDetails>()}) { in FindPointerComponent()
282 if (const Symbol * in FindPointerComponent()
294 const Symbol *FindPointerComponent(const Scope &scope) { in FindPointerComponent()
299 const Symbol *FindPointerComponent(const DerivedTypeSpec &derived) { in FindPointerComponent()
307 const Symbol *FindPointerComponent(const DeclTypeSpec &type) { in FindPointerComponent()
315 const Symbol *FindPointerComponent(const DeclTypeSpec *type) { in FindPointerComponent()
319 const Symbol *FindPointerComponent(const Symbol &symbol) { in FindPointerComponent() argument
320 return IsPointer(symbol) ? &symbol : FindPointerComponent(symbol.GetType()); in FindPointerComponent()
324 const Symbol *FindExternallyVisibleObject( in FindExternallyVisibleObject()
325 const Symbol &object, const Scope &scope) { in FindExternallyVisibleObject()
332 } else if (const Symbol * block{FindCommonBlockContaining(object)}) { in FindExternallyVisibleObject()
388 const Symbol *FindInterface(const Symbol &symbol) { in FindInterface() argument
392 return details.interface().symbol(); in FindInterface()
394 [](const ProcBindingDetails &details) { return &details.symbol(); }, in FindInterface()
395 [](const auto &) -> const Symbol * { return nullptr; }, in FindInterface()
397 symbol.details()); in FindInterface()
400 const Symbol *FindSubprogram(const Symbol &symbol) { in FindSubprogram() argument
403 [&](const ProcEntityDetails &details) -> const Symbol * { in FindSubprogram()
404 if (const Symbol * interface{details.interface().symbol()}) { in FindSubprogram()
407 return &symbol; in FindSubprogram()
411 return FindSubprogram(details.symbol()); in FindSubprogram()
413 [&](const SubprogramDetails &) { return &symbol; }, in FindSubprogram()
415 return FindSubprogram(details.symbol()); in FindSubprogram()
418 return FindSubprogram(details.symbol()); in FindSubprogram()
420 [](const auto &) -> const Symbol * { return nullptr; }, in FindSubprogram()
422 symbol.details()); in FindSubprogram()
425 const Symbol *FindFunctionResult(const Symbol &symbol) { in FindFunctionResult() argument
426 if (const Symbol * subp{FindSubprogram(symbol)}) { in FindFunctionResult()
436 const Symbol *FindOverriddenBinding(const Symbol &symbol) { in FindOverriddenBinding() argument
437 if (symbol.has<ProcBindingDetails>()) { in FindOverriddenBinding()
438 if (const DeclTypeSpec * parentType{FindParentTypeSpec(symbol.owner())}) { in FindOverriddenBinding()
441 return parentScope->FindComponent(symbol.name()); in FindOverriddenBinding()
463 if (const auto *symbol{scope.symbol()}) { in FindParentTypeSpec() local
464 return FindParentTypeSpec(*symbol); in FindParentTypeSpec()
470 const DeclTypeSpec *FindParentTypeSpec(const Symbol &symbol) { in FindParentTypeSpec() argument
471 if (const Scope * scope{symbol.scope()}) { in FindParentTypeSpec()
472 if (const auto *details{symbol.detailsIf<DerivedTypeDetails>()}) { in FindParentTypeSpec()
473 if (const Symbol * parent{details->GetParentComponent(*scope)}) { in FindParentTypeSpec()
491 const auto &symbol{derived->typeSymbol()}; in IsBuiltinDerivedType() local
492 return symbol.owner().IsModule() && in IsBuiltinDerivedType()
493 (symbol.owner().GetName().value() == "__fortran_builtins" || in IsBuiltinDerivedType()
494 symbol.owner().GetName().value() == "__fortran_type_info") && in IsBuiltinDerivedType()
495 symbol.name() == "__builtin_"s + name; in IsBuiltinDerivedType()
513 bool IsOrContainsEventOrLockComponent(const Symbol &symbol) { in IsOrContainsEventOrLockComponent() argument
514 if (const Symbol * root{GetAssociationRoot(symbol)}) { in IsOrContainsEventOrLockComponent()
527 // Check this symbol suitable as a type-bound procedure - C769
528 bool CanBeTypeBoundProc(const Symbol *symbol) { in CanBeTypeBoundProc() argument
529 if (!symbol || IsDummy(*symbol) || IsProcedurePointer(*symbol)) { in CanBeTypeBoundProc()
531 } else if (symbol->has<SubprogramNameDetails>()) { in CanBeTypeBoundProc()
532 return symbol->owner().kind() == Scope::Kind::Module; in CanBeTypeBoundProc()
533 } else if (auto *details{symbol->detailsIf<SubprogramDetails>()}) { in CanBeTypeBoundProc()
534 return symbol->owner().kind() == Scope::Kind::Module || in CanBeTypeBoundProc()
536 } else if (const auto *proc{symbol->detailsIf<ProcEntityDetails>()}) { in CanBeTypeBoundProc()
537 return !symbol->attrs().test(Attr::INTRINSIC) && in CanBeTypeBoundProc()
544 bool IsInitialized(const Symbol &symbol, bool ignoreDATAstatements, in IsInitialized() argument
545 const Symbol *derivedTypeSymbol) { in IsInitialized()
546 if (!ignoreDATAstatements && symbol.test(Symbol::Flag::InDataStmt)) { in IsInitialized()
548 } else if (IsNamedConstant(symbol)) { in IsInitialized()
550 } else if (const auto *object{symbol.detailsIf<ObjectEntityDetails>()}) { in IsInitialized()
553 } else if (object->isDummy() || IsFunctionResult(symbol)) { in IsInitialized()
555 } else if (IsAllocatable(symbol)) { in IsInitialized()
557 } else if (!IsPointer(symbol) && object->type()) { in IsInitialized()
567 } else if (const auto *proc{symbol.detailsIf<ProcEntityDetails>()}) { in IsInitialized()
573 bool HasIntrinsicTypeName(const Symbol &symbol) { in HasIntrinsicTypeName() argument
574 std::string name{symbol.name().ToString()}; in HasIntrinsicTypeName()
589 bool IsSeparateModuleProcedureInterface(const Symbol *symbol) { in IsSeparateModuleProcedureInterface() argument
590 if (symbol && symbol->attrs().test(Attr::MODULE)) { in IsSeparateModuleProcedureInterface()
591 if (auto *details{symbol->detailsIf<SubprogramDetails>()}) { in IsSeparateModuleProcedureInterface()
599 bool IsAutomatic(const Symbol &symbol) { in IsAutomatic() argument
600 if (const auto *object{symbol.detailsIf<ObjectEntityDetails>()}) { in IsAutomatic()
601 if (!object->isDummy() && !IsAllocatable(symbol) && !IsPointer(symbol)) { in IsAutomatic()
602 if (const DeclTypeSpec * type{symbol.GetType()}) { in IsAutomatic()
641 bool IsFinalizable(const Symbol &symbol) { in IsFinalizable() argument
642 if (IsPointer(symbol)) { in IsFinalizable()
645 if (const auto *object{symbol.detailsIf<ObjectEntityDetails>()}) { in IsFinalizable()
646 if (object->isDummy() && !IsIntentOut(symbol)) { in IsFinalizable()
662 [](const Symbol &component) { return IsFinalizable(component); })}; in IsFinalizable()
676 bool IsCoarray(const Symbol &symbol) { return symbol.Corank() > 0; } in IsCoarray() argument
678 bool IsAutomaticObject(const Symbol &symbol) { in IsAutomaticObject() argument
679 if (IsDummy(symbol) || IsPointer(symbol) || IsAllocatable(symbol)) { in IsAutomaticObject()
682 if (const DeclTypeSpec * type{symbol.GetType()}) { in IsAutomaticObject()
694 if (symbol.IsObjectArray()) { in IsAutomaticObject()
695 for (const ShapeSpec &spec : symbol.get<ObjectEntityDetails>().shape()) { in IsAutomaticObject()
707 bool IsAssumedLengthCharacter(const Symbol &symbol) { in IsAssumedLengthCharacter() argument
708 if (const DeclTypeSpec * type{symbol.GetType()}) { in IsAssumedLengthCharacter()
716 bool IsInBlankCommon(const Symbol &symbol) { in IsInBlankCommon() argument
717 const Symbol *block{FindCommonBlockContaining(symbol)}; in IsInBlankCommon()
723 bool IsExternal(const Symbol &symbol) { in IsExternal() argument
724 return ClassifyProcedure(symbol) == ProcedureDefinitionClass::External; in IsExternal()
727 bool IsModuleProcedure(const Symbol &symbol) { in IsModuleProcedure() argument
728 return ClassifyProcedure(symbol) == ProcedureDefinitionClass::Module; in IsModuleProcedure()
730 const Symbol *IsExternalInPureContext( in IsExternalInPureContext()
731 const Symbol &symbol, const Scope &scope) { in IsExternalInPureContext() argument
733 if (const Symbol * root{GetAssociationRoot(symbol)}) { in IsExternalInPureContext()
734 if (const Symbol * in IsExternalInPureContext()
747 potentials.begin(), potentials.end(), [](const Symbol &component) { in FindPolymorphicPotentialComponent()
756 bool IsOrContainsPolymorphicComponent(const Symbol &symbol) { in IsOrContainsPolymorphicComponent() argument
757 if (const Symbol * root{GetAssociationRoot(symbol)}) { in IsOrContainsPolymorphicComponent()
772 bool InProtectedContext(const Symbol &symbol, const Scope &currentScope) { in InProtectedContext() argument
773 return IsProtected(symbol) && !IsHostAssociated(symbol, currentScope); in InProtectedContext()
778 const Symbol &symbol, const Scope &scope) { in WhyNotModifiable() argument
779 const Symbol *root{GetAssociationRoot(symbol)}; in WhyNotModifiable()
806 const Symbol &symbol{dataRef->GetFirstSymbol()}; in WhyNotModifiable() local
807 if (auto maybeWhy{WhyNotModifiable(symbol, scope)}) { in WhyNotModifiable()
808 return parser::Message{symbol.name(), in WhyNotModifiable()
809 parser::MessageFormattedText{std::move(*maybeWhy), symbol.name()}}; in WhyNotModifiable()
879 return name.symbol && IsCoarray(*name.symbol); in IsCoarrayObject()
942 for (const Symbol &symbol : evaluate::CollectSymbols(*expr)) { in HasCoarray() local
943 if (const Symbol * root{GetAssociationRoot(symbol)}) { in HasCoarray()
953 bool IsPolymorphic(const Symbol &symbol) { in IsPolymorphic() argument
954 if (const DeclTypeSpec * type{symbol.GetType()}) { in IsPolymorphic()
960 bool IsPolymorphicAllocatable(const Symbol &symbol) { in IsPolymorphicAllocatable() argument
961 return IsAllocatable(symbol) && IsPolymorphic(symbol); in IsPolymorphicAllocatable()
965 const Scope &scope, const Symbol &symbol) { in CheckAccessibleComponent() argument
966 CHECK(symbol.owner().IsDerivedType()); // symbol must be a component in CheckAccessibleComponent()
967 if (symbol.attrs().test(Attr::PRIVATE)) { in CheckAccessibleComponent()
968 if (const Scope * moduleScope{FindModuleContaining(symbol.owner())}) { in CheckAccessibleComponent()
972 symbol.name(), moduleScope->GetName().value()}; in CheckAccessibleComponent()
979 std::list<SourceName> OrderParameterNames(const Symbol &typeSymbol) { in OrderParameterNames()
989 SymbolVector OrderParameterDeclarations(const Symbol &typeSymbol) { in OrderParameterDeclarations()
1014 const Symbol *FindSeparateModuleSubprogramInterface(const Symbol *proc) { in FindSeparateModuleSubprogramInterface()
1016 if (const Symbol * submodule{proc->owner().symbol()}) { in FindSeparateModuleSubprogramInterface()
1019 const Symbol *iface{ancestor->FindSymbol(proc->name())}; in FindSeparateModuleSubprogramInterface()
1030 ProcedureDefinitionClass ClassifyProcedure(const Symbol &symbol) { // 15.2.2 in ClassifyProcedure() argument
1031 const Symbol &ultimate{symbol.GetUltimate()}; in ClassifyProcedure()
1042 } else if (const Symbol * subp{FindSubprogram(symbol)}) { in ClassifyProcedure()
1078 const Symbol &component) const { in PlanComponentTraversal()
1085 traverse = component.test(Symbol::Flag::ParentComp); in PlanComponentTraversal()
1096 const Symbol &newTypeSymbol{derived->typeSymbol()}; in PlanComponentTraversal()
1115 static bool StopAtComponentPre(const Symbol &component) { in StopAtComponentPre()
1119 return !component.test(Symbol::Flag::ParentComp); in StopAtComponentPre()
1133 static bool StopAtComponentPost(const Symbol &component) { in StopAtComponentPost()
1135 component.test(Symbol::Flag::ParentComp); in StopAtComponentPost()
1167 const Symbol &component{*scopeIter->second}; in Increment()
1214 potentials.begin(), potentials.end(), [](const Symbol &component) { in FindEventOrLockPotentialComponent()
1240 return std::find_if(ultimates.begin(), ultimates.end(), [](const Symbol &x) { in FindPolymorphicAllocatableNonCoarrayUltimateComponent()
1245 const Symbol *FindUltimateComponent(const DerivedTypeSpec &derived, in FindUltimateComponent()
1246 const std::function<bool(const Symbol &)> &predicate) { in FindUltimateComponent()
1249 [&predicate](const Symbol &component) -> bool { in FindUltimateComponent()
1257 const Symbol *FindUltimateComponent(const Symbol &symbol, in FindUltimateComponent() argument
1258 const std::function<bool(const Symbol &)> &predicate) { in FindUltimateComponent()
1259 if (predicate(symbol)) { in FindUltimateComponent()
1260 return &symbol; in FindUltimateComponent()
1261 } else if (const auto *object{symbol.detailsIf<ObjectEntityDetails>()}) { in FindUltimateComponent()
1271 const Symbol *FindImmediateComponent(const DerivedTypeSpec &type, in FindImmediateComponent()
1272 const std::function<bool(const Symbol &)> &predicate) { in FindImmediateComponent()
1274 const Symbol *parent{nullptr}; in FindImmediateComponent()
1276 const Symbol *symbol{&*pair.second}; in FindImmediateComponent() local
1277 if (predicate(*symbol)) { in FindImmediateComponent()
1278 return symbol; in FindImmediateComponent()
1280 if (symbol->test(Symbol::Flag::ParentComp)) { in FindImmediateComponent()
1281 parent = symbol; in FindImmediateComponent()
1297 bool IsFunctionResultWithSameNameAsFunction(const Symbol &symbol) { in IsFunctionResultWithSameNameAsFunction() argument
1298 if (IsFunctionResult(symbol)) { in IsFunctionResultWithSameNameAsFunction()
1299 if (const Symbol * function{symbol.owner().symbol()}) { in IsFunctionResultWithSameNameAsFunction()
1300 return symbol.name() == function->name(); in IsFunctionResultWithSameNameAsFunction()
1365 bool HasAlternateReturns(const Symbol &subprogram) { in HasAlternateReturns()
1374 bool InCommonBlock(const Symbol &symbol) { in InCommonBlock() argument
1375 const auto *details{symbol.detailsIf<ObjectEntityDetails>()}; in InCommonBlock()