mono tests

This commit is contained in:
Folkert 2021-05-24 14:41:37 +02:00
parent ffa680ddbc
commit 53a4af99f4

View file

@ -240,18 +240,18 @@ mod test_mono {
indoc!( indoc!(
r#" r#"
procedure Test.0 (): procedure Test.0 ():
let Test.9 = 0i64; let Test.10 = 0i64;
let Test.8 = 3i64; let Test.9 = 3i64;
let Test.2 = Just Test.9 Test.8; let Test.3 = Just Test.10 Test.9;
let Test.5 = 0i64; let Test.6 = 0i64;
let Test.6 = Index 0 Test.2; let Test.7 = Index 0 Test.3;
let Test.7 = lowlevel Eq Test.5 Test.6; let Test.8 = lowlevel Eq Test.6 Test.7;
if Test.7 then if Test.8 then
let Test.1 = Index 1 Test.2; let Test.2 = Index 1 Test.3;
ret Test.1; ret Test.2;
else else
let Test.4 = 0i64; let Test.5 = 0i64;
ret Test.4; ret Test.5;
"# "#
), ),
) )
@ -269,23 +269,23 @@ mod test_mono {
indoc!( indoc!(
r#" r#"
procedure Test.0 (): procedure Test.0 ():
let Test.10 = 1i64; let Test.11 = 1i64;
let Test.8 = 1i64; let Test.9 = 1i64;
let Test.9 = 2i64; let Test.10 = 2i64;
let Test.4 = These Test.10 Test.8 Test.9; let Test.5 = These Test.11 Test.9 Test.10;
switch Test.4: switch Test.5:
case 2: case 2:
let Test.1 = Index 1 Test.4; let Test.2 = Index 1 Test.5;
ret Test.1;
case 0:
let Test.2 = Index 1 Test.4;
ret Test.2; ret Test.2;
default: case 0:
let Test.3 = Index 1 Test.4; let Test.3 = Index 1 Test.5;
ret Test.3; ret Test.3;
default:
let Test.4 = Index 1 Test.5;
ret Test.4;
"# "#
), ),
) )
@ -435,24 +435,24 @@ mod test_mono {
indoc!( indoc!(
r#" r#"
procedure Num.24 (#Attr.2, #Attr.3): procedure Num.24 (#Attr.2, #Attr.3):
let Test.5 = lowlevel NumAdd #Attr.2 #Attr.3; let Test.6 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Test.5; ret Test.6;
procedure Test.0 (): procedure Test.0 ():
let Test.11 = 0i64; let Test.12 = 0i64;
let Test.10 = 41i64; let Test.11 = 41i64;
let Test.1 = Just Test.11 Test.10; let Test.1 = Just Test.12 Test.11;
let Test.7 = 0i64; let Test.8 = 0i64;
let Test.8 = Index 0 Test.1; let Test.9 = Index 0 Test.1;
let Test.9 = lowlevel Eq Test.7 Test.8; let Test.10 = lowlevel Eq Test.8 Test.9;
if Test.9 then if Test.10 then
let Test.2 = Index 1 Test.1; let Test.3 = Index 1 Test.1;
let Test.4 = 1i64; let Test.5 = 1i64;
let Test.3 = CallByName Num.24 Test.2 Test.4; let Test.4 = CallByName Num.24 Test.3 Test.5;
ret Test.3; ret Test.4;
else else
let Test.6 = 1i64; let Test.7 = 1i64;
ret Test.6; ret Test.7;
"# "#
), ),
) )
@ -470,8 +470,8 @@ mod test_mono {
indoc!( indoc!(
r#" r#"
procedure Test.0 (): procedure Test.0 ():
let Test.3 = 2i64; let Test.4 = 2i64;
let Test.1 = Struct {Test.3}; let Test.1 = Struct {Test.4};
ret Test.1; ret Test.1;
"# "#
), ),
@ -491,31 +491,31 @@ mod test_mono {
"#, "#,
indoc!( indoc!(
r#" r#"
procedure Test.1 (Test.2): procedure Test.1 (Test.3):
let Test.5 = 2i64; let Test.6 = 2i64;
joinpoint Test.11: joinpoint Test.12:
let Test.9 = 0i64; let Test.10 = 0i64;
ret Test.9; ret Test.10;
in in
let Test.10 = 2i64; let Test.11 = 2i64;
let Test.13 = lowlevel Eq Test.10 Test.5; let Test.14 = lowlevel Eq Test.11 Test.6;
if Test.13 then if Test.14 then
joinpoint Test.7 Test.12: joinpoint Test.8 Test.13:
if Test.12 then if Test.13 then
let Test.6 = 42i64; let Test.7 = 42i64;
ret Test.6; ret Test.7;
else else
jump Test.11; jump Test.12;
in in
let Test.8 = false; let Test.9 = false;
jump Test.7 Test.8; jump Test.8 Test.9;
else else
jump Test.11; jump Test.12;
procedure Test.0 (): procedure Test.0 ():
let Test.4 = Struct {}; let Test.5 = Struct {};
let Test.3 = CallByName Test.1 Test.4; let Test.4 = CallByName Test.1 Test.5;
ret Test.3; ret Test.4;
"# "#
), ),
) )
@ -562,37 +562,37 @@ mod test_mono {
indoc!( indoc!(
r#" r#"
procedure Num.24 (#Attr.2, #Attr.3): procedure Num.24 (#Attr.2, #Attr.3):
let Test.6 = lowlevel NumAdd #Attr.2 #Attr.3; let Test.8 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Test.6; ret Test.8;
procedure Test.0 (): procedure Test.0 ():
let Test.18 = 0i64;
let Test.20 = 0i64; let Test.20 = 0i64;
let Test.19 = 41i64; let Test.22 = 0i64;
let Test.17 = Just Test.20 Test.19; let Test.21 = 41i64;
let Test.2 = Just Test.18 Test.17; let Test.19 = Just Test.22 Test.21;
joinpoint Test.14: let Test.2 = Just Test.20 Test.19;
let Test.8 = 1i64; joinpoint Test.16:
ret Test.8; let Test.10 = 1i64;
ret Test.10;
in in
let Test.12 = 0i64; let Test.14 = 0i64;
let Test.13 = Index 0 Test.2; let Test.15 = Index 0 Test.2;
let Test.16 = lowlevel Eq Test.12 Test.13; let Test.18 = lowlevel Eq Test.14 Test.15;
if Test.16 then if Test.18 then
let Test.9 = Index 1 Test.2; let Test.11 = Index 1 Test.2;
let Test.10 = 0i64; let Test.12 = 0i64;
let Test.11 = Index 0 Test.9; let Test.13 = Index 0 Test.11;
let Test.15 = lowlevel Eq Test.10 Test.11; let Test.17 = lowlevel Eq Test.12 Test.13;
if Test.15 then if Test.17 then
let Test.7 = Index 1 Test.2; let Test.9 = Index 1 Test.2;
let Test.3 = Index 1 Test.7; let Test.5 = Index 1 Test.9;
let Test.5 = 1i64; let Test.7 = 1i64;
let Test.4 = CallByName Num.24 Test.3 Test.5; let Test.6 = CallByName Num.24 Test.5 Test.7;
ret Test.4; ret Test.6;
else else
jump Test.14; jump Test.16;
else else
jump Test.14; jump Test.16;
"# "#
), ),
) )
@ -609,33 +609,33 @@ mod test_mono {
indoc!( indoc!(
r#" r#"
procedure Num.24 (#Attr.2, #Attr.3): procedure Num.24 (#Attr.2, #Attr.3):
let Test.6 = lowlevel NumAdd #Attr.2 #Attr.3; let Test.7 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Test.6; ret Test.7;
procedure Test.0 (): procedure Test.0 ():
let Test.15 = 3i64; let Test.16 = 3i64;
let Test.14 = 2i64; let Test.15 = 2i64;
let Test.3 = Struct {Test.14, Test.15}; let Test.4 = Struct {Test.15, Test.16};
joinpoint Test.11: joinpoint Test.12:
let Test.1 = Index 0 Test.3; let Test.2 = Index 0 Test.4;
let Test.2 = Index 1 Test.3; let Test.3 = Index 1 Test.4;
let Test.5 = CallByName Num.24 Test.1 Test.2; let Test.6 = CallByName Num.24 Test.2 Test.3;
ret Test.5; ret Test.6;
in in
let Test.9 = Index 1 Test.3; let Test.10 = Index 1 Test.4;
let Test.10 = 3i64; let Test.11 = 3i64;
let Test.13 = lowlevel Eq Test.10 Test.9; let Test.14 = lowlevel Eq Test.11 Test.10;
if Test.13 then if Test.14 then
let Test.7 = Index 0 Test.3; let Test.8 = Index 0 Test.4;
let Test.8 = 4i64; let Test.9 = 4i64;
let Test.12 = lowlevel Eq Test.8 Test.7; let Test.13 = lowlevel Eq Test.9 Test.8;
if Test.12 then if Test.13 then
let Test.4 = 9i64; let Test.5 = 9i64;
ret Test.4; ret Test.5;
else else
jump Test.11; jump Test.12;
else else
jump Test.11; jump Test.12;
"# "#
), ),
) )
@ -782,29 +782,29 @@ mod test_mono {
"#, "#,
indoc!( indoc!(
r#" r#"
procedure Test.1 (Test.4): procedure Test.1 (Test.5):
let Test.2 = 0u8; let Test.2 = 0u8;
joinpoint Test.8 Test.3: joinpoint Test.9 Test.3:
ret Test.3; ret Test.3;
in in
switch Test.2: switch Test.2:
case 1: case 1:
let Test.9 = 1i64; let Test.10 = 1i64;
jump Test.8 Test.9; jump Test.9 Test.10;
case 2: case 2:
let Test.10 = 2i64; let Test.11 = 2i64;
jump Test.8 Test.10; jump Test.9 Test.11;
default: default:
let Test.11 = 3i64; let Test.12 = 3i64;
jump Test.8 Test.11; jump Test.9 Test.12;
procedure Test.0 (): procedure Test.0 ():
let Test.6 = Struct {}; let Test.7 = Struct {};
let Test.5 = CallByName Test.1 Test.6; let Test.6 = CallByName Test.1 Test.7;
ret Test.5; ret Test.6;
"# "#
), ),
) )
@ -822,13 +822,13 @@ mod test_mono {
indoc!( indoc!(
r#" r#"
procedure Test.0 (): procedure Test.0 ():
let Test.2 = true; let Test.3 = true;
if Test.2 then if Test.3 then
let Test.3 = 1i64; let Test.4 = 1i64;
ret Test.3; ret Test.4;
else else
let Test.1 = 2i64; let Test.2 = 2i64;
ret Test.1; ret Test.2;
"# "#
), ),
) )
@ -848,18 +848,18 @@ mod test_mono {
indoc!( indoc!(
r#" r#"
procedure Test.0 (): procedure Test.0 ():
let Test.4 = true; let Test.6 = true;
if Test.4 then if Test.6 then
let Test.5 = 1i64; let Test.7 = 1i64;
ret Test.5; ret Test.7;
else else
let Test.2 = false; let Test.4 = false;
if Test.2 then if Test.4 then
let Test.3 = 2i64; let Test.5 = 2i64;
ret Test.3; ret Test.5;
else else
let Test.1 = 3i64; let Test.3 = 3i64;
ret Test.1; ret Test.3;
"# "#
), ),
) )
@ -884,34 +884,34 @@ mod test_mono {
"#, "#,
indoc!( indoc!(
r#" r#"
procedure Test.1 (Test.4): procedure Test.1 (Test.5):
let Test.19 = 1i64; let Test.20 = 1i64;
let Test.18 = 2i64; let Test.19 = 2i64;
let Test.2 = Ok Test.19 Test.18; let Test.2 = Ok Test.20 Test.19;
joinpoint Test.8 Test.3: joinpoint Test.9 Test.3:
ret Test.3; ret Test.3;
in in
let Test.15 = 1i64; let Test.16 = 1i64;
let Test.16 = Index 0 Test.2; let Test.17 = Index 0 Test.2;
let Test.17 = lowlevel Eq Test.15 Test.16; let Test.18 = lowlevel Eq Test.16 Test.17;
if Test.17 then if Test.18 then
let Test.12 = Index 1 Test.2; let Test.13 = Index 1 Test.2;
let Test.13 = 3i64; let Test.14 = 3i64;
let Test.14 = lowlevel Eq Test.13 Test.12; let Test.15 = lowlevel Eq Test.14 Test.13;
if Test.14 then if Test.15 then
let Test.9 = 1i64; let Test.10 = 1i64;
jump Test.8 Test.9; jump Test.9 Test.10;
else else
let Test.10 = 2i64; let Test.11 = 2i64;
jump Test.8 Test.10; jump Test.9 Test.11;
else else
let Test.11 = 3i64; let Test.12 = 3i64;
jump Test.8 Test.11; jump Test.9 Test.12;
procedure Test.0 (): procedure Test.0 ():
let Test.6 = Struct {}; let Test.7 = Struct {};
let Test.5 = CallByName Test.1 Test.6; let Test.6 = CallByName Test.1 Test.7;
ret Test.5; ret Test.6;
"# "#
), ),
) )
@ -1373,70 +1373,70 @@ mod test_mono {
indoc!( indoc!(
r#" r#"
procedure List.3 (#Attr.2, #Attr.3): procedure List.3 (#Attr.2, #Attr.3):
let Test.38 = lowlevel ListLen #Attr.2; let Test.39 = lowlevel ListLen #Attr.2;
let Test.34 = lowlevel NumLt #Attr.3 Test.38; let Test.35 = lowlevel NumLt #Attr.3 Test.39;
if Test.34 then if Test.35 then
let Test.37 = 1i64; let Test.38 = 1i64;
let Test.36 = lowlevel ListGetUnsafe #Attr.2 #Attr.3; let Test.37 = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
let Test.35 = Ok Test.37 Test.36; let Test.36 = Ok Test.38 Test.37;
ret Test.35; ret Test.36;
else else
let Test.33 = 0i64; let Test.34 = 0i64;
let Test.32 = Struct {}; let Test.33 = Struct {};
let Test.31 = Err Test.33 Test.32; let Test.32 = Err Test.34 Test.33;
ret Test.31; ret Test.32;
procedure List.4 (#Attr.2, #Attr.3, #Attr.4): procedure List.4 (#Attr.2, #Attr.3, #Attr.4):
let Test.14 = lowlevel ListLen #Attr.2; let Test.15 = lowlevel ListLen #Attr.2;
let Test.12 = lowlevel NumLt #Attr.3 Test.14; let Test.13 = lowlevel NumLt #Attr.3 Test.15;
if Test.12 then if Test.13 then
let Test.13 = lowlevel ListSet #Attr.2 #Attr.3 #Attr.4; let Test.14 = lowlevel ListSet #Attr.2 #Attr.3 #Attr.4;
ret Test.13; ret Test.14;
else else
ret #Attr.2; ret #Attr.2;
procedure Test.1 (Test.2): procedure Test.1 (Test.2):
let Test.39 = 0i64; let Test.40 = 0i64;
let Test.29 = CallByName List.3 Test.2 Test.39; let Test.30 = CallByName List.3 Test.2 Test.40;
let Test.30 = 0i64; let Test.31 = 0i64;
let Test.28 = CallByName List.3 Test.2 Test.30; let Test.29 = CallByName List.3 Test.2 Test.31;
let Test.7 = Struct {Test.28, Test.29}; let Test.8 = Struct {Test.29, Test.30};
joinpoint Test.25: joinpoint Test.26:
let Test.18 = Array []; let Test.19 = Array [];
ret Test.18; ret Test.19;
in in
let Test.22 = Index 1 Test.7; let Test.23 = Index 1 Test.8;
let Test.23 = 1i64; let Test.24 = 1i64;
let Test.24 = Index 0 Test.22; let Test.25 = Index 0 Test.23;
let Test.27 = lowlevel Eq Test.23 Test.24; let Test.28 = lowlevel Eq Test.24 Test.25;
if Test.27 then if Test.28 then
let Test.19 = Index 0 Test.7; let Test.20 = Index 0 Test.8;
let Test.20 = 1i64; let Test.21 = 1i64;
let Test.21 = Index 0 Test.19; let Test.22 = Index 0 Test.20;
let Test.26 = lowlevel Eq Test.20 Test.21; let Test.27 = lowlevel Eq Test.21 Test.22;
if Test.26 then if Test.27 then
let Test.17 = Index 0 Test.7; let Test.18 = Index 0 Test.8;
let Test.3 = Index 1 Test.17; let Test.4 = Index 1 Test.18;
let Test.16 = Index 1 Test.7; let Test.17 = Index 1 Test.8;
let Test.4 = Index 1 Test.16; let Test.5 = Index 1 Test.17;
let Test.15 = 0i64; let Test.16 = 0i64;
let Test.9 = CallByName List.4 Test.2 Test.15 Test.4; let Test.10 = CallByName List.4 Test.2 Test.16 Test.5;
let Test.10 = 0i64; let Test.11 = 0i64;
let Test.8 = CallByName List.4 Test.9 Test.10 Test.3; let Test.9 = CallByName List.4 Test.10 Test.11 Test.4;
ret Test.8; ret Test.9;
else else
dec Test.2; dec Test.2;
jump Test.25; jump Test.26;
else else
dec Test.2; dec Test.2;
jump Test.25; jump Test.26;
procedure Test.0 (): procedure Test.0 ():
let Test.40 = 1i64; let Test.41 = 1i64;
let Test.41 = 2i64; let Test.42 = 2i64;
let Test.6 = Array [Test.40, Test.41]; let Test.7 = Array [Test.41, Test.42];
let Test.5 = CallByName Test.1 Test.6; let Test.6 = CallByName Test.1 Test.7;
ret Test.5; ret Test.6;
"# "#
), ),
) )
@ -1707,16 +1707,16 @@ mod test_mono {
r#" r#"
procedure Test.1 (Test.2): procedure Test.1 (Test.2):
inc Test.2; inc Test.2;
let Test.5 = Struct {Test.2, Test.2}; let Test.6 = Struct {Test.2, Test.2};
ret Test.5; ret Test.6;
procedure Test.0 (): procedure Test.0 ():
let Test.6 = 1i64; let Test.7 = 1i64;
let Test.7 = 2i64; let Test.8 = 2i64;
let Test.8 = 3i64; let Test.9 = 3i64;
let Test.4 = Array [Test.6, Test.7, Test.8]; let Test.5 = Array [Test.7, Test.8, Test.9];
let Test.3 = CallByName Test.1 Test.4; let Test.4 = CallByName Test.1 Test.5;
ret Test.3; ret Test.4;
"# "#
), ),
) )
@ -1885,14 +1885,14 @@ mod test_mono {
indoc!( indoc!(
r#" r#"
procedure Test.0 (): procedure Test.0 ():
let Test.5 = 0i64;
let Test.7 = 0i64;
let Test.9 = 0i64; let Test.9 = 0i64;
let Test.10 = 1i64; let Test.11 = 0i64;
let Test.8 = Z Test.10; let Test.13 = 0i64;
let Test.6 = S Test.9 Test.8; let Test.14 = 1i64;
let Test.4 = S Test.7 Test.6; let Test.12 = Z Test.14;
let Test.2 = S Test.5 Test.4; let Test.10 = S Test.13 Test.12;
let Test.8 = S Test.11 Test.10;
let Test.2 = S Test.9 Test.8;
ret Test.2; ret Test.2;
"# "#
), ),
@ -1917,24 +1917,24 @@ mod test_mono {
indoc!( indoc!(
r#" r#"
procedure Test.0 (): procedure Test.0 ():
let Test.9 = 0i64;
let Test.11 = 0i64;
let Test.13 = 0i64; let Test.13 = 0i64;
let Test.14 = 1i64; let Test.15 = 0i64;
let Test.12 = Z Test.14; let Test.17 = 0i64;
let Test.10 = S Test.13 Test.12; let Test.18 = 1i64;
let Test.8 = S Test.11 Test.10; let Test.16 = Z Test.18;
let Test.2 = S Test.9 Test.8; let Test.14 = S Test.17 Test.16;
let Test.5 = 1i64; let Test.12 = S Test.15 Test.14;
let Test.6 = Index 0 Test.2; let Test.2 = S Test.13 Test.12;
let Test.9 = 1i64;
let Test.10 = Index 0 Test.2;
dec Test.2; dec Test.2;
let Test.7 = lowlevel Eq Test.5 Test.6; let Test.11 = lowlevel Eq Test.9 Test.10;
if Test.7 then if Test.11 then
let Test.3 = 0i64; let Test.7 = 0i64;
ret Test.3; ret Test.7;
else else
let Test.4 = 1i64; let Test.8 = 1i64;
ret Test.4; ret Test.8;
"# "#
), ),
) )
@ -1959,33 +1959,33 @@ mod test_mono {
indoc!( indoc!(
r#" r#"
procedure Test.0 (): procedure Test.0 ():
let Test.15 = 0i64;
let Test.17 = 0i64;
let Test.19 = 0i64; let Test.19 = 0i64;
let Test.20 = 1i64; let Test.21 = 0i64;
let Test.18 = Z Test.20; let Test.23 = 0i64;
let Test.16 = S Test.19 Test.18; let Test.24 = 1i64;
let Test.14 = S Test.17 Test.16; let Test.22 = Z Test.24;
let Test.2 = S Test.15 Test.14; let Test.20 = S Test.23 Test.22;
let Test.11 = 0i64; let Test.18 = S Test.21 Test.20;
let Test.12 = Index 0 Test.2; let Test.2 = S Test.19 Test.18;
let Test.13 = lowlevel Eq Test.11 Test.12; let Test.15 = 0i64;
if Test.13 then let Test.16 = Index 0 Test.2;
let Test.7 = Index 1 Test.2; let Test.17 = lowlevel Eq Test.15 Test.16;
let Test.8 = 0i64; if Test.17 then
let Test.9 = Index 0 Test.7; let Test.11 = Index 1 Test.2;
dec Test.7; let Test.12 = 0i64;
let Test.13 = Index 0 Test.11;
dec Test.11;
decref Test.2; decref Test.2;
let Test.10 = lowlevel Eq Test.8 Test.9; let Test.14 = lowlevel Eq Test.12 Test.13;
if Test.10 then if Test.14 then
let Test.3 = 1i64; let Test.7 = 1i64;
ret Test.3; ret Test.7;
else else
let Test.5 = 0i64; let Test.9 = 0i64;
ret Test.5; ret Test.9;
else else
let Test.6 = 0i64; let Test.10 = 0i64;
ret Test.6; ret Test.10;
"# "#
), ),
) )
@ -2012,14 +2012,14 @@ mod test_mono {
indoc!( indoc!(
r#" r#"
procedure Num.26 (#Attr.2, #Attr.3): procedure Num.26 (#Attr.2, #Attr.3):
let Test.13 = lowlevel NumMul #Attr.2 #Attr.3; let Test.17 = lowlevel NumMul #Attr.2 #Attr.3;
ret Test.13; ret Test.17;
procedure Test.1 (Test.6): procedure Test.1 (Test.6):
let Test.18 = Index 1 Test.6; let Test.22 = Index 1 Test.6;
let Test.19 = false; let Test.23 = false;
let Test.20 = lowlevel Eq Test.19 Test.18; let Test.24 = lowlevel Eq Test.23 Test.22;
if Test.20 then if Test.24 then
let Test.8 = Index 0 Test.6; let Test.8 = Index 0 Test.6;
ret Test.8; ret Test.8;
else else
@ -2027,10 +2027,10 @@ mod test_mono {
ret Test.10; ret Test.10;
procedure Test.1 (Test.6): procedure Test.1 (Test.6):
let Test.29 = Index 0 Test.6; let Test.33 = Index 0 Test.6;
let Test.30 = false; let Test.34 = false;
let Test.31 = lowlevel Eq Test.30 Test.29; let Test.35 = lowlevel Eq Test.34 Test.33;
if Test.31 then if Test.35 then
let Test.8 = 3i64; let Test.8 = 3i64;
ret Test.8; ret Test.8;
else else
@ -2038,24 +2038,24 @@ mod test_mono {
ret Test.10; ret Test.10;
procedure Test.0 (): procedure Test.0 ():
let Test.34 = true; let Test.38 = true;
let Test.33 = Struct {Test.34}; let Test.37 = Struct {Test.38};
let Test.5 = CallByName Test.1 Test.33; let Test.5 = CallByName Test.1 Test.37;
let Test.32 = false; let Test.36 = false;
let Test.26 = Struct {Test.32}; let Test.30 = Struct {Test.36};
let Test.3 = CallByName Test.1 Test.26; let Test.3 = CallByName Test.1 Test.30;
let Test.24 = 11i64; let Test.28 = 11i64;
let Test.25 = true; let Test.29 = true;
let Test.23 = Struct {Test.24, Test.25}; let Test.27 = Struct {Test.28, Test.29};
let Test.4 = CallByName Test.1 Test.23; let Test.4 = CallByName Test.1 Test.27;
let Test.21 = 7i64; let Test.25 = 7i64;
let Test.22 = false; let Test.26 = false;
let Test.15 = Struct {Test.21, Test.22}; let Test.19 = Struct {Test.25, Test.26};
let Test.2 = CallByName Test.1 Test.15; let Test.2 = CallByName Test.1 Test.19;
let Test.14 = CallByName Num.26 Test.2 Test.3; let Test.18 = CallByName Num.26 Test.2 Test.3;
let Test.12 = CallByName Num.26 Test.14 Test.4; let Test.16 = CallByName Num.26 Test.18 Test.4;
let Test.11 = CallByName Num.26 Test.12 Test.5; let Test.15 = CallByName Num.26 Test.16 Test.5;
ret Test.11; ret Test.15;
"# "#
), ),
) )
@ -2079,37 +2079,37 @@ mod test_mono {
indoc!( indoc!(
r#" r#"
procedure Num.24 (#Attr.2, #Attr.3): procedure Num.24 (#Attr.2, #Attr.3):
let Test.6 = lowlevel NumAdd #Attr.2 #Attr.3; let Test.8 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Test.6; ret Test.8;
procedure Test.0 (): procedure Test.0 ():
let Test.18 = 0i64;
let Test.20 = 0i64; let Test.20 = 0i64;
let Test.19 = 41i64; let Test.22 = 0i64;
let Test.17 = Just Test.20 Test.19; let Test.21 = 41i64;
let Test.2 = Just Test.18 Test.17; let Test.19 = Just Test.22 Test.21;
joinpoint Test.14: let Test.2 = Just Test.20 Test.19;
let Test.8 = 1i64; joinpoint Test.16:
ret Test.8; let Test.10 = 1i64;
ret Test.10;
in in
let Test.12 = 0i64; let Test.14 = 0i64;
let Test.13 = Index 0 Test.2; let Test.15 = Index 0 Test.2;
let Test.16 = lowlevel Eq Test.12 Test.13; let Test.18 = lowlevel Eq Test.14 Test.15;
if Test.16 then if Test.18 then
let Test.9 = Index 1 Test.2; let Test.11 = Index 1 Test.2;
let Test.10 = 0i64; let Test.12 = 0i64;
let Test.11 = Index 0 Test.9; let Test.13 = Index 0 Test.11;
let Test.15 = lowlevel Eq Test.10 Test.11; let Test.17 = lowlevel Eq Test.12 Test.13;
if Test.15 then if Test.17 then
let Test.7 = Index 1 Test.2; let Test.9 = Index 1 Test.2;
let Test.3 = Index 1 Test.7; let Test.5 = Index 1 Test.9;
let Test.5 = 1i64; let Test.7 = 1i64;
let Test.4 = CallByName Num.24 Test.3 Test.5; let Test.6 = CallByName Num.24 Test.5 Test.7;
ret Test.4; ret Test.6;
else else
jump Test.14; jump Test.16;
else else
jump Test.14; jump Test.16;
"# "#
), ),
) )
@ -2198,67 +2198,67 @@ mod test_mono {
indoc!( indoc!(
r#" r#"
procedure List.3 (#Attr.2, #Attr.3): procedure List.3 (#Attr.2, #Attr.3):
let Test.40 = lowlevel ListLen #Attr.2; let Test.41 = lowlevel ListLen #Attr.2;
let Test.36 = lowlevel NumLt #Attr.3 Test.40; let Test.37 = lowlevel NumLt #Attr.3 Test.41;
if Test.36 then if Test.37 then
let Test.39 = 1i64; let Test.40 = 1i64;
let Test.38 = lowlevel ListGetUnsafe #Attr.2 #Attr.3; let Test.39 = lowlevel ListGetUnsafe #Attr.2 #Attr.3;
let Test.37 = Ok Test.39 Test.38; let Test.38 = Ok Test.40 Test.39;
ret Test.37; ret Test.38;
else else
let Test.35 = 0i64; let Test.36 = 0i64;
let Test.34 = Struct {}; let Test.35 = Struct {};
let Test.33 = Err Test.35 Test.34; let Test.34 = Err Test.36 Test.35;
ret Test.33; ret Test.34;
procedure List.4 (#Attr.2, #Attr.3, #Attr.4): procedure List.4 (#Attr.2, #Attr.3, #Attr.4):
let Test.18 = lowlevel ListLen #Attr.2; let Test.19 = lowlevel ListLen #Attr.2;
let Test.16 = lowlevel NumLt #Attr.3 Test.18; let Test.17 = lowlevel NumLt #Attr.3 Test.19;
if Test.16 then if Test.17 then
let Test.17 = lowlevel ListSet #Attr.2 #Attr.3 #Attr.4; let Test.18 = lowlevel ListSet #Attr.2 #Attr.3 #Attr.4;
ret Test.17; ret Test.18;
else else
ret #Attr.2; ret #Attr.2;
procedure Test.1 (Test.2, Test.3, Test.4): procedure Test.1 (Test.2, Test.3, Test.4):
let Test.32 = CallByName List.3 Test.4 Test.3; let Test.33 = CallByName List.3 Test.4 Test.3;
let Test.31 = CallByName List.3 Test.4 Test.2; let Test.32 = CallByName List.3 Test.4 Test.2;
let Test.12 = Struct {Test.31, Test.32}; let Test.13 = Struct {Test.32, Test.33};
joinpoint Test.28: joinpoint Test.29:
let Test.21 = Array []; let Test.22 = Array [];
ret Test.21; ret Test.22;
in in
let Test.25 = Index 1 Test.12; let Test.26 = Index 1 Test.13;
let Test.26 = 1i64; let Test.27 = 1i64;
let Test.27 = Index 0 Test.25; let Test.28 = Index 0 Test.26;
let Test.30 = lowlevel Eq Test.26 Test.27; let Test.31 = lowlevel Eq Test.27 Test.28;
if Test.30 then if Test.31 then
let Test.22 = Index 0 Test.12; let Test.23 = Index 0 Test.13;
let Test.23 = 1i64; let Test.24 = 1i64;
let Test.24 = Index 0 Test.22; let Test.25 = Index 0 Test.23;
let Test.29 = lowlevel Eq Test.23 Test.24; let Test.30 = lowlevel Eq Test.24 Test.25;
if Test.29 then if Test.30 then
let Test.20 = Index 0 Test.12; let Test.21 = Index 0 Test.13;
let Test.5 = Index 1 Test.20; let Test.6 = Index 1 Test.21;
let Test.19 = Index 1 Test.12; let Test.20 = Index 1 Test.13;
let Test.6 = Index 1 Test.19; let Test.7 = Index 1 Test.20;
let Test.14 = CallByName List.4 Test.4 Test.2 Test.6; let Test.15 = CallByName List.4 Test.4 Test.2 Test.7;
let Test.13 = CallByName List.4 Test.14 Test.3 Test.5; let Test.14 = CallByName List.4 Test.15 Test.3 Test.6;
ret Test.13; ret Test.14;
else else
dec Test.4; dec Test.4;
jump Test.28; jump Test.29;
else else
dec Test.4; dec Test.4;
jump Test.28; jump Test.29;
procedure Test.0 (): procedure Test.0 ():
let Test.9 = 0i64;
let Test.10 = 0i64; let Test.10 = 0i64;
let Test.41 = 1i64; let Test.11 = 0i64;
let Test.11 = Array [Test.41]; let Test.42 = 1i64;
let Test.8 = CallByName Test.1 Test.9 Test.10 Test.11; let Test.12 = Array [Test.42];
ret Test.8; let Test.9 = CallByName Test.1 Test.10 Test.11 Test.12;
ret Test.9;
"# "#
), ),
) )