diff options
-rw-r--r-- | lookup.py | 11 | ||||
-rw-r--r-- | scoped_nodes.py | 2 |
2 files changed, 12 insertions, 1 deletions
@@ -69,6 +69,15 @@ def scope_lookup(self, node, name, offset=0): return pscope.scope_lookup(node, name) return builtin_lookup(name) +def module_scope_lookup(self, node, name, offset=0): + # module's __dict__ not accessible through name lookup + if name in nodes.Module.scope_attrs and not name in self.locals: + try: + return self, self.getattr(name) + except NotFoundError: + return self, () + return scope_lookup(self, node, name, offset) + def class_scope_lookup(self, node, name, offset=0): if node in self.bases: frame = self.parent.frame() @@ -230,6 +239,6 @@ for klass in (nodes.Name, nodes.AssName, nodes.DelName, nodes.Class.scope_lookup = class_scope_lookup nodes.Function.scope_lookup = function_scope_lookup nodes.Lambda.scope_lookup = function_scope_lookup -nodes.Module.scope_lookup = scope_lookup +nodes.Module.scope_lookup = module_scope_lookup nodes.GenExpr.scope_lookup = scope_lookup diff --git a/scoped_nodes.py b/scoped_nodes.py index 7a80e131..3a856992 100644 --- a/scoped_nodes.py +++ b/scoped_nodes.py @@ -195,6 +195,8 @@ class ModuleNG(object): # as value globals = None + scope_attrs = ('__name__', '__doc__', '__file__', '__path__') + def pytype(self): return '__builtin__.module' |