- 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.
This commit is contained in:
Guido van Rossum 2002-04-08 01:38:42 +00:00
parent d1a3c8117d
commit 0986d8250f
2 changed files with 13 additions and 6 deletions

View File

@ -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,

View 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) {