cas_compiler/expr/
mod.rs

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}