From 51ca1b92118e39907d26531bf69bbb05c069a930 Mon Sep 17 00:00:00 2001 From: nub31 Date: Fri, 12 Sep 2025 17:08:10 +0200 Subject: [PATCH] remove read only stuff --- compiler/NubLang.CLI/Program.cs | 7 +++---- compiler/NubLang/Generation/QBE/QBEGenerator.cs | 11 +++++------ compiler/NubLang/Modules/Module.cs | 10 +++++----- compiler/NubLang/Modules/ModuleRepository.cs | 4 ++-- compiler/NubLang/Parsing/Parser.cs | 6 +++--- compiler/NubLang/Parsing/Syntax/DefinitionSyntax.cs | 6 +++--- compiler/NubLang/Parsing/Syntax/ExpressionSyntax.cs | 4 ++-- compiler/NubLang/Parsing/Syntax/SyntaxNode.cs | 6 +++--- compiler/NubLang/Parsing/Syntax/TypeSyntax.cs | 2 +- compiler/NubLang/Tokenization/Tokenizer.cs | 2 +- compiler/NubLang/TypeChecking/Node/DefinitionNode.cs | 6 +++--- compiler/NubLang/TypeChecking/Node/ExpressionNode.cs | 6 +++--- compiler/NubLang/TypeChecking/Node/Node.cs | 4 ++-- compiler/NubLang/TypeChecking/TypeChecker.cs | 8 ++++---- example/src/main.nub | 1 + 15 files changed, 41 insertions(+), 42 deletions(-) diff --git a/compiler/NubLang.CLI/Program.cs b/compiler/NubLang.CLI/Program.cs index a1c81ec..9daddd1 100644 --- a/compiler/NubLang.CLI/Program.cs +++ b/compiler/NubLang.CLI/Program.cs @@ -1,5 +1,4 @@ -using System.Collections.Immutable; -using NubLang.CLI; +using NubLang.CLI; using NubLang.Code; using NubLang.Diagnostics; using NubLang.Generation.QBE; @@ -81,7 +80,7 @@ foreach (var syntaxTree in syntaxTrees) { referencedStructTypes.Add(structType); } - + foreach (var interfaceType in typeChecker.ReferencedInterfaceTypes) { referencedInterfaceTypes.Add(interfaceType); @@ -100,7 +99,7 @@ if (diagnostics.Any(diagnostic => diagnostic.Severity == DiagnosticSeverity.Erro Directory.CreateDirectory(".build"); -var generator = new QBEGenerator(definitions, referencedStructTypes.ToImmutableHashSet(), referencedInterfaceTypes.ToImmutableHashSet()); +var generator = new QBEGenerator(definitions, referencedStructTypes, referencedInterfaceTypes); var ssa = generator.Emit(); var ssaFilePath = Path.Combine(".build", "out.ssa"); File.WriteAllText(ssaFilePath, ssa); diff --git a/compiler/NubLang/Generation/QBE/QBEGenerator.cs b/compiler/NubLang/Generation/QBE/QBEGenerator.cs index 2da2dd6..8bf00dc 100644 --- a/compiler/NubLang/Generation/QBE/QBEGenerator.cs +++ b/compiler/NubLang/Generation/QBE/QBEGenerator.cs @@ -1,5 +1,4 @@ -using System.Collections.Immutable; -using System.Diagnostics; +using System.Diagnostics; using System.Globalization; using System.Text; using NubLang.Tokenization; @@ -10,9 +9,9 @@ namespace NubLang.Generation.QBE; public class QBEGenerator { private readonly QBEWriter _writer; - private readonly IReadOnlyList _definitions; - private readonly ImmutableHashSet _structTypes; - private readonly ImmutableHashSet _interfaceTypes; + private readonly List _definitions; + private readonly HashSet _structTypes; + private readonly HashSet _interfaceTypes; private readonly List _cStringLiterals = []; private readonly List _stringLiterals = []; @@ -24,7 +23,7 @@ public class QBEGenerator private int _stringLiteralIndex; private bool _codeIsReachable = true; - public QBEGenerator(IReadOnlyList definitions, ImmutableHashSet structTypes, ImmutableHashSet interfaceTypes) + public QBEGenerator(List definitions, HashSet structTypes, HashSet interfaceTypes) { _definitions = definitions; _structTypes = structTypes; diff --git a/compiler/NubLang/Modules/Module.cs b/compiler/NubLang/Modules/Module.cs index e2d1df4..f0f349a 100644 --- a/compiler/NubLang/Modules/Module.cs +++ b/compiler/NubLang/Modules/Module.cs @@ -8,7 +8,7 @@ public class Module private readonly List _interfaces = []; private readonly List _functions = []; - public void RegisterStruct(bool exported, string name, IReadOnlyList fields) + public void RegisterStruct(bool exported, string name, List fields) { _structs.Add(new ModuleStructType(exported, name, fields)); } @@ -23,17 +23,17 @@ public class Module _functions.Add(new ModuleFuncType(exported, name, externSymbol, type)); } - public IReadOnlyList StructTypes(bool includePrivate) + public List StructTypes(bool includePrivate) { return _structs.Where(x => x.Exported || includePrivate).ToList(); } - public IReadOnlyList InterfaceTypes(bool includePrivate) + public List InterfaceTypes(bool includePrivate) { return _interfaces.Where(x => x.Exported || includePrivate).ToList(); } - public IReadOnlyList Functions(bool includePrivate) + public List Functions(bool includePrivate) { return _functions.Where(x => x.Exported || includePrivate).ToList(); } @@ -41,7 +41,7 @@ public class Module public record ModuleStructTypeField(string Name, TypeSyntax Type, bool HasDefaultValue); -public record ModuleStructType(bool Exported, string Name, IReadOnlyList Fields); +public record ModuleStructType(bool Exported, string Name, List Fields); public record ModuleInterfaceType(bool Exported, string Name); diff --git a/compiler/NubLang/Modules/ModuleRepository.cs b/compiler/NubLang/Modules/ModuleRepository.cs index 53065d9..6e43263 100644 --- a/compiler/NubLang/Modules/ModuleRepository.cs +++ b/compiler/NubLang/Modules/ModuleRepository.cs @@ -6,7 +6,7 @@ public class ModuleRepository { private readonly Dictionary _modules = new(); - public ModuleRepository(IReadOnlyList syntaxTrees) + public ModuleRepository(List syntaxTrees) { foreach (var syntaxTree in syntaxTrees) { @@ -48,7 +48,7 @@ public class ModuleRepository } } - public IReadOnlyDictionary Modules() + public Dictionary Modules() { return _modules; } diff --git a/compiler/NubLang/Parsing/Parser.cs b/compiler/NubLang/Parsing/Parser.cs index 97cfefd..0875f4d 100644 --- a/compiler/NubLang/Parsing/Parser.cs +++ b/compiler/NubLang/Parsing/Parser.cs @@ -8,19 +8,19 @@ namespace NubLang.Parsing; public sealed class Parser { private readonly List _diagnostics = []; - private IReadOnlyList _tokens = []; + private List _tokens = []; private int _tokenIndex; private string _moduleName = string.Empty; private Token? CurrentToken => _tokenIndex < _tokens.Count ? _tokens[_tokenIndex] : null; private bool HasToken => CurrentToken != null; - public IReadOnlyList GetDiagnostics() + public List GetDiagnostics() { return _diagnostics; } - public SyntaxTree Parse(IReadOnlyList tokens) + public SyntaxTree Parse(List tokens) { _diagnostics.Clear(); _tokens = tokens; diff --git a/compiler/NubLang/Parsing/Syntax/DefinitionSyntax.cs b/compiler/NubLang/Parsing/Syntax/DefinitionSyntax.cs index 7a20805..26bab02 100644 --- a/compiler/NubLang/Parsing/Syntax/DefinitionSyntax.cs +++ b/compiler/NubLang/Parsing/Syntax/DefinitionSyntax.cs @@ -6,7 +6,7 @@ public abstract record DefinitionSyntax(IEnumerable Tokens, string Name, public record FuncParameterSyntax(IEnumerable Tokens, string Name, TypeSyntax Type) : SyntaxNode(Tokens); -public record FuncSignatureSyntax(IEnumerable Tokens, IReadOnlyList Parameters, TypeSyntax ReturnType) : SyntaxNode(Tokens); +public record FuncSignatureSyntax(IEnumerable Tokens, List Parameters, TypeSyntax ReturnType) : SyntaxNode(Tokens); public record FuncSyntax(IEnumerable Tokens, string Name, bool Exported, string? ExternSymbol, FuncSignatureSyntax Signature, BlockSyntax? Body) : DefinitionSyntax(Tokens, Name, Exported); @@ -14,8 +14,8 @@ public record StructFieldSyntax(IEnumerable Tokens, string Name, TypeSynt public record StructFuncSyntax(IEnumerable Tokens, string Name, FuncSignatureSyntax Signature, BlockSyntax Body) : SyntaxNode(Tokens); -public record StructSyntax(IEnumerable Tokens, string Name, bool Exported, IReadOnlyList Fields, IReadOnlyList Functions, IReadOnlyList InterfaceImplementations) : DefinitionSyntax(Tokens, Name, Exported); +public record StructSyntax(IEnumerable Tokens, string Name, bool Exported, List Fields, List Functions, List InterfaceImplementations) : DefinitionSyntax(Tokens, Name, Exported); public record InterfaceFuncSyntax(IEnumerable Tokens, string Name, FuncSignatureSyntax Signature) : SyntaxNode(Tokens); -public record InterfaceSyntax(IEnumerable Tokens, string Name, bool Exported, IReadOnlyList Functions) : DefinitionSyntax(Tokens, Name, Exported); \ No newline at end of file +public record InterfaceSyntax(IEnumerable Tokens, string Name, bool Exported, List Functions) : DefinitionSyntax(Tokens, Name, Exported); \ No newline at end of file diff --git a/compiler/NubLang/Parsing/Syntax/ExpressionSyntax.cs b/compiler/NubLang/Parsing/Syntax/ExpressionSyntax.cs index ea21aa7..cdf35f3 100644 --- a/compiler/NubLang/Parsing/Syntax/ExpressionSyntax.cs +++ b/compiler/NubLang/Parsing/Syntax/ExpressionSyntax.cs @@ -36,9 +36,9 @@ public record BinaryExpressionSyntax(IEnumerable Tokens, ExpressionSyntax public record UnaryExpressionSyntax(IEnumerable Tokens, UnaryOperatorSyntax Operator, ExpressionSyntax Operand) : ExpressionSyntax(Tokens); -public record FuncCallSyntax(IEnumerable Tokens, ExpressionSyntax Expression, IReadOnlyList Parameters) : ExpressionSyntax(Tokens); +public record FuncCallSyntax(IEnumerable Tokens, ExpressionSyntax Expression, List Parameters) : ExpressionSyntax(Tokens); -public record DotFuncCallSyntax(IEnumerable Tokens, string Name, ExpressionSyntax ThisParameter, IReadOnlyList Parameters) : ExpressionSyntax(Tokens); +public record DotFuncCallSyntax(IEnumerable Tokens, string Name, ExpressionSyntax ThisParameter, List Parameters) : ExpressionSyntax(Tokens); public record LocalIdentifierSyntax(IEnumerable Tokens, string Name) : ExpressionSyntax(Tokens); diff --git a/compiler/NubLang/Parsing/Syntax/SyntaxNode.cs b/compiler/NubLang/Parsing/Syntax/SyntaxNode.cs index 57a85f6..35d1c1d 100644 --- a/compiler/NubLang/Parsing/Syntax/SyntaxNode.cs +++ b/compiler/NubLang/Parsing/Syntax/SyntaxNode.cs @@ -4,8 +4,8 @@ namespace NubLang.Parsing.Syntax; public abstract record SyntaxNode(IEnumerable Tokens); -public record SyntaxTreeMetadata(string ModuleName, IReadOnlyList Imports); +public record SyntaxTreeMetadata(string ModuleName, List Imports); -public record SyntaxTree(IReadOnlyList Definitions, SyntaxTreeMetadata Metadata); +public record SyntaxTree(List Definitions, SyntaxTreeMetadata Metadata); -public record BlockSyntax(IEnumerable Tokens, IReadOnlyList Statements) : SyntaxNode(Tokens); \ No newline at end of file +public record BlockSyntax(IEnumerable Tokens, List Statements) : SyntaxNode(Tokens); \ No newline at end of file diff --git a/compiler/NubLang/Parsing/Syntax/TypeSyntax.cs b/compiler/NubLang/Parsing/Syntax/TypeSyntax.cs index 8b0ca2d..4f18cd4 100644 --- a/compiler/NubLang/Parsing/Syntax/TypeSyntax.cs +++ b/compiler/NubLang/Parsing/Syntax/TypeSyntax.cs @@ -4,7 +4,7 @@ namespace NubLang.Parsing.Syntax; public abstract record TypeSyntax(IEnumerable Tokens) : SyntaxNode(Tokens); -public record FuncTypeSyntax(IEnumerable Tokens, IReadOnlyList Parameters, TypeSyntax ReturnType) : TypeSyntax(Tokens); +public record FuncTypeSyntax(IEnumerable Tokens, List Parameters, TypeSyntax ReturnType) : TypeSyntax(Tokens); public record PointerTypeSyntax(IEnumerable Tokens, TypeSyntax BaseType) : TypeSyntax(Tokens); diff --git a/compiler/NubLang/Tokenization/Tokenizer.cs b/compiler/NubLang/Tokenization/Tokenizer.cs index 9aeb2d9..e945986 100644 --- a/compiler/NubLang/Tokenization/Tokenizer.cs +++ b/compiler/NubLang/Tokenization/Tokenizer.cs @@ -74,7 +74,7 @@ public sealed class Tokenizer _sourceFile = sourceFile; } - public IReadOnlyList GetDiagnostics() => _diagnostics; + public List GetDiagnostics() => _diagnostics; public IEnumerable Tokenize() { diff --git a/compiler/NubLang/TypeChecking/Node/DefinitionNode.cs b/compiler/NubLang/TypeChecking/Node/DefinitionNode.cs index 21d1e77..a67b19a 100644 --- a/compiler/NubLang/TypeChecking/Node/DefinitionNode.cs +++ b/compiler/NubLang/TypeChecking/Node/DefinitionNode.cs @@ -4,7 +4,7 @@ public abstract record DefinitionNode(string Module, string Name) : Node; public record FuncParameterNode(string Name, TypeNode Type) : Node; -public record FuncSignatureNode(IReadOnlyList Parameters, TypeNode ReturnType) : Node; +public record FuncSignatureNode(List Parameters, TypeNode ReturnType) : Node; public record FuncNode(string Module, string Name, string? ExternSymbol, FuncSignatureNode Signature, BlockNode? Body) : DefinitionNode(Module, Name); @@ -12,8 +12,8 @@ public record StructFieldNode(string Name, TypeNode Type, Optional Fields, IReadOnlyList Functions, IReadOnlyList InterfaceImplementations) : DefinitionNode(Module, Name); +public record StructNode(string Module, string Name, List Fields, List Functions, List InterfaceImplementations) : DefinitionNode(Module, Name); public record InterfaceFuncNode(string Name, FuncSignatureNode Signature) : Node; -public record InterfaceNode(string Module, string Name, IReadOnlyList Functions) : DefinitionNode(Module, Name); \ No newline at end of file +public record InterfaceNode(string Module, string Name, List Functions) : DefinitionNode(Module, Name); \ No newline at end of file diff --git a/compiler/NubLang/TypeChecking/Node/ExpressionNode.cs b/compiler/NubLang/TypeChecking/Node/ExpressionNode.cs index 07dc28b..80b6974 100644 --- a/compiler/NubLang/TypeChecking/Node/ExpressionNode.cs +++ b/compiler/NubLang/TypeChecking/Node/ExpressionNode.cs @@ -39,11 +39,11 @@ public record BinaryExpressionNode(TypeNode Type, ExpressionNode Left, BinaryOpe public record UnaryExpressionNode(TypeNode Type, UnaryOperator Operator, ExpressionNode Operand) : RValueExpressionNode(Type); -public record FuncCallNode(TypeNode Type, ExpressionNode Expression, IReadOnlyList Parameters) : RValueExpressionNode(Type); +public record FuncCallNode(TypeNode Type, ExpressionNode Expression, List Parameters) : RValueExpressionNode(Type); -public record StructFuncCallNode(TypeNode Type, string Name, StructTypeNode StructType, ExpressionNode StructExpression, IReadOnlyList Parameters) : RValueExpressionNode(Type); +public record StructFuncCallNode(TypeNode Type, string Name, StructTypeNode StructType, ExpressionNode StructExpression, List Parameters) : RValueExpressionNode(Type); -public record InterfaceFuncCallNode(TypeNode Type, string Name, InterfaceTypeNode InterfaceType, ExpressionNode InterfaceExpression, IReadOnlyList Parameters) : RValueExpressionNode(Type); +public record InterfaceFuncCallNode(TypeNode Type, string Name, InterfaceTypeNode InterfaceType, ExpressionNode InterfaceExpression, List Parameters) : RValueExpressionNode(Type); public record VariableIdentifierNode(TypeNode Type, string Name) : LValueExpressionNode(Type); diff --git a/compiler/NubLang/TypeChecking/Node/Node.cs b/compiler/NubLang/TypeChecking/Node/Node.cs index 6a4b83b..b7e57f1 100644 --- a/compiler/NubLang/TypeChecking/Node/Node.cs +++ b/compiler/NubLang/TypeChecking/Node/Node.cs @@ -2,6 +2,6 @@ public abstract record Node; -public record BlockNode(IReadOnlyList Statements) : Node; +public record BlockNode(List Statements) : Node; -public record TypedSyntaxTree(IReadOnlyList Definitions); \ No newline at end of file +public record TypedSyntaxTree(List Definitions); \ No newline at end of file diff --git a/compiler/NubLang/TypeChecking/TypeChecker.cs b/compiler/NubLang/TypeChecking/TypeChecker.cs index 9ff860f..e0d413d 100644 --- a/compiler/NubLang/TypeChecking/TypeChecker.cs +++ b/compiler/NubLang/TypeChecking/TypeChecker.cs @@ -30,10 +30,10 @@ public sealed class TypeChecker .ToDictionary(); } - public IReadOnlyList Definitions => _definitions; - public IReadOnlyList Diagnostics => _diagnostics; - public IReadOnlyList ReferencedStructTypes => _referencedStructTypes; - public IReadOnlyList ReferencedInterfaceTypes => _referencedInterfaceTypes; + public List Definitions => _definitions; + public List Diagnostics => _diagnostics; + public List ReferencedStructTypes => _referencedStructTypes; + public List ReferencedInterfaceTypes => _referencedInterfaceTypes; public void Check() { diff --git a/example/src/main.nub b/example/src/main.nub index 9f1d059..38a9726 100644 --- a/example/src/main.nub +++ b/example/src/main.nub @@ -10,5 +10,6 @@ export struct Test1 extern "main" func main(args: []cstring): i64 { + puts("test") return 0 }