Commit dc38b785 authored by Stefan Behnel's avatar Stefan Behnel

simplification for iter-dict optimisation after moving TupleNode to new-style temp usage

parent 5c8fc43e
...@@ -142,27 +142,17 @@ class DictIterTransform(Visitor.VisitorTransform): ...@@ -142,27 +142,17 @@ class DictIterTransform(Visitor.VisitorTransform):
stats = [node.body]) stats = [node.body])
if tuple_target: if tuple_target:
temp = UtilNodes.TempHandle(Builtin.tuple_type) tuple_result = ExprNodes.TupleNode(
temp.needs_cleanup = False # assignment steals the reference
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, pos = tuple_target.pos,
args = [key_temp, value_temp], args = [key_temp, value_temp],
is_temp = 1, is_temp = 1,
type = Builtin.tuple_type, type = Builtin.tuple_type,
) )
body.stats.insert( body.stats.insert(
0, UtilNodes.TempsBlockNode( 0, Nodes.SingleAssignmentNode(
tuple_target.pos, temps = [temp], pos = tuple_target.pos,
body = Nodes.SingleAssignmentNode( lhs = tuple_target,
pos = tuple_target.pos, rhs = tuple_result))
lhs = tuple_target,
rhs = tuple_result)))
else: else:
# execute all coercions before the assignments # execute all coercions before the assignments
coercion_stats = [] coercion_stats = []
...@@ -190,14 +180,14 @@ class DictIterTransform(Visitor.VisitorTransform): ...@@ -190,14 +180,14 @@ class DictIterTransform(Visitor.VisitorTransform):
body.stats[0:0] = coercion_stats + assign_stats body.stats[0:0] = coercion_stats + assign_stats
result_code = [ result_code = [
Nodes.SingleAssignmentNode(
pos = node.pos,
lhs = pos_temp,
rhs = ExprNodes.IntNode(node.pos, value=0)),
Nodes.SingleAssignmentNode( Nodes.SingleAssignmentNode(
pos = dict_obj.pos, pos = dict_obj.pos,
lhs = dict_temp, lhs = dict_temp,
rhs = dict_obj), rhs = dict_obj),
Nodes.SingleAssignmentNode(
pos = node.pos,
lhs = pos_temp,
rhs = ExprNodes.IntNode(node.pos, value=0)),
Nodes.WhileStatNode( Nodes.WhileStatNode(
pos = node.pos, pos = node.pos,
condition = ExprNodes.SimpleCallNode( condition = ExprNodes.SimpleCallNode(
......
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