diff options
-rw-r--r-- | Misc/NEWS | 7 | ||||
-rw-r--r-- | Objects/typeobject.c | 12 |
2 files changed, 13 insertions, 6 deletions
@@ -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, diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 51ed430..fff95b4 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -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) { |