summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--_nodes_ast.py7
-rw-r--r--node_classes.py5
-rw-r--r--nodes_as_string.py2
-rw-r--r--rebuilder.py9
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
+