...
This commit is contained in:
84
src/compiler/NubLang/Parsing/Syntax/StatementSyntax.cs
Normal file
84
src/compiler/NubLang/Parsing/Syntax/StatementSyntax.cs
Normal file
@@ -0,0 +1,84 @@
|
||||
using NubLang.Common;
|
||||
|
||||
namespace NubLang.Parsing.Syntax;
|
||||
|
||||
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() => [];
|
||||
}
|
||||
Reference in New Issue
Block a user