use crate::{Assigner, CallGraph, StructGraph, SymbolTable, TypeTable};
use leo_ast::{Ast, NodeBuilder};
use leo_errors::{Handler, Result};
#[derive(Default)]
pub struct CompilerState {
pub ast: Ast,
pub handler: Handler,
pub type_table: TypeTable,
pub node_builder: NodeBuilder,
pub assigner: Assigner,
pub symbol_table: SymbolTable,
pub struct_graph: StructGraph,
pub call_graph: CallGraph,
pub is_test: bool,
}
pub trait Pass {
type Input;
type Output;
const NAME: &str;
fn do_pass(input: Self::Input, state: &mut CompilerState) -> Result<Self::Output>;
}