summaryrefslogtreecommitdiff
path: root/rebuilder.py
diff options
context:
space:
mode:
authorEmile Anclin <emile.anclin@logilab.fr>2010-01-26 09:39:43 +0100
committerEmile Anclin <emile.anclin@logilab.fr>2010-01-26 09:39:43 +0100
commit1af465dcb3bec6c57e6aa6c769179e9b44d5904e (patch)
treeb6a9e34bfb27d0fccdc24ea6d2f51750dfcca0b9 /rebuilder.py
parent2fdddfbd16d53679edbbd9918a2661c7a02bfbf6 (diff)
downloadastroid-git-1af465dcb3bec6c57e6aa6c769179e9b44d5904e.tar.gz
delayed_assattr should be done at last; there are no more leave_ methods
--HG-- branch : rebuild
Diffstat (limited to 'rebuilder.py')
-rw-r--r--rebuilder.py18
1 files changed, 10 insertions, 8 deletions
diff --git a/rebuilder.py b/rebuilder.py
index 43269610..01a3c9a9 100644
--- a/rebuilder.py
+++ b/rebuilder.py
@@ -72,9 +72,6 @@ class RebuildVisitor(ASTVisitor):
if newnode is None:
return
self.set_infos(newnode, node)
- _leave = getattr(self, "leave_%s" % _method_suffix, None )
- if _leave:
- _leave(newnode)
return newnode
def set_infos(self, newnode, oldnode):
@@ -105,10 +102,17 @@ class RebuildVisitor(ASTVisitor):
"""start the walk down the tree and do some work after it"""
newnode = self.visit(node, None)
_check_children(newnode) # FIXME : remove this asap
+ # handle delayed nodes; assattr has to be done at last since it needs
+ # some inference which is only possible once the node.locals set
for name, nodes in self._delayed.items():
+ if name == 'assattr':
+ continue
delay_method = getattr(self, 'delayed_' + name)
for node in nodes:
delay_method(node)
+ delay_assattr = self.delayed_assattr
+ for node in self._delayed['assattr']:
+ delay_assattr(node)
for assnode, name, root_local in self._assignments:
if root_local:
assnode.root().set_local(name, assnode)
@@ -119,9 +123,6 @@ class RebuildVisitor(ASTVisitor):
assnode.parent.set_local(name, assnode)
return newnode
-
- # general visit_<node> methods ############################################
-
def _save_argument_name(self, node):
"""save argument names for setting locals"""
if node.vararg:
@@ -129,6 +130,9 @@ class RebuildVisitor(ASTVisitor):
if node.kwarg:
self._assignments.append((node, node.kwarg, False))
+
+ # visit_<node> and delayed_<node> methods #################################
+
def visit_assign(self, node):
newnode = self._visit_assign(node)
self._delayed['assign'].append(newnode)
@@ -283,8 +287,6 @@ class RebuildVisitor(ASTVisitor):
"""visit a AssAttr node -> add name to locals, handle members
definition
"""
- # XXX this probably doesn't work as expected :
- # while running delayed nodes, not all locals are set, hence bad Inference ?
try:
frame = node.frame()
for infered in node.expr.infer():