* Fix AST for parameter pack (#10199, #10492, #11103) * Skip ... after )
This commit is contained in:
parent
ec4267a2bd
commit
3ff8ce316c
|
@ -897,7 +897,8 @@ static void compilePrecedence2(Token *&tok, AST_state& state)
|
||||||
if (tok->tokType() == Token::eIncDecOp && !isPrefixUnary(tok, state.cpp)) {
|
if (tok->tokType() == Token::eIncDecOp && !isPrefixUnary(tok, state.cpp)) {
|
||||||
compileUnaryOp(tok, state, compileScope);
|
compileUnaryOp(tok, state, compileScope);
|
||||||
} else if (tok->str() == "...") {
|
} else if (tok->str() == "...") {
|
||||||
state.op.push(tok);
|
if (!Token::simpleMatch(tok->previous(), ")"))
|
||||||
|
state.op.push(tok);
|
||||||
tok = tok->next();
|
tok = tok->next();
|
||||||
break;
|
break;
|
||||||
} else if (tok->str() == "." && tok->strAt(1) != "*") {
|
} else if (tok->str() == "." && tok->strAt(1) != "*") {
|
||||||
|
|
|
@ -6465,6 +6465,24 @@ private:
|
||||||
|
|
||||||
ASSERT_EQUALS("xfts(=", testAst("; auto x = f(ts...);"));
|
ASSERT_EQUALS("xfts(=", testAst("; auto x = f(ts...);"));
|
||||||
|
|
||||||
|
ASSERT_EQUALS("da((new= ifd(", testAst("template <typename a, typename... b>\n" // #10199
|
||||||
|
"void c(b... e) {\n"
|
||||||
|
" a d = new a((e)...);\n"
|
||||||
|
" if (d) {}\n"
|
||||||
|
"}\n"));
|
||||||
|
|
||||||
|
ASSERT_EQUALS("ad*astdforward::e((new= ifd(", testAst("struct a {};\n" // #11103
|
||||||
|
"template <class... b> void c(b... e) {\n"
|
||||||
|
" a* d = new a(std::forward<b>(e)...);\n"
|
||||||
|
" if (d) {}\n"
|
||||||
|
"}\n"));
|
||||||
|
|
||||||
|
ASSERT_EQUALS("stddir::Args...&&, dir\"abc\"+= dirconcatstdforward::args((+return",
|
||||||
|
testAst("template <typename ...Args> std::string concat(std::string dir, Args&& ...args) {\n" // #10492
|
||||||
|
" dir += \"abc\";\n"
|
||||||
|
" return dir + concat(std::forward<Args>(args)...);\n"
|
||||||
|
"}\n"));
|
||||||
|
|
||||||
// #11369
|
// #11369
|
||||||
ASSERT_NO_THROW(tokenizeAndStringify("int a;\n"
|
ASSERT_NO_THROW(tokenizeAndStringify("int a;\n"
|
||||||
"template <class> auto b() -> decltype(a) {\n"
|
"template <class> auto b() -> decltype(a) {\n"
|
||||||
|
|
Loading…
Reference in New Issue