cython-devel

changeset 1347:4a4a4eba9cd6

avoid calling TupleNode.allocate_temps() in iter-dict transform
author Stefan Behnel <scoder@users.berlios.de>
date Tue Nov 18 19:36:29 2008 +0100 (4 years ago)
parents cc9e5ead50d1
children da561ec3162a
files Cython/Compiler/Optimize.py
line diff
1.1 --- a/Cython/Compiler/Optimize.py Mon Nov 17 14:35:05 2008 +0100 1.2 +++ b/Cython/Compiler/Optimize.py Tue Nov 18 19:36:29 2008 +0100 1.3 @@ -51,7 +51,6 @@ 1.4 return node 1.5 dict_obj = function.obj 1.6 method = function.attribute 1.7 - env = self.env_stack[-1] 1.8 1.9 keys = values = False 1.10 if method == 'iterkeys': 1.11 @@ -121,12 +120,20 @@ 1.12 stats = [node.body]) 1.13 1.14 if tuple_target: 1.15 - tuple_result = ExprNodes.TupleNode( 1.16 + temp = UtilNodes.TempHandle(py_object_ptr) 1.17 + temps.append(temp) 1.18 + temp_tuple = temp.ref(tuple_target.pos) 1.19 + class TempTupleNode(ExprNodes.TupleNode): 1.20 + # FIXME: remove this after result-code refactoring 1.21 + def result(self): 1.22 + return temp_tuple.result() 1.23 + 1.24 + tuple_result = TempTupleNode( 1.25 pos = tuple_target.pos, 1.26 - args = [key_cast, value_cast] 1.27 + args = [key_cast, value_cast], 1.28 + is_temp = 1, 1.29 + type = Builtin.tuple_type, 1.30 ) 1.31 - tuple_result.analyse_types(env) 1.32 - tuple_result.allocate_temps(env) 1.33 body.stats.insert(0, Nodes.SingleAssignmentNode( 1.34 pos = tuple_target.pos, 1.35 lhs = tuple_target, 1.36 @@ -174,17 +181,6 @@ 1.37 stats = result_code 1.38 )) 1.39 1.40 - def visit_ModuleNode(self, node): 1.41 - self.env_stack = [node.scope] 1.42 - self.visitchildren(node) 1.43 - return node 1.44 - 1.45 - def visit_FuncDefNode(self, node): 1.46 - self.env_stack.append(node.local_scope) 1.47 - self.visitchildren(node) 1.48 - self.env_stack.pop() 1.49 - return node 1.50 - 1.51 def visit_Node(self, node): 1.52 self.visitchildren(node) 1.53 return node