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 consequent: Option<Box<SpannedBlock>>,
26 alternative: Option<Box<SpannedBlock>>,
28 },
29}
30
31pub type SpannedBlock = Spanned<Block>;