diff options
| -rw-r--r-- | _nodes_ast.py | 7 | ||||
| -rw-r--r-- | node_classes.py | 5 | ||||
| -rw-r--r-- | nodes_as_string.py | 2 | ||||
| -rw-r--r-- | rebuilder.py | 9 |
4 files changed, 12 insertions, 11 deletions
diff --git a/_nodes_ast.py b/_nodes_ast.py index 8fb1591d..e5b445b8 100644 --- a/_nodes_ast.py +++ b/_nodes_ast.py @@ -325,10 +325,7 @@ class TreeRebuilder(RebuildVisitor): def visit_excepthandler(self, node): """visit an ExceptHandler node by returning a fresh instance of it""" - newnode = new.ExceptHandler(self.visit(node.type, node), - self.visit(node.name, node), - [self.visit(n, node) for n in node.body]) - return newnode + return self._build_excepthandler(node, node.type, node.name, node.body) def visit_exec(self, node): """visit an Exec node by returning a fresh instance of it""" @@ -371,7 +368,7 @@ class TreeRebuilder(RebuildVisitor): attr = 'decorator_list' decorators = getattr(node, attr) if decorators: - newnode.decorators = new.Decorators(decorators) + newnode.decorators = self.visit(decorators, node) else: newnode.decorators = None return newnode diff --git a/node_classes.py b/node_classes.py index 6f362f9c..38537f10 100644 --- a/node_classes.py +++ b/node_classes.py @@ -281,10 +281,7 @@ class EmptyNode(NodeNG): class ExceptHandler(StmtMixIn, NodeNG): """class representing an ExceptHandler node""" - def __init__(self, exc_type, name, body): - self.type = exc_type - self.name = name - self.body = body + def __init__(self): # XXX parent.lineno is wrong, can't catch the right line ... return # XXX it doesn't work yet if exc_type and exc_type.lineno: diff --git a/nodes_as_string.py b/nodes_as_string.py index d827d2cf..eb2f3116 100644 --- a/nodes_as_string.py +++ b/nodes_as_string.py @@ -234,7 +234,7 @@ class AsStringVisitor(ASTVisitor): def visit_if(self, node): """return an astng.If node as string""" ifs = ['if %s:\n%s' % (node.test.accept(self), self._stmt_list(node.body))] - if node.orelse: + if node.orelse:# XXX use elif ??? ifs.append('else:\n%s' % self._stmt_list(node.orelse)) return '\n'.join(ifs) diff --git a/rebuilder.py b/rebuilder.py index 741625fc..dfe0bb64 100644 --- a/rebuilder.py +++ b/rebuilder.py @@ -42,10 +42,10 @@ class RebuildVisitor(ASTVisitor): self.set_line_info = set_line_info def visit(self, node, parent): - # XXX do we need parent ? if node is None: # some attributes of some nodes are just None print "node with parent %s is None" % parent return None + node.parent = parent # XXX it seems that we need it sometimes _method = REDIRECT.get(node.__class__.__name__, node.__class__.__name__).lower() _visit = getattr(self, "visit_%s" % _method ) if self.set_line_info: @@ -326,3 +326,10 @@ class RebuildVisitor(ASTVisitor): except InferenceError: pass + def _build_excepthandler(self, node, exctype, excobj, body): + newnode = nodes.ExceptHandler() + newnode.type = self.visit(exctype, node) + newnode.name = self.visit(excobj, node) + newnode.body = [self.visit(child, node) for child in body] + return newnode + |
