procedure Bool.1 (): let Bool.25 : Int1 = false; ret Bool.25; procedure Bool.2 (): let Bool.24 : Int1 = true; ret Bool.24; procedure List.102 (List.486, List.487, List.488): let List.585 : U64 = 0i64; let List.586 : U64 = CallByName List.6 List.486; let List.584 : [C {}, C {}] = CallByName List.80 List.486 List.487 List.488 List.585 List.586; ret List.584; procedure List.23 (#Attr.2, #Attr.3, #Attr.4): let List.606 : List {[C I64, C List *self], [C I64, C List *self]} = lowlevel ListMap2 { xs: `#Attr.#arg1`, ys: `#Attr.#arg2` } #Attr.2 #Attr.3 Test.15 #Attr.4; decref #Attr.3; decref #Attr.2; ret List.606; procedure List.234 (List.573, List.235, List.233): let List.603 : Int1 = CallByName Test.1 List.235; if List.603 then let List.605 : {} = Struct {}; let List.604 : [C {}, C {}] = TagId(1) List.605; ret List.604; else let List.602 : {} = Struct {}; let List.601 : [C {}, C {}] = TagId(0) List.602; ret List.601; procedure List.56 (List.232, List.233): let List.582 : {} = Struct {}; let List.574 : [C {}, C {}] = CallByName List.102 List.232 List.582 List.233; let List.579 : U8 = 1i64; let List.580 : U8 = GetTagId List.574; let List.581 : Int1 = lowlevel Eq List.579 List.580; if List.581 then let List.575 : Int1 = CallByName Bool.2; ret List.575; else let List.576 : Int1 = CallByName Bool.1; ret List.576; procedure List.6 (#Attr.2): let List.572 : U64 = lowlevel ListLen #Attr.2; ret List.572; procedure List.6 (#Attr.2): let List.600 : U64 = lowlevel ListLen #Attr.2; ret List.600; procedure List.66 (#Attr.2, #Attr.3): let List.599 : {[C I64, C List *self], [C I64, C List *self]} = lowlevel ListGetUnsafe #Attr.2 #Attr.3; ret List.599; procedure List.80 (#Derived_gen.1, #Derived_gen.2, #Derived_gen.3, #Derived_gen.4, #Derived_gen.5): joinpoint List.587 List.489 List.490 List.491 List.492 List.493: let List.589 : Int1 = CallByName Num.22 List.492 List.493; if List.589 then let List.598 : {[C I64, C List *self], [C I64, C List *self]} = CallByName List.66 List.489 List.492; inc List.598; let List.590 : [C {}, C {}] = CallByName List.234 List.490 List.598 List.491; let List.595 : U8 = 1i64; let List.596 : U8 = GetTagId List.590; let List.597 : Int1 = lowlevel Eq List.595 List.596; if List.597 then let List.494 : {} = UnionAtIndex (Id 1) (Index 0) List.590; let List.593 : U64 = 1i64; let List.592 : U64 = CallByName Num.51 List.492 List.593; jump List.587 List.489 List.494 List.491 List.592 List.493; else dec List.489; let List.495 : {} = UnionAtIndex (Id 0) (Index 0) List.590; let List.594 : [C {}, C {}] = TagId(0) List.495; ret List.594; else dec List.489; let List.588 : [C {}, C {}] = TagId(1) List.490; ret List.588; in jump List.587 #Derived_gen.1 #Derived_gen.2 #Derived_gen.3 #Derived_gen.4 #Derived_gen.5; procedure Num.22 (#Attr.2, #Attr.3): let Num.297 : Int1 = lowlevel NumLt #Attr.2 #Attr.3; ret Num.297; procedure Num.22 (#Attr.2, #Attr.3): let Num.300 : Int1 = lowlevel NumLt #Attr.2 #Attr.3; ret Num.300; procedure Num.51 (#Attr.2, #Attr.3): let Num.299 : U64 = lowlevel NumAddWrap #Attr.2 #Attr.3; ret Num.299; procedure Test.1 (#Derived_gen.0): joinpoint Test.26 Test.6: let Test.65 : [C I64, C List *self] = StructAtIndex 1 Test.6; let Test.66 : U8 = 0i64; let Test.67 : U8 = GetTagId Test.65; let Test.68 : Int1 = lowlevel Eq Test.66 Test.67; if Test.68 then let Test.57 : [C I64, C List *self] = StructAtIndex 0 Test.6; let Test.58 : U8 = 0i64; let Test.59 : U8 = GetTagId Test.57; let Test.60 : Int1 = lowlevel Eq Test.58 Test.59; if Test.60 then let Test.50 : [C I64, C List *self] = StructAtIndex 0 Test.6; let Test.8 : I64 = UnionAtIndex (Id 0) (Index 0) Test.50; let Test.49 : [C I64, C List *self] = StructAtIndex 1 Test.6; dec Test.50; let Test.10 : I64 = UnionAtIndex (Id 0) (Index 0) Test.49; joinpoint #Derived_gen.6: let Test.27 : Int1 = CallByName Num.22 Test.8 Test.10; ret Test.27; in let #Derived_gen.7 : Int1 = lowlevel RefCountIsUnique Test.49; if #Derived_gen.7 then free Test.49; jump #Derived_gen.6; else decref Test.49; jump #Derived_gen.6; else let Test.39 : [C I64, C List *self] = StructAtIndex 0 Test.6; let Test.42 : [C I64, C List *self] = StructAtIndex 1 Test.6; let Test.41 : List [C I64, C List *self] = Array [Test.42]; let Test.40 : [C I64, C List *self] = TagId(1) Test.41; let Test.38 : {[C I64, C List *self], [C I64, C List *self]} = Struct {Test.39, Test.40}; jump Test.26 Test.38; else let Test.61 : [C I64, C List *self] = StructAtIndex 0 Test.6; let Test.62 : U8 = 1i64; let Test.63 : U8 = GetTagId Test.61; let Test.64 : Int1 = lowlevel Eq Test.62 Test.63; if Test.64 then let Test.52 : [C I64, C List *self] = StructAtIndex 0 Test.6; let Test.12 : List [C I64, C List *self] = UnionAtIndex (Id 1) (Index 0) Test.52; inc 2 Test.12; let Test.51 : [C I64, C List *self] = StructAtIndex 1 Test.6; dec Test.52; let Test.14 : List [C I64, C List *self] = UnionAtIndex (Id 1) (Index 0) Test.51; inc Test.14; joinpoint #Derived_gen.8: let Test.35 : {} = Struct {}; let Test.33 : List {[C I64, C List *self], [C I64, C List *self]} = CallByName List.23 Test.12 Test.14 Test.35; let Test.34 : {} = Struct {}; let Test.29 : Int1 = CallByName List.56 Test.33 Test.34; if Test.29 then let Test.31 : U64 = CallByName List.6 Test.12; dec Test.12; let Test.32 : U64 = CallByName List.6 Test.14; dec Test.14; let Test.30 : Int1 = CallByName Num.22 Test.31 Test.32; ret Test.30; else dec Test.12; dec Test.14; let Test.28 : Int1 = CallByName Bool.1; ret Test.28; in let #Derived_gen.9 : Int1 = lowlevel RefCountIsUnique Test.51; if #Derived_gen.9 then free Test.51; jump #Derived_gen.8; else inc Test.14; decref Test.51; jump #Derived_gen.8; else let Test.48 : [C I64, C List *self] = StructAtIndex 0 Test.6; let Test.47 : List [C I64, C List *self] = Array [Test.48]; let Test.45 : [C I64, C List *self] = TagId(1) Test.47; let Test.46 : [C I64, C List *self] = StructAtIndex 1 Test.6; let Test.44 : {[C I64, C List *self], [C I64, C List *self]} = Struct {Test.45, Test.46}; jump Test.26 Test.44; in jump Test.26 #Derived_gen.0; procedure Test.15 (Test.16, Test.17): let Test.36 : {[C I64, C List *self], [C I64, C List *self]} = Struct {Test.16, Test.17}; ret Test.36; procedure Test.0 (): let Test.76 : I64 = 10i64; let Test.75 : [C I64, C List *self] = TagId(0) Test.76; let Test.74 : List [C I64, C List *self] = Array [Test.75]; let Test.69 : [C I64, C List *self] = TagId(1) Test.74; let Test.73 : I64 = 20i64; let Test.72 : [C I64, C List *self] = TagId(0) Test.73; let Test.71 : List [C I64, C List *self] = Array [Test.72]; let Test.70 : [C I64, C List *self] = TagId(1) Test.71; let Test.25 : {[C I64, C List *self], [C I64, C List *self]} = Struct {Test.69, Test.70}; let Test.24 : Int1 = CallByName Test.1 Test.25; ret Test.24;