aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Tismer <tismer@stackless.com>2024-06-26 15:36:20 +0200
committerChristian Tismer <tismer@stackless.com>2024-07-05 10:28:59 +0200
commit1ac022a95be69d220ed9fc6ce5832d4a646fbe52 (patch)
tree3c7ffda8b02319543b40e8f99e31a2cb23dc627c
parenta9ed0cab4ab9ecd085848efd75feb7fe72903924 (diff)
Shiboken: Get rid of the fullName field in generated code
This patch does the actual removal of the fullName field. Unfortunately, not all fields can be removed but only the ones which are reachable by the TypeInitStructs. (meanwhile less than 500) This result is pretty much better (at least on macOS), so we would not want to optimize it any further. Many thanks to Friedemann's help with improving the generator and removing the quirks that I could not solve. Task-number: PYSIDE-2701 Change-Id: Ie350766c450da1d86359c4e24c313ade3146233f Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
-rw-r--r--sources/pyside6/PySide6/glue/qtstatemachine.cpp3
-rw-r--r--sources/shiboken6/generator/shiboken/cppgenerator.cpp26
2 files changed, 20 insertions, 9 deletions
diff --git a/sources/pyside6/PySide6/glue/qtstatemachine.cpp b/sources/pyside6/PySide6/glue/qtstatemachine.cpp
index 098200b14..66c4acf10 100644
--- a/sources/pyside6/PySide6/glue/qtstatemachine.cpp
+++ b/sources/pyside6/PySide6/glue/qtstatemachine.cpp
@@ -41,7 +41,8 @@ if (PySide::SignalManager::registerMetaMethod(%1, signalName.constData(),
// http://bugs.openbossa.org/show_bug.cgi?id=362
// PYSIDE-2256: The label was removed
if (!PyObject_TypeCheck(%1, PySideSignalInstance_TypeF()))
- return Shiboken::returnWrongArguments(args, fullName, errInfo);
+ return Shiboken::returnWrongArguments(args, "addTransition", errInfo,
+ SbkPySide6_QtStateMachineTypeStructs[SBK_QAbstractTransition_IDX]);
PySideSignalInstance *signalInstance = reinterpret_cast<PySideSignalInstance *>(%1);
auto sender = %CONVERTTOCPP[QObject *](PySide::Signal::getObject(signalInstance));
QSignalTransition *%0 = %CPPSELF->%FUNCTION_NAME(sender, PySide::Signal::getSignature(signalInstance),%2);
diff --git a/sources/shiboken6/generator/shiboken/cppgenerator.cpp b/sources/shiboken6/generator/shiboken/cppgenerator.cpp
index 2497e1fb4..67995d5d2 100644
--- a/sources/shiboken6/generator/shiboken/cppgenerator.cpp
+++ b/sources/shiboken6/generator/shiboken/cppgenerator.cpp
@@ -2067,9 +2067,11 @@ void CppGenerator::writeMethodWrapperPreamble(TextStream &s,
if (needsArgumentErrorHandling(overloadData))
s << "Shiboken::AutoDecRef errInfo{};\n";
- s << "static const char fullName[] = \"" << fullPythonFunctionName(rfunc, true)
- << "\";\nSBK_UNUSED(fullName)\n"
- << "Shiboken::PythonContextMarker pcm;\n";
+ bool needsFullName = !context.hasClass();
+ if (needsFullName)
+ s << "static const char fullName[] = \"" << fullPythonFunctionName(rfunc, true)
+ << "\";\nSBK_UNUSED(fullName)\n";
+ s << "Shiboken::PythonContextMarker pcm;\n";
// PYSIDE-2335: Mark blocking calls like `exec` or `run` as such.
bool isBlockingFunction = rfunc->name() == u"exec"_s || rfunc->name() == u"exec_"_s
|| rfunc->name() == u"run"_s;
@@ -2166,8 +2168,9 @@ void CppGenerator::writeConstructorWrapper(TextStream &s, const OverloadData &ov
// Handles Python Multiple Inheritance
QString pre = needsMetaObject ? u"bool usesPyMI = "_s : u""_s;
s << "\n// PyMI support\n"
- << pre << "Shiboken::callInheritedInit(self, args, kwds, fullName);\n"
- << "if (" << shibokenErrorsOccurred << ")\n"
+ << pre << "Shiboken::callInheritedInit(self, args, kwds, "
+ << (classContext.hasClass() ? typeInitStruct(classContext) : "fullName"_L1)
+ << ");\nif (" << shibokenErrorsOccurred << ")\n"
<< indent << errorReturn << outdent << "\n";
writeFunctionCalls(s, overloadData, classContext, errorReturn);
@@ -2516,15 +2519,22 @@ QString CppGenerator::returnErrorWrongArguments(const OverloadData &overloadData
{
Q_UNUSED(context);
const auto rfunc = overloadData.referenceFunction();
+ QString exprRest;
+ if (context.hasClass()) {
+ const QString &name = rfunc->isConstructor() ? "__init__"_L1 : rfunc->name();
+ exprRest = ", \""_L1 + name + "\", errInfo, "_L1 + typeInitStruct(context) + ")"_L1;
+ } else {
+ exprRest = ", fullName, errInfo)"_L1;
+ }
QString argsVar = overloadData.pythonFunctionWrapperUsesListOfArguments()
? u"args"_s : PYTHON_ARG;
switch (errorReturn) {
case ErrorReturn::Default:
- return u"Shiboken::returnWrongArguments("_s + argsVar + u", fullName, errInfo)"_s;
+ return u"Shiboken::returnWrongArguments("_s + argsVar + exprRest;
case ErrorReturn::Zero:
- return u"Shiboken::returnWrongArguments_Zero("_s + argsVar + u", fullName, errInfo)"_s;
+ return u"Shiboken::returnWrongArguments_Zero("_s + argsVar + exprRest;
case ErrorReturn::MinusOne:
- return u"Shiboken::returnWrongArguments_MinusOne("_s + argsVar + u", fullName, errInfo)"_s;
+ return u"Shiboken::returnWrongArguments_MinusOne("_s + argsVar + exprRest;
case ErrorReturn::Void:
Q_ASSERT(false);
}