mirror of
https://github.com/python/cpython.git
synced 2025-11-25 21:11:09 +00:00
#1473257: add generator.gi_code attribute that refers to
the original code object backing the generator. Patch by Collin Winter.
This commit is contained in:
parent
29604a1b4c
commit
0cdf9a36ec
4 changed files with 32 additions and 2 deletions
|
|
@ -11,6 +11,7 @@ static int
|
|||
gen_traverse(PyGenObject *gen, visitproc visit, void *arg)
|
||||
{
|
||||
Py_VISIT((PyObject *)gen->gi_frame);
|
||||
Py_VISIT(gen->gi_code);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -35,6 +36,7 @@ gen_dealloc(PyGenObject *gen)
|
|||
|
||||
_PyObject_GC_UNTRACK(self);
|
||||
Py_CLEAR(gen->gi_frame);
|
||||
Py_CLEAR(gen->gi_code);
|
||||
PyObject_GC_Del(gen);
|
||||
}
|
||||
|
||||
|
|
@ -282,6 +284,7 @@ gen_iternext(PyGenObject *gen)
|
|||
static PyMemberDef gen_memberlist[] = {
|
||||
{"gi_frame", T_OBJECT, offsetof(PyGenObject, gi_frame), RO},
|
||||
{"gi_running", T_INT, offsetof(PyGenObject, gi_running), RO},
|
||||
{"gi_code", T_OBJECT, offsetof(PyGenObject, gi_code), RO},
|
||||
{NULL} /* Sentinel */
|
||||
};
|
||||
|
||||
|
|
@ -352,6 +355,8 @@ PyGen_New(PyFrameObject *f)
|
|||
return NULL;
|
||||
}
|
||||
gen->gi_frame = f;
|
||||
Py_INCREF(f->f_code);
|
||||
gen->gi_code = (PyObject *)(f->f_code);
|
||||
gen->gi_running = 0;
|
||||
gen->gi_weakreflist = NULL;
|
||||
_PyObject_GC_TRACK(gen);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue