From 4dd17dacf3dbc71881e3bf082b6b863b8cead93d Mon Sep 17 00:00:00 2001 From: microproofs Date: Tue, 17 Oct 2023 12:29:38 -0400 Subject: [PATCH] chore: rename uplc builder builtins --- crates/aiken-lang/src/gen_uplc.rs | 74 +++---- crates/aiken-lang/src/gen_uplc/builder.rs | 14 +- crates/aiken-project/src/tests/gen_uplc.rs | 217 +++++++++++---------- crates/uplc/src/builder.rs | 113 ++++++----- crates/uplc/src/machine.rs | 2 +- crates/uplc/src/optimize/shrinker.rs | 2 +- 6 files changed, 226 insertions(+), 196 deletions(-) diff --git a/crates/aiken-lang/src/gen_uplc.rs b/crates/aiken-lang/src/gen_uplc.rs index a7689836..8e6e81ef 100644 --- a/crates/aiken-lang/src/gen_uplc.rs +++ b/crates/aiken-lang/src/gen_uplc.rs @@ -3842,7 +3842,7 @@ impl<'a> CodeGenerator<'a> { if !names_empty { let error_term = if self.tracing { - Term::Error.trace(Term::var( + Term::Error.delayed_trace(Term::var( self.special_functions.use_function(TOO_MANY_ITEMS), )) } else { @@ -3864,7 +3864,7 @@ impl<'a> CodeGenerator<'a> { arg_stack.push(term); } else if check_last_item { let trace_term = if self.tracing { - Term::Error.trace(Term::var( + Term::Error.delayed_trace(Term::var( self.special_functions.use_function(LIST_NOT_EMPTY), )) } else { @@ -4050,13 +4050,13 @@ impl<'a> CodeGenerator<'a> { let term = match name { - BinOp::And => left.delayed_if_else(right, Term::bool(false)), - BinOp::Or => left.delayed_if_else(Term::bool(true), right), + BinOp::And => left.delayed_if_then_else(right, Term::bool(false)), + BinOp::Or => left.delayed_if_then_else(Term::bool(true), right), BinOp::Eq => { if tipo.is_bool() { - let term = left.delayed_if_else( + let term = left.delayed_if_then_else( right.clone(), - right.if_else(Term::bool(false), Term::bool(true)), + right.if_then_else(Term::bool(false), Term::bool(true)), ); arg_stack.push(term); @@ -4098,8 +4098,10 @@ impl<'a> CodeGenerator<'a> { } BinOp::NotEq => { if tipo.is_bool() { - let term = left.delayed_if_else( - right.clone().if_else(Term::bool(false), Term::bool(true)), + let term = left.delayed_if_then_else( + right + .clone() + .if_then_else(Term::bool(false), Term::bool(true)), right, ); @@ -4109,7 +4111,7 @@ impl<'a> CodeGenerator<'a> { let term = builtin .apply(Term::map_data().apply(left)) .apply(Term::map_data().apply(right)) - .if_else(Term::bool(false), Term::bool(true)); + .if_then_else(Term::bool(false), Term::bool(true)); arg_stack.push(term); return; @@ -4123,7 +4125,7 @@ impl<'a> CodeGenerator<'a> { .apply(Term::map_data().apply( Term::mk_cons().apply(right).apply(Term::empty_map()), )) - .if_else(Term::bool(false), Term::bool(true)); + .if_then_else(Term::bool(false), Term::bool(true)); arg_stack.push(term); return; @@ -4131,7 +4133,7 @@ impl<'a> CodeGenerator<'a> { let term = builtin .apply(Term::list_data().apply(left)) .apply(Term::list_data().apply(right)) - .if_else(Term::bool(false), Term::bool(true)); + .if_then_else(Term::bool(false), Term::bool(true)); arg_stack.push(term); return; @@ -4143,7 +4145,7 @@ impl<'a> CodeGenerator<'a> { builtin .apply(left) .apply(right) - .if_else(Term::bool(false), Term::bool(true)) + .if_then_else(Term::bool(false), Term::bool(true)) } BinOp::LtInt => Term::Builtin(DefaultFunction::LessThanInteger) .apply(left) @@ -4351,7 +4353,7 @@ impl<'a> CodeGenerator<'a> { let mut term = arg_stack.pop().unwrap(); let trace_term = if self.tracing { - Term::Error.trace(Term::var( + Term::Error.delayed_trace(Term::var( self.special_functions.use_function(INCORRECT_CONSTR), )) } else { @@ -4364,7 +4366,7 @@ impl<'a> CodeGenerator<'a> { Term::var(self.special_functions.use_function(CONSTR_INDEX_EXPOSER)) .apply(constr), ) - .delayed_if_else(term, trace_term); + .delayed_if_then_else(term, trace_term); arg_stack.push(term); } @@ -4373,7 +4375,7 @@ impl<'a> CodeGenerator<'a> { let mut term = arg_stack.pop().unwrap(); let trace_term = if self.tracing { - Term::Error.trace(Term::var( + Term::Error.delayed_trace(Term::var( self.special_functions.use_function(INCORRECT_BOOLEAN), )) } else { @@ -4381,9 +4383,9 @@ impl<'a> CodeGenerator<'a> { }; if is_true { - term = value.delayed_if_else(term, trace_term) + term = value.delayed_if_then_else(term, trace_term) } else { - term = value.delayed_if_else(trace_term, term) + term = value.delayed_if_then_else(trace_term, term) } arg_stack.push(term); } @@ -4438,11 +4440,11 @@ impl<'a> CodeGenerator<'a> { if matches!(clause, Term::Constant(boolean) if matches!(boolean.as_ref(), UplcConstant::Bool(true))) { body = Term::var(subject_name) - .if_else(body.delay(), other_clauses) + .if_then_else(body.delay(), other_clauses) .force(); } else { body = Term::var(subject_name) - .if_else(other_clauses, body.delay()) + .if_then_else(other_clauses, body.delay()) .force(); } @@ -4474,12 +4476,12 @@ impl<'a> CodeGenerator<'a> { if complex_clause { term = condition - .if_else(body.delay(), Term::var("__other_clauses_delayed")) + .if_then_else(body.delay(), Term::var("__other_clauses_delayed")) .force() .lambda("__other_clauses_delayed") .apply(term.delay()); } else { - term = condition.delayed_if_else(body, term); + term = condition.delayed_if_then_else(body, term); } } @@ -4584,9 +4586,13 @@ impl<'a> CodeGenerator<'a> { let mut term = Term::var("__other_clauses_delayed"); if matches!(checker, Term::Constant(boolean) if matches!(boolean.as_ref(), UplcConstant::Bool(true))) { - term = Term::var(subject_name).if_else(then.delay(), term).force(); + term = Term::var(subject_name) + .if_then_else(then.delay(), term) + .force(); } else { - term = Term::var(subject_name).if_else(term, then.delay()).force(); + term = Term::var(subject_name) + .if_then_else(term, then.delay()) + .force(); } arg_stack.push(term); } else { @@ -4612,7 +4618,7 @@ impl<'a> CodeGenerator<'a> { }; let term = condition - .if_else(then.delay(), Term::var("__other_clauses_delayed")) + .if_then_else(then.delay(), Term::var("__other_clauses_delayed")) .force(); arg_stack.push(term); } @@ -4695,7 +4701,7 @@ impl<'a> CodeGenerator<'a> { let then = arg_stack.pop().unwrap(); let mut term = arg_stack.pop().unwrap(); - term = condition.delayed_if_else(then, term); + term = condition.delayed_if_then_else(then, term); arg_stack.push(term); } @@ -4772,7 +4778,7 @@ impl<'a> CodeGenerator<'a> { if !indices.is_empty() { let error_term = if self.tracing { - Term::Error.trace(Term::var( + Term::Error.delayed_trace(Term::var( self.special_functions.use_function(TOO_MANY_ITEMS), )) } else { @@ -4798,7 +4804,7 @@ impl<'a> CodeGenerator<'a> { arg_stack.push(term); } else if check_last_item { let trace_term = if self.tracing { - Term::Error.trace(Term::var( + Term::Error.delayed_trace(Term::var( self.special_functions.use_function(CONSTR_NOT_EMPTY), )) } else { @@ -4819,7 +4825,7 @@ impl<'a> CodeGenerator<'a> { let mut term = arg_stack.pop().unwrap(); let trace_term = if self.tracing { - Term::Error.trace(Term::var( + Term::Error.delayed_trace(Term::var( self.special_functions.use_function(CONSTR_NOT_EMPTY), )) } else { @@ -4837,7 +4843,7 @@ impl<'a> CodeGenerator<'a> { let mut term = arg_stack.pop().unwrap(); let trace_term = if self.tracing { - Term::Error.trace(Term::var( + Term::Error.delayed_trace(Term::var( self.special_functions.use_function(LIST_NOT_EMPTY), )) } else { @@ -5001,18 +5007,18 @@ impl<'a> CodeGenerator<'a> { let value = arg_stack.pop().unwrap(); let term = match op { - UnOp::Not => value.if_else(Term::bool(false), Term::bool(true)), + UnOp::Not => value.if_then_else(Term::bool(false), Term::bool(true)), UnOp::Negate => { if let Term::Constant(c) = &value { if let UplcConstant::Integer(i) = c.as_ref() { Term::integer(-i) } else { - Term::sub_integer() + Term::subtract_integer() .apply(Term::integer(0.into())) .apply(value) } } else { - Term::sub_integer() + Term::subtract_integer() .apply(Term::integer(0.into())) .apply(value) } @@ -5066,7 +5072,7 @@ impl<'a> CodeGenerator<'a> { let names_types = names.into_iter().zip(inner_types).collect_vec(); let error_term = if self.tracing { - Term::Error.trace(Term::var( + Term::Error.delayed_trace(Term::var( self.special_functions.use_function(TOO_MANY_ITEMS), )) } else { @@ -5097,7 +5103,7 @@ impl<'a> CodeGenerator<'a> { let term = arg_stack.pop().unwrap(); - let term = term.trace(text); + let term = term.delayed_trace(text); arg_stack.push(term); } diff --git a/crates/aiken-lang/src/gen_uplc/builder.rs b/crates/aiken-lang/src/gen_uplc/builder.rs index 7a341dde..d3fea47f 100644 --- a/crates/aiken-lang/src/gen_uplc/builder.rs +++ b/crates/aiken-lang/src/gen_uplc/builder.rs @@ -1194,7 +1194,7 @@ pub fn convert_data_to_type(term: Term, field_type: &Rc) -> Term, field_type: &Rc) -> Term Term { // Theses are in _alphabetical order_ // The naming convention almost follows PascalCase -> snake_case // Exceptions include the use of `un`. - // FIXME: All cases of `bytearray` are "wrong" and should be `byte_string` - // FIXME: All missing cases are to be added as needed pub fn add_integer() -> Self { Term::Builtin(DefaultFunction::AddInteger) @@ -103,6 +101,24 @@ impl Term { Term::Builtin(DefaultFunction::Blake2b_256) } + pub fn choose_data( + self, + constr_case: Self, + map_case: Self, + array_case: Self, + int_case: Self, + bytes_case: Self, + ) -> Self { + Term::Builtin(DefaultFunction::ChooseData) + .force() + .apply(self) + .apply(constr_case) + .apply(map_case) + .apply(array_case) + .apply(int_case) + .apply(bytes_case) + } + pub fn choose_list(self, then_term: Self, else_term: Self) -> Self { Term::Builtin(DefaultFunction::ChooseList) .force() @@ -171,8 +187,7 @@ impl Term { Term::Builtin(DefaultFunction::IData) } - pub fn if_else(self, then_term: Self, else_term: Self) -> Self { - // FIXME : rename if_then_else + pub fn if_then_else(self, then_term: Self, else_term: Self) -> Self { Term::Builtin(DefaultFunction::IfThenElse) .force() .apply(self) @@ -252,8 +267,7 @@ impl Term { Term::Builtin(DefaultFunction::SndPair).force().force() } - pub fn sub_integer() -> Self { - // FIXME :: rename subtract_integer + pub fn subtract_integer() -> Self { Term::Builtin(DefaultFunction::SubtractInteger) } @@ -292,52 +306,22 @@ impl Term { Term::Builtin(DefaultFunction::VerifySchnorrSecp256k1Signature) } - // FIXME : The following builders are missing - // pub fn null_list() -> Self { - // Term::Builtin(DefaultFunction::NullList) - // } - // pub fn choose_data() -> Self { - // Term::Builtin(DefaultFunction::ChooseData) - // } - // pub fn serialise_data() -> Self { - // Term::Builtin(DefaultFunction::SerialiseData) - // } - // pub fn mk_nil_data() -> Self { - // Term::Builtin(DefaultFunction::MkNilData) - // } - // pub fn mk_nil_pair_data() -> Self { - // Term::Builtin(DefaultFunction::MkNilPairData) - // } + // Unused bultins + pub fn mk_nil_data() -> Self { + Term::Builtin(DefaultFunction::MkNilData) + } + pub fn mk_nil_pair_data() -> Self { + Term::Builtin(DefaultFunction::MkNilPairData) + } + pub fn null_list() -> Self { + Term::Builtin(DefaultFunction::NullList) + } + pub fn serialise_data() -> Self { + Term::Builtin(DefaultFunction::SerialiseData) + } } impl Term { - pub fn delayed_choose_list(self, then_term: Self, else_term: Self) -> Self { - Term::Builtin(DefaultFunction::ChooseList) - .force() - .force() - .apply(self) - .apply(then_term.delay()) - .apply(else_term.delay()) - .force() - } - - pub fn delayed_choose_unit(self, then_term: Self) -> Self { - Term::Builtin(DefaultFunction::ChooseUnit) - .force() - .apply(self) - .apply(then_term.delay()) - .force() - } - - pub fn delayed_if_else(self, then_term: Self, else_term: Self) -> Self { - Term::Builtin(DefaultFunction::IfThenElse) - .force() - .apply(self) - .apply(then_term.delay()) - .apply(else_term.delay()) - .force() - } - pub fn delayed_choose_data( self, constr_case: Self, @@ -357,7 +341,34 @@ impl Term { .force() } - pub fn trace(self, msg_term: Self) -> Self { + pub fn delayed_choose_list(self, then_term: Self, else_term: Self) -> Self { + Term::Builtin(DefaultFunction::ChooseList) + .force() + .force() + .apply(self) + .apply(then_term.delay()) + .apply(else_term.delay()) + .force() + } + + pub fn delayed_choose_unit(self, then_term: Self) -> Self { + Term::Builtin(DefaultFunction::ChooseUnit) + .force() + .apply(self) + .apply(then_term.delay()) + .force() + } + + pub fn delayed_if_then_else(self, then_term: Self, else_term: Self) -> Self { + Term::Builtin(DefaultFunction::IfThenElse) + .force() + .apply(self) + .apply(then_term.delay()) + .apply(else_term.delay()) + .force() + } + + pub fn delayed_trace(self, msg_term: Self) -> Self { Term::Builtin(DefaultFunction::Trace) .force() .apply(msg_term) @@ -365,6 +376,7 @@ impl Term { .force() } + // Misc. pub fn repeat_tail_list(self, repeat: usize) -> Self { let mut term = self; @@ -388,6 +400,7 @@ impl Term { Term::Var(Name::text(name).into()) } + // Misc. pub fn constr_fields_exposer(self) -> Self { self.lambda(CONSTR_FIELDS_EXPOSER).apply( Term::snd_pair() diff --git a/crates/uplc/src/machine.rs b/crates/uplc/src/machine.rs index 8384bcff..7f9a83f2 100644 --- a/crates/uplc/src/machine.rs +++ b/crates/uplc/src/machine.rs @@ -495,7 +495,7 @@ mod tests { ], } .into(), - branches: vec![Term::Builtin(fun), Term::sub_integer()], + branches: vec![Term::Builtin(fun), Term::subtract_integer()], }, }; diff --git a/crates/uplc/src/optimize/shrinker.rs b/crates/uplc/src/optimize/shrinker.rs index 4cf9f059..cbb55527 100644 --- a/crates/uplc/src/optimize/shrinker.rs +++ b/crates/uplc/src/optimize/shrinker.rs @@ -935,7 +935,7 @@ mod tests { .apply(Term::integer(2.into())) .apply(Term::var("y")), ) - .delayed_if_else( + .delayed_if_then_else( Term::length_of_bytearray().apply(Term::byte_string(vec![])), Term::Error, )