From 79099675d4694199763549d92847d4a0c5831ce2 Mon Sep 17 00:00:00 2001 From: rvcas Date: Thu, 15 Aug 2024 12:24:21 -0400 Subject: [PATCH] fix: free unique on purpose arg --- crates/aiken-lang/src/gen_uplc.rs | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/crates/aiken-lang/src/gen_uplc.rs b/crates/aiken-lang/src/gen_uplc.rs index 367c4f04..233dbd5c 100644 --- a/crates/aiken-lang/src/gen_uplc.rs +++ b/crates/aiken-lang/src/gen_uplc.rs @@ -363,11 +363,36 @@ impl<'a> CodeGenerator<'a> { }); } + // let purpose_arg = __purpose_arg__ + if let Some(arg_name) = purpose_arg.get_variable_name() { + then.push(TypedExpr::Assignment { + location: Span::empty(), + tipo: purpose_arg.tipo.clone(), + value: TypedExpr::Var { + location: Span::empty(), + constructor: ValueConstructor { + public: true, + variant: ValueConstructorVariant::LocalVariable { + location: Span::empty(), + }, + tipo: data(), + }, + name: "__purpose_arg__".to_string(), + } + .into(), + pattern: TypedPattern::Var { + location: Span::empty(), + name: arg_name.to_string(), + }, + kind: AssignmentKind::let_(), + }); + } + // let last_arg_name = __transaction__ if let Some(arg_name) = transaction.get_variable_name() { then.push(TypedExpr::Assignment { location: Span::empty(), - tipo: purpose_arg.tipo.clone(), + tipo: transaction.tipo.clone(), value: TypedExpr::Var { location: Span::empty(), constructor: ValueConstructor {