mirror of
https://github.com/roc-lang/roc.git
synced 2025-08-04 12:18:19 +00:00
Support lambda sets with recursive pointers and their equivalence-checking
This commit is contained in:
parent
fa47e82d72
commit
478d4a2d44
4 changed files with 263 additions and 81 deletions
|
@ -0,0 +1,86 @@
|
|||
procedure Num.20 (#Attr.2, #Attr.3):
|
||||
let Num.256 : I64 = lowlevel NumSub #Attr.2 #Attr.3;
|
||||
ret Num.256;
|
||||
|
||||
procedure Str.3 (#Attr.2, #Attr.3):
|
||||
let Str.267 : Str = lowlevel StrConcat #Attr.2 #Attr.3;
|
||||
ret Str.267;
|
||||
|
||||
procedure Test.11 (Test.29, #Attr.12):
|
||||
let Test.10 : {} = UnionAtIndex (Id 0) (Index 0) #Attr.12;
|
||||
dec #Attr.12;
|
||||
ret Test.10;
|
||||
|
||||
procedure Test.11 (Test.29, Test.10):
|
||||
ret Test.10;
|
||||
|
||||
procedure Test.14 (Test.36, #Attr.12):
|
||||
let Test.12 : {} = UnionAtIndex (Id 1) (Index 1) #Attr.12;
|
||||
let Test.13 : I64 = UnionAtIndex (Id 1) (Index 0) #Attr.12;
|
||||
dec #Attr.12;
|
||||
let Test.46 : {} = Struct {};
|
||||
let Test.45 : {} = CallByName Test.11 Test.46 Test.12;
|
||||
let Test.38 : [<r>C {}, C I64 {}] = CallByName Test.9 Test.45 Test.13;
|
||||
let Test.40 : {} = Struct {};
|
||||
let Test.41 : U8 = GetTagId Test.38;
|
||||
joinpoint Test.42 Test.39:
|
||||
ret Test.39;
|
||||
in
|
||||
switch Test.41:
|
||||
case 0:
|
||||
let Test.43 : {} = CallByName Test.11 Test.40 Test.38;
|
||||
jump Test.42 Test.43;
|
||||
|
||||
default:
|
||||
let Test.44 : {} = CallByName Test.14 Test.40 Test.38;
|
||||
jump Test.42 Test.44;
|
||||
|
||||
|
||||
procedure Test.2 ():
|
||||
let Test.6 : Str = "Hello";
|
||||
let Test.7 : Str = "World";
|
||||
let Test.21 : Str = ", ";
|
||||
let Test.23 : Str = "!";
|
||||
let Test.22 : Str = CallByName Str.3 Test.7 Test.23;
|
||||
dec Test.23;
|
||||
let Test.20 : Str = CallByName Str.3 Test.21 Test.22;
|
||||
dec Test.22;
|
||||
let Test.19 : Str = CallByName Str.3 Test.6 Test.20;
|
||||
dec Test.20;
|
||||
ret Test.19;
|
||||
|
||||
procedure Test.3 (Test.8):
|
||||
let Test.57 : I64 = 0i64;
|
||||
let Test.58 : Int1 = lowlevel Eq Test.57 Test.8;
|
||||
if Test.58 then
|
||||
let Test.27 : {} = Struct {};
|
||||
let Test.26 : [<r>C {}, C I64 {}] = CallByName Test.4 Test.27;
|
||||
ret Test.26;
|
||||
else
|
||||
let Test.52 : {} = Struct {};
|
||||
let Test.33 : {} = CallByName Test.4 Test.52;
|
||||
let Test.32 : [<r>C {}, C I64 {}] = CallByName Test.5 Test.33 Test.8;
|
||||
ret Test.32;
|
||||
|
||||
procedure Test.4 (Test.10):
|
||||
let Test.28 : [<r>C {}, C I64 {}] = TagId(0) Test.10;
|
||||
ret Test.28;
|
||||
|
||||
procedure Test.4 (Test.10):
|
||||
ret Test.10;
|
||||
|
||||
procedure Test.5 (Test.16, Test.13):
|
||||
let Test.35 : [<r>C {}, C I64 {}] = TagId(1) Test.13 Test.16;
|
||||
ret Test.35;
|
||||
|
||||
procedure Test.9 (Test.47, Test.8):
|
||||
let Test.51 : I64 = 1i64;
|
||||
let Test.50 : I64 = CallByName Num.20 Test.8 Test.51;
|
||||
let Test.49 : [<r>C {}, C I64 {}] = CallByName Test.3 Test.50;
|
||||
ret Test.49;
|
||||
|
||||
procedure Test.0 ():
|
||||
let Test.24 : I64 = 4i64;
|
||||
let Test.17 : [<r>C {}, C I64 {}] = CallByName Test.3 Test.24;
|
||||
let Test.18 : Str = CallByName Test.2;
|
||||
ret Test.18;
|
Loading…
Add table
Add a link
Reference in a new issue