diff options
author | Emile Anclin <emile.anclin@logilab.fr> | 2010-01-26 09:39:43 +0100 |
---|---|---|
committer | Emile Anclin <emile.anclin@logilab.fr> | 2010-01-26 09:39:43 +0100 |
commit | 1af465dcb3bec6c57e6aa6c769179e9b44d5904e (patch) | |
tree | b6a9e34bfb27d0fccdc24ea6d2f51750dfcca0b9 /rebuilder.py | |
parent | 2fdddfbd16d53679edbbd9918a2661c7a02bfbf6 (diff) | |
download | astroid-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.py | 18 |
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(): |