Commit 571e3b08 authored by Stefan Behnel's avatar Stefan Behnel

fix iterdict transform for new temp semantics

parent fcfaa416
...@@ -76,7 +76,7 @@ class DictIterTransform(Visitor.VisitorTransform): ...@@ -76,7 +76,7 @@ class DictIterTransform(Visitor.VisitorTransform):
dict_temp = temp.ref(dict_obj.pos) dict_temp = temp.ref(dict_obj.pos)
temp = UtilNodes.TempHandle(PyrexTypes.c_py_ssize_t_type) temp = UtilNodes.TempHandle(PyrexTypes.c_py_ssize_t_type)
temps.append(temp) temps.append(temp)
pos_temp = temp.ref(dict_obj.pos) pos_temp = temp.ref(node.pos)
pos_temp_addr = ExprNodes.AmpersandNode( pos_temp_addr = ExprNodes.AmpersandNode(
node.pos, operand=pos_temp, node.pos, operand=pos_temp,
type=PyrexTypes.c_ptr_type(PyrexTypes.c_py_ssize_t_type)) type=PyrexTypes.c_ptr_type(PyrexTypes.c_py_ssize_t_type))
...@@ -142,8 +142,8 @@ class DictIterTransform(Visitor.VisitorTransform): ...@@ -142,8 +142,8 @@ class DictIterTransform(Visitor.VisitorTransform):
stats = [node.body]) stats = [node.body])
if tuple_target: if tuple_target:
temp = UtilNodes.TempHandle(PyrexTypes.py_object_type) temp = UtilNodes.TempHandle(Builtin.tuple_type)
temps.append(temp) temp.needs_cleanup = False # assignment steals the reference
temp_tuple = temp.ref(tuple_target.pos) temp_tuple = temp.ref(tuple_target.pos)
class TempTupleNode(ExprNodes.TupleNode): class TempTupleNode(ExprNodes.TupleNode):
# FIXME: remove this after result-code refactoring # FIXME: remove this after result-code refactoring
...@@ -156,10 +156,13 @@ class DictIterTransform(Visitor.VisitorTransform): ...@@ -156,10 +156,13 @@ class DictIterTransform(Visitor.VisitorTransform):
is_temp = 1, is_temp = 1,
type = Builtin.tuple_type, type = Builtin.tuple_type,
) )
body.stats.insert(0, Nodes.SingleAssignmentNode( body.stats.insert(
0, UtilNodes.TempsBlockNode(
tuple_target.pos, temps = [temp],
body = Nodes.SingleAssignmentNode(
pos = tuple_target.pos, pos = tuple_target.pos,
lhs = tuple_target, lhs = tuple_target,
rhs = tuple_result)) rhs = tuple_result)))
else: else:
# execute all coercions before the assignments # execute all coercions before the assignments
coercion_stats = [] coercion_stats = []
...@@ -216,7 +219,7 @@ class DictIterTransform(Visitor.VisitorTransform): ...@@ -216,7 +219,7 @@ class DictIterTransform(Visitor.VisitorTransform):
return UtilNodes.TempsBlockNode( return UtilNodes.TempsBlockNode(
node.pos, temps=temps, node.pos, temps=temps,
body=Nodes.StatListNode( body=Nodes.StatListNode(
pos = node.pos, node.pos,
stats = result_code stats = result_code
)) ))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment