This commit is contained in:
nub31
2025-09-29 19:04:09 +02:00
parent ecdfd8262d
commit 4252725783
16 changed files with 120 additions and 129 deletions

View File

@@ -1,11 +1,10 @@
using System.Diagnostics;
using NubLang.Ast;
using NubLang.CLI;
using NubLang.Diagnostics;
using NubLang.Generation.QBE;
using NubLang.Generation;
using NubLang.Modules;
using NubLang.Parsing;
using NubLang.Tokenization;
using NubLang.TypeChecking;
using NubLang.Syntax;
var sw = Stopwatch.StartNew();

View File

@@ -1,4 +1,4 @@
namespace NubLang.TypeChecking;
namespace NubLang.Ast;
public abstract record Node;

View File

@@ -1,7 +1,7 @@
using System.Security.Cryptography;
using System.Text;
namespace NubLang.TypeChecking;
namespace NubLang.Ast;
public abstract class NubType : IEquatable<NubType>
{

View File

@@ -1,9 +1,9 @@
using System.Diagnostics;
using NubLang.Diagnostics;
using NubLang.Modules;
using NubLang.Parsing;
using NubLang.Syntax;
namespace NubLang.TypeChecking;
namespace NubLang.Ast;
public sealed class TypeChecker
{

View File

@@ -1,46 +0,0 @@
namespace NubLang.Code;
public readonly struct SourceLocation : IEquatable<SourceLocation>, IComparable<SourceLocation>
{
public SourceLocation(int line, int column)
{
Line = line;
Column = column;
}
public int Line { get; }
public int Column { get; }
public override string ToString()
{
return $"{Line}:{Column}";
}
public override bool Equals(object? obj)
{
return obj is SourceLocation other && Equals(other);
}
public bool Equals(SourceLocation other)
{
return Line == other.Line && Column == other.Column;
}
public override int GetHashCode()
{
return HashCode.Combine(typeof(SourceLocation), Line, Column);
}
public static bool operator ==(SourceLocation left, SourceLocation right) => Equals(left, right);
public static bool operator !=(SourceLocation left, SourceLocation right) => !Equals(left, right);
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 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,56 +0,0 @@
namespace NubLang.Diagnostics;
public static class ConsoleColors
{
public const string Reset = "\e[0m";
public const string Bold = "\e[1m";
public const string Faint = "\e[2m";
public const string Italic = "\e[3m";
public const string Underline = "\e[4m";
public const string SlowBlink = "\e[5m";
public const string RapidBlink = "\e[6m";
public const string SwapBgAndFg = "\e[7m";
public const string Conceal = "\e[8m";
public const string CrossedOut = "\e[9m";
public const string DefaultFont = "\e[10m";
public const string AltFont1 = "\e[11m";
public const string AltFont2 = "\e[12m";
public const string AltFont3 = "\e[13m";
public const string AltFont4 = "\e[14m";
public const string AltFont5 = "\e[15m";
public const string AltFont6 = "\e[16m";
public const string AltFont7 = "\e[17m";
public const string AltFont8 = "\e[18m";
public const string AltFont9 = "\e[19m";
public const string Black = "\e[30m";
public const string Red = "\e[31m";
public const string Green = "\e[32m";
public const string Yellow = "\e[33m";
public const string Blue = "\e[34m";
public const string Magenta = "\e[35m";
public const string Cyan = "\e[36m";
public const string White = "\e[37m";
public const string BrightBlack = "\e[90m";
public const string BrightRed = "\e[91m";
public const string BrightGreen = "\e[92m";
public const string BrightYellow = "\e[93m";
public const string BrightBlue = "\e[94m";
public const string BrightMagenta = "\e[95m";
public const string BrightCyan = "\e[96m";
public const string BrightWhite = "\e[97m";
private static bool IsColorSupported()
{
var term = Environment.GetEnvironmentVariable("TERM");
var colorTerm = Environment.GetEnvironmentVariable("COLORTERM");
return !string.IsNullOrEmpty(term) || !string.IsNullOrEmpty(colorTerm) || !Console.IsOutputRedirected;
}
public static string Colorize(string text, string color)
{
return IsColorSupported() ? $"{color}{text}{Reset}" : text;
}
}

View File

@@ -1,7 +1,5 @@
using System.Text;
using NubLang.Code;
using NubLang.Parsing;
using NubLang.Tokenization;
using NubLang.Syntax;
namespace NubLang.Diagnostics;
@@ -323,4 +321,59 @@ public enum DiagnosticSeverity
Info,
Warning,
Error
}
public static class ConsoleColors
{
public const string Reset = "\e[0m";
public const string Bold = "\e[1m";
public const string Faint = "\e[2m";
public const string Italic = "\e[3m";
public const string Underline = "\e[4m";
public const string SlowBlink = "\e[5m";
public const string RapidBlink = "\e[6m";
public const string SwapBgAndFg = "\e[7m";
public const string Conceal = "\e[8m";
public const string CrossedOut = "\e[9m";
public const string DefaultFont = "\e[10m";
public const string AltFont1 = "\e[11m";
public const string AltFont2 = "\e[12m";
public const string AltFont3 = "\e[13m";
public const string AltFont4 = "\e[14m";
public const string AltFont5 = "\e[15m";
public const string AltFont6 = "\e[16m";
public const string AltFont7 = "\e[17m";
public const string AltFont8 = "\e[18m";
public const string AltFont9 = "\e[19m";
public const string Black = "\e[30m";
public const string Red = "\e[31m";
public const string Green = "\e[32m";
public const string Yellow = "\e[33m";
public const string Blue = "\e[34m";
public const string Magenta = "\e[35m";
public const string Cyan = "\e[36m";
public const string White = "\e[37m";
public const string BrightBlack = "\e[90m";
public const string BrightRed = "\e[91m";
public const string BrightGreen = "\e[92m";
public const string BrightYellow = "\e[93m";
public const string BrightBlue = "\e[94m";
public const string BrightMagenta = "\e[95m";
public const string BrightCyan = "\e[96m";
public const string BrightWhite = "\e[97m";
private static bool IsColorSupported()
{
var term = Environment.GetEnvironmentVariable("TERM");
var colorTerm = Environment.GetEnvironmentVariable("COLORTERM");
return !string.IsNullOrEmpty(term) || !string.IsNullOrEmpty(colorTerm) || !Console.IsOutputRedirected;
}
public static string Colorize(string text, string color)
{
return IsColorSupported() ? $"{color}{text}{Reset}" : text;
}
}

View File

@@ -1,4 +1,4 @@
namespace NubLang.Code;
namespace NubLang.Diagnostics;
public readonly struct SourceSpan : IEquatable<SourceSpan>, IComparable<SourceSpan>
{
@@ -64,4 +64,49 @@ public readonly struct SourceSpan : IEquatable<SourceSpan>, IComparable<SourceSp
var startComparison = Start.CompareTo(other.Start);
return startComparison != 0 ? startComparison : End.CompareTo(other.End);
}
}
public readonly struct SourceLocation : IEquatable<SourceLocation>, IComparable<SourceLocation>
{
public SourceLocation(int line, int column)
{
Line = line;
Column = column;
}
public int Line { get; }
public int Column { get; }
public override string ToString()
{
return $"{Line}:{Column}";
}
public override bool Equals(object? obj)
{
return obj is SourceLocation other && Equals(other);
}
public bool Equals(SourceLocation other)
{
return Line == other.Line && Column == other.Column;
}
public override int GetHashCode()
{
return HashCode.Combine(typeof(SourceLocation), Line, Column);
}
public static bool operator ==(SourceLocation left, SourceLocation right) => Equals(left, right);
public static bool operator !=(SourceLocation left, SourceLocation right) => !Equals(left, right);
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 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,8 +1,8 @@
using System.Diagnostics;
using System.Text;
using NubLang.TypeChecking;
using NubLang.Ast;
namespace NubLang.Generation.QBE;
namespace NubLang.Generation;
public class QBEGenerator
{

View File

@@ -1,6 +1,6 @@
using System.Text;
namespace NubLang.Generation.QBE;
namespace NubLang.Generation;
internal class QBEWriter
{

View File

@@ -1,4 +1,4 @@
using NubLang.Parsing;
using NubLang.Syntax;
namespace NubLang.Modules;

View File

@@ -1,4 +1,4 @@
using NubLang.Parsing;
using NubLang.Syntax;
namespace NubLang.Modules;

View File

@@ -1,8 +1,7 @@
using System.Diagnostics.CodeAnalysis;
using NubLang.Diagnostics;
using NubLang.Tokenization;
namespace NubLang.Parsing;
namespace NubLang.Syntax;
public sealed class Parser
{

View File

@@ -1,6 +1,4 @@
using NubLang.Tokenization;
namespace NubLang.Parsing;
namespace NubLang.Syntax;
public abstract record SyntaxNode(List<Token> Tokens);

View File

@@ -1,6 +1,6 @@
using NubLang.Code;
using NubLang.Diagnostics;
namespace NubLang.Tokenization;
namespace NubLang.Syntax;
public enum Symbol
{

View File

@@ -1,7 +1,6 @@
using NubLang.Code;
using NubLang.Diagnostics;
using NubLang.Diagnostics;
namespace NubLang.Tokenization;
namespace NubLang.Syntax;
public sealed class Tokenizer
{