]> granicus.if.org Git - python/commitdiff
GC for generator objects.
authorNeil Schemenauer <nascheme@enme.ucalgary.ca>
Thu, 12 Jul 2001 13:27:49 +0000 (13:27 +0000)
committerNeil Schemenauer <nascheme@enme.ucalgary.ca>
Thu, 12 Jul 2001 13:27:49 +0000 (13:27 +0000)
Python/ceval.c

index 79eb0add7f76ff1d918c5e76fc5eaed35a52209e..f42165ed385f74188ec710c6eace5f935a1c9e2b 100644 (file)
@@ -121,14 +121,22 @@ gen_new(PyFrameObject *f)
        }
        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 @@ statichere PyTypeObject gentype = {
        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 @@ statichere PyTypeObject gentype = {
        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 */