139 lines
3.5 KiB
C#
139 lines
3.5 KiB
C#
using System;
|
|||
|
|
using System.IO;
|
||
|
|
using Roslyn.Utilities;
|
||
|
|
|
||
|
|
namespace Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax;
|
||
|
|
|
||
|
|
internal class SyntaxTrivia : CSharpSyntaxNode
|
||
|
|
{
|
||
|
|
public readonly string Text;
|
||
|
|
|
||
|
|
public override bool IsTrivia => true;
|
||
|
|
|
||
|
|
internal override bool ShouldReuseInSerialization
|
||
|
|
{
|
||
|
|
get
|
||
|
|
{
|
||
|
|
if (base.Kind == SyntaxKind.WhitespaceTrivia)
|
||
|
|
{
|
||
|
|
return ((GreenNode)this).FullWidth < 42;
|
||
|
|
}
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public override int Width => ((GreenNode)this).FullWidth;
|
||
|
|
|
||
|
|
internal SyntaxTrivia(SyntaxKind kind, string text, DiagnosticInfo[]? diagnostics = null, SyntaxAnnotation[]? annotations = null)
|
||
|
|
: base(kind, diagnostics, annotations, text.Length)
|
||
|
|
{
|
||
|
|
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
|
||
|
|
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
|
||
|
|
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
|
||
|
|
Text = text;
|
||
|
|
if (kind == SyntaxKind.PreprocessingMessageTrivia)
|
||
|
|
{
|
||
|
|
((GreenNode)this).flags = (NodeFlags)(((GreenNode)this).flags | 8);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
internal SyntaxTrivia(ObjectReader reader)
|
||
|
|
: base(reader)
|
||
|
|
{
|
||
|
|
Text = reader.ReadString();
|
||
|
|
((GreenNode)this).FullWidth = Text.Length;
|
||
|
|
}
|
||
|
|
|
||
|
|
static SyntaxTrivia()
|
||
|
|
{
|
||
|
|
ObjectBinder.RegisterTypeReader(typeof(SyntaxTrivia), (Func<ObjectReader, IObjectWritable>)((ObjectReader r) => (IObjectWritable)(object)new SyntaxTrivia(r)));
|
||
|
|
}
|
||
|
|
|
||
|
|
internal override void WriteTo(ObjectWriter writer)
|
||
|
|
{
|
||
|
|
((GreenNode)this).WriteTo(writer);
|
||
|
|
writer.WriteString(Text);
|
||
|
|
}
|
||
|
|
|
||
|
|
internal static SyntaxTrivia Create(SyntaxKind kind, string text)
|
||
|
|
{
|
||
|
|
return new SyntaxTrivia(kind, text);
|
||
|
|
}
|
||
|
|
|
||
|
|
public override string ToFullString()
|
||
|
|
{
|
||
|
|
return Text;
|
||
|
|
}
|
||
|
|
|
||
|
|
public override string ToString()
|
||
|
|
{
|
||
|
|
return Text;
|
||
|
|
}
|
||
|
|
|
||
|
|
internal override GreenNode GetSlot(int index)
|
||
|
|
{
|
||
|
|
throw ExceptionUtilities.Unreachable("/_/src/Compilers/CSharp/Portable/Syntax/InternalSyntax/SyntaxTrivia.cs", 64);
|
||
|
|
}
|
||
|
|
|
||
|
|
public override int GetLeadingTriviaWidth()
|
||
|
|
{
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
public override int GetTrailingTriviaWidth()
|
||
|
|
{
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
internal override GreenNode SetDiagnostics(DiagnosticInfo[]? diagnostics)
|
||
|
|
{
|
||
|
|
return (GreenNode)(object)new SyntaxTrivia(base.Kind, Text, diagnostics, ((GreenNode)this).GetAnnotations());
|
||
|
|
}
|
||
|
|
|
||
|
|
internal override GreenNode SetAnnotations(SyntaxAnnotation[]? annotations)
|
||
|
|
{
|
||
|
|
return (GreenNode)(object)new SyntaxTrivia(base.Kind, Text, ((GreenNode)this).GetDiagnostics(), annotations);
|
||
|
|
}
|
||
|
|
|
||
|
|
public override TResult Accept<TResult>(CSharpSyntaxVisitor<TResult> visitor)
|
||
|
|
{
|
||
|
|
return visitor.VisitTrivia(this);
|
||
|
|
}
|
||
|
|
|
||
|
|
public override void Accept(CSharpSyntaxVisitor visitor)
|
||
|
|
{
|
||
|
|
visitor.VisitTrivia(this);
|
||
|
|
}
|
||
|
|
|
||
|
|
protected override void WriteTriviaTo(TextWriter writer)
|
||
|
|
{
|
||
|
|
writer.Write(Text);
|
||
|
|
}
|
||
|
|
|
||
|
|
public static implicit operator SyntaxTrivia(SyntaxTrivia trivia)
|
||
|
|
{
|
||
|
|
//IL_0003: 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)
|
||
|
|
SyntaxToken val = default(SyntaxToken);
|
||
|
|
return new SyntaxTrivia(ref val, (GreenNode)(object)trivia, 0, 0);
|
||
|
|
}
|
||
|
|
|
||
|
|
public override bool IsEquivalentTo(GreenNode? other)
|
||
|
|
{
|
||
|
|
if (!((GreenNode)this).IsEquivalentTo(other))
|
||
|
|
{
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
if (Text != ((SyntaxTrivia)(object)other).Text)
|
||
|
|
{
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
|
||
|
|
internal override SyntaxNode CreateRed(SyntaxNode? parent, int position)
|
||
|
|
{
|
||
|
|
throw ExceptionUtilities.Unreachable("/_/src/Compilers/CSharp/Portable/Syntax/InternalSyntax/SyntaxTrivia.cs", 133);
|
||
|
|
}
|
||
|
|
}
|