Mercurial > cpython-lru_cache-weakref
diff Python/ceval.c @ 18513:65afac84d4f7 legacy-trunk
GC for generator objects.
| author | Neil Schemenauer <nascheme@enme.ucalgary.ca> |
|---|---|
| date | Thu, 12 Jul 2001 13:27:49 +0000 |
| parents | 3b295ce2705f |
| children | fdb36a0c7e6e |
line wrap: on
line diff
--- a/Python/ceval.c Thu Jul 12 13:27:35 2001 +0000 +++ b/Python/ceval.c Thu Jul 12 13:27:49 2001 +0000 @@ -121,14 +121,22 @@ } gen->gi_frame = f; gen->gi_running = 0; + PyObject_GC_Init(gen); return (PyObject *)gen; } +static int +gen_traverse(genobject *gen, visitproc visit, void *arg) +{ + return visit((PyObject *)gen->gi_frame, arg); +} + static void gen_dealloc(genobject *gen) { + PyObject_GC_Fini(gen); Py_DECREF(gen->gi_frame); - PyObject_DEL(gen); + PyObject_Del(gen); } static PyObject * @@ -226,7 +234,7 @@ PyObject_HEAD_INIT(&PyType_Type) 0, /* ob_size */ "generator", /* tp_name */ - sizeof(genobject), /* tp_basicsize */ + sizeof(genobject) + PyGC_HEAD_SIZE, /* tp_basicsize */ 0, /* tp_itemsize */ /* methods */ (destructor)gen_dealloc, /* tp_dealloc */ @@ -244,9 +252,9 @@ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT, /* tp_flags */ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_GC, /* tp_flags */ 0, /* tp_doc */ - 0, /* tp_traverse */ + (traverseproc)gen_traverse, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */
