Symbol database: better handling of functions returning function pointer. ticket: #2468
This commit is contained in:
parent
c04107131b
commit
f5b26222ff
|
@ -281,6 +281,8 @@ SymbolDatabase::SymbolDatabase(const Tokenizer *tokenizer, const Settings *setti
|
|||
// has body?
|
||||
if (Token::Match(argStart->link(), ") const| {|:"))
|
||||
{
|
||||
Scope *old_scope = scope;
|
||||
|
||||
// class function
|
||||
if (tok->previous() && tok->previous()->str() == "::")
|
||||
addFunction(&scope, &tok, argStart);
|
||||
|
@ -310,21 +312,19 @@ SymbolDatabase::SymbolDatabase(const Tokenizer *tokenizer, const Settings *setti
|
|||
function.arg = function.argDef;
|
||||
function.type = Function::eFunction;
|
||||
|
||||
Scope *old_scope = scope;
|
||||
|
||||
addNewFunction(&scope, &tok);
|
||||
|
||||
if (scope)
|
||||
old_scope->functionList.push_back(function);
|
||||
}
|
||||
|
||||
// syntax error
|
||||
else
|
||||
if (!scope)
|
||||
{
|
||||
scope = old_scope;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// function returning function pointer with body
|
||||
else if (Token::simpleMatch(argStart->link(), ") ) (") &&
|
||||
|
@ -339,11 +339,37 @@ SymbolDatabase::SymbolDatabase(const Tokenizer *tokenizer, const Settings *setti
|
|||
|
||||
// regular function
|
||||
else
|
||||
{
|
||||
Function function;
|
||||
|
||||
// save the function definition argument start '('
|
||||
function.argDef = argStart;
|
||||
|
||||
// save the access type
|
||||
function.access = Public;
|
||||
|
||||
// save the function name location
|
||||
function.tokenDef = funcStart;
|
||||
function.token = funcStart;
|
||||
|
||||
function.isInline = false;
|
||||
function.hasBody = true;
|
||||
function.arg = function.argDef;
|
||||
function.type = Function::eFunction;
|
||||
function.retFuncPtr = true;
|
||||
|
||||
addNewFunction(&scope, &tok1);
|
||||
|
||||
if (scope)
|
||||
old_scope->functionList.push_back(function);
|
||||
}
|
||||
|
||||
// syntax error?
|
||||
if (!scope)
|
||||
{
|
||||
scope = old_scope;
|
||||
break;
|
||||
}
|
||||
|
||||
tok = tok1;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue