using NubLang.Common; namespace NubLang.Syntax.Parsing.Node; public abstract record DefinitionSyntax(string Namespace) : SyntaxNode; public record FuncParameterSyntax(string Name, TypeSyntax Type) : SyntaxNode { public override IEnumerable GetChildren() { yield return Type; } } public record FuncSignatureSyntax(IReadOnlyList Parameters, TypeSyntax ReturnType) : SyntaxNode { public override IEnumerable GetChildren() { foreach (var parameter in Parameters) { yield return parameter; } yield return ReturnType; } } public record LocalFuncSyntax(string Namespace, string Name, FuncSignatureSyntax Signature, BlockSyntax Body) : DefinitionSyntax(Namespace) { public override IEnumerable GetChildren() { yield return Signature; yield return Body; } } public record ExternFuncSyntax(string Namespace, string Name, string CallName, FuncSignatureSyntax Signature) : DefinitionSyntax(Namespace) { public override IEnumerable GetChildren() { yield return Signature; } } public record StructFieldSyntax(int Index, string Name, TypeSyntax Type, Optional Value) : SyntaxNode { public override IEnumerable GetChildren() { yield return Type; if (Value.HasValue) { yield return Value.Value; } } } public record StructFuncSyntax(string Name, FuncSignatureSyntax Signature, BlockSyntax Body) : SyntaxNode { public override IEnumerable GetChildren() { yield return Signature; yield return Body; } } public record StructSyntax(string Namespace, string Name, IReadOnlyList Fields, IReadOnlyList Functions) : DefinitionSyntax(Namespace) { public override IEnumerable GetChildren() { foreach (var field in Fields) { yield return field; } foreach (var func in Functions) { yield return func; } } } public record InterfaceFuncSyntax(string Name, FuncSignatureSyntax Signature) : SyntaxNode { public override IEnumerable GetChildren() { yield return Signature; } } public record InterfaceSyntax(string Namespace, string Name, IReadOnlyList Functions) : DefinitionSyntax(Namespace) { public override IEnumerable GetChildren() { foreach (var func in Functions) { yield return func; } } }