diff options
| -rw-r--r-- | sources/shiboken6/generator/shiboken/cppgenerator_container.cpp | 7 | ||||
| -rw-r--r-- | sources/shiboken6/libshiboken/basewrapper.cpp | 13 | ||||
| -rw-r--r-- | sources/shiboken6/libshiboken/sbktypefactory.cpp | 28 | ||||
| -rw-r--r-- | sources/shiboken6/libshiboken/sbktypefactory.h | 14 | ||||
| -rw-r--r-- | sources/shiboken6/libshiboken/voidptr.cpp | 7 |
5 files changed, 29 insertions, 40 deletions
diff --git a/sources/shiboken6/generator/shiboken/cppgenerator_container.cpp b/sources/shiboken6/generator/shiboken/cppgenerator_container.cpp index eab57bcc0..1fa7fc463 100644 --- a/sources/shiboken6/generator/shiboken/cppgenerator_container.cpp +++ b/sources/shiboken6/generator/shiboken/cppgenerator_container.cpp @@ -202,9 +202,10 @@ CppGenerator::OpaqueContainerData // type creation function that sets a key in the type dict. const QString typeCreationFName = u"create"_qs + result.name + u"Type"_qs; s << "static inline PyTypeObject *" << typeCreationFName << "()\n{\n" << indent - << "static auto *name = Shiboken::PyMagicName::opaque_container();\n" - << "static auto *opaque_entry = Py_BuildValue(\"{O:O}\", name, Py_True);\n" - << "static auto *result = SbkType_FromSpecAddDict(&" << specName << ", opaque_entry);\n" + << "auto *result = reinterpret_cast<PyTypeObject *>(SbkType_FromSpec(&" + << specName << "));\nPy_INCREF(Py_True);\n" + << "PyDict_SetItem(result->tp_dict, " + "Shiboken::PyMagicName::opaque_container(), Py_True);\n" << "return result;\n" << outdent << "}\n\n"; // typeF() function diff --git a/sources/shiboken6/libshiboken/basewrapper.cpp b/sources/shiboken6/libshiboken/basewrapper.cpp index cc62205b7..cd93d49b7 100644 --- a/sources/shiboken6/libshiboken/basewrapper.cpp +++ b/sources/shiboken6/libshiboken/basewrapper.cpp @@ -255,13 +255,12 @@ static const char *SbkObject_SignatureStrings[] = { PyTypeObject *SbkObject_TypeF(void) { - static auto *type = SbkType_FromSpec_BMDWBD(&SbkObject_Type_spec, - nullptr, // bases - SbkObjectType_TypeF(), - offsetof(SbkObject, ob_dict), - offsetof(SbkObject, weakreflist), - nullptr, // bufferprocs - nullptr); // add to tp_dict + static auto *type = SbkType_FromSpec_BMDWB(&SbkObject_Type_spec, + nullptr, // bases + SbkObjectType_TypeF(), + offsetof(SbkObject, ob_dict), + offsetof(SbkObject, weakreflist), + nullptr); // bufferprocs return type; } diff --git a/sources/shiboken6/libshiboken/sbktypefactory.cpp b/sources/shiboken6/libshiboken/sbktypefactory.cpp index 08d6775f4..5efd45a2f 100644 --- a/sources/shiboken6/libshiboken/sbktypefactory.cpp +++ b/sources/shiboken6/libshiboken/sbktypefactory.cpp @@ -45,27 +45,22 @@ extern "C" PyTypeObject *SbkType_FromSpec(PyType_Spec *spec) { - return SbkType_FromSpec_BMDWBD(spec, nullptr, nullptr, 0, 0, nullptr, nullptr); -} - -PyTypeObject *SbkType_FromSpecAddDict(PyType_Spec *spec, PyObject *dict_add) -{ - return SbkType_FromSpec_BMDWBD(spec, nullptr, nullptr, 0, 0, nullptr, dict_add); + return SbkType_FromSpec_BMDWB(spec, nullptr, nullptr, 0, 0, nullptr); } PyTypeObject *SbkType_FromSpecWithMeta(PyType_Spec *spec, PyTypeObject *meta) { - return SbkType_FromSpec_BMDWBD(spec, nullptr, meta, 0, 0, nullptr, nullptr); + return SbkType_FromSpec_BMDWB(spec, nullptr, meta, 0, 0, nullptr); } PyTypeObject *SbkType_FromSpecWithBases(PyType_Spec *spec, PyObject *bases) { - return SbkType_FromSpec_BMDWBD(spec, bases, nullptr, 0, 0, nullptr, nullptr); + return SbkType_FromSpec_BMDWB(spec, bases, nullptr, 0, 0, nullptr); } PyTypeObject *SbkType_FromSpecBasesMeta(PyType_Spec *spec, PyObject *bases, PyTypeObject *meta) { - return SbkType_FromSpec_BMDWBD(spec, bases, meta, 0, 0, nullptr, nullptr); + return SbkType_FromSpec_BMDWB(spec, bases, meta, 0, 0, nullptr); } #ifdef PYPY_VERSION @@ -78,13 +73,12 @@ static PyObject *_PyType_FromSpecWithBases(PyType_Spec *, PyObject *); #endif // PYPY_VERSION -PyTypeObject *SbkType_FromSpec_BMDWBD(PyType_Spec *spec, - PyObject *bases, - PyTypeObject *meta, - int dictoffset, - int weaklistoffset, - PyBufferProcs *bufferprocs, - PyObject *dict_add) +PyTypeObject *SbkType_FromSpec_BMDWB(PyType_Spec *spec, + PyObject *bases, + PyTypeObject *meta, + int dictoffset, + int weaklistoffset, + PyBufferProcs *bufferprocs) { // PYSIDE-1286: Generate correct __module__ and __qualname__ // The name field can now be extended by an "n:" prefix which is @@ -134,8 +128,6 @@ PyTypeObject *SbkType_FromSpec_BMDWBD(PyType_Spec *spec, type->tp_weaklistoffset = weaklistoffset; if (bufferprocs) PepType_AS_BUFFER(type) = bufferprocs; - if (dict_add) - PyDict_Update(reinterpret_cast<PyObject *>(type->tp_dict), dict_add); #ifdef PYPY_VERSION // PYSIDE-535: Careful: Using PyObject_SetAttr would have the side-effect of calling diff --git a/sources/shiboken6/libshiboken/sbktypefactory.h b/sources/shiboken6/libshiboken/sbktypefactory.h index f17427052..3d25f4eef 100644 --- a/sources/shiboken6/libshiboken/sbktypefactory.h +++ b/sources/shiboken6/libshiboken/sbktypefactory.h @@ -47,17 +47,15 @@ extern "C" // PYSIDE-535: Encapsulation of PyType_FromSpec special-cased for PyPy LIBSHIBOKEN_API PyTypeObject *SbkType_FromSpec(PyType_Spec *); -LIBSHIBOKEN_API PyTypeObject *SbkType_FromSpecAddDict(PyType_Spec *, PyObject *); LIBSHIBOKEN_API PyTypeObject *SbkType_FromSpecWithMeta(PyType_Spec *, PyTypeObject *); LIBSHIBOKEN_API PyTypeObject *SbkType_FromSpecWithBases(PyType_Spec *, PyObject *); LIBSHIBOKEN_API PyTypeObject *SbkType_FromSpecBasesMeta(PyType_Spec *, PyObject *, PyTypeObject *); -LIBSHIBOKEN_API PyTypeObject *SbkType_FromSpec_BMDWBD(PyType_Spec *spec, - PyObject *bases, - PyTypeObject *meta, - int dictoffset, - int weaklistoffset, - PyBufferProcs *bufferprocs, - PyObject *dict_add); +LIBSHIBOKEN_API PyTypeObject *SbkType_FromSpec_BMDWB(PyType_Spec *spec, + PyObject *bases, + PyTypeObject *meta, + int dictoffset, + int weaklistoffset, + PyBufferProcs *bufferprocs); } //extern "C" diff --git a/sources/shiboken6/libshiboken/voidptr.cpp b/sources/shiboken6/libshiboken/voidptr.cpp index 7a6a04e3a..f0161d282 100644 --- a/sources/shiboken6/libshiboken/voidptr.cpp +++ b/sources/shiboken6/libshiboken/voidptr.cpp @@ -318,10 +318,9 @@ static PyType_Spec SbkVoidPtrType_spec = { PyTypeObject *SbkVoidPtrTypeF(void) { - static PyTypeObject *type = SbkType_FromSpec_BMDWBD(&SbkVoidPtrType_spec, - nullptr, nullptr, 0, 0, - &SbkVoidPtrObjectBufferProc, - nullptr); + static PyTypeObject *type = SbkType_FromSpec_BMDWB(&SbkVoidPtrType_spec, + nullptr, nullptr, 0, 0, + &SbkVoidPtrObjectBufferProc); return type; } |
