AST: Generate proper AST for 'f = []() -> foo&& {}'
This commit is contained in:
parent
484b68c550
commit
af26697ceb
|
@ -558,7 +558,7 @@ static bool iscast(const Token *tok, bool cpp)
|
||||||
|
|
||||||
static Token* findTypeEnd(Token* tok)
|
static Token* findTypeEnd(Token* tok)
|
||||||
{
|
{
|
||||||
while (Token::Match(tok, "%name%|.|::|*|&|<|(|template|decltype|sizeof")) {
|
while (Token::Match(tok, "%name%|.|::|*|&|&&|<|(|template|decltype|sizeof")) {
|
||||||
if (Token::Match(tok, "(|<"))
|
if (Token::Match(tok, "(|<"))
|
||||||
tok = tok->link();
|
tok = tok->link();
|
||||||
if (!tok)
|
if (!tok)
|
||||||
|
@ -949,9 +949,8 @@ static void compilePrecedence2(Token *&tok, AST_state& state)
|
||||||
Token* curlyBracket = roundBracket->link()->next();
|
Token* curlyBracket = roundBracket->link()->next();
|
||||||
if (Token::Match(curlyBracket, "mutable|const|noexcept"))
|
if (Token::Match(curlyBracket, "mutable|const|noexcept"))
|
||||||
curlyBracket = curlyBracket->next();
|
curlyBracket = curlyBracket->next();
|
||||||
if (curlyBracket && curlyBracket->originalName() == "->") {
|
if (curlyBracket && curlyBracket->originalName() == "->")
|
||||||
curlyBracket = findTypeEnd(curlyBracket->next());
|
curlyBracket = findTypeEnd(curlyBracket->next());
|
||||||
}
|
|
||||||
if (curlyBracket && curlyBracket->str() == "{") {
|
if (curlyBracket && curlyBracket->str() == "{") {
|
||||||
squareBracket->astOperand1(roundBracket);
|
squareBracket->astOperand1(roundBracket);
|
||||||
roundBracket->astOperand1(curlyBracket);
|
roundBracket->astOperand1(curlyBracket);
|
||||||
|
|
|
@ -8023,6 +8023,7 @@ private:
|
||||||
ASSERT_EQUALS("{([return", testAst("return []() -> decltype(0) {};"));
|
ASSERT_EQUALS("{([return", testAst("return []() -> decltype(0) {};"));
|
||||||
ASSERT_EQUALS("x{(&[=", testAst("x = [&]()->std::string const & {};"));
|
ASSERT_EQUALS("x{(&[=", testAst("x = [&]()->std::string const & {};"));
|
||||||
ASSERT_EQUALS("f{([=", testAst("f = []() -> foo* {};"));
|
ASSERT_EQUALS("f{([=", testAst("f = []() -> foo* {};"));
|
||||||
|
ASSERT_EQUALS("f{([=", testAst("f = []() -> foo&& {};"));
|
||||||
ASSERT_EQUALS("f{([=", testAst("f = [](void) mutable -> foo* {};"));
|
ASSERT_EQUALS("f{([=", testAst("f = [](void) mutable -> foo* {};"));
|
||||||
ASSERT_EQUALS("f{([=", testAst("f = []() mutable {};"));
|
ASSERT_EQUALS("f{([=", testAst("f = []() mutable {};"));
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue