diff options
author | Emile Anclin <emile.anclin@logilab.fr> | 2010-01-21 14:38:07 +0100 |
---|---|---|
committer | Emile Anclin <emile.anclin@logilab.fr> | 2010-01-21 14:38:07 +0100 |
commit | 374ad7c58fa14da8733a0690c7421a5fc8d21743 (patch) | |
tree | 82b5e869f1a30fe83463e67e44ef95591f064379 /rebuilder.py | |
parent | f19c445cf15e40d383ea7bff70b00242a4686691 (diff) | |
download | astroid-git-374ad7c58fa14da8733a0690c7421a5fc8d21743.tar.gz |
save assignement nodes and call set_local after walking the tree
--HG--
branch : rebuild
Diffstat (limited to 'rebuilder.py')
-rw-r--r-- | rebuilder.py | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/rebuilder.py b/rebuilder.py index 49260b50..21118fc3 100644 --- a/rebuilder.py +++ b/rebuilder.py @@ -41,7 +41,7 @@ class RebuildVisitor(ASTVisitor): self._delayed = dict((name, []) for name in ('class', 'function', 'assattr')) self.set_line_info = (ast_mode == '_ast') self._ast_mode = (ast_mode == '_ast') - self._asscontext = None + self._assignments = [] def visit(self, node, parent): if node is None: # some attributes of some nodes are just None @@ -76,6 +76,8 @@ class RebuildVisitor(ASTVisitor): delay_method = getattr(self, 'delayed_' + name) for node in nodes: delay_method(node) + for node, root in self._assignments: + self.set_local_name(node, root) return newnode # general visit_<node> methods ############################################ @@ -231,13 +233,19 @@ class RebuildVisitor(ASTVisitor): newnode = nodes.Pass() return newnode - def visit_assname(self, node): # XXX parent - if self.asscontext is not None: - if self._global_names and node.name in self._global_names[-1]: - node.root().set_local(node.name, node) - else: - node.parent.set_local(node.name, node) - visit_delname = visit_assname + def _save_assigment(self, node): + """save assignement situation since node.parent is not available yet""" + if self._global_names and node.name in self._global_names[-1]: + self._assignments.append((node, True)) + else: + self._assignments.append((node, False)) + + def set_local_name(self, node, root): + """set local name into the right place""" + if root: + node.root().set_local(node.name, node) + else: + node.parent.set_local(node.name, node) def delayed_assattr(self, node): """visit a AssAttr node -> add name to locals, handle members |