未验证 提交 8c1e79a6 编写于 作者: N Neal Gafter 提交者: GitHub

Revert "The LDM decided to try : instead of => in the switch expression syntax."

上级 fa588c2b
......@@ -18725,10 +18725,10 @@ internal sealed partial class SwitchExpressionArmSyntax : CSharpSyntaxNode
{
internal readonly PatternSyntax pattern;
internal readonly WhenClauseSyntax whenClause;
internal readonly SyntaxToken colonToken;
internal readonly SyntaxToken equalsGreaterThanToken;
internal readonly ExpressionSyntax expression;
internal SwitchExpressionArmSyntax(SyntaxKind kind, PatternSyntax pattern, WhenClauseSyntax whenClause, SyntaxToken colonToken, ExpressionSyntax expression, DiagnosticInfo[] diagnostics, SyntaxAnnotation[] annotations)
internal SwitchExpressionArmSyntax(SyntaxKind kind, PatternSyntax pattern, WhenClauseSyntax whenClause, SyntaxToken equalsGreaterThanToken, ExpressionSyntax expression, DiagnosticInfo[] diagnostics, SyntaxAnnotation[] annotations)
: base(kind, diagnostics, annotations)
{
this.SlotCount = 4;
......@@ -18739,14 +18739,14 @@ internal SwitchExpressionArmSyntax(SyntaxKind kind, PatternSyntax pattern, WhenC
this.AdjustFlagsAndWidth(whenClause);
this.whenClause = whenClause;
}
this.AdjustFlagsAndWidth(colonToken);
this.colonToken = colonToken;
this.AdjustFlagsAndWidth(equalsGreaterThanToken);
this.equalsGreaterThanToken = equalsGreaterThanToken;
this.AdjustFlagsAndWidth(expression);
this.expression = expression;
}
internal SwitchExpressionArmSyntax(SyntaxKind kind, PatternSyntax pattern, WhenClauseSyntax whenClause, SyntaxToken colonToken, ExpressionSyntax expression, SyntaxFactoryContext context)
internal SwitchExpressionArmSyntax(SyntaxKind kind, PatternSyntax pattern, WhenClauseSyntax whenClause, SyntaxToken equalsGreaterThanToken, ExpressionSyntax expression, SyntaxFactoryContext context)
: base(kind)
{
this.SetFactoryContext(context);
......@@ -18758,14 +18758,14 @@ internal SwitchExpressionArmSyntax(SyntaxKind kind, PatternSyntax pattern, WhenC
this.AdjustFlagsAndWidth(whenClause);
this.whenClause = whenClause;
}
this.AdjustFlagsAndWidth(colonToken);
this.colonToken = colonToken;
this.AdjustFlagsAndWidth(equalsGreaterThanToken);
this.equalsGreaterThanToken = equalsGreaterThanToken;
this.AdjustFlagsAndWidth(expression);
this.expression = expression;
}
internal SwitchExpressionArmSyntax(SyntaxKind kind, PatternSyntax pattern, WhenClauseSyntax whenClause, SyntaxToken colonToken, ExpressionSyntax expression)
internal SwitchExpressionArmSyntax(SyntaxKind kind, PatternSyntax pattern, WhenClauseSyntax whenClause, SyntaxToken equalsGreaterThanToken, ExpressionSyntax expression)
: base(kind)
{
this.SlotCount = 4;
......@@ -18776,15 +18776,15 @@ internal SwitchExpressionArmSyntax(SyntaxKind kind, PatternSyntax pattern, WhenC
this.AdjustFlagsAndWidth(whenClause);
this.whenClause = whenClause;
}
this.AdjustFlagsAndWidth(colonToken);
this.colonToken = colonToken;
this.AdjustFlagsAndWidth(equalsGreaterThanToken);
this.equalsGreaterThanToken = equalsGreaterThanToken;
this.AdjustFlagsAndWidth(expression);
this.expression = expression;
}
public PatternSyntax Pattern { get { return this.pattern; } }
public WhenClauseSyntax WhenClause { get { return this.whenClause; } }
public SyntaxToken ColonToken { get { return this.colonToken; } }
public SyntaxToken EqualsGreaterThanToken { get { return this.equalsGreaterThanToken; } }
public ExpressionSyntax Expression { get { return this.expression; } }
internal override GreenNode GetSlot(int index)
......@@ -18793,7 +18793,7 @@ internal override GreenNode GetSlot(int index)
{
case 0: return this.pattern;
case 1: return this.whenClause;
case 2: return this.colonToken;
case 2: return this.equalsGreaterThanToken;
case 3: return this.expression;
default: return null;
}
......@@ -18814,11 +18814,11 @@ public override void Accept(CSharpSyntaxVisitor visitor)
visitor.VisitSwitchExpressionArm(this);
}
public SwitchExpressionArmSyntax Update(PatternSyntax pattern, WhenClauseSyntax whenClause, SyntaxToken colonToken, ExpressionSyntax expression)
public SwitchExpressionArmSyntax Update(PatternSyntax pattern, WhenClauseSyntax whenClause, SyntaxToken equalsGreaterThanToken, ExpressionSyntax expression)
{
if (pattern != this.Pattern || whenClause != this.WhenClause || colonToken != this.ColonToken || expression != this.Expression)
if (pattern != this.Pattern || whenClause != this.WhenClause || equalsGreaterThanToken != this.EqualsGreaterThanToken || expression != this.Expression)
{
var newNode = SyntaxFactory.SwitchExpressionArm(pattern, whenClause, colonToken, expression);
var newNode = SyntaxFactory.SwitchExpressionArm(pattern, whenClause, equalsGreaterThanToken, expression);
var diags = this.GetDiagnostics();
if (diags != null && diags.Length > 0)
newNode = newNode.WithDiagnosticsGreen(diags);
......@@ -18833,12 +18833,12 @@ public SwitchExpressionArmSyntax Update(PatternSyntax pattern, WhenClauseSyntax
internal override GreenNode SetDiagnostics(DiagnosticInfo[] diagnostics)
{
return new SwitchExpressionArmSyntax(this.Kind, this.pattern, this.whenClause, this.colonToken, this.expression, diagnostics, GetAnnotations());
return new SwitchExpressionArmSyntax(this.Kind, this.pattern, this.whenClause, this.equalsGreaterThanToken, this.expression, diagnostics, GetAnnotations());
}
internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations)
{
return new SwitchExpressionArmSyntax(this.Kind, this.pattern, this.whenClause, this.colonToken, this.expression, GetDiagnostics(), annotations);
return new SwitchExpressionArmSyntax(this.Kind, this.pattern, this.whenClause, this.equalsGreaterThanToken, this.expression, GetDiagnostics(), annotations);
}
internal SwitchExpressionArmSyntax(ObjectReader reader)
......@@ -18857,11 +18857,11 @@ internal SwitchExpressionArmSyntax(ObjectReader reader)
AdjustFlagsAndWidth(whenClause);
this.whenClause = whenClause;
}
var colonToken = (SyntaxToken)reader.ReadValue();
if (colonToken != null)
var equalsGreaterThanToken = (SyntaxToken)reader.ReadValue();
if (equalsGreaterThanToken != null)
{
AdjustFlagsAndWidth(colonToken);
this.colonToken = colonToken;
AdjustFlagsAndWidth(equalsGreaterThanToken);
this.equalsGreaterThanToken = equalsGreaterThanToken;
}
var expression = (ExpressionSyntax)reader.ReadValue();
if (expression != null)
......@@ -18876,7 +18876,7 @@ internal override void WriteTo(ObjectWriter writer)
base.WriteTo(writer);
writer.WriteValue(this.pattern);
writer.WriteValue(this.whenClause);
writer.WriteValue(this.colonToken);
writer.WriteValue(this.equalsGreaterThanToken);
writer.WriteValue(this.expression);
}
......@@ -38198,9 +38198,9 @@ public override CSharpSyntaxNode VisitSwitchExpressionArm(SwitchExpressionArmSyn
{
var pattern = (PatternSyntax)this.Visit(node.Pattern);
var whenClause = (WhenClauseSyntax)this.Visit(node.WhenClause);
var colonToken = (SyntaxToken)this.Visit(node.ColonToken);
var equalsGreaterThanToken = (SyntaxToken)this.Visit(node.EqualsGreaterThanToken);
var expression = (ExpressionSyntax)this.Visit(node.Expression);
return node.Update(pattern, whenClause, colonToken, expression);
return node.Update(pattern, whenClause, equalsGreaterThanToken, expression);
}
public override CSharpSyntaxNode VisitTryStatement(TryStatementSyntax node)
......@@ -43141,25 +43141,25 @@ public SwitchExpressionSyntax SwitchExpression(ExpressionSyntax governingExpress
return new SwitchExpressionSyntax(SyntaxKind.SwitchExpression, governingExpression, switchKeyword, openBraceToken, arms.Node, closeBraceToken, this.context);
}
public SwitchExpressionArmSyntax SwitchExpressionArm(PatternSyntax pattern, WhenClauseSyntax whenClause, SyntaxToken colonToken, ExpressionSyntax expression)
public SwitchExpressionArmSyntax SwitchExpressionArm(PatternSyntax pattern, WhenClauseSyntax whenClause, SyntaxToken equalsGreaterThanToken, ExpressionSyntax expression)
{
#if DEBUG
if (pattern == null)
throw new ArgumentNullException(nameof(pattern));
if (colonToken == null)
throw new ArgumentNullException(nameof(colonToken));
switch (colonToken.Kind)
if (equalsGreaterThanToken == null)
throw new ArgumentNullException(nameof(equalsGreaterThanToken));
switch (equalsGreaterThanToken.Kind)
{
case SyntaxKind.ColonToken:
case SyntaxKind.EqualsGreaterThanToken:
break;
default:
throw new ArgumentException("colonToken");
throw new ArgumentException("equalsGreaterThanToken");
}
if (expression == null)
throw new ArgumentNullException(nameof(expression));
#endif
return new SwitchExpressionArmSyntax(SyntaxKind.SwitchExpressionArm, pattern, whenClause, colonToken, expression, this.context);
return new SwitchExpressionArmSyntax(SyntaxKind.SwitchExpressionArm, pattern, whenClause, equalsGreaterThanToken, expression, this.context);
}
public TryStatementSyntax TryStatement(SyntaxToken tryKeyword, BlockSyntax block, Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList<CatchClauseSyntax> catches, FinallyClauseSyntax @finally)
......@@ -50324,25 +50324,25 @@ public static SwitchExpressionSyntax SwitchExpression(ExpressionSyntax governing
return new SwitchExpressionSyntax(SyntaxKind.SwitchExpression, governingExpression, switchKeyword, openBraceToken, arms.Node, closeBraceToken);
}
public static SwitchExpressionArmSyntax SwitchExpressionArm(PatternSyntax pattern, WhenClauseSyntax whenClause, SyntaxToken colonToken, ExpressionSyntax expression)
public static SwitchExpressionArmSyntax SwitchExpressionArm(PatternSyntax pattern, WhenClauseSyntax whenClause, SyntaxToken equalsGreaterThanToken, ExpressionSyntax expression)
{
#if DEBUG
if (pattern == null)
throw new ArgumentNullException(nameof(pattern));
if (colonToken == null)
throw new ArgumentNullException(nameof(colonToken));
switch (colonToken.Kind)
if (equalsGreaterThanToken == null)
throw new ArgumentNullException(nameof(equalsGreaterThanToken));
switch (equalsGreaterThanToken.Kind)
{
case SyntaxKind.ColonToken:
case SyntaxKind.EqualsGreaterThanToken:
break;
default:
throw new ArgumentException("colonToken");
throw new ArgumentException("equalsGreaterThanToken");
}
if (expression == null)
throw new ArgumentNullException(nameof(expression));
#endif
return new SwitchExpressionArmSyntax(SyntaxKind.SwitchExpressionArm, pattern, whenClause, colonToken, expression);
return new SwitchExpressionArmSyntax(SyntaxKind.SwitchExpressionArm, pattern, whenClause, equalsGreaterThanToken, expression);
}
public static TryStatementSyntax TryStatement(SyntaxToken tryKeyword, BlockSyntax block, Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList<CatchClauseSyntax> catches, FinallyClauseSyntax @finally)
......@@ -3579,9 +3579,9 @@ public override SyntaxNode VisitSwitchExpressionArm(SwitchExpressionArmSyntax no
{
var pattern = (PatternSyntax)this.Visit(node.Pattern);
var whenClause = (WhenClauseSyntax)this.Visit(node.WhenClause);
var colonToken = this.VisitToken(node.ColonToken);
var equalsGreaterThanToken = this.VisitToken(node.EqualsGreaterThanToken);
var expression = (ExpressionSyntax)this.Visit(node.Expression);
return node.Update(pattern, whenClause, colonToken, expression);
return node.Update(pattern, whenClause, equalsGreaterThanToken, expression);
}
public override SyntaxNode VisitTryStatement(TryStatementSyntax node)
......@@ -8194,33 +8194,33 @@ public static SwitchExpressionSyntax SwitchExpression(ExpressionSyntax governing
}
/// <summary>Creates a new SwitchExpressionArmSyntax instance.</summary>
public static SwitchExpressionArmSyntax SwitchExpressionArm(PatternSyntax pattern, WhenClauseSyntax whenClause, SyntaxToken colonToken, ExpressionSyntax expression)
public static SwitchExpressionArmSyntax SwitchExpressionArm(PatternSyntax pattern, WhenClauseSyntax whenClause, SyntaxToken equalsGreaterThanToken, ExpressionSyntax expression)
{
if (pattern == null)
throw new ArgumentNullException(nameof(pattern));
switch (colonToken.Kind())
switch (equalsGreaterThanToken.Kind())
{
case SyntaxKind.ColonToken:
case SyntaxKind.EqualsGreaterThanToken:
break;
default:
throw new ArgumentException("colonToken");
throw new ArgumentException("equalsGreaterThanToken");
}
if (expression == null)
throw new ArgumentNullException(nameof(expression));
return (SwitchExpressionArmSyntax)Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.SyntaxFactory.SwitchExpressionArm(pattern == null ? null : (Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.PatternSyntax)pattern.Green, whenClause == null ? null : (Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.WhenClauseSyntax)whenClause.Green, (Syntax.InternalSyntax.SyntaxToken)colonToken.Node, expression == null ? null : (Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.ExpressionSyntax)expression.Green).CreateRed();
return (SwitchExpressionArmSyntax)Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.SyntaxFactory.SwitchExpressionArm(pattern == null ? null : (Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.PatternSyntax)pattern.Green, whenClause == null ? null : (Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.WhenClauseSyntax)whenClause.Green, (Syntax.InternalSyntax.SyntaxToken)equalsGreaterThanToken.Node, expression == null ? null : (Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.ExpressionSyntax)expression.Green).CreateRed();
}
/// <summary>Creates a new SwitchExpressionArmSyntax instance.</summary>
public static SwitchExpressionArmSyntax SwitchExpressionArm(PatternSyntax pattern, WhenClauseSyntax whenClause, ExpressionSyntax expression)
{
return SyntaxFactory.SwitchExpressionArm(pattern, whenClause, SyntaxFactory.Token(SyntaxKind.ColonToken), expression);
return SyntaxFactory.SwitchExpressionArm(pattern, whenClause, SyntaxFactory.Token(SyntaxKind.EqualsGreaterThanToken), expression);
}
/// <summary>Creates a new SwitchExpressionArmSyntax instance.</summary>
public static SwitchExpressionArmSyntax SwitchExpressionArm(PatternSyntax pattern, ExpressionSyntax expression)
{
return SyntaxFactory.SwitchExpressionArm(pattern, default(WhenClauseSyntax), SyntaxFactory.Token(SyntaxKind.ColonToken), expression);
return SyntaxFactory.SwitchExpressionArm(pattern, default(WhenClauseSyntax), SyntaxFactory.Token(SyntaxKind.EqualsGreaterThanToken), expression);
}
/// <summary>Creates a new TryStatementSyntax instance.</summary>
......
......@@ -11714,9 +11714,9 @@ public WhenClauseSyntax WhenClause
}
}
public SyntaxToken ColonToken
public SyntaxToken EqualsGreaterThanToken
{
get { return new SyntaxToken(this, ((Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.SwitchExpressionArmSyntax)this.Green).colonToken, this.GetChildPosition(2), this.GetChildIndex(2)); }
get { return new SyntaxToken(this, ((Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.SwitchExpressionArmSyntax)this.Green).equalsGreaterThanToken, this.GetChildPosition(2), this.GetChildIndex(2)); }
}
public ExpressionSyntax Expression
......@@ -11758,11 +11758,11 @@ public override void Accept(CSharpSyntaxVisitor visitor)
visitor.VisitSwitchExpressionArm(this);
}
public SwitchExpressionArmSyntax Update(PatternSyntax pattern, WhenClauseSyntax whenClause, SyntaxToken colonToken, ExpressionSyntax expression)
public SwitchExpressionArmSyntax Update(PatternSyntax pattern, WhenClauseSyntax whenClause, SyntaxToken equalsGreaterThanToken, ExpressionSyntax expression)
{
if (pattern != this.Pattern || whenClause != this.WhenClause || colonToken != this.ColonToken || expression != this.Expression)
if (pattern != this.Pattern || whenClause != this.WhenClause || equalsGreaterThanToken != this.EqualsGreaterThanToken || expression != this.Expression)
{
var newNode = SyntaxFactory.SwitchExpressionArm(pattern, whenClause, colonToken, expression);
var newNode = SyntaxFactory.SwitchExpressionArm(pattern, whenClause, equalsGreaterThanToken, expression);
var annotations = this.GetAnnotations();
if (annotations != null && annotations.Length > 0)
return newNode.WithAnnotations(annotations);
......@@ -11774,22 +11774,22 @@ public SwitchExpressionArmSyntax Update(PatternSyntax pattern, WhenClauseSyntax
public SwitchExpressionArmSyntax WithPattern(PatternSyntax pattern)
{
return this.Update(pattern, this.WhenClause, this.ColonToken, this.Expression);
return this.Update(pattern, this.WhenClause, this.EqualsGreaterThanToken, this.Expression);
}
public SwitchExpressionArmSyntax WithWhenClause(WhenClauseSyntax whenClause)
{
return this.Update(this.Pattern, whenClause, this.ColonToken, this.Expression);
return this.Update(this.Pattern, whenClause, this.EqualsGreaterThanToken, this.Expression);
}
public SwitchExpressionArmSyntax WithColonToken(SyntaxToken colonToken)
public SwitchExpressionArmSyntax WithEqualsGreaterThanToken(SyntaxToken equalsGreaterThanToken)
{
return this.Update(this.Pattern, this.WhenClause, colonToken, this.Expression);
return this.Update(this.Pattern, this.WhenClause, equalsGreaterThanToken, this.Expression);
}
public SwitchExpressionArmSyntax WithExpression(ExpressionSyntax expression)
{
return this.Update(this.Pattern, this.WhenClause, this.ColonToken, expression);
return this.Update(this.Pattern, this.WhenClause, this.EqualsGreaterThanToken, expression);
}
}
......
......@@ -676,11 +676,15 @@ private SeparatedSyntaxList<SwitchExpressionArmSyntax> ParseSwitchExpressionArms
var arms = _pool.AllocateSeparated<SwitchExpressionArmSyntax>();
do
{
var pattern = ParsePattern(Precedence.Ternary, whenIsKeyword: true);
var whenClause = ParseWhenClause(Precedence.Ternary);
var colon = this.EatToken(SyntaxKind.ColonToken);
// Use a precedence that excludes lambdas, assignments, and a ternary which could have a
// lambda on the right, because we need the parser to leave the EqualsGreaterThanToken
// to be consumed by the switch arm. The strange side-effect of that is that the ternary
// expression is not permitted as a constant expression here; it would have to be parenthesized.
var pattern = ParsePattern(Precedence.Coalescing, whenIsKeyword: true);
var whenClause = ParseWhenClause(Precedence.Coalescing);
var arrow = this.EatToken(SyntaxKind.EqualsGreaterThanToken);
var expression = ParseExpressionCore();
var switchExpressionCase = _syntaxFactory.SwitchExpressionArm(pattern, whenClause, colon, expression);
var switchExpressionCase = _syntaxFactory.SwitchExpressionArm(pattern, whenClause, arrow, expression);
arms.Add(switchExpressionCase);
if (this.CurrentToken.Kind == SyntaxKind.CommaToken)
{
......
......@@ -78,12 +78,12 @@ Microsoft.CodeAnalysis.CSharp.Syntax.SubpatternElementSyntax.Update(Microsoft.Co
Microsoft.CodeAnalysis.CSharp.Syntax.SubpatternElementSyntax.WithNameColon(Microsoft.CodeAnalysis.CSharp.Syntax.NameColonSyntax nameColon) -> Microsoft.CodeAnalysis.CSharp.Syntax.SubpatternElementSyntax
Microsoft.CodeAnalysis.CSharp.Syntax.SubpatternElementSyntax.WithPattern(Microsoft.CodeAnalysis.CSharp.Syntax.PatternSyntax pattern) -> Microsoft.CodeAnalysis.CSharp.Syntax.SubpatternElementSyntax
Microsoft.CodeAnalysis.CSharp.Syntax.SwitchExpressionArmSyntax
Microsoft.CodeAnalysis.CSharp.Syntax.SwitchExpressionArmSyntax.ColonToken.get -> Microsoft.CodeAnalysis.SyntaxToken
Microsoft.CodeAnalysis.CSharp.Syntax.SwitchExpressionArmSyntax.EqualsGreaterThanToken.get -> Microsoft.CodeAnalysis.SyntaxToken
Microsoft.CodeAnalysis.CSharp.Syntax.SwitchExpressionArmSyntax.Expression.get -> Microsoft.CodeAnalysis.CSharp.Syntax.ExpressionSyntax
Microsoft.CodeAnalysis.CSharp.Syntax.SwitchExpressionArmSyntax.Pattern.get -> Microsoft.CodeAnalysis.CSharp.Syntax.PatternSyntax
Microsoft.CodeAnalysis.CSharp.Syntax.SwitchExpressionArmSyntax.Update(Microsoft.CodeAnalysis.CSharp.Syntax.PatternSyntax pattern, Microsoft.CodeAnalysis.CSharp.Syntax.WhenClauseSyntax whenClause, Microsoft.CodeAnalysis.SyntaxToken colonToken, Microsoft.CodeAnalysis.CSharp.Syntax.ExpressionSyntax expression) -> Microsoft.CodeAnalysis.CSharp.Syntax.SwitchExpressionArmSyntax
Microsoft.CodeAnalysis.CSharp.Syntax.SwitchExpressionArmSyntax.Update(Microsoft.CodeAnalysis.CSharp.Syntax.PatternSyntax pattern, Microsoft.CodeAnalysis.CSharp.Syntax.WhenClauseSyntax whenClause, Microsoft.CodeAnalysis.SyntaxToken equalsGreaterThanToken, Microsoft.CodeAnalysis.CSharp.Syntax.ExpressionSyntax expression) -> Microsoft.CodeAnalysis.CSharp.Syntax.SwitchExpressionArmSyntax
Microsoft.CodeAnalysis.CSharp.Syntax.SwitchExpressionArmSyntax.WhenClause.get -> Microsoft.CodeAnalysis.CSharp.Syntax.WhenClauseSyntax
Microsoft.CodeAnalysis.CSharp.Syntax.SwitchExpressionArmSyntax.WithColonToken(Microsoft.CodeAnalysis.SyntaxToken colonToken) -> Microsoft.CodeAnalysis.CSharp.Syntax.SwitchExpressionArmSyntax
Microsoft.CodeAnalysis.CSharp.Syntax.SwitchExpressionArmSyntax.WithEqualsGreaterThanToken(Microsoft.CodeAnalysis.SyntaxToken equalsGreaterThanToken) -> Microsoft.CodeAnalysis.CSharp.Syntax.SwitchExpressionArmSyntax
Microsoft.CodeAnalysis.CSharp.Syntax.SwitchExpressionArmSyntax.WithExpression(Microsoft.CodeAnalysis.CSharp.Syntax.ExpressionSyntax expression) -> Microsoft.CodeAnalysis.CSharp.Syntax.SwitchExpressionArmSyntax
Microsoft.CodeAnalysis.CSharp.Syntax.SwitchExpressionArmSyntax.WithPattern(Microsoft.CodeAnalysis.CSharp.Syntax.PatternSyntax pattern) -> Microsoft.CodeAnalysis.CSharp.Syntax.SwitchExpressionArmSyntax
Microsoft.CodeAnalysis.CSharp.Syntax.SwitchExpressionArmSyntax.WithWhenClause(Microsoft.CodeAnalysis.CSharp.Syntax.WhenClauseSyntax whenClause) -> Microsoft.CodeAnalysis.CSharp.Syntax.SwitchExpressionArmSyntax
......@@ -168,7 +168,7 @@ static Microsoft.CodeAnalysis.CSharp.SyntaxFactory.SwitchExpression(Microsoft.Co
static Microsoft.CodeAnalysis.CSharp.SyntaxFactory.SwitchExpression(Microsoft.CodeAnalysis.CSharp.Syntax.ExpressionSyntax governingExpression, Microsoft.CodeAnalysis.SyntaxToken switchKeyword, Microsoft.CodeAnalysis.SyntaxToken openBraceToken, Microsoft.CodeAnalysis.SeparatedSyntaxList<Microsoft.CodeAnalysis.CSharp.Syntax.SwitchExpressionArmSyntax> arms, Microsoft.CodeAnalysis.SyntaxToken closeBraceToken) -> Microsoft.CodeAnalysis.CSharp.Syntax.SwitchExpressionSyntax
static Microsoft.CodeAnalysis.CSharp.SyntaxFactory.SwitchExpressionArm(Microsoft.CodeAnalysis.CSharp.Syntax.PatternSyntax pattern, Microsoft.CodeAnalysis.CSharp.Syntax.ExpressionSyntax expression) -> Microsoft.CodeAnalysis.CSharp.Syntax.SwitchExpressionArmSyntax
static Microsoft.CodeAnalysis.CSharp.SyntaxFactory.SwitchExpressionArm(Microsoft.CodeAnalysis.CSharp.Syntax.PatternSyntax pattern, Microsoft.CodeAnalysis.CSharp.Syntax.WhenClauseSyntax whenClause, Microsoft.CodeAnalysis.CSharp.Syntax.ExpressionSyntax expression) -> Microsoft.CodeAnalysis.CSharp.Syntax.SwitchExpressionArmSyntax
static Microsoft.CodeAnalysis.CSharp.SyntaxFactory.SwitchExpressionArm(Microsoft.CodeAnalysis.CSharp.Syntax.PatternSyntax pattern, Microsoft.CodeAnalysis.CSharp.Syntax.WhenClauseSyntax whenClause, Microsoft.CodeAnalysis.SyntaxToken colonToken, Microsoft.CodeAnalysis.CSharp.Syntax.ExpressionSyntax expression) -> Microsoft.CodeAnalysis.CSharp.Syntax.SwitchExpressionArmSyntax
static Microsoft.CodeAnalysis.CSharp.SyntaxFactory.SwitchExpressionArm(Microsoft.CodeAnalysis.CSharp.Syntax.PatternSyntax pattern, Microsoft.CodeAnalysis.CSharp.Syntax.WhenClauseSyntax whenClause, Microsoft.CodeAnalysis.SyntaxToken equalsGreaterThanToken, Microsoft.CodeAnalysis.CSharp.Syntax.ExpressionSyntax expression) -> Microsoft.CodeAnalysis.CSharp.Syntax.SwitchExpressionArmSyntax
static Microsoft.CodeAnalysis.CSharp.SyntaxFactory.VarPattern(Microsoft.CodeAnalysis.CSharp.Syntax.VariableDesignationSyntax designation) -> Microsoft.CodeAnalysis.CSharp.Syntax.VarPatternSyntax
static Microsoft.CodeAnalysis.CSharp.SyntaxFactory.VarPattern(Microsoft.CodeAnalysis.SyntaxToken varKeyword, Microsoft.CodeAnalysis.CSharp.Syntax.VariableDesignationSyntax designation) -> Microsoft.CodeAnalysis.CSharp.Syntax.VarPatternSyntax
virtual Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor.VisitDeconstructionPattern(Microsoft.CodeAnalysis.CSharp.Syntax.DeconstructionPatternSyntax node) -> void
......
......@@ -2558,8 +2558,8 @@
<Kind Name="SwitchExpressionArm"/>
<Field Name="Pattern" Type="PatternSyntax"/>
<Field Name="WhenClause" Type="WhenClauseSyntax" Optional="true"/>
<Field Name="ColonToken" Type="SyntaxToken">
<Kind Name="ColonToken"/>
<Field Name="EqualsGreaterThanToken" Type="SyntaxToken">
<Kind Name="EqualsGreaterThanToken"/>
</Field>
<Field Name="Expression" Type="ExpressionSyntax"/>
</Node>
......
......@@ -1169,11 +1169,11 @@ public static DoorState ChangeState0(DoorState state, Action action, bool haveKe
public static DoorState ChangeState1(DoorState state, Action action, bool haveKey = false) =>
(state, action) switch {
(DoorState.Opened, Action.Close): DoorState.Closed,
(DoorState.Closed, Action.Open): DoorState.Opened,
(DoorState.Closed, Action.Lock) when haveKey: DoorState.Locked,
(DoorState.Locked, Action.Unlock) when haveKey: DoorState.Closed,
_: state };
(DoorState.Opened, Action.Close) => DoorState.Closed,
(DoorState.Closed, Action.Open) => DoorState.Opened,
(DoorState.Closed, Action.Lock) when haveKey => DoorState.Locked,
(DoorState.Locked, Action.Unlock) when haveKey => DoorState.Closed,
_ => state };
}
class Program
......@@ -1634,8 +1634,8 @@ public void VariablesInSwitchExpressionArms()
public override bool Equals(object obj) =>
obj switch
{
C x1 when x1 is var x2: x2 is var x3 && x3 is {},
_: false
C x1 when x1 is var x2 => x2 is var x3 && x3 is {},
_ => false
};
public override int GetHashCode() => 1;
public static void Main()
......
......@@ -24007,14 +24007,14 @@ public class C
{
public int Test()
{
Expression<Func<int, int>> e = a => a switch { 0: 1, _: 2 }; // CS8411
Expression<Func<int, int>> e = a => a switch { 0 => 1, _ => 2 }; // CS8411
return 1;
}
}";
CreateCompilationWithMscorlib40AndSystemCore(text, parseOptions: TestOptions.RegularWithRecursivePatterns).VerifyDiagnostics(
// (9,45): error CS8414: An expression tree may not contain a switch expression.
// Expression<Func<int, int>> e = a => a switch { 0: 1, _: 2 }; // CS8411
Diagnostic(ErrorCode.ERR_ExpressionTreeContainsSwitchExpression, "a switch { 0: 1, _: 2 }").WithLocation(9, 45)
// (9,45): error CS8411: An expression tree may not contain a switch expression.
// Expression<Func<int, int>> e = a => a switch { 0 => 1, _ => 2 }; // CS8411
Diagnostic(ErrorCode.ERR_ExpressionTreeContainsSwitchExpression, "a switch { 0 => 1, _ => 2 }").WithLocation(9, 45)
);
}
}
......
......@@ -626,7 +626,7 @@ private static Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.SwitchExpress
private static Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.SwitchExpressionArmSyntax GenerateSwitchExpressionArm()
{
return Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.SyntaxFactory.SwitchExpressionArm(GenerateDiscardPattern(), null, Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.SyntaxFactory.Token(SyntaxKind.ColonToken), GenerateIdentifierName());
return Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.SyntaxFactory.SwitchExpressionArm(GenerateDiscardPattern(), null, Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.SyntaxFactory.Token(SyntaxKind.EqualsGreaterThanToken), GenerateIdentifierName());
}
private static Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.TryStatementSyntax GenerateTryStatement()
......@@ -2572,7 +2572,7 @@ public void TestSwitchExpressionArmFactoryAndProperties()
Assert.NotNull(node.Pattern);
Assert.Null(node.WhenClause);
Assert.Equal(SyntaxKind.ColonToken, node.ColonToken.Kind);
Assert.Equal(SyntaxKind.EqualsGreaterThanToken, node.EqualsGreaterThanToken.Kind);
Assert.NotNull(node.Expression);
AttachAndCheckDiagnostics(node);
......@@ -9936,7 +9936,7 @@ private static SwitchExpressionSyntax GenerateSwitchExpression()
private static SwitchExpressionArmSyntax GenerateSwitchExpressionArm()
{
return SyntaxFactory.SwitchExpressionArm(GenerateDiscardPattern(), default(WhenClauseSyntax), SyntaxFactory.Token(SyntaxKind.ColonToken), GenerateIdentifierName());
return SyntaxFactory.SwitchExpressionArm(GenerateDiscardPattern(), default(WhenClauseSyntax), SyntaxFactory.Token(SyntaxKind.EqualsGreaterThanToken), GenerateIdentifierName());
}
private static TryStatementSyntax GenerateTryStatement()
......@@ -11882,9 +11882,9 @@ public void TestSwitchExpressionArmFactoryAndProperties()
Assert.NotNull(node.Pattern);
Assert.Null(node.WhenClause);
Assert.Equal(SyntaxKind.ColonToken, node.ColonToken.Kind());
Assert.Equal(SyntaxKind.EqualsGreaterThanToken, node.EqualsGreaterThanToken.Kind());
Assert.NotNull(node.Expression);
var newNode = node.WithPattern(node.Pattern).WithWhenClause(node.WhenClause).WithColonToken(node.ColonToken).WithExpression(node.Expression);
var newNode = node.WithPattern(node.Pattern).WithWhenClause(node.WhenClause).WithEqualsGreaterThanToken(node.EqualsGreaterThanToken).WithExpression(node.Expression);
Assert.Equal(node, newNode);
}
......
......@@ -2279,10 +2279,10 @@ public void ParenthesizedExpression_05()
[Fact]
public void SwitchExpression01()
{
UsingExpression("1 switch {a: b, c: d}", TestOptions.RegularWithoutRecursivePatterns,
UsingExpression("1 switch {a => b, c => d}", TestOptions.RegularWithoutRecursivePatterns,
// (1,1): error CS8370: Feature 'recursive patterns' is not available in C# 7.3. Please use language version 8.0 or greater.
// 1 switch {a: b, c: d}
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion7_3, "1 switch {a: b, c: d}").WithArguments("recursive patterns", "8.0").WithLocation(1, 1)
// 1 switch {a => b, c => d}
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion7_3, "1 switch {a => b, c => d}").WithArguments("recursive patterns", "8.0").WithLocation(1, 1)
);
N(SyntaxKind.SwitchExpression);
{
......@@ -2301,7 +2301,7 @@ public void SwitchExpression01()
N(SyntaxKind.IdentifierToken, "a");
}
}
N(SyntaxKind.ColonToken);
N(SyntaxKind.EqualsGreaterThanToken);
N(SyntaxKind.IdentifierName);
{
N(SyntaxKind.IdentifierToken, "b");
......@@ -2317,7 +2317,7 @@ public void SwitchExpression01()
N(SyntaxKind.IdentifierToken, "c");
}
}
N(SyntaxKind.ColonToken);
N(SyntaxKind.EqualsGreaterThanToken);
N(SyntaxKind.IdentifierName);
{
N(SyntaxKind.IdentifierToken, "d");
......@@ -2331,10 +2331,16 @@ public void SwitchExpression01()
[Fact]
public void SwitchExpression02()
{
UsingExpression("1 switch { a?b:c: d }", TestOptions.RegularWithoutRecursivePatterns,
UsingExpression("1 switch { a?b:c => d }", TestOptions.RegularWithoutRecursivePatterns,
// (1,1): error CS8370: Feature 'recursive patterns' is not available in C# 7.3. Please use language version 8.0 or greater.
// 1 switch { a?b:c: d }
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion7_3, "1 switch { a?b:c: d }").WithArguments("recursive patterns", "8.0").WithLocation(1, 1)
// 1 switch { a?b:c => d }
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion7_3, "1 switch { a?b:c => d }").WithArguments("recursive patterns", "8.0").WithLocation(1, 1),
// (1,13): error CS1003: Syntax error, '=>' expected
// 1 switch { a?b:c => d }
Diagnostic(ErrorCode.ERR_SyntaxError, "?").WithArguments("=>", "?").WithLocation(1, 13),
// (1,13): error CS1525: Invalid expression term '?'
// 1 switch { a?b:c => d }
Diagnostic(ErrorCode.ERR_InvalidExprTerm, "?").WithArguments("?").WithLocation(1, 13)
);
N(SyntaxKind.SwitchExpression);
{
......@@ -2348,86 +2354,37 @@ public void SwitchExpression02()
{
N(SyntaxKind.ConstantPattern);
{
N(SyntaxKind.ConditionalExpression);
N(SyntaxKind.IdentifierName);
{
N(SyntaxKind.IdentifierName);
{
N(SyntaxKind.IdentifierToken, "a");
}
N(SyntaxKind.QuestionToken);
N(SyntaxKind.IdentifierName);
{
N(SyntaxKind.IdentifierToken, "b");
}
N(SyntaxKind.ColonToken);
N(SyntaxKind.IdentifierName);
{
N(SyntaxKind.IdentifierToken, "c");
}
N(SyntaxKind.IdentifierToken, "a");
}
}
N(SyntaxKind.ColonToken);
N(SyntaxKind.IdentifierName);
{
N(SyntaxKind.IdentifierToken, "d");
}
}
N(SyntaxKind.CloseBraceToken);
}
EOF();
}
[Fact]
public void SwitchExpression02b()
{
UsingExpression("1 switch { e when a?b:c: d }", TestOptions.RegularWithoutRecursivePatterns,
// (1,1): error CS8370: Feature 'recursive patterns' is not available in C# 7.3. Please use language version 8.0 or greater.
// 1 switch { e when a?b:c: d }
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion7_3, "1 switch { e when a?b:c: d }").WithArguments("recursive patterns", "8.0").WithLocation(1, 1)
);
N(SyntaxKind.SwitchExpression);
{
N(SyntaxKind.NumericLiteralExpression);
{
N(SyntaxKind.NumericLiteralToken, "1");
}
N(SyntaxKind.SwitchKeyword);
N(SyntaxKind.OpenBraceToken);
N(SyntaxKind.SwitchExpressionArm);
{
N(SyntaxKind.ConstantPattern);
M(SyntaxKind.EqualsGreaterThanToken);
N(SyntaxKind.ConditionalExpression);
{
M(SyntaxKind.IdentifierName);
{
M(SyntaxKind.IdentifierToken);
}
N(SyntaxKind.QuestionToken);
N(SyntaxKind.IdentifierName);
{
N(SyntaxKind.IdentifierToken, "e");
N(SyntaxKind.IdentifierToken, "b");
}
}
N(SyntaxKind.WhenClause);
{
N(SyntaxKind.WhenKeyword);
N(SyntaxKind.ConditionalExpression);
N(SyntaxKind.ColonToken);
N(SyntaxKind.SimpleLambdaExpression);
{
N(SyntaxKind.IdentifierName);
{
N(SyntaxKind.IdentifierToken, "a");
}
N(SyntaxKind.QuestionToken);
N(SyntaxKind.IdentifierName);
N(SyntaxKind.Parameter);
{
N(SyntaxKind.IdentifierToken, "b");
N(SyntaxKind.IdentifierToken, "c");
}
N(SyntaxKind.ColonToken);
N(SyntaxKind.EqualsGreaterThanToken);
N(SyntaxKind.IdentifierName);
{
N(SyntaxKind.IdentifierToken, "c");
N(SyntaxKind.IdentifierToken, "d");
}
}
}
N(SyntaxKind.ColonToken);
N(SyntaxKind.IdentifierName);
{
N(SyntaxKind.IdentifierToken, "d");
}
}
N(SyntaxKind.CloseBraceToken);
}
......@@ -2437,10 +2394,10 @@ public void SwitchExpression02b()
[Fact]
public void SwitchExpression03()
{
UsingExpression("1 switch { (a, b, c): d }", TestOptions.RegularWithoutRecursivePatterns,
UsingExpression("1 switch { (a, b, c) => d }", TestOptions.RegularWithoutRecursivePatterns,
// (1,1): error CS8370: Feature 'recursive patterns' is not available in C# 7.3. Please use language version 8.0 or greater.
// 1 switch { (a, b, c): d }
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion7_3, "1 switch { (a, b, c): d }").WithArguments("recursive patterns", "8.0").WithLocation(1, 1)
// 1 switch { (a, b, c) => d }
Diagnostic(ErrorCode.ERR_FeatureNotAvailableInVersion7_3, "1 switch { (a, b, c) => d }").WithArguments("recursive patterns", "8.0").WithLocation(1, 1)
);
N(SyntaxKind.SwitchExpression);
{
......@@ -2489,7 +2446,7 @@ public void SwitchExpression03()
}
N(SyntaxKind.CloseParenToken);
}
N(SyntaxKind.ColonToken);
N(SyntaxKind.EqualsGreaterThanToken);
N(SyntaxKind.IdentifierName);
{
N(SyntaxKind.IdentifierToken, "d");
......
......@@ -188,7 +188,7 @@ namespace My
void Patterns(object o, object p)
{
var b = o is string s;
var c = o switch { "a": 1, "b": 2, _: 3 };
var c = o switch { "a" => 1, "b" => 2, _ => 3 };
switch (o, p)
{
case (2, 1): break;
......@@ -358,7 +358,7 @@ namespace My
return;
}
}
var z7 = 1 switch { 1: 1 };
var z7 = 1 switch { 1 => 1 };
while (i &lt; 10)
{
++i;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册