SymbolDatabase: Refactoring parsing of ) ... in functions
This commit is contained in:
parent
6efe118aa3
commit
bd54986017
|
@ -1742,80 +1742,41 @@ Function::Function(const Tokenizer *_tokenizer, const Token *tok, const Scope *s
|
||||||
|
|
||||||
const Token *end = argDef->link();
|
const Token *end = argDef->link();
|
||||||
|
|
||||||
// const function
|
// Parse attributes
|
||||||
if (end->next()->str() == "const")
|
|
||||||
isConst(true);
|
|
||||||
|
|
||||||
if (_tokenizer->isFunctionHead(end, ";")) {
|
|
||||||
// find the function implementation later
|
|
||||||
tok = end->next();
|
tok = end->next();
|
||||||
|
while (tok) {
|
||||||
if (tok->str() == "const")
|
if (tok->str() == "const")
|
||||||
tok = tok->next();
|
isConst(true);
|
||||||
|
else if (tok->str() == "&")
|
||||||
if (tok->str() == "&") {
|
|
||||||
hasLvalRefQualifier(true);
|
hasLvalRefQualifier(true);
|
||||||
tok = tok->next();
|
else if (tok->str() == "&&")
|
||||||
} else if (tok->str() == "&&") {
|
|
||||||
hasRvalRefQualifier(true);
|
hasRvalRefQualifier(true);
|
||||||
tok = tok->next();
|
else if (tok->str() == "noexcept") {
|
||||||
} else if (tok->str() == "noexcept") {
|
|
||||||
isNoExcept(!Token::simpleMatch(tok->next(), "( false )"));
|
isNoExcept(!Token::simpleMatch(tok->next(), "( false )"));
|
||||||
tok = tok->next();
|
tok = tok->next();
|
||||||
if (tok->str() == "(")
|
if (tok->str() == "(")
|
||||||
tok = tok->link()->next();
|
tok = tok->link();
|
||||||
} else if (Token::simpleMatch(tok, "throw (")) {
|
} else if (Token::simpleMatch(tok, "throw (")) {
|
||||||
isThrow(true);
|
isThrow(true);
|
||||||
if (tok->strAt(2) != ")")
|
if (tok->strAt(2) != ")")
|
||||||
throwArg = end->tokAt(2);
|
throwArg = tok->next();
|
||||||
tok = tok->linkAt(1)->next();
|
tok = tok->linkAt(1);
|
||||||
}
|
} else if (Token::Match(tok, "= 0|default|delete ;")) {
|
||||||
|
|
||||||
if (Token::Match(tok, "= 0|default|delete ;")) {
|
|
||||||
const std::string& modifier = tok->strAt(1);
|
const std::string& modifier = tok->strAt(1);
|
||||||
isPure(modifier == "0");
|
isPure(modifier == "0");
|
||||||
isDefault(modifier == "default");
|
isDefault(modifier == "default");
|
||||||
isDelete(modifier == "delete");
|
isDelete(modifier == "delete");
|
||||||
|
} else
|
||||||
|
break;
|
||||||
|
tok = tok->next();
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
|
if (!_tokenizer->isFunctionHead(end, ";")) {
|
||||||
// assume implementation is inline (definition and implementation same)
|
// assume implementation is inline (definition and implementation same)
|
||||||
token = tokenDef;
|
token = tokenDef;
|
||||||
arg = argDef;
|
arg = argDef;
|
||||||
|
|
||||||
isInline(true);
|
isInline(true);
|
||||||
hasBody(true);
|
hasBody(true);
|
||||||
|
|
||||||
if (Token::Match(end, ") const| noexcept")) {
|
|
||||||
int argPos = 2;
|
|
||||||
|
|
||||||
if (end->strAt(1) == "const")
|
|
||||||
argPos++;
|
|
||||||
|
|
||||||
if (end->strAt(argPos) == "(")
|
|
||||||
noexceptArg = end->tokAt(argPos + 1);
|
|
||||||
|
|
||||||
isNoExcept(true);
|
|
||||||
} else if (Token::Match(end, ") const| throw (")) {
|
|
||||||
int argPos = 3;
|
|
||||||
|
|
||||||
if (end->strAt(1) == "const")
|
|
||||||
argPos++;
|
|
||||||
|
|
||||||
if (end->strAt(argPos) != ")")
|
|
||||||
throwArg = end->tokAt(argPos);
|
|
||||||
|
|
||||||
isThrow(true);
|
|
||||||
} else if (Token::Match(end, ") const| &|&&| [;{]")) {
|
|
||||||
int argPos = 1;
|
|
||||||
|
|
||||||
if (end->strAt(argPos) == "const")
|
|
||||||
argPos++;
|
|
||||||
|
|
||||||
if (end->strAt(argPos) == "&")
|
|
||||||
hasLvalRefQualifier(true);
|
|
||||||
else if (end->strAt(argPos) == "&&")
|
|
||||||
hasRvalRefQualifier(true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue