1use cranelift_entity::entity_impl;
2
3use super::{expressions::ExpressionId, types::TypeId, Call, NameId};
4
5#[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
6pub struct StatementId(u32);
7entity_impl!(StatementId, "name");
8
9#[derive(Debug, PartialEq, Clone)]
10pub enum Statement {
11 Let(Let),
12 Assign(Assign),
13 Call(Call),
14 If(If),
15 Return(Return),
16}
17
18#[derive(Debug, PartialEq, Clone)]
19pub struct Let {
20 pub mutable: bool,
21 pub ident: NameId,
22 pub annotation: Option<TypeId>,
23 pub expression: ExpressionId,
24}
25
26#[derive(Debug, PartialEq, Clone)]
27pub struct Assign {
28 pub ident: NameId,
29 pub expression: ExpressionId,
30}
31
32#[derive(Debug, PartialEq, Clone)]
33pub struct If {
34 pub condition: ExpressionId,
35 pub block: Vec<StatementId>,
36}
37
38#[derive(Debug, PartialEq, Clone)]
39pub struct Return {
40 pub expression: Option<ExpressionId>,
41}