From 0e7712627ad8d34f3c281f99baf1915ae27e869b Mon Sep 17 00:00:00 2001 From: Uwe Siems Date: Wed, 2 Oct 2024 14:54:39 +0200 Subject: [PATCH 1/2] Remove use of 'OriginalName' option from code generator... and instead remove these "rename" entries in the typesystem files, which were not used because of this option (but triggered the creation of unneeded wrapper methods in derived classes). --- generator/shellgenerator.cpp | 2 +- generator/shellheadergenerator.cpp | 16 ++++++++-------- generator/shellimplgenerator.cpp | 8 ++++---- generator/typesystem_core.xml | 4 +--- generator/typesystem_gui.xml | 17 ----------------- 5 files changed, 14 insertions(+), 33 deletions(-) diff --git a/generator/shellgenerator.cpp b/generator/shellgenerator.cpp index 1f8a408b0..9886fe089 100644 --- a/generator/shellgenerator.cpp +++ b/generator/shellgenerator.cpp @@ -316,7 +316,7 @@ bool ShellGenerator::functionHasNonConstReferences(const AbstractMetaFunction* f QTextStream t(&s); t << function->implementingClass()->qualifiedCppName() << "::"; writeFunctionSignature(t, function, 0, "", - Option(ConvertReferenceToPtr | FirstArgIsWrappedObject | IncludeDefaultExpression | OriginalName | ShowStatic | UnderscoreSpaces | ProtectedEnumAsInts)); + Option(ConvertReferenceToPtr | FirstArgIsWrappedObject | IncludeDefaultExpression | ShowStatic | UnderscoreSpaces | ProtectedEnumAsInts)); std::cout << s.toLatin1().constData() << std::endl; return true; } diff --git a/generator/shellheadergenerator.cpp b/generator/shellheadergenerator.cpp index 20431a83b..16605273d 100644 --- a/generator/shellheadergenerator.cpp +++ b/generator/shellheadergenerator.cpp @@ -80,7 +80,7 @@ void ShellHeaderGenerator::writeFieldAccessors(QTextStream& s, const AbstractMet addIndirection = true; } writeFunctionSignature(s, getter, 0, QString(), - Option(ConvertReferenceToPtr | FirstArgIsWrappedObject | IncludeDefaultExpression | OriginalName | ShowStatic | UnderscoreSpaces)); + Option(ConvertReferenceToPtr | FirstArgIsWrappedObject | IncludeDefaultExpression | ShowStatic | UnderscoreSpaces)); s << "{ return "; if (addIndirection) { s << "&"; @@ -145,7 +145,7 @@ void ShellHeaderGenerator::write(QTextStream& s, const AbstractMetaClass* meta_c for (AbstractMetaFunction * fun : ctors) { s << " "; writeFunctionSignature(s, fun, 0, "PythonQtShell_", - Option(IncludeDefaultExpression | OriginalName | ShowStatic | UnderscoreSpaces)); + Option(IncludeDefaultExpression | ShowStatic | UnderscoreSpaces)); s << ":" << meta_class->qualifiedCppName() << "("; QString scriptFunctionName = fun->originalName(); AbstractMetaArgumentList args = fun->arguments(); @@ -164,7 +164,7 @@ void ShellHeaderGenerator::write(QTextStream& s, const AbstractMetaClass* meta_c for (AbstractMetaFunction * fun : virtualsForShell) { writeFunctionSignature(s, fun, 0, QString(), - Option(IncludeDefaultExpression | OriginalName | ShowStatic | UnderscoreSpaces)); + Option(IncludeDefaultExpression | ShowStatic | UnderscoreSpaces)); s << " override;" << endl; } s << endl; @@ -212,7 +212,7 @@ void ShellHeaderGenerator::write(QTextStream& s, const AbstractMetaClass* meta_c } s << "inline "; writeFunctionSignature(s, fun, 0, "promoted_", - Option(IncludeDefaultExpression | OriginalName | UnderscoreSpaces | ProtectedEnumAsInts)); + Option(IncludeDefaultExpression | UnderscoreSpaces | ProtectedEnumAsInts)); s << " { "; QString scriptFunctionName = fun->originalName(); AbstractMetaArgumentList args = fun->arguments(); @@ -239,7 +239,7 @@ void ShellHeaderGenerator::write(QTextStream& s, const AbstractMetaClass* meta_c if (fun->isVirtual()) { s << "inline "; writeFunctionSignature(s, fun, 0, "py_q_", - Option(IncludeDefaultExpression | OriginalName | UnderscoreSpaces | ProtectedEnumAsInts)); + Option(IncludeDefaultExpression | UnderscoreSpaces | ProtectedEnumAsInts)); s << " { "; QString scriptFunctionName = fun->originalName(); AbstractMetaArgumentList args = fun->arguments(); @@ -355,7 +355,7 @@ void ShellHeaderGenerator::write(QTextStream& s, const AbstractMetaClass* meta_c s << meta_class->qualifiedCppName() << "* "; writeFunctionSignature(s, fun, 0, "new_", - Option(IncludeDefaultExpression | OriginalName | ShowStatic | AddOwnershipTemplates)); + Option(IncludeDefaultExpression | ShowStatic | AddOwnershipTemplates)); s << ";" << endl; if (fun->arguments().size() == 1 && meta_class->qualifiedCppName() == fun->arguments().at(0)->type()->typeEntry()->qualifiedCppName()) { copyConstructorSeen = true; @@ -387,14 +387,14 @@ void ShellHeaderGenerator::write(QTextStream& s, const AbstractMetaClass* meta_c //functionHasNonConstReferences(function); s << " "; writeFunctionSignature(s, function, 0, QString(), - Option(AddOwnershipTemplates | ConvertReferenceToPtr | FirstArgIsWrappedObject | IncludeDefaultExpression | OriginalName | ShowStatic | UnderscoreSpaces | ProtectedEnumAsInts)); + Option(AddOwnershipTemplates | ConvertReferenceToPtr | FirstArgIsWrappedObject | IncludeDefaultExpression | ShowStatic | UnderscoreSpaces | ProtectedEnumAsInts)); s << ";" << endl; } if (function->isVirtual() && meta_class->typeEntry()->shouldCreatePromoter()) { // qualified version that calls the promoter/the qualified version s << " "; writeFunctionSignature(s, function, 0, "py_q_", - Option(AddOwnershipTemplates | ConvertReferenceToPtr | FirstArgIsWrappedObject | IncludeDefaultExpression | OriginalName | ShowStatic | UnderscoreSpaces | ProtectedEnumAsInts)); + Option(AddOwnershipTemplates | ConvertReferenceToPtr | FirstArgIsWrappedObject | IncludeDefaultExpression | ShowStatic | UnderscoreSpaces | ProtectedEnumAsInts)); s << "{ "; QString scriptFunctionName = function->originalName(); diff --git a/generator/shellimplgenerator.cpp b/generator/shellimplgenerator.cpp index 0bafe520b..1bff7724c 100644 --- a/generator/shellimplgenerator.cpp +++ b/generator/shellimplgenerator.cpp @@ -125,11 +125,11 @@ void ShellImplGenerator::write(QTextStream &s, const AbstractMetaClass *meta_cla foreach (const AbstractMetaFunction *fun, virtualsForShell) { bool hasReturnValue = !fun->type().isNull(); writeFunctionSignature(s, fun, meta_class, QString(), - Option(OriginalName | ShowStatic | UnderscoreSpaces | UseIndexedName), + Option(ShowStatic | UnderscoreSpaces | UseIndexedName), "PythonQtShell_"); s << endl << "{" << endl; - Option typeOptions = Option(OriginalName | UnderscoreSpaces | SkipName); + Option typeOptions = Option(UnderscoreSpaces | SkipName); AbstractMetaArgumentList args = fun->arguments(); // we can't handle return values which are references right now, do not send those to Python... @@ -239,7 +239,7 @@ void ShellImplGenerator::write(QTextStream &s, const AbstractMetaClass *meta_cla s << meta_class->qualifiedCppName() << "* "; s << "PythonQtWrapper_" << meta_class->name() << "::"; - writeFunctionSignature(s, ctor, 0, "new_", Option(AddOwnershipTemplates | OriginalName | ShowStatic)); + writeFunctionSignature(s, ctor, 0, "new_", Option(AddOwnershipTemplates | ShowStatic)); s << endl; s << "{ " << endl; s << "return new " << (meta_class->generateShellClass()?shellClassName(meta_class):meta_class->qualifiedCppName()) << "("; @@ -281,7 +281,7 @@ void ShellImplGenerator::write(QTextStream &s, const AbstractMetaClass *meta_cla continue; } writeFunctionSignature(s, fun, meta_class, QString(), - Option(AddOwnershipTemplates | ConvertReferenceToPtr | FirstArgIsWrappedObject | OriginalName | ShowStatic | UnderscoreSpaces | ProtectedEnumAsInts), + Option(AddOwnershipTemplates | ConvertReferenceToPtr | FirstArgIsWrappedObject | ShowStatic | UnderscoreSpaces | ProtectedEnumAsInts), "PythonQtWrapper_"); s << endl << "{" << endl; s << " "; diff --git a/generator/typesystem_core.xml b/generator/typesystem_core.xml index 9c5eb244c..d94d7819d 100644 --- a/generator/typesystem_core.xml +++ b/generator/typesystem_core.xml @@ -1507,9 +1507,7 @@ public: - - - + diff --git a/generator/typesystem_gui.xml b/generator/typesystem_gui.xml index 377520eb8..e77d69816 100644 --- a/generator/typesystem_gui.xml +++ b/generator/typesystem_gui.xml @@ -797,9 +797,6 @@ - - - @@ -917,10 +914,6 @@ - - - - @@ -1562,8 +1555,6 @@ PyObject* constScanLine(QImage* image, int line) { - - @@ -1775,8 +1766,6 @@ PyObject* constScanLine(QImage* image, int line) { - - @@ -1903,9 +1892,6 @@ PyObject* constScanLine(QImage* image, int line) { - - - @@ -2197,9 +2183,6 @@ PyObject* constScanLine(QImage* image, int line) { - - - From 385ae5fc05ae078f5f0907e882e65d38346fbdc8 Mon Sep 17 00:00:00 2001 From: Uwe Siems Date: Wed, 2 Oct 2024 15:24:50 +0200 Subject: [PATCH 2/2] Filter away static operators in namespaces This was introduced by Qt 6.7.3, where the static operators + and | on Qt::Key and Qt::KeyModifiers were moved into the Qt namespace. --- generator/abstractmetabuilder.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/generator/abstractmetabuilder.cpp b/generator/abstractmetabuilder.cpp index 2515f7310..d73b0792b 100644 --- a/generator/abstractmetabuilder.cpp +++ b/generator/abstractmetabuilder.cpp @@ -1137,10 +1137,15 @@ void AbstractMetaBuilder::traverseFunctions(ScopeModelItem scope_item, AbstractM if (meta_function->isDestructor() && !meta_function->isFinal()) meta_class->setForceShellClass(true); - if (!meta_function->isDestructor() - && !meta_function->isInvalid() - && (!meta_function->isConstructor() || !meta_function->isPrivate())) { - + if (meta_function->name().startsWith("__") && meta_function->isStatic()) { + // static operators are not supported by PythonQt + // (this only seems to happen for static operators in namespaces) + delete meta_function; + } + else if (!meta_function->isDestructor() + && !meta_function->isInvalid() + && (!meta_function->isConstructor() || !meta_function->isPrivate())) + { if (meta_class->typeEntry()->designatedInterface() && !meta_function->isPublic() && !meta_function->isPrivate()) { QString warn = QString("non-public function '%1' in interface '%2'")