From cc9df04093a7650a07fd755ea59921cf3719cee1 Mon Sep 17 00:00:00 2001 From: microproofs Date: Thu, 13 Jun 2024 19:55:36 -0400 Subject: [PATCH] Fix missing delay in list_access_to_uplc. Also fix one of the unit tests. --- crates/aiken-lang/src/gen_uplc/builder.rs | 3 +- crates/aiken-project/src/tests/gen_uplc.rs | 106 +++++++++++---------- 2 files changed, 57 insertions(+), 52 deletions(-) diff --git a/crates/aiken-lang/src/gen_uplc/builder.rs b/crates/aiken-lang/src/gen_uplc/builder.rs index 11df41f8..10e673c5 100644 --- a/crates/aiken-lang/src/gen_uplc/builder.rs +++ b/crates/aiken-lang/src/gen_uplc/builder.rs @@ -1517,7 +1517,8 @@ pub fn list_access_to_uplc( .choose_list(acc.delay(), otherwise_delayed.clone()) .force() .lambda(name) - .apply(head_item), + .apply(head_item) + .delay(), ) .force() .lambda(tail_name) diff --git a/crates/aiken-project/src/tests/gen_uplc.rs b/crates/aiken-project/src/tests/gen_uplc.rs index 8baa5ff8..5bcb5f62 100644 --- a/crates/aiken-project/src/tests/gen_uplc.rs +++ b/crates/aiken-project/src/tests/gen_uplc.rs @@ -5065,17 +5065,17 @@ fn expect_head3_cast_data_no_tail() { assert_uplc( src, Term::var("tail_0") - .delayed_choose_list( - Term::Error.delayed_trace(Term::var("expect[h,i,j]:List=a")), + .choose_list( + Term::var("expect[h,i,j]:List=a"), Term::var("tail_1") - .delayed_choose_list( - Term::Error.delayed_trace(Term::var("expect[h,i,j]:List=a")), + .choose_list( + Term::var("expect[h,i,j]:List=a"), Term::var("tail_2") - .delayed_choose_list( - Term::Error.delayed_trace(Term::var("expect[h,i,j]:List=a")), + .choose_list( + Term::var("expect[h,i,j]:List=a"), Term::tail_list() .apply(Term::var("tail_2")) - .delayed_choose_list( + .choose_list( Term::equals_integer() .apply(Term::var("h")) .apply(Term::var("h")) @@ -5090,68 +5090,66 @@ fn expect_head3_cast_data_no_tail() { .apply(Term::var("j")) .apply(Term::var("j")), Term::bool(false), - ), - Term::Error - .delayed_trace(Term::var("expect[h,i,j]:List=a")), + ) + .delay(), + Term::var("expect[h,i,j]:List=a"), ) + .force() .lambda("j") .apply( Term::var("__var") - .delayed_choose_data( - Term::Error.delayed_trace(Term::var( - "expect[h,i,j]:List=a", - )), - Term::Error.delayed_trace(Term::var( - "expect[h,i,j]:List=a", - )), - Term::Error.delayed_trace(Term::var( - "expect[h,i,j]:List=a", - )), - Term::un_i_data().apply(Term::var("__var")), - Term::Error.delayed_trace(Term::var( - "expect[h,i,j]:List=a", - )), + .choose_data( + Term::var("expect[h,i,j]:List=a"), + Term::var("expect[h,i,j]:List=a"), + Term::var("expect[h,i,j]:List=a"), + Term::un_i_data().apply(Term::var("__var")).delay(), + Term::var("expect[h,i,j]:List=a"), ) + .force() .lambda("__var") .apply(Term::head_list().apply(Term::var("tail_2"))), - ), + ) + .delay(), ) + .force() .lambda("tail_2") .apply(Term::tail_list().apply(Term::var("tail_1"))) .lambda("i") .apply( Term::var("__var") - .delayed_choose_data( - Term::Error - .delayed_trace(Term::var("expect[h,i,j]:List=a")), - Term::Error - .delayed_trace(Term::var("expect[h,i,j]:List=a")), - Term::Error - .delayed_trace(Term::var("expect[h,i,j]:List=a")), - Term::un_i_data().apply(Term::var("__var")), - Term::Error - .delayed_trace(Term::var("expect[h,i,j]:List=a")), + .choose_data( + Term::var("expect[h,i,j]:List=a"), + Term::var("expect[h,i,j]:List=a"), + Term::var("expect[h,i,j]:List=a"), + Term::un_i_data().apply(Term::var("__var")).delay(), + Term::var("expect[h,i,j]:List=a"), ) + .force() .lambda("__var") .apply(Term::head_list().apply(Term::var("tail_1"))), - ), + ) + .delay(), ) + .force() .lambda("tail_1") .apply(Term::tail_list().apply(Term::var("tail_0"))) .lambda("h") .apply( Term::var("__var") - .delayed_choose_data( - Term::Error.delayed_trace(Term::var("expect[h,i,j]:List=a")), - Term::Error.delayed_trace(Term::var("expect[h,i,j]:List=a")), - Term::Error.delayed_trace(Term::var("expect[h,i,j]:List=a")), - Term::un_i_data().apply(Term::var("__var")), - Term::Error.delayed_trace(Term::var("expect[h,i,j]:List=a")), + .choose_data( + Term::var("expect[h,i,j]:List=a"), + Term::var("expect[h,i,j]:List=a"), + Term::var("expect[h,i,j]:List=a"), + Term::un_i_data().apply(Term::var("__var")).delay(), + Term::var("expect[h,i,j]:List=a"), ) + .force() .lambda("__var") .apply(Term::head_list().apply(Term::var("tail_0"))), - ), + ) + .delay(), ) + .force() .lambda("tail_0") .apply( Term::data(Data::list(vec![ @@ -5159,20 +5157,26 @@ fn expect_head3_cast_data_no_tail() { Data::integer(2.into()), Data::integer(3.into()), ])) - .delayed_choose_data( - Term::Error.delayed_trace(Term::var("expect[h,i,j]:List=a")), - Term::Error.delayed_trace(Term::var("expect[h,i,j]:List=a")), + .choose_data( + Term::var("expect[h,i,j]:List=a"), + Term::var("expect[h,i,j]:List=a"), Term::list_values(vec![ Constant::Data(Data::integer(1.into())), Constant::Data(Data::integer(2.into())), Constant::Data(Data::integer(3.into())), - ]), - Term::Error.delayed_trace(Term::var("expect[h,i,j]:List=a")), - Term::Error.delayed_trace(Term::var("expect[h,i,j]:List=a")), - ), + ]) + .delay(), + Term::var("expect[h,i,j]:List=a"), + Term::var("expect[h,i,j]:List=a"), + ) + .force(), ) .lambda("expect[h,i,j]:List=a") - .apply(Term::string("expect [h, i, j]: List = a")), + .apply( + Term::Error + .delayed_trace(Term::string("expect [h, i, j]: List = a")) + .delay(), + ), false, ); }