From 660893caca7ebbe96c85ab33f53fc8d99fbabdc0 Mon Sep 17 00:00:00 2001 From: Hugo Parente Lima Date: Thu, 14 Apr 2011 11:33:11 -0300 Subject: Fix bug regarding to two overloads like: foo(char) and foo(const char*) The overload decisor was unable to find the difference between them. This code was wrote by Setanta in an experimental branch, so kudos to him. --- generator/overloaddata.cpp | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) (limited to 'generator/overloaddata.cpp') diff --git a/generator/overloaddata.cpp b/generator/overloaddata.cpp index 3a32c94d6..7e3f608cd 100644 --- a/generator/overloaddata.cpp +++ b/generator/overloaddata.cpp @@ -60,17 +60,21 @@ static QString getTypeName(const OverloadData* ov) static bool typesAreEqual(const AbstractMetaType* typeA, const AbstractMetaType* typeB) { - - bool equal = typeA->typeEntry() == typeB->typeEntry(); - if (equal && typeA->isContainer()) { - if (typeA->instantiations().size() != typeB->instantiations().size()) - return false; - for (int i = 0; i < typeA->instantiations().size(); ++i) { - if (!typesAreEqual(typeA->instantiations().at(i), typeB->instantiations().at(i))) + if (typeA->typeEntry() == typeB->typeEntry()) { + if (typeA->isContainer()) { + if (typeA->instantiations().size() != typeB->instantiations().size()) return false; + + for (int i = 0; i < typeA->instantiations().size(); ++i) { + if (!typesAreEqual(typeA->instantiations().at(i), typeB->instantiations().at(i))) + return false; + } + return true; } + + return !(ShibokenGenerator::isCString(typeA) ^ ShibokenGenerator::isCString(typeB)); } - return equal; + return false; } /** @@ -226,7 +230,8 @@ void OverloadData::sortNextOverloads() "unsigned char", "char", "float", - "double" + "double", + "const char*" }; const int numPrimitives = sizeof(primitiveTypes)/sizeof(const char*); bool hasPrimitive[numPrimitives]; -- cgit v1.2.3