diff options
author | Benjamin Peterson <benjamin@python.org> | 2012-03-15 15:37:39 -0500 |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2012-03-15 15:37:39 -0500 |
commit | 0ea564cff248528b899a26f75b173f35b55d505a (patch) | |
tree | 6d0f2f6ecaf1d046113f9a58b20468077d171ccc /Python/compile.c | |
parent | 2c36ddb6988316ed77eca3410e27133c796e7114 (diff) | |
download | cpython-0ea564cff248528b899a26f75b173f35b55d505a.tar.gz |
perform yield from delegation by repeating YIELD_FROM opcode (closes #14230)
This allows generators that are using yield from to be seen by debuggers. It
also kills the f_yieldfrom field on frame objects.
Patch mostly from Mark Shannon with a few tweaks by me.
Diffstat (limited to 'Python/compile.c')
-rw-r--r-- | Python/compile.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/Python/compile.c b/Python/compile.c index b64c800e19..1722a5f97d 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -840,9 +840,9 @@ opcode_stack_effect(int opcode, int oparg) case IMPORT_STAR: return -1; case YIELD_VALUE: - case YIELD_FROM: return 0; - + case YIELD_FROM: + return -1; case POP_BLOCK: return 0; case POP_EXCEPT: @@ -3323,6 +3323,8 @@ compiler_visit_expr(struct compiler *c, expr_ty e) ADDOP_O(c, LOAD_CONST, Py_None, consts); } if (e->kind == YieldFrom_kind) { + ADDOP(c, GET_ITER); + ADDOP_O(c, LOAD_CONST, Py_None, consts); ADDOP(c, YIELD_FROM); } else { |