120 lines
5.1 KiB
C#
120 lines
5.1 KiB
C#
using System.Collections.Generic;
|
|
using Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax;
|
|
|
|
namespace Microsoft.CodeAnalysis.CSharp.Syntax;
|
|
|
|
public sealed class RecursivePatternSyntax : PatternSyntax
|
|
{
|
|
private TypeSyntax? type;
|
|
|
|
private PositionalPatternClauseSyntax? positionalPatternClause;
|
|
|
|
private PropertyPatternClauseSyntax? propertyPatternClause;
|
|
|
|
private VariableDesignationSyntax? designation;
|
|
|
|
public TypeSyntax? Type => ((SyntaxNode)this).GetRedAtZero<TypeSyntax>(ref type);
|
|
|
|
public PositionalPatternClauseSyntax? PositionalPatternClause => ((SyntaxNode)this).GetRed<PositionalPatternClauseSyntax>(ref positionalPatternClause, 1);
|
|
|
|
public PropertyPatternClauseSyntax? PropertyPatternClause => ((SyntaxNode)this).GetRed<PropertyPatternClauseSyntax>(ref propertyPatternClause, 2);
|
|
|
|
public VariableDesignationSyntax? Designation => ((SyntaxNode)this).GetRed<VariableDesignationSyntax>(ref designation, 3);
|
|
|
|
internal RecursivePatternSyntax(Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.CSharpSyntaxNode green, SyntaxNode? parent, int position)
|
|
: base(green, parent, position)
|
|
{
|
|
}
|
|
|
|
internal override SyntaxNode? GetNodeSlot(int index)
|
|
{
|
|
return (SyntaxNode?)(index switch
|
|
{
|
|
0 => ((SyntaxNode)this).GetRedAtZero<TypeSyntax>(ref type),
|
|
1 => ((SyntaxNode)this).GetRed<PositionalPatternClauseSyntax>(ref positionalPatternClause, 1),
|
|
2 => ((SyntaxNode)this).GetRed<PropertyPatternClauseSyntax>(ref propertyPatternClause, 2),
|
|
3 => ((SyntaxNode)this).GetRed<VariableDesignationSyntax>(ref designation, 3),
|
|
_ => null,
|
|
});
|
|
}
|
|
|
|
internal override SyntaxNode? GetCachedSlot(int index)
|
|
{
|
|
return (SyntaxNode?)(index switch
|
|
{
|
|
0 => type,
|
|
1 => positionalPatternClause,
|
|
2 => propertyPatternClause,
|
|
3 => designation,
|
|
_ => null,
|
|
});
|
|
}
|
|
|
|
public override void Accept(CSharpSyntaxVisitor visitor)
|
|
{
|
|
visitor.VisitRecursivePattern(this);
|
|
}
|
|
|
|
public override TResult? Accept<TResult>(CSharpSyntaxVisitor<TResult> visitor)
|
|
{
|
|
return visitor.VisitRecursivePattern(this);
|
|
}
|
|
|
|
public RecursivePatternSyntax Update(TypeSyntax? type, PositionalPatternClauseSyntax? positionalPatternClause, PropertyPatternClauseSyntax? propertyPatternClause, VariableDesignationSyntax? designation)
|
|
{
|
|
if (type != Type || positionalPatternClause != PositionalPatternClause || propertyPatternClause != PropertyPatternClause || designation != Designation)
|
|
{
|
|
RecursivePatternSyntax recursivePatternSyntax = SyntaxFactory.RecursivePattern(type, positionalPatternClause, propertyPatternClause, designation);
|
|
SyntaxAnnotation[] annotations = ((SyntaxNode)this).GetAnnotations();
|
|
if (annotations == null || annotations.Length == 0)
|
|
{
|
|
return recursivePatternSyntax;
|
|
}
|
|
return recursivePatternSyntax.WithAnnotations(annotations);
|
|
}
|
|
return this;
|
|
}
|
|
|
|
public RecursivePatternSyntax WithType(TypeSyntax? type)
|
|
{
|
|
return Update(type, PositionalPatternClause, PropertyPatternClause, Designation);
|
|
}
|
|
|
|
public RecursivePatternSyntax WithPositionalPatternClause(PositionalPatternClauseSyntax? positionalPatternClause)
|
|
{
|
|
return Update(Type, positionalPatternClause, PropertyPatternClause, Designation);
|
|
}
|
|
|
|
public RecursivePatternSyntax WithPropertyPatternClause(PropertyPatternClauseSyntax? propertyPatternClause)
|
|
{
|
|
return Update(Type, PositionalPatternClause, propertyPatternClause, Designation);
|
|
}
|
|
|
|
public RecursivePatternSyntax WithDesignation(VariableDesignationSyntax? designation)
|
|
{
|
|
return Update(Type, PositionalPatternClause, PropertyPatternClause, designation);
|
|
}
|
|
|
|
public RecursivePatternSyntax AddPositionalPatternClauseSubpatterns(params SubpatternSyntax[] items)
|
|
{
|
|
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
|
|
PositionalPatternClauseSyntax positionalPatternClauseSyntax = PositionalPatternClause ?? SyntaxFactory.PositionalPatternClause();
|
|
return WithPositionalPatternClause(positionalPatternClauseSyntax.WithSubpatterns(positionalPatternClauseSyntax.Subpatterns.AddRange((IEnumerable<SubpatternSyntax>)items)));
|
|
}
|
|
|
|
public RecursivePatternSyntax AddPropertyPatternClauseSubpatterns(params SubpatternSyntax[] items)
|
|
{
|
|
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
|
|
PropertyPatternClauseSyntax propertyPatternClauseSyntax = PropertyPatternClause ?? SyntaxFactory.PropertyPatternClause();
|
|
return WithPropertyPatternClause(propertyPatternClauseSyntax.WithSubpatterns(propertyPatternClauseSyntax.Subpatterns.AddRange((IEnumerable<SubpatternSyntax>)items)));
|
|
}
|
|
}
|