From afea51a9c3d9fe8711b00263b44aaa577c0e3c34 Mon Sep 17 00:00:00 2001 From: nub31 Date: Mon, 29 Sep 2025 18:57:49 +0200 Subject: [PATCH] Clean --- compiler/NubLang.CLI/Program.cs | 2 - compiler/NubLang/Diagnostics/Diagnostic.cs | 2 +- .../NubLang/Generation/QBE/QBEGenerator.cs | 2 +- compiler/NubLang/Modules/Module.cs | 2 +- compiler/NubLang/Modules/ModuleRepository.cs | 2 +- compiler/NubLang/Parsing/Parser.cs | 5 +- compiler/NubLang/Parsing/Syntax.cs | 155 ++++++++++++++++++ .../Parsing/Syntax/DefinitionSyntax.cs | 21 --- .../Parsing/Syntax/ExpressionSyntax.cs | 71 -------- .../NubLang/Parsing/Syntax/StatementSyntax.cs | 25 --- compiler/NubLang/Parsing/Syntax/SyntaxNode.cs | 9 - compiler/NubLang/Parsing/Syntax/TypeSyntax.cs | 29 ---- .../{Node/ExpressionNode.cs => Node.cs} | 60 ++++++- .../TypeChecking/Node/DefinitionNode.cs | 17 -- compiler/NubLang/TypeChecking/Node/Node.cs | 3 - .../TypeChecking/Node/StatementNode.cs | 27 --- .../TypeChecking/{Node => }/NubType.cs | 2 +- compiler/NubLang/TypeChecking/TypeChecker.cs | 3 +- 18 files changed, 223 insertions(+), 214 deletions(-) create mode 100644 compiler/NubLang/Parsing/Syntax.cs delete mode 100644 compiler/NubLang/Parsing/Syntax/DefinitionSyntax.cs delete mode 100644 compiler/NubLang/Parsing/Syntax/ExpressionSyntax.cs delete mode 100644 compiler/NubLang/Parsing/Syntax/StatementSyntax.cs delete mode 100644 compiler/NubLang/Parsing/Syntax/SyntaxNode.cs delete mode 100644 compiler/NubLang/Parsing/Syntax/TypeSyntax.cs rename compiler/NubLang/TypeChecking/{Node/ExpressionNode.cs => Node.cs} (62%) delete mode 100644 compiler/NubLang/TypeChecking/Node/DefinitionNode.cs delete mode 100644 compiler/NubLang/TypeChecking/Node/Node.cs delete mode 100644 compiler/NubLang/TypeChecking/Node/StatementNode.cs rename compiler/NubLang/TypeChecking/{Node => }/NubType.cs (99%) diff --git a/compiler/NubLang.CLI/Program.cs b/compiler/NubLang.CLI/Program.cs index c013115..90e13c1 100644 --- a/compiler/NubLang.CLI/Program.cs +++ b/compiler/NubLang.CLI/Program.cs @@ -4,10 +4,8 @@ using NubLang.Diagnostics; using NubLang.Generation.QBE; using NubLang.Modules; using NubLang.Parsing; -using NubLang.Parsing.Syntax; using NubLang.Tokenization; using NubLang.TypeChecking; -using NubLang.TypeChecking.Node; var sw = Stopwatch.StartNew(); diff --git a/compiler/NubLang/Diagnostics/Diagnostic.cs b/compiler/NubLang/Diagnostics/Diagnostic.cs index 41803b6..def66d4 100644 --- a/compiler/NubLang/Diagnostics/Diagnostic.cs +++ b/compiler/NubLang/Diagnostics/Diagnostic.cs @@ -1,6 +1,6 @@ using System.Text; using NubLang.Code; -using NubLang.Parsing.Syntax; +using NubLang.Parsing; using NubLang.Tokenization; namespace NubLang.Diagnostics; diff --git a/compiler/NubLang/Generation/QBE/QBEGenerator.cs b/compiler/NubLang/Generation/QBE/QBEGenerator.cs index f547e73..736a4ad 100644 --- a/compiler/NubLang/Generation/QBE/QBEGenerator.cs +++ b/compiler/NubLang/Generation/QBE/QBEGenerator.cs @@ -1,6 +1,6 @@ using System.Diagnostics; using System.Text; -using NubLang.TypeChecking.Node; +using NubLang.TypeChecking; namespace NubLang.Generation.QBE; diff --git a/compiler/NubLang/Modules/Module.cs b/compiler/NubLang/Modules/Module.cs index ec20b5b..ceabb47 100644 --- a/compiler/NubLang/Modules/Module.cs +++ b/compiler/NubLang/Modules/Module.cs @@ -1,4 +1,4 @@ -using NubLang.Parsing.Syntax; +using NubLang.Parsing; namespace NubLang.Modules; diff --git a/compiler/NubLang/Modules/ModuleRepository.cs b/compiler/NubLang/Modules/ModuleRepository.cs index 142613a..89bce9a 100644 --- a/compiler/NubLang/Modules/ModuleRepository.cs +++ b/compiler/NubLang/Modules/ModuleRepository.cs @@ -1,4 +1,4 @@ -using NubLang.Parsing.Syntax; +using NubLang.Parsing; namespace NubLang.Modules; diff --git a/compiler/NubLang/Parsing/Parser.cs b/compiler/NubLang/Parsing/Parser.cs index 0c577ce..a2e412c 100644 --- a/compiler/NubLang/Parsing/Parser.cs +++ b/compiler/NubLang/Parsing/Parser.cs @@ -1,6 +1,5 @@ using System.Diagnostics.CodeAnalysis; using NubLang.Diagnostics; -using NubLang.Parsing.Syntax; using NubLang.Tokenization; namespace NubLang.Parsing; @@ -994,6 +993,10 @@ public sealed class Parser } } +public record SyntaxTreeMetadata(string ModuleName, List Imports); + +public record SyntaxTree(List Definitions, SyntaxTreeMetadata Metadata); + public class ParseException : Exception { public Diagnostic Diagnostic { get; } diff --git a/compiler/NubLang/Parsing/Syntax.cs b/compiler/NubLang/Parsing/Syntax.cs new file mode 100644 index 0000000..dd8cb5c --- /dev/null +++ b/compiler/NubLang/Parsing/Syntax.cs @@ -0,0 +1,155 @@ +using NubLang.Tokenization; + +namespace NubLang.Parsing; + +public abstract record SyntaxNode(List Tokens); + +#region Definitions + +public abstract record DefinitionSyntax(List Tokens, string Name, bool Exported) : SyntaxNode(Tokens); + +public record FuncParameterSyntax(List Tokens, string Name, TypeSyntax Type) : SyntaxNode(Tokens); + +public record FuncSignatureSyntax(List Tokens, List Parameters, TypeSyntax ReturnType) : SyntaxNode(Tokens); + +public record FuncSyntax(List Tokens, string Name, bool Exported, string? ExternSymbol, FuncSignatureSyntax Signature, BlockSyntax? Body) : DefinitionSyntax(Tokens, Name, Exported); + +public record StructFieldSyntax(List Tokens, string Name, TypeSyntax Type, ExpressionSyntax? Value) : SyntaxNode(Tokens); + +public record StructFuncSyntax(List Tokens, string Name, string? Hook, FuncSignatureSyntax Signature, BlockSyntax Body) : SyntaxNode(Tokens); + +public record StructSyntax(List Tokens, string Name, bool Exported, List Fields, List Functions) : DefinitionSyntax(Tokens, Name, Exported); + +public record StructTemplateSyntax(List Tokens, List TemplateArguments, string Name, bool Exported, List Fields, List Functions) : DefinitionSyntax(Tokens, Name, Exported); + +public record GlobalVariableSyntax(List Tokens, string Name, bool Exported, TypeSyntax? ExplicitType, ExpressionSyntax Value) : DefinitionSyntax(Tokens, Name, Exported); + +public enum UnaryOperatorSyntax +{ + Negate, + Invert +} + +public enum BinaryOperatorSyntax +{ + Equal, + NotEqual, + GreaterThan, + GreaterThanOrEqual, + LessThan, + LessThanOrEqual, + LogicalAnd, + LogicalOr, + Plus, + Minus, + Multiply, + Divide, + Modulo, + LeftShift, + RightShift, + BitwiseAnd, + BitwiseXor, + BitwiseOr, +} + +#endregion + +#region Statements + +public abstract record StatementSyntax(List Tokens) : SyntaxNode(Tokens); + +public record BlockSyntax(List Tokens, List Statements) : StatementSyntax(Tokens); + +public record StatementExpressionSyntax(List Tokens, ExpressionSyntax Expression) : StatementSyntax(Tokens); + +public record ReturnSyntax(List Tokens, ExpressionSyntax? Value) : StatementSyntax(Tokens); + +public record AssignmentSyntax(List Tokens, ExpressionSyntax Target, ExpressionSyntax Value) : StatementSyntax(Tokens); + +public record IfSyntax(List Tokens, ExpressionSyntax Condition, BlockSyntax Body, Variant? Else) : StatementSyntax(Tokens); + +public record VariableDeclarationSyntax(List Tokens, string Name, TypeSyntax? ExplicitType, ExpressionSyntax? Assignment) : StatementSyntax(Tokens); + +public record ContinueSyntax(List Tokens) : StatementSyntax(Tokens); + +public record BreakSyntax(List Tokens) : StatementSyntax(Tokens); + +public record DeferSyntax(List Tokens, StatementSyntax Statement) : StatementSyntax(Tokens); + +public record WhileSyntax(List Tokens, ExpressionSyntax Condition, BlockSyntax Body) : StatementSyntax(Tokens); + +#endregion + +#region Expressions + +public abstract record ExpressionSyntax(List Tokens) : SyntaxNode(Tokens); + +public record BinaryExpressionSyntax(List Tokens, ExpressionSyntax Left, BinaryOperatorSyntax Operator, ExpressionSyntax Right) : ExpressionSyntax(Tokens); + +public record UnaryExpressionSyntax(List Tokens, UnaryOperatorSyntax Operator, ExpressionSyntax Operand) : ExpressionSyntax(Tokens); + +public record FuncCallSyntax(List Tokens, ExpressionSyntax Expression, List Parameters) : ExpressionSyntax(Tokens); + +public record MemberFuncCallSyntax(List Tokens, string Name, ExpressionSyntax Target, List Parameters) : ExpressionSyntax(Tokens); + +public record LocalIdentifierSyntax(List Tokens, string Name) : ExpressionSyntax(Tokens); + +public record ModuleIdentifierSyntax(List Tokens, string Module, string Name) : ExpressionSyntax(Tokens); + +public record ArrayInitializerSyntax(List Tokens, ExpressionSyntax Capacity, TypeSyntax ElementType) : ExpressionSyntax(Tokens); + +public record ArrayIndexAccessSyntax(List Tokens, ExpressionSyntax Target, ExpressionSyntax Index) : ExpressionSyntax(Tokens); + +public record AddressOfSyntax(List Tokens, ExpressionSyntax Target) : ExpressionSyntax(Tokens); + +public record IntLiteralSyntax(List Tokens, string Value, int Base) : ExpressionSyntax(Tokens); + +public record StringLiteralSyntax(List Tokens, string Value) : ExpressionSyntax(Tokens); + +public record BoolLiteralSyntax(List Tokens, bool Value) : ExpressionSyntax(Tokens); + +public record FloatLiteralSyntax(List Tokens, string Value) : ExpressionSyntax(Tokens); + +public record MemberAccessSyntax(List Tokens, ExpressionSyntax Target, string Member) : ExpressionSyntax(Tokens); + +public record StructInitializerSyntax(List Tokens, TypeSyntax? StructType, Dictionary Initializers) : ExpressionSyntax(Tokens); + +public record DereferenceSyntax(List Tokens, ExpressionSyntax Target) : ExpressionSyntax(Tokens); + +public record SizeBuiltinSyntax(List Tokens, TypeSyntax Type) : ExpressionSyntax(Tokens); + +public record InterpretBuiltinSyntax(List Tokens, TypeSyntax Type, ExpressionSyntax Target) : ExpressionSyntax(Tokens); + +public record FloatToIntBuiltinSyntax(List Tokens, TypeSyntax Type, ExpressionSyntax Value) : ExpressionSyntax(Tokens); + +#endregion + +#region Types + +public abstract record TypeSyntax(List Tokens) : SyntaxNode(Tokens); + +public record FuncTypeSyntax(List Tokens, List Parameters, TypeSyntax ReturnType) : TypeSyntax(Tokens); + +public record PointerTypeSyntax(List Tokens, TypeSyntax BaseType) : TypeSyntax(Tokens); + +public record VoidTypeSyntax(List Tokens) : TypeSyntax(Tokens); + +public record IntTypeSyntax(List Tokens, bool Signed, int Width) : TypeSyntax(Tokens); + +public record FloatTypeSyntax(List Tokens, int Width) : TypeSyntax(Tokens); + +public record BoolTypeSyntax(List Tokens) : TypeSyntax(Tokens); + +public record StringTypeSyntax(List Tokens) : TypeSyntax(Tokens); + +public record CStringTypeSyntax(List Tokens) : TypeSyntax(Tokens); + +public record ArrayTypeSyntax(List Tokens, TypeSyntax BaseType) : TypeSyntax(Tokens); + +public record CustomTypeSyntax(List Tokens, string Module, string Name) : TypeSyntax(Tokens); + +public record StructTemplateTypeSyntax(List Tokens, List TemplateParameters, string Module, string Name) : TypeSyntax(Tokens); + +public record SubstitutionTypeSyntax(List Tokens, string Name) : TypeSyntax(Tokens); + +#endregion \ No newline at end of file diff --git a/compiler/NubLang/Parsing/Syntax/DefinitionSyntax.cs b/compiler/NubLang/Parsing/Syntax/DefinitionSyntax.cs deleted file mode 100644 index ca90906..0000000 --- a/compiler/NubLang/Parsing/Syntax/DefinitionSyntax.cs +++ /dev/null @@ -1,21 +0,0 @@ -using NubLang.Tokenization; - -namespace NubLang.Parsing.Syntax; - -public abstract record DefinitionSyntax(List Tokens, string Name, bool Exported) : SyntaxNode(Tokens); - -public record FuncParameterSyntax(List Tokens, string Name, TypeSyntax Type) : SyntaxNode(Tokens); - -public record FuncSignatureSyntax(List Tokens, List Parameters, TypeSyntax ReturnType) : SyntaxNode(Tokens); - -public record FuncSyntax(List Tokens, string Name, bool Exported, string? ExternSymbol, FuncSignatureSyntax Signature, BlockSyntax? Body) : DefinitionSyntax(Tokens, Name, Exported); - -public record StructFieldSyntax(List Tokens, string Name, TypeSyntax Type, ExpressionSyntax? Value) : SyntaxNode(Tokens); - -public record StructFuncSyntax(List Tokens, string Name, string? Hook, FuncSignatureSyntax Signature, BlockSyntax Body) : SyntaxNode(Tokens); - -public record StructSyntax(List Tokens, string Name, bool Exported, List Fields, List Functions) : DefinitionSyntax(Tokens, Name, Exported); - -public record StructTemplateSyntax(List Tokens, List TemplateArguments, string Name, bool Exported, List Fields, List Functions) : DefinitionSyntax(Tokens, Name, Exported); - -public record GlobalVariableSyntax(List Tokens, string Name, bool Exported, TypeSyntax? ExplicitType, ExpressionSyntax Value) : 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 deleted file mode 100644 index 3d5bbfe..0000000 --- a/compiler/NubLang/Parsing/Syntax/ExpressionSyntax.cs +++ /dev/null @@ -1,71 +0,0 @@ -using NubLang.Tokenization; - -namespace NubLang.Parsing.Syntax; - -public enum UnaryOperatorSyntax -{ - Negate, - Invert -} - -public enum BinaryOperatorSyntax -{ - Equal, - NotEqual, - GreaterThan, - GreaterThanOrEqual, - LessThan, - LessThanOrEqual, - LogicalAnd, - LogicalOr, - Plus, - Minus, - Multiply, - Divide, - Modulo, - LeftShift, - RightShift, - BitwiseAnd, - BitwiseXor, - BitwiseOr, -} - -public abstract record ExpressionSyntax(List Tokens) : SyntaxNode(Tokens); - -public record BinaryExpressionSyntax(List Tokens, ExpressionSyntax Left, BinaryOperatorSyntax Operator, ExpressionSyntax Right) : ExpressionSyntax(Tokens); - -public record UnaryExpressionSyntax(List Tokens, UnaryOperatorSyntax Operator, ExpressionSyntax Operand) : ExpressionSyntax(Tokens); - -public record FuncCallSyntax(List Tokens, ExpressionSyntax Expression, List Parameters) : ExpressionSyntax(Tokens); - -public record MemberFuncCallSyntax(List Tokens, string Name, ExpressionSyntax Target, List Parameters) : ExpressionSyntax(Tokens); - -public record LocalIdentifierSyntax(List Tokens, string Name) : ExpressionSyntax(Tokens); - -public record ModuleIdentifierSyntax(List Tokens, string Module, string Name) : ExpressionSyntax(Tokens); - -public record ArrayInitializerSyntax(List Tokens, ExpressionSyntax Capacity, TypeSyntax ElementType) : ExpressionSyntax(Tokens); - -public record ArrayIndexAccessSyntax(List Tokens, ExpressionSyntax Target, ExpressionSyntax Index) : ExpressionSyntax(Tokens); - -public record AddressOfSyntax(List Tokens, ExpressionSyntax Target) : ExpressionSyntax(Tokens); - -public record IntLiteralSyntax(List Tokens, string Value, int Base) : ExpressionSyntax(Tokens); - -public record StringLiteralSyntax(List Tokens, string Value) : ExpressionSyntax(Tokens); - -public record BoolLiteralSyntax(List Tokens, bool Value) : ExpressionSyntax(Tokens); - -public record FloatLiteralSyntax(List Tokens, string Value) : ExpressionSyntax(Tokens); - -public record MemberAccessSyntax(List Tokens, ExpressionSyntax Target, string Member) : ExpressionSyntax(Tokens); - -public record StructInitializerSyntax(List Tokens, TypeSyntax? StructType, Dictionary Initializers) : ExpressionSyntax(Tokens); - -public record DereferenceSyntax(List Tokens, ExpressionSyntax Target) : ExpressionSyntax(Tokens); - -public record SizeBuiltinSyntax(List Tokens, TypeSyntax Type) : ExpressionSyntax(Tokens); - -public record InterpretBuiltinSyntax(List Tokens, TypeSyntax Type, ExpressionSyntax Target) : ExpressionSyntax(Tokens); - -public record FloatToIntBuiltinSyntax(List Tokens, TypeSyntax Type, ExpressionSyntax Value) : ExpressionSyntax(Tokens); \ No newline at end of file diff --git a/compiler/NubLang/Parsing/Syntax/StatementSyntax.cs b/compiler/NubLang/Parsing/Syntax/StatementSyntax.cs deleted file mode 100644 index 71aaca3..0000000 --- a/compiler/NubLang/Parsing/Syntax/StatementSyntax.cs +++ /dev/null @@ -1,25 +0,0 @@ -using NubLang.Tokenization; - -namespace NubLang.Parsing.Syntax; - -public abstract record StatementSyntax(List Tokens) : SyntaxNode(Tokens); - -public record BlockSyntax(List Tokens, List Statements) : StatementSyntax(Tokens); - -public record StatementExpressionSyntax(List Tokens, ExpressionSyntax Expression) : StatementSyntax(Tokens); - -public record ReturnSyntax(List Tokens, ExpressionSyntax? Value) : StatementSyntax(Tokens); - -public record AssignmentSyntax(List Tokens, ExpressionSyntax Target, ExpressionSyntax Value) : StatementSyntax(Tokens); - -public record IfSyntax(List Tokens, ExpressionSyntax Condition, BlockSyntax Body, Variant? Else) : StatementSyntax(Tokens); - -public record VariableDeclarationSyntax(List Tokens, string Name, TypeSyntax? ExplicitType, ExpressionSyntax? Assignment) : StatementSyntax(Tokens); - -public record ContinueSyntax(List Tokens) : StatementSyntax(Tokens); - -public record BreakSyntax(List Tokens) : StatementSyntax(Tokens); - -public record DeferSyntax(List Tokens, StatementSyntax Statement) : StatementSyntax(Tokens); - -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 deleted file mode 100644 index 3ea9790..0000000 --- a/compiler/NubLang/Parsing/Syntax/SyntaxNode.cs +++ /dev/null @@ -1,9 +0,0 @@ -using NubLang.Tokenization; - -namespace NubLang.Parsing.Syntax; - -public abstract record SyntaxNode(List Tokens); - -public record SyntaxTreeMetadata(string ModuleName, List Imports); - -public record SyntaxTree(List Definitions, SyntaxTreeMetadata Metadata); \ No newline at end of file diff --git a/compiler/NubLang/Parsing/Syntax/TypeSyntax.cs b/compiler/NubLang/Parsing/Syntax/TypeSyntax.cs deleted file mode 100644 index 9eb0afe..0000000 --- a/compiler/NubLang/Parsing/Syntax/TypeSyntax.cs +++ /dev/null @@ -1,29 +0,0 @@ -using NubLang.Tokenization; - -namespace NubLang.Parsing.Syntax; - -public abstract record TypeSyntax(List Tokens) : SyntaxNode(Tokens); - -public record FuncTypeSyntax(List Tokens, List Parameters, TypeSyntax ReturnType) : TypeSyntax(Tokens); - -public record PointerTypeSyntax(List Tokens, TypeSyntax BaseType) : TypeSyntax(Tokens); - -public record VoidTypeSyntax(List Tokens) : TypeSyntax(Tokens); - -public record IntTypeSyntax(List Tokens, bool Signed, int Width) : TypeSyntax(Tokens); - -public record FloatTypeSyntax(List Tokens, int Width) : TypeSyntax(Tokens); - -public record BoolTypeSyntax(List Tokens) : TypeSyntax(Tokens); - -public record StringTypeSyntax(List Tokens) : TypeSyntax(Tokens); - -public record CStringTypeSyntax(List Tokens) : TypeSyntax(Tokens); - -public record ArrayTypeSyntax(List Tokens, TypeSyntax BaseType) : TypeSyntax(Tokens); - -public record CustomTypeSyntax(List Tokens, string Module, string Name) : TypeSyntax(Tokens); - -public record StructTemplateTypeSyntax(List Tokens, List TemplateParameters, string Module, string Name) : TypeSyntax(Tokens); - -public record SubstitutionTypeSyntax(List Tokens, string Name) : TypeSyntax(Tokens); \ No newline at end of file diff --git a/compiler/NubLang/TypeChecking/Node/ExpressionNode.cs b/compiler/NubLang/TypeChecking/Node.cs similarity index 62% rename from compiler/NubLang/TypeChecking/Node/ExpressionNode.cs rename to compiler/NubLang/TypeChecking/Node.cs index dc4b1f7..77800f7 100644 --- a/compiler/NubLang/TypeChecking/Node/ExpressionNode.cs +++ b/compiler/NubLang/TypeChecking/Node.cs @@ -1,4 +1,58 @@ -namespace NubLang.TypeChecking.Node; +namespace NubLang.TypeChecking; + +public abstract record Node; + +#region Definitions + +public abstract record DefinitionNode(string Module, string Name) : Node; + +public record FuncParameterNode(string Name, NubType Type) : Node; + +public record FuncSignatureNode(List Parameters, NubType ReturnType) : Node; + +public record FuncNode(string Module, string Name, string? ExternSymbol, FuncSignatureNode Signature, BlockNode? Body) : DefinitionNode(Module, Name); + +public record StructFieldNode(string Name, NubType Type, ExpressionNode? Value) : Node; + +public record StructFuncNode(string Name, string? Hook, FuncSignatureNode Signature, BlockNode Body) : Node; + +public record StructNode(string Module, string Name, List Fields, List Functions) : DefinitionNode(Module, Name); + +public record GlobalVariableNode(string Module, string Name, ExpressionNode Value) : DefinitionNode(Module, Name); + +#endregion + +#region Statements + +public abstract record StatementNode : Node; + +public abstract record TerminalStatementNode : StatementNode; + +public record BlockNode(List Statements) : StatementNode; + +public record StatementFuncCallNode(FuncCallNode FuncCall) : StatementNode; + +public record StatementStructFuncCallNode(StructFuncCallNode StructFuncCall) : StatementNode; + +public record ReturnNode(ExpressionNode? Value) : TerminalStatementNode; + +public record AssignmentNode(LValueExpressionNode Target, ExpressionNode Value) : StatementNode; + +public record IfNode(ExpressionNode Condition, BlockNode Body, Variant? Else) : StatementNode; + +public record VariableDeclarationNode(string Name, ExpressionNode? Assignment, NubType Type) : StatementNode; + +public record ContinueNode : TerminalStatementNode; + +public record BreakNode : TerminalStatementNode; + +public record WhileNode(ExpressionNode Condition, BlockNode Body) : StatementNode; + +public record DeferNode(StatementNode Statement) : StatementNode; + +#endregion + +#region Expressions public enum UnaryOperator { @@ -80,4 +134,6 @@ public record ConvertFloatNode(NubType Type, ExpressionNode Value, NubFloatType public record SizeBuiltinNode(NubType Type, NubType TargetType) : RValueExpressionNode(Type); -public record FloatToIntBuiltinNode(NubType Type, ExpressionNode Value, NubFloatType ValueType, NubIntType TargetType) : RValueExpressionNode(Type); \ No newline at end of file +public record FloatToIntBuiltinNode(NubType Type, ExpressionNode Value, NubFloatType ValueType, NubIntType TargetType) : RValueExpressionNode(Type); + +#endregion \ No newline at end of file diff --git a/compiler/NubLang/TypeChecking/Node/DefinitionNode.cs b/compiler/NubLang/TypeChecking/Node/DefinitionNode.cs deleted file mode 100644 index ae83b00..0000000 --- a/compiler/NubLang/TypeChecking/Node/DefinitionNode.cs +++ /dev/null @@ -1,17 +0,0 @@ -namespace NubLang.TypeChecking.Node; - -public abstract record DefinitionNode(string Module, string Name) : Node; - -public record FuncParameterNode(string Name, NubType Type) : Node; - -public record FuncSignatureNode(List Parameters, NubType ReturnType) : Node; - -public record FuncNode(string Module, string Name, string? ExternSymbol, FuncSignatureNode Signature, BlockNode? Body) : DefinitionNode(Module, Name); - -public record StructFieldNode(string Name, NubType Type, ExpressionNode? Value) : Node; - -public record StructFuncNode(string Name, string? Hook, FuncSignatureNode Signature, BlockNode Body) : Node; - -public record StructNode(string Module, string Name, List Fields, List Functions) : DefinitionNode(Module, Name); - -public record GlobalVariableNode(string Module, string Name, ExpressionNode Value) : DefinitionNode(Module, Name); \ No newline at end of file diff --git a/compiler/NubLang/TypeChecking/Node/Node.cs b/compiler/NubLang/TypeChecking/Node/Node.cs deleted file mode 100644 index d64afd5..0000000 --- a/compiler/NubLang/TypeChecking/Node/Node.cs +++ /dev/null @@ -1,3 +0,0 @@ -namespace NubLang.TypeChecking.Node; - -public abstract record Node; \ No newline at end of file diff --git a/compiler/NubLang/TypeChecking/Node/StatementNode.cs b/compiler/NubLang/TypeChecking/Node/StatementNode.cs deleted file mode 100644 index 4989a6f..0000000 --- a/compiler/NubLang/TypeChecking/Node/StatementNode.cs +++ /dev/null @@ -1,27 +0,0 @@ -namespace NubLang.TypeChecking.Node; - -public abstract record StatementNode : Node; - -public abstract record TerminalStatementNode : StatementNode; - -public record BlockNode(List Statements) : StatementNode; - -public record StatementFuncCallNode(FuncCallNode FuncCall) : StatementNode; - -public record StatementStructFuncCallNode(StructFuncCallNode StructFuncCall) : StatementNode; - -public record ReturnNode(ExpressionNode? Value) : TerminalStatementNode; - -public record AssignmentNode(LValueExpressionNode Target, ExpressionNode Value) : StatementNode; - -public record IfNode(ExpressionNode Condition, BlockNode Body, Variant? Else) : StatementNode; - -public record VariableDeclarationNode(string Name, ExpressionNode? Assignment, NubType Type) : StatementNode; - -public record ContinueNode : TerminalStatementNode; - -public record BreakNode : TerminalStatementNode; - -public record WhileNode(ExpressionNode Condition, BlockNode Body) : StatementNode; - -public record DeferNode(StatementNode Statement) : StatementNode; \ No newline at end of file diff --git a/compiler/NubLang/TypeChecking/Node/NubType.cs b/compiler/NubLang/TypeChecking/NubType.cs similarity index 99% rename from compiler/NubLang/TypeChecking/Node/NubType.cs rename to compiler/NubLang/TypeChecking/NubType.cs index 3a2753d..4afd1e8 100644 --- a/compiler/NubLang/TypeChecking/Node/NubType.cs +++ b/compiler/NubLang/TypeChecking/NubType.cs @@ -1,7 +1,7 @@ using System.Security.Cryptography; using System.Text; -namespace NubLang.TypeChecking.Node; +namespace NubLang.TypeChecking; public abstract class NubType : IEquatable { diff --git a/compiler/NubLang/TypeChecking/TypeChecker.cs b/compiler/NubLang/TypeChecking/TypeChecker.cs index bb760f4..67d805d 100644 --- a/compiler/NubLang/TypeChecking/TypeChecker.cs +++ b/compiler/NubLang/TypeChecking/TypeChecker.cs @@ -1,8 +1,7 @@ using System.Diagnostics; using NubLang.Diagnostics; using NubLang.Modules; -using NubLang.Parsing.Syntax; -using NubLang.TypeChecking.Node; +using NubLang.Parsing; namespace NubLang.TypeChecking;