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