summaryrefslogtreecommitdiff
path: root/rebuilder.py
diff options
context:
space:
mode:
authorEmile Anclin <emile.anclin@logilab.fr>2010-02-03 17:02:49 +0100
committerEmile Anclin <emile.anclin@logilab.fr>2010-02-03 17:02:49 +0100
commitddaee4d861130890fe512644e14a87ef7866baa7 (patch)
treedc95e7b8e1ede5cef5521ba951e5302782b8fca4 /rebuilder.py
parente498840fb1952b8c41ed86b975efdc2d33a7cff7 (diff)
downloadastroid-git-ddaee4d861130890fe512644e14a87ef7866baa7.tar.gz
remove RebuidlVisitor.set_infos; set infos in different _set_infos methods
--HG-- branch : rebuild
Diffstat (limited to 'rebuilder.py')
-rw-r--r--rebuilder.py38
1 files changed, 3 insertions, 35 deletions
diff --git a/rebuilder.py b/rebuilder.py
index 836debf8..fc16c7ea 100644
--- a/rebuilder.py
+++ b/rebuilder.py
@@ -58,46 +58,14 @@ class RebuildVisitor(ASTVisitor):
self._metaclass = None
self._global_names = None
self._delayed_assattr = []
- self.set_line_info = (ast_mode == '_ast')
- self._ast_mode = (ast_mode == '_ast')
def visit(self, node, parent):
if node is None: # some attributes of some nodes are just None
return None
cls_name = node.__class__.__name__
- _method_suffix = REDIRECT.get(cls_name, cls_name).lower()
-
- _visit = getattr(self, "visit_%s" % _method_suffix )
- newnode = _visit(node, parent)
- if newnode is None:
- return
- self.set_infos(newnode, node)
- return newnode
-
- def set_infos(self, newnode, oldnode):
- """set parent and line number infos"""
- # some nodes are created by the TreeRebuilder without going through
- # the visit method; hence we have to set infos explicitly at different
- # places
- # line info setting
- # XXX We don't necessarily get the same type of node back as Rebuilding
- # inserts nodes of different type and returns them... Is it a problem ?
- if hasattr(oldnode, 'lineno'):
- newnode.lineno = oldnode.lineno
- if self.set_line_info: # _ast
- # TODO (): set line_info after visiting last child of each
- # concrete class
- children = list(newnode.get_children())
- if children:
- child = children[-1]
- else:
- child = None
- newnode.set_line_info(child)
- else: # compiler
- if hasattr(oldnode, 'fromlineno'):
- newnode.fromlineno = oldnode.fromlineno
- if hasattr(oldnode, 'tolineno'):
- newnode.tolineno = oldnode.tolineno
+ visit_name = 'visit_' + REDIRECT.get(cls_name, cls_name).lower()
+ visit_method = getattr(self, visit_name)
+ return visit_method(node, parent)
def walk(self, node):
"""start the walk down the tree and do some work after it"""