symboscript_optimizer/optimizer/
mod.rs1use 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}