Mercurial > projects > dil
view src/dil/semantic/Scope.d @ 806:bcb74c9b895c
Moved out files in the trunk folder to the root.
author | Aziz K?ksal <aziz.koeksal@gmail.com> |
---|---|
date | Sun, 09 Mar 2008 00:12:19 +0100 |
parents | trunk/src/dil/semantic/Scope.d@c24be8d4f6ab |
children | 1ecf05e680ba |
line wrap: on
line source
/++ Author: Aziz Köksal License: GPL3 +/ module dil.semantic.Scope; import dil.semantic.Symbol; import dil.semantic.Symbols; import dil.lexer.Identifier; import common; /// Builds a hierarchy of environments. class Scope { Scope parent; /// The surrounding scope, or null if this is the root scope. ScopeSymbol symbol; /// The current symbol with the symbol table. this(Scope parent, ScopeSymbol symbol) { this.parent = parent; this.symbol = symbol; } /// Find a symbol in this scope. /// Params: /// name = the name of the symbol. Symbol lookup(Identifier* name) { return symbol.lookup(name); } /// Create a new inner scope and return that. Scope enter(ScopeSymbol symbol) { return new Scope(this, symbol); } /// Destroy this scope and return the outer scope. Scope exit() { auto sc = parent; // delete this; return sc; } /// Search for the enclosing Class scope. Scope classScope() { auto scop = this; do { if (scop.symbol.isClass) return scop; scop = scop.parent; } while (scop) return null; } /// Search for the enclosing Module scope. Scope moduleScope() { auto scop = this; do { if (scop.symbol.isModule) return scop; scop = scop.parent; } while (scop) return null; } }