From d1ca85c4bca336a810237d43da9b9caf887f5c25 Mon Sep 17 00:00:00 2001 From: Kasey White Date: Thu, 16 Feb 2023 14:31:04 -0500 Subject: [PATCH] feat: add support for assign and nested assign My formatter is not working :'( --- crates/aiken-lang/src/builder.rs | 6 +++++- crates/aiken-lang/src/uplc.rs | 14 +++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/crates/aiken-lang/src/builder.rs b/crates/aiken-lang/src/builder.rs index 063c623f..876626f3 100644 --- a/crates/aiken-lang/src/builder.rs +++ b/crates/aiken-lang/src/builder.rs @@ -1058,7 +1058,11 @@ pub fn check_when_pattern_needs( Pattern::Discard { .. } => { *clause_properties.needs_constr_var() = true; } - _ => todo!("{pattern:#?}"), + Pattern::Assign { pattern, .. } => { + *clause_properties.needs_constr_var() = true; + + check_when_pattern_needs(pattern, clause_properties) + } } } diff --git a/crates/aiken-lang/src/uplc.rs b/crates/aiken-lang/src/uplc.rs index cb8f186c..c055bcaf 100644 --- a/crates/aiken-lang/src/uplc.rs +++ b/crates/aiken-lang/src/uplc.rs @@ -1574,7 +1574,19 @@ impl<'a> CodeGenerator<'a> { Some(item_name) } - Pattern::Assign { .. } => todo!("Nested assign is not yet done"), + Pattern::Assign { name, pattern, .. } => { + + + let inner_name = self.nested_pattern_ir_and_label(pattern, pattern_vec, pattern_type, scope.clone(), final_clause); + + pattern_vec.push(Air::Let { scope: scope.clone(), name: name.clone() }); + + pattern_vec.push(Air::Var { scope, constructor: ValueConstructor::public(pattern_type.clone(), ValueConstructorVariant::LocalVariable { location: Span::empty() }), name: inner_name.clone().unwrap(), variant_name: String::new() }); + + + + inner_name + } Pattern::Int { .. } => todo!("Nested pattern-match on integers isn't implemented yet. Use when clause-guard as an alternative, or break down the pattern."), } }