64 lines
1.1 KiB
C#
64 lines
1.1 KiB
C#
using System;
|
|||
|
|
using Roslyn.Utilities;
|
||
|
|
|
||
|
|
namespace Microsoft.CodeAnalysis.CodeGen;
|
||
|
|
|
||
|
|
internal readonly struct LocalDebugId : IEquatable<LocalDebugId>
|
||
|
|
{
|
||
|
|
public readonly int SyntaxOffset;
|
||
|
|
|
||
|
|
public readonly int Ordinal;
|
||
|
|
|
||
|
|
public static readonly LocalDebugId None;
|
||
|
|
|
||
|
|
public bool IsNone => Ordinal == -1;
|
||
|
|
|
||
|
|
private LocalDebugId(bool isNone)
|
||
|
|
{
|
||
|
|
SyntaxOffset = -1;
|
||
|
|
Ordinal = -1;
|
||
|
|
}
|
||
|
|
|
||
|
|
public LocalDebugId(int syntaxOffset, int ordinal = 0)
|
||
|
|
{
|
||
|
|
SyntaxOffset = syntaxOffset;
|
||
|
|
Ordinal = ordinal;
|
||
|
|
}
|
||
|
|
|
||
|
|
public bool Equals(LocalDebugId other)
|
||
|
|
{
|
||
|
|
if (SyntaxOffset == other.SyntaxOffset)
|
||
|
|
{
|
||
|
|
return Ordinal == other.Ordinal;
|
||
|
|
}
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
|
||
|
|
public override int GetHashCode()
|
||
|
|
{
|
||
|
|
return Hash.Combine(SyntaxOffset, Ordinal);
|
||
|
|
}
|
||
|
|
|
||
|
|
public override bool Equals(object? obj)
|
||
|
|
{
|
||
|
|
if (obj is LocalDebugId)
|
||
|
|
{
|
||
|
|
return Equals((LocalDebugId)obj);
|
||
|
|
}
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
|
||
|
|
public override string ToString()
|
||
|
|
{
|
||
|
|
int syntaxOffset = SyntaxOffset;
|
||
|
|
string text = syntaxOffset.ToString();
|
||
|
|
syntaxOffset = Ordinal;
|
||
|
|
return text + ":" + syntaxOffset;
|
||
|
|
}
|
||
|
|
|
||
|
|
static LocalDebugId()
|
||
|
|
{
|
||
|
|
None = new LocalDebugId(isNone: true);
|
||
|
|
}
|
||
|
|
}
|