diff options
| author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2025-12-02 10:06:10 +0100 |
|---|---|---|
| committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2025-12-03 12:53:26 +0100 |
| commit | f376bb4c26ebfe98cfad9c9d47eb797e2d909282 (patch) | |
| tree | 7ab804acd0cb97491ece88b7e232130243a53698 | |
| parent | b311fabb7e3d29c25fee1c3924d938ca12c1578a (diff) | |
shiboken6: Move AbstractMetaFunction::Flags out of the class
This enables using them for messages and other things.
Task-number: PYSIDE-3245
Change-Id: If2acccbfdbc53d28f84cfe5341898347a9938c53
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
7 files changed, 39 insertions, 35 deletions
diff --git a/sources/shiboken6_generator/ApiExtractor/abstractmetabuilder.cpp b/sources/shiboken6_generator/ApiExtractor/abstractmetabuilder.cpp index 8cc90a30c..bcb4e1834 100644 --- a/sources/shiboken6_generator/ApiExtractor/abstractmetabuilder.cpp +++ b/sources/shiboken6_generator/ApiExtractor/abstractmetabuilder.cpp @@ -332,9 +332,9 @@ void AbstractMetaBuilderPrivate::traverseFreeOperatorFunction(const FunctionMode if (!unaryOperator && first.type().indirections()) metaFunction->setPointerOperator(true); metaFunction->setArguments(arguments); - flags.setFlag(AbstractMetaFunction::Flag::OperatorLeadingClassArgumentRemoved); + flags.setFlag(InternalFunctionFlag::OperatorLeadingClassArgumentRemoved); if (first.type().passByValue()) - flags.setFlag(AbstractMetaFunction::Flag::OperatorClassArgumentByValue); + flags.setFlag(InternalFunctionFlag::OperatorClassArgumentByValue); } else { // If the operator method is not unary and the first operator is // not of the same type of its owning class we suppose that it @@ -346,9 +346,9 @@ void AbstractMetaBuilderPrivate::traverseFreeOperatorFunction(const FunctionMode metaFunction->setPointerOperator(true); metaFunction->setArguments(arguments); metaFunction->setReverseOperator(true); - flags.setFlag(AbstractMetaFunction::Flag::OperatorTrailingClassArgumentRemoved); + flags.setFlag(InternalFunctionFlag::OperatorTrailingClassArgumentRemoved); if (last.type().passByValue()) - flags.setFlag(AbstractMetaFunction::Flag::OperatorClassArgumentByValue); + flags.setFlag(InternalFunctionFlag::OperatorClassArgumentByValue); } metaFunction->setFlags(flags); metaFunction->setAccess(Access::Public); @@ -2185,12 +2185,12 @@ AbstractMetaFunctionPtr return {}; } - AbstractMetaFunction::Flags flags; + InternalFunctionFlags flags; auto metaFunction = std::make_shared<AbstractMetaFunction>(functionName); metaFunction->setCppAttributes(cppAttributes); metaFunction->setUnresolvedSignatures(signatures); if (functionItem->isHiddenFriend()) - flags.setFlag(AbstractMetaFunction::Flag::HiddenFriend); + flags.setFlag(InternalFunctionFlag::HiddenFriend); metaFunction->setSourceLocation(functionItem->sourceLocation()); // Additional check for assignment/move assignment down below @@ -2246,7 +2246,7 @@ AbstractMetaFunctionPtr case QtSpecialArgument::None: break; case QtSpecialArgument::PrivateSignal: - flags.setFlag(AbstractMetaFunction::Flag::PrivateSignal); + flags.setFlag(InternalFunctionFlag::PrivateSignal); arguments.removeLast(); // Add private signals for documentation purposes break; case QtSpecialArgument::Disambiguated: @@ -3384,7 +3384,7 @@ AbstractMetaFunctionPtr { AbstractMetaFunctionPtr f(function->copy()); f->setArguments(AbstractMetaArgumentList()); - f->setFlags(f->flags() | AbstractMetaFunction::Flag::InheritedFromTemplate); + f->setFlags(f->flags() | InternalFunctionFlag::InheritedFromTemplate); if (!function->isVoid()) { auto returnType = inheritTemplateType(templateTypes, function->type()); diff --git a/sources/shiboken6_generator/ApiExtractor/abstractmetafunction.cpp b/sources/shiboken6_generator/ApiExtractor/abstractmetafunction.cpp index 486a8b30f..1d74252dc 100644 --- a/sources/shiboken6_generator/ApiExtractor/abstractmetafunction.cpp +++ b/sources/shiboken6_generator/ApiExtractor/abstractmetafunction.cpp @@ -89,7 +89,7 @@ public: SourceLocation m_sourceLocation; AbstractMetaFunction::Attributes m_attributes; FunctionAttributes m_cppAttributes; - AbstractMetaFunction::Flags m_flags; + InternalFunctionFlags m_flags; uint m_constant : 1; uint m_reverse : 1; uint m_pointerOperator : 1; @@ -277,12 +277,12 @@ void AbstractMetaFunction::setCppAttribute(FunctionAttribute a, bool on) d->m_cppAttributes.setFlag(a, on); } -AbstractMetaFunction::Flags AbstractMetaFunction::flags() const +InternalFunctionFlags AbstractMetaFunction::flags() const { return d->m_flags; } -void AbstractMetaFunction::setFlags(Flags f) +void AbstractMetaFunction::setFlags(InternalFunctionFlags f) { d->m_flags = f; } diff --git a/sources/shiboken6_generator/ApiExtractor/abstractmetafunction.h b/sources/shiboken6_generator/ApiExtractor/abstractmetafunction.h index 63a5f9c14..ae3258d3c 100644 --- a/sources/shiboken6_generator/ApiExtractor/abstractmetafunction.h +++ b/sources/shiboken6_generator/ApiExtractor/abstractmetafunction.h @@ -120,20 +120,9 @@ public: void setCppAttributes(FunctionAttributes a); void setCppAttribute(FunctionAttribute a, bool on = true); - enum class Flag : std::uint8_t { // Internal flags not relevant for comparing functions - // Binary operator whose leading/trailing argument was removed by metabuilder - OperatorLeadingClassArgumentRemoved = 0x1, - OperatorTrailingClassArgumentRemoved = 0x2, - OperatorClassArgumentByValue = 0x4, // The removed class argument was passed by value - InheritedFromTemplate = 0x8, // Inherited from a template in metabuilder - HiddenFriend = 0x10, - PrivateSignal = 0x20, // Private Qt signal (cannot emit from client code) - CovariantReturn = 0x40 // Return type of virtual function differs (eg clone()) - }; - Q_DECLARE_FLAGS(Flags, Flag) - - Flags flags() const; - void setFlags(Flags f); + // Internal flags not relevant for comparing functions + InternalFunctionFlags flags() const; + void setFlags(InternalFunctionFlags f); bool isAbstract() const; bool isClassMethod() const; @@ -487,8 +476,6 @@ Q_DECLARE_OPERATORS_FOR_FLAGS(AbstractMetaFunction::CompareResult); Q_DECLARE_OPERATORS_FOR_FLAGS(AbstractMetaFunction::Attributes); -Q_DECLARE_OPERATORS_FOR_FLAGS(AbstractMetaFunction::Flags); - #ifndef QT_NO_DEBUG_STREAM QDebug operator<<(QDebug debug, const AbstractMetaFunction *af); #endif diff --git a/sources/shiboken6_generator/ApiExtractor/abstractmetalang.cpp b/sources/shiboken6_generator/ApiExtractor/abstractmetalang.cpp index e88f354bb..9c3463a64 100644 --- a/sources/shiboken6_generator/ApiExtractor/abstractmetalang.cpp +++ b/sources/shiboken6_generator/ApiExtractor/abstractmetalang.cpp @@ -1593,9 +1593,9 @@ void AbstractMetaClass::fixFunctions(const AbstractMetaClassPtr &klass, bool avo if (superIsVirtual && isVirtual) { f->setOverriddden(sf); auto flags = f->flags(); - if (!flags.testFlag(AbstractMetaFunction::Flag::CovariantReturn) + if (!flags.testFlag(InternalFunctionFlag::CovariantReturn) && f->type() != sf->type()) { - f->setFlags(flags | AbstractMetaFunction::Flag::CovariantReturn); + f->setFlags(flags | InternalFunctionFlag::CovariantReturn); } // Set "override" in case it was not spelled out (since it // is then not detected by clang parsing). diff --git a/sources/shiboken6_generator/ApiExtractor/abstractmetalang_enums.h b/sources/shiboken6_generator/ApiExtractor/abstractmetalang_enums.h index b7f113795..c8b63c686 100644 --- a/sources/shiboken6_generator/ApiExtractor/abstractmetalang_enums.h +++ b/sources/shiboken6_generator/ApiExtractor/abstractmetalang_enums.h @@ -50,4 +50,21 @@ enum class OperatorQueryOption : std::uint16_t { Q_DECLARE_FLAGS(OperatorQueryOptions, OperatorQueryOption) Q_DECLARE_OPERATORS_FOR_FLAGS(OperatorQueryOptions) +// Internal flags of AbstractMetaFunction not relevant for comparing functions +enum class InternalFunctionFlag : std::uint16_t +{ + // Binary operator whose leading/trailing argument was removed by metabuilder + OperatorLeadingClassArgumentRemoved = 0x001, + OperatorTrailingClassArgumentRemoved = 0x002, + OperatorClassArgumentByValue = 0x004, // The removed class argument was passed by value + OperatorMask = 0x01F, + InheritedFromTemplate = 0x020, // Inherited from a template in metabuilder + HiddenFriend = 0x040, + PrivateSignal = 0x080, // Private Qt signal (cannot emit from client code) + CovariantReturn = 0x100, // Return type of virtual function differs (eg clone()) +}; + +Q_DECLARE_FLAGS(InternalFunctionFlags, InternalFunctionFlag) +Q_DECLARE_OPERATORS_FOR_FLAGS(InternalFunctionFlags) + #endif // ABSTRACTMETALANG_ENUMS_H diff --git a/sources/shiboken6_generator/ApiExtractor/messages.cpp b/sources/shiboken6_generator/ApiExtractor/messages.cpp index ea69c0519..819ba5fac 100644 --- a/sources/shiboken6_generator/ApiExtractor/messages.cpp +++ b/sources/shiboken6_generator/ApiExtractor/messages.cpp @@ -646,9 +646,9 @@ QString msgFallbackForDocumentation(const QString &fileName, static QString functionDescription(const AbstractMetaFunction *function) { QString result = u'"' + function->classQualifiedSignature() + u'"'; - if (function->flags().testFlag(AbstractMetaFunction::Flag::HiddenFriend)) + if (function->flags().testFlag(InternalFunctionFlag::HiddenFriend)) result += u" (hidden friend)"_s; - if (function->flags().testFlag(AbstractMetaFunction::Flag::InheritedFromTemplate)) + if (function->flags().testFlag(InternalFunctionFlag::InheritedFromTemplate)) result += u" (inherited from template)"_s; return result; } diff --git a/sources/shiboken6_generator/ApiExtractor/qtdocparser.cpp b/sources/shiboken6_generator/ApiExtractor/qtdocparser.cpp index 6b9f1b0e4..b283f0159 100644 --- a/sources/shiboken6_generator/ApiExtractor/qtdocparser.cpp +++ b/sources/shiboken6_generator/ApiExtractor/qtdocparser.cpp @@ -205,14 +205,14 @@ QtDocParser::FunctionDocumentationOpt const auto funcFlags = func->flags(); // Re-add arguments removed by the metabuilder to binary operator functions - if (funcFlags.testFlag(AbstractMetaFunction::Flag::OperatorLeadingClassArgumentRemoved) - || funcFlags.testFlag(AbstractMetaFunction::Flag::OperatorTrailingClassArgumentRemoved)) { + if (funcFlags.testFlag(InternalFunctionFlag::OperatorLeadingClassArgumentRemoved) + || funcFlags.testFlag(InternalFunctionFlag::OperatorTrailingClassArgumentRemoved)) { QString classType = metaClass->qualifiedCppName(); - if (!funcFlags.testFlag(AbstractMetaFunction::Flag::OperatorClassArgumentByValue)) { + if (!funcFlags.testFlag(InternalFunctionFlag::OperatorClassArgumentByValue)) { classType.prepend(u"const "_s); classType.append(u" &"_s); } - if (funcFlags.testFlag(AbstractMetaFunction::Flag::OperatorLeadingClassArgumentRemoved)) + if (funcFlags.testFlag(InternalFunctionFlag::OperatorLeadingClassArgumentRemoved)) fq.parameters.prepend(classType); else fq.parameters.append(classType); |
