@@ -6421,8 +6421,10 @@ private StatementSyntax ParseStatementNoDeclaration(bool allowAnyExpression)
64216421 case SyntaxKind . GotoKeyword :
64226422 return this . ParseGotoStatement ( ) ;
64236423 case SyntaxKind . IfKeyword :
6424- case SyntaxKind . ElseKeyword : // Including 'else' keyword to handle 'else without if' error cases
64256424 return this . ParseIfStatement ( ) ;
6425+ case SyntaxKind . ElseKeyword :
6426+ // Including 'else' keyword to handle 'else without if' error cases
6427+ return this . ParseMisplacedElse ( ) ;
64266428 case SyntaxKind . LockKeyword :
64276429 return this . ParseLockStatement ( ) ;
64286430 case SyntaxKind . ReturnKeyword :
@@ -7686,19 +7688,28 @@ private GotoStatementSyntax ParseGotoStatement()
76867688
76877689 private IfStatementSyntax ParseIfStatement ( )
76887690 {
7689- Debug . Assert ( this . CurrentToken . Kind == SyntaxKind . IfKeyword || this . CurrentToken . Kind == SyntaxKind . ElseKeyword ) ;
7691+ Debug . Assert ( this . CurrentToken . Kind == SyntaxKind . IfKeyword ) ;
76907692
7691- bool firstTokenIsElse = this . CurrentToken . Kind == SyntaxKind . ElseKeyword ;
7692- var @if = firstTokenIsElse
7693- ? this . EatToken ( SyntaxKind . IfKeyword , ErrorCode . ERR_ElseCannotStartStatement )
7694- : this . EatToken ( SyntaxKind . IfKeyword ) ;
7695- var openParen = this . EatToken ( SyntaxKind . OpenParenToken ) ;
7696- var condition = this . ParseExpressionCore ( ) ;
7697- var closeParen = this . EatToken ( SyntaxKind . CloseParenToken ) ;
7698- var statement = firstTokenIsElse ? this . ParseExpressionStatement ( ) : this . ParseEmbeddedStatement ( ) ;
7699- var elseClause = this . ParseElseClauseOpt ( ) ;
7693+ return _syntaxFactory . IfStatement (
7694+ this . EatToken ( SyntaxKind . IfKeyword ) ,
7695+ this . EatToken ( SyntaxKind . OpenParenToken ) ,
7696+ this . ParseExpressionCore ( ) ,
7697+ this . EatToken ( SyntaxKind . CloseParenToken ) ,
7698+ this . ParseEmbeddedStatement ( ) ,
7699+ this . ParseElseClauseOpt ( ) ) ;
7700+ }
7701+
7702+ private IfStatementSyntax ParseMisplacedElse ( )
7703+ {
7704+ Debug . Assert ( this . CurrentToken . Kind == SyntaxKind . ElseKeyword ) ;
77007705
7701- return _syntaxFactory . IfStatement ( @if , openParen , condition , closeParen , statement , elseClause ) ;
7706+ return _syntaxFactory . IfStatement (
7707+ this . EatToken ( SyntaxKind . IfKeyword , ErrorCode . ERR_ElseCannotStartStatement ) ,
7708+ this . EatToken ( SyntaxKind . OpenParenToken ) ,
7709+ this . ParseExpressionCore ( ) ,
7710+ this . EatToken ( SyntaxKind . CloseParenToken ) ,
7711+ this . ParseExpressionStatement ( ) ,
7712+ this . ParseElseClauseOpt ( ) ) ;
77027713 }
77037714
77047715 private ElseClauseSyntax ParseElseClauseOpt ( )
0 commit comments