summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lookup.py11
-rw-r--r--scoped_nodes.py2
2 files changed, 12 insertions, 1 deletions
diff --git a/lookup.py b/lookup.py
index 1abb7289..294f080c 100644
--- a/lookup.py
+++ b/lookup.py
@@ -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'