From de64d27687365c0114853a64b76939a7a611bb28 Mon Sep 17 00:00:00 2001 From: Marcelo Lira Date: Wed, 10 Nov 2010 18:33:00 -0300 Subject: Fix the fix that was previously reverted in d8e2d87f. Reviewed by Lauro Moura Reviewed by Luciano Wolf --- generator/overloaddata.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'generator') 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) { -- cgit v1.2.3