From f02549dafe88b360f29f8c390d0e90b0e282f343 Mon Sep 17 00:00:00 2001 From: Roberto Raggi <qtc-committer@nokia.com> Date: Mon, 29 Dec 2008 12:26:02 +0100 Subject: [PATCH] Save/restore the black list so we can re-use instances of SymbolsForDotAccess. --- src/libs/cplusplus/ResolveExpression.cpp | 34 +++++++++++++++++++----- src/libs/cplusplus/ResolveExpression.h | 15 +++++++++-- 2 files changed, 41 insertions(+), 8 deletions(-) diff --git a/src/libs/cplusplus/ResolveExpression.cpp b/src/libs/cplusplus/ResolveExpression.cpp index 1f4dc9c51af..a4d1de3afad 100644 --- a/src/libs/cplusplus/ResolveExpression.cpp +++ b/src/libs/cplusplus/ResolveExpression.cpp @@ -794,9 +794,31 @@ bool ResolveExpression::visit(PostIncrDecrAST *) } //////////////////////////////////////////////////////////////////////////////// +SymbolsForDotAccess::SymbolsForDotAccess() +{ } + QList<Symbol *> SymbolsForDotAccess::operator()(NamedType *namedTy, ResolveExpression::Result p, const LookupContext &context) +{ + const QList<ResolveExpression::Result> previousBlackList = _blackList; + const QList<Symbol *> symbols = symbolsForDotAccess(namedTy, p, context); + _blackList = previousBlackList; + return symbols; +} + +QList<Symbol *> SymbolsForDotAccess::operator()(ResolveExpression::Result p, + const LookupContext &context) +{ + const QList<ResolveExpression::Result> previousBlackList = _blackList; + const QList<Symbol *> symbols = symbolsForDotAccess(p, context); + _blackList = previousBlackList; + return symbols; +} + +QList<Symbol *> SymbolsForDotAccess::symbolsForDotAccess(NamedType *namedTy, + ResolveExpression::Result p, + const LookupContext &context) { QList<Symbol *> resolvedSymbols; @@ -825,7 +847,7 @@ QList<Symbol *> SymbolsForDotAccess::operator()(NamedType *namedTy, // Boh b; // b. const ResolveExpression::Result r(decl->type(), decl); - resolvedSymbols += operator()(r, context); + resolvedSymbols += symbolsForDotAccess(r, context); } } } else if (Declaration *decl = candidate->asDeclaration()) { @@ -834,7 +856,7 @@ QList<Symbol *> SymbolsForDotAccess::operator()(NamedType *namedTy, // foo. if (funTy->scope()->isBlockScope() || funTy->scope()->isNamespaceScope()) { const ResolveExpression::Result r(funTy->returnType(), decl); - resolvedSymbols += operator()(r, context); + resolvedSymbols += symbolsForDotAccess(r, context); } } } @@ -843,16 +865,16 @@ QList<Symbol *> SymbolsForDotAccess::operator()(NamedType *namedTy, return resolvedSymbols; } -QList<Symbol *> SymbolsForDotAccess::operator()(ResolveExpression::Result p, - const LookupContext &context) +QList<Symbol *> SymbolsForDotAccess::symbolsForDotAccess(ResolveExpression::Result p, + const LookupContext &context) { FullySpecifiedType ty = p.first; if (NamedType *namedTy = ty->asNamedType()) { - return operator()(namedTy, p, context); + return symbolsForDotAccess(namedTy, p, context); } else if (ReferenceType *refTy = ty->asReferenceType()) { const ResolveExpression::Result e(refTy->elementType(), p.second); - return operator()(e, context); + return symbolsForDotAccess(e, context); } return QList<Symbol *>(); diff --git a/src/libs/cplusplus/ResolveExpression.h b/src/libs/cplusplus/ResolveExpression.h index 35a32c84655..ff98b7344d7 100644 --- a/src/libs/cplusplus/ResolveExpression.h +++ b/src/libs/cplusplus/ResolveExpression.h @@ -130,15 +130,26 @@ private: class CPLUSPLUS_EXPORT SymbolsForDotAccess { - QList<ResolveExpression::Result> _blackList; - public: + SymbolsForDotAccess(); + QList<Symbol *> operator()(NamedType *namedTy, ResolveExpression::Result p, const LookupContext &context); QList<Symbol *> operator()(ResolveExpression::Result p, const LookupContext &context); + +private: + QList<Symbol *> symbolsForDotAccess(NamedType *namedTy, + ResolveExpression::Result p, + const LookupContext &context); + + QList<Symbol *> symbolsForDotAccess(ResolveExpression::Result p, + const LookupContext &context); + +private: + QList<ResolveExpression::Result> _blackList; }; -- GitLab