FLANG
Fortran::semantics::Scope Class Reference

Public Types

using size_type = mapType::size_type
using iterator = mapType::iterator
using const_iterator = mapType::const_iterator

Public Member Functions

 ENUM_CLASS (Kind, Global, IntrinsicModules, Module, MainProgram, Subprogram, BlockData, DerivedType, BlockConstruct, Forall, OtherConstruct, OpenACCConstruct, ImpliedDos, OtherClause) using ImportKind
 Scope (SemanticsContext &context)
 Scope (Scope &parent, Kind kind, Symbol *symbol, SemanticsContext &context)
 Scope (const Scope &)=delete
bool operator== (const Scope &that) const
bool operator!= (const Scope &that) const
Scope & parent ()
const Scope & parent () const
mapType & commonBlocks ()
const mapType & commonBlocks () const
mapType & commonBlockUses ()
const mapType & commonBlockUses () const
Kind kind () const
bool IsGlobal () const
bool IsIntrinsicModules () const
bool IsTopLevel () const
bool IsModule () const
bool IsSubmodule () const
bool IsDerivedType () const
bool IsStmtFunction () const
bool IsParameterizedDerivedType () const
bool IsParameterizedDerivedTypeInstantiation () const
bool IsDerivedTypeWithKindParameter () const
 Does this derived type have at least one kind parameter ?
bool IsDerivedTypeWithLengthParameter () const
 Does this derived type have at least one length parameter ?
Symbol * symbol ()
const Symbol * symbol () const
SemanticsContext & context () const
const Symbol * GetSymbol () const
const Scope * GetDerivedTypeParent () const
const Scope & GetDerivedTypeBase () const
std::optional< SourceName > GetName () const
bool Contains (const Scope &) const
Scope & MakeScope (Kind kind, Symbol *symbol=nullptr)
 Make a scope nested in this one.
SemanticsContext & GetMutableSemanticsContext () const
iterator begin ()
iterator end ()
const_iterator begin () const
const_iterator end () const
const_iterator cbegin () const
const_iterator cend () const
SymbolVector GetSymbols () const
MutableSymbolVector GetSymbols ()
iterator find (const SourceName &name)
const_iterator find (const SourceName &name) const
size_type erase (const SourceName &)
bool empty () const
Symbol * FindSymbol (const SourceName &) const
Symbol * FindComponent (SourceName) const
std::pair< iterator, bool > try_emplace (const SourceName &name, Attrs attrs=Attrs())
 Make a Symbol with unknown details.
template<typename D>
common::IfNoLvalue< std::pair< iterator, bool >, D > try_emplace (const SourceName &name, D &&details)
 Make a Symbol with provided details.
template<typename D>
common::IfNoLvalue< std::pair< iterator, bool >, D > try_emplace (const SourceName &name, Attrs attrs, D &&details)
 Make a Symbol with attrs and details.
Symbol * CopySymbol (const Symbol &)
std::list< EquivalenceSet > & equivalenceSets ()
const std::list< EquivalenceSet > & equivalenceSets () const
void add_equivalenceSet (EquivalenceSet &&)
const mapType & crayPointers () const
void add_crayPointer (const SourceName &, Symbol &)
Symbol & MakeCommonBlock (SourceName, SourceName location)
bool AddCommonBlockUse (const SourceName &name, Attrs attrs, Symbol &cbUltimate)
Symbol * FindCommonBlock (const SourceName &name) const
Symbol * FindCommonBlockUse (const SourceName &name) const
Symbol * FindCommonBlockInVisibleScopes (const SourceName &) const
template<typename D>
common::IfNoLvalue< Symbol &, D > MakeSymbol (const SourceName &name, Attrs attrs, D &&details)
 Make a Symbol but don't add it to the scope.
std::list< Scope > & children ()
const std::list< Scope > & children () const
Scope * FindSubmodule (const SourceName &) const
bool AddSubmodule (const SourceName &, Scope &)
const DeclTypeSpec * FindType (const DeclTypeSpec &) const
const DeclTypeSpec & MakeNumericType (TypeCategory, KindExpr &&kind)
const DeclTypeSpec & MakeLogicalType (KindExpr &&kind)
const DeclTypeSpec & MakeCharacterType (ParamValue &&length, KindExpr &&kind=KindExpr{0})
DeclTypeSpec & MakeDerivedType (DeclTypeSpec::Category, DerivedTypeSpec &&)
const DeclTypeSpec & MakeTypeStarType ()
const DeclTypeSpec & MakeClassStarType ()
const DeclTypeSpec * GetType (const SomeExpr &)
std::size_t size () const
void set_size (std::size_t size)
std::optional< std::size_t > alignment () const
void SetAlignment (std::size_t n)
ImportKind GetImportKind () const
std::set< SourceName > importNames () const
bool CanImport (const SourceName &) const
std::optional< parser::MessageFixedText > SetImportKind (ImportKind)
void add_importName (const SourceName &)
const DerivedTypeSpec * derivedTypeSpec () const
DerivedTypeSpec * derivedTypeSpec ()
void set_derivedTypeSpec (DerivedTypeSpec &spec)
parser::Message::Reference instantiationContext () const
void set_instantiationContext (parser::Message::Reference &&mref)
bool hasSAVE () const
void set_hasSAVE (bool yes=true)
const parser::CharBlock & sourceRange () const
void AddSourceRange (parser::CharBlock)
void AddOpenACCMappedSymbol (const Symbol &symbol)
bool IsOpenACCMappedSymbol (const Symbol &symbol) const
const DeclTypeSpec * FindInstantiatedDerivedType (const DerivedTypeSpec &, DeclTypeSpec::Category=DeclTypeSpec::TypeDerived) const
bool IsModuleFile () const
void InstantiateDerivedTypes ()
const Symbol * runtimeDerivedTypeDescription () const
void set_runtimeDerivedTypeDescription (const Symbol &symbol)

Friends

llvm::raw_ostream & operator<< (llvm::raw_ostream &os, const Scope &scope)

The documentation for this class was generated from the following files: