From a29d7ec6fed283a239da16a090a980bd49587627 Mon Sep 17 00:00:00 2001 From: Sebastien Bourdeauducq Date: Mon, 3 Nov 2014 14:35:40 +0800 Subject: [PATCH] transforms/remove_inter_assigns: fix handling of try blocks --- artiq/transforms/remove_inter_assigns.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/artiq/transforms/remove_inter_assigns.py b/artiq/transforms/remove_inter_assigns.py index 92b4b7e55..76e8163c9 100644 --- a/artiq/transforms/remove_inter_assigns.py +++ b/artiq/transforms/remove_inter_assigns.py @@ -79,7 +79,20 @@ class _InterAssignRemover(ast.NodeTransformer): def visit_Try(self, node): prev_modified_names = self.modified_names_push() - self.generic_visit(node) + node.body = [self.visit(stmt) for stmt in node.body] + self.modified_names_pop(prev_modified_names) + + prev_modified_names = self.modified_names_push() + prev_replacements = self.replacements + for handler in node.handlers: + self.replacements = copy(prev_replacements) + handler.body = [self.visit(stmt) for stmt in handler.body] + self.replacements = copy(prev_replacements) + node.orelse = [self.visit(stmt) for stmt in node.orelse] + self.modified_names_pop(prev_modified_names) + + prev_modified_names = self.modified_names_push() + node.finalbody = [self.visit(stmt) for stmt in node.finalbody] self.modified_names_pop(prev_modified_names) return node