use time;
use time::PreciseTime;
use crate::ast::*;
use crate::error::*;
use crate::util::stats::CompilationStats;
pub use self::passes::*;
mod passes;
pub mod transforms;
pub fn apply_passes(
expr: &mut Expr,
passes: &[Pass],
stats: &mut CompilationStats,
use_experimental: bool,
) -> WeldResult<()> {
for pass in passes {
let start = PreciseTime::now();
pass.transform(expr, use_experimental)?;
let end = PreciseTime::now();
stats.pass_times.push((pass.pass_name(), start.to(end)));
debug!("After {} pass:\n{}", pass.pass_name(), expr.pretty_print());
}
Ok(())
}