aboutsummaryrefslogtreecommitdiffstats
path: root/generator
diff options
context:
space:
mode:
authorMarcelo Lira <marcelo.lira@openbossa.org>2010-11-10 18:33:00 -0300
committerHugo Parente Lima <hugo.pl@gmail.com>2012-03-08 16:08:58 -0300
commitde64d27687365c0114853a64b76939a7a611bb28 (patch)
tree2c03de1970c4fd1019a10db083d03509d479445a /generator
parent4564787f4785ba6b2ace7fe4afa70b30246adb6a (diff)
Fix the fix that was previously reverted in d8e2d87f.
Reviewed by Lauro Moura <lauro.neto@openbossa.org> Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
Diffstat (limited to 'generator')
-rw-r--r--generator/overloaddata.cpp19
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) {