From 1c4a7842a617fc746ef373806e6f57307c0fb088 Mon Sep 17 00:00:00 2001 From: Pranav Gaddamadugu Date: Fri, 7 Oct 2022 16:31:31 -0700 Subject: [PATCH 1/2] Fix codegen for arc3 --- .../src/code_generation/visit_program.rs | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/compiler/passes/src/code_generation/visit_program.rs b/compiler/passes/src/code_generation/visit_program.rs index 0e4bd1c632..6ac8b6c6c6 100644 --- a/compiler/passes/src/code_generation/visit_program.rs +++ b/compiler/passes/src/code_generation/visit_program.rs @@ -74,9 +74,9 @@ impl<'a> CodeGenerator<'a> { .join("\n"), ); - // Store closures and functions in separate strings. - let mut closures = String::new(); + // Store functions and transitions in separate strings. let mut functions = String::new(); + let mut transitions = String::new(); // Visit each `Function` in the Leo AST and produce Aleo instructions. program_scope.functions.values().for_each(|function| { @@ -85,11 +85,11 @@ impl<'a> CodeGenerator<'a> { let function_string = self.visit_function(function); if self.is_transition_function { + transitions.push_str(&function_string); + transitions.push('\n'); + } else { functions.push_str(&function_string); functions.push('\n'); - } else { - closures.push_str(&function_string); - closures.push('\n'); } // Unset the `is_transition_function` flag. @@ -97,9 +97,9 @@ impl<'a> CodeGenerator<'a> { }); // Closures must precede functions in the Aleo program. - program_string.push_str(&closures); - program_string.push('\n'); program_string.push_str(&functions); + program_string.push('\n'); + program_string.push_str(&transitions); program_string } @@ -126,7 +126,7 @@ impl<'a> CodeGenerator<'a> { self.composite_mapping .insert(&struct_.identifier.name, (false, String::from("private"))); // todo: private by default here. - let mut output_string = format!("interface {}:\n", struct_.identifier); // todo: check if this is safe from name conflicts. + let mut output_string = format!("struct {}:\n", struct_.identifier); // todo: check if this is safe from name conflicts. // Construct and append the record variables. for var in struct_.members.iter() { @@ -165,10 +165,10 @@ impl<'a> CodeGenerator<'a> { self.current_function = Some(function); // Construct the header of the function. - // If a function is a program function, generate an Aleo `function`, otherwise generate an Aleo `closure`. + // If a function is a transition function, generate an Aleo `transition`, otherwise generate an Aleo `function`. let mut function_string = match self.is_transition_function { - true => format!("function {}:\n", function.identifier), - false => format!("closure {}:\n", function.identifier), + true => format!("transition {}:\n", function.identifier), + false => format!("function {}:\n", function.identifier), }; // Construct and append the input declarations of the function. From 49c3a50231f73073552d48a5488b5568c1e8e811 Mon Sep 17 00:00:00 2001 From: Pranav Gaddamadugu Date: Fri, 7 Oct 2022 16:31:57 -0700 Subject: [PATCH 2/2] Regen tests --- .../expectations/compiler/tuple/function_return_single_fail.out | 2 +- tests/expectations/compiler/tuple/function_return_zero_fail.out | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/expectations/compiler/tuple/function_return_single_fail.out b/tests/expectations/compiler/tuple/function_return_single_fail.out index 0bcd0578a3..b7848222da 100644 --- a/tests/expectations/compiler/tuple/function_return_single_fail.out +++ b/tests/expectations/compiler/tuple/function_return_single_fail.out @@ -2,4 +2,4 @@ namespace: Compile expectation: Fail outputs: - - "Failed to parse string. Parsing Error: VerboseError { errors: [(\"closure main:\\n input r0 as boolean;\\n input r1 as boolean;\\n output r0 as boolean;\\n\\n\\n\", Nom(Tag)), (\"\\n\\n\\nclosure main:\\n input r0 as boolean;\\n input r1 as boolean;\\n output r0 as boolean;\\n\\n\\n\", Nom(Alt)), (\"\\n\\n\\nclosure main:\\n input r0 as boolean;\\n input r1 as boolean;\\n output r0 as boolean;\\n\\n\\n\", Nom(Many1))] }" + - "Failed to parse string. Parsing Error: VerboseError { errors: [(\"function main:\\n input r0 as boolean;\\n input r1 as boolean;\\n output r0 as boolean;\\n\\n\\n\", Nom(Tag)), (\"\\n\\n\\nfunction main:\\n input r0 as boolean;\\n input r1 as boolean;\\n output r0 as boolean;\\n\\n\\n\", Nom(Alt)), (\"\\n\\n\\nfunction main:\\n input r0 as boolean;\\n input r1 as boolean;\\n output r0 as boolean;\\n\\n\\n\", Nom(Many1))] }" diff --git a/tests/expectations/compiler/tuple/function_return_zero_fail.out b/tests/expectations/compiler/tuple/function_return_zero_fail.out index 53da785600..a1d747d821 100644 --- a/tests/expectations/compiler/tuple/function_return_zero_fail.out +++ b/tests/expectations/compiler/tuple/function_return_zero_fail.out @@ -2,4 +2,4 @@ namespace: Compile expectation: Fail outputs: - - "Failed to parse string. Parsing Error: VerboseError { errors: [(\"closure main:\\n input r0 as boolean;\\n input r1 as boolean;\\n\\n\\n\", Nom(Tag)), (\"\\n\\n\\nclosure main:\\n input r0 as boolean;\\n input r1 as boolean;\\n\\n\\n\", Nom(Alt)), (\"\\n\\n\\nclosure main:\\n input r0 as boolean;\\n input r1 as boolean;\\n\\n\\n\", Nom(Many1))] }" + - "Failed to parse string. Parsing Error: VerboseError { errors: [(\"function main:\\n input r0 as boolean;\\n input r1 as boolean;\\n\\n\\n\", Nom(Tag)), (\"\\n\\n\\nfunction main:\\n input r0 as boolean;\\n input r1 as boolean;\\n\\n\\n\", Nom(Alt)), (\"\\n\\n\\nfunction main:\\n input r0 as boolean;\\n input r1 as boolean;\\n\\n\\n\", Nom(Many1))] }"