From 642d604ecd3817bc74772bf15a7176dc5fadc9aa Mon Sep 17 00:00:00 2001 From: nub31 Date: Sun, 21 Sep 2025 19:21:01 +0200 Subject: [PATCH] ... --- compiler/NubLang/Modules/Module.cs | 11 +++---- compiler/NubLang/Modules/ModuleRepository.cs | 2 +- compiler/NubLang/Parsing/Parser.cs | 4 +-- .../Parsing/Syntax/DefinitionSyntax.cs | 16 +++++----- .../Parsing/Syntax/ExpressionSyntax.cs | 32 +++++++++---------- .../NubLang/Parsing/Syntax/StatementSyntax.cs | 22 ++++++------- compiler/NubLang/Parsing/Syntax/SyntaxNode.cs | 2 +- compiler/NubLang/Parsing/Syntax/TypeSyntax.cs | 24 +++++++------- 8 files changed, 55 insertions(+), 58 deletions(-) diff --git a/compiler/NubLang/Modules/Module.cs b/compiler/NubLang/Modules/Module.cs index 04ebfc9..46a2cab 100644 --- a/compiler/NubLang/Modules/Module.cs +++ b/compiler/NubLang/Modules/Module.cs @@ -1,12 +1,11 @@ using NubLang.Parsing.Syntax; -using NubLang.TypeChecking.Node; namespace NubLang.Modules; public class Module { private readonly List _structs = []; - private readonly List _structTemplates = []; + private readonly List _structTemplates = []; private readonly List _functions = []; public void RegisterStruct(bool exported, string name, List fields, List functions) @@ -14,9 +13,9 @@ public class Module _structs.Add(new ModuleStruct(exported, name, fields, functions)); } - public void RegisterStructTemplate(bool exported, string name, List templateArguments, List fields, List functions) + public void RegisterStructTemplate(StructTemplateSyntax structTemplate) { - _structTemplates.Add(new ModuleStructTemplate(exported, name, templateArguments, fields, functions)); + _structTemplates.Add(structTemplate); } public void RegisterFunction(bool exported, string name, string? externSymbol, List parameters, TypeSyntax returnType) @@ -43,6 +42,4 @@ public record ModuleStruct(bool Exported, string Name, List F public record ModuleFunctionParameter(string Name, TypeSyntax Type); -public record ModuleFunction(bool Exported, string Name, string? ExternSymbol, List Parameters, TypeSyntax ReturnType); - -public record ModuleStructTemplate(bool Exported, string Name, List TemplateArguments, List Fields, List Functions); \ No newline at end of file +public record ModuleFunction(bool Exported, string Name, string? ExternSymbol, List Parameters, TypeSyntax ReturnType); \ No newline at end of file diff --git a/compiler/NubLang/Modules/ModuleRepository.cs b/compiler/NubLang/Modules/ModuleRepository.cs index a76c8e5..55b5606 100644 --- a/compiler/NubLang/Modules/ModuleRepository.cs +++ b/compiler/NubLang/Modules/ModuleRepository.cs @@ -53,7 +53,7 @@ public class ModuleRepository } case StructTemplateSyntax structDef: { - // todo(nub31): Include templates in modules + module.RegisterStructTemplate(structDef); break; } default: diff --git a/compiler/NubLang/Parsing/Parser.cs b/compiler/NubLang/Parsing/Parser.cs index 5a4c911..344ae3e 100644 --- a/compiler/NubLang/Parsing/Parser.cs +++ b/compiler/NubLang/Parsing/Parser.cs @@ -939,9 +939,9 @@ public sealed class Parser _tokenIndex++; } - private IEnumerable GetTokens(int tokenStartIndex) + private List GetTokens(int tokenStartIndex) { - return _tokens.Skip(tokenStartIndex).Take(_tokenIndex - tokenStartIndex); + return _tokens.Skip(tokenStartIndex).Take(_tokenIndex - tokenStartIndex).ToList(); } } diff --git a/compiler/NubLang/Parsing/Syntax/DefinitionSyntax.cs b/compiler/NubLang/Parsing/Syntax/DefinitionSyntax.cs index c9c0651..9492054 100644 --- a/compiler/NubLang/Parsing/Syntax/DefinitionSyntax.cs +++ b/compiler/NubLang/Parsing/Syntax/DefinitionSyntax.cs @@ -2,18 +2,18 @@ using NubLang.Tokenization; namespace NubLang.Parsing.Syntax; -public abstract record DefinitionSyntax(IEnumerable Tokens, string Name, bool Exported) : SyntaxNode(Tokens); +public abstract record DefinitionSyntax(List Tokens, string Name, bool Exported) : SyntaxNode(Tokens); -public record FuncParameterSyntax(IEnumerable Tokens, string Name, TypeSyntax Type) : SyntaxNode(Tokens); +public record FuncParameterSyntax(List Tokens, string Name, TypeSyntax Type) : SyntaxNode(Tokens); -public record FuncSignatureSyntax(IEnumerable Tokens, List Parameters, TypeSyntax ReturnType) : SyntaxNode(Tokens); +public record FuncSignatureSyntax(List 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); +public record FuncSyntax(List Tokens, string Name, bool Exported, string? ExternSymbol, FuncSignatureSyntax Signature, BlockSyntax? Body) : DefinitionSyntax(Tokens, Name, Exported); -public record StructFieldSyntax(IEnumerable Tokens, string Name, TypeSyntax Type, Optional Value) : SyntaxNode(Tokens); +public record StructFieldSyntax(List Tokens, string Name, TypeSyntax Type, Optional Value) : SyntaxNode(Tokens); -public record StructFuncSyntax(IEnumerable Tokens, string Name, string? Hook, FuncSignatureSyntax Signature, BlockSyntax Body) : SyntaxNode(Tokens); +public record StructFuncSyntax(List Tokens, string Name, string? Hook, FuncSignatureSyntax Signature, BlockSyntax Body) : SyntaxNode(Tokens); -public record StructSyntax(IEnumerable Tokens, string Name, bool Exported, List Fields, List Functions) : DefinitionSyntax(Tokens, Name, Exported); +public record StructSyntax(List Tokens, string Name, bool Exported, List Fields, List Functions) : DefinitionSyntax(Tokens, Name, Exported); -public record StructTemplateSyntax(IEnumerable Tokens, List TemplateArguments, string Name, bool Exported, List Fields, List Functions) : DefinitionSyntax(Tokens, Name, Exported); \ No newline at end of file +public record StructTemplateSyntax(List Tokens, List TemplateArguments, string Name, bool Exported, List Fields, 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 5d263c1..9a2f2e9 100644 --- a/compiler/NubLang/Parsing/Syntax/ExpressionSyntax.cs +++ b/compiler/NubLang/Parsing/Syntax/ExpressionSyntax.cs @@ -30,34 +30,34 @@ public enum BinaryOperatorSyntax BitwiseOr, } -public abstract record ExpressionSyntax(IEnumerable Tokens) : SyntaxNode(Tokens); +public abstract record ExpressionSyntax(List Tokens) : SyntaxNode(Tokens); -public record BinaryExpressionSyntax(IEnumerable Tokens, ExpressionSyntax Left, BinaryOperatorSyntax Operator, ExpressionSyntax Right) : ExpressionSyntax(Tokens); +public record BinaryExpressionSyntax(List Tokens, ExpressionSyntax Left, BinaryOperatorSyntax Operator, ExpressionSyntax Right) : ExpressionSyntax(Tokens); -public record UnaryExpressionSyntax(IEnumerable Tokens, UnaryOperatorSyntax Operator, ExpressionSyntax Operand) : ExpressionSyntax(Tokens); +public record UnaryExpressionSyntax(List Tokens, UnaryOperatorSyntax Operator, ExpressionSyntax Operand) : ExpressionSyntax(Tokens); -public record FuncCallSyntax(IEnumerable Tokens, ExpressionSyntax Expression, List Parameters) : ExpressionSyntax(Tokens); +public record FuncCallSyntax(List Tokens, ExpressionSyntax Expression, List Parameters) : ExpressionSyntax(Tokens); -public record DotFuncCallSyntax(IEnumerable Tokens, string Name, ExpressionSyntax Target, List Parameters) : ExpressionSyntax(Tokens); +public record DotFuncCallSyntax(List Tokens, string Name, ExpressionSyntax Target, List Parameters) : ExpressionSyntax(Tokens); -public record LocalIdentifierSyntax(IEnumerable Tokens, string Name) : ExpressionSyntax(Tokens); +public record LocalIdentifierSyntax(List Tokens, string Name) : ExpressionSyntax(Tokens); -public record ModuleIdentifierSyntax(IEnumerable Tokens, string Module, string Name) : ExpressionSyntax(Tokens); +public record ModuleIdentifierSyntax(List Tokens, string Module, string Name) : ExpressionSyntax(Tokens); -public record ArrayInitializerSyntax(IEnumerable Tokens, ExpressionSyntax Capacity, TypeSyntax ElementType) : ExpressionSyntax(Tokens); +public record ArrayInitializerSyntax(List Tokens, ExpressionSyntax Capacity, TypeSyntax ElementType) : ExpressionSyntax(Tokens); -public record ArrayIndexAccessSyntax(IEnumerable Tokens, ExpressionSyntax Target, ExpressionSyntax Index) : ExpressionSyntax(Tokens); +public record ArrayIndexAccessSyntax(List Tokens, ExpressionSyntax Target, ExpressionSyntax Index) : ExpressionSyntax(Tokens); -public record AddressOfSyntax(IEnumerable Tokens, ExpressionSyntax Target) : ExpressionSyntax(Tokens); +public record AddressOfSyntax(List Tokens, ExpressionSyntax Target) : ExpressionSyntax(Tokens); -public record LiteralSyntax(IEnumerable Tokens, string Value, LiteralKind Kind) : ExpressionSyntax(Tokens); +public record LiteralSyntax(List Tokens, string Value, LiteralKind Kind) : ExpressionSyntax(Tokens); -public record StructFieldAccessSyntax(IEnumerable Tokens, ExpressionSyntax Target, string Member) : ExpressionSyntax(Tokens); +public record StructFieldAccessSyntax(List Tokens, ExpressionSyntax Target, string Member) : ExpressionSyntax(Tokens); -public record StructInitializerSyntax(IEnumerable Tokens, Optional StructType, Dictionary Initializers) : ExpressionSyntax(Tokens); +public record StructInitializerSyntax(List Tokens, Optional StructType, Dictionary Initializers) : ExpressionSyntax(Tokens); -public record DereferenceSyntax(IEnumerable Tokens, ExpressionSyntax Target) : ExpressionSyntax(Tokens); +public record DereferenceSyntax(List Tokens, ExpressionSyntax Target) : ExpressionSyntax(Tokens); -public record SizeCompilerMacroSyntax(IEnumerable Tokens, TypeSyntax Type) : ExpressionSyntax(Tokens); +public record SizeCompilerMacroSyntax(List Tokens, TypeSyntax Type) : ExpressionSyntax(Tokens); -public record InterpretCompilerMacroSyntax(IEnumerable Tokens, TypeSyntax Type, ExpressionSyntax Target) : ExpressionSyntax(Tokens); \ No newline at end of file +public record InterpretCompilerMacroSyntax(List Tokens, TypeSyntax Type, ExpressionSyntax Target) : ExpressionSyntax(Tokens); \ No newline at end of file diff --git a/compiler/NubLang/Parsing/Syntax/StatementSyntax.cs b/compiler/NubLang/Parsing/Syntax/StatementSyntax.cs index b13f116..8f841d3 100644 --- a/compiler/NubLang/Parsing/Syntax/StatementSyntax.cs +++ b/compiler/NubLang/Parsing/Syntax/StatementSyntax.cs @@ -2,24 +2,24 @@ using NubLang.Tokenization; namespace NubLang.Parsing.Syntax; -public abstract record StatementSyntax(IEnumerable Tokens) : SyntaxNode(Tokens); +public abstract record StatementSyntax(List Tokens) : SyntaxNode(Tokens); -public record BlockSyntax(IEnumerable Tokens, List Statements) : StatementSyntax(Tokens); +public record BlockSyntax(List Tokens, List Statements) : StatementSyntax(Tokens); -public record StatementExpressionSyntax(IEnumerable Tokens, ExpressionSyntax Expression) : StatementSyntax(Tokens); +public record StatementExpressionSyntax(List Tokens, ExpressionSyntax Expression) : StatementSyntax(Tokens); -public record ReturnSyntax(IEnumerable Tokens, Optional Value) : StatementSyntax(Tokens); +public record ReturnSyntax(List Tokens, Optional Value) : StatementSyntax(Tokens); -public record AssignmentSyntax(IEnumerable Tokens, ExpressionSyntax Target, ExpressionSyntax Value) : StatementSyntax(Tokens); +public record AssignmentSyntax(List Tokens, ExpressionSyntax Target, ExpressionSyntax Value) : StatementSyntax(Tokens); -public record IfSyntax(IEnumerable Tokens, ExpressionSyntax Condition, BlockSyntax Body, Optional> Else) : StatementSyntax(Tokens); +public record IfSyntax(List Tokens, ExpressionSyntax Condition, BlockSyntax Body, Optional> Else) : StatementSyntax(Tokens); -public record VariableDeclarationSyntax(IEnumerable Tokens, string Name, Optional ExplicitType, Optional Assignment) : StatementSyntax(Tokens); +public record VariableDeclarationSyntax(List Tokens, string Name, Optional ExplicitType, Optional Assignment) : StatementSyntax(Tokens); -public record ContinueSyntax(IEnumerable Tokens) : StatementSyntax(Tokens); +public record ContinueSyntax(List Tokens) : StatementSyntax(Tokens); -public record BreakSyntax(IEnumerable Tokens) : StatementSyntax(Tokens); +public record BreakSyntax(List Tokens) : StatementSyntax(Tokens); -public record DeferSyntax(IEnumerable Tokens, StatementSyntax Statement) : StatementSyntax(Tokens); +public record DeferSyntax(List Tokens, StatementSyntax Statement) : StatementSyntax(Tokens); -public record WhileSyntax(IEnumerable Tokens, ExpressionSyntax Condition, BlockSyntax Body) : StatementSyntax(Tokens); \ No newline at end of file +public record WhileSyntax(List Tokens, ExpressionSyntax Condition, BlockSyntax Body) : StatementSyntax(Tokens); \ No newline at end of file diff --git a/compiler/NubLang/Parsing/Syntax/SyntaxNode.cs b/compiler/NubLang/Parsing/Syntax/SyntaxNode.cs index 65d3210..3ea9790 100644 --- a/compiler/NubLang/Parsing/Syntax/SyntaxNode.cs +++ b/compiler/NubLang/Parsing/Syntax/SyntaxNode.cs @@ -2,7 +2,7 @@ using NubLang.Tokenization; namespace NubLang.Parsing.Syntax; -public abstract record SyntaxNode(IEnumerable Tokens); +public abstract record SyntaxNode(List Tokens); public record SyntaxTreeMetadata(string ModuleName, List Imports); diff --git a/compiler/NubLang/Parsing/Syntax/TypeSyntax.cs b/compiler/NubLang/Parsing/Syntax/TypeSyntax.cs index 809a1fa..33f8d5b 100644 --- a/compiler/NubLang/Parsing/Syntax/TypeSyntax.cs +++ b/compiler/NubLang/Parsing/Syntax/TypeSyntax.cs @@ -2,26 +2,26 @@ using NubLang.Tokenization; namespace NubLang.Parsing.Syntax; -public abstract record TypeSyntax(IEnumerable Tokens) : SyntaxNode(Tokens); +public abstract record TypeSyntax(List Tokens) : SyntaxNode(Tokens); -public record FuncTypeSyntax(IEnumerable Tokens, List Parameters, TypeSyntax ReturnType) : TypeSyntax(Tokens); +public record FuncTypeSyntax(List Tokens, List Parameters, TypeSyntax ReturnType) : TypeSyntax(Tokens); -public record PointerTypeSyntax(IEnumerable Tokens, TypeSyntax BaseType) : TypeSyntax(Tokens); +public record PointerTypeSyntax(List Tokens, TypeSyntax BaseType) : TypeSyntax(Tokens); -public record VoidTypeSyntax(IEnumerable Tokens) : TypeSyntax(Tokens); +public record VoidTypeSyntax(List Tokens) : TypeSyntax(Tokens); -public record IntTypeSyntax(IEnumerable Tokens, bool Signed, int Width) : TypeSyntax(Tokens); +public record IntTypeSyntax(List Tokens, bool Signed, int Width) : TypeSyntax(Tokens); -public record FloatTypeSyntax(IEnumerable Tokens, int Width) : TypeSyntax(Tokens); +public record FloatTypeSyntax(List Tokens, int Width) : TypeSyntax(Tokens); -public record BoolTypeSyntax(IEnumerable Tokens) : TypeSyntax(Tokens); +public record BoolTypeSyntax(List Tokens) : TypeSyntax(Tokens); -public record StringTypeSyntax(IEnumerable Tokens) : TypeSyntax(Tokens); +public record StringTypeSyntax(List Tokens) : TypeSyntax(Tokens); -public record CStringTypeSyntax(IEnumerable Tokens) : TypeSyntax(Tokens); +public record CStringTypeSyntax(List Tokens) : TypeSyntax(Tokens); -public record ArrayTypeSyntax(IEnumerable Tokens, TypeSyntax BaseType) : TypeSyntax(Tokens); +public record ArrayTypeSyntax(List Tokens, TypeSyntax BaseType) : TypeSyntax(Tokens); -public record CustomTypeSyntax(IEnumerable Tokens, string Module, string Name) : TypeSyntax(Tokens); +public record CustomTypeSyntax(List Tokens, string Module, string Name) : TypeSyntax(Tokens); -public record TemplateTypeSyntax(IEnumerable Tokens, List TemplateParameters, string Module, string Name) : TypeSyntax(Tokens); \ No newline at end of file +public record TemplateTypeSyntax(List Tokens, List TemplateParameters, string Module, string Name) : TypeSyntax(Tokens); \ No newline at end of file