diff --git a/lib/tokenlist.cpp b/lib/tokenlist.cpp index 6ff326e36..b8ac02292 100644 --- a/lib/tokenlist.cpp +++ b/lib/tokenlist.cpp @@ -912,7 +912,8 @@ static void compilePrecedence2(Token *&tok, AST_state& state) const std::size_t oldOpSize = state.op.size(); compileExpression(tok, state); tok = tok2; - if ((tok->previous() && tok->previous()->isName() && (!Token::Match(tok->previous(), "return|case") && (!state.cpp || !Token::Match(tok->previous(), "throw|delete")))) + if (Token::Match(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)) || (tok->strAt(-1) == ")" && !iscast(tok->linkAt(-1))) // Don't treat brackets to clarify precedence as function calls diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index 13a373357..7e8b90fa7 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -7656,6 +7656,10 @@ private: ASSERT_EQUALS("n0=", testAst("TrivialDefCtor{[2][2]}[1][1].n = 0;")); ASSERT_EQUALS("aT12,3,{1[=", testAst("a = T{1, 2, 3}[1];")); + // Type{data}() + ASSERT_EQUALS("ab{(=", testAst("a=b{}();")); + ASSERT_EQUALS("abc{((=", testAst("a=b(c{}());")); + // ({..}) ASSERT_EQUALS("a{+d+ bc+", testAst("a+({b+c;})+d")); ASSERT_EQUALS("a{d*+ bc+", testAst("a+({b+c;})*d"));