diff options
author | Hugo Lima <hugo.lima@openbossa.org> | 2010-03-17 16:34:07 -0300 |
---|---|---|
committer | Hugo Lima <hugo.lima@openbossa.org> | 2010-03-18 19:45:08 -0300 |
commit | b1eee94589cc0337ea8a26fee0c523582a0419e3 (patch) | |
tree | 83cb2c0372aef4c79bf7f4276d549d5e2e57e340 /overloaddata.cpp | |
parent | 75ce5d993f212581ba2fb1e623fed2c585f1c216 (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.cpp | 13 |
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")) |