SymbolDatabase: Several small refactorizations

This commit is contained in:
PKEuS 2014-08-31 11:27:12 +02:00
parent 7784bbfa86
commit 9733a751ec
1 changed files with 12 additions and 25 deletions

View File

@ -43,8 +43,6 @@ SymbolDatabase::SymbolDatabase(const Tokenizer *tokenizer, const Settings *setti
// Store current access in each scope (depends on evaluation progress) // Store current access in each scope (depends on evaluation progress)
std::map<const Scope*, AccessControl> access; std::map<const Scope*, AccessControl> access;
std::map<const Token *, Scope *> back;
// find all scopes // find all scopes
for (const Token *tok = _tokenizer->tokens(); tok; tok = tok ? tok->next() : nullptr) { for (const Token *tok = _tokenizer->tokens(); tok; tok = tok ? tok->next() : nullptr) {
// #5593 suggested to add here: // #5593 suggested to add here:
@ -105,7 +103,6 @@ SymbolDatabase::SymbolDatabase(const Tokenizer *tokenizer, const Settings *setti
new_scope->type = Scope::eStruct; new_scope->type = Scope::eStruct;
} }
back[tok2->link()] = scope;
new_scope->classDef = tok; new_scope->classDef = tok;
new_scope->classStart = tok2; new_scope->classStart = tok2;
new_scope->classEnd = tok2->link(); new_scope->classEnd = tok2->link();
@ -160,8 +157,8 @@ SymbolDatabase::SymbolDatabase(const Tokenizer *tokenizer, const Settings *setti
} }
// Namespace and unknown macro (#3854) // Namespace and unknown macro (#3854)
else if (Token::Match(tok, "namespace %var% %type% (") && else if (_tokenizer->isCPP() &&
_tokenizer->isCPP() && Token::Match(tok, "namespace %var% %type% (") &&
tok->tokAt(2)->isUpperCaseName() && tok->tokAt(2)->isUpperCaseName() &&
Token::simpleMatch(tok->linkAt(3), ") {")) { Token::simpleMatch(tok->linkAt(3), ") {")) {
scopeList.push_back(Scope(this, tok, scope)); scopeList.push_back(Scope(this, tok, scope));
@ -290,11 +287,8 @@ SymbolDatabase::SymbolDatabase(const Tokenizer *tokenizer, const Settings *setti
else { else {
// check for end of scope // check for end of scope
if (tok == scope->classEnd) { if (tok == scope->classEnd) {
if (back.find(tok) != back.end()) { access.erase(scope);
scope = back[tok]; scope = const_cast<Scope*>(scope->nestedIn);
back.erase(tok);
} else
scope = const_cast<Scope*>(scope->nestedIn);
continue; continue;
} }
@ -740,7 +734,7 @@ SymbolDatabase::SymbolDatabase(const Tokenizer *tokenizer, const Settings *setti
scopeList.push_back(Scope(this, tok, scope, Scope::eElse, tok1)); scopeList.push_back(Scope(this, tok, scope, Scope::eElse, tok1));
if (tok->str() == "do") if (tok->str() == "do")
scopeList.push_back(Scope(this, tok, scope, Scope::eDo, tok1)); scopeList.push_back(Scope(this, tok, scope, Scope::eDo, tok1));
else if (tok->str() == "try") else //if (tok->str() == "try")
scopeList.push_back(Scope(this, tok, scope, Scope::eTry, tok1)); scopeList.push_back(Scope(this, tok, scope, Scope::eTry, tok1));
tok = tok1; tok = tok1;
@ -771,7 +765,7 @@ SymbolDatabase::SymbolDatabase(const Tokenizer *tokenizer, const Settings *setti
scopeList.push_back(Scope(this, tok->linkAt(-1)->linkAt(-1), scope, Scope::eLambda, tok)); scopeList.push_back(Scope(this, tok->linkAt(-1)->linkAt(-1), scope, Scope::eLambda, tok));
scope->nestedList.push_back(&scopeList.back()); scope->nestedList.push_back(&scopeList.back());
scope = &scopeList.back(); scope = &scopeList.back();
} else if (!Token::Match(tok->previous(), "=|,")) { } else if (!Token::Match(tok->previous(), "=|,|(|return")) {
scopeList.push_back(Scope(this, tok, scope, Scope::eUnconditional, tok)); scopeList.push_back(Scope(this, tok, scope, Scope::eUnconditional, tok));
scope->nestedList.push_back(&scopeList.back()); scope->nestedList.push_back(&scopeList.back());
scope = &scopeList.back(); scope = &scopeList.back();
@ -955,8 +949,7 @@ SymbolDatabase::SymbolDatabase(const Tokenizer *tokenizer, const Settings *setti
scope = &(*it); scope = &(*it);
// add all variables // add all variables
std::list<Variable>::iterator var; for (std::list<Variable>::iterator var = scope->varlist.begin(); var != scope->varlist.end(); ++var) {
for (var = scope->varlist.begin(); var != scope->varlist.end(); ++var) {
unsigned int varId = var->declarationId(); unsigned int varId = var->declarationId();
if (varId) if (varId)
_variableList[varId] = &(*var); _variableList[varId] = &(*var);
@ -969,10 +962,8 @@ SymbolDatabase::SymbolDatabase(const Tokenizer *tokenizer, const Settings *setti
} }
// add all function parameters // add all function parameters
std::list<Function>::iterator func; for (std::list<Function>::iterator func = scope->functionList.begin(); func != scope->functionList.end(); ++func) {
for (func = scope->functionList.begin(); func != scope->functionList.end(); ++func) { for (std::list<Variable>::iterator arg = func->argumentList.begin(); arg != func->argumentList.end(); ++arg) {
std::list<Variable>::iterator arg;
for (arg = func->argumentList.begin(); arg != func->argumentList.end(); ++arg) {
// check for named parameters // check for named parameters
if (arg->nameToken() && arg->declarationId()) { if (arg->nameToken() && arg->declarationId()) {
const unsigned int declarationId = arg->declarationId(); const unsigned int declarationId = arg->declarationId();
@ -1099,8 +1090,8 @@ bool SymbolDatabase::isFunction(const Token *tok, const Scope* outerScope, const
const Token* tok2 = tok->next()->link()->next(); const Token* tok2 = tok->next()->link()->next();
if (tok2 && if (tok2 &&
(Token::Match(tok2, "const| ;|{|=") || (Token::Match(tok2, "const| ;|{|=") ||
(Token::Match(tok2, "%var% ;|{") && tok2->isUpperCaseName()) || (tok2->isUpperCaseName() && Token::Match(tok2, "%var% ;|{")) ||
(Token::Match(tok2, "%var% (") && tok2->isUpperCaseName() && tok2->next()->link()->strAt(1) == "{") || (tok2->isUpperCaseName() && Token::Match(tok2, "%var% (") && tok2->next()->link()->strAt(1) == "{") ||
Token::Match(tok2, ": ::| %var% (|::|<|{") || Token::Match(tok2, ": ::| %var% (|::|<|{") ||
Token::Match(tok2, "= delete|default ;") || Token::Match(tok2, "= delete|default ;") ||
Token::Match(tok2, "const| noexcept {|:|;|=") || Token::Match(tok2, "const| noexcept {|:|;|=") ||
@ -2489,9 +2480,6 @@ void Scope::getVariableList()
// Is it a function? // Is it a function?
else if (tok->str() == "{") { else if (tok->str() == "{") {
tok = tok->link(); tok = tok->link();
// syntax error?
if (!tok)
return;
continue; continue;
} }
@ -2692,7 +2680,7 @@ static const Token* skipPointers(const Token* tok)
bool Scope::isVariableDeclaration(const Token* tok, const Token*& vartok, const Token*& typetok) const bool Scope::isVariableDeclaration(const Token* tok, const Token*& vartok, const Token*& typetok) const
{ {
if (tok && (tok->str() == "throw" || tok->str() == "new") && check->_tokenizer->isCPP()) if (tok && check && check->_tokenizer->isCPP() && (tok->str() == "throw" || tok->str() == "new"))
return false; return false;
const Token* localTypeTok = skipScopeIdentifiers(tok); const Token* localTypeTok = skipScopeIdentifiers(tok);
@ -3181,4 +3169,3 @@ Function * SymbolDatabase::findFunctionInScope(const Token *func, const Scope *n
return const_cast<Function *>(function); return const_cast<Function *>(function);
} }