diff options
| author | Christian Tismer <tismer@stackless.com> | 2024-06-26 15:36:20 +0200 |
|---|---|---|
| committer | Christian Tismer <tismer@stackless.com> | 2024-07-05 10:28:59 +0200 |
| commit | 1ac022a95be69d220ed9fc6ce5832d4a646fbe52 (patch) | |
| tree | 3c7ffda8b02319543b40e8f99e31a2cb23dc627c | |
| parent | a9ed0cab4ab9ecd085848efd75feb7fe72903924 (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.cpp | 3 | ||||
| -rw-r--r-- | sources/shiboken6/generator/shiboken/cppgenerator.cpp | 26 |
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); } |
