From f03ed41e03e6618b16525414b5d5a6283d6719d7 Mon Sep 17 00:00:00 2001 From: microproofs Date: Fri, 28 Jul 2023 12:39:20 -0400 Subject: [PATCH] fix some unnecessary lambdas in assign --- crates/aiken-lang/src/gen_uplc.rs | 30 ++++++++++------------ crates/aiken-project/src/tests/gen_uplc.rs | 9 ++----- 2 files changed, 16 insertions(+), 23 deletions(-) diff --git a/crates/aiken-lang/src/gen_uplc.rs b/crates/aiken-lang/src/gen_uplc.rs index d084c77e..ae5f64da 100644 --- a/crates/aiken-lang/src/gen_uplc.rs +++ b/crates/aiken-lang/src/gen_uplc.rs @@ -687,22 +687,21 @@ impl<'a> CodeGenerator<'a> { let val = AirTree::local_var(name, tipo.clone()); - if tipo.is_primitive() { - AirTree::let_assignment(name, assignment.hoist_over(val)) + if non_opaque_tipo.is_primitive() { + assignment } else { let expect = self.expect_type_assign( &non_opaque_tipo, - val.clone(), + val, &mut index_map, pattern.location(), ); let assign_expect = AirTree::let_assignment("_", expect); - AirTree::let_assignment( - name, - assignment.hoist_over(assign_expect.hoist_over(val)), - ) + let sequence = vec![assignment, assign_expect]; + + AirTree::UnhoistedSequence(sequence) } } else { AirTree::let_assignment(name, value) @@ -721,28 +720,27 @@ impl<'a> CodeGenerator<'a> { let name = &format!("__discard_expect_{}", name); let mut index_map = IndexMap::new(); - let tipo = convert_opaque_type(tipo, &self.data_types); + let non_opaque_tipo = convert_opaque_type(tipo, &self.data_types); let assignment = AirTree::let_assignment(name, value); let val = AirTree::local_var(name, tipo.clone()); - if tipo.is_primitive() { - AirTree::let_assignment(name, assignment.hoist_over(val)) + if non_opaque_tipo.is_primitive() { + assignment.hoist_over(val) } else { let expect = self.expect_type_assign( - &tipo, - val.clone(), + &non_opaque_tipo, + val, &mut index_map, pattern.location(), ); let assign_expect = AirTree::let_assignment("_", expect); - AirTree::let_assignment( - name, - assignment.hoist_over(assign_expect.hoist_over(val)), - ) + let sequence = vec![assignment, assign_expect]; + + AirTree::UnhoistedSequence(sequence) } } else if !props.remove_unused { AirTree::let_assignment(name, value) diff --git a/crates/aiken-project/src/tests/gen_uplc.rs b/crates/aiken-project/src/tests/gen_uplc.rs index 9761d5cb..8e33e40f 100644 --- a/crates/aiken-project/src/tests/gen_uplc.rs +++ b/crates/aiken-project/src/tests/gen_uplc.rs @@ -71,9 +71,8 @@ fn assert_uplc(source_code: &str, expected: Term, should_fail: bool) { version: (1, 0, 0), term: expected, }; - + let expected = optimize::aiken_optimize_and_intern(expected); - // println!("expected: {}", expected.to_pretty()); let expected: Program = expected.try_into().unwrap(); @@ -103,7 +102,6 @@ fn assert_uplc(source_code: &str, expected: Term, should_fail: bool) { term: expected, }; - println!("expected: {}", expected.to_pretty()); let expected = optimize::aiken_optimize_and_intern(expected); @@ -4212,10 +4210,7 @@ fn expect_head_cast_data_with_tail() { ) .apply(Term::var("tail_2")) .apply( - Term::unit() - .lambda("_") - .apply(Term::un_i_data().apply(Term::var("list_item"))) - .lambda("list_item"), + Term::un_i_data().apply(Term::var("list_item")).lambda("list_item") ), ) .lambda("tail_2")