diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index c258568d7..d745d46b0 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -1672,7 +1672,7 @@ bool Tokenizer::tokenizeCondition(const std::string &code) simplifyCAlternativeTokens(); // Convert e.g. atol("0") into 0 - while (simplifyMathFunctions()) {}; + simplifyMathFunctions(); simplifyDoublePlusAndDoubleMinus(); @@ -3563,7 +3563,7 @@ bool Tokenizer::simplifyTokenList1(const char FileName[]) simplifyInitVar(); // Convert e.g. atol("0") into 0 - while (simplifyMathFunctions()) {}; + simplifyMathFunctions(); simplifyDoublePlusAndDoubleMinus(); @@ -3786,7 +3786,7 @@ bool Tokenizer::simplifyTokenList2() simplifyStaticConst(); - while (simplifyMathFunctions()) {}; + simplifyMathFunctions(); validate(); @@ -8384,10 +8384,10 @@ bool Tokenizer::isTwoNumber(const std::string &s) // Reference: // - http://www.cplusplus.com/reference/cmath/ // ------------------------------------------------------ -bool Tokenizer::simplifyMathFunctions() +void Tokenizer::simplifyMathFunctions() { - bool simplifcationMade = false; for (Token *tok = list.front(); tok; tok = tok->next()) { + bool simplifcationMade = false; if (tok->isName() && tok->strAt(1) == "(") { // precondition for function if (Token::Match(tok, "atol ( %str% )")) { //@todo Add support for atoll() if (tok->previous() && @@ -8619,9 +8619,13 @@ bool Tokenizer::simplifyMathFunctions() } } } + // Jump back to begin of statement if a simplification was performed + if (simplifcationMade) { + while (tok->previous() && tok->str() != ";") { + tok = tok->previous(); + } + } } - // returns true if a simplifcation was performed and false otherwise. - return simplifcationMade; } void Tokenizer::simplifyComma() diff --git a/lib/tokenize.h b/lib/tokenize.h index 58016bc4e..8300c3e36 100644 --- a/lib/tokenize.h +++ b/lib/tokenize.h @@ -499,9 +499,8 @@ public: /** * Simplify e.g. 'atol("0")' into '0' - * @return true if simplifcations performed and false otherwise. */ - bool simplifyMathFunctions(); + void simplifyMathFunctions(); /** * Simplify e.g. 'sin(0)' into '0' diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index be7e33f24..a4fc9cd8a 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -8088,6 +8088,7 @@ private: " std::cout<