aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Tismer <tismer@stackless.com>2021-09-11 15:51:02 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2021-09-13 19:03:22 +0000
commit009bc0f4bee5a39e08aaae6ef31c17e30f58bf91 (patch)
tree548afa419d4b4d0f4072beb576e29164cd930d52
parent99a7fe1dac829be9533f2cb9c284401b650a08a1 (diff)
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 <Friedemann.Kleint@qt.io>
-rw-r--r--sources/pyside6/PySide6/QtQml/pysideqmlregistertype.cpp11
-rw-r--r--sources/pyside6/libpyside/pysideclassinfo.cpp3
-rw-r--r--sources/pyside6/libpyside/pysidemetafunction.cpp3
-rw-r--r--sources/pyside6/libpyside/pysideproperty.cpp3
-rw-r--r--sources/pyside6/libpyside/pysideqflags.cpp8
-rw-r--r--sources/pyside6/libpyside/pysidesignal.cpp12
-rw-r--r--sources/pyside6/libpyside/pysideslot.cpp3
-rw-r--r--sources/pyside6/libpyside/pysideweakref.cpp3
-rw-r--r--sources/shiboken6/libshiboken/basewrapper.cpp22
-rw-r--r--sources/shiboken6/libshiboken/basewrapper.h4
-rw-r--r--sources/shiboken6/libshiboken/sbkenum.cpp6
-rw-r--r--sources/shiboken6/libshiboken/voidptr.cpp2
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<PyTypeObject *>(
- 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<PyTypeObject *>(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<PyTypeObject *>(
- 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<PyTypeObject *>(
- 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<PyTypeObject *>(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<PyTypeObject *>(
- 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<PyTypeObject *>(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<PyTypeObject *>(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<PyTypeObject *>(obType);
}
// PYSIDE-74: Fallback used in all types now.
@@ -930,7 +930,7 @@ introduceWrapperType(PyObject *enclosingObject,
{
typeSpec->slots[0].pfunc = reinterpret_cast<void *>(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<PyTypeObject *>(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<PyTypeObject *>(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<PyTypeObject *>(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<PyTypeObject *>(SbkType_FromSpec(&SbkVoidPtrType_spec));
+ type = SbkType_FromSpec(&SbkVoidPtrType_spec);
PepType_AS_BUFFER(type) = &SbkVoidPtrObjectBufferProc;
}
return type;