diff options
-rw-r--r-- | generator/overloaddata.cpp | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/generator/overloaddata.cpp b/generator/overloaddata.cpp index 9be972f1f..29a1615ff 100644 --- a/generator/overloaddata.cpp +++ b/generator/overloaddata.cpp @@ -147,6 +147,10 @@ void OverloadData::sortNextOverloads() OverloadSortData sortData; bool checkPyObject = false; int pyobjectIndex = 0; + bool checkQString = false; + int qstringIndex = 0; + bool checkQVariant = false; + int qvariantIndex = 0; // Primitive types that are not int, long, short, // char and their respective unsigned counterparts. @@ -172,6 +176,12 @@ void OverloadData::sortNextOverloads() if (!checkPyObject && getTypeName(ov->argType()).contains("PyObject")) { checkPyObject = true; pyobjectIndex = sortData.lastProcessedItemId(); + } else if (!checkQVariant && getTypeName(ov->argType()) == "QVariant") { + checkQVariant = true; + qvariantIndex = sortData.lastProcessedItemId(); + } else if (!checkQString && getTypeName(ov->argType()) == "QString") { + checkQString = true; + qstringIndex = sortData.lastProcessedItemId(); } foreach (const AbstractMetaType* instantiation, ov->argType()->instantiations()) { @@ -265,8 +275,15 @@ void OverloadData::sortNextOverloads() } /* Add dependency on PyObject, so its check is the last one (too generic) */ - if (checkPyObject && !targetTypeEntryName.contains("PyObject")) + if (checkPyObject && !targetTypeEntryName.contains("PyObject")) { graph.addEdge(sortData.map[targetTypeEntryName], pyobjectIndex); + } else if (checkQVariant && targetTypeEntryName != "QVariant") { + if (!graph.containsEdge(qvariantIndex, sortData.map[targetTypeEntryName])) // Avoid cyclic dependency. + graph.addEdge(sortData.map[targetTypeEntryName], qvariantIndex); + } else if (checkQString && ov->argType()->indirections() > 0 && targetTypeEntryName != "QString") { + if (!graph.containsEdge(qstringIndex, sortData.map[targetTypeEntryName])) // Avoid cyclic dependency. + graph.addEdge(sortData.map[targetTypeEntryName], qstringIndex); + } if (targetTypeEntry->isEnum()) { for (int i = 0; i < numPrimitives; ++i) { |