diff --git a/crates/aiken-lang/src/uplc.rs b/crates/aiken-lang/src/uplc.rs index 0e451146..31407969 100644 --- a/crates/aiken-lang/src/uplc.rs +++ b/crates/aiken-lang/src/uplc.rs @@ -756,12 +756,29 @@ impl<'a> CodeGenerator<'a> { scope.clone(), ); - ir_stack.push(Air::Clause { - scope, - tipo: subject_type.clone(), - complex_clause: *clause_properties.is_complex_clause(), - subject_name, - }); + let data_type = + lookup_data_type_by_tipo(self.data_types.clone(), &subject_type).unwrap(); + + if data_type.constructors.len() > 1 { + ir_stack.push(Air::Clause { + scope, + tipo: subject_type.clone(), + complex_clause: *clause_properties.is_complex_clause(), + subject_name, + }); + } else { + ir_stack.push(Air::Clause { + scope: scope.clone(), + tipo: subject_type.clone(), + complex_clause: *clause_properties.is_complex_clause(), + subject_name, + }); + + ir_stack.push(Air::Int { + scope, + value: "0".to_string(), + }); + } } ClauseProperties::ListClause { original_subject_name, diff --git a/examples/acceptance_tests/040/lib/tests.ak b/examples/acceptance_tests/040/lib/tests.ak index 0367517b..23903b7c 100644 --- a/examples/acceptance_tests/040/lib/tests.ak +++ b/examples/acceptance_tests/040/lib/tests.ak @@ -73,3 +73,12 @@ test single_field_expect() { expect CreateVoteBatch { id } = redeemer id == #"" } + +test single_when() { + let redeemer = CreateVoteBatch { id: #"" } + let x = when redeemer is { + CreateVoteBatch { id } -> id == #"" + _ -> False + } + x == True +}