summaryrefslogtreecommitdiff
path: root/src/libs/cplusplus/LookupContext.cpp
diff options
context:
space:
mode:
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;