From f6cb1da95be3a0dd964528176ef0ddf356545243 Mon Sep 17 00:00:00 2001 From: Stefan Behnel Date: Tue, 18 Nov 2008 19:36:29 +0100 Subject: [PATCH] avoid calling TupleNode.allocate_temps() in iter-dict transform --- Cython/Compiler/Optimize.py | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/Cython/Compiler/Optimize.py b/Cython/Compiler/Optimize.py index b5f2efa2..49f7323a 100644 --- a/Cython/Compiler/Optimize.py +++ b/Cython/Compiler/Optimize.py @@ -51,7 +51,6 @@ class DictIterTransform(Visitor.VisitorTransform): return node dict_obj = function.obj method = function.attribute - env = self.env_stack[-1] keys = values = False if method == 'iterkeys': @@ -121,12 +120,20 @@ class DictIterTransform(Visitor.VisitorTransform): stats = [node.body]) if tuple_target: - tuple_result = ExprNodes.TupleNode( + temp = UtilNodes.TempHandle(py_object_ptr) + temps.append(temp) + temp_tuple = temp.ref(tuple_target.pos) + class TempTupleNode(ExprNodes.TupleNode): + # FIXME: remove this after result-code refactoring + def result(self): + return temp_tuple.result() + + tuple_result = TempTupleNode( pos = tuple_target.pos, - args = [key_cast, value_cast] + args = [key_cast, value_cast], + is_temp = 1, + type = Builtin.tuple_type, ) - tuple_result.analyse_types(env) - tuple_result.allocate_temps(env) body.stats.insert(0, Nodes.SingleAssignmentNode( pos = tuple_target.pos, lhs = tuple_target, @@ -174,17 +181,6 @@ class DictIterTransform(Visitor.VisitorTransform): stats = result_code )) - def visit_ModuleNode(self, node): - self.env_stack = [node.scope] - self.visitchildren(node) - return node - - def visit_FuncDefNode(self, node): - self.env_stack.append(node.local_scope) - self.visitchildren(node) - self.env_stack.pop() - return node - def visit_Node(self, node): self.visitchildren(node) return node -- 2.26.2