1.1 KiB
1.1 KiB
Re-Optimize an AST
{{#include ../../links.md}}
Sometimes it is more efficient to store one single, large script with delimited code blocks guarded by
constant variables. This script is compiled once to an [AST].
Then, depending on the execution environment, constants are passed into the [Engine] and the [AST]
is re-optimized based on those constants via the Engine::optimize_ast method,
effectively pruning out unused code sections.
The final, optimized [AST] is then used for evaluations.
// Compile master script to AST
let master_ast = engine.compile(
r"
if SCENARIO == 1 {
do_work();
} else if SCENARIO == 2 {
do_something();
} else if SCENARIO == 3 {
do_something_else();
} else {
do_nothing();
}
")?;
// Create a new 'Scope' - put constants in it to aid optimization
let mut scope = Scope::new();
scope.push_constant("SCENARIO", 1_i64);
// Re-optimize the AST
let new_ast = engine.optimize_ast(&scope, master_ast.clone(), OptimizationLevel::Simple);
// 'new_ast' is essentially: 'do_work()'