]> granicus.if.org Git - python/commitdiff
- A type can now inherit its metatype from its base type. Previously,
authorGuido van Rossum <guido@python.org>
Mon, 8 Apr 2002 01:38:42 +0000 (01:38 +0000)
committerGuido van Rossum <guido@python.org>
Mon, 8 Apr 2002 01:38:42 +0000 (01:38 +0000)
  when PyType_Ready() was called, if ob_type was found to be NULL, it
  was always set to &PyType_Type; now it is set to base->ob_type,
  where base is tp_base, defaulting to &PyObject_Type.

- PyType_Ready() accidentally did not inherit tp_is_gc; now it does.

Bugfix candidate.

Misc/NEWS
Objects/typeobject.c

index 4923dce9617de98c6b9b92f6e9525962fbfe1a8d..bb5792cd662a36ffdcacd585da433b6175c74f69 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -123,6 +123,13 @@ Build
 
 C API
 
+- A type can now inherit its metatype from its base type.  Previously,
+  when PyType_Ready() was called, if ob_type was found to be NULL, it
+  was always set to &PyType_Type; now it is set to base->ob_type,
+  where base is tp_base, defaulting to &PyObject_Type.
+
+- PyType_Ready() accidentally did not inherit tp_is_gc; now it does.
+
 - Objects allocated using the new PyMalloc_New and PyMalloc_NewVar
   functions will be allocated using pymalloc if it is enabled.  These
   objects should be deallocated using PyMalloc_Del.  The PyObject_{New,
index 51ed4301fde2c54e30779ab09d392af2c80e399e..fff95b4a4aa9ceb8b3bc9cf300a458d0ebd794b5 100644 (file)
@@ -2050,17 +2050,17 @@ PyType_Ready(PyTypeObject *type)
 
        type->tp_flags |= Py_TPFLAGS_READYING;
 
-       /* Initialize ob_type if NULL.  This means extensions that want to be
-          compilable separately on Windows can call PyType_Ready() instead of
-          initializing the ob_type field of their type objects. */
-       if (type->ob_type == NULL)
-               type->ob_type = &PyType_Type;
-
        /* Initialize tp_base (defaults to BaseObject unless that's us) */
        base = type->tp_base;
        if (base == NULL && type != &PyBaseObject_Type)
                base = type->tp_base = &PyBaseObject_Type;
 
+       /* Initialize ob_type if NULL.  This means extensions that want to be
+          compilable separately on Windows can call PyType_Ready() instead of
+          initializing the ob_type field of their type objects. */
+       if (type->ob_type == NULL)
+               type->ob_type = base->ob_type;
+
        /* Initialize tp_bases */
        bases = type->tp_bases;
        if (bases == NULL) {