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/Include/frameobject.h b/Include/frameobject.h
index 55447b7..a8df445 100644
--- a/Include/frameobject.h
+++ b/Include/frameobject.h
@@ -27,7 +27,6 @@
to the current stack top. */
PyObject **f_stacktop;
PyObject *f_trace; /* Trace function */
- PyObject *f_yieldfrom; /* Iterator being delegated to by yield from */
/* In a generator, we need to be able to swap between the exception
state inside the generator and the exception state of the calling
diff --git a/Include/genobject.h b/Include/genobject.h
index 2326491..25f6c33 100644
--- a/Include/genobject.h
+++ b/Include/genobject.h
@@ -19,7 +19,7 @@
/* True if generator is being executed. */
char gi_running;
-
+
/* The code object backing the generator */
PyObject *gi_code;
@@ -35,6 +35,7 @@
PyAPI_FUNC(PyObject *) PyGen_New(struct _frame *);
PyAPI_FUNC(int) PyGen_NeedsFinalizing(PyGenObject *);
PyAPI_FUNC(int) PyGen_FetchStopIterationValue(PyObject **);
+PyObject *_PyGen_Send(PyGenObject *, PyObject *);
#ifdef __cplusplus
}