diff options
author | Roberto Raggi <roberto.raggi@nokia.com> | 2010-05-14 15:32:40 +0200 |
---|---|---|
committer | Roberto Raggi <roberto.raggi@nokia.com> | 2010-05-14 15:32:40 +0200 |
commit | 25b04ff5b49568c54c04e7f5983a09370e3e2c95 (patch) | |
tree | 102336b3b724f17ec2f7491a221f9927e7c80e9d /src/libs/cplusplus/LookupContext.cpp | |
parent | 81d7ac2d69dffb715066117ee5047cd8a13803b1 (diff) | |
download | qt-creator-25b04ff5b49568c54c04e7f5983a09370e3e2c95.tar.gz |
Flush the current binding before searching for types.
Diffstat (limited to 'src/libs/cplusplus/LookupContext.cpp')
-rw-r--r-- | src/libs/cplusplus/LookupContext.cpp | 26 |
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; |