41 lines
1017 B
C#
41 lines
1017 B
C#
namespace NubLang.Code;
|
|
|
|
public class SourceFile
|
|
{
|
|
private string? _content;
|
|
|
|
public SourceFile(string path)
|
|
{
|
|
Path = path ?? throw new ArgumentNullException(nameof(path));
|
|
}
|
|
|
|
public string Path { get; }
|
|
|
|
public string GetText() => _content ??= File.ReadAllText(Path);
|
|
public override string ToString() => Path;
|
|
|
|
public override bool Equals(object? obj)
|
|
{
|
|
return obj is SourceFile other && other.Path == Path;
|
|
}
|
|
|
|
public override int GetHashCode()
|
|
{
|
|
return HashCode.Combine(typeof(SourceFile), Path);
|
|
}
|
|
|
|
public static bool operator ==(SourceFile? left, SourceFile? right) => Equals(left, right);
|
|
public static bool operator !=(SourceFile? left, SourceFile? right) => !Equals(left, right);
|
|
}
|
|
|
|
public class SourceFileSpan
|
|
{
|
|
public SourceFileSpan(SourceFile sourceFile, SourceSpan span)
|
|
{
|
|
SourceFile = sourceFile;
|
|
Span = span;
|
|
}
|
|
|
|
public SourceFile SourceFile { get; }
|
|
public SourceSpan Span { get; }
|
|
} |