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