This repository has been archived on 2025-10-23. You can view files and clone it, but cannot push or open issues or pull requests.
Files
nub-lang-archive/src/compiler/NubLang/Syntax/Parsing/Node/StatementSyntax.cs
nub31 6b733b9cdf ...
2025-07-22 22:10:31 +02:00

84 lines
2.1 KiB
C#

using NubLang.Common;
namespace NubLang.Syntax.Parsing.Node;
public abstract record StatementSyntax : SyntaxNode;
public record StatementExpressionSyntax(ExpressionSyntax Expression) : StatementSyntax
{
public override IEnumerable<SyntaxNode> GetChildren()
{
yield return Expression;
}
}
public record ReturnSyntax(Optional<ExpressionSyntax> Value) : StatementSyntax
{
public override IEnumerable<SyntaxNode> GetChildren()
{
if (Value.HasValue)
{
yield return Value.Value;
}
}
}
public record AssignmentSyntax(ExpressionSyntax Target, ExpressionSyntax Value) : StatementSyntax
{
public override IEnumerable<SyntaxNode> GetChildren()
{
yield return Target;
yield return Value;
}
}
public record IfSyntax(ExpressionSyntax Condition, BlockSyntax Body, Optional<Variant<IfSyntax, BlockSyntax>> Else) : StatementSyntax
{
public override IEnumerable<SyntaxNode> GetChildren()
{
yield return Condition;
yield return Body;
if (Else.HasValue)
{
if (Else.Value.IsCase1(out var elseIf))
{
yield return elseIf;
}
else if (Else.Value.IsCase2(out var @else))
{
yield return @else;
}
}
}
}
public record VariableDeclarationSyntax(string Name, Optional<TypeSyntax> ExplicitType, Optional<ExpressionSyntax> Assignment) : StatementSyntax
{
public override IEnumerable<SyntaxNode> GetChildren()
{
if (ExplicitType.HasValue)
{
yield return ExplicitType.Value;
}
if (Assignment.HasValue)
{
yield return Assignment.Value;
}
}
}
public record ContinueSyntax : StatementSyntax
{
public override IEnumerable<SyntaxNode> GetChildren() => [];
}
public record BreakSyntax : StatementSyntax
{
public override IEnumerable<SyntaxNode> GetChildren() => [];
}
public record WhileSyntax(ExpressionSyntax Condition, BlockSyntax Body) : StatementSyntax
{
public override IEnumerable<SyntaxNode> GetChildren() => [];
}