mirror of https://github.com/python/cpython
- 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:
parent
d1a3c8117d
commit
0986d8250f
|
@ -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,
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue