提交 43add3e6 编写于 作者: N Neal Gafter

Integrate @semihokur's parser for the remainder of the pattern syntax forms.

上级 798a93bc
......@@ -15,7 +15,7 @@ private BoundExpression BindIsPatternExpression(IsPatternExpressionSyntax node,
var expression = BindExpression(node.Expression, diagnostics);
var hasErrors = IsOperandErrors(node, expression, diagnostics);
var pattern = BindPattern(node.Pattern, expression, expression.Type, hasErrors, diagnostics);
return new BoundIsPattern(node, expression, pattern, GetSpecialType(SpecialType.System_Boolean, diagnostics, node), hasErrors);
return new BoundIsPatternExpression(node, expression, pattern, GetSpecialType(SpecialType.System_Boolean, diagnostics, node), hasErrors);
}
private BoundPattern BindPattern(PatternSyntax node, BoundExpression operand, TypeSymbol operandType, bool hasErrors, DiagnosticBag diagnostics)
......
......@@ -1344,7 +1344,7 @@
<Field Name="IsVar" Type="bool"/>
</Node>
<Node Name="BoundIsPattern" Base="BoundExpression">
<Node Name="BoundIsPatternExpression" Base="BoundExpression">
<Field Name="Expression" Type="BoundExpression" Null="disallow"/>
<Field Name="Pattern" Type="BoundPattern" Null="disallow"/>
</Node>
......
......@@ -1276,7 +1276,7 @@ protected override LocalState UnreachableState()
#region Visitors
public override BoundNode VisitIsPattern(BoundIsPattern node)
public override BoundNode VisitIsPatternExpression(BoundIsPatternExpression node)
{
VisitRvalue(node.Expression);
var stateWhenFalse = this.State.Clone();
......
......@@ -875,7 +875,7 @@ public override BoundNode VisitAttribute(BoundAttribute node)
return null;
}
public override BoundNode VisitIsPattern(BoundIsPattern node)
public override BoundNode VisitIsPatternExpression(BoundIsPatternExpression node)
{
VisitRvalue(node.Expression);
return null;
......
......@@ -12,7 +12,7 @@ namespace Microsoft.CodeAnalysis.CSharp
{
internal sealed partial class LocalRewriter
{
public override BoundNode VisitIsPattern(BoundIsPattern node)
public override BoundNode VisitIsPatternExpression(BoundIsPatternExpression node)
{
var expression = VisitExpression(node.Expression);
var result = TranslatePattern(expression, node.Pattern);
......
......@@ -1606,6 +1606,91 @@
<Kind Name="IdentifierToken"/>
</Field>
</Node>
<Node Name="WildcardPatternSyntax" Base="PatternSyntax">
<Kind Name="WildcardPattern"/>
<Field Name="AsteriskToken" Type="SyntaxToken">
<Kind Name="AsteriskToken"/>
</Field>
</Node>
<Node Name="ConstantPatternSyntax" Base="PatternSyntax">
<Kind Name="ConstantPattern"/>
<Field Name="Expression" Type="ExpressionSyntax">
<PropertyComment>
<summary>ExpressionSyntax node representing the constant expression.</summary>
</PropertyComment>
</Field>
</Node>
<Node Name="RecursivePatternSyntax" Base="PatternSyntax">
<Kind Name="RecursivePattern"/>
<Field Name="Type" Type="TypeSyntax" />
<Field Name="PatternList" Type="SubRecursivePatternListSyntax">
<PropertyComment>
<summary>SubPatternListSyntax node representing the list of patterns in a recursive pattern.</summary>
</PropertyComment>
</Field>
</Node>
<Node Name="SubRecursivePatternListSyntax" Base="CSharpSyntaxNode">
<Kind Name="SubRecursivePatternList"/>
<Field Name="OpenParenToken" Type="SyntaxToken">
<Kind Name="OpenParenToken"/>
<PropertyComment>
<summary>SyntaxToken representing open parenthesis.</summary>
</PropertyComment>
</Field>
<Field Name="SubPatterns" Type="SeparatedSyntaxList&lt;SubRecursivePatternSyntax&gt;">
<PropertyComment>
<summary>SeparatedSyntaxList of SubPatternsSyntax representing the list of subpatterns.</summary>
</PropertyComment>
</Field>
<Field Name="CloseParenToken" Type="SyntaxToken">
<Kind Name="CloseParenToken"/>
<PropertyComment>
<summary>SyntaxToken representing close parenthesis.</summary>
</PropertyComment>
</Field>
</Node>
<Node Name="SubRecursivePatternSyntax" Base="CSharpSyntaxNode">
<Kind Name="SubRecursivePattern"/>
<Field Name="NameColon" Type="NameColonSyntax" Optional="true">
<PropertyComment>
<summary>NameColonSyntax node representing the optional name arguments.</summary>
</PropertyComment>
</Field>
<Field Name="Pattern" Type="PatternSyntax">
<PropertyComment>
<summary>PatternSyntax node representing the pattern.</summary>
</PropertyComment>
</Field>
</Node>
<Node Name="PropertyPatternSyntax" Base="PatternSyntax">
<Kind Name="PropertyPattern"/>
<Field Name="Type" Type="TypeSyntax" />
<Field Name="PatternList" Type="SubPropertyPatternListSyntax" />
</Node>
<Node Name="SubPropertyPatternListSyntax" Base="CSharpSyntaxNode">
<Kind Name="SubPropertyPatternList"/>
<Field Name="OpenBraceToken" Type="SyntaxToken">
<Kind Name="OpenBraceToken"/>
<PropertyComment>
<summary>SyntaxToken representing open brace.</summary>
</PropertyComment>
</Field>
<Field Name="SubPatterns" Type="SeparatedSyntaxList&lt;SubPropertyPatternSyntax&gt;" />
<Field Name="CloseBraceToken" Type="SyntaxToken">
<Kind Name="CloseBraceToken"/>
<PropertyComment>
<summary>SyntaxToken representing close brace.</summary>
</PropertyComment>
</Field>
</Node>
<Node Name="SubPropertyPatternSyntax" Base="CSharpSyntaxNode">
<Kind Name="SubPropertyPattern"/>
<Field Name="Left" Type="IdentifierNameSyntax"/>
<Field Name="IsKeyword" Type="SyntaxToken">
<Kind Name="IsKeyword"/>
</Field>
<Field Name="Pattern" Type="PatternSyntax" />
</Node>
<AbstractNode Name="InterpolatedStringContentSyntax" Base="CSharpSyntaxNode" />
<Node Name="InterpolatedStringTextSyntax" Base="InterpolatedStringContentSyntax">
<Kind Name="InterpolatedStringText"/>
......
......@@ -331,6 +331,14 @@ public enum SyntaxKind : ushort
// patterns (for pattern-matching)
DeclarationPattern = 8658,
WildcardPattern = 8659,
ConstantPattern = 8660,
RecursivePattern = 8661,
SubRecursivePattern = 8662,
SubRecursivePatternList = 8663,
PropertyPattern = 8554,
SubPropertyPattern = 8555,
SubPropertyPatternList = 8556,
// binary expressions
AddExpression = 8668,
......
......@@ -29,6 +29,10 @@ public void DiagnosticAnalyzerAllInOne()
var syntaxKindsPatterns = new HashSet<SyntaxKind>();
syntaxKindsPatterns.Add(SyntaxKind.IsPatternExpression);
syntaxKindsPatterns.Add(SyntaxKind.DeclarationPattern);
syntaxKindsPatterns.Add(SyntaxKind.WildcardPattern);
syntaxKindsPatterns.Add(SyntaxKind.ConstantPattern);
syntaxKindsPatterns.Add(SyntaxKind.RecursivePattern);
syntaxKindsPatterns.Add(SyntaxKind.SubRecursivePattern);
var analyzer = new CSharpTrackingDiagnosticAnalyzer();
CreateCompilationWithMscorlib45(source, parseOptions: TestOptions.Regular).VerifyAnalyzerDiagnostics(new[] { analyzer });
......
......@@ -32,6 +32,10 @@ public void DiagnosticAnalyzerDriverAllInOne()
var syntaxKindsPatterns = new HashSet<SyntaxKind>();
syntaxKindsPatterns.Add(SyntaxKind.IsPatternExpression);
syntaxKindsPatterns.Add(SyntaxKind.DeclarationPattern);
syntaxKindsPatterns.Add(SyntaxKind.WildcardPattern);
syntaxKindsPatterns.Add(SyntaxKind.ConstantPattern);
syntaxKindsPatterns.Add(SyntaxKind.RecursivePattern);
syntaxKindsPatterns.Add(SyntaxKind.SubRecursivePattern);
var analyzer = new CSharpTrackingDiagnosticAnalyzer();
using (var workspace = CSharpWorkspaceFactory.CreateWorkspaceFromFile(source, TestOptions.Regular))
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册