From 25b04ff5b49568c54c04e7f5983a09370e3e2c95 Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Fri, 14 May 2010 15:32:40 +0200
Subject: [PATCH] Flush the current binding before searching for types.

---
 src/libs/cplusplus/LookupContext.cpp | 26 ++++++++++++--------------
 1 file changed, 12 insertions(+), 14 deletions(-)

diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp
index b6fc2e95760..c12fd4e8862 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;
 
-- 
GitLab