From 009bc0f4bee5a39e08aaae6ef31c17e30f58bf91 Mon Sep 17 00:00:00 2001 From: Christian Tismer Date: Sat, 11 Sep 2021 15:51:02 +0200 Subject: Shiboken: Change type(SbkType_FromSpec) to PyType_Object This step prepares the transition of type generation to PyPy compatibility. [ChangeLog][shiboken6] SbkType_FromSpec() has been changed to return a PyType_Object *. Task-number: PYSIDE-535 Change-Id: I74e2e527e66a41f1a9f3f911f44d641139371889 Reviewed-by: Friedemann Kleint --- .../PySide6/QtQml/pysideqmlregistertype.cpp | 11 +++-------- sources/pyside6/libpyside/pysideclassinfo.cpp | 3 +-- sources/pyside6/libpyside/pysidemetafunction.cpp | 3 +-- sources/pyside6/libpyside/pysideproperty.cpp | 3 +-- sources/pyside6/libpyside/pysideqflags.cpp | 8 +------- sources/pyside6/libpyside/pysidesignal.cpp | 12 +++--------- sources/pyside6/libpyside/pysideslot.cpp | 3 +-- sources/pyside6/libpyside/pysideweakref.cpp | 3 +-- sources/shiboken6/libshiboken/basewrapper.cpp | 22 ++++++++++------------ sources/shiboken6/libshiboken/basewrapper.h | 4 ++-- sources/shiboken6/libshiboken/sbkenum.cpp | 6 +++--- sources/shiboken6/libshiboken/voidptr.cpp | 2 +- 12 files changed, 28 insertions(+), 52 deletions(-) diff --git a/sources/pyside6/PySide6/QtQml/pysideqmlregistertype.cpp b/sources/pyside6/PySide6/QtQml/pysideqmlregistertype.cpp index 82824c77a..aa89579be 100644 --- a/sources/pyside6/PySide6/QtQml/pysideqmlregistertype.cpp +++ b/sources/pyside6/PySide6/QtQml/pysideqmlregistertype.cpp @@ -405,12 +405,8 @@ static PyType_Spec PropertyListType_spec = { PyTypeObject *PropertyListTypeF(void) { - static PyTypeObject *type = nullptr; - if (!type) { - PyObject *bases = Py_BuildValue("(O)", PySidePropertyTypeF()); - type = (PyTypeObject *)SbkType_FromSpecWithBases(&PropertyListType_spec, bases); - Py_XDECREF(bases); - } + static Shiboken::AutoDecRef bases(Py_BuildValue("(O)", PySidePropertyTypeF())); + static auto *type = SbkType_FromSpecWithBases(&PropertyListType_spec, bases); return type; } @@ -674,8 +670,7 @@ static PyType_Spec QtQml_VolatileBoolType_spec = { PyTypeObject *QtQml_VolatileBoolTypeF(void) { - static PyTypeObject *type = reinterpret_cast( - SbkType_FromSpec(&QtQml_VolatileBoolType_spec)); + static auto *type = SbkType_FromSpec(&QtQml_VolatileBoolType_spec); return type; } diff --git a/sources/pyside6/libpyside/pysideclassinfo.cpp b/sources/pyside6/libpyside/pysideclassinfo.cpp index 01f72968d..beb2d6150 100644 --- a/sources/pyside6/libpyside/pysideclassinfo.cpp +++ b/sources/pyside6/libpyside/pysideclassinfo.cpp @@ -74,8 +74,7 @@ static PyType_Spec PySideClassInfoType_spec = { PyTypeObject *PySideClassInfoTypeF(void) { - static PyTypeObject *type = - reinterpret_cast(SbkType_FromSpec(&PySideClassInfoType_spec)); + static auto *type = SbkType_FromSpec(&PySideClassInfoType_spec); return type; } diff --git a/sources/pyside6/libpyside/pysidemetafunction.cpp b/sources/pyside6/libpyside/pysidemetafunction.cpp index e66732d78..64f50bc62 100644 --- a/sources/pyside6/libpyside/pysidemetafunction.cpp +++ b/sources/pyside6/libpyside/pysidemetafunction.cpp @@ -76,8 +76,7 @@ static PyType_Spec PySideMetaFunctionType_spec = { PyTypeObject *PySideMetaFunctionTypeF(void) { - static PyTypeObject *type = reinterpret_cast( - SbkType_FromSpec(&PySideMetaFunctionType_spec)); + static auto *type = SbkType_FromSpec(&PySideMetaFunctionType_spec); return type; } diff --git a/sources/pyside6/libpyside/pysideproperty.cpp b/sources/pyside6/libpyside/pysideproperty.cpp index ea0fba7e5..70c59a89a 100644 --- a/sources/pyside6/libpyside/pysideproperty.cpp +++ b/sources/pyside6/libpyside/pysideproperty.cpp @@ -118,8 +118,7 @@ static PyType_Spec PySidePropertyType_spec = { PyTypeObject *PySidePropertyTypeF(void) { - static PyTypeObject *type = reinterpret_cast( - SbkType_FromSpec(&PySidePropertyType_spec)); + static auto *type = SbkType_FromSpec(&PySidePropertyType_spec); return type; } diff --git a/sources/pyside6/libpyside/pysideqflags.cpp b/sources/pyside6/libpyside/pysideqflags.cpp index 9e1ad6142..08b7e1479 100644 --- a/sources/pyside6/libpyside/pysideqflags.cpp +++ b/sources/pyside6/libpyside/pysideqflags.cpp @@ -183,13 +183,7 @@ namespace QFlags SbkNewQFlagsType_slots[idx].pfunc = numberMethods[idx].pfunc; } newspec.slots = SbkNewQFlagsType_spec.slots; - PyTypeObject *type = (PyTypeObject *)SbkType_FromSpec(&newspec); - Py_TYPE(type) = &PyType_Type; - - if (PyType_Ready(type) < 0) - return nullptr; - - return type; + return SbkType_FromSpec(&newspec); } PySideQFlagsObject *newObject(long value, PyTypeObject *type) diff --git a/sources/pyside6/libpyside/pysidesignal.cpp b/sources/pyside6/libpyside/pysidesignal.cpp index c565ca99a..2ecae7287 100644 --- a/sources/pyside6/libpyside/pysidesignal.cpp +++ b/sources/pyside6/libpyside/pysidesignal.cpp @@ -129,7 +129,7 @@ static PyType_Slot PySideMetaSignalType_slots[] = { static PyType_Spec PySideMetaSignalType_spec = { "2:PySide6.QtCore.MetaSignal", 0, - // sizeof(PyHeapTypeObject) is filled in by SbkType_FromSpecWithBases + // sizeof(PyHeapTypeObject) is filled in by SbkType_FromSpec // which calls PyType_Ready which calls inherit_special. 0, Py_TPFLAGS_DEFAULT, @@ -139,12 +139,7 @@ static PyType_Spec PySideMetaSignalType_spec = { static PyTypeObject *PySideMetaSignalTypeF(void) { - static PyTypeObject *type = nullptr; - if (!type) { - PyObject *bases = Py_BuildValue("(O)", &PyType_Type); - type = (PyTypeObject *)SbkType_FromSpecWithBases(&PySideMetaSignalType_spec, bases); - Py_XDECREF(bases); - } + static auto *type = SbkType_FromSpec(&PySideMetaSignalType_spec); return type; } @@ -209,8 +204,7 @@ static PyType_Spec PySideSignalInstanceType_spec = { PyTypeObject *PySideSignalInstanceTypeF(void) { - static PyTypeObject *type = - reinterpret_cast(SbkType_FromSpec(&PySideSignalInstanceType_spec)); + static auto *type = SbkType_FromSpec(&PySideSignalInstanceType_spec); return type; } diff --git a/sources/pyside6/libpyside/pysideslot.cpp b/sources/pyside6/libpyside/pysideslot.cpp index cd81a9a39..bad94db6b 100644 --- a/sources/pyside6/libpyside/pysideslot.cpp +++ b/sources/pyside6/libpyside/pysideslot.cpp @@ -87,8 +87,7 @@ static PyType_Spec PySideSlotType_spec = { static PyTypeObject *PySideSlotTypeF() { - static PyTypeObject *type = reinterpret_cast( - SbkType_FromSpec(&PySideSlotType_spec)); + static auto *type = SbkType_FromSpec(&PySideSlotType_spec); return type; } diff --git a/sources/pyside6/libpyside/pysideweakref.cpp b/sources/pyside6/libpyside/pysideweakref.cpp index bf37bbab7..ef34826f2 100644 --- a/sources/pyside6/libpyside/pysideweakref.cpp +++ b/sources/pyside6/libpyside/pysideweakref.cpp @@ -67,8 +67,7 @@ static PyType_Spec PySideCallableObjectType_spec = { static PyTypeObject *PySideCallableObjectTypeF() { - static PyTypeObject *type = - reinterpret_cast(SbkType_FromSpec(&PySideCallableObjectType_spec)); + static auto *type = SbkType_FromSpec(&PySideCallableObjectType_spec); return type; } diff --git a/sources/shiboken6/libshiboken/basewrapper.cpp b/sources/shiboken6/libshiboken/basewrapper.cpp index af3fabd16..f72951dd1 100644 --- a/sources/shiboken6/libshiboken/basewrapper.cpp +++ b/sources/shiboken6/libshiboken/basewrapper.cpp @@ -162,8 +162,8 @@ static PyType_Spec SbkObjectType_Type_spec = { PyTypeObject *SbkObjectType_TypeF(void) { - static auto type = SbkType_FromSpec(&SbkObjectType_Type_spec); - return reinterpret_cast(type); + static auto *type = SbkType_FromSpec(&SbkObjectType_Type_spec); + return type; } static PyObject *SbkObjectGetDict(PyObject *pObj, void *) @@ -606,12 +606,12 @@ PyObject *SbkDummyNew(PyTypeObject *type, PyObject *, PyObject *) return nullptr; } -PyObject *SbkType_FromSpec(PyType_Spec *spec) +PyTypeObject *SbkType_FromSpec(PyType_Spec *spec) { return SbkType_FromSpecWithBases(spec, nullptr); } -PyObject *SbkType_FromSpecWithBases(PyType_Spec *spec, PyObject *bases) +PyTypeObject *SbkType_FromSpecWithBases(PyType_Spec *spec, PyObject *bases) { // PYSIDE-1286: Generate correct __module__ and __qualname__ // The name field can now be extended by an "n:" prefix which is @@ -630,8 +630,8 @@ PyObject *SbkType_FromSpecWithBases(PyType_Spec *spec, PyObject *bases) int package_level = atoi(spec->name); const char *mod = new_spec.name = colon + 1; - PyObject *type = PyType_FromSpecWithBases(&new_spec, bases); - if (type == nullptr) + PyObject *obType = PyType_FromSpecWithBases(&new_spec, bases); + if (obType == nullptr) return nullptr; const char *qual = mod; @@ -644,11 +644,11 @@ PyObject *SbkType_FromSpecWithBases(PyType_Spec *spec, PyObject *bases) int mlen = qual - mod - 1; Shiboken::AutoDecRef module(Shiboken::String::fromCString(mod, mlen)); Shiboken::AutoDecRef qualname(Shiboken::String::fromCString(qual)); - if (PyObject_SetAttr(type, Shiboken::PyMagicName::module(), module) < 0) + if (PyObject_SetAttr(obType, Shiboken::PyMagicName::module(), module) < 0) return nullptr; - if (PyObject_SetAttr(type, Shiboken::PyMagicName::qualname(), qualname) < 0) + if (PyObject_SetAttr(obType, Shiboken::PyMagicName::qualname(), qualname) < 0) return nullptr; - return type; + return reinterpret_cast(obType); } // PYSIDE-74: Fallback used in all types now. @@ -930,7 +930,7 @@ introduceWrapperType(PyObject *enclosingObject, { typeSpec->slots[0].pfunc = reinterpret_cast(baseType ? baseType : SbkObject_TypeF()); - PyObject *heaptype = SbkType_FromSpecWithBases(typeSpec, baseTypes); + auto *heaptype = SbkType_FromSpecWithBases(typeSpec, baseTypes); Py_TYPE(heaptype) = SbkObjectType_TypeF(); Py_INCREF(Py_TYPE(heaptype)); auto *type = reinterpret_cast(heaptype); @@ -944,8 +944,6 @@ introduceWrapperType(PyObject *enclosingObject, BindingManager::instance().addClassInheritance(baseType, type); } } - if (PyType_Ready(type) < 0) - return nullptr; auto sotp = PepType_SOTP(type); if (wrapperFlags & DeleteInMainThread) diff --git a/sources/shiboken6/libshiboken/basewrapper.h b/sources/shiboken6/libshiboken/basewrapper.h index 3fc25a15e..010870f55 100644 --- a/sources/shiboken6/libshiboken/basewrapper.h +++ b/sources/shiboken6/libshiboken/basewrapper.h @@ -138,8 +138,8 @@ LIBSHIBOKEN_API PyObject *MakeQAppWrapper(PyTypeObject *type); LIBSHIBOKEN_API PyObject *SbkDummyNew(PyTypeObject *type, PyObject *, PyObject *); /// PYSIDE-1286: Generate correct __module__ and __qualname__ -LIBSHIBOKEN_API PyObject *SbkType_FromSpec(PyType_Spec *); -LIBSHIBOKEN_API PyObject *SbkType_FromSpecWithBases(PyType_Spec *, PyObject *); +LIBSHIBOKEN_API PyTypeObject *SbkType_FromSpec(PyType_Spec *); +LIBSHIBOKEN_API PyTypeObject *SbkType_FromSpecWithBases(PyType_Spec *, PyObject *); /// PYSIDE-74: Fallback used in all types now. LIBSHIBOKEN_API PyObject *FallbackRichCompare(PyObject *self, PyObject *other, int op); diff --git a/sources/shiboken6/libshiboken/sbkenum.cpp b/sources/shiboken6/libshiboken/sbkenum.cpp index aaa070704..bf9c80303 100644 --- a/sources/shiboken6/libshiboken/sbkenum.cpp +++ b/sources/shiboken6/libshiboken/sbkenum.cpp @@ -282,8 +282,8 @@ static PyType_Spec SbkEnumType_Type_spec = { PyTypeObject *SbkEnumType_TypeF(void) { - static PyObject *obType = SbkType_FromSpec(&SbkEnumType_Type_spec); - return reinterpret_cast(obType); + static auto *type = SbkType_FromSpec(&SbkEnumType_Type_spec); + return type; } void SbkEnumTypeDealloc(PyObject *pyObj) @@ -613,7 +613,7 @@ static PyType_Spec SbkNewEnum_spec = { static PyTypeObject *SbkEnum_TypeF() { static auto type = SbkType_FromSpec(&SbkNewEnum_spec); - return reinterpret_cast(type); + return type; } namespace Shiboken { namespace Enum { diff --git a/sources/shiboken6/libshiboken/voidptr.cpp b/sources/shiboken6/libshiboken/voidptr.cpp index a7eeb359c..ff6f6cfd5 100644 --- a/sources/shiboken6/libshiboken/voidptr.cpp +++ b/sources/shiboken6/libshiboken/voidptr.cpp @@ -320,7 +320,7 @@ PyTypeObject *SbkVoidPtrTypeF(void) { static PyTypeObject *type = nullptr; if (!type) { - type = reinterpret_cast(SbkType_FromSpec(&SbkVoidPtrType_spec)); + type = SbkType_FromSpec(&SbkVoidPtrType_spec); PepType_AS_BUFFER(type) = &SbkVoidPtrObjectBufferProc; } return type; -- cgit v1.2.3