diff options
| author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2024-01-16 09:32:01 +0100 |
|---|---|---|
| committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2024-01-16 13:38:25 +0000 |
| commit | 31e7f5325ec852ddf46ecff978a3140406154274 (patch) | |
| tree | 1bd2077c0880308563f74ac508fd6c61443f27f9 | |
| parent | d7aa15abe25bd71ea19180743ce9b41e0b788520 (diff) | |
Split out code snippets of shibokenmodule into a separate .cpp file
It makes it easier to maintain; IDE syntax highlighting works and
no HTML entities are needed for <,>.
Task-number: PYSIDE-31
Change-Id: I60512cfd409a49c3efcfec2e5c0450a888df2333
Reviewed-by: Christian Tismer <tismer@stackless.com>
| -rw-r--r-- | sources/shiboken6/shibokenmodule/shibokenmodule.cpp | 102 | ||||
| -rw-r--r-- | sources/shiboken6/shibokenmodule/typesystem_shiboken.xml | 106 |
2 files changed, 116 insertions, 92 deletions
diff --git a/sources/shiboken6/shibokenmodule/shibokenmodule.cpp b/sources/shiboken6/shibokenmodule/shibokenmodule.cpp new file mode 100644 index 000000000..a89761b4f --- /dev/null +++ b/sources/shiboken6/shibokenmodule/shibokenmodule.cpp @@ -0,0 +1,102 @@ +// Copyright (C) 2024 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +// @snippet isvalid +bool isValid = Shiboken::Object::isValid(%1, false); +%PYARG_0 = %CONVERTTOPYTHON[bool](isValid); +// @snippet isvalid + +// @snippet wrapinstance +auto *pyType = reinterpret_cast<PyTypeObject *>(%2); +if (Shiboken::ObjectType::checkType(pyType)) { + %PYARG_0 = Shiboken::Object::newObject(pyType, + reinterpret_cast<void *>(%1), + false, true); +} else { + PyErr_SetString(PyExc_TypeError, "You need a shiboken-based type."); +} +// @snippet wrapinstance + +// @snippet getcpppointer +if (Shiboken::Object::checkType(%1)) { + std::vector<void*> ptrs = Shiboken::Object::cppPointers(reinterpret_cast<SbkObject *>(%1)); + %PYARG_0 = PyTuple_New(ptrs.size()); + for (std::size_t i = 0; i < ptrs.size(); ++i) + PyTuple_SET_ITEM(%PYARG_0, i, PyLong_FromVoidPtr(ptrs[i])); +} else { + PyErr_SetString(PyExc_TypeError, "You need a shiboken-based type."); +} +// @snippet getcpppointer + +// @snippet delete +if (Shiboken::Object::checkType(%1)) { + Shiboken::Object::callCppDestructors(reinterpret_cast<SbkObject *>(%1)); +} else { + PyErr_SetString(PyExc_TypeError, "You need a shiboken-based type."); +} +// @snippet delete + +// @snippet ownedbypython +if (Shiboken::Object::checkType(%1)) { + bool hasOwnership = Shiboken::Object::hasOwnership(reinterpret_cast<SbkObject *>(%1)); + %PYARG_0 = %CONVERTTOPYTHON[bool](hasOwnership); +} else { + PyErr_SetString(PyExc_TypeError, "You need a shiboken-based type."); +} +// @snippet ownedbypython + +// @snippet createdbypython +if (Shiboken::Object::checkType(%1)) { + bool wasCreatedByPython = Shiboken::Object::wasCreatedByPython(reinterpret_cast<SbkObject *>(%1)); + %PYARG_0 = %CONVERTTOPYTHON[bool](wasCreatedByPython); +} else { + PyErr_SetString(PyExc_TypeError, "You need a shiboken-based type."); +} +// @snippet createdbypython + +// @snippet disassembleframe +Shiboken::AutoDecRef label(PyObject_Str(%1)); +const char *marker = Shiboken::String::toCString(label); +disassembleFrame(marker); +Py_INCREF(Py_None); +%PYARG_0 = Py_None; +// @snippet disassembleframe + +// @snippet dump +if (!Shiboken::Object::checkType(%1)) { + %PYARG_0 = Shiboken::String::fromCString("Ordinary Python type."); +} else { + std::string str = Shiboken::Object::info(reinterpret_cast<SbkObject *>(%1)); + %PYARG_0 = Shiboken::String::fromCString(str.c_str()); +} +// @snippet dump + +// @snippet getallvalidwrappers +const auto setAll = Shiboken::BindingManager::instance().getAllPyObjects(); +PyObject* listAll = PyList_New(0); +if (listAll == nullptr) + return nullptr; +for (auto *o : setAll) { + if (o != nullptr) { + if (PyList_Append(listAll, o) != 0) { + Py_DECREF(listAll); + return nullptr; + } + } +} +return listAll; +// @snippet getallvalidwrappers + +// @snippet init +// Add __version__ and __version_info__ attributes to the module +PyObject* version = PyTuple_New(5); +PyTuple_SET_ITEM(version, 0, PyLong_FromLong(SHIBOKEN_MAJOR_VERSION)); +PyTuple_SET_ITEM(version, 1, PyLong_FromLong(SHIBOKEN_MINOR_VERSION)); +PyTuple_SET_ITEM(version, 2, PyLong_FromLong(SHIBOKEN_MICRO_VERSION)); +PyTuple_SET_ITEM(version, 3, Shiboken::String::fromCString(SHIBOKEN_RELEASE_LEVEL)); +PyTuple_SET_ITEM(version, 4, PyLong_FromLong(SHIBOKEN_SERIAL)); +PyModule_AddObject(module, "__version_info__", version); +PyModule_AddStringConstant(module, "__version__", SHIBOKEN_VERSION); +VoidPtr::addVoidPtrToModule(module); +Shiboken::initShibokenSupport(module); +// @snippet init diff --git a/sources/shiboken6/shibokenmodule/typesystem_shiboken.xml b/sources/shiboken6/shibokenmodule/typesystem_shiboken.xml index de5003d5b..2288ca7a4 100644 --- a/sources/shiboken6/shibokenmodule/typesystem_shiboken.xml +++ b/sources/shiboken6/shibokenmodule/typesystem_shiboken.xml @@ -1,13 +1,14 @@ <?xml version="1.0" ?> +<!-- +// Copyright (C) 2024 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +--> <typesystem package="Shiboken"> <primitive-type name="bool" /> <primitive-type name="unsigned long" /> <primitive-type name="size_t" /> <add-function signature="isValid(PyObject*)" return-type="bool"> - <inject-code> - bool isValid = Shiboken::Object::isValid(%1, false); - %PYARG_0 = %CONVERTTOPYTHON[bool](isValid); - </inject-code> + <inject-code file="shibokenmodule.cpp" snippet="isvalid"/> </add-function> <add-function signature="invalidate(PyObject*)"> @@ -17,119 +18,40 @@ </add-function> <add-function signature="wrapInstance(size_t, PyTypeObject)" return-type="PyObject*"> - <inject-code> - auto *pyType = reinterpret_cast<PyTypeObject *>(%2); - if (Shiboken::ObjectType::checkType(pyType)) { - %PYARG_0 = Shiboken::Object::newObject(pyType, - reinterpret_cast<void *>(%1), - false, true); - } else { - PyErr_SetString(PyExc_TypeError, "You need a shiboken-based type."); - } - </inject-code> + <inject-code file="shibokenmodule.cpp" snippet="wrapinstance"/> </add-function> <add-function signature="getCppPointer(PyObject*)" return-type="PySequence*"> - <inject-code> - if (Shiboken::Object::checkType(%1)) { - std::vector<void*> ptrs = Shiboken::Object::cppPointers(reinterpret_cast<SbkObject *>(%1)); - %PYARG_0 = PyTuple_New(ptrs.size()); - for (std::size_t i = 0; i < ptrs.size(); ++i) - PyTuple_SET_ITEM(%PYARG_0, i, PyLong_FromVoidPtr(ptrs[i])); - } else { - PyErr_SetString(PyExc_TypeError, "You need a shiboken-based type."); - } - </inject-code> + <inject-code file="shibokenmodule.cpp" snippet="getcpppointer"/> </add-function> <add-function signature="delete(PyObject*)"> - <inject-code> - if (Shiboken::Object::checkType(%1)) { - Shiboken::Object::callCppDestructors(reinterpret_cast<SbkObject *>(%1)); - } else { - PyErr_SetString(PyExc_TypeError, "You need a shiboken-based type."); - } - </inject-code> + <inject-code file="shibokenmodule.cpp" snippet="delete"/> </add-function> <add-function signature="ownedByPython(PyObject*)" return-type="bool"> - <inject-code> - if (Shiboken::Object::checkType(%1)) { - bool hasOwnership = Shiboken::Object::hasOwnership(reinterpret_cast<SbkObject *>(%1)); - %PYARG_0 = %CONVERTTOPYTHON[bool](hasOwnership); - } else { - PyErr_SetString(PyExc_TypeError, "You need a shiboken-based type."); - } - </inject-code> + <inject-code file="shibokenmodule.cpp" snippet="ownedbypython"/> </add-function> <add-function signature="createdByPython(PyObject*)" return-type="bool"> - <inject-code> - if (Shiboken::Object::checkType(%1)) { - bool wasCreatedByPython = Shiboken::Object::wasCreatedByPython(reinterpret_cast<SbkObject *>(%1)); - %PYARG_0 = %CONVERTTOPYTHON[bool](wasCreatedByPython); - } else { - PyErr_SetString(PyExc_TypeError, "You need a shiboken-based type."); - } - </inject-code> + <inject-code file="shibokenmodule.cpp" snippet="createdbypython"/> </add-function> <add-function signature="disassembleFrame(PyObject*)" return-type="PyObject"> - <inject-code> - Shiboken::AutoDecRef label(PyObject_Str(%1)); - const char *marker = Shiboken::String::toCString(label); - disassembleFrame(marker); - Py_INCREF(Py_None); - %PYARG_0 = Py_None; - </inject-code> + <inject-code file="shibokenmodule.cpp" snippet="disassembleframe"/> </add-function> <add-function signature="dump(PyObject*)" return-type="const char *"> - <inject-code> - if (!Shiboken::Object::checkType(%1)) { - %PYARG_0 = Shiboken::String::fromCString("Ordinary Python type."); - } else { - std::string str = Shiboken::Object::info(reinterpret_cast<SbkObject *>(%1)); - %PYARG_0 = Shiboken::String::fromCString(str.c_str()); - } - </inject-code> + <inject-code file="shibokenmodule.cpp" snippet="dump"/> </add-function> <add-function signature="getAllValidWrappers(void)" return-type="PySequence*"> - <inject-code> - const auto setAll = Shiboken::BindingManager::instance().getAllPyObjects(); - PyObject* listAll = PyList_New(0); - if (listAll == nullptr) - return nullptr; - - for (auto *o : setAll) { - if (o != nullptr) { - if (PyList_Append(listAll, o) != 0) { - Py_DECREF(listAll); - return nullptr; - } - } - } - return listAll; - </inject-code> + <inject-code file="shibokenmodule.cpp" snippet="getallvalidwrappers"/> </add-function> <extra-includes> <include file-name="sbkversion.h" location="local"/> <include file-name="voidptr.h" location="local"/> </extra-includes> - <inject-code position="end"> - // Add __version__ and __version_info__ attributes to the module - PyObject* version = PyTuple_New(5); - PyTuple_SET_ITEM(version, 0, PyLong_FromLong(SHIBOKEN_MAJOR_VERSION)); - PyTuple_SET_ITEM(version, 1, PyLong_FromLong(SHIBOKEN_MINOR_VERSION)); - PyTuple_SET_ITEM(version, 2, PyLong_FromLong(SHIBOKEN_MICRO_VERSION)); - PyTuple_SET_ITEM(version, 3, Shiboken::String::fromCString(SHIBOKEN_RELEASE_LEVEL)); - PyTuple_SET_ITEM(version, 4, PyLong_FromLong(SHIBOKEN_SERIAL)); - PyModule_AddObject(module, "__version_info__", version); - PyModule_AddStringConstant(module, "__version__", SHIBOKEN_VERSION); - VoidPtr::addVoidPtrToModule(module); - - Shiboken::initShibokenSupport(module); - </inject-code> + <inject-code position="end" file="shibokenmodule.cpp" snippet="init"/> </typesystem> |
