loki.types.scope

Representation of symbol tables and scopes in Loki’s internal representation (IR)

Classes

Scope([parent])

Scoping object that manages type caching and derivation for typed symbols.

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 its SymbolAttributes or, for a derived type definition, directly to its DerivedType.

See SymbolTable for more details on how to look-up symbols.

Parameters:
  • parent (Scope, optional) – The enclosing scope, thus allowing recursive look-ups

  • symbol_attrs (SymbolTable, optional) – Use the given symbol table instead of instantiating a new

symbol_attrs: SymbolTable
parent: dataclasses.InitVar[object] = None
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:

tuple

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, unless symbol_attrs and rescope_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 declared

This performs a recursive lookup in the SymbolTable to find the scope in which name is declared. Note, that this may be the scope with a Import 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