summaryrefslogtreecommitdiff
path: root/src/libs/cplusplus/LookupContext.cpp
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2010-05-14 15:32:40 +0200
committerRoberto Raggi <roberto.raggi@nokia.com>2010-05-14 15:32:40 +0200
commit25b04ff5b49568c54c04e7f5983a09370e3e2c95 (patch)
tree102336b3b724f17ec2f7491a221f9927e7c80e9d /src/libs/cplusplus/LookupContext.cpp
parent81d7ac2d69dffb715066117ee5047cd8a13803b1 (diff)
downloadqt-creator-25b04ff5b49568c54c04e7f5983a09370e3e2c95.tar.gz
Flush the current binding before searching for types.
Diffstat (limited to 'src/libs/cplusplus/LookupContext.cpp')
-rw-r--r--src/libs/cplusplus/LookupContext.cpp26
1 files changed, 12 insertions, 14 deletions
diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp
index b6fc2e9576..c12fd4e886 100644
--- a/src/libs/cplusplus/LookupContext.cpp
+++ b/src/libs/cplusplus/LookupContext.cpp
@@ -448,27 +448,25 @@ ClassOrNamespace *ClassOrNamespace::lookupType_helper(const Name *name,
QSet<ClassOrNamespace *> *processed,
bool searchInEnclosingScope)
{
- Q_ASSERT(name != 0);
+ if (const QualifiedNameId *q = name->asQualifiedNameId()) {
+ ClassOrNamespace *e = this;
- if (! processed->contains(this)) {
- processed->insert(this);
+ if (q->isGlobal())
+ e = globalNamespace();
- if (const QualifiedNameId *q = name->asQualifiedNameId()) {
- ClassOrNamespace *e = this;
+ e = e->lookupType(q->nameAt(0));
- if (q->isGlobal())
- e = globalNamespace();
+ for (unsigned index = 1; e && index < q->nameCount(); ++index)
+ e = e->findType(q->nameAt(index));
- e = e->lookupType(q->nameAt(0));
+ return e;
- for (unsigned index = 1; e && index < q->nameCount(); ++index) {
- QSet<ClassOrNamespace *> processed;
- e = e->lookupType_helper(q->nameAt(index), &processed, /*searchInEnclosingScope =*/ false);
- }
+ } else if (! processed->contains(this)) {
+ processed->insert(this);
- return e;
+ if (name->isNameId() || name->isTemplateNameId()) {
+ flush();
- } else if (name->isNameId() || name->isTemplateNameId()) {
if (ClassOrNamespace *e = nestedType(name))
return e;