From 0986d8250f7ae4019c3e5b5c934dc0fd55f2b8de Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Mon, 8 Apr 2002 01:38:42 +0000 Subject: - 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. Bugfix candidate. --- Misc/NEWS | 7 +++++++ Objects/typeobject.c | 12 ++++++------ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS index 4923dce..bb5792c 100644 --- 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, 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) { -- cgit v0.12