procedure Num.20 (#Attr.2, #Attr.3): let Num.289 : I64 = lowlevel NumSub #Attr.2 #Attr.3; ret Num.289; procedure Str.3 (#Attr.2, #Attr.3): let Str.390 : Str = lowlevel StrConcat #Attr.2 #Attr.3; ret Str.390; procedure Test.11 (Test.29, #Attr.12): let Test.32 : {} = UnionAtIndex (Id 0) (Index 0) #Attr.12; let Bool.30 : Int1 = lowlevel RefCountIsUnique #Attr.12; if Bool.30 then free #Attr.12; ret Test.32; else decref #Attr.12; ret Test.32; procedure Test.11 (Test.29, Test.10): ret Test.10; procedure Test.14 (Bool.28, Bool.29): joinpoint Test.38 Test.37 #Attr.12: let Test.46 : {} = UnionAtIndex (Id 1) (Index 1) #Attr.12; let Test.45 : I64 = UnionAtIndex (Id 1) (Index 0) #Attr.12; joinpoint Bool.31: let Test.44 : {} = Struct {}; let Test.43 : {} = CallByName Test.11 Test.44 Test.46; let Test.39 : [C {}, C I64 {}] = CallByName Test.9 Test.43 Test.45; let Test.41 : {} = Struct {}; let Test.42 : U8 = GetTagId Test.39; switch Test.42: case 0: let Test.40 : {} = CallByName Test.11 Test.41 Test.39; ret Test.40; default: jump Test.38 Test.41 Test.39; in let Bool.32 : Int1 = lowlevel RefCountIsUnique #Attr.12; if Bool.32 then free #Attr.12; jump Bool.31; else decref #Attr.12; jump Bool.31; in jump Test.38 Bool.28 Bool.29; 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 : [C {}, C I64 {}] = CallByName Test.4 Test.27; ret Test.26; else let Test.52 : {} = Struct {}; let Test.34 : {} = CallByName Test.4 Test.52; let Test.33 : [C {}, C I64 {}] = CallByName Test.5 Test.34 Test.8; ret Test.33; procedure Test.4 (Test.10): let Test.28 : [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.36 : [C {}, C I64 {}] = TagId(1) Test.13 Test.16; ret Test.36; 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 : [C {}, C I64 {}] = CallByName Test.3 Test.50; ret Test.49; procedure Test.0 (): let Test.24 : I64 = 4i64; let Test.17 : [C {}, C I64 {}] = CallByName Test.3 Test.24; dec Test.17; let Test.18 : Str = CallByName Test.2; ret Test.18;