Files

120 lines
5.1 KiB
C#
Raw Permalink Normal View History

2026-08-27 10:56:38 -06:00
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)));
}
}