Skip to content

Commit d7c9b40

Browse files
Update tokenize.cpp
1 parent dd67935 commit d7c9b40

1 file changed

Lines changed: 15 additions & 2 deletions

File tree

lib/tokenize.cpp

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7333,6 +7333,19 @@ void Tokenizer::simplifyVarDecl(const bool only_k_r_fpar)
73337333
simplifyVarDecl(list.front(), nullptr, only_k_r_fpar);
73347334
}
73357335

7336+
static Token* isTrailingReturnType(Token* tok)
7337+
{
7338+
while (Token::Match(tok, "%name%|::|>")) {
7339+
if (Token* open = tok->findOpeningBracket())
7340+
tok = open->tokAt(-1);
7341+
else
7342+
tok = tok->tokAt(-1);
7343+
}
7344+
if (tok && Token::simpleMatch(tok->tokAt(-1), ") ."))
7345+
return tok->tokAt(-1);
7346+
return nullptr;
7347+
}
7348+
73367349
// cppcheck-suppress functionConst - has side effects
73377350
void Tokenizer::simplifyVarDecl(Token * tokBegin, const Token * const tokEnd, const bool only_k_r_fpar)
73387351
{
@@ -7360,9 +7373,9 @@ void Tokenizer::simplifyVarDecl(Token * tokBegin, const Token * const tokEnd, co
73607373
if (!tok->linkAt(1))
73617374
syntaxError(tokBegin);
73627375
// Check for lambdas before skipping
7363-
if (Token::Match(tok->tokAt(-2), ") . %name%")) { // trailing return type
7376+
if (Token* trailingStart = isTrailingReturnType(tok)) {
73647377
// TODO: support lambda without parameter clause?
7365-
Token* lambdaStart = tok->linkAt(-2)->previous();
7378+
Token* lambdaStart = trailingStart->link()->tokAt(-1);
73667379
if (Token::simpleMatch(lambdaStart, "]"))
73677380
lambdaStart = lambdaStart->link();
73687381
Token* lambdaEnd = findLambdaEndScope(lambdaStart);

0 commit comments

Comments
 (0)