From e5413e235d1227b906f5e6a4018a257935cdd570 Mon Sep 17 00:00:00 2001 From: Renato Araujo Oliveira Filho Date: Wed, 10 Jun 2020 16:08:12 -0300 Subject: Generate flags operator methods for QFlags on hidden top level namespace Factor out method to write the operator functions and call it for the module wrapper, too. Fixes: PYSIDE-1326 Change-Id: I5b6faf19d253d5828474dec36b454aa20753123c Reviewed-by: Qt CI Bot Reviewed-by: Cristian Maureira-Fredes --- .../shiboken2/generator/shiboken2/cppgenerator.cpp | 27 ++++++++++++---------- .../shiboken2/generator/shiboken2/cppgenerator.h | 1 + 2 files changed, 16 insertions(+), 12 deletions(-) (limited to 'sources/shiboken2/generator') diff --git a/sources/shiboken2/generator/shiboken2/cppgenerator.cpp b/sources/shiboken2/generator/shiboken2/cppgenerator.cpp index 1ae1c72b4..69b070e7d 100644 --- a/sources/shiboken2/generator/shiboken2/cppgenerator.cpp +++ b/sources/shiboken2/generator/shiboken2/cppgenerator.cpp @@ -745,18 +745,7 @@ void CppGenerator::generateClass(QTextStream &s, const GeneratorContext &classCo if (metaClass->isPolymorphic() && metaClass->baseClass()) writeTypeDiscoveryFunction(s, metaClass); - - for (AbstractMetaEnum *cppEnum : qAsConst(classEnums)) { - if (cppEnum->isAnonymous() || cppEnum->isPrivate()) - continue; - - bool hasFlags = cppEnum->typeEntry()->flags(); - if (hasFlags) { - writeFlagsMethods(s, cppEnum); - writeFlagsNumberMethodsDefinition(s, cppEnum); - s << Qt::endl; - } - } + writeFlagsNumberMethodsDefinitions(s, classEnums); s << Qt::endl; writeConverterFunctions(s, metaClass, classContext); @@ -5082,6 +5071,17 @@ void CppGenerator::writeFlagsNumberMethodsDefinition(QTextStream &s, const Abstr s << "};\n\n"; } +void CppGenerator::writeFlagsNumberMethodsDefinitions(QTextStream &s, const AbstractMetaEnumList &enums) +{ + for (AbstractMetaEnum *e : enums) { + if (!e->isAnonymous() && !e->isPrivate() && e->typeEntry()->flags()) { + writeFlagsMethods(s, e); + writeFlagsNumberMethodsDefinition(s, e); + s << '\n'; + } + } +} + void CppGenerator::writeFlagsBinaryOperator(QTextStream &s, const AbstractMetaEnum *cppEnum, const QString &pyOpName, const QString &cppOpName) { @@ -5922,6 +5922,9 @@ bool CppGenerator::finishGeneration() s << converterImpl << Qt::endl; s << "} // namespace Shiboken\n\n"; } + + writeFlagsNumberMethodsDefinitions(s, globalEnums); + s << '\n'; } const QStringList &requiredModules = typeDb->requiredTargetImports(); diff --git a/sources/shiboken2/generator/shiboken2/cppgenerator.h b/sources/shiboken2/generator/shiboken2/cppgenerator.h index 8c56dd758..1d7894734 100644 --- a/sources/shiboken2/generator/shiboken2/cppgenerator.h +++ b/sources/shiboken2/generator/shiboken2/cppgenerator.h @@ -316,6 +316,7 @@ private: void writeFlagsToLong(QTextStream &s, const AbstractMetaEnum *cppEnum); void writeFlagsNonZero(QTextStream &s, const AbstractMetaEnum *cppEnum); void writeFlagsNumberMethodsDefinition(QTextStream &s, const AbstractMetaEnum *cppEnum); + void writeFlagsNumberMethodsDefinitions(QTextStream &s, const AbstractMetaEnumList &enums); void writeFlagsBinaryOperator(QTextStream &s, const AbstractMetaEnum *cppEnum, const QString &pyOpName, const QString &cppOpName); void writeFlagsUnaryOperator(QTextStream &s, const AbstractMetaEnum *cppEnum, -- cgit v1.2.3