Skip to content

Commit

Permalink
made generic asttransformer copy better
Browse files Browse the repository at this point in the history
  • Loading branch information
cantora committed Oct 7, 2012
1 parent 5987bd1 commit cc50e49
Showing 1 changed file with 14 additions and 8 deletions.
22 changes: 14 additions & 8 deletions pyc_astvisitor.py
Expand Up @@ -29,7 +29,7 @@ def __init__(self):
pyc_vis.Visitor.__init__(self) pyc_vis.Visitor.__init__(self)


def default(self, node): def default(self, node):
node = copy.deepcopy(node) new_node = node.__class__()
for field, old_value in ast.iter_fields(node): for field, old_value in ast.iter_fields(node):
old_value = getattr(node, field, None) old_value = getattr(node, field, None)
if isinstance(old_value, list): if isinstance(old_value, list):
Expand All @@ -43,11 +43,17 @@ def default(self, node):
new_values.extend(value) new_values.extend(value)
continue continue
new_values.append(value) new_values.append(value)
old_value[:] = new_values setattr(new_node, field, new_values)
elif isinstance(old_value, ast.AST): elif isinstance(old_value, ast.AST):
new_node = pyc_vis.visit(self, old_value) new_child = pyc_vis.visit(self, old_value)
if new_node is None: if not new_child is None:
delattr(node, field) setattr(new_node, field, new_child)
else:
setattr(node, field, new_node) elif isinstance(old_value, int):
return node setattr(new_node, field, old_value)

else:
raise Exception("didnt expect to copy field with class %r: %r" % (old_value.__class__, old_value) )

return new_node

0 comments on commit cc50e49

Please sign in to comment.