mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-28 22:34:45 +00:00
represent bool closure as unit
This commit is contained in:
parent
6741d93517
commit
441eb02ca3
3 changed files with 50 additions and 32 deletions
|
@ -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, ..
|
||||
|
|
|
@ -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
|
||||
);
|
||||
}
|
||||
|
|
|
@ -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:
|
||||
let Test.14 = CallByName Test.3 Test.9;
|
||||
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;
|
||||
|
||||
|
||||
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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue