[pypy-commit] pypy py3.5-async: Change POP_TOP to DUP_TOP in async_for, should fix TypeError after execution of 'async for'
raffael_t
pypy.commits at gmail.com
Thu Aug 18 06:02:01 EDT 2016
Author: Raffael Tfirst <raffael.tfirst at gmail.com>
Branch: py3.5-async
Changeset: r86270:331fd07f62f8
Date: 2016-08-18 12:01 +0200
http://bitbucket.org/pypy/pypy/changeset/331fd07f62f8/
Log: Change POP_TOP to DUP_TOP in async_for, should fix TypeError after
execution of 'async for'
diff --git a/pypy/interpreter/astcompiler/codegen.py b/pypy/interpreter/astcompiler/codegen.py
--- a/pypy/interpreter/astcompiler/codegen.py
+++ b/pypy/interpreter/astcompiler/codegen.py
@@ -599,17 +599,21 @@
b_try_cleanup = self.new_block()
b_after_loop = self.new_block()
b_after_loop_else = self.new_block()
+
self.emit_jump(ops.SETUP_LOOP, b_after_loop)
self.push_frame_block(F_BLOCK_LOOP, b_try)
+
fr.iter.walkabout(self)
self.emit_op(ops.GET_AITER)
self.load_const(self.space.w_None)
self.emit_op(ops.YIELD_FROM)
+
self.use_next_block(b_try)
# This adds another line, so each for iteration can be traced.
self.lineno_set = False
self.emit_jump(ops.SETUP_EXCEPT, b_except)
self.push_frame_block(F_BLOCK_EXCEPT, b_try)
+
self.emit_op(ops.GET_ANEXT)
self.load_const(self.space.w_None)
self.emit_op(ops.YIELD_FROM)
@@ -617,8 +621,9 @@
self.emit_op(ops.POP_BLOCK)
self.pop_frame_block(F_BLOCK_EXCEPT, b_try)
self.emit_jump(ops.JUMP_FORWARD, b_after_try)
+
self.use_next_block(b_except)
- self.emit_op(ops.POP_TOP)
+ self.emit_op(ops.DUP_TOP)
self.emit_op_name(ops.LOAD_GLOBAL, self.names, "StopAsyncIteration")
self.emit_op_arg(ops.COMPARE_OP, 10)
self.emit_jump(ops.POP_JUMP_IF_FALSE, b_try_cleanup, True)
More information about the pypy-commit
mailing list