leo_passes/write_transforming/
program.rs1use super::WriteTransformingVisitor;
18
19use leo_ast::{AstReconstructor as _, Constructor, Function, ProgramReconstructor};
20
21impl ProgramReconstructor for WriteTransformingVisitor<'_> {
22 fn reconstruct_function(&mut self, input: Function) -> Function {
23 let mut statements = Vec::new();
26 for parameter in input.input.iter() {
27 self.define_variable_members(parameter.identifier, &mut statements);
28 }
29 let mut block = self.reconstruct_block(input.block).0;
30 statements.extend(block.statements);
31 block.statements = statements;
32 Function { block, ..input }
33 }
34
35 fn reconstruct_constructor(&mut self, input: Constructor) -> Constructor {
36 let mut statements = Vec::new();
37 let mut block = self.reconstruct_block(input.block).0;
38 statements.extend(block.statements);
39 block.statements = statements;
40 Constructor { block, ..input }
41 }
42
43 fn reconstruct_program_scope(&mut self, input: leo_ast::ProgramScope) -> leo_ast::ProgramScope {
44 self.program = input.program_id.name.name;
45 leo_ast::ProgramScope {
46 functions: input.functions.into_iter().map(|(i, f)| (i, self.reconstruct_function(f))).collect(),
47 constructor: input.constructor.map(|c| self.reconstruct_constructor(c)),
48 ..input
49 }
50 }
51}