mirror of
https://github.com/python/cpython.git
synced 2025-08-01 07:33:08 +00:00
Issue #17807: Generators can now be finalized even when they are part of a reference cycle.
This commit is contained in:
parent
070cb3c9be
commit
04e70d19e7
8 changed files with 335 additions and 245 deletions
|
@ -36,6 +36,8 @@ typedef struct _frame {
|
|||
non-generator frames. See the save_exc_state and swap_exc_state
|
||||
functions in ceval.c for details of their use. */
|
||||
PyObject *f_exc_type, *f_exc_value, *f_exc_traceback;
|
||||
/* Borrowed referenced to a generator, or NULL */
|
||||
PyObject *f_gen;
|
||||
|
||||
PyThreadState *f_tstate;
|
||||
int f_lasti; /* Last instruction if called */
|
||||
|
@ -84,6 +86,13 @@ PyAPI_FUNC(void) _PyFrame_DebugMallocStats(FILE *out);
|
|||
/* Return the line of code the frame is currently executing. */
|
||||
PyAPI_FUNC(int) PyFrame_GetLineNumber(PyFrameObject *);
|
||||
|
||||
/* Generator support */
|
||||
PyAPI_FUNC(PyObject *) _PyFrame_YieldingFrom(PyFrameObject *);
|
||||
PyAPI_FUNC(PyObject *) _PyFrame_GeneratorSend(PyFrameObject *, PyObject *, int exc);
|
||||
PyAPI_FUNC(PyObject *) _PyFrame_Finalize(PyFrameObject *);
|
||||
PyAPI_FUNC(int) _PyFrame_CloseIterator(PyObject *);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -33,6 +33,7 @@ PyAPI_DATA(PyTypeObject) PyGen_Type;
|
|||
#define PyGen_CheckExact(op) (Py_TYPE(op) == &PyGen_Type)
|
||||
|
||||
PyAPI_FUNC(PyObject *) PyGen_New(struct _frame *);
|
||||
/* Deprecated, kept for backwards compatibility. */
|
||||
PyAPI_FUNC(int) PyGen_NeedsFinalizing(PyGenObject *);
|
||||
PyAPI_FUNC(int) _PyGen_FetchStopIterationValue(PyObject **);
|
||||
PyObject *_PyGen_Send(PyGenObject *, PyObject *);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue