Fixed #622 (Tokenizer: Calculations are wrong)
This commit is contained in:
parent
465c450247
commit
bb2bda0be4
|
@ -3100,6 +3100,15 @@ bool Tokenizer::simplifyCalculations()
|
|||
if (Token::simpleMatch(tok->next(), "/ 0"))
|
||||
continue;
|
||||
|
||||
// + and - are calculated after *
|
||||
if (Token::Match(tok->next(),"[+-]"))
|
||||
{
|
||||
if (tok->previous()->str() == "*")
|
||||
continue;
|
||||
if (Token::simpleMatch(tok->tokAt(3), "*"))
|
||||
continue;
|
||||
}
|
||||
|
||||
tok->str(MathLib::calculate(tok->str(), tok->tokAt(2)->str(), *(tok->strAt(1))));
|
||||
|
||||
Token::eraseTokens(tok, tok->tokAt(3));
|
||||
|
|
|
@ -1204,6 +1204,9 @@ private:
|
|||
const char code[] = "a[10+10-10-10]";
|
||||
ASSERT_EQUALS("a [ 0 ]", tok(code));
|
||||
}
|
||||
|
||||
ASSERT_EQUALS("x = 1 + 2 * y ;", tok("x=1+2*y;"));
|
||||
ASSERT_EQUALS("x = 7 ;", tok("x=1+2*3;"));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -17,7 +17,8 @@
|
|||
*/
|
||||
|
||||
|
||||
|
||||
#ifndef testsuiteH
|
||||
#define testsuiteH
|
||||
|
||||
#include <sstream>
|
||||
#include "../src/errorlogger.h"
|
||||
|
@ -63,3 +64,5 @@ public:
|
|||
#define TODO_ASSERT_EQUALS( EXPECTED , ACTUAL ) if (EXPECTED==ACTUAL) assertEquals(__FILE__, __LINE__, "TODO assertion", "The assertion succeeded")
|
||||
#define REGISTER_TEST( CLASSNAME ) namespace { CLASSNAME instance; }
|
||||
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Reference in New Issue