aboutsummaryrefslogtreecommitdiffstats
path: root/overloaddata.cpp
diff options
context:
space:
mode:
authorHugo Lima <hugo.lima@openbossa.org>2010-03-17 16:34:07 -0300
committerHugo Lima <hugo.lima@openbossa.org>2010-03-18 19:45:08 -0300
commitb1eee94589cc0337ea8a26fee0c523582a0419e3 (patch)
tree83cb2c0372aef4c79bf7f4276d549d5e2e57e340 /overloaddata.cpp
parent75ce5d993f212581ba2fb1e623fed2c585f1c216 (diff)
Write enum checks before int, long and bool checks.
Enums are implicitly converted to these types in C++, if we dont do that the enum version of some functions can never be called, because the int one will be if the int check was written before the enum check.
Diffstat (limited to 'overloaddata.cpp')
-rw-r--r--overloaddata.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/overloaddata.cpp b/overloaddata.cpp
index 11a2b6eaf..58d0dd065 100644
--- a/overloaddata.cpp
+++ b/overloaddata.cpp
@@ -68,6 +68,9 @@ void OverloadData::sortNextOverloads()
// Create the graph of type dependencies based on implicity conversions.
Graph graph(reverseMap.count());
+ bool haveInt = map.contains("int");
+ bool haveLong = map.contains("long");
+ bool haveBool = map.contains("bool");
foreach(OverloadData* ov, m_nextOverloadData) {
const AbstractMetaType* targetType = ov->argType();
@@ -106,10 +109,16 @@ void OverloadData::sortNextOverloads()
if (checkPyObject && !targetType->typeEntry()->name().contains("PyObject")) {
graph.addEdge(map[targetType->typeEntry()->name()], pyobjectIndex);
}
+ if (targetType->typeEntry()->isEnum() && haveInt)
+ graph.addEdge(map[targetType->typeEntry()->name()], map["int"]);
+ if (targetType->typeEntry()->isEnum() && haveLong)
+ graph.addEdge(map[targetType->typeEntry()->name()], map["long"]);
+ if (targetType->typeEntry()->isEnum() && haveBool)
+ graph.addEdge(map[targetType->typeEntry()->name()], map["bool"]);
}
// Special case for double(int i) (not tracked by m_generator->implicitConversions
- if (map.contains("int")) {
+ if (haveInt) {
if (map.contains("float"))
graph.addEdge(map["float"], map["int"]);
if (map.contains("double"))
@@ -118,7 +127,7 @@ void OverloadData::sortNextOverloads()
graph.addEdge(map["bool"], map["int"]);
}
- if (map.contains("long")) {
+ if (haveLong) {
if (map.contains("float"))
graph.addEdge(map["float"], map["long"]);
if (map.contains("double"))