Fixed #5675 (wrong AST generated for 'a>>=b')
This commit is contained in:
parent
a202956471
commit
c98beafb6d
|
@ -696,7 +696,8 @@ static void compileAssign(Token *&tok, std::stack<Token*> &op, unsigned int dept
|
|||
{
|
||||
compileTernaryOp(tok,op, depth);
|
||||
while (tok) {
|
||||
if (tok->str() == "=") {
|
||||
if (tok->str() == "=" || tok->str() == "<<=" || tok->str() == ">>=" ||
|
||||
(tok->str().size() == 2U && tok->str()[1] == '=' && std::strchr("+-*/%&|^",tok->str()[0]))) {
|
||||
compileBinOp(tok, compileTernaryOp, op, depth);
|
||||
} else break;
|
||||
}
|
||||
|
|
|
@ -10219,6 +10219,13 @@ private:
|
|||
if (!tokenList.createTokens(istr,"test.cpp"))
|
||||
return "ERROR";
|
||||
|
||||
for (Token *tok = tokenList.front(); tok; tok = tok->next()) {
|
||||
if (Token::Match(tok, "%or%|<<|>>|+|-|*|/|%|&|^ =")) {
|
||||
tok->str(tok->str() + "=");
|
||||
tok->deleteNext();
|
||||
}
|
||||
}
|
||||
|
||||
// Set links..
|
||||
std::stack<Token *> links;
|
||||
for (Token *tok = tokenList.front(); tok; tok = tok->next()) {
|
||||
|
@ -10265,6 +10272,18 @@ private:
|
|||
ASSERT_EQUALS("a-1+", testAst("-a+1"));
|
||||
ASSERT_EQUALS("ab++-c-", testAst("a-b++-c"));
|
||||
|
||||
// assignment operators
|
||||
ASSERT_EQUALS("ab>>=", testAst("a>>=b;"));
|
||||
ASSERT_EQUALS("ab<<=", testAst("a<<=b;"));
|
||||
ASSERT_EQUALS("ab+=", testAst("a+=b;"));
|
||||
ASSERT_EQUALS("ab-=", testAst("a-=b;"));
|
||||
ASSERT_EQUALS("ab*=", testAst("a*=b;"));
|
||||
ASSERT_EQUALS("ab/=", testAst("a/=b;"));
|
||||
ASSERT_EQUALS("ab%=", testAst("a%=b;"));
|
||||
ASSERT_EQUALS("ab&=", testAst("a&=b;"));
|
||||
ASSERT_EQUALS("ab|=", testAst("a|=b;"));
|
||||
ASSERT_EQUALS("ab^=", testAst("a^=b;"));
|
||||
|
||||
ASSERT_EQUALS("a\"\"=", testAst("a=\"\""));
|
||||
ASSERT_EQUALS("a\'\'=", testAst("a=\'\'"));
|
||||
testAst("char a[1]=\"\";"); // don't crash
|
||||
|
|
Loading…
Reference in New Issue