diff options
author | Emile Anclin <emile.anclin@logilab.fr> | 2010-02-02 09:03:36 +0100 |
---|---|---|
committer | Emile Anclin <emile.anclin@logilab.fr> | 2010-02-02 09:03:36 +0100 |
commit | 7f9be147ac7399b5d640777bb4946d447f5ebcb3 (patch) | |
tree | 1aa50ab49e4c1b48ca84a395eca0e4657a7d5da2 /rebuilder.py | |
parent | 811a115ec550b825ea60b29d9f343c6c65126be8 (diff) | |
download | astroid-git-7f9be147ac7399b5d640777bb4946d447f5ebcb3.tar.gz |
pass parent to concrete visit methods (step 1: change signature)
passing the new parent to the visit methods avoids re-walking through children
and will simplify the rebuilding.
--HG--
branch : rebuild
Diffstat (limited to 'rebuilder.py')
-rw-r--r-- | rebuilder.py | 40 |
1 files changed, 18 insertions, 22 deletions
diff --git a/rebuilder.py b/rebuilder.py index ad313382..cad7f8a7 100644 --- a/rebuilder.py +++ b/rebuilder.py @@ -65,7 +65,7 @@ class RebuildVisitor(ASTVisitor): _method_suffix = REDIRECT.get(cls_name, cls_name).lower() _visit = getattr(self, "visit_%s" % _method_suffix ) - newnode = _visit(node) + newnode = _visit(node, parent) if newnode is None: return self.set_infos(newnode, node) @@ -118,6 +118,7 @@ class RebuildVisitor(ASTVisitor): delay_assattr = self.delayed_assattr for node in self._delayed['assattr']: + print "delayed", node delay_assattr(node) return newnode @@ -131,11 +132,6 @@ class RebuildVisitor(ASTVisitor): # visit_<node> and delayed_<node> methods ################################# - def visit_assign(self, node): - newnode = self._visit_assign(node) - self._delayed['assign'].append(newnode) - return newnode - def delayed_assign(self, newnode): klass = newnode.parent.frame() if (isinstance(klass, nodes.Class) @@ -159,10 +155,10 @@ class RebuildVisitor(ASTVisitor): self._metaclass[-1] = 'type' # XXX get the actual metaclass return newnode - def visit_class(self, node): + def visit_class(self, node, parent): """visit a Class node to become astng""" self._metaclass.append(self._metaclass[-1]) - newnode = self._visit_class(node) + newnode = self._visit_class(node, parent) newnode.name = node.name metaclass = self._metaclass.pop() if not newnode.bases: @@ -175,19 +171,19 @@ class RebuildVisitor(ASTVisitor): def delayed_class(self, node): node.parent.frame().set_local(node.name, node) - def visit_const(self, node): + def visit_const(self, node, parent): """visit a Const node by returning a fresh instance of it""" newnode = nodes.Const(node.value) return newnode - def visit_continue(self, node): + def visit_continue(self, node, parent): """visit a Continue node by returning a fresh instance of it""" newnode = nodes.Continue() return newnode - def visit_decorators(self, node): + def visit_decorators(self, node, parent): """visiting an Decorators node""" - newnode = self._visit_decorators(node) + newnode = self._visit_decorators(node, parent) self._delayed['decorators'].append(newnode) return newnode @@ -200,12 +196,12 @@ class RebuildVisitor(ASTVisitor): decorator_expr.name in ('classmethod', 'staticmethod'): node.parent.type = decorator_expr.name - def visit_ellipsis(self, node): + def visit_ellipsis(self, node, parent): """visit an Ellipsis node by returning a fresh instance of it""" newnode = nodes.Ellipsis() return newnode - def visit_emptynode(self, node): + def visit_emptynode(self, node, parent): """visit an EmptyNode node by returning a fresh instance of it""" newnode = nodes.EmptyNode() return newnode @@ -224,10 +220,10 @@ class RebuildVisitor(ASTVisitor): else: node.parent.set_local(asname or name, node) - def visit_function(self, node): + def visit_function(self, node, parent): """visit an Function node to become astng""" self._global_names.append({}) - newnode = self._visit_function(node) + newnode = self._visit_function(node, parent) self._delayed['function'].append(newnode) newnode.name = node.name self._global_names.pop() @@ -242,7 +238,7 @@ class RebuildVisitor(ASTVisitor): newnode.type = 'method' frame.set_local(newnode.name, newnode) - def visit_global(self, node): + def visit_global(self, node, parent): """visit an Global node to become astng""" newnode = nodes.Global(node.names) if self._global_names: # global at the module level, no effect @@ -256,20 +252,20 @@ class RebuildVisitor(ASTVisitor): name = asname or name self._assignments.append( (newnode, name.split('.')[0], False) ) - def visit_module(self, node): + def visit_module(self, node, parent): """visit an Module node to become astng""" self._metaclass = [''] self._global_names = [] - return self._visit_module(node) + return self._visit_module(node, parent) - def visit_name(self, node): + def visit_name(self, node, parent): """visit an Name node to become astng""" - newnode = self._visit_name(node) + newnode = self._visit_name(node, parent) if newnode.name in CONST_NAME_TRANSFORMS: return nodes.Const(CONST_NAME_TRANSFORMS[newnode.name]) return newnode - def visit_pass(self, node): + def visit_pass(self, node, parent): """visit a Pass node by returning a fresh instance of it""" newnode = nodes.Pass() return newnode |