symboscript_optimizer/optimizer/
mod.rs

1use symboscript_types::parser::*;
2
3mod expressions;
4
5pub fn optimize(ast: &Ast) -> Ast {
6    Ast {
7        program: optim_program(&ast.program),
8    }
9}
10
11fn optim_program(program: &Program) -> Program {
12    Program {
13        node: program.node,
14        body: optim_body(&program.body),
15    }
16}
17
18fn optim_body(body: &BlockStatement) -> BlockStatement {
19    let mut new_body = vec![];
20
21    for statement in body {
22        match statement {
23            Statement::ExpressionStatement(expression) => {
24                new_body.push(Statement::ExpressionStatement(
25                    expressions::optim_expression(&expression),
26                ));
27            }
28
29            _ => {
30                new_body.push(statement.clone());
31            }
32        }
33    }
34
35    new_body
36}