This commit is contained in:
nub31
2025-09-29 18:57:49 +02:00
parent 745b3234d9
commit ecdfd8262d
18 changed files with 223 additions and 214 deletions

View File

@@ -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<FuncParameterNode> 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<StructFieldNode> Fields, List<StructFuncNode> 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<StatementNode> 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<IfNode, BlockNode>? 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);
public record FloatToIntBuiltinNode(NubType Type, ExpressionNode Value, NubFloatType ValueType, NubIntType TargetType) : RValueExpressionNode(Type);
#endregion

View File

@@ -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<FuncParameterNode> 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<StructFieldNode> Fields, List<StructFuncNode> Functions) : DefinitionNode(Module, Name);
public record GlobalVariableNode(string Module, string Name, ExpressionNode Value) : DefinitionNode(Module, Name);

View File

@@ -1,3 +0,0 @@
namespace NubLang.TypeChecking.Node;
public abstract record Node;

View File

@@ -1,27 +0,0 @@
namespace NubLang.TypeChecking.Node;
public abstract record StatementNode : Node;
public abstract record TerminalStatementNode : StatementNode;
public record BlockNode(List<StatementNode> 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<IfNode, BlockNode>? 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;

View File

@@ -1,7 +1,7 @@
using System.Security.Cryptography;
using System.Text;
namespace NubLang.TypeChecking.Node;
namespace NubLang.TypeChecking;
public abstract class NubType : IEquatable<NubType>
{

View File

@@ -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;