aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken2/libshiboken/signature.cpp
diff options
context:
space:
mode:
authorChristian Tismer <tismer@stackless.com>2020-09-02 12:51:10 +0200
committerChristian Tismer <tismer@stackless.com>2020-09-04 12:52:16 +0200
commitfedc289138bd912384e71a91e49ef9ee7b8a0fbb (patch)
tree284ff4982d53157a226d9f13a51bc4fbcdbaa661 /sources/shiboken2/libshiboken/signature.cpp
parent2bd69b9877f7b240512f03b4df042adf9acea744 (diff)
signature: Use a clean init function to initialize it
After the quick hack replacing "type.__signature__" by 'eval("type.__signature__")', we now use a clean initialization function `_init_pyside_extension` that is implanted into the __builtins__ module. This is the first of a series of improvements and simplifications that will be applied slowly with low priority. Task-number: PYSIDE-829 Task-number: PYSIDE-510 Change-Id: I9951239c73d02f47272f1a531fb4886c8181b9a7 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Diffstat (limited to 'sources/shiboken2/libshiboken/signature.cpp')
-rw-r--r--sources/shiboken2/libshiboken/signature.cpp25
1 files changed, 23 insertions, 2 deletions
diff --git a/sources/shiboken2/libshiboken/signature.cpp b/sources/shiboken2/libshiboken/signature.cpp
index e2c02a196..70f1e8de7 100644
--- a/sources/shiboken2/libshiboken/signature.cpp
+++ b/sources/shiboken2/libshiboken/signature.cpp
@@ -98,6 +98,7 @@ static PyObject *PySide_BuildSignatureProps(PyObject *class_mod);
static void init_module_1(void);
static void init_module_2(void);
+static PyObject *_init_pyside_extension(PyObject * /* self */, PyObject * /* args */);
static PyObject *
CreateSignature(PyObject *props, PyObject *key)
@@ -486,8 +487,14 @@ static const unsigned char PySide_SignatureLoader[] = {
#include "embed/signature_bootstrap_inc.h"
};
+// This function will be inserted into __builtins__.
+static PyMethodDef init_methods[] = {
+ {"_init_pyside_extension", (PyCFunction)_init_pyside_extension, METH_NOARGS},
+ {nullptr, nullptr}
+};
+
static safe_globals_struc *
-init_phase_1(void)
+init_phase_1(PyMethodDef *init_meth)
{
{
auto *p = reinterpret_cast<safe_globals_struc *>
@@ -582,6 +589,12 @@ init_phase_1(void)
// This function will be disabled until phase 2 is done.
p->finish_import_func = nullptr;
+ // Initialize the explicit init function.
+ Shiboken::AutoDecRef init(PyCFunction_NewEx(init_meth, nullptr, nullptr));
+ if (init.isNull()
+ || PyDict_SetItemString(PyEval_GetBuiltins(), init_meth->ml_name, init) != 0)
+ goto error;
+
return p;
}
error:
@@ -870,6 +883,14 @@ get_signature(PyObject * /* self */, PyObject *args)
Py_RETURN_NONE;
}
+static PyObject *
+_init_pyside_extension(PyObject * /* self */, PyObject * /* args */)
+{
+ init_module_1();
+ init_module_2();
+ Py_RETURN_NONE;
+}
+
////////////////////////////////////////////////////////////////////////////
//
// This special Type_Ready does certain initializations earlier with
@@ -955,7 +976,7 @@ init_module_1(void)
static int init_done = 0;
if (!init_done) {
- pyside_globals = init_phase_1();
+ pyside_globals = init_phase_1(init_methods);
if (pyside_globals != nullptr)
init_done = 1;
}