Simplified code in CheckUnusedFunctions
This commit is contained in:
parent
e9bc3b7acf
commit
493ab541ab
|
@ -165,31 +165,24 @@ void CheckUnusedFunctions::parseTokens(const Tokenizer &tokenizer, const char Fi
|
||||||
|
|
||||||
const Token *funcname = nullptr;
|
const Token *funcname = nullptr;
|
||||||
|
|
||||||
if (tok->scope()->isExecutable() && Token::Match(tok->next(), "%var% (")) {
|
if (tok->scope()->isExecutable() && Token::Match(tok, "%var% (")) {
|
||||||
|
funcname = tok;
|
||||||
|
} else if (tok->scope()->isExecutable() && Token::Match(tok, "%var% <") && Token::simpleMatch(tok->linkAt(1), "> (")) {
|
||||||
|
funcname = tok;
|
||||||
|
} else if (Token::Match(tok, "[;{}.,()[=+-/|!?:]")) {
|
||||||
funcname = tok->next();
|
funcname = tok->next();
|
||||||
}
|
if (funcname && funcname->str() == "&")
|
||||||
|
|
||||||
else if (tok->scope()->isExecutable() && Token::Match(tok->next(), "%var% <") && Token::simpleMatch(tok->linkAt(2), "> (")) {
|
|
||||||
funcname = tok->next();
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (Token::Match(tok, "[;{}.,()[=+-/|!?:] &| %var% [(),;]:}]")) {
|
|
||||||
funcname = tok->next();
|
|
||||||
if (funcname->str() == "&")
|
|
||||||
funcname = funcname->next();
|
funcname = funcname->next();
|
||||||
}
|
if (funcname && funcname->str() == "::")
|
||||||
|
|
||||||
else if (Token::Match(tok, "[;{}.,()[=+-/|!?:] &| %var% :: %var%")) {
|
|
||||||
funcname = tok->next();
|
|
||||||
if (funcname->str() == "&")
|
|
||||||
funcname = funcname->next();
|
funcname = funcname->next();
|
||||||
while (Token::Match(funcname, "%var% :: %var%"))
|
while (Token::Match(funcname, "%var% :: %var%"))
|
||||||
funcname = funcname->tokAt(2);
|
funcname = funcname->tokAt(2);
|
||||||
if (!Token::Match(funcname, "%var% [(),;:}]"))
|
|
||||||
|
if (!Token::Match(funcname, "%var% [(),;]:}]"))
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
if (!funcname)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// funcname ( => Assert that the end parentheses isn't followed by {
|
// funcname ( => Assert that the end parentheses isn't followed by {
|
||||||
|
|
|
@ -121,12 +121,24 @@ private:
|
||||||
}
|
}
|
||||||
|
|
||||||
void functionpointer() {
|
void functionpointer() {
|
||||||
|
check("void foo() { }\n"
|
||||||
|
"int main() {\n"
|
||||||
|
" f(&foo);\n"
|
||||||
|
" return 0\n"
|
||||||
|
"}");
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
||||||
|
check("void foo() { }\n"
|
||||||
|
"int main() {\n"
|
||||||
|
" f(&::foo);\n"
|
||||||
|
" return 0\n"
|
||||||
|
"}");
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
||||||
check("namespace abc {\n"
|
check("namespace abc {\n"
|
||||||
" void foo() { }\n"
|
" void foo() { }\n"
|
||||||
"};\n"
|
"};\n"
|
||||||
"\n"
|
"int main() {\n"
|
||||||
"int main()\n"
|
|
||||||
"{\n"
|
|
||||||
" f(&abc::foo);\n"
|
" f(&abc::foo);\n"
|
||||||
" return 0\n"
|
" return 0\n"
|
||||||
"}");
|
"}");
|
||||||
|
@ -135,20 +147,25 @@ private:
|
||||||
check("namespace abc {\n"
|
check("namespace abc {\n"
|
||||||
" void foo() { }\n"
|
" void foo() { }\n"
|
||||||
"};\n"
|
"};\n"
|
||||||
"\n"
|
"int main() {\n"
|
||||||
"int main()\n"
|
|
||||||
"{\n"
|
|
||||||
" f = &abc::foo;\n"
|
" f = &abc::foo;\n"
|
||||||
" return 0\n"
|
" return 0\n"
|
||||||
"}");
|
"}");
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
||||||
|
check("namespace abc {\n"
|
||||||
|
" void foo() { }\n"
|
||||||
|
"};\n"
|
||||||
|
"int main() {\n"
|
||||||
|
" f = &::abc::foo;\n"
|
||||||
|
" return 0\n"
|
||||||
|
"}");
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
||||||
check("namespace abc {\n" // #3875
|
check("namespace abc {\n" // #3875
|
||||||
" void foo() { }\n"
|
" void foo() { }\n"
|
||||||
"};\n"
|
"};\n"
|
||||||
"\n"
|
"int main() {\n"
|
||||||
"int main()\n"
|
|
||||||
"{\n"
|
|
||||||
" f(abc::foo);\n"
|
" f(abc::foo);\n"
|
||||||
" return 0\n"
|
" return 0\n"
|
||||||
"}");
|
"}");
|
||||||
|
|
Loading…
Reference in New Issue