[Python-Dev] A little GC confusion (original) (raw)

David Abrahams David Abrahams" <david.abrahams@rcn.com
Fri, 22 Feb 2002 07:34:23 -0500


----- Original Message ----- From: "Martin v. Loewis" <martin@v.loewis.de>

"Jason Orendorff" <jason@jorendorff.com> writes:

> I think David is asking about line 1404 of Objects/typeobject.c, > where it says that PyTypeType is PyTPFLAGSHAVEGC. > How can it have GC when many instances are static objects, not > allocated with PyObjectGCVarNew()? Because the type type implements tpisgc (typeobject.c:1378), declaring static type objects as not being gc. In turn, garbage collection will not attempt to look at the GC header of these type objects.

Aha! And the implementation is...

static int type_is_gc(PyTypeObject *type) { return type->tp_flags & Py_TPFLAGS_HEAPTYPE; }

so, wouldn't it make more sense that the Python source always checks Py_TPFLAGS_HEAPTYPE before tp_is_gc?

Also, is there any guideline for which type slots get automatically copied from the base type? Since my slots are nearly all zero I expected to inherit most of the slots from type_type.

-Dave