Fixed #1141 (Tokenizer: Wrong simplification of calculations)
This commit is contained in:
parent
9b05850e97
commit
44a629ec74
|
@ -3909,15 +3909,20 @@ bool Tokenizer::simplifyCalculations()
|
||||||
if (Token::simpleMatch(tok->next(), "/ 0"))
|
if (Token::simpleMatch(tok->next(), "/ 0"))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// + and - are calculated after *
|
// + and - are calculated after * and /
|
||||||
if (Token::Match(tok->next(), "[+-/]"))
|
if (Token::Match(tok->next(), "[+-/]"))
|
||||||
{
|
{
|
||||||
if (tok->previous()->str() == "*")
|
if (tok->previous()->str() == "*")
|
||||||
continue;
|
continue;
|
||||||
if (Token::simpleMatch(tok->tokAt(3), "*"))
|
if (Token::Match(tok->tokAt(3), "[*/]"))
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Token::Match(tok->previous(), "- %num% - %num%"))
|
||||||
|
tok->str(MathLib::calculate(tok->str(), tok->tokAt(2)->str(), '+'));
|
||||||
|
else if (Token::Match(tok->previous(), "- %num% + %num%"))
|
||||||
|
tok->str(MathLib::calculate(tok->tokAt(2)->str(), tok->str(), '-'));
|
||||||
|
else
|
||||||
tok->str(MathLib::calculate(tok->str(), tok->tokAt(2)->str(), *(tok->strAt(1))));
|
tok->str(MathLib::calculate(tok->str(), tok->tokAt(2)->str(), *(tok->strAt(1))));
|
||||||
|
|
||||||
Token::eraseTokens(tok, tok->tokAt(3));
|
Token::eraseTokens(tok, tok->tokAt(3));
|
||||||
|
|
|
@ -1914,6 +1914,8 @@ private:
|
||||||
ASSERT_EQUALS("x = 7 ;", tok("x=1+2*3;"));
|
ASSERT_EQUALS("x = 7 ;", tok("x=1+2*3;"));
|
||||||
ASSERT_EQUALS("x = 47185 ;", tok("x=(65536*72/100);"));
|
ASSERT_EQUALS("x = 47185 ;", tok("x=(65536*72/100);"));
|
||||||
ASSERT_EQUALS("x = 900 ;", tok("x = 1500000 / ((145000 - 55000) * 1000 / 54000);"));
|
ASSERT_EQUALS("x = 900 ;", tok("x = 1500000 / ((145000 - 55000) * 1000 / 54000);"));
|
||||||
|
ASSERT_EQUALS("int a [ 8 ] ;", tok("int a[5+6/2];"));
|
||||||
|
ASSERT_EQUALS("int a [ 4 ] ;", tok("int a[(10)-1-5];"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue