Lines Matching defs:symbol
38 std::optional<Expr<SomeType>> AsGenericExpr(const Symbol &symbol) {
39 return AsGenericExpr(DataRef{symbol});
80 auto IsVariableHelper::operator()(const Symbol &symbol) const -> Result {
82 const Symbol &ultimate{symbol.GetUltimate()};
101 if (const Symbol * symbol{x.GetSymbol()}) {
102 const Symbol *result{FindFunctionResult(*symbol)};
875 const Symbol &symbol, Expr<SomeType> &&x) {
876 if (auto symType{DynamicType::From(symbol)}) {
899 const Symbol &symbol{semantics::ResolveAssociations(original)};
900 const auto *object{symbol.detailsIf<semantics::ObjectEntityDetails>()};
972 } else if (const Symbol * symbol{UnwrapWholeSymbolOrComponentDataRef(expr)}) {
973 return IsPointer(symbol->GetUltimate());
1086 semantics::UnorderedSymbolSet operator()(const Symbol &symbol) const {
1087 return {symbol};
1105 semantics::UnorderedSymbolSet operator()(const Symbol &symbol) const {
1106 return {symbol};
1168 parser::Message &message, const Symbol &symbol) {
1169 const Symbol *unhosted{&symbol};
1172 unhosted = &assoc->symbol();
1176 if (binding->symbol().name() != symbol.name()) {
1177 message.Attach(binding->symbol().name(),
1178 "Procedure '%s' of type '%s' is bound to '%s'"_en_US, symbol.name(),
1179 symbol.owner().GetName().value(), binding->symbol().name());
1182 unhosted = &binding->symbol();
1184 if (const auto *use{symbol.detailsIf<semantics::UseDetails>()}) {
1186 "'%s' is USE-associated with '%s' in module '%s'"_en_US, symbol.name(),
1196 parser::Message *message, const Symbol &symbol) {
1197 return message ? AttachDeclaration(*message, symbol) : nullptr;
1299 static const Symbol *GetLastPointerSymbol(const Symbol &symbol) {
1300 return IsPointer(GetAssociationRoot(symbol)) ? &symbol : nullptr;
1302 static const Symbol *GetLastPointerSymbol(const SymbolRef &symbol) {
1303 return GetLastPointerSymbol(*symbol);
1437 // Extracts a whole symbol being used as a bound of a dummy argument,
1499 return true; // USE/host associated same symbol
1514 // Neither expression is an integer constant or a whole symbol.
1544 const Symbol &symbol{original.GetUltimate()};
1545 if (const auto *details{symbol.detailsIf<AssocEntityDetails>()}) {
1552 return symbol;
1571 const Symbol &symbol{ResolveAssociations(original)};
1572 if (const auto *details{symbol.detailsIf<AssocEntityDetails>()}) {
1577 return symbol;
1580 const Symbol *GetMainEntry(const Symbol *symbol) {
1581 if (symbol) {
1582 if (const auto *subpDetails{symbol->detailsIf<SubprogramDetails>()}) {
1584 if (const Symbol * main{scope->symbol()}) {
1590 return symbol;
1603 const Symbol &symbol{DEREF(GetMainEntry(&original.GetUltimate()))};
1604 if (set.find(symbol) != set.end()) {
1607 set.emplace(symbol);
1608 if (const auto *procDetails{symbol.detailsIf<ProcEntityDetails>()}) {
1613 } else if (const auto *details{symbol.detailsIf<ProcBindingDetails>()}) {
1614 return IsPureProcedureImpl(details->symbol(), set);
1615 } else if (!IsProcedure(symbol)) {
1618 if (IsStmtFunction(symbol)) {
1621 if (const auto &expr{symbol.get<SubprogramDetails>().stmtFunction()}) {
1623 if (&*ref == &symbol) {
1636 return symbol.attrs().test(Attr::PURE) ||
1637 (symbol.attrs().test(Attr::ELEMENTAL) &&
1638 !symbol.attrs().test(Attr::IMPURE));
1647 const Symbol *symbol{scope.GetSymbol()};
1648 return symbol && IsPureProcedure(*symbol);
1660 const Symbol &symbol{DEREF(GetMainEntry(&original.GetUltimate()))};
1661 if (IsProcedure(symbol)) {
1662 auto &foldingContext{symbol.owner().context().foldingContext()};
1665 symbol, foldingContext)};
1673 bool IsFunction(const Symbol &symbol) {
1674 const Symbol &ultimate{symbol.GetUltimate()};
1685 return IsFunction(x.symbol());
1693 const Symbol *symbol{scope.GetSymbol()};
1694 return symbol && IsFunction(*symbol);
1697 bool IsProcedure(const Symbol &symbol) {
1699 [&symbol](const SubprogramDetails &) {
1700 const Scope *scope{symbol.scope()};
1711 symbol.GetUltimate().details());
1715 const Symbol *symbol{scope.GetSymbol()};
1716 return symbol && IsProcedure(*symbol);
1720 const Symbol &symbol{GetAssociationRoot(original)};
1721 return IsPointer(symbol) && IsProcedure(symbol);
1724 bool IsProcedurePointer(const Symbol *symbol) {
1725 return symbol && IsProcedurePointer(*symbol);
1730 const Symbol &symbol{GetAssociationRoot(*original)};
1731 return IsPointer(symbol) && !IsProcedure(symbol);
1762 const Symbol &symbol{original.GetUltimate()};
1763 if (const auto *object{symbol.detailsIf<ObjectEntityDetails>()}) {
1764 if (!object->isDummy() && !IsAllocatable(symbol) && !IsPointer(symbol)) {
1765 if (const DeclTypeSpec * type{symbol.GetType()}) {
1805 const Symbol &symbol{GetAssociationRoot(original)};
1806 const Scope &scope{symbol.owner()};
1810 if (symbol.has<AssocEntityDetails>()) {
1814 } else if (symbol.attrs().test(Attr::SAVE)) {
1816 } else if (IsDummy(symbol) || IsFunctionResult(symbol) ||
1817 IsAutomatic(symbol) || IsNamedConstant(symbol)) {
1821 (symbol.attrs().test(Attr::TARGET) || evaluate::IsCoarray(symbol)) &&
1822 Fortran::evaluate::CanCUDASymbolHaveSaveAttr(symbol))) {
1831 symbol.size() > 32)) &&
1832 Fortran::evaluate::CanCUDASymbolHaveSaveAttr(symbol)) {
1842 !(scope.symbol() &&
1843 scope.symbol()->attrs().test(Attr::RECURSIVE))))) {
1847 } else if (symbol.test(Symbol::Flag::InDataStmt)) {
1849 } else if (const auto *object{symbol.detailsIf<ObjectEntityDetails>()};
1852 } else if (IsProcedurePointer(symbol) && symbol.has<ProcEntityDetails>() &&
1853 symbol.get<ProcEntityDetails>().init()) {
1857 } else if (const Symbol * block{FindCommonBlockContaining(symbol)};
1865 bool IsDummy(const Symbol &symbol) {
1872 ResolveAssociations(symbol).details());
1875 bool IsAssumedShape(const Symbol &symbol) {
1876 const Symbol &ultimate{ResolveAssociations(symbol)};
1882 bool IsDeferredShape(const Symbol &symbol) {
1883 const Symbol &ultimate{ResolveAssociations(symbol)};
1890 const Symbol &symbol{GetAssociationRoot(original)};
1898 symbol.details());
1901 bool IsKindTypeParameter(const Symbol &symbol) {
1902 const auto *param{symbol.GetUltimate().detailsIf<TypeParamDetails>()};
1906 bool IsLenTypeParameter(const Symbol &symbol) {
1907 const auto *param{symbol.GetUltimate().detailsIf<TypeParamDetails>()};
1926 const Symbol *xSym{x->symbol()};
1927 const Symbol *ySym{y->symbol()};
1943 const auto &symbol{derived->typeSymbol()};
1944 const Scope &scope{symbol.owner()};
1945 return symbol.name() == "__builtin_"s + name &&
1952 bool IsBuiltinCPtr(const Symbol &symbol) {
1953 if (const DeclTypeSpec *declType = symbol.GetType()) {
2016 return DEREF(details.symbol().owner().symbol());
2035 return FindFunctionResult(binding.symbol(), seen);
2041 const Symbol *FindFunctionResult(const Symbol &symbol) {
2043 return FindFunctionResult(symbol, seen);
2047 // them; they cannot be defined in symbol.h due to the dependence
2076 common::IgnoreTKRSet GetIgnoreTKR(const Symbol &symbol) {
2078 if (const auto *object{symbol.detailsIf<ObjectEntityDetails>()}) {
2080 if (const Symbol * ownerSymbol{symbol.owner().symbol()}) {
2091 std::optional<int> GetDummyArgumentNumber(const Symbol *symbol) {
2092 if (symbol) {
2093 if (IsDummy(*symbol)) {
2094 if (const Symbol * subpSym{symbol->owner().symbol()}) {
2098 if (dummy == symbol) {
2110 // Given a symbol that is a SubprogramNameDetails in a submodule, try to
2118 const Symbol *next{symInSubmodule->owner().symbol()};
2133 next = parent.symbol();