loki.scope
Representation of symbol tables and scopes in Loki’s internal representation (IR)
Classes
|
Scoping object that manages type caching and derivation for typed symbols. |
|
Lookup table for symbol types that maps symbol names to |
- class SymbolTable(*args, case_sensitive=False, **kwargs)
Bases:
dict
Lookup table for symbol types that maps symbol names to
SymbolAttributes
It is used to store types for declared variables, defined types or imported symbols within their respective scope. If its associated scope is nested into an enclosing scope, it allows to perform recursive look-ups in parent scopes.
The interface of this table behaves like a
dict
.- Parameters:
parent (
SymbolTable
, optional) – The symbol table of the parent scope for recursive look-ups.case_sensitive (bool, optional) – Respect the case of symbol names in lookups (default: False).
- property parent
The symbol table of the parent scope
- Return type:
SymbolTable
or None
- property case_sensitive
Indicate if the
SymbolTable
is case-sensitive when looking up names- Return type:
bool
- format_lookup_name(name)
Format a variable name for look-up (e.g., convert to lower case if case-insensitive)
- Parameters:
name (str) – the name to look up
- Returns:
the name used for look-ups
- Return type:
- lookup(name, recursive=True)
Look-up a symbol in the symbol table and return the type or None if not found.
- Parameters:
name (str) – Name of the type or symbol
recursive (bool, optional) – If no entry by that name is found, try to find it in the table of the parent scope
- Return type:
SymbolAttributes
or None
- get(key, default=None)
Get a symbol’s entry without recursive lookup
- Parameters:
key (str) – Name of the type or symbol
default (optional) – Return this value if
key
is not found in the table
- setdefault(key, default=None)
Insert a default value for a key into the table if it does not exist
- Parameters:
key (str) – Name of the type or symbol
default (optional) – The default value to store for the key. Defaults to
SymbolAttributes(BasicType.DEFERRED)
.
- update(other)
Update this symbol table with entries from
other
- clone(**kwargs)
Create a copy of the symbol table with the option to override individual parameters
- Parameters:
**kwargs – Any parameters from the constructor of
SymbolTable
- Returns:
The clone symbol table with copies of all
SymbolAttributes
- Return type:
- class Scope(parent: dataclasses.InitVar[object] | None = None)
Bases:
object
Scoping object that manages type caching and derivation for typed symbols.
The
Scope
provides a symbol table that uniquely maps a symbol’s name to itsSymbolAttributes
or, for a derived type definition, directly to itsDerivedType
.See
SymbolTable
for more details on how to look-up symbols.- Parameters:
parent (
Scope
, optional) – The enclosing scope, thus allowing recursive look-upssymbol_attrs (
SymbolTable
, optional) – Use the given symbol table instead of instantiating a new
- symbol_attrs: SymbolTable
- property parents
All parent scopes enclosing the current scope, with the top-level scope at the end of the list
- Returns:
The list of parent scopes
- Return type:
- rescope_symbols()
Make sure all symbols declared and used inside this node belong to a scope in the scope hierarchy
- make_complete(**frontend_args)
Trigger a re-parse of the object if incomplete to produce a full Loki IR
See
ProgramUnit.make_complete
for more details.This method relays the call only to the
parent
.
- clone(**kwargs)
Create a copy of the scope object with the option to override individual parameters
Note that this will also create a copy of the symbol table via
SymbolTable.clone
and force rescoping of variables, unlesssymbol_attrs
andrescope_symbols
are explicitly specified.- Parameters:
**kwargs (Any parameter from the constructor)
- Returns:
The cloned scope object
- Return type:
type(self)
- get_symbol_scope(name)
Find the scope in which
name
is declaredThis performs a recursive lookup in the
SymbolTable
to find the scope in whichname
is declared. Note, that this may be the scope with aImport
of this name and not the original declaration.- Parameters:
name (str) – The name of the symbol to look for
- Returns:
The scope object in which the symbol is declared, or None if not found
- Return type:
Scope
or None