This repository has been archived on 2025-10-24. You can view files and clone it, but cannot push or open issues or pull requests.
Files
nub-lang-archive-2/src/compiler/NubLang/Parsing/Syntax/DefinitionSyntax.cs
nub31 f31c16bbac ...
2025-08-12 20:01:43 +02:00

99 lines
2.8 KiB
C#

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