symbol database: handle default values for function arguments properly

This commit is contained in:
Robert Reif 2011-03-29 23:16:13 -04:00
parent 9612573d8e
commit ce934f03a4
1 changed files with 11 additions and 2 deletions

View File

@ -1229,7 +1229,7 @@ unsigned int Function::initializedArgCount() const
void Function::addArguments(const SymbolDatabase *symbolDatabase, const Scope *scope) void Function::addArguments(const SymbolDatabase *symbolDatabase, const Scope *scope)
{ {
// check for non-empty argument list "( ... )" // check for non-empty argument list "( ... )"
if (arg->link() != arg->next()) if (arg->link() != arg->next() && !Token::simpleMatch(arg, "( void )"))
{ {
unsigned int count = 0; unsigned int count = 0;
const Token *startTok; const Token *startTok;
@ -1246,7 +1246,7 @@ void Function::addArguments(const SymbolDatabase *symbolDatabase, const Scope *s
isConstVar = bool(tok->str() == "const"); isConstVar = bool(tok->str() == "const");
isArrayVar = false; isArrayVar = false;
while (tok->str() != "," && tok->str() != ")") while (tok->str() != "," && tok->str() != ")" && tok->str() != "=")
{ {
if (tok->varId() != 0) if (tok->varId() != 0)
{ {
@ -1271,6 +1271,8 @@ void Function::addArguments(const SymbolDatabase *symbolDatabase, const Scope *s
symbolDatabase->debugMessage(nameTok, "Function::addArguments found argument \'" + nameTok->str() + "\' with varid 0."); symbolDatabase->debugMessage(nameTok, "Function::addArguments found argument \'" + nameTok->str() + "\' with varid 0.");
} }
else
endTok = startTok;
} }
else else
endTok = tok->previous(); endTok = tok->previous();
@ -1288,6 +1290,13 @@ void Function::addArguments(const SymbolDatabase *symbolDatabase, const Scope *s
argumentList.push_back(Variable(nameTok, startTok, endTok, count++, Argument, false, false, isConstVar, isClassVar, argType, functionScope, isArrayVar)); argumentList.push_back(Variable(nameTok, startTok, endTok, count++, Argument, false, false, isConstVar, isClassVar, argType, functionScope, isArrayVar));
// skip default values
if (tok->str() == "=")
{
while (tok->str() != "," && tok->str() != ")")
tok = tok->next();
}
if (tok->str() == ")") if (tok->str() == ")")
break; break;