diff options
Diffstat (limited to 'src/libs/cplusplus/LookupContext.cpp')
-rw-r--r-- | src/libs/cplusplus/LookupContext.cpp | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp index 7e352db117..21cecac309 100644 --- a/src/libs/cplusplus/LookupContext.cpp +++ b/src/libs/cplusplus/LookupContext.cpp @@ -376,9 +376,18 @@ void ClassOrNamespace::lookup_helper(const Name *name, ClassOrNamespace *binding if (binding && ! processed->contains(binding)) { processed->insert(binding); + const Identifier *nameId = name->identifier(); + foreach (Symbol *s, binding->symbols()) { - if (ScopedSymbol *scoped = s->asScopedSymbol()) + if (ScopedSymbol *scoped = s->asScopedSymbol()) { + if (Class *klass = scoped->asClass()) { + if (const Identifier *id = klass->identifier()) { + if (nameId && nameId->isEqualTo(id)) + result->append(klass); + } + } _factory->lookupInScope(name, scoped->members(), result, templateId); + } } foreach (Enum *e, binding->enums()) @@ -486,6 +495,13 @@ ClassOrNamespace *ClassOrNamespace::lookupType_helper(const Name *name, if (name->isNameId() || name->isTemplateNameId()) { flush(); + foreach (Symbol *s, symbols()) { + if (Class *klass = s->asClass()) { + if (klass->identifier() && klass->identifier()->isEqualTo(name->identifier())) + return this; + } + } + if (ClassOrNamespace *e = nestedType(name)) return e; |