aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken2
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
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')
-rw-r--r--sources/shiboken2/libshiboken/embed/signature_bootstrap.py2
-rw-r--r--sources/shiboken2/libshiboken/signature.cpp25
-rw-r--r--sources/shiboken2/shibokenmodule/__init__.py.in4
-rw-r--r--sources/shiboken2/tests/minimalbinding/brace_pattern_test.py2
-rw-r--r--sources/shiboken2/tests/samplebinding/pointerprimitivetype_test.py2
5 files changed, 28 insertions, 7 deletions
diff --git a/sources/shiboken2/libshiboken/embed/signature_bootstrap.py b/sources/shiboken2/libshiboken/embed/signature_bootstrap.py
index 3a74bb42e..b7d9d2793 100644
--- a/sources/shiboken2/libshiboken/embed/signature_bootstrap.py
+++ b/sources/shiboken2/libshiboken/embed/signature_bootstrap.py
@@ -73,7 +73,7 @@ def bootstrap():
if recursion_trap:
# we are probably called from outside, already
print("Recursion occurred in Bootstrap. Did you start by hand? Then it's ok.")
- print("""But you should trigger start by 'eval("type.__signature__")', only!""")
+ print("But you should trigger start by '_init_pyside_extension()', only!")
recursion_trap += 1
@contextmanager
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;
}
diff --git a/sources/shiboken2/shibokenmodule/__init__.py.in b/sources/shiboken2/shibokenmodule/__init__.py.in
index eb392e847..6ba8929c9 100644
--- a/sources/shiboken2/shibokenmodule/__init__.py.in
+++ b/sources/shiboken2/shibokenmodule/__init__.py.in
@@ -26,5 +26,5 @@ if sys.version_info[0] == 3:
from .shiboken2 import *
-# Trigger signature initialization.
-eval("type.__signature__")
+# Trigger signature initialization via __builtins__.
+_init_pyside_extension()
diff --git a/sources/shiboken2/tests/minimalbinding/brace_pattern_test.py b/sources/shiboken2/tests/minimalbinding/brace_pattern_test.py
index bcaccac44..550a609cb 100644
--- a/sources/shiboken2/tests/minimalbinding/brace_pattern_test.py
+++ b/sources/shiboken2/tests/minimalbinding/brace_pattern_test.py
@@ -49,7 +49,7 @@ from shiboken_paths import init_paths
init_paths()
import shiboken2
-eval("type.__signature__") # trigger bootstrap
+_init_pyside_extension() # trigger bootstrap
from shibokensupport.signature.lib.tool import build_brace_pattern
diff --git a/sources/shiboken2/tests/samplebinding/pointerprimitivetype_test.py b/sources/shiboken2/tests/samplebinding/pointerprimitivetype_test.py
index 3abd01cd9..648b35e41 100644
--- a/sources/shiboken2/tests/samplebinding/pointerprimitivetype_test.py
+++ b/sources/shiboken2/tests/samplebinding/pointerprimitivetype_test.py
@@ -54,7 +54,7 @@ init_paths()
from sample import IntArray2, VirtualMethods
import shiboken2
-eval("type.__signature__") # trigger init, which does not happen in tests
+_init_pyside_extension() # trigger init, which does not happen in tests
from shibokensupport.signature import typing