summaryrefslogtreecommitdiff
path: root/src/libs/cplusplus/ResolveExpression.cpp
diff options
context:
space:
mode:
authorOrgad Shaneh <orgad.shaneh@audiocodes.com>2012-09-22 20:44:52 +0300
committerhjk <qthjk@ovi.com>2012-09-24 11:05:03 +0200
commit9ef97873d8b4b7ed996a0cb67d2b61253221cca4 (patch)
treead00c3171e13e726b3f430e8027de2de4854270e /src/libs/cplusplus/ResolveExpression.cpp
parent422eee2938591e111103ef06b5368aa732710a2b (diff)
downloadqt-creator-9ef97873d8b4b7ed996a0cb67d2b61253221cca4.tar.gz
CPlusPlus: Avoid reversing results for call lookup
Task-number: QTCREATORBUG-5876 Change-Id: Ia94f4aa67af2b79862acd7869a3952f6a44932cb Reviewed-by: hjk <qthjk@ovi.com>
Diffstat (limited to 'src/libs/cplusplus/ResolveExpression.cpp')
-rw-r--r--src/libs/cplusplus/ResolveExpression.cpp12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/libs/cplusplus/ResolveExpression.cpp b/src/libs/cplusplus/ResolveExpression.cpp
index 0309c3bcf9..f539a6f2ee 100644
--- a/src/libs/cplusplus/ResolveExpression.cpp
+++ b/src/libs/cplusplus/ResolveExpression.cpp
@@ -49,6 +49,7 @@
#include <QList>
#include <QDebug>
#include <QSet>
+#include <map>
using namespace CPlusPlus;
@@ -630,7 +631,8 @@ bool ResolveExpression::visit(CallAST *ast)
}
if (_reference) {
- _results.clear();
+ typedef std::multimap<int, LookupItem> LookupMap;
+ LookupMap sortedResults;
foreach (const LookupItem &base, baseResults) {
if (Function *funTy = base.type()->asFunctionType()) {
if (! maybeValidPrototype(funTy, actualArgumentCount))
@@ -655,13 +657,13 @@ bool ResolveExpression::visit(CallAST *ast)
++score;
}
- if (score)
- _results.prepend(base);
- else
- _results.append(base);
+ sortedResults.insert(LookupMap::value_type(-score, base));
}
}
+ _results.clear();
+ for (LookupMap::const_iterator it = sortedResults.begin(); it != sortedResults.end(); ++it)
+ _results.append(it->second);
if (_results.isEmpty())
_results = baseResults;