Skip to content

Commit

Permalink
Add Lexer and Parser support for the switch expression
Browse files Browse the repository at this point in the history
  • Loading branch information
mavasani committed Apr 28, 2017
1 parent 4b50f66 commit 2414444
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 0 deletions.
9 changes: 9 additions & 0 deletions src/Compilers/CSharp/Portable/Parser/LanguageParser.cs
Expand Up @@ -9423,6 +9423,14 @@ private ExpressionSyntax ParseSubExpressionCore(Precedence precedence)
var colonRight = this.ParseExpressionCore();
leftOperand = _syntaxFactory.ConditionalExpression(leftOperand, questionToken, colonLeft, colon, colonRight);
}
else if (tk == SyntaxKind.QuestionColonToken && precedence <= Precedence.Ternary)
{
var questionColonToken = this.EatToken();
var labels = this.ParseBracketedArgumentList();
var colon = this.EatToken(SyntaxKind.ColonToken);
var values = this.ParseBracketedArgumentList();
leftOperand = _syntaxFactory.SwitchExpression(leftOperand, questionColonToken, labels, colon, values);
}

return leftOperand;
}
Expand Down Expand Up @@ -10541,6 +10549,7 @@ private static bool CanFollowCast(SyntaxKind kind)
case SyntaxKind.MinusGreaterThanToken:
case SyntaxKind.QuestionQuestionToken:
case SyntaxKind.EndOfFileToken:
case SyntaxKind.QuestionColonToken:
return false;
default:
return true;
Expand Down
5 changes: 5 additions & 0 deletions src/Compilers/CSharp/Portable/Parser/Lexer.cs
Expand Up @@ -562,6 +562,11 @@ private void ScanSyntaxToken(ref TokenInfo info)
TextWindow.AdvanceChar();
info.Kind = SyntaxKind.QuestionQuestionToken;
}
else if (TextWindow.PeekChar() == ':')
{
TextWindow.AdvanceChar();
info.Kind = SyntaxKind.QuestionColonToken;
}
else
{
info.Kind = SyntaxKind.QuestionToken;
Expand Down
2 changes: 2 additions & 0 deletions src/Compilers/CSharp/Portable/Syntax/SyntaxKindFacts.cs
Expand Up @@ -1275,6 +1275,8 @@ public static string GetText(SyntaxKind kind)
return "<?";
case SyntaxKind.XmlProcessingInstructionEndToken:
return "?>";
case SyntaxKind.QuestionColonToken:
return "?:";

// compound
case SyntaxKind.BarBarToken:
Expand Down

0 comments on commit 2414444

Please sign in to comment.