pub(crate) mod cross_layer_taint;
pub(crate) mod ordering;
use crate::Pass;
use leo_ast::UnitVisitor;
use leo_errors::Result;
use leo_span::Symbol;
use indexmap::IndexMap;
pub struct CeiAnalyzing;
impl Pass for CeiAnalyzing {
type Input = ();
type Output = ();
const NAME: &str = "CeiAnalyzing";
fn do_pass(_input: Self::Input, state: &mut crate::CompilerState) -> Result<Self::Output> {
ordering::run(state);
let ast = std::mem::take(&mut state.ast);
let mut taint_visitor = cross_layer_taint::CrossLayerTaintVisitor {
state,
current_program: Symbol::intern(""),
taint_map: IndexMap::new(),
in_transition: false,
implicit_taint: cross_layer_taint::TaintInfo::default(),
};
ast.visit(|program| taint_visitor.visit_program(program), |_library| {});
taint_visitor.state.handler.last_err()?;
taint_visitor.state.ast = ast;
Ok(())
}
}