From 0b641d38d50bd6dc7b54cac5136b77827a71264e Mon Sep 17 00:00:00 2001 From: Roberto Raggi <roberto.raggi@nokia.com> Date: Mon, 16 Nov 2009 18:00:20 +0100 Subject: [PATCH] Use a map for the memoization. --- src/shared/cplusplus/Parser.cpp | 16 +++++++++------- src/shared/cplusplus/Parser.h | 3 ++- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp index ca26cb629e3..bad5233f029 100644 --- a/src/shared/cplusplus/Parser.cpp +++ b/src/shared/cplusplus/Parser.cpp @@ -441,6 +441,8 @@ bool Parser::parseTranslationUnit(TranslationUnitAST *&node) rewind(start_declaration + 1); skipUntilDeclaration(); } + + _templateArgumentList.clear(); } node = ast; @@ -568,6 +570,8 @@ bool Parser::parseLinkageBody(DeclarationAST *&node) rewind(start_declaration + 1); skipUntilDeclaration(); } + + _templateArgumentList.clear(); } match(T_RBRACE, &ast->rbrace_token); node = ast; @@ -692,11 +696,9 @@ bool Parser::parseOperatorFunctionId(NameAST *&node) Parser::TemplateArgumentListEntry *Parser::templateArgumentListEntry(unsigned tokenIndex) { - for (unsigned i = 0; i < _templateArgumentList.size(); ++i) { - TemplateArgumentListEntry *entry = &_templateArgumentList[i]; - if (entry->index == tokenIndex) - return entry; - } + std::map<unsigned, TemplateArgumentListEntry>::iterator it =_templateArgumentList.find(tokenIndex); + if (it != _templateArgumentList.end()) + return &it->second; return 0; } @@ -729,11 +731,11 @@ bool Parser::parseTemplateArgumentList(TemplateArgumentListAST *&node) } } - _templateArgumentList.push_back(TemplateArgumentListEntry(start, cursor(), node)); + _templateArgumentList.insert(std::make_pair(cursor(), TemplateArgumentListEntry(start, cursor(), node))); return true; } - _templateArgumentList.push_back(TemplateArgumentListEntry(start, cursor(), 0)); + _templateArgumentList.insert(std::make_pair(cursor(), TemplateArgumentListEntry(start, cursor(), 0))); return false; } diff --git a/src/shared/cplusplus/Parser.h b/src/shared/cplusplus/Parser.h index d9ccf6ab490..555e58c2703 100644 --- a/src/shared/cplusplus/Parser.h +++ b/src/shared/cplusplus/Parser.h @@ -53,6 +53,7 @@ #include "ASTfwd.h" #include "Token.h" #include "TranslationUnit.h" +#include <map> namespace CPlusPlus { @@ -308,7 +309,7 @@ private: bool _inFunctionBody: 1; bool _inObjCImplementationContext: 1; - Array<TemplateArgumentListEntry> _templateArgumentList; + std::map<unsigned, TemplateArgumentListEntry> _templateArgumentList; class Rewind; friend class Rewind; -- GitLab