Clean
This commit is contained in:
@@ -4,10 +4,8 @@ using NubLang.Diagnostics;
|
|||||||
using NubLang.Generation.QBE;
|
using NubLang.Generation.QBE;
|
||||||
using NubLang.Modules;
|
using NubLang.Modules;
|
||||||
using NubLang.Parsing;
|
using NubLang.Parsing;
|
||||||
using NubLang.Parsing.Syntax;
|
|
||||||
using NubLang.Tokenization;
|
using NubLang.Tokenization;
|
||||||
using NubLang.TypeChecking;
|
using NubLang.TypeChecking;
|
||||||
using NubLang.TypeChecking.Node;
|
|
||||||
|
|
||||||
var sw = Stopwatch.StartNew();
|
var sw = Stopwatch.StartNew();
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using NubLang.Code;
|
using NubLang.Code;
|
||||||
using NubLang.Parsing.Syntax;
|
using NubLang.Parsing;
|
||||||
using NubLang.Tokenization;
|
using NubLang.Tokenization;
|
||||||
|
|
||||||
namespace NubLang.Diagnostics;
|
namespace NubLang.Diagnostics;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using NubLang.TypeChecking.Node;
|
using NubLang.TypeChecking;
|
||||||
|
|
||||||
namespace NubLang.Generation.QBE;
|
namespace NubLang.Generation.QBE;
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using NubLang.Parsing.Syntax;
|
using NubLang.Parsing;
|
||||||
|
|
||||||
namespace NubLang.Modules;
|
namespace NubLang.Modules;
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using NubLang.Parsing.Syntax;
|
using NubLang.Parsing;
|
||||||
|
|
||||||
namespace NubLang.Modules;
|
namespace NubLang.Modules;
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
using System.Diagnostics.CodeAnalysis;
|
using System.Diagnostics.CodeAnalysis;
|
||||||
using NubLang.Diagnostics;
|
using NubLang.Diagnostics;
|
||||||
using NubLang.Parsing.Syntax;
|
|
||||||
using NubLang.Tokenization;
|
using NubLang.Tokenization;
|
||||||
|
|
||||||
namespace NubLang.Parsing;
|
namespace NubLang.Parsing;
|
||||||
@@ -994,6 +993,10 @@ public sealed class Parser
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public record SyntaxTreeMetadata(string ModuleName, List<string> Imports);
|
||||||
|
|
||||||
|
public record SyntaxTree(List<DefinitionSyntax> Definitions, SyntaxTreeMetadata Metadata);
|
||||||
|
|
||||||
public class ParseException : Exception
|
public class ParseException : Exception
|
||||||
{
|
{
|
||||||
public Diagnostic Diagnostic { get; }
|
public Diagnostic Diagnostic { get; }
|
||||||
|
|||||||
155
compiler/NubLang/Parsing/Syntax.cs
Normal file
155
compiler/NubLang/Parsing/Syntax.cs
Normal file
@@ -0,0 +1,155 @@
|
|||||||
|
using NubLang.Tokenization;
|
||||||
|
|
||||||
|
namespace NubLang.Parsing;
|
||||||
|
|
||||||
|
public abstract record SyntaxNode(List<Token> Tokens);
|
||||||
|
|
||||||
|
#region Definitions
|
||||||
|
|
||||||
|
public abstract record DefinitionSyntax(List<Token> Tokens, string Name, bool Exported) : SyntaxNode(Tokens);
|
||||||
|
|
||||||
|
public record FuncParameterSyntax(List<Token> Tokens, string Name, TypeSyntax Type) : SyntaxNode(Tokens);
|
||||||
|
|
||||||
|
public record FuncSignatureSyntax(List<Token> Tokens, List<FuncParameterSyntax> Parameters, TypeSyntax ReturnType) : SyntaxNode(Tokens);
|
||||||
|
|
||||||
|
public record FuncSyntax(List<Token> Tokens, string Name, bool Exported, string? ExternSymbol, FuncSignatureSyntax Signature, BlockSyntax? Body) : DefinitionSyntax(Tokens, Name, Exported);
|
||||||
|
|
||||||
|
public record StructFieldSyntax(List<Token> Tokens, string Name, TypeSyntax Type, ExpressionSyntax? Value) : SyntaxNode(Tokens);
|
||||||
|
|
||||||
|
public record StructFuncSyntax(List<Token> Tokens, string Name, string? Hook, FuncSignatureSyntax Signature, BlockSyntax Body) : SyntaxNode(Tokens);
|
||||||
|
|
||||||
|
public record StructSyntax(List<Token> Tokens, string Name, bool Exported, List<StructFieldSyntax> Fields, List<StructFuncSyntax> Functions) : DefinitionSyntax(Tokens, Name, Exported);
|
||||||
|
|
||||||
|
public record StructTemplateSyntax(List<Token> Tokens, List<string> TemplateArguments, string Name, bool Exported, List<StructFieldSyntax> Fields, List<StructFuncSyntax> Functions) : DefinitionSyntax(Tokens, Name, Exported);
|
||||||
|
|
||||||
|
public record GlobalVariableSyntax(List<Token> 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<Token> Tokens) : SyntaxNode(Tokens);
|
||||||
|
|
||||||
|
public record BlockSyntax(List<Token> Tokens, List<StatementSyntax> Statements) : StatementSyntax(Tokens);
|
||||||
|
|
||||||
|
public record StatementExpressionSyntax(List<Token> Tokens, ExpressionSyntax Expression) : StatementSyntax(Tokens);
|
||||||
|
|
||||||
|
public record ReturnSyntax(List<Token> Tokens, ExpressionSyntax? Value) : StatementSyntax(Tokens);
|
||||||
|
|
||||||
|
public record AssignmentSyntax(List<Token> Tokens, ExpressionSyntax Target, ExpressionSyntax Value) : StatementSyntax(Tokens);
|
||||||
|
|
||||||
|
public record IfSyntax(List<Token> Tokens, ExpressionSyntax Condition, BlockSyntax Body, Variant<IfSyntax, BlockSyntax>? Else) : StatementSyntax(Tokens);
|
||||||
|
|
||||||
|
public record VariableDeclarationSyntax(List<Token> Tokens, string Name, TypeSyntax? ExplicitType, ExpressionSyntax? Assignment) : StatementSyntax(Tokens);
|
||||||
|
|
||||||
|
public record ContinueSyntax(List<Token> Tokens) : StatementSyntax(Tokens);
|
||||||
|
|
||||||
|
public record BreakSyntax(List<Token> Tokens) : StatementSyntax(Tokens);
|
||||||
|
|
||||||
|
public record DeferSyntax(List<Token> Tokens, StatementSyntax Statement) : StatementSyntax(Tokens);
|
||||||
|
|
||||||
|
public record WhileSyntax(List<Token> Tokens, ExpressionSyntax Condition, BlockSyntax Body) : StatementSyntax(Tokens);
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Expressions
|
||||||
|
|
||||||
|
public abstract record ExpressionSyntax(List<Token> Tokens) : SyntaxNode(Tokens);
|
||||||
|
|
||||||
|
public record BinaryExpressionSyntax(List<Token> Tokens, ExpressionSyntax Left, BinaryOperatorSyntax Operator, ExpressionSyntax Right) : ExpressionSyntax(Tokens);
|
||||||
|
|
||||||
|
public record UnaryExpressionSyntax(List<Token> Tokens, UnaryOperatorSyntax Operator, ExpressionSyntax Operand) : ExpressionSyntax(Tokens);
|
||||||
|
|
||||||
|
public record FuncCallSyntax(List<Token> Tokens, ExpressionSyntax Expression, List<ExpressionSyntax> Parameters) : ExpressionSyntax(Tokens);
|
||||||
|
|
||||||
|
public record MemberFuncCallSyntax(List<Token> Tokens, string Name, ExpressionSyntax Target, List<ExpressionSyntax> Parameters) : ExpressionSyntax(Tokens);
|
||||||
|
|
||||||
|
public record LocalIdentifierSyntax(List<Token> Tokens, string Name) : ExpressionSyntax(Tokens);
|
||||||
|
|
||||||
|
public record ModuleIdentifierSyntax(List<Token> Tokens, string Module, string Name) : ExpressionSyntax(Tokens);
|
||||||
|
|
||||||
|
public record ArrayInitializerSyntax(List<Token> Tokens, ExpressionSyntax Capacity, TypeSyntax ElementType) : ExpressionSyntax(Tokens);
|
||||||
|
|
||||||
|
public record ArrayIndexAccessSyntax(List<Token> Tokens, ExpressionSyntax Target, ExpressionSyntax Index) : ExpressionSyntax(Tokens);
|
||||||
|
|
||||||
|
public record AddressOfSyntax(List<Token> Tokens, ExpressionSyntax Target) : ExpressionSyntax(Tokens);
|
||||||
|
|
||||||
|
public record IntLiteralSyntax(List<Token> Tokens, string Value, int Base) : ExpressionSyntax(Tokens);
|
||||||
|
|
||||||
|
public record StringLiteralSyntax(List<Token> Tokens, string Value) : ExpressionSyntax(Tokens);
|
||||||
|
|
||||||
|
public record BoolLiteralSyntax(List<Token> Tokens, bool Value) : ExpressionSyntax(Tokens);
|
||||||
|
|
||||||
|
public record FloatLiteralSyntax(List<Token> Tokens, string Value) : ExpressionSyntax(Tokens);
|
||||||
|
|
||||||
|
public record MemberAccessSyntax(List<Token> Tokens, ExpressionSyntax Target, string Member) : ExpressionSyntax(Tokens);
|
||||||
|
|
||||||
|
public record StructInitializerSyntax(List<Token> Tokens, TypeSyntax? StructType, Dictionary<string, ExpressionSyntax> Initializers) : ExpressionSyntax(Tokens);
|
||||||
|
|
||||||
|
public record DereferenceSyntax(List<Token> Tokens, ExpressionSyntax Target) : ExpressionSyntax(Tokens);
|
||||||
|
|
||||||
|
public record SizeBuiltinSyntax(List<Token> Tokens, TypeSyntax Type) : ExpressionSyntax(Tokens);
|
||||||
|
|
||||||
|
public record InterpretBuiltinSyntax(List<Token> Tokens, TypeSyntax Type, ExpressionSyntax Target) : ExpressionSyntax(Tokens);
|
||||||
|
|
||||||
|
public record FloatToIntBuiltinSyntax(List<Token> Tokens, TypeSyntax Type, ExpressionSyntax Value) : ExpressionSyntax(Tokens);
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Types
|
||||||
|
|
||||||
|
public abstract record TypeSyntax(List<Token> Tokens) : SyntaxNode(Tokens);
|
||||||
|
|
||||||
|
public record FuncTypeSyntax(List<Token> Tokens, List<TypeSyntax> Parameters, TypeSyntax ReturnType) : TypeSyntax(Tokens);
|
||||||
|
|
||||||
|
public record PointerTypeSyntax(List<Token> Tokens, TypeSyntax BaseType) : TypeSyntax(Tokens);
|
||||||
|
|
||||||
|
public record VoidTypeSyntax(List<Token> Tokens) : TypeSyntax(Tokens);
|
||||||
|
|
||||||
|
public record IntTypeSyntax(List<Token> Tokens, bool Signed, int Width) : TypeSyntax(Tokens);
|
||||||
|
|
||||||
|
public record FloatTypeSyntax(List<Token> Tokens, int Width) : TypeSyntax(Tokens);
|
||||||
|
|
||||||
|
public record BoolTypeSyntax(List<Token> Tokens) : TypeSyntax(Tokens);
|
||||||
|
|
||||||
|
public record StringTypeSyntax(List<Token> Tokens) : TypeSyntax(Tokens);
|
||||||
|
|
||||||
|
public record CStringTypeSyntax(List<Token> Tokens) : TypeSyntax(Tokens);
|
||||||
|
|
||||||
|
public record ArrayTypeSyntax(List<Token> Tokens, TypeSyntax BaseType) : TypeSyntax(Tokens);
|
||||||
|
|
||||||
|
public record CustomTypeSyntax(List<Token> Tokens, string Module, string Name) : TypeSyntax(Tokens);
|
||||||
|
|
||||||
|
public record StructTemplateTypeSyntax(List<Token> Tokens, List<TypeSyntax> TemplateParameters, string Module, string Name) : TypeSyntax(Tokens);
|
||||||
|
|
||||||
|
public record SubstitutionTypeSyntax(List<Token> Tokens, string Name) : TypeSyntax(Tokens);
|
||||||
|
|
||||||
|
#endregion
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
using NubLang.Tokenization;
|
|
||||||
|
|
||||||
namespace NubLang.Parsing.Syntax;
|
|
||||||
|
|
||||||
public abstract record DefinitionSyntax(List<Token> Tokens, string Name, bool Exported) : SyntaxNode(Tokens);
|
|
||||||
|
|
||||||
public record FuncParameterSyntax(List<Token> Tokens, string Name, TypeSyntax Type) : SyntaxNode(Tokens);
|
|
||||||
|
|
||||||
public record FuncSignatureSyntax(List<Token> Tokens, List<FuncParameterSyntax> Parameters, TypeSyntax ReturnType) : SyntaxNode(Tokens);
|
|
||||||
|
|
||||||
public record FuncSyntax(List<Token> Tokens, string Name, bool Exported, string? ExternSymbol, FuncSignatureSyntax Signature, BlockSyntax? Body) : DefinitionSyntax(Tokens, Name, Exported);
|
|
||||||
|
|
||||||
public record StructFieldSyntax(List<Token> Tokens, string Name, TypeSyntax Type, ExpressionSyntax? Value) : SyntaxNode(Tokens);
|
|
||||||
|
|
||||||
public record StructFuncSyntax(List<Token> Tokens, string Name, string? Hook, FuncSignatureSyntax Signature, BlockSyntax Body) : SyntaxNode(Tokens);
|
|
||||||
|
|
||||||
public record StructSyntax(List<Token> Tokens, string Name, bool Exported, List<StructFieldSyntax> Fields, List<StructFuncSyntax> Functions) : DefinitionSyntax(Tokens, Name, Exported);
|
|
||||||
|
|
||||||
public record StructTemplateSyntax(List<Token> Tokens, List<string> TemplateArguments, string Name, bool Exported, List<StructFieldSyntax> Fields, List<StructFuncSyntax> Functions) : DefinitionSyntax(Tokens, Name, Exported);
|
|
||||||
|
|
||||||
public record GlobalVariableSyntax(List<Token> Tokens, string Name, bool Exported, TypeSyntax? ExplicitType, ExpressionSyntax Value) : DefinitionSyntax(Tokens, Name, Exported);
|
|
||||||
@@ -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<Token> Tokens) : SyntaxNode(Tokens);
|
|
||||||
|
|
||||||
public record BinaryExpressionSyntax(List<Token> Tokens, ExpressionSyntax Left, BinaryOperatorSyntax Operator, ExpressionSyntax Right) : ExpressionSyntax(Tokens);
|
|
||||||
|
|
||||||
public record UnaryExpressionSyntax(List<Token> Tokens, UnaryOperatorSyntax Operator, ExpressionSyntax Operand) : ExpressionSyntax(Tokens);
|
|
||||||
|
|
||||||
public record FuncCallSyntax(List<Token> Tokens, ExpressionSyntax Expression, List<ExpressionSyntax> Parameters) : ExpressionSyntax(Tokens);
|
|
||||||
|
|
||||||
public record MemberFuncCallSyntax(List<Token> Tokens, string Name, ExpressionSyntax Target, List<ExpressionSyntax> Parameters) : ExpressionSyntax(Tokens);
|
|
||||||
|
|
||||||
public record LocalIdentifierSyntax(List<Token> Tokens, string Name) : ExpressionSyntax(Tokens);
|
|
||||||
|
|
||||||
public record ModuleIdentifierSyntax(List<Token> Tokens, string Module, string Name) : ExpressionSyntax(Tokens);
|
|
||||||
|
|
||||||
public record ArrayInitializerSyntax(List<Token> Tokens, ExpressionSyntax Capacity, TypeSyntax ElementType) : ExpressionSyntax(Tokens);
|
|
||||||
|
|
||||||
public record ArrayIndexAccessSyntax(List<Token> Tokens, ExpressionSyntax Target, ExpressionSyntax Index) : ExpressionSyntax(Tokens);
|
|
||||||
|
|
||||||
public record AddressOfSyntax(List<Token> Tokens, ExpressionSyntax Target) : ExpressionSyntax(Tokens);
|
|
||||||
|
|
||||||
public record IntLiteralSyntax(List<Token> Tokens, string Value, int Base) : ExpressionSyntax(Tokens);
|
|
||||||
|
|
||||||
public record StringLiteralSyntax(List<Token> Tokens, string Value) : ExpressionSyntax(Tokens);
|
|
||||||
|
|
||||||
public record BoolLiteralSyntax(List<Token> Tokens, bool Value) : ExpressionSyntax(Tokens);
|
|
||||||
|
|
||||||
public record FloatLiteralSyntax(List<Token> Tokens, string Value) : ExpressionSyntax(Tokens);
|
|
||||||
|
|
||||||
public record MemberAccessSyntax(List<Token> Tokens, ExpressionSyntax Target, string Member) : ExpressionSyntax(Tokens);
|
|
||||||
|
|
||||||
public record StructInitializerSyntax(List<Token> Tokens, TypeSyntax? StructType, Dictionary<string, ExpressionSyntax> Initializers) : ExpressionSyntax(Tokens);
|
|
||||||
|
|
||||||
public record DereferenceSyntax(List<Token> Tokens, ExpressionSyntax Target) : ExpressionSyntax(Tokens);
|
|
||||||
|
|
||||||
public record SizeBuiltinSyntax(List<Token> Tokens, TypeSyntax Type) : ExpressionSyntax(Tokens);
|
|
||||||
|
|
||||||
public record InterpretBuiltinSyntax(List<Token> Tokens, TypeSyntax Type, ExpressionSyntax Target) : ExpressionSyntax(Tokens);
|
|
||||||
|
|
||||||
public record FloatToIntBuiltinSyntax(List<Token> Tokens, TypeSyntax Type, ExpressionSyntax Value) : ExpressionSyntax(Tokens);
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
using NubLang.Tokenization;
|
|
||||||
|
|
||||||
namespace NubLang.Parsing.Syntax;
|
|
||||||
|
|
||||||
public abstract record StatementSyntax(List<Token> Tokens) : SyntaxNode(Tokens);
|
|
||||||
|
|
||||||
public record BlockSyntax(List<Token> Tokens, List<StatementSyntax> Statements) : StatementSyntax(Tokens);
|
|
||||||
|
|
||||||
public record StatementExpressionSyntax(List<Token> Tokens, ExpressionSyntax Expression) : StatementSyntax(Tokens);
|
|
||||||
|
|
||||||
public record ReturnSyntax(List<Token> Tokens, ExpressionSyntax? Value) : StatementSyntax(Tokens);
|
|
||||||
|
|
||||||
public record AssignmentSyntax(List<Token> Tokens, ExpressionSyntax Target, ExpressionSyntax Value) : StatementSyntax(Tokens);
|
|
||||||
|
|
||||||
public record IfSyntax(List<Token> Tokens, ExpressionSyntax Condition, BlockSyntax Body, Variant<IfSyntax, BlockSyntax>? Else) : StatementSyntax(Tokens);
|
|
||||||
|
|
||||||
public record VariableDeclarationSyntax(List<Token> Tokens, string Name, TypeSyntax? ExplicitType, ExpressionSyntax? Assignment) : StatementSyntax(Tokens);
|
|
||||||
|
|
||||||
public record ContinueSyntax(List<Token> Tokens) : StatementSyntax(Tokens);
|
|
||||||
|
|
||||||
public record BreakSyntax(List<Token> Tokens) : StatementSyntax(Tokens);
|
|
||||||
|
|
||||||
public record DeferSyntax(List<Token> Tokens, StatementSyntax Statement) : StatementSyntax(Tokens);
|
|
||||||
|
|
||||||
public record WhileSyntax(List<Token> Tokens, ExpressionSyntax Condition, BlockSyntax Body) : StatementSyntax(Tokens);
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
using NubLang.Tokenization;
|
|
||||||
|
|
||||||
namespace NubLang.Parsing.Syntax;
|
|
||||||
|
|
||||||
public abstract record SyntaxNode(List<Token> Tokens);
|
|
||||||
|
|
||||||
public record SyntaxTreeMetadata(string ModuleName, List<string> Imports);
|
|
||||||
|
|
||||||
public record SyntaxTree(List<DefinitionSyntax> Definitions, SyntaxTreeMetadata Metadata);
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
using NubLang.Tokenization;
|
|
||||||
|
|
||||||
namespace NubLang.Parsing.Syntax;
|
|
||||||
|
|
||||||
public abstract record TypeSyntax(List<Token> Tokens) : SyntaxNode(Tokens);
|
|
||||||
|
|
||||||
public record FuncTypeSyntax(List<Token> Tokens, List<TypeSyntax> Parameters, TypeSyntax ReturnType) : TypeSyntax(Tokens);
|
|
||||||
|
|
||||||
public record PointerTypeSyntax(List<Token> Tokens, TypeSyntax BaseType) : TypeSyntax(Tokens);
|
|
||||||
|
|
||||||
public record VoidTypeSyntax(List<Token> Tokens) : TypeSyntax(Tokens);
|
|
||||||
|
|
||||||
public record IntTypeSyntax(List<Token> Tokens, bool Signed, int Width) : TypeSyntax(Tokens);
|
|
||||||
|
|
||||||
public record FloatTypeSyntax(List<Token> Tokens, int Width) : TypeSyntax(Tokens);
|
|
||||||
|
|
||||||
public record BoolTypeSyntax(List<Token> Tokens) : TypeSyntax(Tokens);
|
|
||||||
|
|
||||||
public record StringTypeSyntax(List<Token> Tokens) : TypeSyntax(Tokens);
|
|
||||||
|
|
||||||
public record CStringTypeSyntax(List<Token> Tokens) : TypeSyntax(Tokens);
|
|
||||||
|
|
||||||
public record ArrayTypeSyntax(List<Token> Tokens, TypeSyntax BaseType) : TypeSyntax(Tokens);
|
|
||||||
|
|
||||||
public record CustomTypeSyntax(List<Token> Tokens, string Module, string Name) : TypeSyntax(Tokens);
|
|
||||||
|
|
||||||
public record StructTemplateTypeSyntax(List<Token> Tokens, List<TypeSyntax> TemplateParameters, string Module, string Name) : TypeSyntax(Tokens);
|
|
||||||
|
|
||||||
public record SubstitutionTypeSyntax(List<Token> Tokens, string Name) : TypeSyntax(Tokens);
|
|
||||||
@@ -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
|
public enum UnaryOperator
|
||||||
{
|
{
|
||||||
@@ -81,3 +135,5 @@ public record ConvertFloatNode(NubType Type, ExpressionNode Value, NubFloatType
|
|||||||
public record SizeBuiltinNode(NubType Type, NubType TargetType) : RValueExpressionNode(Type);
|
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
|
||||||
@@ -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);
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
namespace NubLang.TypeChecking.Node;
|
|
||||||
|
|
||||||
public abstract record Node;
|
|
||||||
@@ -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;
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
using System.Security.Cryptography;
|
using System.Security.Cryptography;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace NubLang.TypeChecking.Node;
|
namespace NubLang.TypeChecking;
|
||||||
|
|
||||||
public abstract class NubType : IEquatable<NubType>
|
public abstract class NubType : IEquatable<NubType>
|
||||||
{
|
{
|
||||||
@@ -1,8 +1,7 @@
|
|||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using NubLang.Diagnostics;
|
using NubLang.Diagnostics;
|
||||||
using NubLang.Modules;
|
using NubLang.Modules;
|
||||||
using NubLang.Parsing.Syntax;
|
using NubLang.Parsing;
|
||||||
using NubLang.TypeChecking.Node;
|
|
||||||
|
|
||||||
namespace NubLang.TypeChecking;
|
namespace NubLang.TypeChecking;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user