use crate::Pass;
use leo_errors::Result;
mod expression;
mod program;
mod statement;
mod type_;
mod visitor;
use visitor::*;
pub struct CodeGenerating;
impl Pass for CodeGenerating {
type Input = ();
type Output = String;
const NAME: &str = "CodeGenerating";
fn do_pass(_input: Self::Input, state: &mut crate::CompilerState) -> Result<Self::Output> {
let mut visitor = CodeGeneratingVisitor {
state,
next_register: 0,
current_function: None,
variable_mapping: Default::default(),
composite_mapping: Default::default(),
global_mapping: Default::default(),
variant: None,
program: &state.ast.ast,
program_id: None,
finalize_caller: None,
next_label: 0,
conditional_depth: 0,
internal_record_inputs: Default::default(),
};
let code = visitor.visit_program(visitor.state.ast.as_repr());
Ok(code)
}
}