mirror of https://github.com/python/cpython
bpo-39573: Add Py_SET_TYPE() function (GH-18394)
Add Py_SET_TYPE() function to set the type of an object.
This commit is contained in:
parent
daa9756cb6
commit
d2ec81a8c9
|
@ -70,6 +70,13 @@ the definition of all other Python objects.
|
||||||
(((PyObject*)(o))->ob_type)
|
(((PyObject*)(o))->ob_type)
|
||||||
|
|
||||||
|
|
||||||
|
.. c:function:: void Py_SET_TYPE(PyObject *o, PyTypeObject *type)
|
||||||
|
|
||||||
|
Set the object *o* type to *type*.
|
||||||
|
|
||||||
|
.. versionadded:: 3.9
|
||||||
|
|
||||||
|
|
||||||
.. c:macro:: Py_REFCNT(o)
|
.. c:macro:: Py_REFCNT(o)
|
||||||
|
|
||||||
This macro is used to access the :attr:`ob_refcnt` member of a Python
|
This macro is used to access the :attr:`ob_refcnt` member of a Python
|
||||||
|
|
|
@ -15,7 +15,7 @@ static inline PyObject*
|
||||||
_PyObject_INIT(PyObject *op, PyTypeObject *typeobj)
|
_PyObject_INIT(PyObject *op, PyTypeObject *typeobj)
|
||||||
{
|
{
|
||||||
assert(op != NULL);
|
assert(op != NULL);
|
||||||
Py_TYPE(op) = typeobj;
|
Py_SET_TYPE(op, typeobj);
|
||||||
if (PyType_GetFlags(typeobj) & Py_TPFLAGS_HEAPTYPE) {
|
if (PyType_GetFlags(typeobj) & Py_TPFLAGS_HEAPTYPE) {
|
||||||
Py_INCREF(typeobj);
|
Py_INCREF(typeobj);
|
||||||
}
|
}
|
||||||
|
|
|
@ -128,6 +128,12 @@ static inline void _Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
|
||||||
}
|
}
|
||||||
#define Py_SET_REFCNT(ob, refcnt) _Py_SET_REFCNT(_PyObject_CAST(ob), refcnt)
|
#define Py_SET_REFCNT(ob, refcnt) _Py_SET_REFCNT(_PyObject_CAST(ob), refcnt)
|
||||||
|
|
||||||
|
static inline void _Py_SET_TYPE(PyObject *ob, PyTypeObject *type) {
|
||||||
|
ob->ob_type = type;
|
||||||
|
}
|
||||||
|
#define Py_SET_TYPE(ob, type) _Py_SET_TYPE(_PyObject_CAST(ob), type)
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Type objects contain a string containing the type name (to help somewhat
|
Type objects contain a string containing the type name (to help somewhat
|
||||||
in debugging), the allocation parameters (see PyObject_New() and
|
in debugging), the allocation parameters (see PyObject_New() and
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Add :c:func:`Py_SET_TYPE` function to set the type of an object.
|
|
@ -62,7 +62,7 @@ PyInit__blake2(void)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
/* BLAKE2b */
|
/* BLAKE2b */
|
||||||
Py_TYPE(&PyBlake2_BLAKE2bType) = &PyType_Type;
|
Py_SET_TYPE(&PyBlake2_BLAKE2bType, &PyType_Type);
|
||||||
if (PyType_Ready(&PyBlake2_BLAKE2bType) < 0) {
|
if (PyType_Ready(&PyBlake2_BLAKE2bType) < 0) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -82,7 +82,7 @@ PyInit__blake2(void)
|
||||||
PyModule_AddIntConstant(m, "BLAKE2B_MAX_DIGEST_SIZE", BLAKE2B_OUTBYTES);
|
PyModule_AddIntConstant(m, "BLAKE2B_MAX_DIGEST_SIZE", BLAKE2B_OUTBYTES);
|
||||||
|
|
||||||
/* BLAKE2s */
|
/* BLAKE2s */
|
||||||
Py_TYPE(&PyBlake2_BLAKE2sType) = &PyType_Type;
|
Py_SET_TYPE(&PyBlake2_BLAKE2sType, &PyType_Type);
|
||||||
if (PyType_Ready(&PyBlake2_BLAKE2sType) < 0) {
|
if (PyType_Ready(&PyBlake2_BLAKE2sType) < 0) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -5758,42 +5758,42 @@ PyInit__ctypes(void)
|
||||||
if (PyType_Ready(&PyCData_Type) < 0)
|
if (PyType_Ready(&PyCData_Type) < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
Py_TYPE(&Struct_Type) = &PyCStructType_Type;
|
Py_SET_TYPE(&Struct_Type, &PyCStructType_Type);
|
||||||
Struct_Type.tp_base = &PyCData_Type;
|
Struct_Type.tp_base = &PyCData_Type;
|
||||||
if (PyType_Ready(&Struct_Type) < 0)
|
if (PyType_Ready(&Struct_Type) < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
Py_INCREF(&Struct_Type);
|
Py_INCREF(&Struct_Type);
|
||||||
PyModule_AddObject(m, "Structure", (PyObject *)&Struct_Type);
|
PyModule_AddObject(m, "Structure", (PyObject *)&Struct_Type);
|
||||||
|
|
||||||
Py_TYPE(&Union_Type) = &UnionType_Type;
|
Py_SET_TYPE(&Union_Type, &UnionType_Type);
|
||||||
Union_Type.tp_base = &PyCData_Type;
|
Union_Type.tp_base = &PyCData_Type;
|
||||||
if (PyType_Ready(&Union_Type) < 0)
|
if (PyType_Ready(&Union_Type) < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
Py_INCREF(&Union_Type);
|
Py_INCREF(&Union_Type);
|
||||||
PyModule_AddObject(m, "Union", (PyObject *)&Union_Type);
|
PyModule_AddObject(m, "Union", (PyObject *)&Union_Type);
|
||||||
|
|
||||||
Py_TYPE(&PyCPointer_Type) = &PyCPointerType_Type;
|
Py_SET_TYPE(&PyCPointer_Type, &PyCPointerType_Type);
|
||||||
PyCPointer_Type.tp_base = &PyCData_Type;
|
PyCPointer_Type.tp_base = &PyCData_Type;
|
||||||
if (PyType_Ready(&PyCPointer_Type) < 0)
|
if (PyType_Ready(&PyCPointer_Type) < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
Py_INCREF(&PyCPointer_Type);
|
Py_INCREF(&PyCPointer_Type);
|
||||||
PyModule_AddObject(m, "_Pointer", (PyObject *)&PyCPointer_Type);
|
PyModule_AddObject(m, "_Pointer", (PyObject *)&PyCPointer_Type);
|
||||||
|
|
||||||
Py_TYPE(&PyCArray_Type) = &PyCArrayType_Type;
|
Py_SET_TYPE(&PyCArray_Type, &PyCArrayType_Type);
|
||||||
PyCArray_Type.tp_base = &PyCData_Type;
|
PyCArray_Type.tp_base = &PyCData_Type;
|
||||||
if (PyType_Ready(&PyCArray_Type) < 0)
|
if (PyType_Ready(&PyCArray_Type) < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
Py_INCREF(&PyCArray_Type);
|
Py_INCREF(&PyCArray_Type);
|
||||||
PyModule_AddObject(m, "Array", (PyObject *)&PyCArray_Type);
|
PyModule_AddObject(m, "Array", (PyObject *)&PyCArray_Type);
|
||||||
|
|
||||||
Py_TYPE(&Simple_Type) = &PyCSimpleType_Type;
|
Py_SET_TYPE(&Simple_Type, &PyCSimpleType_Type);
|
||||||
Simple_Type.tp_base = &PyCData_Type;
|
Simple_Type.tp_base = &PyCData_Type;
|
||||||
if (PyType_Ready(&Simple_Type) < 0)
|
if (PyType_Ready(&Simple_Type) < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
Py_INCREF(&Simple_Type);
|
Py_INCREF(&Simple_Type);
|
||||||
PyModule_AddObject(m, "_SimpleCData", (PyObject *)&Simple_Type);
|
PyModule_AddObject(m, "_SimpleCData", (PyObject *)&Simple_Type);
|
||||||
|
|
||||||
Py_TYPE(&PyCFuncPtr_Type) = &PyCFuncPtrType_Type;
|
Py_SET_TYPE(&PyCFuncPtr_Type, &PyCFuncPtrType_Type);
|
||||||
PyCFuncPtr_Type.tp_base = &PyCData_Type;
|
PyCFuncPtr_Type.tp_base = &PyCData_Type;
|
||||||
if (PyType_Ready(&PyCFuncPtr_Type) < 0)
|
if (PyType_Ready(&PyCFuncPtr_Type) < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -68,7 +68,7 @@ typedef struct {
|
||||||
ffi_type *atypes[1];
|
ffi_type *atypes[1];
|
||||||
} CThunkObject;
|
} CThunkObject;
|
||||||
extern PyTypeObject PyCThunk_Type;
|
extern PyTypeObject PyCThunk_Type;
|
||||||
#define CThunk_CheckExact(v) ((v)->ob_type == &PyCThunk_Type)
|
#define CThunk_CheckExact(v) (Py_TYPE(v) == &PyCThunk_Type)
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
/* First part identical to tagCDataObject */
|
/* First part identical to tagCDataObject */
|
||||||
|
|
|
@ -713,7 +713,7 @@ PyInit__sha3(void)
|
||||||
|
|
||||||
#define init_sha3type(name, type) \
|
#define init_sha3type(name, type) \
|
||||||
do { \
|
do { \
|
||||||
Py_TYPE(type) = &PyType_Type; \
|
Py_SET_TYPE(type, &PyType_Type); \
|
||||||
if (PyType_Ready(type) < 0) { \
|
if (PyType_Ready(type) < 0) { \
|
||||||
goto error; \
|
goto error; \
|
||||||
} \
|
} \
|
||||||
|
|
|
@ -78,6 +78,6 @@ PyTypeObject pysqlite_PrepareProtocolType= {
|
||||||
extern int pysqlite_prepare_protocol_setup_types(void)
|
extern int pysqlite_prepare_protocol_setup_types(void)
|
||||||
{
|
{
|
||||||
pysqlite_PrepareProtocolType.tp_new = PyType_GenericNew;
|
pysqlite_PrepareProtocolType.tp_new = PyType_GenericNew;
|
||||||
Py_TYPE(&pysqlite_PrepareProtocolType)= &PyType_Type;
|
Py_SET_TYPE(&pysqlite_PrepareProtocolType, &PyType_Type);
|
||||||
return PyType_Ready(&pysqlite_PrepareProtocolType);
|
return PyType_Ready(&pysqlite_PrepareProtocolType);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2835,11 +2835,11 @@ PyInit__testbuffer(void)
|
||||||
if (m == NULL)
|
if (m == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
Py_TYPE(&NDArray_Type) = &PyType_Type;
|
Py_SET_TYPE(&NDArray_Type, &PyType_Type);
|
||||||
Py_INCREF(&NDArray_Type);
|
Py_INCREF(&NDArray_Type);
|
||||||
PyModule_AddObject(m, "ndarray", (PyObject *)&NDArray_Type);
|
PyModule_AddObject(m, "ndarray", (PyObject *)&NDArray_Type);
|
||||||
|
|
||||||
Py_TYPE(&StaticArray_Type) = &PyType_Type;
|
Py_SET_TYPE(&StaticArray_Type, &PyType_Type);
|
||||||
Py_INCREF(&StaticArray_Type);
|
Py_INCREF(&StaticArray_Type);
|
||||||
PyModule_AddObject(m, "staticarray", (PyObject *)&StaticArray_Type);
|
PyModule_AddObject(m, "staticarray", (PyObject *)&StaticArray_Type);
|
||||||
|
|
||||||
|
|
|
@ -6605,9 +6605,9 @@ PyInit__testcapi(void)
|
||||||
if (m == NULL)
|
if (m == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
Py_TYPE(&_HashInheritanceTester_Type)=&PyType_Type;
|
Py_SET_TYPE(&_HashInheritanceTester_Type, &PyType_Type);
|
||||||
|
|
||||||
Py_TYPE(&test_structmembersType)=&PyType_Type;
|
Py_SET_TYPE(&test_structmembersType, &PyType_Type);
|
||||||
Py_INCREF(&test_structmembersType);
|
Py_INCREF(&test_structmembersType);
|
||||||
/* don't use a name starting with "test", since we don't want
|
/* don't use a name starting with "test", since we don't want
|
||||||
test_capi to automatically call this */
|
test_capi to automatically call this */
|
||||||
|
|
|
@ -2996,7 +2996,7 @@ array_modexec(PyObject *m)
|
||||||
|
|
||||||
if (PyType_Ready(&Arraytype) < 0)
|
if (PyType_Ready(&Arraytype) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
Py_TYPE(&PyArrayIter_Type) = &PyType_Type;
|
Py_SET_TYPE(&PyArrayIter_Type, &PyType_Type);
|
||||||
|
|
||||||
Py_INCREF((PyObject *)&Arraytype);
|
Py_INCREF((PyObject *)&Arraytype);
|
||||||
if (PyModule_AddObject(m, "ArrayType", (PyObject *)&Arraytype) < 0) {
|
if (PyModule_AddObject(m, "ArrayType", (PyObject *)&Arraytype) < 0) {
|
||||||
|
|
|
@ -4750,14 +4750,16 @@ PyInit_itertools(void)
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
Py_TYPE(&teedataobject_type) = &PyType_Type;
|
Py_SET_TYPE(&teedataobject_type, &PyType_Type);
|
||||||
m = PyModule_Create(&itertoolsmodule);
|
m = PyModule_Create(&itertoolsmodule);
|
||||||
if (m == NULL)
|
if (m == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
for (i=0 ; typelist[i] != NULL ; i++) {
|
for (i=0 ; typelist[i] != NULL ; i++) {
|
||||||
if (PyType_Ready(typelist[i]) < 0)
|
if (PyType_Ready(typelist[i]) < 0) {
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
name = _PyType_Name(typelist[i]);
|
name = _PyType_Name(typelist[i]);
|
||||||
Py_INCREF(typelist[i]);
|
Py_INCREF(typelist[i]);
|
||||||
PyModule_AddObject(m, name, (PyObject *)typelist[i]);
|
PyModule_AddObject(m, name, (PyObject *)typelist[i]);
|
||||||
|
|
|
@ -572,13 +572,15 @@ PyInit__md5(void)
|
||||||
{
|
{
|
||||||
PyObject *m;
|
PyObject *m;
|
||||||
|
|
||||||
Py_TYPE(&MD5type) = &PyType_Type;
|
Py_SET_TYPE(&MD5type, &PyType_Type);
|
||||||
if (PyType_Ready(&MD5type) < 0)
|
if (PyType_Ready(&MD5type) < 0) {
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
m = PyModule_Create(&_md5module);
|
m = PyModule_Create(&_md5module);
|
||||||
if (m == NULL)
|
if (m == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
Py_INCREF((PyObject *)&MD5type);
|
Py_INCREF((PyObject *)&MD5type);
|
||||||
PyModule_AddObject(m, "MD5Type", (PyObject *)&MD5type);
|
PyModule_AddObject(m, "MD5Type", (PyObject *)&MD5type);
|
||||||
|
|
|
@ -549,13 +549,15 @@ PyInit__sha1(void)
|
||||||
{
|
{
|
||||||
PyObject *m;
|
PyObject *m;
|
||||||
|
|
||||||
Py_TYPE(&SHA1type) = &PyType_Type;
|
Py_SET_TYPE(&SHA1type, &PyType_Type);
|
||||||
if (PyType_Ready(&SHA1type) < 0)
|
if (PyType_Ready(&SHA1type) < 0) {
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
m = PyModule_Create(&_sha1module);
|
m = PyModule_Create(&_sha1module);
|
||||||
if (m == NULL)
|
if (m == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
Py_INCREF((PyObject *)&SHA1type);
|
Py_INCREF((PyObject *)&SHA1type);
|
||||||
PyModule_AddObject(m, "SHA1Type", (PyObject *)&SHA1type);
|
PyModule_AddObject(m, "SHA1Type", (PyObject *)&SHA1type);
|
||||||
|
|
|
@ -713,12 +713,14 @@ PyInit__sha256(void)
|
||||||
{
|
{
|
||||||
PyObject *m;
|
PyObject *m;
|
||||||
|
|
||||||
Py_TYPE(&SHA224type) = &PyType_Type;
|
Py_SET_TYPE(&SHA224type, &PyType_Type);
|
||||||
if (PyType_Ready(&SHA224type) < 0)
|
if (PyType_Ready(&SHA224type) < 0) {
|
||||||
return NULL;
|
return NULL;
|
||||||
Py_TYPE(&SHA256type) = &PyType_Type;
|
}
|
||||||
if (PyType_Ready(&SHA256type) < 0)
|
Py_SET_TYPE(&SHA256type, &PyType_Type);
|
||||||
|
if (PyType_Ready(&SHA256type) < 0) {
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
m = PyModule_Create(&_sha256module);
|
m = PyModule_Create(&_sha256module);
|
||||||
if (m == NULL)
|
if (m == NULL)
|
||||||
|
|
|
@ -778,16 +778,19 @@ PyInit__sha512(void)
|
||||||
{
|
{
|
||||||
PyObject *m;
|
PyObject *m;
|
||||||
|
|
||||||
Py_TYPE(&SHA384type) = &PyType_Type;
|
Py_SET_TYPE(&SHA384type, &PyType_Type);
|
||||||
if (PyType_Ready(&SHA384type) < 0)
|
if (PyType_Ready(&SHA384type) < 0) {
|
||||||
return NULL;
|
return NULL;
|
||||||
Py_TYPE(&SHA512type) = &PyType_Type;
|
}
|
||||||
if (PyType_Ready(&SHA512type) < 0)
|
Py_SET_TYPE(&SHA512type, &PyType_Type);
|
||||||
|
if (PyType_Ready(&SHA512type) < 0) {
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
m = PyModule_Create(&_sha512module);
|
m = PyModule_Create(&_sha512module);
|
||||||
if (m == NULL)
|
if (m == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
Py_INCREF((PyObject *)&SHA384type);
|
Py_INCREF((PyObject *)&SHA384type);
|
||||||
PyModule_AddObject(m, "SHA384Type", (PyObject *)&SHA384type);
|
PyModule_AddObject(m, "SHA384Type", (PyObject *)&SHA384type);
|
||||||
|
|
|
@ -7100,7 +7100,7 @@ PyInit__socket(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
Py_TYPE(&sock_type) = &PyType_Type;
|
Py_SET_TYPE(&sock_type, &PyType_Type);
|
||||||
m = PyModule_Create(&socketmodule);
|
m = PyModule_Create(&socketmodule);
|
||||||
if (m == NULL)
|
if (m == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -1455,7 +1455,7 @@ PyInit_unicodedata(void)
|
||||||
{
|
{
|
||||||
PyObject *m, *v;
|
PyObject *m, *v;
|
||||||
|
|
||||||
Py_TYPE(&UCD_Type) = &PyType_Type;
|
Py_SET_TYPE(&UCD_Type, &PyType_Type);
|
||||||
|
|
||||||
m = PyModule_Create(&unicodedatamodule);
|
m = PyModule_Create(&unicodedatamodule);
|
||||||
if (!m)
|
if (!m)
|
||||||
|
|
|
@ -221,7 +221,7 @@ float_dealloc(PyFloatObject *op)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
numfree++;
|
numfree++;
|
||||||
Py_TYPE(op) = (struct _typeobject *)free_list;
|
Py_SET_TYPE(op, (PyTypeObject *)free_list);
|
||||||
free_list = op;
|
free_list = op;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -52,7 +52,7 @@ PyModuleDef_Init(struct PyModuleDef* def)
|
||||||
if (def->m_base.m_index == 0) {
|
if (def->m_base.m_index == 0) {
|
||||||
max_module_number++;
|
max_module_number++;
|
||||||
Py_SET_REFCNT(def, 1);
|
Py_SET_REFCNT(def, 1);
|
||||||
Py_TYPE(def) = &PyModuleDef_Type;
|
Py_SET_TYPE(def, &PyModuleDef_Type);
|
||||||
def->m_base.m_index = max_module_number;
|
def->m_base.m_index = max_module_number;
|
||||||
}
|
}
|
||||||
return (PyObject*)def;
|
return (PyObject*)def;
|
||||||
|
|
|
@ -144,7 +144,7 @@ PyObject_Init(PyObject *op, PyTypeObject *tp)
|
||||||
return PyErr_NoMemory();
|
return PyErr_NoMemory();
|
||||||
}
|
}
|
||||||
|
|
||||||
Py_TYPE(op) = tp;
|
Py_SET_TYPE(op, tp);
|
||||||
if (PyType_GetFlags(tp) & Py_TPFLAGS_HEAPTYPE) {
|
if (PyType_GetFlags(tp) & Py_TPFLAGS_HEAPTYPE) {
|
||||||
Py_INCREF(tp);
|
Py_INCREF(tp);
|
||||||
}
|
}
|
||||||
|
|
|
@ -4097,9 +4097,10 @@ object_set_class(PyObject *self, PyObject *value, void *closure)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (compatible_for_assignment(oldto, newto, "__class__")) {
|
if (compatible_for_assignment(oldto, newto, "__class__")) {
|
||||||
if (newto->tp_flags & Py_TPFLAGS_HEAPTYPE)
|
if (newto->tp_flags & Py_TPFLAGS_HEAPTYPE) {
|
||||||
Py_INCREF(newto);
|
Py_INCREF(newto);
|
||||||
Py_TYPE(self) = newto;
|
}
|
||||||
|
Py_SET_TYPE(self, newto);
|
||||||
if (oldto->tp_flags & Py_TPFLAGS_HEAPTYPE)
|
if (oldto->tp_flags & Py_TPFLAGS_HEAPTYPE)
|
||||||
Py_DECREF(oldto);
|
Py_DECREF(oldto);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -5334,8 +5335,9 @@ PyType_Ready(PyTypeObject *type)
|
||||||
NULL when type is &PyBaseObject_Type, and we know its ob_type is
|
NULL when type is &PyBaseObject_Type, and we know its ob_type is
|
||||||
not NULL (it's initialized to &PyType_Type). But coverity doesn't
|
not NULL (it's initialized to &PyType_Type). But coverity doesn't
|
||||||
know that. */
|
know that. */
|
||||||
if (Py_TYPE(type) == NULL && base != NULL)
|
if (Py_TYPE(type) == NULL && base != NULL) {
|
||||||
Py_TYPE(type) = Py_TYPE(base);
|
Py_SET_TYPE(type, Py_TYPE(base));
|
||||||
|
}
|
||||||
|
|
||||||
/* Initialize tp_bases */
|
/* Initialize tp_bases */
|
||||||
bases = type->tp_bases;
|
bases = type->tp_bases;
|
||||||
|
|
|
@ -882,10 +882,12 @@ PyWeakref_NewProxy(PyObject *ob, PyObject *callback)
|
||||||
if (result != NULL) {
|
if (result != NULL) {
|
||||||
PyWeakReference *prev;
|
PyWeakReference *prev;
|
||||||
|
|
||||||
if (PyCallable_Check(ob))
|
if (PyCallable_Check(ob)) {
|
||||||
Py_TYPE(result) = &_PyWeakref_CallableProxyType;
|
Py_SET_TYPE(result, &_PyWeakref_CallableProxyType);
|
||||||
else
|
}
|
||||||
Py_TYPE(result) = &_PyWeakref_ProxyType;
|
else {
|
||||||
|
Py_SET_TYPE(result, &_PyWeakref_ProxyType);
|
||||||
|
}
|
||||||
get_basic_refs(*list, &ref, &proxy);
|
get_basic_refs(*list, &ref, &proxy);
|
||||||
if (callback == NULL) {
|
if (callback == NULL) {
|
||||||
if (proxy != NULL) {
|
if (proxy != NULL) {
|
||||||
|
|
Loading…
Reference in New Issue