@@ -2363,12 +2363,9 @@ bool UnwrappedLineParser::tryToParseLambda() {
23632363 Arrow = FormatTok;
23642364 nextToken ();
23652365 break ;
2366- case tok::kw_requires: {
2367- auto *RequiresToken = FormatTok;
2368- nextToken ();
2369- parseRequiresClause (RequiresToken);
2366+ case tok::kw_requires:
2367+ parseRequiresClause ();
23702368 break ;
2371- }
23722369 case tok::equal:
23732370 if (!InTemplateParameterList)
23742371 return true ;
@@ -2580,12 +2577,9 @@ bool UnwrappedLineParser::parseBracedList(bool IsAngleBracket, bool IsEnum) {
25802577 if (IsEnum && !Style.AllowShortEnumsOnASingleLine )
25812578 addUnwrappedLine ();
25822579 break ;
2583- case tok::kw_requires: {
2584- auto *RequiresToken = FormatTok;
2585- nextToken ();
2586- parseRequiresExpression (RequiresToken);
2580+ case tok::kw_requires:
2581+ parseRequiresExpression ();
25872582 break ;
2588- }
25892583 default :
25902584 nextToken ();
25912585 break ;
@@ -2727,12 +2721,9 @@ bool UnwrappedLineParser::parseParens(TokenType AmpAmpTokenType,
27272721 else
27282722 nextToken ();
27292723 break ;
2730- case tok::kw_requires: {
2731- auto RequiresToken = FormatTok;
2732- nextToken ();
2733- parseRequiresExpression (RequiresToken);
2724+ case tok::kw_requires:
2725+ parseRequiresExpression ();
27342726 break ;
2735- }
27362727 case tok::ampamp:
27372728 if (AmpAmpTokenType != TT_Unknown)
27382729 FormatTok->setFinalizedType (AmpAmpTokenType);
@@ -3467,23 +3458,20 @@ void UnwrappedLineParser::parseAccessSpecifier() {
34673458// / \returns true if it parsed a clause.
34683459bool UnwrappedLineParser::parseRequires (bool SeenEqual) {
34693460 assert (FormatTok->is (tok::kw_requires) && " 'requires' expected" );
3470- auto RequiresToken = FormatTok;
34713461
34723462 // We try to guess if it is a requires clause, or a requires expression. For
3473- // that we first consume the keyword and check the next token.
3474- nextToken ();
3475-
3476- switch (FormatTok->Tok .getKind ()) {
3463+ // that we first check the next token.
3464+ switch (Tokens->peekNextToken (/* SkipComment=*/ true )->Tok .getKind ()) {
34773465 case tok::l_brace:
34783466 // This can only be an expression, never a clause.
3479- parseRequiresExpression (RequiresToken );
3467+ parseRequiresExpression ();
34803468 return false ;
34813469 case tok::l_paren:
34823470 // Clauses and expression can start with a paren, it's unclear what we have.
34833471 break ;
34843472 default :
34853473 // All other tokens can only be a clause.
3486- parseRequiresClause (RequiresToken );
3474+ parseRequiresClause ();
34873475 return true ;
34883476 }
34893477
@@ -3494,13 +3482,13 @@ bool UnwrappedLineParser::parseRequires(bool SeenEqual) {
34943482 // requires (C<T> && ...
34953483
34963484 // But first let's look behind.
3497- auto *PreviousNonComment = RequiresToken ->getPreviousNonComment ();
3485+ auto *PreviousNonComment = FormatTok ->getPreviousNonComment ();
34983486
34993487 if (!PreviousNonComment ||
35003488 PreviousNonComment->is (TT_RequiresExpressionLBrace)) {
35013489 // If there is no token, or an expression left brace, we are a requires
35023490 // clause within a requires expression.
3503- parseRequiresClause (RequiresToken );
3491+ parseRequiresClause ();
35043492 return true ;
35053493 }
35063494
@@ -3512,7 +3500,7 @@ bool UnwrappedLineParser::parseRequires(bool SeenEqual) {
35123500 case tok::star:
35133501 case tok::amp:
35143502 // This is a requires clause.
3515- parseRequiresClause (RequiresToken );
3503+ parseRequiresClause ();
35163504 return true ;
35173505 case tok::ampamp: {
35183506 // This can be either:
@@ -3523,19 +3511,19 @@ bool UnwrappedLineParser::parseRequires(bool SeenEqual) {
35233511 // void member(...) const && requires (C<T> ...
35243512 auto PrevPrev = PreviousNonComment->getPreviousNonComment ();
35253513 if ((PrevPrev && PrevPrev->is (tok::kw_const)) || !SeenEqual) {
3526- parseRequiresClause (RequiresToken );
3514+ parseRequiresClause ();
35273515 return true ;
35283516 }
35293517 break ;
35303518 }
35313519 default :
35323520 if (PreviousNonComment->isTypeOrIdentifier (LangOpts)) {
35333521 // This is a requires clause.
3534- parseRequiresClause (RequiresToken );
3522+ parseRequiresClause ();
35353523 return true ;
35363524 }
35373525 // It's an expression.
3538- parseRequiresExpression (RequiresToken );
3526+ parseRequiresExpression ();
35393527 return false ;
35403528 }
35413529
@@ -3564,7 +3552,7 @@ bool UnwrappedLineParser::parseRequires(bool SeenEqual) {
35643552 case tok::comma:
35653553 if (OpenAngles == 0 ) {
35663554 FormatTok = Tokens->setPosition (StoredPosition);
3567- parseRequiresExpression (RequiresToken );
3555+ parseRequiresExpression ();
35683556 return false ;
35693557 }
35703558 break ;
@@ -3579,7 +3567,7 @@ bool UnwrappedLineParser::parseRequires(bool SeenEqual) {
35793567 case tok::identifier:
35803568 if (FoundType && !LastWasColonColon && OpenAngles == 0 ) {
35813569 FormatTok = Tokens->setPosition (StoredPosition);
3582- parseRequiresExpression (RequiresToken );
3570+ parseRequiresExpression ();
35833571 return false ;
35843572 }
35853573 FoundType = true ;
@@ -3594,39 +3582,37 @@ bool UnwrappedLineParser::parseRequires(bool SeenEqual) {
35943582 default :
35953583 if (NextToken->isTypeName (LangOpts)) {
35963584 FormatTok = Tokens->setPosition (StoredPosition);
3597- parseRequiresExpression (RequiresToken );
3585+ parseRequiresExpression ();
35983586 return false ;
35993587 }
36003588 break ;
36013589 }
36023590 }
36033591 // This seems to be a complicated expression, just assume it's a clause.
36043592 FormatTok = Tokens->setPosition (StoredPosition);
3605- parseRequiresClause (RequiresToken );
3593+ parseRequiresClause ();
36063594 return true ;
36073595}
36083596
36093597// / Parses a requires clause.
3610- // / \param RequiresToken The requires keyword token, which starts this clause.
3611- // / \pre We need to be on the next token after the requires keyword.
36123598// / \sa parseRequiresExpression
36133599// /
36143600// / Returns if it either has finished parsing the clause, or it detects, that
36153601// / the clause is incorrect.
3616- void UnwrappedLineParser::parseRequiresClause (FormatToken *RequiresToken) {
3617- assert (FormatTok->getPreviousNonComment () == RequiresToken);
3618- assert (RequiresToken->is (tok::kw_requires) && " 'requires' expected" );
3602+ void UnwrappedLineParser::parseRequiresClause () {
3603+ assert (FormatTok->is (tok::kw_requires) && " 'requires' expected" );
36193604
36203605 // If there is no previous token, we are within a requires expression,
36213606 // otherwise we will always have the template or function declaration in front
36223607 // of it.
36233608 bool InRequiresExpression =
3624- !RequiresToken ->Previous ||
3625- RequiresToken ->Previous ->is (TT_RequiresExpressionLBrace);
3609+ !FormatTok ->Previous ||
3610+ FormatTok ->Previous ->is (TT_RequiresExpressionLBrace);
36263611
3627- RequiresToken->setFinalizedType (InRequiresExpression
3628- ? TT_RequiresClauseInARequiresExpression
3629- : TT_RequiresClause);
3612+ FormatTok->setFinalizedType (InRequiresExpression
3613+ ? TT_RequiresClauseInARequiresExpression
3614+ : TT_RequiresClause);
3615+ nextToken ();
36303616
36313617 // NOTE: parseConstraintExpression is only ever called from this function.
36323618 // It could be inlined into here.
@@ -3637,17 +3623,15 @@ void UnwrappedLineParser::parseRequiresClause(FormatToken *RequiresToken) {
36373623}
36383624
36393625// / Parses a requires expression.
3640- // / \param RequiresToken The requires keyword token, which starts this clause.
3641- // / \pre We need to be on the next token after the requires keyword.
36423626// / \sa parseRequiresClause
36433627// /
36443628// / Returns if it either has finished parsing the expression, or it detects,
36453629// / that the expression is incorrect.
3646- void UnwrappedLineParser::parseRequiresExpression (FormatToken *RequiresToken) {
3647- assert (FormatTok->getPreviousNonComment () == RequiresToken);
3648- assert (RequiresToken->is (tok::kw_requires) && " 'requires' expected" );
3630+ void UnwrappedLineParser::parseRequiresExpression () {
3631+ assert (FormatTok->is (tok::kw_requires) && " 'requires' expected" );
36493632
3650- RequiresToken->setFinalizedType (TT_RequiresExpression);
3633+ FormatTok->setFinalizedType (TT_RequiresExpression);
3634+ nextToken ();
36513635
36523636 if (FormatTok->is (tok::l_paren)) {
36533637 FormatTok->setFinalizedType (TT_RequiresExpressionLParen);
@@ -3687,12 +3671,9 @@ void UnwrappedLineParser::parseConstraintExpression() {
36873671 bool LambdaThisTimeAllowed = std::exchange (LambdaNextTimeAllowed, false );
36883672
36893673 switch (FormatTok->Tok .getKind ()) {
3690- case tok::kw_requires: {
3691- auto RequiresToken = FormatTok;
3692- nextToken ();
3693- parseRequiresExpression (RequiresToken);
3674+ case tok::kw_requires:
3675+ parseRequiresExpression ();
36943676 break ;
3695- }
36963677
36973678 case tok::l_paren:
36983679 if (!TopLevelParensAllowed)
0 commit comments