diff --git a/compiler/NubLang.CLI/Program.cs b/compiler/NubLang.CLI/Program.cs index 90e13c1..4adacf9 100644 --- a/compiler/NubLang.CLI/Program.cs +++ b/compiler/NubLang.CLI/Program.cs @@ -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(); diff --git a/compiler/NubLang/TypeChecking/Node.cs b/compiler/NubLang/Ast/Node.cs similarity index 99% rename from compiler/NubLang/TypeChecking/Node.cs rename to compiler/NubLang/Ast/Node.cs index 77800f7..08fad0e 100644 --- a/compiler/NubLang/TypeChecking/Node.cs +++ b/compiler/NubLang/Ast/Node.cs @@ -1,4 +1,4 @@ -namespace NubLang.TypeChecking; +namespace NubLang.Ast; public abstract record Node; diff --git a/compiler/NubLang/TypeChecking/NubType.cs b/compiler/NubLang/Ast/NubType.cs similarity index 99% rename from compiler/NubLang/TypeChecking/NubType.cs rename to compiler/NubLang/Ast/NubType.cs index 4afd1e8..a655c6e 100644 --- a/compiler/NubLang/TypeChecking/NubType.cs +++ b/compiler/NubLang/Ast/NubType.cs @@ -1,7 +1,7 @@ using System.Security.Cryptography; using System.Text; -namespace NubLang.TypeChecking; +namespace NubLang.Ast; public abstract class NubType : IEquatable { diff --git a/compiler/NubLang/TypeChecking/TypeChecker.cs b/compiler/NubLang/Ast/TypeChecker.cs similarity index 99% rename from compiler/NubLang/TypeChecking/TypeChecker.cs rename to compiler/NubLang/Ast/TypeChecker.cs index 67d805d..4263bb6 100644 --- a/compiler/NubLang/TypeChecking/TypeChecker.cs +++ b/compiler/NubLang/Ast/TypeChecker.cs @@ -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 { diff --git a/compiler/NubLang/Code/SourceLocation.cs b/compiler/NubLang/Code/SourceLocation.cs deleted file mode 100644 index 7a65e42..0000000 --- a/compiler/NubLang/Code/SourceLocation.cs +++ /dev/null @@ -1,46 +0,0 @@ -namespace NubLang.Code; - -public readonly struct SourceLocation : IEquatable, IComparable -{ - 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); - } -} \ No newline at end of file diff --git a/compiler/NubLang/Diagnostics/ConsoleColors.cs b/compiler/NubLang/Diagnostics/ConsoleColors.cs deleted file mode 100644 index 1a6f7a3..0000000 --- a/compiler/NubLang/Diagnostics/ConsoleColors.cs +++ /dev/null @@ -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; - } -} \ No newline at end of file diff --git a/compiler/NubLang/Diagnostics/Diagnostic.cs b/compiler/NubLang/Diagnostics/Diagnostic.cs index def66d4..04b851c 100644 --- a/compiler/NubLang/Diagnostics/Diagnostic.cs +++ b/compiler/NubLang/Diagnostics/Diagnostic.cs @@ -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; + } } \ No newline at end of file diff --git a/compiler/NubLang/Code/SourceSpan.cs b/compiler/NubLang/Diagnostics/SourceSpan.cs similarity index 57% rename from compiler/NubLang/Code/SourceSpan.cs rename to compiler/NubLang/Diagnostics/SourceSpan.cs index 71af66e..121fe6e 100644 --- a/compiler/NubLang/Code/SourceSpan.cs +++ b/compiler/NubLang/Diagnostics/SourceSpan.cs @@ -1,4 +1,4 @@ -namespace NubLang.Code; +namespace NubLang.Diagnostics; public readonly struct SourceSpan : IEquatable, IComparable { @@ -64,4 +64,49 @@ public readonly struct SourceSpan : IEquatable, IComparable, IComparable +{ + 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); + } } \ No newline at end of file diff --git a/compiler/NubLang/Generation/QBE/QBEGenerator.cs b/compiler/NubLang/Generation/QBEGenerator.cs similarity index 99% rename from compiler/NubLang/Generation/QBE/QBEGenerator.cs rename to compiler/NubLang/Generation/QBEGenerator.cs index 736a4ad..dd6918a 100644 --- a/compiler/NubLang/Generation/QBE/QBEGenerator.cs +++ b/compiler/NubLang/Generation/QBEGenerator.cs @@ -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 { diff --git a/compiler/NubLang/Generation/QBE/QBEWriter.cs b/compiler/NubLang/Generation/QBEWriter.cs similarity index 94% rename from compiler/NubLang/Generation/QBE/QBEWriter.cs rename to compiler/NubLang/Generation/QBEWriter.cs index 2ff8668..eb4fcf7 100644 --- a/compiler/NubLang/Generation/QBE/QBEWriter.cs +++ b/compiler/NubLang/Generation/QBEWriter.cs @@ -1,6 +1,6 @@ using System.Text; -namespace NubLang.Generation.QBE; +namespace NubLang.Generation; internal class QBEWriter { diff --git a/compiler/NubLang/Modules/Module.cs b/compiler/NubLang/Modules/Module.cs index ceabb47..3d3ba95 100644 --- a/compiler/NubLang/Modules/Module.cs +++ b/compiler/NubLang/Modules/Module.cs @@ -1,4 +1,4 @@ -using NubLang.Parsing; +using NubLang.Syntax; namespace NubLang.Modules; diff --git a/compiler/NubLang/Modules/ModuleRepository.cs b/compiler/NubLang/Modules/ModuleRepository.cs index 89bce9a..5b2a300 100644 --- a/compiler/NubLang/Modules/ModuleRepository.cs +++ b/compiler/NubLang/Modules/ModuleRepository.cs @@ -1,4 +1,4 @@ -using NubLang.Parsing; +using NubLang.Syntax; namespace NubLang.Modules; diff --git a/compiler/NubLang/Parsing/Parser.cs b/compiler/NubLang/Syntax/Parser.cs similarity index 99% rename from compiler/NubLang/Parsing/Parser.cs rename to compiler/NubLang/Syntax/Parser.cs index a2e412c..5488c80 100644 --- a/compiler/NubLang/Parsing/Parser.cs +++ b/compiler/NubLang/Syntax/Parser.cs @@ -1,8 +1,7 @@ using System.Diagnostics.CodeAnalysis; using NubLang.Diagnostics; -using NubLang.Tokenization; -namespace NubLang.Parsing; +namespace NubLang.Syntax; public sealed class Parser { diff --git a/compiler/NubLang/Parsing/Syntax.cs b/compiler/NubLang/Syntax/Syntax.cs similarity index 99% rename from compiler/NubLang/Parsing/Syntax.cs rename to compiler/NubLang/Syntax/Syntax.cs index dd8cb5c..28c5679 100644 --- a/compiler/NubLang/Parsing/Syntax.cs +++ b/compiler/NubLang/Syntax/Syntax.cs @@ -1,6 +1,4 @@ -using NubLang.Tokenization; - -namespace NubLang.Parsing; +namespace NubLang.Syntax; public abstract record SyntaxNode(List Tokens); diff --git a/compiler/NubLang/Tokenization/Token.cs b/compiler/NubLang/Syntax/Token.cs similarity index 93% rename from compiler/NubLang/Tokenization/Token.cs rename to compiler/NubLang/Syntax/Token.cs index 86d7fd5..6c18814 100644 --- a/compiler/NubLang/Tokenization/Token.cs +++ b/compiler/NubLang/Syntax/Token.cs @@ -1,6 +1,6 @@ -using NubLang.Code; +using NubLang.Diagnostics; -namespace NubLang.Tokenization; +namespace NubLang.Syntax; public enum Symbol { diff --git a/compiler/NubLang/Tokenization/Tokenizer.cs b/compiler/NubLang/Syntax/Tokenizer.cs similarity index 99% rename from compiler/NubLang/Tokenization/Tokenizer.cs rename to compiler/NubLang/Syntax/Tokenizer.cs index c7801ec..2f68d67 100644 --- a/compiler/NubLang/Tokenization/Tokenizer.cs +++ b/compiler/NubLang/Syntax/Tokenizer.cs @@ -1,7 +1,6 @@ -using NubLang.Code; -using NubLang.Diagnostics; +using NubLang.Diagnostics; -namespace NubLang.Tokenization; +namespace NubLang.Syntax; public sealed class Tokenizer {