diff options
-rw-r--r-- | sources/shiboken6/ApiExtractor/abstractmetafunction.cpp | 50 | ||||
-rw-r--r-- | sources/shiboken6/ApiExtractor/abstractmetafunction.h | 3 | ||||
-rw-r--r-- | sources/shiboken6/generator/shiboken/cppgenerator.cpp | 2 |
3 files changed, 37 insertions, 18 deletions
diff --git a/sources/shiboken6/ApiExtractor/abstractmetafunction.cpp b/sources/shiboken6/ApiExtractor/abstractmetafunction.cpp index 21677a3e5..87a5d3edc 100644 --- a/sources/shiboken6/ApiExtractor/abstractmetafunction.cpp +++ b/sources/shiboken6/ApiExtractor/abstractmetafunction.cpp @@ -67,7 +67,8 @@ public: } QString signature() const; - QString minimalSignature() const; + QString formatMinimalSignature(const AbstractMetaFunction *q, + bool comment) const; QString modifiedName(const AbstractMetaFunction *q) const; int overloadNumber(const AbstractMetaFunction *q) const; @@ -738,31 +739,46 @@ bool AbstractMetaFunction::isModifiedToArray(int argumentIndex) const return false; } -QString AbstractMetaFunctionPrivate::minimalSignature() const +// Parameter 'comment' indicates usage as a code comment of the overload decisor +QString AbstractMetaFunctionPrivate::formatMinimalSignature(const AbstractMetaFunction *q, + bool comment) const { - if (!m_cachedMinimalSignature.isEmpty()) - return m_cachedMinimalSignature; - - QString minimalSignature = m_originalName + QLatin1Char('('); + QString result = m_originalName + QLatin1Char('('); for (int i = 0; i < m_arguments.count(); ++i) { - const AbstractMetaType &t = m_arguments.at(i).type(); if (i > 0) - minimalSignature += QLatin1Char(','); - minimalSignature += t.minimalSignature(); + result += QLatin1Char(','); + + QString typeName; + if (comment) + typeName = q->typeReplaced(i + 1); + if (typeName.isEmpty()) + typeName = m_arguments.at(i).type().minimalSignature(); + result += typeName; } - minimalSignature += QLatin1Char(')'); + result += QLatin1Char(')'); if (m_constant) - minimalSignature += QLatin1String("const"); - - minimalSignature = TypeDatabase::normalizedSignature(minimalSignature); - m_cachedMinimalSignature = minimalSignature; - - return minimalSignature; + result += QLatin1String("const"); + result = TypeDatabase::normalizedSignature(result); + + if (comment && !q->isVoid()) { + QString typeName = q->typeReplaced(0); + if (typeName.isEmpty()) + typeName = q->type().minimalSignature(); + result += QStringLiteral("->") + typeName; + } + return result; } QString AbstractMetaFunction::minimalSignature() const { - return d->minimalSignature(); + if (d->m_cachedMinimalSignature.isEmpty()) + d->m_cachedMinimalSignature = d->formatMinimalSignature(this, false); + return d->m_cachedMinimalSignature; +} + +QString AbstractMetaFunction::signatureComment() const +{ + return d->formatMinimalSignature(this, true); } QString AbstractMetaFunction::debugSignature() const diff --git a/sources/shiboken6/ApiExtractor/abstractmetafunction.h b/sources/shiboken6/ApiExtractor/abstractmetafunction.h index 256a37e7e..b677cf0ea 100644 --- a/sources/shiboken6/ApiExtractor/abstractmetafunction.h +++ b/sources/shiboken6/ApiExtractor/abstractmetafunction.h @@ -226,6 +226,9 @@ public: QString modifiedName() const; QString minimalSignature() const; + // Signature with replaced argument types and return type for overload + // decisor comment. + QString signatureComment() const; QString debugSignature() const; // including virtual/override/final, etc., for debugging only. bool isModifiedRemoved(const AbstractMetaClass *cls = nullptr) const; diff --git a/sources/shiboken6/generator/shiboken/cppgenerator.cpp b/sources/shiboken6/generator/shiboken/cppgenerator.cpp index 91caa51ba..06b421621 100644 --- a/sources/shiboken6/generator/shiboken/cppgenerator.cpp +++ b/sources/shiboken6/generator/shiboken/cppgenerator.cpp @@ -2722,7 +2722,7 @@ void CppGenerator::writeOverloadedFunctionDecisor(TextStream &s, const OverloadD s << "static "; if (const auto *decl = func->declaringClass()) s << decl->name() << "::"; - s << func->minimalSignature() << '\n'; + s << func->signatureComment() << '\n'; } writeOverloadedFunctionDecisorEngine(s, &overloadData); s << '\n'; |