SymbolDatabase; Use range based for loops

This commit is contained in:
Daniel Marjamäki 2021-08-09 12:43:21 +02:00
parent 111591a810
commit 0cb6603055
1 changed files with 47 additions and 48 deletions

View File

@ -866,18 +866,16 @@ void SymbolDatabase::createSymbolDatabaseNeedInitialization()
// check for default constructor // check for default constructor
bool hasDefaultConstructor = false; bool hasDefaultConstructor = false;
std::list<Function>::const_iterator func; for (Function& func: scope.functionList) {
if (func.type == Function::eConstructor) {
for (func = scope.functionList.begin(); func != scope.functionList.end(); ++func) {
if (func->type == Function::eConstructor) {
// check for no arguments: func ( ) // check for no arguments: func ( )
if (func->argCount() == 0) { if (func.argCount() == 0) {
hasDefaultConstructor = true; hasDefaultConstructor = true;
break; break;
} }
/** check for arguments with default values */ /** check for arguments with default values */
else if (func->argCount() == func->initializedArgCount()) { else if (func.argCount() == func.initializedArgCount()) {
hasDefaultConstructor = true; hasDefaultConstructor = true;
break; break;
} }
@ -895,20 +893,21 @@ void SymbolDatabase::createSymbolDatabaseNeedInitialization()
bool needInitialization = false; bool needInitialization = false;
bool unknown = false; bool unknown = false;
std::list<Variable>::const_iterator var; for (const Variable& var: scope.varlist) {
for (var = scope.varlist.begin(); var != scope.varlist.end() && !needInitialization; ++var) { if (var.isClass()) {
if (var->isClass()) { if (var.type()) {
if (var->type()) {
// does this type need initialization? // does this type need initialization?
if (var->type()->needInitialization == Type::NeedInitialization::True) if (var.type()->needInitialization == Type::NeedInitialization::True)
needInitialization = true; needInitialization = true;
else if (var->type()->needInitialization == Type::NeedInitialization::Unknown) { else if (var.type()->needInitialization == Type::NeedInitialization::Unknown) {
if (!(var->valueType() && var->valueType()->type == ValueType::CONTAINER)) if (!(var.valueType() && var.valueType()->type == ValueType::CONTAINER))
unknown = true; unknown = true;
} }
} }
} else if (!var->hasDefault() && !var->isStatic()) } else if (!var.hasDefault() && !var.isStatic()) {
needInitialization = true; needInitialization = true;
break;
}
} }
if (needInitialization) if (needInitialization)
@ -946,31 +945,31 @@ void SymbolDatabase::createSymbolDatabaseVariableSymbolTable()
// check all scopes for variables // check all scopes for variables
for (Scope& scope : scopeList) { for (Scope& scope : scopeList) {
// add all variables // add all variables
for (std::list<Variable>::iterator var = scope.varlist.begin(); var != scope.varlist.end(); ++var) { for (Variable& var: scope.varlist) {
const unsigned int varId = var->declarationId(); const unsigned int varId = var.declarationId();
if (varId) if (varId)
mVariableList[varId] = &(*var); mVariableList[varId] = &var;
// fix up variables without type // fix up variables without type
if (!var->type() && !var->typeStartToken()->isStandardType()) { if (!var.type() && !var.typeStartToken()->isStandardType()) {
const Type *type = findType(var->typeStartToken(), &scope); const Type *type = findType(var.typeStartToken(), &scope);
if (type) if (type)
var->type(type); var.type(type);
} }
} }
// add all function parameters // add all function parameters
for (Function& func : scope.functionList) { for (Function& func : scope.functionList) {
for (std::list<Variable>::iterator arg = func.argumentList.begin(); arg != func.argumentList.end(); ++arg) { for (Variable& arg: func.argumentList) {
// 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();
if (declarationId > 0U) if (declarationId > 0U)
mVariableList[declarationId] = &(*arg); mVariableList[declarationId] = &arg;
// fix up parameters without type // fix up parameters without type
if (!arg->type() && !arg->typeStartToken()->isStandardType()) { if (!arg.type() && !arg.typeStartToken()->isStandardType()) {
const Type *type = findTypeInNested(arg->typeStartToken(), &scope); const Type *type = findTypeInNested(arg.typeStartToken(), &scope);
if (type) if (type)
arg->type(type); arg.type(type);
} }
} }
} }
@ -1006,23 +1005,23 @@ void SymbolDatabase::createSymbolDatabaseVariableSymbolTable()
void SymbolDatabase::createSymbolDatabaseSetScopePointers() void SymbolDatabase::createSymbolDatabaseSetScopePointers()
{ {
// Set scope pointers // Set scope pointers
for (std::list<Scope>::iterator it = scopeList.begin(); it != scopeList.end(); ++it) { for (const Scope& scope: scopeList) {
Token* start = const_cast<Token*>(it->bodyStart); Token* start = const_cast<Token*>(scope.bodyStart);
Token* end = const_cast<Token*>(it->bodyEnd); Token* end = const_cast<Token*>(scope.bodyEnd);
if (it->type == Scope::eGlobal) { if (scope.type == Scope::eGlobal) {
start = const_cast<Token*>(mTokenizer->list.front()); start = const_cast<Token*>(mTokenizer->list.front());
end = const_cast<Token*>(mTokenizer->list.back()); end = const_cast<Token*>(mTokenizer->list.back());
} }
assert(start); assert(start);
assert(end); assert(end);
end->scope(&*it); end->scope(&scope);
for (Token* tok = start; tok != end; tok = tok->next()) { for (Token* tok = start; tok != end; tok = tok->next()) {
if (start != end && tok->str() == "{") { if (start != end && tok->str() == "{") {
bool isEndOfScope = false; bool isEndOfScope = false;
for (std::list<Scope*>::const_iterator innerScope = it->nestedList.begin(); innerScope != it->nestedList.end(); ++innerScope) { for (const Scope* innerScope: scope.nestedList) {
if (tok == (*innerScope)->bodyStart) { // Is begin of inner scope if (tok == innerScope->bodyStart) { // Is begin of inner scope
tok = tok->link(); tok = tok->link();
if (tok->next() == end || !tok->next()) { if (tok->next() == end || !tok->next()) {
isEndOfScope = true; isEndOfScope = true;
@ -1035,7 +1034,7 @@ void SymbolDatabase::createSymbolDatabaseSetScopePointers()
if (isEndOfScope) if (isEndOfScope)
break; break;
} }
tok->scope(&*it); tok->scope(&scope);
} }
} }
} }
@ -1044,13 +1043,13 @@ void SymbolDatabase::createSymbolDatabaseSetFunctionPointers(bool firstPass)
{ {
if (firstPass) { if (firstPass) {
// Set function definition and declaration pointers // Set function definition and declaration pointers
for (std::list<Scope>::iterator it = scopeList.begin(); it != scopeList.end(); ++it) { for (const Scope& scope: scopeList) {
for (std::list<Function>::const_iterator func = it->functionList.begin(); func != it->functionList.end(); ++func) { for (const Function& func: scope.functionList) {
if (func->tokenDef) if (func.tokenDef)
const_cast<Token *>(func->tokenDef)->function(&*func); const_cast<Token *>(func.tokenDef)->function(&func);
if (func->token) if (func.token)
const_cast<Token *>(func->token)->function(&*func); const_cast<Token *>(func.token)->function(&func);
} }
} }
} }
@ -1081,11 +1080,11 @@ void SymbolDatabase::createSymbolDatabaseSetFunctionPointers(bool firstPass)
} }
// Set C++ 11 delegate constructor function call pointers // Set C++ 11 delegate constructor function call pointers
for (std::list<Scope>::iterator it = scopeList.begin(); it != scopeList.end(); ++it) { for (const Scope& scope: scopeList) {
for (std::list<Function>::const_iterator func = it->functionList.begin(); func != it->functionList.end(); ++func) { for (const Function& func: scope.functionList) {
// look for initializer list // look for initializer list
if (func->isConstructor() && func->functionScope && func->functionScope->functionOf && func->arg) { if (func.isConstructor() && func.functionScope && func.functionScope->functionOf && func.arg) {
const Token * tok = func->arg->link()->next(); const Token * tok = func.arg->link()->next();
if (tok->str() == "noexcept") { if (tok->str() == "noexcept") {
const Token * closingParenTok = tok->linkAt(1); const Token * closingParenTok = tok->linkAt(1);
if (!closingParenTok || !closingParenTok->next()) { if (!closingParenTok || !closingParenTok->next()) {
@ -1097,10 +1096,10 @@ void SymbolDatabase::createSymbolDatabaseSetFunctionPointers(bool firstPass)
continue; continue;
} }
tok = tok->next(); tok = tok->next();
while (tok && tok != func->functionScope->bodyStart) { while (tok && tok != func.functionScope->bodyStart) {
if (Token::Match(tok, "%name% {|(")) { if (Token::Match(tok, "%name% {|(")) {
if (tok->str() == func->tokenDef->str()) { if (tok->str() == func.tokenDef->str()) {
const Function *function = func->functionScope->functionOf->findFunction(tok); const Function *function = func.functionScope->functionOf->findFunction(tok);
if (function) if (function)
const_cast<Token *>(tok)->function(function); const_cast<Token *>(tok)->function(function);
break; break;