99 lines
2.6 KiB
C#
99 lines
2.6 KiB
C#
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<SyntaxNode> GetChildren()
|
|
{
|
|
yield return Type;
|
|
}
|
|
}
|
|
|
|
public record FuncSignatureSyntax(IReadOnlyList<FuncParameterSyntax> Parameters, TypeSyntax ReturnType) : SyntaxNode
|
|
{
|
|
public override IEnumerable<SyntaxNode> 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<SyntaxNode> GetChildren()
|
|
{
|
|
yield return Signature;
|
|
yield return Body;
|
|
}
|
|
}
|
|
|
|
public record ExternFuncSyntax(string Namespace, string Name, string CallName, FuncSignatureSyntax Signature) : DefinitionSyntax(Namespace)
|
|
{
|
|
public override IEnumerable<SyntaxNode> GetChildren()
|
|
{
|
|
yield return Signature;
|
|
}
|
|
}
|
|
|
|
public record StructFieldSyntax(int Index, string Name, TypeSyntax Type, Optional<ExpressionSyntax> Value) : SyntaxNode
|
|
{
|
|
public override IEnumerable<SyntaxNode> GetChildren()
|
|
{
|
|
yield return Type;
|
|
if (Value.HasValue)
|
|
{
|
|
yield return Value.Value;
|
|
}
|
|
}
|
|
}
|
|
|
|
public record StructFuncSyntax(string Name, FuncSignatureSyntax Signature, BlockSyntax Body) : SyntaxNode
|
|
{
|
|
public override IEnumerable<SyntaxNode> GetChildren()
|
|
{
|
|
yield return Signature;
|
|
yield return Body;
|
|
}
|
|
}
|
|
|
|
public record StructSyntax(string Namespace, string Name, IReadOnlyList<StructFieldSyntax> Fields, IReadOnlyList<StructFuncSyntax> Functions) : DefinitionSyntax(Namespace)
|
|
{
|
|
public override IEnumerable<SyntaxNode> 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<SyntaxNode> GetChildren()
|
|
{
|
|
yield return Signature;
|
|
}
|
|
}
|
|
|
|
public record InterfaceSyntax(string Namespace, string Name, IReadOnlyList<InterfaceFuncSyntax> Functions) : DefinitionSyntax(Namespace)
|
|
{
|
|
public override IEnumerable<SyntaxNode> GetChildren()
|
|
{
|
|
foreach (var func in Functions)
|
|
{
|
|
yield return func;
|
|
}
|
|
}
|
|
} |