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.
diff --git a/Python/compile.c b/Python/compile.c
index b64c800..1722a5f 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -840,9 +840,9 @@
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 @@
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 {