Module system

This commit is contained in:
nub31
2025-09-11 23:03:44 +02:00
parent 9c2975d45f
commit 0e442a8c4a
15 changed files with 265 additions and 167 deletions

View File

@@ -1,6 +1,6 @@
namespace NubLang.Code;
public readonly struct SourceLocation : IEquatable<SourceLocation>
public readonly struct SourceLocation : IEquatable<SourceLocation>, IComparable<SourceLocation>
{
public static SourceLocation Zero => new(0, 0);
@@ -39,4 +39,10 @@ public readonly struct SourceLocation : IEquatable<SourceLocation>
public static bool operator >(SourceLocation left, SourceLocation right) => left.Line > right.Line || (left.Line == right.Line && left.Column > right.Column);
public static bool operator <=(SourceLocation left, SourceLocation right) => left.Line <= right.Line || (left.Line == right.Line && left.Column <= right.Column);
public static bool operator >=(SourceLocation left, SourceLocation right) => left.Line >= right.Line || (left.Line == right.Line && left.Column >= right.Column);
public int CompareTo(SourceLocation other)
{
var lineComparison = Line.CompareTo(other.Line);
return lineComparison != 0 ? lineComparison : Column.CompareTo(other.Column);
}
}

View File

@@ -1,6 +1,6 @@
namespace NubLang.Code;
public readonly struct SourceSpan : IEquatable<SourceSpan>
public readonly struct SourceSpan : IEquatable<SourceSpan>, IComparable<SourceSpan>
{
public static SourceSpan Zero => new(SourceLocation.Zero, SourceLocation.Zero);
@@ -54,4 +54,15 @@ public readonly struct SourceSpan : IEquatable<SourceSpan>
public static bool operator ==(SourceSpan left, SourceSpan right) => Equals(left, right);
public static bool operator !=(SourceSpan left, SourceSpan right) => !Equals(left, right);
public static bool operator <(SourceSpan left, SourceSpan right) => left.CompareTo(right) < 0;
public static bool operator <=(SourceSpan left, SourceSpan right) => left.CompareTo(right) <= 0;
public static bool operator >(SourceSpan left, SourceSpan right) => left.CompareTo(right) > 0;
public static bool operator >=(SourceSpan left, SourceSpan right) => left.CompareTo(right) >= 0;
public int CompareTo(SourceSpan other)
{
var startComparison = Start.CompareTo(other.Start);
return startComparison != 0 ? startComparison : End.CompareTo(other.End);
}
}