diff --git a/compiler/src/constraints/constraints.rs b/compiler/src/constraints/constraints.rs index 0027f0762e..ef53f834ef 100644 --- a/compiler/src/constraints/constraints.rs +++ b/compiler/src/constraints/constraints.rs @@ -46,7 +46,7 @@ pub fn generate_constraints, CS: Constrai let program_name = program.get_name(); let main_function_name = new_scope(&program_name, "main"); - resolved_program.store_definitions(program, imported_programs)?; + resolved_program.store_definitions(&program, imported_programs)?; let main = resolved_program.get(&main_function_name).ok_or(CompilerError::NoMain)?; @@ -72,7 +72,7 @@ pub fn generate_test_constraints>( let tests = program.tests.clone(); // Store definitions - resolved_program.store_definitions(program, imported_programs)?; + resolved_program.store_definitions(&program, imported_programs)?; // Get default input let default = input.pairs.get(&program_name); diff --git a/compiler/src/definition/definitions.rs b/compiler/src/definition/definitions.rs index 46bfa7ea07..0797e80ab5 100644 --- a/compiler/src/definition/definitions.rs +++ b/compiler/src/definition/definitions.rs @@ -28,7 +28,11 @@ use leo_imports::ImportParser; use snarkos_models::curves::{Field, PrimeField}; impl> ConstrainedProgram { - pub fn store_definitions(&mut self, program: Program, imported_programs: &ImportParser) -> Result<(), ImportError> { + pub fn store_definitions( + &mut self, + program: &Program, + imported_programs: &ImportParser, + ) -> Result<(), ImportError> { let program_name = program.name.trim_end_matches(".leo"); // evaluate all import statements and store imported definitions @@ -39,15 +43,21 @@ impl> ConstrainedProgram { .collect::, ImportError>>()?; // evaluate and store all circuit definitions - program.circuits.into_iter().for_each(|(identifier, circuit)| { + program.circuits.iter().for_each(|(identifier, circuit)| { let resolved_circuit_name = new_scope(program_name, &identifier.name); - self.store(resolved_circuit_name, ConstrainedValue::CircuitDefinition(circuit)); + self.store( + resolved_circuit_name, + ConstrainedValue::CircuitDefinition(circuit.clone()), + ); }); // evaluate and store all function definitions - program.functions.into_iter().for_each(|(function_name, function)| { + program.functions.iter().for_each(|(function_name, function)| { let resolved_function_name = new_scope(program_name, &function_name.name); - self.store(resolved_function_name, ConstrainedValue::Function(None, function)); + self.store( + resolved_function_name, + ConstrainedValue::Function(None, function.clone()), + ); }); Ok(()) diff --git a/compiler/src/import/store/import.rs b/compiler/src/import/store/import.rs index 9453d2ef02..9c03ae4c11 100644 --- a/compiler/src/import/store/import.rs +++ b/compiler/src/import/store/import.rs @@ -47,7 +47,7 @@ impl> ConstrainedProgram { .ok_or_else(|| ImportError::unknown_package(import.package.name.clone()))?; // Parse imported program - self.store_definitions(program.clone(), imported_programs)?; + self.store_definitions(program, imported_programs)?; // Store the imported symbol self.store_symbol(scope, &name, &symbol, program)?;