diff --git a/compiler/mono/src/layout.rs b/compiler/mono/src/layout.rs index a8264c926f..395693e984 100644 --- a/compiler/mono/src/layout.rs +++ b/compiler/mono/src/layout.rs @@ -416,7 +416,11 @@ impl<'a> LambdaSet<'a> { match variant { Never => Layout::Union(UnionLayout::NonRecursive(&[])), Unit | UnitWithArguments => Layout::Struct(&[]), - BoolUnion { .. } => Layout::Builtin(Builtin::Int1), + BoolUnion { .. } => { + // Layout::Builtin(Builtin::Int1), + + Layout::Struct(&[]) + } ByteUnion(_) => Layout::Builtin(Builtin::Int8), Newtype { arguments: layouts, .. diff --git a/compiler/test_gen/src/gen_primitives.rs b/compiler/test_gen/src/gen_primitives.rs index 745cdb487f..ad04453610 100644 --- a/compiler/test_gen/src/gen_primitives.rs +++ b/compiler/test_gen/src/gen_primitives.rs @@ -2552,3 +2552,27 @@ fn mirror_llvm_alignment_padding() { RocStr ); } + +#[test] +fn code_gen_unified_closure() { + assert_evals_to!( + indoc!( + r#" + app "test" provides [ main ] to "./platform" + + p1 = (\u -> u == 97) + p2 = (\u -> u == 98) + + main : I64 + main = + oneOfResult = List.map [p1, p2] (\p -> p 42) + + when oneOfResult is + _ -> 32 + + "# + ), + 32, + i64 + ); +} diff --git a/compiler/test_mono/generated/somehow_drops_definitions.txt b/compiler/test_mono/generated/somehow_drops_definitions.txt index da1f049ed5..1d512320fa 100644 --- a/compiler/test_mono/generated/somehow_drops_definitions.txt +++ b/compiler/test_mono/generated/somehow_drops_definitions.txt @@ -1,53 +1,43 @@ procedure Num.24 (#Attr.2, #Attr.3): - let Test.28 = lowlevel NumAdd #Attr.2 #Attr.3; - ret Test.28; + let Test.25 = lowlevel NumAdd #Attr.2 #Attr.3; + ret Test.25; procedure Num.26 (#Attr.2, #Attr.3): - let Test.22 = lowlevel NumMul #Attr.2 #Attr.3; - ret Test.22; + let Test.19 = lowlevel NumMul #Attr.2 #Attr.3; + ret Test.19; procedure Test.1 (): - let Test.30 = 1i64; - ret Test.30; + let Test.27 = 1i64; + ret Test.27; procedure Test.2 (): - let Test.24 = 2i64; - ret Test.24; + let Test.21 = 2i64; + ret Test.21; procedure Test.3 (Test.6): - let Test.27 = CallByName Test.1; - let Test.26 = CallByName Num.24 Test.6 Test.27; - ret Test.26; + let Test.24 = CallByName Test.1; + let Test.23 = CallByName Num.24 Test.6 Test.24; + ret Test.23; procedure Test.4 (Test.7): - let Test.21 = CallByName Test.2; - let Test.20 = CallByName Num.26 Test.7 Test.21; - ret Test.20; + let Test.18 = CallByName Test.2; + let Test.17 = CallByName Num.26 Test.7 Test.18; + ret Test.17; procedure Test.5 (Test.8, Test.9): - joinpoint Test.15 Test.14: - ret Test.14; - in - switch Test.8: - case 0: - let Test.16 = CallByName Test.3 Test.9; - jump Test.15 Test.16; - - default: - let Test.17 = CallByName Test.4 Test.9; - jump Test.15 Test.17; - + let Test.14 = CallByName Test.3 Test.9; + ret Test.14; procedure Test.0 (): - joinpoint Test.19 Test.12: + joinpoint Test.16 Test.12: let Test.13 = 42i64; let Test.11 = CallByName Test.5 Test.12 Test.13; ret Test.11; in - let Test.25 = true; - if Test.25 then + let Test.22 = true; + if Test.22 then let Test.3 = Struct {}; - jump Test.19 Test.3; + jump Test.16 Test.3; else let Test.4 = Struct {}; - jump Test.19 Test.4; + jump Test.16 Test.4;