use super::CommonSubexpressionEliminatingVisitor;
use leo_ast::{AstReconstructor, Constructor, Function, Module, ProgramReconstructor};
impl ProgramReconstructor for CommonSubexpressionEliminatingVisitor<'_> {
fn reconstruct_program_scope(&mut self, mut input: leo_ast::ProgramScope) -> leo_ast::ProgramScope {
input.functions = input.functions.into_iter().map(|(i, f)| (i, self.reconstruct_function(f))).collect();
input.constructor = input.constructor.map(|c| self.reconstruct_constructor(c));
input
}
fn reconstruct_function(&mut self, mut input: Function) -> Function {
input.block = self.reconstruct_block(input.block).0;
input
}
fn reconstruct_constructor(&mut self, mut input: Constructor) -> Constructor {
input.block = self.reconstruct_block(input.block).0;
input
}
fn reconstruct_module(&mut self, mut input: Module) -> Module {
input.functions = input.functions.into_iter().map(|(i, f)| (i, self.reconstruct_function(f))).collect();
input
}
}