Mercurial > lcfOS
diff python/c3/analyse.py @ 289:bd2593de3ff8
Semifix burn2
author | Windel Bouwman |
---|---|
date | Thu, 21 Nov 2013 15:46:50 +0100 |
parents | a747a45dcd78 |
children | 6aa721e7b10b |
line wrap: on
line diff
--- a/python/c3/analyse.py Thu Nov 21 14:26:13 2013 +0100 +++ b/python/c3/analyse.py Thu Nov 21 15:46:50 2013 +0100 @@ -71,7 +71,6 @@ def analyzePackage(self, pkg, packageDict): self.ok = True # Prepare top level scope and set scope to all objects: - AddScope(self.diag).addScope(pkg) self.logger.info('Resolving imports for package {}'.format(pkg.name)) # Handle imports: @@ -91,7 +90,23 @@ # Reference fixups: def resolveDesignator(self, d, scope): - assert type(d) is Designator, type(d) + assert isinstance(d, Designator), type(d) + assert type(scope) is Scope + if scope.hasSymbol(d.tname): + s = scope.getSymbol(d.tname) + if isinstance(d, ImportDesignator): + if s.innerScope.hasSymbol(d.vname): + return s.innerScope.getSymbol(d.vname) + else: + if hasattr(s, 'addRef'): + # TODO: make this nicer + s.addRef(None) + return s + else: + self.error('Cannot resolve name {0}'.format(d.tname), d.loc) + + def resolveImportDesignator(self, d, scope): + assert isinstance(d, ImportDesignator), type(d) assert type(scope) is Scope if scope.hasSymbol(d.tname): s = scope.getSymbol(d.tname) @@ -114,7 +129,7 @@ offset += theType(mem.typ).bytesize t.bytesize = offset return t - elif type(t) is Designator: + elif isinstance(t, Designator): t = self.resolveDesignator(t, scope) if t: return self.resolveType(t, scope)