From c3714af5f3298a15de751b2b4b26e0351b83d888 Mon Sep 17 00:00:00 2001 From: nub31 Date: Mon, 2 Jun 2025 16:20:25 +0200 Subject: [PATCH] ... --- example/main.nub | 13 ++++- src/lang/Nub.Lang.CLI/Program.cs | 2 +- .../Generation}/Generator.cs | 49 ++++++++++++++----- .../Parsing/Definitions/DefinitionNode.cs | 2 +- .../Parsing/Definitions/FuncDefinitionNode.cs | 3 +- .../Definitions/StructDefinitionNode.cs | 3 +- .../Parsing/Expressions/AddressOfNode.cs | 2 +- .../Expressions/ArrayIndexAccessNode.cs | 2 +- .../Expressions/ArrayInitializerNode.cs | 2 +- .../Expressions/BinaryExpressionNode.cs | 2 +- .../Frontend/Parsing/Expressions/CastNode.cs | 2 +- .../Parsing/Expressions/DereferenceNode.cs | 2 +- .../Parsing/Expressions/ExpressionNode.cs | 2 +- .../Parsing/Expressions/FuncCallNode.cs | 2 +- .../Parsing/Expressions/IdentifierNode.cs | 2 +- .../Parsing/Expressions/LiteralNode.cs | 2 +- .../Parsing/Expressions/MemberAccessNode.cs | 2 +- .../Expressions/StructInitializerNode.cs | 2 +- .../Expressions/UnaryExpressionNode.cs | 2 +- src/lang/Nub.Lang/Frontend/Parsing/Parser.cs | 3 ++ .../Nub.Lang/Frontend/Parsing/SourceFile.cs | 4 +- .../Statements/ArrayIndexAssignmentNode.cs | 3 +- .../Frontend/Parsing/Statements/BlockNode.cs | 2 +- .../Frontend/Parsing/Statements/BreakNode.cs | 2 +- .../Parsing/Statements/ContinueNode.cs | 2 +- .../Frontend/Parsing/Statements/IfNode.cs | 3 +- .../Statements/MemberAssignmentNode.cs | 3 +- .../Frontend/Parsing/Statements/ReturnNode.cs | 3 +- .../Statements/StatementExpressionNode.cs | 3 +- .../Parsing/Statements/StatementNode.cs | 2 +- .../Statements/VariableAssignmentNode.cs | 4 +- .../Statements/VariableDeclarationNode.cs | 3 +- .../Frontend/Parsing/Statements/WhileNode.cs | 3 +- .../Nub.Lang/Frontend/Typing/TypeChecker.cs | 3 ++ 34 files changed, 95 insertions(+), 46 deletions(-) rename src/lang/Nub.Lang/{Backend => Frontend/Generation}/Generator.cs (97%) diff --git a/example/main.nub b/example/main.nub index 8282950..3ce47d0 100644 --- a/example/main.nub +++ b/example/main.nub @@ -1,6 +1,12 @@ namespace main +struct Ape { + name: string + age: i64 +} + struct Human { + parent: Ape name: string age: i64 } @@ -16,14 +22,17 @@ export func main(args: []^string) { // } let human = alloc Human { + parent = alloc Ape { + name = "john" + age = 24 + } age = 23 name = "oliver" } c::printf("%s is %d years old\n", human.name, human.age) + c::printf("parent name is %s\n", human.parent.name) // human.name = "hubert" // human.age = 92 - - c::printf("%s is %d years old\n", human.name, human.age) } \ No newline at end of file diff --git a/src/lang/Nub.Lang.CLI/Program.cs b/src/lang/Nub.Lang.CLI/Program.cs index e159ca2..5f6e0c8 100644 --- a/src/lang/Nub.Lang.CLI/Program.cs +++ b/src/lang/Nub.Lang.CLI/Program.cs @@ -1,5 +1,5 @@ using Nub.Lang; -using Nub.Lang.Backend; +using Nub.Lang.Frontend.Generation; using Nub.Lang.Frontend.Lexing; using Nub.Lang.Frontend.Parsing; using Nub.Lang.Frontend.Typing; diff --git a/src/lang/Nub.Lang/Backend/Generator.cs b/src/lang/Nub.Lang/Frontend/Generation/Generator.cs similarity index 97% rename from src/lang/Nub.Lang/Backend/Generator.cs rename to src/lang/Nub.Lang/Frontend/Generation/Generator.cs index 3b92ed9..f5c89f0 100644 --- a/src/lang/Nub.Lang/Backend/Generator.cs +++ b/src/lang/Nub.Lang/Frontend/Generation/Generator.cs @@ -2,9 +2,12 @@ using System.Globalization; using System.Text; using Nub.Lang.Frontend.Parsing; +using Nub.Lang.Frontend.Parsing.Definitions; +using Nub.Lang.Frontend.Parsing.Expressions; +using Nub.Lang.Frontend.Parsing.Statements; using Nub.Lang.Frontend.Typing; -namespace Nub.Lang.Backend; +namespace Nub.Lang.Frontend.Generation; public class Generator { @@ -270,6 +273,11 @@ public class Generator } } + private bool IsLargeType(NubType type) + { + return QbeTypeSize(type) > 8; + } + private void GenerateFuncDefinition(LocalFuncDefinitionNode node) { _variables.Clear(); @@ -451,7 +459,7 @@ public class Generator Debug.Assert(structType != null); var structDefinition = LookupStructDefinition(structType.Namespace, structType.Name); - var offset = LookupStructOffset(structDefinition, memberAssignment.MemberAccess.Member); + var offset = LookupMemberOffset(structDefinition, memberAssignment.MemberAccess.Member); var item = GenerateExpression(memberAssignment.MemberAccess.Expression); var offsetName = GenVarName(); @@ -1359,27 +1367,35 @@ public class Generator var size = structDefinition.Fields.Sum(x => QbeTypeSize(x.Type)); _builder.AppendLine($" %{structVar} =l alloc8 {size}"); - for (var i = 0; i < structDefinition.Fields.Count; i++) + foreach (var field in structDefinition.Fields) { - var field = structDefinition.Fields[i]; + var offset = LookupMemberOffset(structDefinition, field.Name); if (structInitializer.Initializers.TryGetValue(field.Name, out var fieldValue)) { var var = GenerateExpression(fieldValue); var offsetName = GenVarName(); - _builder.AppendLine($" %{offsetName} =l add %{structVar}, {i * QbeTypeSize(field.Type)}"); - _builder.AppendLine($" store{SQT(field.Type)} {var}, %{offsetName}"); + _builder.AppendLine($" %{offsetName} =l add %{structVar}, {offset}"); + + if (IsLargeType(field.Type)) + { + _builder.AppendLine($" blit %{offsetName}, {var}, {QbeTypeSize(field.Type)}"); + } + else + { + _builder.AppendLine($" store{SQT(field.Type)} {var}, %{offsetName}"); + } } else if (field.Value.HasValue) { var var = GenerateExpression(field.Value.Value); var offsetName = GenVarName(); - _builder.AppendLine($" %{offsetName} =l add %{structVar}, {i * QbeTypeSize(field.Type)}"); + _builder.AppendLine($" %{offsetName} =l add %{structVar}, {offset}"); _builder.AppendLine($" store{SQT(field.Type)} {var}, %{offsetName}"); } else { - throw new Exception($"Field {field.Name} on struct {structInitializer.StructType.Name} is not initialized"); + Debug.Assert(false); } } @@ -1453,15 +1469,22 @@ public class Generator case NubStructType structType: { var structDefinition = LookupStructDefinition(structType.Namespace, structType.Name); - var offset = LookupStructOffset(structDefinition, memberAccess.Member); + var offset = LookupMemberOffset(structDefinition, memberAccess.Member); var offsetName = GenVarName(); _builder.AppendLine($" %{offsetName} =l add {item}, {offset}"); - var outputName = GenVarName(); - _builder.AppendLine($" %{outputName} ={SQT(memberAccess.Type)} load{SQT(memberAccess.Type)} %{offsetName}"); + if (memberAccess.Type is NubStructType) + { + return $"%{offsetName}"; + } + else + { + var outputName = GenVarName(); + _builder.AppendLine($" %{outputName} ={SQT(memberAccess.Type)} load{SQT(memberAccess.Type)} %{offsetName}"); - return $"%{outputName}"; + return $"%{outputName}"; + } } default: { @@ -1551,7 +1574,7 @@ public class Generator .Single(s => s.Name == name); } - private int LookupStructOffset(StructDefinitionNode structDefinition, string member) + private int LookupMemberOffset(StructDefinitionNode structDefinition, string member) { return structDefinition.Fields.TakeWhile(f => f.Name != member).Sum(f => QbeTypeSize(f.Type)); } diff --git a/src/lang/Nub.Lang/Frontend/Parsing/Definitions/DefinitionNode.cs b/src/lang/Nub.Lang/Frontend/Parsing/Definitions/DefinitionNode.cs index 899352e..494cbb9 100644 --- a/src/lang/Nub.Lang/Frontend/Parsing/Definitions/DefinitionNode.cs +++ b/src/lang/Nub.Lang/Frontend/Parsing/Definitions/DefinitionNode.cs @@ -1,6 +1,6 @@ using Nub.Lang.Frontend.Lexing; -namespace Nub.Lang.Frontend.Parsing; +namespace Nub.Lang.Frontend.Parsing.Definitions; public abstract class DefinitionNode(IReadOnlyList tokens, Optional documentation) : Node(tokens) { diff --git a/src/lang/Nub.Lang/Frontend/Parsing/Definitions/FuncDefinitionNode.cs b/src/lang/Nub.Lang/Frontend/Parsing/Definitions/FuncDefinitionNode.cs index 01b9e6e..8aa012b 100644 --- a/src/lang/Nub.Lang/Frontend/Parsing/Definitions/FuncDefinitionNode.cs +++ b/src/lang/Nub.Lang/Frontend/Parsing/Definitions/FuncDefinitionNode.cs @@ -1,7 +1,8 @@ using Nub.Lang.Frontend.Lexing; +using Nub.Lang.Frontend.Parsing.Statements; using Nub.Lang.Frontend.Typing; -namespace Nub.Lang.Frontend.Parsing; +namespace Nub.Lang.Frontend.Parsing.Definitions; public class FuncParameter(string name, NubType type, bool variadic) { diff --git a/src/lang/Nub.Lang/Frontend/Parsing/Definitions/StructDefinitionNode.cs b/src/lang/Nub.Lang/Frontend/Parsing/Definitions/StructDefinitionNode.cs index a73aeb0..f3e603a 100644 --- a/src/lang/Nub.Lang/Frontend/Parsing/Definitions/StructDefinitionNode.cs +++ b/src/lang/Nub.Lang/Frontend/Parsing/Definitions/StructDefinitionNode.cs @@ -1,7 +1,8 @@ using Nub.Lang.Frontend.Lexing; +using Nub.Lang.Frontend.Parsing.Expressions; using Nub.Lang.Frontend.Typing; -namespace Nub.Lang.Frontend.Parsing; +namespace Nub.Lang.Frontend.Parsing.Definitions; public class StructField(string name, NubType type, Optional value) { diff --git a/src/lang/Nub.Lang/Frontend/Parsing/Expressions/AddressOfNode.cs b/src/lang/Nub.Lang/Frontend/Parsing/Expressions/AddressOfNode.cs index 70b4a3e..f3edb6f 100644 --- a/src/lang/Nub.Lang/Frontend/Parsing/Expressions/AddressOfNode.cs +++ b/src/lang/Nub.Lang/Frontend/Parsing/Expressions/AddressOfNode.cs @@ -1,6 +1,6 @@ using Nub.Lang.Frontend.Lexing; -namespace Nub.Lang.Frontend.Parsing; +namespace Nub.Lang.Frontend.Parsing.Expressions; public class AddressOfNode(IReadOnlyList tokens, ExpressionNode expression) : ExpressionNode(tokens) { diff --git a/src/lang/Nub.Lang/Frontend/Parsing/Expressions/ArrayIndexAccessNode.cs b/src/lang/Nub.Lang/Frontend/Parsing/Expressions/ArrayIndexAccessNode.cs index 819f237..cda2740 100644 --- a/src/lang/Nub.Lang/Frontend/Parsing/Expressions/ArrayIndexAccessNode.cs +++ b/src/lang/Nub.Lang/Frontend/Parsing/Expressions/ArrayIndexAccessNode.cs @@ -1,6 +1,6 @@ using Nub.Lang.Frontend.Lexing; -namespace Nub.Lang.Frontend.Parsing; +namespace Nub.Lang.Frontend.Parsing.Expressions; public class ArrayIndexAccessNode(IReadOnlyList tokens, ExpressionNode array, ExpressionNode index) : ExpressionNode(tokens) { diff --git a/src/lang/Nub.Lang/Frontend/Parsing/Expressions/ArrayInitializerNode.cs b/src/lang/Nub.Lang/Frontend/Parsing/Expressions/ArrayInitializerNode.cs index b0d5c13..c6b8aae 100644 --- a/src/lang/Nub.Lang/Frontend/Parsing/Expressions/ArrayInitializerNode.cs +++ b/src/lang/Nub.Lang/Frontend/Parsing/Expressions/ArrayInitializerNode.cs @@ -1,7 +1,7 @@ using Nub.Lang.Frontend.Lexing; using Nub.Lang.Frontend.Typing; -namespace Nub.Lang.Frontend.Parsing; +namespace Nub.Lang.Frontend.Parsing.Expressions; public class ArrayInitializerNode(IReadOnlyList tokens, ExpressionNode capacity, NubType itemType) : ExpressionNode(tokens) { diff --git a/src/lang/Nub.Lang/Frontend/Parsing/Expressions/BinaryExpressionNode.cs b/src/lang/Nub.Lang/Frontend/Parsing/Expressions/BinaryExpressionNode.cs index 40201b4..1564591 100644 --- a/src/lang/Nub.Lang/Frontend/Parsing/Expressions/BinaryExpressionNode.cs +++ b/src/lang/Nub.Lang/Frontend/Parsing/Expressions/BinaryExpressionNode.cs @@ -1,6 +1,6 @@ using Nub.Lang.Frontend.Lexing; -namespace Nub.Lang.Frontend.Parsing; +namespace Nub.Lang.Frontend.Parsing.Expressions; public class BinaryExpressionNode(IReadOnlyList tokens, ExpressionNode left, BinaryExpressionOperator @operator, ExpressionNode right) : ExpressionNode(tokens) { diff --git a/src/lang/Nub.Lang/Frontend/Parsing/Expressions/CastNode.cs b/src/lang/Nub.Lang/Frontend/Parsing/Expressions/CastNode.cs index 7e392c2..9b25a05 100644 --- a/src/lang/Nub.Lang/Frontend/Parsing/Expressions/CastNode.cs +++ b/src/lang/Nub.Lang/Frontend/Parsing/Expressions/CastNode.cs @@ -1,7 +1,7 @@ using Nub.Lang.Frontend.Lexing; using Nub.Lang.Frontend.Typing; -namespace Nub.Lang.Frontend.Parsing; +namespace Nub.Lang.Frontend.Parsing.Expressions; public class CastNode(IReadOnlyList tokens, NubType targetType, ExpressionNode expression) : ExpressionNode(tokens) { diff --git a/src/lang/Nub.Lang/Frontend/Parsing/Expressions/DereferenceNode.cs b/src/lang/Nub.Lang/Frontend/Parsing/Expressions/DereferenceNode.cs index 151edd4..4f7889a 100644 --- a/src/lang/Nub.Lang/Frontend/Parsing/Expressions/DereferenceNode.cs +++ b/src/lang/Nub.Lang/Frontend/Parsing/Expressions/DereferenceNode.cs @@ -1,6 +1,6 @@ using Nub.Lang.Frontend.Lexing; -namespace Nub.Lang.Frontend.Parsing; +namespace Nub.Lang.Frontend.Parsing.Expressions; public class DereferenceNode(IReadOnlyList tokens, ExpressionNode expression) : ExpressionNode(tokens) { diff --git a/src/lang/Nub.Lang/Frontend/Parsing/Expressions/ExpressionNode.cs b/src/lang/Nub.Lang/Frontend/Parsing/Expressions/ExpressionNode.cs index 5fd1bbd..06afde0 100644 --- a/src/lang/Nub.Lang/Frontend/Parsing/Expressions/ExpressionNode.cs +++ b/src/lang/Nub.Lang/Frontend/Parsing/Expressions/ExpressionNode.cs @@ -1,7 +1,7 @@ using Nub.Lang.Frontend.Lexing; using Nub.Lang.Frontend.Typing; -namespace Nub.Lang.Frontend.Parsing; +namespace Nub.Lang.Frontend.Parsing.Expressions; public abstract class ExpressionNode(IReadOnlyList tokens) : Node(tokens) { diff --git a/src/lang/Nub.Lang/Frontend/Parsing/Expressions/FuncCallNode.cs b/src/lang/Nub.Lang/Frontend/Parsing/Expressions/FuncCallNode.cs index 3609437..837d31d 100644 --- a/src/lang/Nub.Lang/Frontend/Parsing/Expressions/FuncCallNode.cs +++ b/src/lang/Nub.Lang/Frontend/Parsing/Expressions/FuncCallNode.cs @@ -1,6 +1,6 @@ using Nub.Lang.Frontend.Lexing; -namespace Nub.Lang.Frontend.Parsing; +namespace Nub.Lang.Frontend.Parsing.Expressions; public class FuncCallNode(IReadOnlyList tokens, string @namespace, string name, List parameters) : ExpressionNode(tokens) { diff --git a/src/lang/Nub.Lang/Frontend/Parsing/Expressions/IdentifierNode.cs b/src/lang/Nub.Lang/Frontend/Parsing/Expressions/IdentifierNode.cs index 58ddb78..d9f67a9 100644 --- a/src/lang/Nub.Lang/Frontend/Parsing/Expressions/IdentifierNode.cs +++ b/src/lang/Nub.Lang/Frontend/Parsing/Expressions/IdentifierNode.cs @@ -1,6 +1,6 @@ using Nub.Lang.Frontend.Lexing; -namespace Nub.Lang.Frontend.Parsing; +namespace Nub.Lang.Frontend.Parsing.Expressions; public class IdentifierNode(IReadOnlyList tokens, string identifier) : ExpressionNode(tokens) { diff --git a/src/lang/Nub.Lang/Frontend/Parsing/Expressions/LiteralNode.cs b/src/lang/Nub.Lang/Frontend/Parsing/Expressions/LiteralNode.cs index bc3e817..834f0fb 100644 --- a/src/lang/Nub.Lang/Frontend/Parsing/Expressions/LiteralNode.cs +++ b/src/lang/Nub.Lang/Frontend/Parsing/Expressions/LiteralNode.cs @@ -1,7 +1,7 @@ using Nub.Lang.Frontend.Lexing; using Nub.Lang.Frontend.Typing; -namespace Nub.Lang.Frontend.Parsing; +namespace Nub.Lang.Frontend.Parsing.Expressions; public class LiteralNode(IReadOnlyList tokens, string literal, NubType literalType) : ExpressionNode(tokens) { diff --git a/src/lang/Nub.Lang/Frontend/Parsing/Expressions/MemberAccessNode.cs b/src/lang/Nub.Lang/Frontend/Parsing/Expressions/MemberAccessNode.cs index 74f5463..a5e913a 100644 --- a/src/lang/Nub.Lang/Frontend/Parsing/Expressions/MemberAccessNode.cs +++ b/src/lang/Nub.Lang/Frontend/Parsing/Expressions/MemberAccessNode.cs @@ -1,6 +1,6 @@ using Nub.Lang.Frontend.Lexing; -namespace Nub.Lang.Frontend.Parsing; +namespace Nub.Lang.Frontend.Parsing.Expressions; public class MemberAccessNode(IReadOnlyList tokens, ExpressionNode expression, string member) : ExpressionNode(tokens) { diff --git a/src/lang/Nub.Lang/Frontend/Parsing/Expressions/StructInitializerNode.cs b/src/lang/Nub.Lang/Frontend/Parsing/Expressions/StructInitializerNode.cs index 12db5e5..b7d6861 100644 --- a/src/lang/Nub.Lang/Frontend/Parsing/Expressions/StructInitializerNode.cs +++ b/src/lang/Nub.Lang/Frontend/Parsing/Expressions/StructInitializerNode.cs @@ -1,7 +1,7 @@ using Nub.Lang.Frontend.Lexing; using Nub.Lang.Frontend.Typing; -namespace Nub.Lang.Frontend.Parsing; +namespace Nub.Lang.Frontend.Parsing.Expressions; public class StructInitializerNode(IReadOnlyList tokens, NubStructType structType, Dictionary initializers) : ExpressionNode(tokens) { diff --git a/src/lang/Nub.Lang/Frontend/Parsing/Expressions/UnaryExpressionNode.cs b/src/lang/Nub.Lang/Frontend/Parsing/Expressions/UnaryExpressionNode.cs index d447340..ec75ff8 100644 --- a/src/lang/Nub.Lang/Frontend/Parsing/Expressions/UnaryExpressionNode.cs +++ b/src/lang/Nub.Lang/Frontend/Parsing/Expressions/UnaryExpressionNode.cs @@ -1,6 +1,6 @@ using Nub.Lang.Frontend.Lexing; -namespace Nub.Lang.Frontend.Parsing; +namespace Nub.Lang.Frontend.Parsing.Expressions; public class UnaryExpressionNode(IReadOnlyList tokens, UnaryExpressionOperator @operator, ExpressionNode operand) : ExpressionNode(tokens) { diff --git a/src/lang/Nub.Lang/Frontend/Parsing/Parser.cs b/src/lang/Nub.Lang/Frontend/Parsing/Parser.cs index d612c7b..c6d2efb 100644 --- a/src/lang/Nub.Lang/Frontend/Parsing/Parser.cs +++ b/src/lang/Nub.Lang/Frontend/Parsing/Parser.cs @@ -1,6 +1,9 @@ using System.Diagnostics.CodeAnalysis; using Nub.Lang.Diagnostics; using Nub.Lang.Frontend.Lexing; +using Nub.Lang.Frontend.Parsing.Definitions; +using Nub.Lang.Frontend.Parsing.Expressions; +using Nub.Lang.Frontend.Parsing.Statements; using Nub.Lang.Frontend.Typing; namespace Nub.Lang.Frontend.Parsing; diff --git a/src/lang/Nub.Lang/Frontend/Parsing/SourceFile.cs b/src/lang/Nub.Lang/Frontend/Parsing/SourceFile.cs index 4849a8e..dbf3624 100644 --- a/src/lang/Nub.Lang/Frontend/Parsing/SourceFile.cs +++ b/src/lang/Nub.Lang/Frontend/Parsing/SourceFile.cs @@ -1,4 +1,6 @@ -namespace Nub.Lang.Frontend.Parsing; +using Nub.Lang.Frontend.Parsing.Definitions; + +namespace Nub.Lang.Frontend.Parsing; public class SourceFile(string @namespace, List definitions) { diff --git a/src/lang/Nub.Lang/Frontend/Parsing/Statements/ArrayIndexAssignmentNode.cs b/src/lang/Nub.Lang/Frontend/Parsing/Statements/ArrayIndexAssignmentNode.cs index 754e118..1737521 100644 --- a/src/lang/Nub.Lang/Frontend/Parsing/Statements/ArrayIndexAssignmentNode.cs +++ b/src/lang/Nub.Lang/Frontend/Parsing/Statements/ArrayIndexAssignmentNode.cs @@ -1,6 +1,7 @@ using Nub.Lang.Frontend.Lexing; +using Nub.Lang.Frontend.Parsing.Expressions; -namespace Nub.Lang.Frontend.Parsing; +namespace Nub.Lang.Frontend.Parsing.Statements; public class ArrayIndexAssignmentNode(IReadOnlyList tokens, ArrayIndexAccessNode arrayIndexAccess, ExpressionNode value) : StatementNode(tokens) { diff --git a/src/lang/Nub.Lang/Frontend/Parsing/Statements/BlockNode.cs b/src/lang/Nub.Lang/Frontend/Parsing/Statements/BlockNode.cs index f990a66..0d6b50e 100644 --- a/src/lang/Nub.Lang/Frontend/Parsing/Statements/BlockNode.cs +++ b/src/lang/Nub.Lang/Frontend/Parsing/Statements/BlockNode.cs @@ -1,6 +1,6 @@ using Nub.Lang.Frontend.Lexing; -namespace Nub.Lang.Frontend.Parsing; +namespace Nub.Lang.Frontend.Parsing.Statements; public class BlockNode(IReadOnlyList tokens, List statements) : Node(tokens) { diff --git a/src/lang/Nub.Lang/Frontend/Parsing/Statements/BreakNode.cs b/src/lang/Nub.Lang/Frontend/Parsing/Statements/BreakNode.cs index 4356746..40b2cef 100644 --- a/src/lang/Nub.Lang/Frontend/Parsing/Statements/BreakNode.cs +++ b/src/lang/Nub.Lang/Frontend/Parsing/Statements/BreakNode.cs @@ -1,5 +1,5 @@ using Nub.Lang.Frontend.Lexing; -namespace Nub.Lang.Frontend.Parsing; +namespace Nub.Lang.Frontend.Parsing.Statements; public class BreakNode(IReadOnlyList tokens) : StatementNode(tokens); \ No newline at end of file diff --git a/src/lang/Nub.Lang/Frontend/Parsing/Statements/ContinueNode.cs b/src/lang/Nub.Lang/Frontend/Parsing/Statements/ContinueNode.cs index 7724bc3..5674333 100644 --- a/src/lang/Nub.Lang/Frontend/Parsing/Statements/ContinueNode.cs +++ b/src/lang/Nub.Lang/Frontend/Parsing/Statements/ContinueNode.cs @@ -1,5 +1,5 @@ using Nub.Lang.Frontend.Lexing; -namespace Nub.Lang.Frontend.Parsing; +namespace Nub.Lang.Frontend.Parsing.Statements; public class ContinueNode(IReadOnlyList tokens) : StatementNode(tokens); \ No newline at end of file diff --git a/src/lang/Nub.Lang/Frontend/Parsing/Statements/IfNode.cs b/src/lang/Nub.Lang/Frontend/Parsing/Statements/IfNode.cs index f49af8d..e9934df 100644 --- a/src/lang/Nub.Lang/Frontend/Parsing/Statements/IfNode.cs +++ b/src/lang/Nub.Lang/Frontend/Parsing/Statements/IfNode.cs @@ -1,6 +1,7 @@ using Nub.Lang.Frontend.Lexing; +using Nub.Lang.Frontend.Parsing.Expressions; -namespace Nub.Lang.Frontend.Parsing; +namespace Nub.Lang.Frontend.Parsing.Statements; public class IfNode(IReadOnlyList tokens, ExpressionNode condition, BlockNode body, Optional> @else) : StatementNode(tokens) { diff --git a/src/lang/Nub.Lang/Frontend/Parsing/Statements/MemberAssignmentNode.cs b/src/lang/Nub.Lang/Frontend/Parsing/Statements/MemberAssignmentNode.cs index b057c31..acf23cd 100644 --- a/src/lang/Nub.Lang/Frontend/Parsing/Statements/MemberAssignmentNode.cs +++ b/src/lang/Nub.Lang/Frontend/Parsing/Statements/MemberAssignmentNode.cs @@ -1,6 +1,7 @@ using Nub.Lang.Frontend.Lexing; +using Nub.Lang.Frontend.Parsing.Expressions; -namespace Nub.Lang.Frontend.Parsing; +namespace Nub.Lang.Frontend.Parsing.Statements; public class MemberAssignmentNode(IReadOnlyList tokens, MemberAccessNode expression, ExpressionNode value) : StatementNode(tokens) { diff --git a/src/lang/Nub.Lang/Frontend/Parsing/Statements/ReturnNode.cs b/src/lang/Nub.Lang/Frontend/Parsing/Statements/ReturnNode.cs index c4845cd..1ece587 100644 --- a/src/lang/Nub.Lang/Frontend/Parsing/Statements/ReturnNode.cs +++ b/src/lang/Nub.Lang/Frontend/Parsing/Statements/ReturnNode.cs @@ -1,6 +1,7 @@ using Nub.Lang.Frontend.Lexing; +using Nub.Lang.Frontend.Parsing.Expressions; -namespace Nub.Lang.Frontend.Parsing; +namespace Nub.Lang.Frontend.Parsing.Statements; public class ReturnNode(IReadOnlyList tokens, Optional value) : StatementNode(tokens) { diff --git a/src/lang/Nub.Lang/Frontend/Parsing/Statements/StatementExpressionNode.cs b/src/lang/Nub.Lang/Frontend/Parsing/Statements/StatementExpressionNode.cs index cf2d7d4..7ce7e98 100644 --- a/src/lang/Nub.Lang/Frontend/Parsing/Statements/StatementExpressionNode.cs +++ b/src/lang/Nub.Lang/Frontend/Parsing/Statements/StatementExpressionNode.cs @@ -1,6 +1,7 @@ using Nub.Lang.Frontend.Lexing; +using Nub.Lang.Frontend.Parsing.Expressions; -namespace Nub.Lang.Frontend.Parsing; +namespace Nub.Lang.Frontend.Parsing.Statements; public class StatementExpressionNode(IReadOnlyList tokens, ExpressionNode expression) : StatementNode(tokens) { diff --git a/src/lang/Nub.Lang/Frontend/Parsing/Statements/StatementNode.cs b/src/lang/Nub.Lang/Frontend/Parsing/Statements/StatementNode.cs index 3217030..cc22374 100644 --- a/src/lang/Nub.Lang/Frontend/Parsing/Statements/StatementNode.cs +++ b/src/lang/Nub.Lang/Frontend/Parsing/Statements/StatementNode.cs @@ -1,5 +1,5 @@ using Nub.Lang.Frontend.Lexing; -namespace Nub.Lang.Frontend.Parsing; +namespace Nub.Lang.Frontend.Parsing.Statements; public abstract class StatementNode(IReadOnlyList tokens) : Node(tokens); \ No newline at end of file diff --git a/src/lang/Nub.Lang/Frontend/Parsing/Statements/VariableAssignmentNode.cs b/src/lang/Nub.Lang/Frontend/Parsing/Statements/VariableAssignmentNode.cs index dd12c48..dd64213 100644 --- a/src/lang/Nub.Lang/Frontend/Parsing/Statements/VariableAssignmentNode.cs +++ b/src/lang/Nub.Lang/Frontend/Parsing/Statements/VariableAssignmentNode.cs @@ -1,7 +1,7 @@ using Nub.Lang.Frontend.Lexing; -using Nub.Lang.Frontend.Typing; +using Nub.Lang.Frontend.Parsing.Expressions; -namespace Nub.Lang.Frontend.Parsing; +namespace Nub.Lang.Frontend.Parsing.Statements; public class VariableAssignmentNode(IReadOnlyList tokens, IdentifierNode identifier, ExpressionNode value) : StatementNode(tokens) { diff --git a/src/lang/Nub.Lang/Frontend/Parsing/Statements/VariableDeclarationNode.cs b/src/lang/Nub.Lang/Frontend/Parsing/Statements/VariableDeclarationNode.cs index ff27e73..24ea259 100644 --- a/src/lang/Nub.Lang/Frontend/Parsing/Statements/VariableDeclarationNode.cs +++ b/src/lang/Nub.Lang/Frontend/Parsing/Statements/VariableDeclarationNode.cs @@ -1,7 +1,8 @@ using Nub.Lang.Frontend.Lexing; +using Nub.Lang.Frontend.Parsing.Expressions; using Nub.Lang.Frontend.Typing; -namespace Nub.Lang.Frontend.Parsing; +namespace Nub.Lang.Frontend.Parsing.Statements; public class VariableDeclarationNode(IReadOnlyList tokens, string name, Optional explicitType, Optional value) : StatementNode(tokens) { diff --git a/src/lang/Nub.Lang/Frontend/Parsing/Statements/WhileNode.cs b/src/lang/Nub.Lang/Frontend/Parsing/Statements/WhileNode.cs index cc450c7..4dce315 100644 --- a/src/lang/Nub.Lang/Frontend/Parsing/Statements/WhileNode.cs +++ b/src/lang/Nub.Lang/Frontend/Parsing/Statements/WhileNode.cs @@ -1,6 +1,7 @@ using Nub.Lang.Frontend.Lexing; +using Nub.Lang.Frontend.Parsing.Expressions; -namespace Nub.Lang.Frontend.Parsing; +namespace Nub.Lang.Frontend.Parsing.Statements; public class WhileNode(IReadOnlyList tokens, ExpressionNode condition, BlockNode body) : StatementNode(tokens) { diff --git a/src/lang/Nub.Lang/Frontend/Typing/TypeChecker.cs b/src/lang/Nub.Lang/Frontend/Typing/TypeChecker.cs index a1c09e3..6d42086 100644 --- a/src/lang/Nub.Lang/Frontend/Typing/TypeChecker.cs +++ b/src/lang/Nub.Lang/Frontend/Typing/TypeChecker.cs @@ -1,5 +1,8 @@ using Nub.Lang.Diagnostics; using Nub.Lang.Frontend.Parsing; +using Nub.Lang.Frontend.Parsing.Definitions; +using Nub.Lang.Frontend.Parsing.Expressions; +using Nub.Lang.Frontend.Parsing.Statements; namespace Nub.Lang.Frontend.Typing;