...
This commit is contained in:
@@ -14,14 +14,29 @@ public record IdentifierToken(SourceSpan Span, string Value) : Token(Span)
|
||||
|
||||
public record IntLiteralToken(SourceSpan Span, string Value, int Base) : Token(Span)
|
||||
{
|
||||
public ulong AsU64 => Convert.ToUInt64(Value, Base);
|
||||
public long AsI64 => Convert.ToInt64(Value, Base);
|
||||
public uint AsU32 => Convert.ToUInt32(Value, Base);
|
||||
public int AsI32 => Convert.ToInt32(Value, Base);
|
||||
public ushort AsU16 => Convert.ToUInt16(Value, Base);
|
||||
public short AsI16 => Convert.ToInt16(Value, Base);
|
||||
public byte AsU8 => Convert.ToByte(Value, Base);
|
||||
public sbyte AsI8 => Convert.ToSByte(Value, Base);
|
||||
private string GetNumericValue()
|
||||
{
|
||||
// Strip base prefixes: 0b, 0o, 0x
|
||||
return Base switch
|
||||
{
|
||||
2 when Value.StartsWith("0b", StringComparison.OrdinalIgnoreCase)
|
||||
=> Value.Substring(2),
|
||||
8 when Value.StartsWith("0o", StringComparison.OrdinalIgnoreCase)
|
||||
=> Value.Substring(2),
|
||||
16 when Value.StartsWith("0x", StringComparison.OrdinalIgnoreCase)
|
||||
=> Value.Substring(2),
|
||||
_ => Value
|
||||
};
|
||||
}
|
||||
|
||||
public ulong AsU64 => Convert.ToUInt64(GetNumericValue(), Base);
|
||||
public long AsI64 => Convert.ToInt64(GetNumericValue(), Base);
|
||||
public uint AsU32 => Convert.ToUInt32(GetNumericValue(), Base);
|
||||
public int AsI32 => Convert.ToInt32(GetNumericValue(), Base);
|
||||
public ushort AsU16 => Convert.ToUInt16(GetNumericValue(), Base);
|
||||
public short AsI16 => Convert.ToInt16(GetNumericValue(), Base);
|
||||
public byte AsU8 => Convert.ToByte(GetNumericValue(), Base);
|
||||
public sbyte AsI8 => Convert.ToSByte(GetNumericValue(), Base);
|
||||
|
||||
public float AsF32 => Convert.ToSingle(AsI32);
|
||||
public double AsF64 => Convert.ToDouble(AsI64);
|
||||
@@ -119,6 +134,7 @@ public enum Symbol
|
||||
Pipe,
|
||||
And,
|
||||
Or,
|
||||
XOr,
|
||||
At,
|
||||
QuestionMark,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user