AST: Fix wrong handling for '{scope} (expr)'

This commit is contained in:
Daniel Marjamäki 2020-02-23 15:01:06 +01:00
parent becc275f2c
commit ef26b55737
2 changed files with 2 additions and 1 deletions

View File

@ -934,7 +934,7 @@ static void compilePrecedence2(Token *&tok, AST_state& state)
const std::size_t oldOpSize = state.op.size();
compileExpression(tok, state);
tok = tok2;
if (Token::simpleMatch(tok->previous(), "} (")
if ((oldOpSize > 0 && Token::simpleMatch(tok->previous(), "} ("))
|| (tok->previous() && tok->previous()->isName() && !Token::Match(tok->previous(), "return|case") && (!state.cpp || !Token::Match(tok->previous(), "throw|delete")))
|| (tok->strAt(-1) == "]" && (!state.cpp || !Token::Match(tok->linkAt(-1)->previous(), "new|delete")))
|| (tok->strAt(-1) == ">" && tok->linkAt(-1))

View File

@ -7672,6 +7672,7 @@ private:
// Type{data}()
ASSERT_EQUALS("ab{(=", testAst("a=b{}();"));
ASSERT_EQUALS("abc{((=", testAst("a=b(c{}());"));
ASSERT_EQUALS("f( xNULL!=0(x(:?", testAst("void f() { {} ((x != NULL) ? (void)0 : x()); }"));
// ({..})
ASSERT_EQUALS("a{+d+ bc+", testAst("a+({b+c;})+d"));