aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken2/generator/shiboken2
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2020-09-22 08:22:42 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2020-09-22 08:22:42 +0200
commit17a20f95151368a3b92b949b905325865643ca45 (patch)
tree2271f52498f0dfe7bac57888af7c56b85c3d9e02 /sources/shiboken2/generator/shiboken2
parent98eb59226aca550ae086c00b9c8023f47c44d2b2 (diff)
parent936cc4c72e2393ed59e05dca1100150d88b52645 (diff)
Merge remote-tracking branch 'origin/5.15' into dev
Diffstat (limited to 'sources/shiboken2/generator/shiboken2')
-rw-r--r--sources/shiboken2/generator/shiboken2/overloaddata.cpp22
-rw-r--r--sources/shiboken2/generator/shiboken2/overloaddata.h1
2 files changed, 22 insertions, 1 deletions
diff --git a/sources/shiboken2/generator/shiboken2/overloaddata.cpp b/sources/shiboken2/generator/shiboken2/overloaddata.cpp
index e70eeaea1..36725d3fc 100644
--- a/sources/shiboken2/generator/shiboken2/overloaddata.cpp
+++ b/sources/shiboken2/generator/shiboken2/overloaddata.cpp
@@ -38,6 +38,8 @@
#include <QtCore/QFile>
#include <QtCore/QTemporaryFile>
+#include <algorithm>
+
static const TypeEntry *getReferencedTypeEntry(const TypeEntry *typeEntry)
{
if (typeEntry->isPrimitive()) {
@@ -175,6 +177,24 @@ static QString msgCyclicDependency(const QString &funcName, const QString &graph
return result;
}
+static inline int overloadNumber(const OverloadData *o)
+{
+ return o->referenceFunction()->overloadNumber();
+}
+
+bool OverloadData::sortByOverloadNumberModification()
+{
+ if (std::all_of(m_nextOverloadData.cbegin(), m_nextOverloadData.cend(),
+ [](const OverloadData *o) { return overloadNumber(o) == TypeSystem::OverloadNumberDefault; })) {
+ return false;
+ }
+ std::stable_sort(m_nextOverloadData.begin(), m_nextOverloadData.end(),
+ [] (const OverloadData *o1, const OverloadData *o2) {
+ return overloadNumber(o1) < overloadNumber(o2);
+ });
+ return true;
+}
+
/**
* Topologically sort the overloads by implicit convertion order
*
@@ -210,7 +230,7 @@ void OverloadData::sortNextOverloads()
for (OverloadData *ov : qAsConst(m_nextOverloadData))
ov->sortNextOverloads();
- if (m_nextOverloadData.size() <= 1)
+ if (m_nextOverloadData.size() <= 1 || sortByOverloadNumberModification())
return;
// Populates the OverloadSortData object containing map and reverseMap, to map type names to ids,
diff --git a/sources/shiboken2/generator/shiboken2/overloaddata.h b/sources/shiboken2/generator/shiboken2/overloaddata.h
index 4fd4199e5..9ffb084ff 100644
--- a/sources/shiboken2/generator/shiboken2/overloaddata.h
+++ b/sources/shiboken2/generator/shiboken2/overloaddata.h
@@ -139,6 +139,7 @@ private:
OverloadData *addOverloadData(const AbstractMetaFunction *func, const AbstractMetaArgument *arg);
void sortNextOverloads();
+ bool sortByOverloadNumberModification();
int functionNumber(const AbstractMetaFunction *func) const;
OverloadDataList overloadDataOnPosition(OverloadData *overloadData, int argPos) const;