fix some unnecessary lambdas in assign

This commit is contained in:
microproofs 2023-07-28 12:39:20 -04:00 committed by Kasey
parent 03dd13dc7d
commit f03ed41e03
2 changed files with 16 additions and 23 deletions

View File

@ -687,22 +687,21 @@ impl<'a> CodeGenerator<'a> {
let val = AirTree::local_var(name, tipo.clone()); let val = AirTree::local_var(name, tipo.clone());
if tipo.is_primitive() { if non_opaque_tipo.is_primitive() {
AirTree::let_assignment(name, assignment.hoist_over(val)) assignment
} else { } else {
let expect = self.expect_type_assign( let expect = self.expect_type_assign(
&non_opaque_tipo, &non_opaque_tipo,
val.clone(), val,
&mut index_map, &mut index_map,
pattern.location(), pattern.location(),
); );
let assign_expect = AirTree::let_assignment("_", expect); let assign_expect = AirTree::let_assignment("_", expect);
AirTree::let_assignment( let sequence = vec![assignment, assign_expect];
name,
assignment.hoist_over(assign_expect.hoist_over(val)), AirTree::UnhoistedSequence(sequence)
)
} }
} else { } else {
AirTree::let_assignment(name, value) AirTree::let_assignment(name, value)
@ -721,28 +720,27 @@ impl<'a> CodeGenerator<'a> {
let name = &format!("__discard_expect_{}", name); let name = &format!("__discard_expect_{}", name);
let mut index_map = IndexMap::new(); 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 assignment = AirTree::let_assignment(name, value);
let val = AirTree::local_var(name, tipo.clone()); let val = AirTree::local_var(name, tipo.clone());
if tipo.is_primitive() { if non_opaque_tipo.is_primitive() {
AirTree::let_assignment(name, assignment.hoist_over(val)) assignment.hoist_over(val)
} else { } else {
let expect = self.expect_type_assign( let expect = self.expect_type_assign(
&tipo, &non_opaque_tipo,
val.clone(), val,
&mut index_map, &mut index_map,
pattern.location(), pattern.location(),
); );
let assign_expect = AirTree::let_assignment("_", expect); let assign_expect = AirTree::let_assignment("_", expect);
AirTree::let_assignment( let sequence = vec![assignment, assign_expect];
name,
assignment.hoist_over(assign_expect.hoist_over(val)), AirTree::UnhoistedSequence(sequence)
)
} }
} else if !props.remove_unused { } else if !props.remove_unused {
AirTree::let_assignment(name, value) AirTree::let_assignment(name, value)

View File

@ -73,7 +73,6 @@ fn assert_uplc(source_code: &str, expected: Term<Name>, should_fail: bool) {
}; };
let expected = optimize::aiken_optimize_and_intern(expected); let expected = optimize::aiken_optimize_and_intern(expected);
// println!("expected: {}", expected.to_pretty()); // println!("expected: {}", expected.to_pretty());
let expected: Program<DeBruijn> = expected.try_into().unwrap(); let expected: Program<DeBruijn> = expected.try_into().unwrap();
@ -103,7 +102,6 @@ fn assert_uplc(source_code: &str, expected: Term<Name>, should_fail: bool) {
term: expected, term: expected,
}; };
println!("expected: {}", expected.to_pretty());
let expected = optimize::aiken_optimize_and_intern(expected); 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::var("tail_2"))
.apply( .apply(
Term::unit() Term::un_i_data().apply(Term::var("list_item")).lambda("list_item")
.lambda("_")
.apply(Term::un_i_data().apply(Term::var("list_item")))
.lambda("list_item"),
), ),
) )
.lambda("tail_2") .lambda("tail_2")