Refactoring. Use Token::Match instead of hardcoded patterns to increase readability.

This commit is contained in:
Simon Martin 2014-09-14 11:26:16 +02:00 committed by Daniel Marjamäki
parent d354cdc02c
commit 53b58f0ed9
6 changed files with 70 additions and 70 deletions

View File

@ -638,7 +638,7 @@ SymbolDatabase::SymbolDatabase(const Tokenizer *tokenizer, const Settings *setti
} }
// has body? // has body?
if (scopeBegin->str() == "{" || scopeBegin->str() == ":") { if (Token::Match(scopeBegin, "{|:")) {
tok = funcStart; tok = funcStart;
// class function // class function
@ -1164,7 +1164,7 @@ void Variable::evaluate()
tok = tok->next(); tok = tok->next();
} }
while (_start && _start->next() && (_start->str() == "static" || _start->str() == "const")) while (Token::Match(_start, "static|const %any%"))
_start = _start->next(); _start = _start->next();
while (_end && _end->previous() && _end->str() == "const") while (_end && _end->previous() && _end->str() == "const")
_end = _end->previous(); _end = _end->previous();
@ -1203,9 +1203,9 @@ void Variable::evaluate()
} }
if (_start) { if (_start) {
if (_start->str() == "bool" || _start->str() == "char" || _start->str() == "short" || _start->str() == "int" || _start->str() == "long") if (Token::Match(_start, "bool|char|short|int|long"))
setFlag(fIsIntType, true); setFlag(fIsIntType, true);
else if (_start->str() == "float" || _start->str() == "double") else if (Token::Match(_start, "float|double"))
setFlag(fIsFloatType, true); setFlag(fIsFloatType, true);
} }
} }
@ -1578,7 +1578,7 @@ void SymbolDatabase::addNewFunction(Scope **scope, const Token **tok)
// skip to start of function // skip to start of function
bool foundInitLit = false; bool foundInitLit = false;
while (tok1 && (tok1->str() != "{" || (foundInitLit && tok1->previous()->isName()))) { while (tok1 && (tok1->str() != "{" || (foundInitLit && tok1->previous()->isName()))) {
if (tok1->str() == "(" || tok1->str() == "{") if (Token::Match(tok1, "(|{"))
tok1 = tok1->link(); tok1 = tok1->link();
if (tok1->str() == ":") if (tok1->str() == ":")
foundInitLit = true; foundInitLit = true;
@ -2192,7 +2192,7 @@ void Function::addArguments(const SymbolDatabase *symbolDatabase, const Scope *s
const Token* endTok = nullptr; const Token* endTok = nullptr;
const Token* nameTok = nullptr; const Token* nameTok = nullptr;
if (tok->str() == "," || tok->str() == ")") if (Token::Match(tok, ",|)"))
return; // Syntax error return; // Syntax error
do { do {
@ -2608,7 +2608,7 @@ const Token *Scope::checkVariable(const Token *tok, AccessControl varaccess)
if (tok && isVariableDeclaration(tok, vartok, typetok)) { if (tok && isVariableDeclaration(tok, vartok, typetok)) {
// If the vartok was set in the if-blocks above, create a entry for this variable.. // If the vartok was set in the if-blocks above, create a entry for this variable..
tok = vartok->next(); tok = vartok->next();
while (tok && (tok->str() == "[" || tok->str() == "{")) while (tok && Token::Match(tok, "[|{"))
tok = tok->link()->next(); tok = tok->link()->next();
if (vartok->varId() == 0) { if (vartok->varId() == 0) {
@ -2681,7 +2681,7 @@ static const Token* skipPointers(const Token* tok)
bool Scope::isVariableDeclaration(const Token* tok, const Token*& vartok, const Token*& typetok) const bool Scope::isVariableDeclaration(const Token* tok, const Token*& vartok, const Token*& typetok) const
{ {
if (tok && check && check->_tokenizer->isCPP() && (tok->str() == "throw" || tok->str() == "new")) if (tok && check && check->_tokenizer->isCPP() && Token::Match(tok, "throw|new"))
return false; return false;
const Token* localTypeTok = skipScopeIdentifiers(tok); const Token* localTypeTok = skipScopeIdentifiers(tok);

View File

@ -285,7 +285,7 @@ unsigned int TemplateSimplifier::templateParameters(const Token *tok)
return 0; return 0;
// Function pointer or prototype.. // Function pointer or prototype..
while (tok && (tok->str() == "(" || tok->str() == "[")) { while (tok && Token::Match(tok, "(|[")) {
tok = tok->link()->next(); tok = tok->link()->next();
while (tok && Token::Match(tok, "const|volatile")) // Ticket #5786: Skip function cv-qualifiers while (tok && Token::Match(tok, "const|volatile")) // Ticket #5786: Skip function cv-qualifiers
tok = tok->next(); tok = tok->next();
@ -303,7 +303,7 @@ unsigned int TemplateSimplifier::templateParameters(const Token *tok)
return 0; return 0;
// ,/> // ,/>
while (tok->str() == ">" || tok->str() == ">>") { while (Token::Match(tok, ">|>>")) {
if (level == 0) if (level == 0)
return numberOfParameters; return numberOfParameters;
--level; --level;
@ -564,7 +564,7 @@ void TemplateSimplifier::useDefaultArgumentValues(const std::list<Token *> &temp
++templateParmDepth; ++templateParmDepth;
// end of template parameters? // end of template parameters?
if (tok->str() == ">" || tok->str() == ">>") { if (Token::Match(tok, ">|>>")) {
if (Token::Match(tok, ">|>> class|struct %var%")) if (Token::Match(tok, ">|>> class|struct %var%"))
classname = tok->strAt(2); classname = tok->strAt(2);
templateParmDepth -= (1 + (tok->str() == ">>")); templateParmDepth -= (1 + (tok->str() == ">>"));
@ -722,7 +722,7 @@ void TemplateSimplifier::expandTemplate(
std::list<Token *> &templateInstantiations) std::list<Token *> &templateInstantiations)
{ {
for (const Token *tok3 = tokenlist.front(); tok3; tok3 = tok3 ? tok3->next() : nullptr) { for (const Token *tok3 = tokenlist.front(); tok3; tok3 = tok3 ? tok3->next() : nullptr) {
if (tok3->str() == "{" || tok3->str() == "(" || tok3->str() == "[") if (Token::Match(tok3, "{|(|["))
tok3 = tok3->link(); tok3 = tok3->link();
// Start of template.. // Start of template..
@ -843,11 +843,11 @@ static bool isLowerThanShift(const Token* lower)
} }
static bool isLowerThanPlusMinus(const Token* lower) static bool isLowerThanPlusMinus(const Token* lower)
{ {
return isLowerThanShift(lower) || lower->str() == "<<" || lower->str() == ">>"; return isLowerThanShift(lower) || Token::Match(lower, "<<|>>");
} }
static bool isLowerThanMulDiv(const Token* lower) static bool isLowerThanMulDiv(const Token* lower)
{ {
return isLowerThanPlusMinus(lower) || lower->str() == "+" || lower->str() == "-"; return isLowerThanPlusMinus(lower) || Token::Match(lower, "+|-");
} }
static bool isLowerEqualThanMulDiv(const Token* lower) static bool isLowerEqualThanMulDiv(const Token* lower)
{ {
@ -1222,7 +1222,7 @@ bool TemplateSimplifier::simplifyTemplateInstantiations(
for (const Token *tok3 = tok2->tokAt(2); tok3 && (indentlevel > 0 || tok3->str() != ">"); tok3 = tok3->next()) { for (const Token *tok3 = tok2->tokAt(2); tok3 && (indentlevel > 0 || tok3->str() != ">"); tok3 = tok3->next()) {
// #2648 - unhandled parentheses => bail out // #2648 - unhandled parentheses => bail out
// #2721 - unhandled [ => bail out // #2721 - unhandled [ => bail out
if (tok3->str() == "(" || tok3->str() == "[") { if (Token::Match(tok3, "(|[")) {
typeForNewNameStr.clear(); typeForNewNameStr.clear();
break; break;
} }

View File

@ -719,9 +719,9 @@ Token* Token::nextArgument() const
for (const Token* tok = this; tok; tok = tok->next()) { for (const Token* tok = this; tok; tok = tok->next()) {
if (tok->str() == ",") if (tok->str() == ",")
return tok->next(); return tok->next();
else if (tok->link() && (tok->str() == "(" || tok->str() == "{" || tok->str() == "[" || tok->str() == "<")) else if (tok->link() && Token::Match(tok, "(|{|[|<"))
tok = tok->link(); tok = tok->link();
else if (tok->str() == ")" || tok->str() == ";") else if (Token::Match(tok, ")|;"))
return 0; return 0;
} }
return 0; return 0;
@ -732,13 +732,13 @@ Token* Token::nextArgumentBeforeCreateLinks2() const
for (const Token* tok = this; tok; tok = tok->next()) { for (const Token* tok = this; tok; tok = tok->next()) {
if (tok->str() == ",") if (tok->str() == ",")
return tok->next(); return tok->next();
else if (tok->link() && (tok->str() == "(" || tok->str() == "{" || tok->str() == "[")) else if (tok->link() && Token::Match(tok, "(|{|["))
tok = tok->link(); tok = tok->link();
else if (tok->str() == "<") { else if (tok->str() == "<") {
const Token* temp = tok->findClosingBracket(); const Token* temp = tok->findClosingBracket();
if (temp) if (temp)
tok = temp; tok = temp;
} else if (tok->str() == ")" || tok->str() == ";") } else if (Token::Match(tok, ")|;"))
return 0; return 0;
} }
return 0; return 0;
@ -751,9 +751,9 @@ const Token * Token::findClosingBracket() const
if (_str == "<") { if (_str == "<") {
unsigned int depth = 0; unsigned int depth = 0;
for (closing = this; closing != nullptr; closing = closing->next()) { for (closing = this; closing != nullptr; closing = closing->next()) {
if (closing->str() == "{" || closing->str() == "[" || closing->str() == "(") if (Token::Match(closing, "{|[|("))
closing = closing->link(); closing = closing->link();
else if (closing->str() == "}" || closing->str() == "]" || closing->str() == ")" || closing->str() == ";" || closing->str() == "=") else if (Token::Match(closing, "}|]|)|;|="))
break; break;
else if (closing->str() == "<") else if (closing->str() == "<")
++depth; ++depth;

View File

@ -115,9 +115,9 @@ Token *Tokenizer::copyTokens(Token *dest, const Token *first, const Token *last,
tok2->varId(tok->varId()); tok2->varId(tok->varId());
// Check for links and fix them up // Check for links and fix them up
if (tok2->str() == "(" || tok2->str() == "[" || tok2->str() == "{") if (Token::Match(tok2, "(|[|{"))
links.push(tok2); links.push(tok2);
else if (tok2->str() == ")" || tok2->str() == "]" || tok2->str() == "}") { else if (Token::Match(tok2, ")|]|}")) {
if (links.empty()) if (links.empty())
return tok2; return tok2;
@ -1524,7 +1524,7 @@ void Tokenizer::simplifyMulAndParens()
} }
if (!tokend || !(tokend->isAssignmentOp())) if (!tokend || !(tokend->isAssignmentOp()))
continue; continue;
while (tokbegin && (tokbegin->str() == "&" || tokbegin->str() == "(")) { while (tokbegin && (Token::Match(tokbegin, "&|("))) {
if (tokbegin->str() == "&") { if (tokbegin->str() == "&") {
if (Token::Match(tokbegin->tokAt(-2), "[;{}&(] *")) { if (Token::Match(tokbegin->tokAt(-2), "[;{}&(] *")) {
//remove '* &' //remove '* &'
@ -1760,7 +1760,7 @@ void Tokenizer::combineOperators()
} }
else if ((c1 == 'p' || c1 == '_') && tok->next()->str() == ":" && tok->strAt(2) != ":") { else if ((c1 == 'p' || c1 == '_') && tok->next()->str() == ":" && tok->strAt(2) != ":") {
if (tok->str() == "private" || tok->str() == "protected" || tok->str() == "public" || tok->str() == "__published") { if (Token::Match(tok, "private|protected|public|__published")) {
tok->str(tok->str() + ":"); tok->str(tok->str() + ":");
tok->deleteNext(); tok->deleteNext();
continue; continue;
@ -2035,7 +2035,7 @@ void Tokenizer::arraySize()
tok = tok->next(); tok = tok->next();
Token *end = tok->linkAt(3); Token *end = tok->linkAt(3);
for (Token *tok2 = tok->tokAt(4); tok2 && tok2 != end; tok2 = tok2->next()) { for (Token *tok2 = tok->tokAt(4); tok2 && tok2 != end; tok2 = tok2->next()) {
if (tok2->str() == "{" || tok2->str() == "(" || tok2->str() == "[") if (Token::Match(tok2, "{|(|["))
tok2 = tok2->link(); tok2 = tok2->link();
else if (tok2->str() == "<") { // Bailout. TODO: When link() supports <>, this bailout becomes unnecessary else if (tok2->str() == "<") { // Bailout. TODO: When link() supports <>, this bailout becomes unnecessary
sz = 0; sz = 0;
@ -2086,7 +2086,7 @@ Token * Tokenizer::startOfFunction(Token * tok)
if (tok && tok->str() == ")") { if (tok && tok->str() == ")") {
tok = tok->next(); tok = tok->next();
while (tok && tok->str() != "{") { while (tok && tok->str() != "{") {
if (tok->str() == "const" || tok->str() == "volatile") { if (Token::Match(tok, "const|volatile")) {
tok = tok->next(); tok = tok->next();
} else if (tok->str() == "noexcept") { } else if (tok->str() == "noexcept") {
tok = tok->next(); tok = tok->next();
@ -2119,7 +2119,7 @@ const Token * Tokenizer::startOfExecutableScope(const Token * tok)
bool inInit = false; bool inInit = false;
while (tok && tok->str() != "{") { while (tok && tok->str() != "{") {
if (!inInit) { if (!inInit) {
if (tok->str() == "const" || tok->str() == "volatile") { if (Token::Match(tok, "const|volatile")) {
tok = tok->next(); tok = tok->next();
} else if (tok->str() == "noexcept") { } else if (tok->str() == "noexcept") {
tok = tok->next(); tok = tok->next();
@ -2185,12 +2185,12 @@ void Tokenizer::simplifyLabelsCaseDefault()
executablescope = false; executablescope = false;
continue; continue;
} }
} else if (tok->str() == "(" || tok->str() == "[") } else if (Token::Match(tok, "(|["))
tok = tok->link(); tok = tok->link();
if (Token::Match(tok, "[;{}] case")) { if (Token::Match(tok, "[;{}] case")) {
while (nullptr != (tok = tok->next())) { while (nullptr != (tok = tok->next())) {
if (tok->str() == "(" || tok->str() == "[") { if (Token::Match(tok, "(|[")) {
tok = tok->link(); tok = tok->link();
} else if (tok->str() == "?") { } else if (tok->str() == "?") {
Token *tok1 = skipTernaryOp(tok); Token *tok1 = skipTernaryOp(tok);
@ -2269,7 +2269,7 @@ static bool setVarIdParseDeclaration(const Token **tok, const std::map<std::stri
if (tok2->isName()) { if (tok2->isName()) {
if (cpp && Token::Match(tok2, "namespace|public|private|protected")) if (cpp && Token::Match(tok2, "namespace|public|private|protected"))
return false; return false;
if (tok2->str() == "struct" || tok2->str() == "union" || (cpp && (tok2->str() == "class" || tok2->str() == "typename"))) { if (Token::Match(tok2, "struct|union") || (cpp && Token::Match(tok2, "class|typename"))) {
hasstruct = true; hasstruct = true;
typeCount = 0; typeCount = 0;
singleNameCount = 0; singleNameCount = 0;
@ -2291,7 +2291,7 @@ static bool setVarIdParseDeclaration(const Token **tok, const std::map<std::stri
if (!Token::Match(tok2, ">|>>")) if (!Token::Match(tok2, ">|>>"))
break; break;
singleNameCount = 1; singleNameCount = 1;
} else if (tok2->str() == "&" || tok2->str() == "&&") { } else if (Token::Match(tok2, "&|&&")) {
ref = !bracket; ref = !bracket;
} else if (singleNameCount == 1 && tok2->str() == "(" && Token::Match(tok2->link()->next(), "(|[")) { } else if (singleNameCount == 1 && tok2->str() == "(" && Token::Match(tok2->link()->next(), "(|[")) {
bracket = true; // Skip: Seems to be valid pointer to array or function pointer bracket = true; // Skip: Seems to be valid pointer to array or function pointer
@ -2309,7 +2309,7 @@ static bool setVarIdParseDeclaration(const Token **tok, const std::map<std::stri
// In executable scopes, references must be assigned // In executable scopes, references must be assigned
// Catching by reference is an exception // Catching by reference is an exception
if (executableScope && ref) { if (executableScope && ref) {
if (tok2->str() == "(" || tok2->str() == "=" || tok2->str() == "{") if (Token::Match(tok2, "(|=|{"))
; // reference is assigned => ok ; // reference is assigned => ok
else if (tok2->str() != ")" || tok2->link()->strAt(-1) != "catch") else if (tok2->str() != ")" || tok2->link()->strAt(-1) != "catch")
return false; // not catching by reference => not declaration return false; // not catching by reference => not declaration
@ -2856,7 +2856,7 @@ void Tokenizer::createLinks2()
type.pop(); type.pop();
else if (token->str() == "<" && token->previous() && token->previous()->isName() && !token->previous()->varId()) else if (token->str() == "<" && token->previous() && token->previous()->isName() && !token->previous()->varId())
type.push(token); type.push(token);
else if (token->str() == ">" || token->str() == ">>") { else if (Token::Match(token, ">|>>")) {
if (type.empty() || type.top()->str() != "<") // < and > don't match. if (type.empty() || type.top()->str() != "<") // < and > don't match.
continue; continue;
if (token->next() && !Token::Match(token->next(), "%var%|>|>>|&|*|::|,|(|)|{|;|[")) if (token->next() && !Token::Match(token->next(), "%var%|>|>>|&|*|::|,|(|)|{|;|["))
@ -4071,7 +4071,7 @@ void Tokenizer::removeRedundantAssignment()
void Tokenizer::simplifyRealloc() void Tokenizer::simplifyRealloc()
{ {
for (Token *tok = list.front(); tok; tok = tok->next()) { for (Token *tok = list.front(); tok; tok = tok->next()) {
if (tok->str() == "(" || tok->str() == "[" || if (Token::Match(tok, "(|[") ||
(tok->str() == "{" && tok->previous() && tok->previous()->str() == "=")) (tok->str() == "{" && tok->previous() && tok->previous()->str() == "="))
tok = tok->link(); tok = tok->link();
else if (Token::Match(tok, "[;{}] %var% = realloc (")) { else if (Token::Match(tok, "[;{}] %var% = realloc (")) {
@ -4124,7 +4124,7 @@ void Tokenizer::simplifyEmptyNamespaces()
tok = tok->previous(); tok = tok->previous();
goback = false; goback = false;
} }
if (tok->str() == "(" || tok->str() == "[" || tok->str() == "{") { if (Token::Match(tok, "(|[|{")) {
tok = tok->link(); tok = tok->link();
continue; continue;
} }
@ -4150,7 +4150,7 @@ void Tokenizer::simplifyFlowControl()
{ {
for (Token *begin = list.front(); begin; begin = begin->next()) { for (Token *begin = list.front(); begin; begin = begin->next()) {
if (begin->str() == "(" || begin->str() == "[" || if (Token::Match(begin, "(|[") ||
(begin->str() == "{" && begin->previous() && begin->strAt(-1) == "=")) (begin->str() == "{" && begin->previous() && begin->strAt(-1) == "="))
begin = begin->link(); begin = begin->link();
@ -4163,7 +4163,7 @@ void Tokenizer::simplifyFlowControl()
bool stilldead = false; bool stilldead = false;
for (Token *tok = begin; tok && tok != end; tok = tok->next()) { for (Token *tok = begin; tok && tok != end; tok = tok->next()) {
if (tok->str() == "(" || tok->str() == "[") { if (Token::Match(tok, "(|[")) {
tok = tok->link(); tok = tok->link();
continue; continue;
} }
@ -4200,7 +4200,7 @@ void Tokenizer::simplifyFlowControl()
//TODO: ensure that we exclude user-defined 'exit|abort|throw', except for 'noreturn' //TODO: ensure that we exclude user-defined 'exit|abort|throw', except for 'noreturn'
//catch the first ';' //catch the first ';'
for (Token *tok2 = tok->next(); tok2; tok2 = tok2->next()) { for (Token *tok2 = tok->next(); tok2; tok2 = tok2->next()) {
if (tok2->str() == "(" || tok2->str() == "[") { if (Token::Match(tok2, "(|[")) {
tok2 = tok2->link(); tok2 = tok2->link();
} else if (tok2->str() == ";") { } else if (tok2->str() == ";") {
tok = tok2; tok = tok2;
@ -4640,7 +4640,7 @@ bool Tokenizer::simplifyConditions()
for (Token *tok = list.front(); tok; tok = tok->next()) { for (Token *tok = list.front(); tok; tok = tok->next()) {
if (Token::Match(tok, "! %bool%|%num%")) { if (Token::Match(tok, "! %bool%|%num%")) {
tok->deleteThis(); tok->deleteThis();
if (tok->str() == "0" || tok->str() == "false") if (Token::Match(tok, "0|false"))
tok->str("true"); tok->str("true");
else else
tok->str("false"); tok->str("false");
@ -4816,7 +4816,7 @@ bool Tokenizer::simplifyConstTernaryOp()
tok->next()->deleteNext(); tok->next()->deleteNext();
} }
if (tok->next()->str() == "false" || tok->next()->str() == "0") { if (Token::Match(tok->next(), "false|0")) {
// Use code after semicolon, remove code before it. // Use code after semicolon, remove code before it.
Token::eraseTokens(tok, semicolon); Token::eraseTokens(tok, semicolon);
@ -4831,7 +4831,7 @@ bool Tokenizer::simplifyConstTernaryOp()
unsigned int ternaryOplevel = 0; unsigned int ternaryOplevel = 0;
for (const Token *endTok = semicolon; endTok; endTok = endTok->next()) { for (const Token *endTok = semicolon; endTok; endTok = endTok->next()) {
if (endTok->str() == "(" || endTok->str() == "[" || endTok->str() == "{") { if (Token::Match(endTok, "(|[|{")) {
endTok = endTok->link(); endTok = endTok->link();
} }
@ -4979,7 +4979,7 @@ void Tokenizer::simplifyCasts()
void Tokenizer::simplifyFunctionParameters() void Tokenizer::simplifyFunctionParameters()
{ {
for (Token *tok = list.front(); tok; tok = tok->next()) { for (Token *tok = list.front(); tok; tok = tok->next()) {
if (tok->str() == "{" || tok->str() == "[" || tok->str() == "(") { if (Token::Match(tok, "{|[|(")) {
tok = tok->link(); tok = tok->link();
} }
@ -5065,7 +5065,7 @@ void Tokenizer::simplifyFunctionParameters()
std::map<std::string, Token *> argumentNames2; std::map<std::string, Token *> argumentNames2;
while (tok1 && tok1->str() != "{") { while (tok1 && tok1->str() != "{") {
if (tok1->str() == "(" || tok1->str() == ")") { if (Token::Match(tok1, "(|)")) {
bailOut = true; bailOut = true;
break; break;
} }
@ -5283,7 +5283,7 @@ void Tokenizer::simplifyVarDecl(Token * tokBegin, Token * tokEnd, bool only_k_r_
} }
if (only_k_r_fpar && finishedwithkr) { if (only_k_r_fpar && finishedwithkr) {
if (tok->str() == "(" || tok->str() == "[" || tok->str() == "{") { if (Token::Match(tok, "(|[|{")) {
tok = tok->link(); tok = tok->link();
if (tok->next() && Token::Match(tok, ") !!{")) if (tok->next() && Token::Match(tok, ") !!{"))
tok = tok->next(); tok = tok->next();
@ -5448,7 +5448,7 @@ void Tokenizer::simplifyVarDecl(Token * tokBegin, Token * tokEnd, bool only_k_r_
if (tok2->str() == "=" && (isstatic || (isconst && !ispointer))) { if (tok2->str() == "=" && (isstatic || (isconst && !ispointer))) {
//do not split const non-pointer variables.. //do not split const non-pointer variables..
while (tok2 && tok2->str() != "," && tok2->str() != ";") { while (tok2 && tok2->str() != "," && tok2->str() != ";") {
if (tok2->str() == "{" || tok2->str() == "(" || tok2->str() == "[") if (Token::Match(tok2, "{|(|["))
tok2 = tok2->link(); tok2 = tok2->link();
if (tok2->str() == "<" && TemplateSimplifier::templateParameters(tok2) > 0) if (tok2->str() == "<" && TemplateSimplifier::templateParameters(tok2) > 0)
tok2 = tok2->findClosingBracket(); tok2 = tok2->findClosingBracket();
@ -5471,7 +5471,7 @@ void Tokenizer::simplifyVarDecl(Token * tokBegin, Token * tokEnd, bool only_k_r_
tok2 = nullptr; tok2 = nullptr;
if (tok2 && tok2->str() == "=") { if (tok2 && tok2->str() == "=") {
while (tok2 && tok2->str() != "," && tok2->str() != ";") { while (tok2 && tok2->str() != "," && tok2->str() != ";") {
if (tok2->str() == "{" || tok2->str() == "(" || tok2->str() == "[") if (Token::Match(tok2, "{|(|["))
tok2 = tok2->link(); tok2 = tok2->link();
tok2 = tok2->next(); tok2 = tok2->next();
} }
@ -5500,7 +5500,7 @@ void Tokenizer::simplifyVarDecl(Token * tokBegin, Token * tokEnd, bool only_k_r_
Token *eq = tok2; Token *eq = tok2;
while (tok2) { while (tok2) {
if (tok2->str() == "{" || tok2->str() == "(") if (Token::Match(tok2, "{|("))
tok2 = tok2->link(); tok2 = tok2->link();
else if (tok2->str() == "<" && tok2->previous()->isName() && !tok2->previous()->varId()) else if (tok2->str() == "<" && tok2->previous()->isName() && !tok2->previous()->varId())
@ -6187,7 +6187,7 @@ void Tokenizer::simplifyIfSameInnerCondition()
continue; continue;
for (Token *tok2 = tok->tokAt(5); tok2; tok2 = tok2->next()) { for (Token *tok2 = tok->tokAt(5); tok2; tok2 = tok2->next()) {
if (tok2->str() == "{" || tok2->str() == "}") if (Token::Match(tok2, "{|}"))
break; break;
if (Token::simpleMatch(tok2, "if (")) { if (Token::simpleMatch(tok2, "if (")) {
tok2 = tok2->tokAt(2); tok2 = tok2->tokAt(2);
@ -6390,7 +6390,7 @@ bool Tokenizer::simplifyKnownVariables()
if (tok != list.front() && !Token::Match(tok->previous(),";|{|}|private:|protected:|public:")) if (tok != list.front() && !Token::Match(tok->previous(),";|{|}|private:|protected:|public:"))
continue; continue;
// skip "const" and "static" // skip "const" and "static"
while (tok->str() == "const" || tok->str() == "static") while (Token::Match(tok, "const|static"))
tok = tok->next(); tok = tok->next();
// pod type // pod type
if (!tok->isStandardType()) if (!tok->isStandardType())
@ -6721,7 +6721,7 @@ bool Tokenizer::simplifyKnownVariablesSimplify(Token **tok2, Token *tok3, unsign
break; break;
// Stop if break/continue is found .. // Stop if break/continue is found ..
if (tok3->str() == "break" || tok3->str() == "continue") if (Token::Match(tok3, "break|continue"))
break; break;
if ((indentlevel3 > 1 || !Token::simpleMatch(Token::findsimplematch(tok3,";"), "; }")) && tok3->str() == "return") if ((indentlevel3 > 1 || !Token::simpleMatch(Token::findsimplematch(tok3,";"), "; }")) && tok3->str() == "return")
ret3 = true; ret3 = true;
@ -6746,7 +6746,7 @@ bool Tokenizer::simplifyKnownVariablesSimplify(Token **tok2, Token *tok3, unsign
break; break;
// Stop if something like 'while (--var)' is found // Stop if something like 'while (--var)' is found
if (tok3->str() == "for" || tok3->str() == "while" || tok3->str() == "do") { if (Token::Match(tok3, "for|while|do")) {
const Token *endpar = tok3->next()->link(); const Token *endpar = tok3->next()->link();
if (Token::simpleMatch(endpar, ") {")) if (Token::simpleMatch(endpar, ") {"))
endpar = endpar->next()->link(); endpar = endpar->next()->link();
@ -7001,7 +7001,7 @@ bool Tokenizer::simplifyKnownVariablesSimplify(Token **tok2, Token *tok3, unsign
// Using the variable in for-condition.. // Using the variable in for-condition..
if (Token::simpleMatch(tok3, "for (")) { if (Token::simpleMatch(tok3, "for (")) {
for (Token *tok4 = tok3->tokAt(2); tok4; tok4 = tok4->next()) { for (Token *tok4 = tok3->tokAt(2); tok4; tok4 = tok4->next()) {
if (tok4->str() == "(" || tok4->str() == ")") if (Token::Match(tok4, "(|)"))
break; break;
// Replace variable used in condition.. // Replace variable used in condition..
@ -7081,7 +7081,7 @@ bool Tokenizer::simplifyKnownVariablesSimplify(Token **tok2, Token *tok3, unsign
void Tokenizer::elseif() void Tokenizer::elseif()
{ {
for (Token *tok = list.front(); tok; tok = tok->next()) { for (Token *tok = list.front(); tok; tok = tok->next()) {
if (tok->str() == "(" || tok->str() == "[" || if (Token::Match(tok, "(|[") ||
(tok->str() == "{" && tok->previous() && tok->previous()->str() == "=")) (tok->str() == "{" && tok->previous() && tok->previous()->str() == "="))
tok = tok->link(); tok = tok->link();
@ -7698,7 +7698,7 @@ void Tokenizer::simplifyEnum()
enumName = tok1; enumName = tok1;
lastValue = 0; lastValue = 0;
tok1 = tok1->tokAt(2); tok1 = tok1->tokAt(2);
if (tok1->str() == "," || Token::Match(tok1, "{|}")) { if (Token::Match(tok1, ",|{|}")) {
syntaxError(tok1); syntaxError(tok1);
break; break;
} }
@ -8724,7 +8724,7 @@ void Tokenizer::simplifyComma()
{ {
for (Token *tok = list.front(); tok; tok = tok->next()) { for (Token *tok = list.front(); tok; tok = tok->next()) {
if (tok->str() == "(" || tok->str() == "[" || if (Token::Match(tok, "(|[") ||
(tok->str() == "{" && tok->previous() && tok->previous()->str() == "=")) { (tok->str() == "{" && tok->previous() && tok->previous()->str() == "=")) {
tok = tok->link(); tok = tok->link();
continue; continue;
@ -8776,7 +8776,7 @@ void Tokenizer::simplifyComma()
if (Token::Match(tok2, "[;{}?]")) { if (Token::Match(tok2, "[;{}?]")) {
break; break;
} else if (tok2->str() == ")" || tok2->str() == "]" || } else if (Token::Match(tok2, ")|]") ||
(tok2->str() == "}" && tok2->link()->previous() && tok2->link()->previous()->str() == "=")) { (tok2->str() == "}" && tok2->link()->previous() && tok2->link()->previous()->str() == "=")) {
tok2 = tok2->link(); tok2 = tok2->link();
@ -8796,7 +8796,7 @@ void Tokenizer::simplifyComma()
endAt = tok2; endAt = tok2;
break; break;
} else if (tok2->str() == "(" || tok2->str() == "[" || } else if (Token::Match(tok2, "(|[") ||
(tok2->str() == "{" && tok2->previous() && tok2->previous()->str() == "=")) { (tok2->str() == "{" && tok2->previous() && tok2->previous()->str() == "=")) {
tok2 = tok2->link(); tok2 = tok2->link();
@ -8818,7 +8818,7 @@ void Tokenizer::simplifyComma()
// remove "return" // remove "return"
startFrom->deleteNext(); startFrom->deleteNext();
for (Token *tok2 = startFrom->next(); tok2 != endAt; tok2 = tok2->next()) { for (Token *tok2 = startFrom->next(); tok2 != endAt; tok2 = tok2->next()) {
if (tok2->str() == "(" || tok2->str() == "[" || if (Token::Match(tok2, "(|[") ||
(tok2->str() == "{" && tok2->previous() && tok2->previous()->str() == "=")) { (tok2->str() == "{" && tok2->previous() && tok2->previous()->str() == "=")) {
tok2 = tok2->link(); tok2 = tok2->link();
@ -9485,7 +9485,7 @@ void Tokenizer::simplifyAssignmentInFunctionCall()
tok2 = tok2->link(); tok2 = tok2->link();
else if (tok2->str() == ";") else if (tok2->str() == ";")
break; break;
else if (tok2->str() == ")" || tok2->str() == ",") { else if (Token::Match(tok2, ")|,")) {
tok2 = tok2->previous(); tok2 = tok2->previous();
tok2->insertToken(vartok->str()); tok2->insertToken(vartok->str());
@ -9513,9 +9513,9 @@ void Tokenizer::simplifyAssignmentBlock()
unsigned int indentlevel = 0; unsigned int indentlevel = 0;
Token *tok2 = tok; Token *tok2 = tok;
while (nullptr != (tok2 = tok2->next())) { while (nullptr != (tok2 = tok2->next())) {
if (tok2->str() == "(" || tok2->str() == "{") if (Token::Match(tok2, "(|{"))
++indentlevel; ++indentlevel;
else if (tok2->str() == ")" || tok2->str() == "}") { else if (Token::Match(tok2, ")|}")) {
if (indentlevel <= 2) if (indentlevel <= 2)
break; break;
--indentlevel; --indentlevel;
@ -10288,7 +10288,7 @@ static bool operatorEnd(const Token * tok)
if (tok && tok->str() == ")") { if (tok && tok->str() == ")") {
tok = tok->next(); tok = tok->next();
while (tok && !Token::Match(tok, "[=;{),]")) { while (tok && !Token::Match(tok, "[=;{),]")) {
if (tok->str() == "const" || tok->str() == "volatile") { if (Token::Match(tok, "const|volatile")) {
tok = tok->next(); tok = tok->next();
} else if (tok->str() == "noexcept") { } else if (tok->str() == "noexcept") {
tok = tok->next(); tok = tok->next();
@ -10533,7 +10533,7 @@ void Tokenizer::printUnknownTypes() const
while (tok) { while (tok) {
// skip pointer and reference part of type // skip pointer and reference part of type
if (level == 0 && (tok->str() == "*" || tok->str() == "&")) if (level == 0 && Token::Match(tok, "*|&"))
break; break;
name += tok->str(); name += tok->str();

View File

@ -511,7 +511,7 @@ static void compileTerm(Token *&tok, AST_state& state)
return; return;
if (Token::Match(tok, "L %str%|%char%")) if (Token::Match(tok, "L %str%|%char%"))
tok = tok->next(); tok = tok->next();
if (state.inArrayAssignment && tok->str() == "." && (tok->strAt(-1) == "," || tok->strAt(-1) == "{")) // Jump over . in C style struct initialization if (state.inArrayAssignment && tok->str() == "." && Token::Match(tok->tokAt(-1), ",|{")) // Jump over . in C style struct initialization
tok = tok->next(); tok = tok->next();
if (tok->isLiteral()) { if (tok->isLiteral()) {
@ -758,7 +758,7 @@ static void compileAnd(Token *&tok, AST_state& state)
Token* tok2 = tok->next(); Token* tok2 = tok->next();
if (tok2->str() == "&") if (tok2->str() == "&")
tok2 = tok2->next(); tok2 = tok2->next();
if (state.cpp && (tok2->str() == "," || tok2->str() == ")")) { if (state.cpp && Token::Match(tok2, ",|)")) {
tok = tok2; tok = tok2;
break; // rValue reference break; // rValue reference
} }
@ -855,7 +855,7 @@ static Token * createAstAtToken(Token *tok, bool cpp)
init1 = tok2; init1 = tok2;
AST_state state1(cpp); AST_state state1(cpp);
compileExpression(tok2, state1); compileExpression(tok2, state1);
if (tok2->str() == ";" || tok2->str() == ")") if (Token::Match(tok2, ";|)"))
break; break;
init1 = 0; init1 = 0;
} }

View File

@ -260,7 +260,7 @@ static bool isVariableChanged(const Token *start, const Token *end, const unsign
return true; return true;
const Token *parent = tok->astParent(); const Token *parent = tok->astParent();
while (parent && (parent->str() == "." || parent->str() == "::")) while (parent && Token::Match(parent, ".|::"))
parent = parent->astParent(); parent = parent->astParent();
if (parent && parent->type() == Token::eIncDecOp) if (parent && parent->type() == Token::eIncDecOp)
return true; return true;
@ -1154,7 +1154,7 @@ static void execute(const Token *expr,
*error = true; *error = true;
} }
else if (expr->str() == "++" || expr->str() == "--") { else if (Token::Match(expr, "++|--")) {
if (!expr->astOperand1() || expr->astOperand1()->varId() == 0U) if (!expr->astOperand1() || expr->astOperand1()->varId() == 0U)
*error = true; *error = true;
else { else {
@ -1522,7 +1522,7 @@ static void valueFlowSubFunction(TokenList *tokenlist, ErrorLogger *errorLogger,
if (Token::Match(tok2, "%varid% !!=", varid2)) { if (Token::Match(tok2, "%varid% !!=", varid2)) {
for (std::list<ValueFlow::Value>::const_iterator val = argvalues.begin(); val != argvalues.end(); ++val) for (std::list<ValueFlow::Value>::const_iterator val = argvalues.begin(); val != argvalues.end(); ++val)
setTokenValue(const_cast<Token*>(tok2), *val); setTokenValue(const_cast<Token*>(tok2), *val);
} else if (tok2->str() == "{" || tok2->str() == "?") { } else if (Token::Match(tok2, "{|?")) {
if (settings->debugwarnings) if (settings->debugwarnings)
bailout(tokenlist, errorLogger, tok2, "parameter " + arg->name() + ", at '" + tok2->str() + "'"); bailout(tokenlist, errorLogger, tok2, "parameter " + arg->name() + ", at '" + tok2->str() + "'");
break; break;