claw_ast/
statements.rs

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}