summaryrefslogtreecommitdiff
path: root/src/libs/cplusplus/LookupContext.cpp
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@nokia.com>2010-07-16 15:23:26 +0200
committerErik Verbruggen <erik.verbruggen@nokia.com>2010-07-16 16:04:58 +0200
commitf7a8c5f05d3c46d3d1f68341b211d74d888634ad (patch)
tree05642b126ba7af02eb4c8a00d0fc013d99fd2036 /src/libs/cplusplus/LookupContext.cpp
parent52f4a6d8e14afe31a9bbc31baaff69a330e8f31a (diff)
downloadqt-creator-f7a8c5f05d3c46d3d1f68341b211d74d888634ad.tar.gz
Fixed lookup to skip over friend declarations.
Diffstat (limited to 'src/libs/cplusplus/LookupContext.cpp')
-rw-r--r--src/libs/cplusplus/LookupContext.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp
index 5c935eb6a1..dc8d3c06d5 100644
--- a/src/libs/cplusplus/LookupContext.cpp
+++ b/src/libs/cplusplus/LookupContext.cpp
@@ -449,6 +449,9 @@ void ClassOrNamespace::lookup_helper(const Name *name, ClassOrNamespace *binding
const Identifier *nameId = name->identifier();
foreach (Symbol *s, binding->symbols()) {
+ if (s->isFriend())
+ continue;
+
if (ScopedSymbol *scoped = s->asScopedSymbol()) {
if (Class *klass = scoped->asClass()) {
if (const Identifier *id = klass->identifier()) {
@@ -486,6 +489,8 @@ void CreateBindings::lookupInScope(const Name *name, Scope *scope,
for (Symbol *s = scope->lookat(op->kind()); s; s = s->next()) {
if (! s->name())
continue;
+ else if (s->isFriend())
+ continue;
else if (! s->name()->isEqualTo(op))
continue;
@@ -497,7 +502,9 @@ void CreateBindings::lookupInScope(const Name *name, Scope *scope,
} else if (const Identifier *id = name->identifier()) {
for (Symbol *s = scope->lookat(id); s; s = s->next()) {
- if (! id->isEqualTo(s->identifier()))
+ if (s->isFriend())
+ continue; // skip friends
+ else if (! id->isEqualTo(s->identifier()))
continue;
else if (s->name()->isQualifiedNameId())
continue; // skip qualified ids.