using Common; using Syntax.Tokenization; using Syntax.Typing; namespace Syntax.Parsing.Node; public abstract record DefinitionNode(IEnumerable Tokens, Optional Documentation, string Namespace) : Node(Tokens); public record FuncParameter(string Name, NubType Type); public abstract record FuncDefinition(IEnumerable Tokens, Optional Documentation, string Namespace, string Name, List Parameters, NubType ReturnType) : DefinitionNode(Tokens, Documentation, Namespace); public record LocalFuncDefinitionNode(IEnumerable Tokens, Optional Documentation, string Namespace, string Name, List Parameters, BlockNode Body, NubType ReturnType, bool Exported) : FuncDefinition(Tokens, Documentation, Namespace, Name, Parameters, ReturnType); public record ExternFuncDefinitionNode(IEnumerable Tokens, Optional Documentation, string Namespace, string Name, string CallName, List Parameters, NubType ReturnType) : FuncDefinition(Tokens, Documentation, Namespace, Name, Parameters, ReturnType); public record StructField(string Name, NubType Type, Optional Value); public record StructDefinitionNode(IEnumerable Tokens, Optional Documentation, string Namespace, string Name, List Fields) : DefinitionNode(Tokens, Documentation, Namespace); public record InterfaceFunc(string Name, List Parameters, NubType ReturnType); public record InterfaceDefinitionNode(IEnumerable Tokens, Optional Documentation, string Namespace, string Name, List Functions) : DefinitionNode(Tokens, Documentation, Namespace); public record ImplementationFunc(string Name, List Parameters, NubType ReturnType, BlockNode Body); public record ImplementationDefinitionNode(IEnumerable Tokens, Optional Documentation, string Namespace, NubType Type, NubType Interface, List Functions) : DefinitionNode(Tokens, Documentation, Namespace);