1mod assign;
2mod binary;
3mod block;
4mod branch;
5mod break_expr;
6mod call;
7mod continue_expr;
8mod if_expr;
9mod index;
10mod literal;
11mod loops;
12mod product;
13mod range;
14mod return_expr;
15mod stmt;
16mod sum;
17mod unary;
18
19pub use stmt::compile_stmts;
20
21use cas_error::Error;
22use cas_parser::parser::ast::expr::Expr;
23use crate::{Compile, Compiler};
24
25impl Compile for Expr {
26 fn compile(&self, compiler: &mut Compiler) -> Result<(), Error> {
27 match self {
28 Expr::Literal(literal) => literal.compile(compiler),
29 Expr::Paren(paren) => paren.expr.compile(compiler),
30 Expr::Block(block) => block.compile(compiler),
31 Expr::Sum(sum) => sum.compile(compiler),
32 Expr::Product(product) => product.compile(compiler),
33 Expr::If(if_expr) => if_expr.compile(compiler),
34 Expr::Loop(loop_expr) => loop_expr.compile(compiler),
35 Expr::While(while_expr) => while_expr.compile(compiler),
36 Expr::For(for_expr) => for_expr.compile(compiler),
37 Expr::Then(then_expr) => then_expr.compile(compiler),
38 Expr::Of(of_expr) => of_expr.compile(compiler),
39 Expr::Break(break_expr) => break_expr.compile(compiler),
40 Expr::Continue(continue_expr) => continue_expr.compile(compiler),
41 Expr::Return(return_expr) => return_expr.compile(compiler),
42 Expr::Call(call) => call.compile(compiler),
43 Expr::Index(index) => index.compile(compiler),
44 Expr::Unary(unary) => unary.compile(compiler),
45 Expr::Binary(binary) => binary.compile(compiler),
46 Expr::Assign(assign) => assign.compile(compiler),
47 Expr::Range(range) => range.compile(compiler),
48 }
49 }
50}