using NubLang.Tokenization; namespace NubLang.Parsing.Syntax; public abstract record DefinitionSyntax(IEnumerable Tokens, string Name, bool Exported) : SyntaxNode(Tokens); public record FuncParameterSyntax(IEnumerable Tokens, string Name, TypeSyntax Type) : SyntaxNode(Tokens); public record FuncSignatureSyntax(IEnumerable Tokens, IReadOnlyList 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 StructFieldSyntax(IEnumerable Tokens, int Index, string Name, TypeSyntax Type, Optional Value) : SyntaxNode(Tokens); public record StructFuncSyntax(IEnumerable Tokens, string Name, FuncSignatureSyntax Signature, BlockSyntax Body) : SyntaxNode(Tokens); public record StructSyntax(IEnumerable Tokens, string Name, bool Exported, IReadOnlyList Fields, IReadOnlyList Functions, IReadOnlyList InterfaceImplementations) : DefinitionSyntax(Tokens, Name, Exported); public record InterfaceFuncSyntax(IEnumerable Tokens, string Name, FuncSignatureSyntax Signature) : SyntaxNode(Tokens); public record InterfaceSyntax(IEnumerable Tokens, string Name, bool Exported, IReadOnlyList Functions) : DefinitionSyntax(Tokens, Name, Exported);