diff options
author | Orgad Shaneh <orgad.shaneh@audiocodes.com> | 2012-09-22 20:44:52 +0300 |
---|---|---|
committer | hjk <qthjk@ovi.com> | 2012-09-24 11:05:03 +0200 |
commit | 9ef97873d8b4b7ed996a0cb67d2b61253221cca4 (patch) | |
tree | ad00c3171e13e726b3f430e8027de2de4854270e /src/libs/cplusplus/ResolveExpression.cpp | |
parent | 422eee2938591e111103ef06b5368aa732710a2b (diff) | |
download | qt-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.cpp | 12 |
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; |