From 15160f169125b6af978ca456c67f58fa9895d92c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Mon, 22 Oct 2018 17:25:01 +0200 Subject: [PATCH] Fixed #8788 (AST Broken error from assigning lambda to variable) --- lib/tokenlist.cpp | 6 ++++-- test/testtokenize.cpp | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/tokenlist.cpp b/lib/tokenlist.cpp index 84e2e212c..fdc55fb80 100644 --- a/lib/tokenlist.cpp +++ b/lib/tokenlist.cpp @@ -680,8 +680,10 @@ static void compilePrecedence2(Token *&tok, AST_state& state) if (Token::simpleMatch(squareBracket->link(), "] (")) { Token* const roundBracket = squareBracket->link()->next(); Token* curlyBracket = roundBracket->link()->next(); - while (Token::Match(curlyBracket, "%name%|.|::|&")) - curlyBracket = curlyBracket->next(); + if (curlyBracket && curlyBracket->originalName() == "->") { + while (Token::Match(curlyBracket, "%name%|.|::|&|*")) + curlyBracket = curlyBracket->next(); + } if (curlyBracket && curlyBracket->str() == "{") { squareBracket->astOperand1(roundBracket); roundBracket->astOperand1(curlyBracket); diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index bd438aff5..9fbfb4b6c 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -8548,7 +8548,8 @@ private: ASSERT_EQUALS("{([(return 0return", testAst("return []() -> int { return 0; }();")); ASSERT_EQUALS("{([(return 0return", testAst("return [something]() -> int { return 0; }();")); ASSERT_EQUALS("{([cd,(return 0return", testAst("return [](int a, int b) -> int { return 0; }(c, d);")); - TODO_ASSERT_EQUALS("x{([=", "stdconst::x{([=&", testAst("x = [&]()->std::string const & { 1; }")); + ASSERT_EQUALS("x{([=", testAst("x = [&]()->std::string const & {};")); + ASSERT_EQUALS("f{([=", testAst("f = []() -> foo* {};")); ASSERT_EQUALS("x{([= 0return", testAst("x = [](){return 0; };"));