aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2021-06-10 13:26:49 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-06-10 20:18:48 +0000
commit93669bcdaf2fb646e0c2125335cf2e7ae6a5c756 (patch)
treee8e596cb54f4c9050d18a1788ce4a9078b6a282d
parent0695cf877bab98bc654bc264538e3a5f876fa48f (diff)
shiboken6: Use replaced types in functions signatures in generated code
Add AbstractMetaFunction::minimalModifiedSignature() to be used in the overload decisor comments and split the formatting helpers accordingly. No caching is required as it is called only once. Task-number: PYSIDE-1588 Change-Id: I29b7d6ba33bfe3f4348234697ef1ef8112f86ac9 Reviewed-by: Christian Tismer <tismer@stackless.com> (cherry picked from commit 60132e11037c7645efdc6b4e8a3f9f231ee6133b) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--sources/shiboken6/ApiExtractor/abstractmetafunction.cpp50
-rw-r--r--sources/shiboken6/ApiExtractor/abstractmetafunction.h3
-rw-r--r--sources/shiboken6/generator/shiboken/cppgenerator.cpp2
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';