use super::WriteTransformingVisitor;
use leo_ast::{AstReconstructor as _, Constructor, Function, ProgramReconstructor};
impl ProgramReconstructor for WriteTransformingVisitor<'_> {
fn reconstruct_function(&mut self, input: Function) -> Function {
let mut statements = Vec::new();
for parameter in input.input.iter() {
self.define_variable_members(parameter.identifier, &mut statements);
}
let mut block = self.reconstruct_block(input.block).0;
statements.extend(block.statements);
block.statements = statements;
Function { block, ..input }
}
fn reconstruct_constructor(&mut self, input: Constructor) -> Constructor {
let mut statements = Vec::new();
let mut block = self.reconstruct_block(input.block).0;
statements.extend(block.statements);
block.statements = statements;
Constructor { block, ..input }
}
fn reconstruct_program_scope(&mut self, input: leo_ast::ProgramScope) -> leo_ast::ProgramScope {
self.program = input.program_id.name.name;
leo_ast::ProgramScope {
functions: input.functions.into_iter().map(|(i, f)| (i, self.reconstruct_function(f))).collect(),
constructor: input.constructor.map(|c| self.reconstruct_constructor(c)),
..input
}
}
}