Skip to content

Instantly share code, notes, and snippets.

@folkertdev
Created February 6, 2022 20:00
Show Gist options
  • Save folkertdev/1f9d539ffc3528ca4325b83c576a9add to your computer and use it in GitHub Desktop.
Save folkertdev/1f9d539ffc3528ca4325b83c576a9add to your computer and use it in GitHub Desktop.
Roc+Morphic join point problem
program {
mod "UserApp" {
type "jY\xe2\xcd\xd2\xfd/t" = type_10 where {
type type_0 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_1 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_2 = (type_0, type_1);
type type_3 = ();
type type_4 = (type_3);
type type_5 = heap_cell;
type type_6 = (type_5);
type type_7 = (type_6);
type type_8 = union { type_2, type_4, type_7 };
type type_9 = heap_cell;
type type_10 = (type_9, type_8);
}
const "\x03\x00\x00\x00\x0f\x00\x00\x00": type_1 = {
let val_0 = new_heap_cell ();
let val_1 = make_tuple (val_0);
val_1
} where {
type type_0 = heap_cell;
type type_1 = (type_0);
}
const "THIS IS A STATIC LIST": type_4 = {
let val_0 = new_heap_cell ();
let val_1 = empty_bag<type_0> ();
let val_2 = make_tuple (val_0, val_1);
val_2
} where {
type type_0 = ();
type type_1 = ();
type type_2 = heap_cell;
type type_3 = bag<type_1>;
type type_4 = (type_2, type_3);
}
fn "\x01\x00\x00\x00\x16\x00\x00\x00LY\x93K\xc3c\xae\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x00`Num.add`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" (val_0: type_3) -> type_4 {
let val_1 = get_tuple_field 0 (val_0);
let val_2 = get_tuple_field 1 (val_0);
let val_6 = {
let val_5 = choice {
case {
let val_3 = make_tuple ();
val_3
},
case {
let val_4 = terminate<type_0> ();
val_4
},
} ();
val_5
} ();
val_6
} where {
type type_0 = ();
type type_1 = ();
type type_2 = ();
type type_3 = (type_1, type_2);
type type_4 = ();
}
fn "\x08\x00\x00\x00\x00\x00\x00\x00_\xa8\x0c\xbc5\xf4\x81h\x00\x00\x00\x00\x00\x00\x00\x00\x00`#UserApp.main`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" (val_0: type_8) -> type_10 {
let val_1 = make_tuple ();
let val_2 = make_tuple (val_1);
let val_3 = make_union<type_2, type_4, type_7> 1 (val_2);
let val_4 = new_heap_cell ();
let val_5 = make_tuple (val_4, val_3);
let val_6 = make_named "UserApp"::"jY\xe2\xcd\xd2\xfd/t" (val_5);
let val_7 = recursive_touch (val_6);
let val_8 = make_tuple (val_6, val_6);
let val_9 = call["\x02\x00\x00\x00"] "UserApp"::"\x08\x00\x00\x00\x02\x00\x00\x00V\x90\xe8B>\xd7\x94\xf6\x00\x00\x00\x00\x00\x00\x00\x00\x00`#UserApp.add`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" (val_8);
let val_10 = make_tuple (val_6, val_9);
let val_11 = call["\x01\x00\x00\x00"] "UserApp"::"\x08\x00\x00\x00\x02\x00\x00\x00V\x90\xe8B>\xd7\x94\xf6\x00\x00\x00\x00\x00\x00\x00\x00\x00`#UserApp.add`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" (val_10);
let val_12 = const_ref "UserApp"::"\x03\x00\x00\x00\x0f\x00\x00\x00" ();
val_12
} where {
type type_0 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_1 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_2 = (type_0, type_1);
type type_3 = ();
type type_4 = (type_3);
type type_5 = heap_cell;
type type_6 = (type_5);
type type_7 = (type_6);
type type_8 = ();
type type_9 = heap_cell;
type type_10 = (type_9);
}
fn "\x08\x00\x00\x00\x02\x00\x00\x00V\x90\xe8B>\xd7\x94\xf6\x00\x00\x00\x00\x00\x00\x00\x00\x00`#UserApp.add`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" (val_0: type_39) -> type_40 {
let val_1 = get_tuple_field 0 (val_0);
let val_2 = get_tuple_field 1 (val_0);
continuation cont_0 (val_3: type_3) -> type_2 {
let val_7 = get_tuple_field 0 (val_3);
let val_8 = get_tuple_field 1 (val_3);
let val_9 = make_tuple (val_7, val_8);
continuation cont_1 (val_10: type_6) -> type_5 {
let val_129 = get_tuple_field 0 (val_9);
let val_130 = recursive_touch (val_129);
let val_131 = get_tuple_field 1 (val_9);
let val_132 = recursive_touch (val_131);
let val_133 = recursive_touch (val_9);
let val_134 = make_tuple (val_129, val_131);
let val_135 = make_union<type_31, type_33, type_36> 0 (val_134);
let val_136 = new_heap_cell ();
let val_137 = make_tuple (val_136, val_135);
let val_138 = make_named "UserApp"::"jY\xe2\xcd\xd2\xfd/t" (val_137);
val_138
}
let val_139 = {
let val_12 = get_tuple_field 0 (val_9);
let val_13 = recursive_touch (val_12);
let val_14 = make_tuple ();
let val_15 = make_tuple ();
let val_16 = recursive_touch (val_12);
let val_17 = make_tuple ();
let val_128 = choice {
case {
let val_18 = get_tuple_field 1 (val_9);
let val_19 = recursive_touch (val_18);
let val_20 = make_tuple ();
let val_125 = choice {
case {
let val_21 = get_tuple_field 0 (val_9);
let val_22 = recursive_touch (val_21);
let val_23 = unwrap_named "UserApp"::"jY\xe2\xcd\xd2\xfd/t" (val_21);
let val_24 = get_tuple_field 0 (val_23);
let val_25 = get_tuple_field 1 (val_23);
let val_26 = touch (val_24);
let val_27 = unwrap_union 1 (val_25);
let val_28 = get_tuple_field 0 (val_27);
let val_29 = recursive_touch (val_21);
let val_30 = get_tuple_field 1 (val_9);
let val_31 = recursive_touch (val_30);
let val_32 = recursive_touch (val_9);
let val_33 = unwrap_named "UserApp"::"jY\xe2\xcd\xd2\xfd/t" (val_30);
let val_34 = get_tuple_field 0 (val_33);
let val_35 = get_tuple_field 1 (val_33);
let val_36 = touch (val_34);
let val_37 = unwrap_union 1 (val_35);
let val_38 = get_tuple_field 0 (val_37);
let val_39 = recursive_touch (val_30);
let val_40 = unwrap_named "UserApp"::"jY\xe2\xcd\xd2\xfd/t" (val_18);
let val_41 = get_tuple_field 0 (val_40);
let val_42 = get_tuple_field 1 (val_40);
let val_43 = touch (val_41);
let val_44 = update_write_only["\x03\x00\x00\x00"] (val_41);
let val_45 = new_heap_cell ();
let val_46 = make_tuple (val_45, val_42);
let val_47 = make_tuple (val_28, val_38);
let val_48 = call["\x03\x00\x00\x00"] "UserApp"::"\x01\x00\x00\x00\x16\x00\x00\x00LY\x93K\xc3c\xae\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x00`Num.add`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" (val_47);
let val_49 = make_tuple (val_48);
let val_50 = make_union<type_10, type_12, type_15> 1 (val_49);
let val_51 = new_heap_cell ();
let val_52 = make_tuple (val_51, val_50);
let val_53 = make_named "UserApp"::"jY\xe2\xcd\xd2\xfd/t" (val_52);
val_53
},
case {
let val_54 = get_tuple_field 1 (val_9);
let val_55 = recursive_touch (val_54);
let val_56 = unwrap_named "UserApp"::"jY\xe2\xcd\xd2\xfd/t" (val_54);
let val_57 = get_tuple_field 0 (val_56);
let val_58 = get_tuple_field 1 (val_56);
let val_59 = touch (val_57);
let val_60 = unwrap_union 0 (val_58);
let val_61 = get_tuple_field 0 (val_60);
let val_62 = recursive_touch (val_61);
let val_63 = recursive_touch (val_54);
let val_64 = unwrap_named "UserApp"::"jY\xe2\xcd\xd2\xfd/t" (val_18);
let val_65 = get_tuple_field 0 (val_64);
let val_66 = get_tuple_field 1 (val_64);
let val_67 = touch (val_65);
let val_68 = update_write_only["\x04\x00\x00\x00"] (val_65);
let val_69 = new_heap_cell ();
let val_70 = make_tuple (val_69, val_66);
let val_71 = make_tuple ();
let val_72 = make_tuple ();
let val_73 = recursive_touch (val_61);
let val_74 = make_tuple ();
let val_121 = choice {
case {
let val_75 = get_tuple_field 0 (val_9);
let val_76 = recursive_touch (val_75);
let val_77 = unwrap_named "UserApp"::"jY\xe2\xcd\xd2\xfd/t" (val_75);
let val_78 = get_tuple_field 0 (val_77);
let val_79 = get_tuple_field 1 (val_77);
let val_80 = touch (val_78);
let val_81 = unwrap_union 1 (val_79);
let val_82 = get_tuple_field 0 (val_81);
let val_83 = recursive_touch (val_75);
let val_84 = get_tuple_field 1 (val_9);
let val_85 = recursive_touch (val_84);
let val_86 = recursive_touch (val_9);
let val_87 = unwrap_named "UserApp"::"jY\xe2\xcd\xd2\xfd/t" (val_84);
let val_88 = get_tuple_field 0 (val_87);
let val_89 = get_tuple_field 1 (val_87);
let val_90 = touch (val_88);
let val_91 = unwrap_union 0 (val_89);
let val_92 = get_tuple_field 0 (val_91);
let val_93 = recursive_touch (val_92);
let val_94 = unwrap_named "UserApp"::"jY\xe2\xcd\xd2\xfd/t" (val_92);
let val_95 = get_tuple_field 0 (val_94);
let val_96 = get_tuple_field 1 (val_94);
let val_97 = touch (val_95);
let val_98 = unwrap_union 1 (val_96);
let val_99 = get_tuple_field 0 (val_98);
let val_100 = recursive_touch (val_92);
let val_101 = unwrap_named "UserApp"::"jY\xe2\xcd\xd2\xfd/t" (val_84);
let val_102 = get_tuple_field 0 (val_101);
let val_103 = get_tuple_field 1 (val_101);
let val_104 = touch (val_102);
let val_105 = unwrap_union 0 (val_103);
let val_106 = get_tuple_field 1 (val_105);
let val_107 = recursive_touch (val_106);
let val_108 = recursive_touch (val_84);
let val_109 = make_tuple (val_82, val_99);
let val_110 = call["\x05\x00\x00\x00"] "UserApp"::"\x01\x00\x00\x00\x16\x00\x00\x00LY\x93K\xc3c\xae\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x00`Num.add`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" (val_109);
let val_111 = make_tuple (val_110);
let val_112 = make_union<type_19, type_21, type_24> 1 (val_111);
let val_113 = new_heap_cell ();
let val_114 = make_tuple (val_113, val_112);
let val_115 = make_named "UserApp"::"jY\xe2\xcd\xd2\xfd/t" (val_114);
let val_116 = make_tuple (val_115, val_106);
let val_117 = jump<type_25> cont_0 (val_116);
val_117
},
case {
let val_118 = recursive_touch (val_70);
let val_119 = make_tuple ();
let val_120 = jump<type_26> cont_1 (val_119);
val_120
},
} ();
val_121
},
case {
let val_122 = recursive_touch (val_18);
let val_123 = make_tuple ();
let val_124 = jump<type_27> cont_1 (val_123);
val_124
},
} ();
val_125
},
case {
let val_126 = make_tuple ();
let val_127 = jump<type_28> cont_1 (val_126);
val_127
},
} ();
val_128
} ();
val_139
}
let val_140 = {
let val_5 = make_tuple (val_1, val_2);
let val_6 = jump<type_4> cont_0 (val_5);
val_6
} ();
val_140
} where {
type type_0 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_1 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_2 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_3 = (type_0, type_1);
type type_4 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_5 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_6 = ();
type type_7 = ();
type type_8 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_9 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_10 = (type_8, type_9);
type type_11 = ();
type type_12 = (type_11);
type type_13 = heap_cell;
type type_14 = (type_13);
type type_15 = (type_14);
type type_16 = ();
type type_17 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_18 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_19 = (type_17, type_18);
type type_20 = ();
type type_21 = (type_20);
type type_22 = heap_cell;
type type_23 = (type_22);
type type_24 = (type_23);
type type_25 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_26 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_27 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_28 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_29 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_30 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_31 = (type_29, type_30);
type type_32 = ();
type type_33 = (type_32);
type type_34 = heap_cell;
type type_35 = (type_34);
type type_36 = (type_35);
type type_37 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_38 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_39 = (type_37, type_38);
type type_40 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
}
fn "\t\x00\x00\x00\x00\x00\x00\x00_\xa8\x0c\xbc5\xf4\x81h\x00\x00\x00\x00\x00\x00\x00\x00\x00`pf..mainForHost`\x00\x00\x00\x00\x00\x00\x00\x00" (val_0: type_0) -> type_2 {
let val_1 = make_tuple ();
let val_2 = call["\x01\x00\x00\x00"] "UserApp"::"\x08\x00\x00\x00\x00\x00\x00\x00_\xa8\x0c\xbc5\xf4\x81h\x00\x00\x00\x00\x00\x00\x00\x00\x00`#UserApp.main`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" (val_1);
val_2
} where {
type type_0 = ();
type type_1 = heap_cell;
type type_2 = (type_1);
}
fn "mainForHost" (val_0: type_3) -> type_3 {
let val_6 = choice {
case {
let val_1 = make_tuple ();
let val_2 = make_union<type_1, type_0> 0 (val_1);
let val_3 = unwrap_union 1 (val_2);
let val_4 = call["\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"] "UserApp"::"\t\x00\x00\x00\x00\x00\x00\x00_\xa8\x0c\xbc5\xf4\x81h\x00\x00\x00\x00\x00\x00\x00\x00\x00`pf..mainForHost`\x00\x00\x00\x00\x00\x00\x00\x00" (val_3);
let val_5 = unknown_with<type_2> (val_4);
val_5
},
} ();
val_6
} where {
type type_0 = ();
type type_1 = ();
type type_2 = ();
type type_3 = ();
}
}
entry_point "mainForHost" = "UserApp"::"mainForHost";
}
procedure : `pf..mainForHost` Str
procedure = `pf..mainForHost` ():
let `pf..0` : Builtin(Str) = CallByName `#UserApp.main`;
ret `pf..0`;
procedure : `#UserApp.main` Str
procedure = `#UserApp.main` ():
let `#UserApp.7` : Builtin(Int(I64)) = 5i64;
let `#UserApp.x` : _ = Val `#UserApp.7`;
inc 2 `#UserApp.x`;
let `#UserApp.6` : _ = CallByName `#UserApp.add` `#UserApp.x` `#UserApp.x`;
let `#UserApp.f` : _ = CallByName `#UserApp.add` `#UserApp.x` `#UserApp.6`;
let `#UserApp.5` : Builtin(Str) = "Hello World";
ret `#UserApp.5`;
procedure : `Num.add` I64
procedure = `Num.add` (`#Attr.#arg1`, `#Attr.#arg2`):
let `#UserApp.12` : Builtin(Int(I64)) = lowlevel NumAdd `#Attr.#arg1` `#Attr.#arg2`;
ret `#UserApp.12`;
procedure : `#UserApp.add` TODO
procedure = `#UserApp.add` (`#UserApp.34`, `#UserApp.35`):
joinpoint `#UserApp.8` `#UserApp.a` `#UserApp.b`:
let `#UserApp.9` : Struct([_, _]) = Struct {`#UserApp.a`, `#UserApp.b`};
joinpoint `#UserApp.22`:
let `#UserApp.f` : _ = StructAtIndex 0 `#UserApp.9`;
inc `#UserApp.f`;
let `#UserApp.g` : _ = StructAtIndex 1 `#UserApp.9`;
inc `#UserApp.g`;
dec `#UserApp.9`;
let `#UserApp.16` : _ = Add `#UserApp.f` `#UserApp.g`;
ret `#UserApp.16`;
in
let `#UserApp.30` : _ = StructAtIndex 0 `#UserApp.9`;
inc `#UserApp.30`;
let `#UserApp.31` : Builtin(Int(U8)) = 1i64;
let `#UserApp.32` : Builtin(Int(U8)) = GetTagId `#UserApp.30`;
dec `#UserApp.30`;
let `#UserApp.33` : Builtin(Bool) = lowlevel Eq `#UserApp.31` `#UserApp.32`;
if `#UserApp.33` then <no branch info>
let `#UserApp.23` : _ = StructAtIndex 1 `#UserApp.9`;
inc `#UserApp.23`;
let `#UserApp.29` : Builtin(Int(U8)) = GetTagId `#UserApp.23`;
switch `#UserApp.29`:
case 1:
let `#UserApp.18` : _ = StructAtIndex 0 `#UserApp.9`;
inc `#UserApp.18`;
let `#UserApp.n` : Builtin(Int(I64)) = UnionAtIndex (Id 1) (Index 0) `#UserApp.18`;
dec `#UserApp.18`;
let `#UserApp.17` : _ = StructAtIndex 1 `#UserApp.9`;
inc `#UserApp.17`;
dec `#UserApp.9`;
let `#UserApp.m` : Builtin(Int(I64)) = UnionAtIndex (Id 1) (Index 0) `#UserApp.17`;
dec `#UserApp.17`;
let `#UserApp.IdentId(54)` : _ = Reset { symbol: `#UserApp.23`, id: 3 };
let `#UserApp.11` : Builtin(Int(I64)) = CallByName `Num.add` `#UserApp.n` `#UserApp.m`;
let `#UserApp.10` : _ = Reuse `#UserApp.IdentId(54)` UpdateModeId { id: 3 } Val `#UserApp.11`;
ret `#UserApp.10`;
case 0:
let `#UserApp.24` : _ = StructAtIndex 1 `#UserApp.9`;
inc `#UserApp.24`;
let `#UserApp.25` : _ = UnionAtIndex (Id 0) (Index 0) `#UserApp.24`;
inc `#UserApp.25`;
dec `#UserApp.24`;
let `#UserApp.IdentId(55)` : _ = Reset { symbol: `#UserApp.23`, id: 4 };
let `#UserApp.26` : Builtin(Int(U8)) = 1i64;
let `#UserApp.27` : Builtin(Int(U8)) = GetTagId `#UserApp.25`;
dec `#UserApp.25`;
let `#UserApp.28` : Builtin(Bool) = lowlevel Eq `#UserApp.26` `#UserApp.27`;
if `#UserApp.28` then <no branch info>
let `#UserApp.21` : _ = StructAtIndex 0 `#UserApp.9`;
inc `#UserApp.21`;
let `#UserApp.n` : Builtin(Int(I64)) = UnionAtIndex (Id 1) (Index 0) `#UserApp.21`;
dec `#UserApp.21`;
let `#UserApp.19` : _ = StructAtIndex 1 `#UserApp.9`;
inc `#UserApp.19`;
dec `#UserApp.9`;
let `#UserApp.20` : _ = UnionAtIndex (Id 0) (Index 0) `#UserApp.19`;
inc `#UserApp.20`;
let `#UserApp.m` : Builtin(Int(I64)) = UnionAtIndex (Id 1) (Index 0) `#UserApp.20`;
dec `#UserApp.20`;
let `#UserApp.f` : _ = UnionAtIndex (Id 0) (Index 1) `#UserApp.19`;
inc `#UserApp.f`;
dec `#UserApp.19`;
let `#UserApp.15` : Builtin(Int(I64)) = CallByName `Num.add` `#UserApp.n` `#UserApp.m`;
let `#UserApp.14` : _ = Reuse `#UserApp.IdentId(55)` UpdateModeId { id: 4 } Val `#UserApp.15`;
jump `#UserApp.8` `#UserApp.14` `#UserApp.f`;
else <no branch info>
decref `#UserApp.IdentId(55)`;
jump `#UserApp.22`;
default:
dec `#UserApp.23`;
jump `#UserApp.22`;
else <no branch info>
jump `#UserApp.22`;
in
jump `#UserApp.8` `#UserApp.34` `#UserApp.35`;
program {
mod "UserApp" {
type "jY\xe2\xcd\xd2\xfd/t" = type_10 where {
type type_0 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_1 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_2 = (type_0, type_1);
type type_3 = ();
type type_4 = (type_3);
type type_5 = heap_cell;
type type_6 = (type_5);
type type_7 = (type_6);
type type_8 = union { type_2, type_4, type_7 };
type type_9 = heap_cell;
type type_10 = (type_9, type_8);
}
const "\x03\x00\x00\x00\x0f\x00\x00\x00": type_1 = {
let val_0 = new_heap_cell ();
let val_1 = make_tuple (val_0);
val_1
} where {
type type_0 = heap_cell;
type type_1 = (type_0);
}
const "THIS IS A STATIC LIST": type_4 = {
let val_0 = new_heap_cell ();
let val_1 = empty_bag<type_0> ();
let val_2 = make_tuple (val_0, val_1);
val_2
} where {
type type_0 = ();
type type_1 = ();
type type_2 = heap_cell;
type type_3 = bag<type_1>;
type type_4 = (type_2, type_3);
}
fn "\x01\x00\x00\x00\x16\x00\x00\x00LY\x93K\xc3c\xae\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x00`Num.add`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" (val_0: type_3) -> type_4 {
let val_1 = get_tuple_field 0 (val_0);
let val_2 = get_tuple_field 1 (val_0);
let val_6 = {
let val_5 = choice {
case {
let val_3 = make_tuple ();
val_3
},
case {
let val_4 = terminate<type_0> ();
val_4
},
} ();
val_5
} ();
val_6
} where {
type type_0 = ();
type type_1 = ();
type type_2 = ();
type type_3 = (type_1, type_2);
type type_4 = ();
}
fn "\x08\x00\x00\x00\x00\x00\x00\x00_\xa8\x0c\xbc5\xf4\x81h\x00\x00\x00\x00\x00\x00\x00\x00\x00`#UserApp.main`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" (val_0: type_8) -> type_10 {
let val_1 = make_tuple ();
let val_2 = make_tuple (val_1);
let val_3 = make_union<type_2, type_4, type_7> 1 (val_2);
let val_4 = new_heap_cell ();
let val_5 = make_tuple (val_4, val_3);
let val_6 = make_named "UserApp"::"jY\xe2\xcd\xd2\xfd/t" (val_5);
let val_7 = recursive_touch (val_6);
let val_8 = make_tuple (val_6, val_6);
let val_9 = call["\x02\x00\x00\x00"] "UserApp"::"\x08\x00\x00\x00\x02\x00\x00\x00V\x90\xe8B>\xd7\x94\xf6\x00\x00\x00\x00\x00\x00\x00\x00\x00`#UserApp.add`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" (val_8);
let val_10 = make_tuple (val_6, val_9);
let val_11 = call["\x01\x00\x00\x00"] "UserApp"::"\x08\x00\x00\x00\x02\x00\x00\x00V\x90\xe8B>\xd7\x94\xf6\x00\x00\x00\x00\x00\x00\x00\x00\x00`#UserApp.add`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" (val_10);
let val_12 = const_ref "UserApp"::"\x03\x00\x00\x00\x0f\x00\x00\x00" ();
val_12
} where {
type type_0 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_1 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_2 = (type_0, type_1);
type type_3 = ();
type type_4 = (type_3);
type type_5 = heap_cell;
type type_6 = (type_5);
type type_7 = (type_6);
type type_8 = ();
type type_9 = heap_cell;
type type_10 = (type_9);
}
fn "\x08\x00\x00\x00\x02\x00\x00\x00V\x90\xe8B>\xd7\x94\xf6\x00\x00\x00\x00\x00\x00\x00\x00\x00`#UserApp.add`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" (val_0: type_33) -> type_34 {
let val_1 = get_tuple_field 0 (val_0);
let val_2 = get_tuple_field 1 (val_0);
let val_3 = make_tuple (val_1, val_2);
continuation cont_0 (val_4: type_1) -> type_0 {
let val_123 = get_tuple_field 0 (val_3);
let val_124 = recursive_touch (val_123);
let val_125 = get_tuple_field 1 (val_3);
let val_126 = recursive_touch (val_125);
let val_127 = recursive_touch (val_3);
let val_128 = make_tuple (val_123, val_125);
let val_129 = make_union<type_25, type_27, type_30> 0 (val_128);
let val_130 = new_heap_cell ();
let val_131 = make_tuple (val_130, val_129);
let val_132 = make_named "UserApp"::"jY\xe2\xcd\xd2\xfd/t" (val_131);
val_132
}
let val_133 = {
let val_6 = get_tuple_field 0 (val_3);
let val_7 = recursive_touch (val_6);
let val_8 = make_tuple ();
let val_9 = make_tuple ();
let val_10 = recursive_touch (val_6);
let val_11 = make_tuple ();
let val_122 = choice {
case {
let val_12 = get_tuple_field 1 (val_3);
let val_13 = recursive_touch (val_12);
let val_14 = make_tuple ();
let val_119 = choice {
case {
let val_15 = get_tuple_field 0 (val_3);
let val_16 = recursive_touch (val_15);
let val_17 = unwrap_named "UserApp"::"jY\xe2\xcd\xd2\xfd/t" (val_15);
let val_18 = get_tuple_field 0 (val_17);
let val_19 = get_tuple_field 1 (val_17);
let val_20 = touch (val_18);
let val_21 = unwrap_union 1 (val_19);
let val_22 = get_tuple_field 0 (val_21);
let val_23 = recursive_touch (val_15);
let val_24 = get_tuple_field 1 (val_3);
let val_25 = recursive_touch (val_24);
let val_26 = recursive_touch (val_3);
let val_27 = unwrap_named "UserApp"::"jY\xe2\xcd\xd2\xfd/t" (val_24);
let val_28 = get_tuple_field 0 (val_27);
let val_29 = get_tuple_field 1 (val_27);
let val_30 = touch (val_28);
let val_31 = unwrap_union 1 (val_29);
let val_32 = get_tuple_field 0 (val_31);
let val_33 = recursive_touch (val_24);
let val_34 = unwrap_named "UserApp"::"jY\xe2\xcd\xd2\xfd/t" (val_12);
let val_35 = get_tuple_field 0 (val_34);
let val_36 = get_tuple_field 1 (val_34);
let val_37 = touch (val_35);
let val_38 = update_write_only["\x03\x00\x00\x00"] (val_35);
let val_39 = new_heap_cell ();
let val_40 = make_tuple (val_39, val_36);
let val_41 = make_tuple (val_22, val_32);
let val_42 = call["\x03\x00\x00\x00"] "UserApp"::"\x01\x00\x00\x00\x16\x00\x00\x00LY\x93K\xc3c\xae\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x00`Num.add`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" (val_41);
let val_43 = make_tuple (val_42);
let val_44 = make_union<type_5, type_7, type_10> 1 (val_43);
let val_45 = new_heap_cell ();
let val_46 = make_tuple (val_45, val_44);
let val_47 = make_named "UserApp"::"jY\xe2\xcd\xd2\xfd/t" (val_46);
val_47
},
case {
let val_48 = get_tuple_field 1 (val_3);
let val_49 = recursive_touch (val_48);
let val_50 = unwrap_named "UserApp"::"jY\xe2\xcd\xd2\xfd/t" (val_48);
let val_51 = get_tuple_field 0 (val_50);
let val_52 = get_tuple_field 1 (val_50);
let val_53 = touch (val_51);
let val_54 = unwrap_union 0 (val_52);
let val_55 = get_tuple_field 0 (val_54);
let val_56 = recursive_touch (val_55);
let val_57 = recursive_touch (val_48);
let val_58 = unwrap_named "UserApp"::"jY\xe2\xcd\xd2\xfd/t" (val_12);
let val_59 = get_tuple_field 0 (val_58);
let val_60 = get_tuple_field 1 (val_58);
let val_61 = touch (val_59);
let val_62 = update_write_only["\x04\x00\x00\x00"] (val_59);
let val_63 = new_heap_cell ();
let val_64 = make_tuple (val_63, val_60);
let val_65 = make_tuple ();
let val_66 = make_tuple ();
let val_67 = recursive_touch (val_55);
let val_68 = make_tuple ();
let val_115 = choice {
case {
let val_69 = get_tuple_field 0 (val_3);
let val_70 = recursive_touch (val_69);
let val_71 = unwrap_named "UserApp"::"jY\xe2\xcd\xd2\xfd/t" (val_69);
let val_72 = get_tuple_field 0 (val_71);
let val_73 = get_tuple_field 1 (val_71);
let val_74 = touch (val_72);
let val_75 = unwrap_union 1 (val_73);
let val_76 = get_tuple_field 0 (val_75);
let val_77 = recursive_touch (val_69);
let val_78 = get_tuple_field 1 (val_3);
let val_79 = recursive_touch (val_78);
let val_80 = recursive_touch (val_3);
let val_81 = unwrap_named "UserApp"::"jY\xe2\xcd\xd2\xfd/t" (val_78);
let val_82 = get_tuple_field 0 (val_81);
let val_83 = get_tuple_field 1 (val_81);
let val_84 = touch (val_82);
let val_85 = unwrap_union 0 (val_83);
let val_86 = get_tuple_field 0 (val_85);
let val_87 = recursive_touch (val_86);
let val_88 = unwrap_named "UserApp"::"jY\xe2\xcd\xd2\xfd/t" (val_86);
let val_89 = get_tuple_field 0 (val_88);
let val_90 = get_tuple_field 1 (val_88);
let val_91 = touch (val_89);
let val_92 = unwrap_union 1 (val_90);
let val_93 = get_tuple_field 0 (val_92);
let val_94 = recursive_touch (val_86);
let val_95 = unwrap_named "UserApp"::"jY\xe2\xcd\xd2\xfd/t" (val_78);
let val_96 = get_tuple_field 0 (val_95);
let val_97 = get_tuple_field 1 (val_95);
let val_98 = touch (val_96);
let val_99 = unwrap_union 0 (val_97);
let val_100 = get_tuple_field 1 (val_99);
let val_101 = recursive_touch (val_100);
let val_102 = recursive_touch (val_78);
let val_103 = make_tuple (val_76, val_93);
let val_104 = call["\x05\x00\x00\x00"] "UserApp"::"\x01\x00\x00\x00\x16\x00\x00\x00LY\x93K\xc3c\xae\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x00`Num.add`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" (val_103);
let val_105 = make_tuple (val_104);
let val_106 = make_union<type_14, type_16, type_19> 1 (val_105);
let val_107 = new_heap_cell ();
let val_108 = make_tuple (val_107, val_106);
let val_109 = make_named "UserApp"::"jY\xe2\xcd\xd2\xfd/t" (val_108);
let val_110 = make_tuple (val_109, val_100);
let val_111 = call["\x04\x00\x00\x00"] "UserApp"::"\x08\x00\x00\x00\x02\x00\x00\x00V\x90\xe8B>\xd7\x94\xf6\x00\x00\x00\x00\x00\x00\x00\x00\x00`#UserApp.add`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" (val_110);
val_111
},
case {
let val_112 = recursive_touch (val_64);
let val_113 = make_tuple ();
let val_114 = jump<type_20> cont_0 (val_113);
val_114
},
} ();
val_115
},
case {
let val_116 = recursive_touch (val_12);
let val_117 = make_tuple ();
let val_118 = jump<type_21> cont_0 (val_117);
val_118
},
} ();
val_119
},
case {
let val_120 = make_tuple ();
let val_121 = jump<type_22> cont_0 (val_120);
val_121
},
} ();
val_122
} ();
val_133
} where {
type type_0 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_1 = ();
type type_2 = ();
type type_3 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_4 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_5 = (type_3, type_4);
type type_6 = ();
type type_7 = (type_6);
type type_8 = heap_cell;
type type_9 = (type_8);
type type_10 = (type_9);
type type_11 = ();
type type_12 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_13 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_14 = (type_12, type_13);
type type_15 = ();
type type_16 = (type_15);
type type_17 = heap_cell;
type type_18 = (type_17);
type type_19 = (type_18);
type type_20 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_21 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_22 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_23 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_24 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_25 = (type_23, type_24);
type type_26 = ();
type type_27 = (type_26);
type type_28 = heap_cell;
type type_29 = (type_28);
type type_30 = (type_29);
type type_31 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_32 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
type type_33 = (type_31, type_32);
type type_34 = "UserApp"::"jY\xe2\xcd\xd2\xfd/t";
}
fn "\t\x00\x00\x00\x00\x00\x00\x00_\xa8\x0c\xbc5\xf4\x81h\x00\x00\x00\x00\x00\x00\x00\x00\x00`pf..mainForHost`\x00\x00\x00\x00\x00\x00\x00\x00" (val_0: type_0) -> type_2 {
let val_1 = make_tuple ();
let val_2 = call["\x01\x00\x00\x00"] "UserApp"::"\x08\x00\x00\x00\x00\x00\x00\x00_\xa8\x0c\xbc5\xf4\x81h\x00\x00\x00\x00\x00\x00\x00\x00\x00`#UserApp.main`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" (val_1);
val_2
} where {
type type_0 = ();
type type_1 = heap_cell;
type type_2 = (type_1);
}
fn "mainForHost" (val_0: type_3) -> type_3 {
let val_6 = choice {
case {
let val_1 = make_tuple ();
let val_2 = make_union<type_1, type_0> 0 (val_1);
let val_3 = unwrap_union 1 (val_2);
let val_4 = call["\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"] "UserApp"::"\t\x00\x00\x00\x00\x00\x00\x00_\xa8\x0c\xbc5\xf4\x81h\x00\x00\x00\x00\x00\x00\x00\x00\x00`pf..mainForHost`\x00\x00\x00\x00\x00\x00\x00\x00" (val_3);
let val_5 = unknown_with<type_2> (val_4);
val_5
},
} ();
val_6
} where {
type type_0 = ();
type type_1 = ();
type type_2 = ();
type type_3 = ();
}
}
entry_point "mainForHost" = "UserApp"::"mainForHost";
}
procedure : `pf..mainForHost` Str
procedure = `pf..mainForHost` ():
let `pf..0` : Builtin(Str) = CallByName `#UserApp.main`;
ret `pf..0`;
procedure : `#UserApp.main` Str
procedure = `#UserApp.main` ():
let `#UserApp.7` : Builtin(Int(I64)) = 5i64;
let `#UserApp.x` : _ = Val `#UserApp.7`;
inc 2 `#UserApp.x`;
let `#UserApp.6` : _ = CallByName `#UserApp.add` `#UserApp.x` `#UserApp.x`;
let `#UserApp.f` : _ = CallByName `#UserApp.add` `#UserApp.x` `#UserApp.6`;
let `#UserApp.5` : Builtin(Str) = "Hello World";
ret `#UserApp.5`;
procedure : `Num.add` I64
procedure = `Num.add` (`#Attr.#arg1`, `#Attr.#arg2`):
let `#UserApp.12` : Builtin(Int(I64)) = lowlevel NumAdd `#Attr.#arg1` `#Attr.#arg2`;
ret `#UserApp.12`;
procedure : `#UserApp.add` TODO
procedure = `#UserApp.add` (`#UserApp.a`, `#UserApp.b`):
let `#UserApp.9` : Struct([_, _]) = Struct {`#UserApp.a`, `#UserApp.b`};
joinpoint `#UserApp.22`:
let `#UserApp.f` : _ = StructAtIndex 0 `#UserApp.9`;
inc `#UserApp.f`;
let `#UserApp.g` : _ = StructAtIndex 1 `#UserApp.9`;
inc `#UserApp.g`;
dec `#UserApp.9`;
let `#UserApp.16` : _ = Add `#UserApp.f` `#UserApp.g`;
ret `#UserApp.16`;
in
let `#UserApp.30` : _ = StructAtIndex 0 `#UserApp.9`;
inc `#UserApp.30`;
let `#UserApp.31` : Builtin(Int(U8)) = 1i64;
let `#UserApp.32` : Builtin(Int(U8)) = GetTagId `#UserApp.30`;
dec `#UserApp.30`;
let `#UserApp.33` : Builtin(Bool) = lowlevel Eq `#UserApp.31` `#UserApp.32`;
if `#UserApp.33` then <no branch info>
let `#UserApp.23` : _ = StructAtIndex 1 `#UserApp.9`;
inc `#UserApp.23`;
let `#UserApp.29` : Builtin(Int(U8)) = GetTagId `#UserApp.23`;
switch `#UserApp.29`:
case 1:
let `#UserApp.18` : _ = StructAtIndex 0 `#UserApp.9`;
inc `#UserApp.18`;
let `#UserApp.n` : Builtin(Int(I64)) = UnionAtIndex (Id 1) (Index 0) `#UserApp.18`;
dec `#UserApp.18`;
let `#UserApp.17` : _ = StructAtIndex 1 `#UserApp.9`;
inc `#UserApp.17`;
dec `#UserApp.9`;
let `#UserApp.m` : Builtin(Int(I64)) = UnionAtIndex (Id 1) (Index 0) `#UserApp.17`;
dec `#UserApp.17`;
let `#UserApp.IdentId(50)` : _ = Reset { symbol: `#UserApp.23`, id: 3 };
let `#UserApp.11` : Builtin(Int(I64)) = CallByName `Num.add` `#UserApp.n` `#UserApp.m`;
let `#UserApp.10` : _ = Reuse `#UserApp.IdentId(50)` UpdateModeId { id: 3 } Val `#UserApp.11`;
ret `#UserApp.10`;
case 0:
let `#UserApp.24` : _ = StructAtIndex 1 `#UserApp.9`;
inc `#UserApp.24`;
let `#UserApp.25` : _ = UnionAtIndex (Id 0) (Index 0) `#UserApp.24`;
inc `#UserApp.25`;
dec `#UserApp.24`;
let `#UserApp.IdentId(51)` : _ = Reset { symbol: `#UserApp.23`, id: 4 };
let `#UserApp.26` : Builtin(Int(U8)) = 1i64;
let `#UserApp.27` : Builtin(Int(U8)) = GetTagId `#UserApp.25`;
dec `#UserApp.25`;
let `#UserApp.28` : Builtin(Bool) = lowlevel Eq `#UserApp.26` `#UserApp.27`;
if `#UserApp.28` then <no branch info>
let `#UserApp.21` : _ = StructAtIndex 0 `#UserApp.9`;
inc `#UserApp.21`;
let `#UserApp.n` : Builtin(Int(I64)) = UnionAtIndex (Id 1) (Index 0) `#UserApp.21`;
dec `#UserApp.21`;
let `#UserApp.19` : _ = StructAtIndex 1 `#UserApp.9`;
inc `#UserApp.19`;
dec `#UserApp.9`;
let `#UserApp.20` : _ = UnionAtIndex (Id 0) (Index 0) `#UserApp.19`;
inc `#UserApp.20`;
let `#UserApp.m` : Builtin(Int(I64)) = UnionAtIndex (Id 1) (Index 0) `#UserApp.20`;
dec `#UserApp.20`;
let `#UserApp.f` : _ = UnionAtIndex (Id 0) (Index 1) `#UserApp.19`;
inc `#UserApp.f`;
dec `#UserApp.19`;
let `#UserApp.15` : Builtin(Int(I64)) = CallByName `Num.add` `#UserApp.n` `#UserApp.m`;
let `#UserApp.14` : _ = Reuse `#UserApp.IdentId(51)` UpdateModeId { id: 4 } Val `#UserApp.15`;
let `#UserApp.13` : _ = CallByName `#UserApp.add` `#UserApp.14` `#UserApp.f`;
ret `#UserApp.13`;
else <no branch info>
decref `#UserApp.IdentId(51)`;
jump `#UserApp.22`;
default:
dec `#UserApp.23`;
jump `#UserApp.22`;
else <no branch info>
jump `#UserApp.22`;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment