mirror of
https://github.com/python/cpython.git
synced 2024-11-27 11:55:13 +08:00
Re-enable GC of iter objects.
This commit is contained in:
parent
d164837856
commit
dbf409fbfc
@ -12,22 +12,21 @@ PyObject *
|
||||
PySeqIter_New(PyObject *seq)
|
||||
{
|
||||
seqiterobject *it;
|
||||
it = PyObject_NEW(seqiterobject, &PySeqIter_Type);
|
||||
it = PyObject_GC_New(seqiterobject, &PySeqIter_Type);
|
||||
if (it == NULL)
|
||||
return NULL;
|
||||
it->it_index = 0;
|
||||
Py_INCREF(seq);
|
||||
it->it_seq = seq;
|
||||
PyObject_GC_Init(it);
|
||||
_PyObject_GC_TRACK(it);
|
||||
return (PyObject *)it;
|
||||
}
|
||||
static void
|
||||
iter_dealloc(seqiterobject *it)
|
||||
{
|
||||
PyObject_GC_Fini(it);
|
||||
_PyObject_GC_UNTRACK(it);
|
||||
Py_DECREF(it->it_seq);
|
||||
it = (seqiterobject *) PyObject_AS_GC(it);
|
||||
PyObject_DEL(it);
|
||||
PyObject_GC_Del(it);
|
||||
}
|
||||
|
||||
static int
|
||||
@ -100,7 +99,7 @@ PyTypeObject PySeqIter_Type = {
|
||||
PyObject_HEAD_INIT(&PyType_Type)
|
||||
0, /* ob_size */
|
||||
"iterator", /* tp_name */
|
||||
sizeof(seqiterobject) + PyGC_HEAD_SIZE, /* tp_basicsize */
|
||||
sizeof(seqiterobject), /* tp_basicsize */
|
||||
0, /* tp_itemsize */
|
||||
/* methods */
|
||||
(destructor)iter_dealloc, /* tp_dealloc */
|
||||
@ -118,7 +117,7 @@ PyTypeObject PySeqIter_Type = {
|
||||
PyObject_GenericGetAttr, /* tp_getattro */
|
||||
0, /* tp_setattro */
|
||||
0, /* tp_as_buffer */
|
||||
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_GC, /* tp_flags */
|
||||
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,/* tp_flags */
|
||||
0, /* tp_doc */
|
||||
(traverseproc)iter_traverse, /* tp_traverse */
|
||||
0, /* tp_clear */
|
||||
@ -147,24 +146,23 @@ PyObject *
|
||||
PyCallIter_New(PyObject *callable, PyObject *sentinel)
|
||||
{
|
||||
calliterobject *it;
|
||||
it = PyObject_NEW(calliterobject, &PyCallIter_Type);
|
||||
it = PyObject_GC_New(calliterobject, &PyCallIter_Type);
|
||||
if (it == NULL)
|
||||
return NULL;
|
||||
Py_INCREF(callable);
|
||||
it->it_callable = callable;
|
||||
Py_INCREF(sentinel);
|
||||
it->it_sentinel = sentinel;
|
||||
PyObject_GC_Init(it);
|
||||
_PyObject_GC_TRACK(it);
|
||||
return (PyObject *)it;
|
||||
}
|
||||
static void
|
||||
calliter_dealloc(calliterobject *it)
|
||||
{
|
||||
PyObject_GC_Fini(it);
|
||||
_PyObject_GC_UNTRACK(it);
|
||||
Py_DECREF(it->it_callable);
|
||||
Py_DECREF(it->it_sentinel);
|
||||
it = (calliterobject *) PyObject_AS_GC(it);
|
||||
PyObject_DEL(it);
|
||||
PyObject_GC_Del(it);
|
||||
}
|
||||
|
||||
static int
|
||||
@ -218,7 +216,7 @@ PyTypeObject PyCallIter_Type = {
|
||||
PyObject_HEAD_INIT(&PyType_Type)
|
||||
0, /* ob_size */
|
||||
"callable-iterator", /* tp_name */
|
||||
sizeof(calliterobject) + PyGC_HEAD_SIZE,/* tp_basicsize */
|
||||
sizeof(calliterobject), /* tp_basicsize */
|
||||
0, /* tp_itemsize */
|
||||
/* methods */
|
||||
(destructor)calliter_dealloc, /* tp_dealloc */
|
||||
@ -236,7 +234,7 @@ PyTypeObject PyCallIter_Type = {
|
||||
PyObject_GenericGetAttr, /* tp_getattro */
|
||||
0, /* tp_setattro */
|
||||
0, /* tp_as_buffer */
|
||||
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_GC, /* tp_flags */
|
||||
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,/* tp_flags */
|
||||
0, /* tp_doc */
|
||||
(traverseproc)calliter_traverse, /* tp_traverse */
|
||||
0, /* tp_clear */
|
||||
|
Loading…
Reference in New Issue
Block a user