From 21bf5173e522936f5b93fb370a131734062becc4 Mon Sep 17 00:00:00 2001 From: Robert Reif Date: Wed, 20 Feb 2013 07:46:06 +0100 Subject: [PATCH] Symbol database: faster implementation. Ticket: #4494 --- lib/symboldatabase.cpp | 35 +++++++++++++++-------------------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index f60ce53a1..0a3784a3e 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -892,28 +892,23 @@ SymbolDatabase::SymbolDatabase(const Tokenizer *tokenizer, const Settings *setti } // fill in missing variables if possible - for (std::size_t i = 1; i <= _tokenizer->varIdCount(); i++) { - // check each missing variable - if (_variableList[i] == 0) { - // find the token with this varid - for (const Token *tok = _tokenizer->tokens(); tok; tok = tok->next()) { - if (tok->varId() == i) { - // check if it is a member variable - const Token *tok1 = tok->tokAt(-2); - if (tok1 && Token::Match(tok1, "%var% .") && tok1->varId()) { - // check if this varid has a variable - const Variable *var = getVariableFromVarId(tok1->varId()); - if (var && var->type()) { - // find the member variable of this variable - const Variable *var1 = var->type()->getVariable(tok->str()); - if (var1) { - // add this variable to the look up table - _variableList[i] = var1; - } + const std::size_t functions = functionScopes.size(); + for (std::size_t i = 0; i < functions; ++i) { + const Scope *func = functionScopes[i]; + for (const Token *tok = func->classStart->next(); tok != func->classEnd; tok = tok->next()) { + // check for member variable + if (tok && tok->varId() && tok->next() && tok->next()->str() == ".") { + const Token *tok1 = tok->tokAt(2); + if (tok1 && tok1->varId() && _variableList[tok1->varId()] == 0) { + const Variable *var = _variableList[tok->varId()]; + if (var && var->type()) { + // find the member variable of this variable + const Variable *var1 = var->type()->getVariable(tok1->str()); + if (var1) { + // add this variable to the look up table + _variableList[tok1->varId()] = var1; } } - // found varid so stop searching - break; } } }