72 lines
1.4 KiB
C#
72 lines
1.4 KiB
C#
using System.Text.Json.Serialization;
|
|
|
|
namespace luaaaaah;
|
|
|
|
[JsonDerivedType(typeof(Integer), typeDiscriminator: "int")]
|
|
[JsonDerivedType(typeof(Float), typeDiscriminator: "float")]
|
|
public interface INumeral
|
|
{
|
|
public class Integer(int value) : INumeral
|
|
{
|
|
public int value = value;
|
|
|
|
public bool RawEqual(INumeral other)
|
|
{
|
|
if(other is Integer integer)
|
|
{
|
|
return integer.value == value;
|
|
}
|
|
// TODO: Check if this is actually doing what is expected
|
|
return ((Float)other).value == value;
|
|
}
|
|
public override string ToString()
|
|
{
|
|
return $"Numeral Integer {value}";
|
|
}
|
|
}
|
|
public class Float(float value) : INumeral
|
|
{
|
|
public float value = value;
|
|
|
|
public bool RawEqual(INumeral other)
|
|
{
|
|
if(other is Float float_val)
|
|
{
|
|
return float_val.value == value;
|
|
}
|
|
// TODO: Check if this is actually doing what is expected
|
|
return ((Integer)other).value == value;
|
|
}
|
|
public override string ToString()
|
|
{
|
|
return $"Numeral Float {value}";
|
|
}
|
|
}
|
|
|
|
public bool RawEqual(INumeral other);
|
|
}
|
|
|
|
class CodeRegion(CodeLocation start, CodeLocation end)
|
|
{
|
|
public CodeLocation start = start;
|
|
public CodeLocation end = end;
|
|
|
|
public override string ToString()
|
|
{
|
|
return $"{start}-{end}";
|
|
}
|
|
}
|
|
|
|
class CodeLocation(int line, int col)
|
|
{
|
|
public int line = line;
|
|
public int col = col;
|
|
|
|
public CodeLocation(CodeLocation other) : this(line: other.line, col: other.col) { }
|
|
|
|
public override string ToString()
|
|
{
|
|
return $"{line + 1}:{col + 1}";
|
|
}
|
|
}
|