SymbolDatabase; Use range based for loops
This commit is contained in:
parent
111591a810
commit
0cb6603055
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue