rimu_ast/
block.rs

1use rimu_meta::Spanned;
2
3use crate::{expression::Expression, SpannedExpression};
4
5#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
6pub enum Block {
7    Expression(Expression),
8    List(Vec<SpannedBlock>),
9    Object(Vec<(Spanned<String>, SpannedBlock)>),
10    Function {
11        args: Vec<Spanned<String>>,
12        body: Box<SpannedBlock>,
13    },
14    Call {
15        function: Box<SpannedExpression>,
16        args: Box<SpannedBlock>,
17    },
18    Let {
19        variables: Vec<(Spanned<String>, SpannedBlock)>,
20        body: Box<SpannedBlock>,
21    },
22    If {
23        condition: Box<SpannedBlock>,
24        // then
25        consequent: Option<Box<SpannedBlock>>,
26        // else
27        alternative: Option<Box<SpannedBlock>>,
28    },
29}
30
31pub type SpannedBlock = Spanned<Block>;