diff --git a/crates/uplc/src/ast.rs b/crates/uplc/src/ast.rs index 301e7662..867dd128 100644 --- a/crates/uplc/src/ast.rs +++ b/crates/uplc/src/ast.rs @@ -176,12 +176,12 @@ impl Program { #[derive(Debug, Clone, PartialEq)] pub enum Term { // tag: 0 - Var(T), + Var(Rc), // tag: 1 Delay(Rc>), // tag: 2 Lambda { - parameter_name: T, + parameter_name: Rc, body: Rc>, }, // tag: 3 @@ -190,7 +190,7 @@ pub enum Term { argument: Rc>, }, // tag: 4 - Constant(Constant), + Constant(Rc), // tag: 5 Force(Rc>), // tag: 6 @@ -201,7 +201,7 @@ pub enum Term { impl Term { pub fn is_unit(&self) -> bool { - matches!(self, Term::Constant(Constant::Unit)) + matches!(self, Term::Constant(c) if c.as_ref() == &Constant::Unit) } pub fn force_wrap(self) -> Self { diff --git a/fib_iter.uplc b/fib_iter.uplc new file mode 100644 index 00000000..0826eead --- /dev/null +++ b/fib_iter.uplc @@ -0,0 +1,1179 @@ +(program + 1.0.0 + (lam + p0 + [ + (builtin iData) + [ + (lam + s + [ + (lam g [ [ g [ (builtin unIData) p0 ] ] s ]) + (force + [ + [ s (con bytestring #06) ] + (delay + [ + (lam _ (error )) + [ + [ + (force (builtin trace)) + (con string "NameError: validator") + ] + (con unit ()) + ] + ] + ) + ] + ) + ] + ) + [ + (lam + s + [ + (lam + s + (lam + x + (lam + def + (force + [ + [ + [ + (force (builtin ifThenElse)) + [ + [ (builtin equalsByteString) x ] + (con bytestring #06) + ] + ] + (delay + (delay + (lam + p0 + (lam + s + [ + (lam + s + (force + [ + [ s (con bytestring #00) ] + (delay + [ + (lam _ (error )) + [ + [ + (force (builtin trace)) + (con string "NameError: a") + ] + (con unit ()) + ] + ] + ) + ] + ) + ) + [ + (lam + s + [ + (lam + s + [ + [ + [ + (lam + op + [ + (lam g [ g g ]) + (lam + fold + (lam + xs + (lam + a + (force + [ + [ + [ + (force + (builtin + ifThenElse + ) + ) + [ + (force + (builtin + nullList + ) + ) + xs + ] + ] + (delay a) + ] + (delay + [ + [ + [ + fold + fold + ] + [ + (force + (builtin + tailList + ) + ) + xs + ] + ] + [ + [ op a ] + [ + (force + (builtin + headList + ) + ) + xs + ] + ] + ] + ) + ] + ) + ) + ) + ) + ] + ) + (lam + s + (lam + e + [ + (lam + s + [ + (lam + s + (lam + x + (lam + def + (force + [ + [ + [ + (force + (builtin + ifThenElse + ) + ) + [ + [ + (builtin + equalsByteString + ) + x + ] + (con + bytestring + #01 + ) + ] + ] + (delay + (delay + [ + (lam + s + [ + [ + (lam + s + (force + [ + [ + s + (con + bytestring + #03 + ) + ] + (delay + [ + (lam + _ + (error + + ) + ) + [ + [ + (force + (builtin + trace + ) + ) + (con + string + "NameError: 1_tup" + ) + ] + (con + unit + () + ) + ] + ] + ) + ] + ) + ) + s + ] + (lam + v0 + (lam + v1 + (force + v1 + ) + ) + ) + ] + ) + s + ] + ) + ) + ] + (delay + [ + [ + s x + ] + def + ] + ) + ] + ) + ) + ) + ) + [ + (lam + s + (lam + x + (lam + def + (force + [ + [ + [ + (force + (builtin + ifThenElse + ) + ) + [ + [ + (builtin + equalsByteString + ) + x + ] + (con + bytestring + #00 + ) + ] + ] + (delay + (delay + [ + (lam + s + [ + [ + (lam + s + (force + [ + [ + s + (con + bytestring + #03 + ) + ] + (delay + [ + (lam + _ + (error + + ) + ) + [ + [ + (force + (builtin + trace + ) + ) + (con + string + "NameError: 1_tup" + ) + ] + (con + unit + () + ) + ] + ] + ) + ] + ) + ) + s + ] + (lam + v0 + (lam + v1 + (force + v0 + ) + ) + ) + ] + ) + s + ] + ) + ) + ] + (delay + [ + [ + s + x + ] + def + ] + ) + ] + ) + ) + ) + ) + [ + (lam + s + (lam + x + (lam + def + (force + [ + [ + [ + (force + (builtin + ifThenElse + ) + ) + [ + [ + (builtin + equalsByteString + ) + x + ] + (con + bytestring + #03 + ) + ] + ] + (delay + (delay + [ + (lam + s + (lam + __f__ + [ + [ + __f__ + (delay + [ + (lam + s + (force + [ + [ + s + (con + bytestring + #01 + ) + ] + (delay + [ + (lam + _ + (error + + ) + ) + [ + [ + (force + (builtin + trace + ) + ) + (con + string + "NameError: b" + ) + ] + (con + unit + () + ) + ] + ] + ) + ] + ) + ) + s + ] + ) + ] + (delay + [ + (lam + s + [ + [ + (builtin + addInteger + ) + [ + (lam + s + (force + [ + [ + s + (con + bytestring + #00 + ) + ] + (delay + [ + (lam + _ + (error + + ) + ) + [ + [ + (force + (builtin + trace + ) + ) + (con + string + "NameError: a" + ) + ] + (con + unit + () + ) + ] + ] + ) + ] + ) + ) + s + ] + ] + [ + (lam + s + (force + [ + [ + s + (con + bytestring + #01 + ) + ] + (delay + [ + (lam + _ + (error + + ) + ) + [ + [ + (force + (builtin + trace + ) + ) + (con + string + "NameError: b" + ) + ] + (con + unit + () + ) + ] + ] + ) + ] + ) + ) + s + ] + ] + ) + s + ] + ) + ] + ) + ) + s + ] + ) + ) + ] + (delay + [ + [ + s + x + ] + def + ] + ) + ] + ) + ) + ) + ) + s + ] + ] + ] + ) + (lam + x + (lam + def + (force + [ + [ + [ + (force + (builtin + ifThenElse + ) + ) + [ + [ + (builtin + equalsByteString + ) + x + ] + (con + bytestring + #07 + ) + ] + ] + (delay + (delay e) + ) + ] + (delay + [ + [ s x ] def + ] + ) + ] + ) + ) + ) + ] + ) + ) + ] + [ + (lam + s + [ + [ + [ + (lam + s + (force + [ + [ + s + (con + bytestring + #04 + ) + ] + (delay + [ + (lam + _ + (error ) + ) + [ + [ + (force + (builtin + trace + ) + ) + (con + string + "NameError: range" + ) + ] + (con + unit + () + ) + ] + ] + ) + ] + ) + ) + s + ] + [ + (lam + s + (force + [ + [ + s + (con + bytestring + #05 + ) + ] + (delay + [ + (lam + _ + (error ) + ) + [ + [ + (force + (builtin + trace + ) + ) + (con + string + "NameError: n" + ) + ] + (con + unit + () + ) + ] + ] + ) + ] + ) + ) + s + ] + ] + s + ] + ) + s + ] + ] + s + ] + ) + [ + (lam + s + (lam + x + (lam + def + (force + [ + [ + [ + (force + (builtin ifThenElse) + ) + [ + [ + (builtin + equalsByteString + ) + x + ] + (con bytestring #01) + ] + ] + (delay + (delay + [ + (lam + s + [ + [ + (lam + s + (force + [ + [ + s + (con + bytestring + #02 + ) + ] + (delay + [ + (lam + _ + (error + + ) + ) + [ + [ + (force + (builtin + trace + ) + ) + (con + string + "NameError: 0_tup" + ) + ] + (con + unit + () + ) + ] + ] + ) + ] + ) + ) + s + ] + (lam + v0 + (lam + v1 + (force v1) + ) + ) + ] + ) + s + ] + ) + ) + ] + (delay [ [ s x ] def ]) + ] + ) + ) + ) + ) + [ + (lam + s + (lam + x + (lam + def + (force + [ + [ + [ + (force + (builtin + ifThenElse + ) + ) + [ + [ + (builtin + equalsByteString + ) + x + ] + (con + bytestring + #00 + ) + ] + ] + (delay + (delay + [ + (lam + s + [ + [ + (lam + s + (force + [ + [ + s + (con + bytestring + #02 + ) + ] + (delay + [ + (lam + _ + (error + + ) + ) + [ + [ + (force + (builtin + trace + ) + ) + (con + string + "NameError: 0_tup" + ) + ] + (con + unit + () + ) + ] + ] + ) + ] + ) + ) + s + ] + (lam + v0 + (lam + v1 + (force + v0 + ) + ) + ) + ] + ) + s + ] + ) + ) + ] + (delay [ [ s x ] def ]) + ] + ) + ) + ) + ) + [ + (lam + s + (lam + x + (lam + def + (force + [ + [ + [ + (force + (builtin + ifThenElse + ) + ) + [ + [ + (builtin + equalsByteString + ) + x + ] + (con + bytestring + #02 + ) + ] + ] + (delay + (delay + [ + (lam + s + (lam + __f__ + [ + [ + __f__ + (delay + [ + (lam + s + (con + integer + 0 + ) + ) + s + ] + ) + ] + (delay + [ + (lam + s + (con + integer + 1 + ) + ) + s + ] + ) + ] + ) + ) + s + ] + ) + ) + ] + (delay + [ [ s x ] def ] + ) + ] + ) + ) + ) + ) + s + ] + ] + ] + ] + ) + (lam + x + (lam + def + (force + [ + [ + [ + (force (builtin ifThenElse)) + [ + [ + (builtin equalsByteString) + x + ] + (con bytestring #05) + ] + ] + (delay (delay p0)) + ] + (delay [ [ s x ] def ]) + ] + ) + ) + ) + ] + ] + ) + ) + ) + ) + ] + (delay [ [ s x ] def ]) + ] + ) + ) + ) + ) + [ + (lam + s + (lam + x + (lam + def + (force + [ + [ + [ + (force (builtin ifThenElse)) + [ + [ (builtin equalsByteString) x ] + (con bytestring #04) + ] + ] + (delay + (delay + [ + (lam + _ + (lam + limit + (lam + _ + [ + [ + [ + (lam + limit + (lam + step + [ + (lam g [ g g ]) + (lam + f + (lam + cur + (force + [ + [ + [ + (force + (builtin + ifThenElse + ) + ) + [ + [ + (builtin + lessThanInteger + ) + cur + ] + limit + ] + ] + (delay + [ + [ + (force + (builtin + mkCons + ) + ) + cur + ] + [ + [ f f ] + [ + [ + (builtin + addInteger + ) + cur + ] + step + ] + ] + ] + ) + ] + (delay + (con + list + + [] + ) + ) + ] + ) + ) + ) + ] + ) + ) + limit + ] + (con integer 1) + ] + (con integer 0) + ] + ) + ) + ) + s + ] + ) + ) + ] + (delay [ [ s x ] def ]) + ] + ) + ) + ) + ) + s + ] + ] + ) + (lam x (lam def def)) + ] + ] + ] + ) +) \ No newline at end of file