GlobalScope

This should ideally only be called once. It constructs a new global scope, which is not associated to any AST node. However, depending on the language, a language frontend can explicitly set the ast node using ScopeManager.resetToGlobal if the language needs a global scope that is restricted to a translation unit, i.e. C++ while still maintaining a unique list of global variables.

Constructors

Link copied to clipboard
constructor()

Properties

Link copied to clipboard
override var astNode: Node?
Link copied to clipboard

The list of child scopes.

Link copied to clipboard

Returns the GlobalScope of this scope by traversing its parents upwards.

Link copied to clipboard
var id: Long?

Required field for object graph mapping. It contains the scope id.

Link copied to clipboard
var name: Name?

The real new name

Link copied to clipboard

Scopes are nested and therefore have a parent child relationship, this two members will help navigate through the scopes,e.g. when looking up variables.

Link copied to clipboard

In some languages, the lookup scope of a symbol that is being resolved (e.g. of a Reference) can be adjusted through keywords (such as global in Python or PHP).

Link copied to clipboard

FQN Name currently valid

Link copied to clipboard

A map of symbols and their respective Declaration nodes that declare them.

Link copied to clipboard

A map of typedefs keyed by their alias name. This is still needed as a bridge until we completely redesign the alias / typedef system.

Link copied to clipboard
Link copied to clipboard

Functions

Link copied to clipboard
open override fun addDeclaration(declaration: Declaration, addToAST: Boolean)
Link copied to clipboard
fun addLabelStatement(labelStatement: LabelStatement)
Link copied to clipboard
fun addSymbol(symbol: Symbol, declaration: Declaration)

Adds a declaration with the defined symbol.

Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
open operator override fun equals(other: Any?): Boolean
Link copied to clipboard
open override fun hashCode(): Int
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
fun lookupSymbol(symbol: Symbol, thisScopeOnly: Boolean = false, replaceImports: Boolean = true, predicate: (Declaration) -> Boolean? = null): List<Declaration>

Looks up a list of Declaration nodes for the specified symbol. Optionally, predicate can be used for additional filtering.

Link copied to clipboard

Because the way we currently handle parallel parsing in TranslationManager.parseParallel, we end up with multiple GlobalScope objects, one for each TranslationUnitDeclaration. In the end, we need to merge all these different scopes into one final global scope. To be somewhat consistent with the behaviour of TranslationManager.parseSequentially, we assign the last translation unit declaration we see to the AST node of the GlobalScope. This is not completely ideal, but the best we can do for now.

Link copied to clipboard
open override fun toString(): String