Mercurial > lcfOS
diff python/c3/scope.py @ 150:4ae0e02599de
Added type check start and analyze phase
author | Windel Bouwman |
---|---|
date | Fri, 01 Mar 2013 16:53:22 +0100 |
parents | |
children | b28a11c01dbe |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/python/c3/scope.py Fri Mar 01 16:53:22 2013 +0100 @@ -0,0 +1,33 @@ +from . import astnodes + +class Scope: + """ A scope contains all symbols in a scope """ + def __init__(self, parent=None): + self.symbols = {} + self.parent = parent + def __iter__(self): + return iter(self.symbols.values()) + def getSymbol(self, name): + if name in self.symbols: + return self.symbols[name] + # Look for symbol: + if self.parent: + return self.parent.getSymbol(name) + raise CompilerException("Symbol {0} not found".format(name), name.loc) + def hasSymbol(self, name): + if name in self.symbols: + return True + if self.parent: + return self.parent.hasSymbol(name) + return False + def addSymbol(self, sym): + self.symbols[sym.name] = sym + +def createBuiltins(scope): + for tn in ['int', 'u32', 'u16', 'double']: + scope.addSymbol(astnodes.BaseType(tn)) + +topScope = Scope() + +createBuiltins(topScope) +