@salang/sa 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (282) hide show
  1. package/bin/sa.js +13 -1
  2. package/package.json +8 -7
  3. package/sa_std/alloc/layout.sal +12 -0
  4. package/sa_std/alloc/prelude.sa +1 -0
  5. package/sa_std/alloc/prelude.sal +1 -0
  6. package/sa_std/alloc/string.sa +3 -0
  7. package/sa_std/alloc/vec.sa +684 -0
  8. package/sa_std/alloc/vec.sal +4 -0
  9. package/sa_std/any.sa +130 -0
  10. package/sa_std/any.sal +23 -0
  11. package/sa_std/array.sa +1876 -0
  12. package/sa_std/ascii.sa +2 -0
  13. package/sa_std/ascii.sal +1 -0
  14. package/sa_std/async.sla +116 -0
  15. package/sa_std/binary_heap.sa +3003 -0
  16. package/sa_std/binary_heap.sal +7 -0
  17. package/sa_std/borrow.sa +171 -0
  18. package/sa_std/borrow.sal +13 -0
  19. package/sa_std/btree_map.sa +2210 -0
  20. package/sa_std/btree_map.sal +11 -0
  21. package/sa_std/btree_set.sa +1072 -0
  22. package/sa_std/btree_set.sal +6 -0
  23. package/sa_std/char.sa +1309 -0
  24. package/sa_std/char.sal +50 -0
  25. package/sa_std/cmp.sa +554 -0
  26. package/sa_std/cmp.sal +14 -0
  27. package/sa_std/collections/binary_heap.sa +1 -0
  28. package/sa_std/collections/btree_map.sa +1 -0
  29. package/sa_std/collections/btree_set.sa +1 -0
  30. package/sa_std/collections/hashmap.sa +1 -0
  31. package/sa_std/collections/hashset.sa +1 -0
  32. package/sa_std/collections/linked_list.sa +1120 -0
  33. package/sa_std/collections/linked_list.sal +10 -0
  34. package/sa_std/collections/prelude.sa +7 -0
  35. package/sa_std/collections/prelude.sal +1 -0
  36. package/sa_std/collections/vec_deque.sa +1 -0
  37. package/sa_std/collections.sal +13 -0
  38. package/sa_std/convert.sa +1115 -0
  39. package/sa_std/convert.sal +24 -0
  40. package/sa_std/core/arc.sa +233 -0
  41. package/sa_std/core/arc.sal +4 -0
  42. package/sa_std/core/ascii.sa +784 -0
  43. package/sa_std/core/ascii.sal +34 -0
  44. package/sa_std/core/bit.sa +41 -0
  45. package/sa_std/core/box.sa +1 -0
  46. package/sa_std/core/box.sal +2 -0
  47. package/sa_std/core/cell.sa +108 -0
  48. package/sa_std/core/cell.sal +5 -0
  49. package/sa_std/core/cleanup.sa +26 -0
  50. package/sa_std/core/control.sa +20 -0
  51. package/sa_std/core/derive.sa +60 -0
  52. package/sa_std/core/derive.sal +1 -0
  53. package/sa_std/core/dispatch.sa +7 -0
  54. package/sa_std/core/dispatch.sal +5 -0
  55. package/sa_std/core/future.sa +777 -0
  56. package/sa_std/core/future.sal +73 -0
  57. package/sa_std/core/hash.sa +48 -0
  58. package/sa_std/core/iter.sa +2805 -0
  59. package/sa_std/core/iter.sal +4 -0
  60. package/sa_std/core/loop.sa +60 -0
  61. package/sa_std/core/mem.sa +220 -0
  62. package/sa_std/core/option.sa +825 -0
  63. package/sa_std/core/option.sal +11 -0
  64. package/sa_std/core/panic.sa +23 -0
  65. package/sa_std/core/panic.sal +12 -0
  66. package/sa_std/core/prelude.sa +18 -0
  67. package/sa_std/core/prelude.sal +18 -0
  68. package/sa_std/core/rc.sa +225 -0
  69. package/sa_std/core/rc.sal +4 -0
  70. package/sa_std/core/refcell.sa +283 -0
  71. package/sa_std/core/refcell.sal +13 -0
  72. package/sa_std/core/result.sa +708 -0
  73. package/sa_std/core/result.sal +6 -0
  74. package/sa_std/core/rust_patterns.sal +295 -0
  75. package/sa_std/core/sa_core.sa +84 -0
  76. package/sa_std/core/slice.sa +4021 -0
  77. package/sa_std/core/slice.sal +7 -0
  78. package/sa_std/core/task.sa +112 -0
  79. package/sa_std/core/task.sal +15 -0
  80. package/sa_std/core/trait_object.sa +26 -0
  81. package/sa_std/core/trait_object.sal +4 -0
  82. package/sa_std/core/waker.sa +289 -0
  83. package/sa_std/core/waker.sal +31 -0
  84. package/sa_std/core/weak.sa +2 -0
  85. package/sa_std/core/weak.sal +4 -0
  86. package/sa_std/cow.sa +3 -0
  87. package/sa_std/cow.sal +2 -0
  88. package/sa_std/cstring.sa +3 -0
  89. package/sa_std/cstring.sal +2 -0
  90. package/sa_std/default.sa +99 -0
  91. package/sa_std/duration.sa +3 -0
  92. package/sa_std/duration.sal +2 -0
  93. package/sa_std/encoding/json.sa +259 -0
  94. package/sa_std/encoding/json.sai +54 -0
  95. package/sa_std/encoding/json.sal +35 -0
  96. package/sa_std/encoding/prelude.sa +1 -0
  97. package/sa_std/encoding/prelude.sal +0 -0
  98. package/sa_std/env.sa +390 -0
  99. package/sa_std/env.sai +25 -0
  100. package/sa_std/error.sa +253 -0
  101. package/sa_std/error.sal +44 -0
  102. package/sa_std/ffi/cstring.sa +3 -0
  103. package/sa_std/ffi/cstring.sal +1 -0
  104. package/sa_std/ffi/prelude.sa +2 -0
  105. package/sa_std/ffi/prelude.sal +2 -0
  106. package/sa_std/ffi.sa +635 -0
  107. package/sa_std/ffi.sal +51 -0
  108. package/sa_std/fmt.sa +2 -0
  109. package/sa_std/fmt.sai +18 -0
  110. package/sa_std/fmt.sal +35 -0
  111. package/sa_std/fs.sa +1023 -0
  112. package/sa_std/fs.sai +127 -0
  113. package/sa_std/fs.sal +51 -0
  114. package/sa_std/future.sa +2 -0
  115. package/sa_std/future.sal +1 -0
  116. package/sa_std/hash.sa +1486 -0
  117. package/sa_std/hash.sal +13 -0
  118. package/sa_std/hashmap.sa +1962 -0
  119. package/sa_std/hashmap.sal +20 -0
  120. package/sa_std/hashset.sa +1004 -0
  121. package/sa_std/hashset.sal +18 -0
  122. package/sa_std/http2.sa +78 -0
  123. package/sa_std/http2.sai +26 -0
  124. package/sa_std/http2.sal +36 -0
  125. package/sa_std/instant.sa +3 -0
  126. package/sa_std/instant.sal +2 -0
  127. package/sa_std/io/buf_reader.sa +43 -0
  128. package/sa_std/io/buf_writer.sa +35 -0
  129. package/sa_std/io/bufio.sa +4 -0
  130. package/sa_std/io/bufio.sal +4 -0
  131. package/sa_std/io/prelude.sa +1 -0
  132. package/sa_std/io/prelude.sal +1 -0
  133. package/sa_std/io/print.sa +2 -0
  134. package/sa_std/io/print.sai +3 -0
  135. package/sa_std/io.sa +925 -0
  136. package/sa_std/io.sai +25 -0
  137. package/sa_std/io.sal +84 -0
  138. package/sa_std/iter.sa +2 -0
  139. package/sa_std/iter.sal +1 -0
  140. package/sa_std/join_handle.sa +3 -0
  141. package/sa_std/join_handle.sal +2 -0
  142. package/sa_std/libsa_async.sa +80 -0
  143. package/sa_std/m_async.sa +137 -0
  144. package/sa_std/m_async.sal +30 -0
  145. package/sa_std/m_async.sla +2 -0
  146. package/sa_std/manually_drop.sa +3 -0
  147. package/sa_std/manually_drop.sal +2 -0
  148. package/sa_std/marker/phantom_data.sa +3 -0
  149. package/sa_std/marker/phantom_data.sal +1 -0
  150. package/sa_std/marker/prelude.sa +4 -0
  151. package/sa_std/marker/prelude.sal +4 -0
  152. package/sa_std/marker.sa +220 -0
  153. package/sa_std/marker.sal +15 -0
  154. package/sa_std/math.sa +84 -0
  155. package/sa_std/math.sai +10 -0
  156. package/sa_std/mem/manually_drop.sa +3 -0
  157. package/sa_std/mem/manually_drop.sal +1 -0
  158. package/sa_std/mem/prelude.sa +2 -0
  159. package/sa_std/mem/prelude.sal +2 -0
  160. package/sa_std/mem.sa +564 -0
  161. package/sa_std/mem.sal +40 -0
  162. package/sa_std/modstate.sai +19 -0
  163. package/sa_std/net.sa +4227 -0
  164. package/sa_std/net.sai +239 -0
  165. package/sa_std/net.sal +159 -0
  166. package/sa_std/netx.sa +85 -0
  167. package/sa_std/netx.sai +11 -0
  168. package/sa_std/netx.sal +39 -0
  169. package/sa_std/nonzero.sa +3 -0
  170. package/sa_std/nonzero.sal +2 -0
  171. package/sa_std/num/nonzero.sa +3 -0
  172. package/sa_std/num/nonzero.sal +1 -0
  173. package/sa_std/num/prelude.sa +3 -0
  174. package/sa_std/num/prelude.sal +3 -0
  175. package/sa_std/num.sa +17302 -0
  176. package/sa_std/num.sai +11 -0
  177. package/sa_std/num.sal +341 -0
  178. package/sa_std/ops.sa +1884 -0
  179. package/sa_std/ops.sal +68 -0
  180. package/sa_std/option.sa +2 -0
  181. package/sa_std/option.sal +1 -0
  182. package/sa_std/os/fd.sa +96 -0
  183. package/sa_std/os/fd.sai +7 -0
  184. package/sa_std/os/fd.sal +11 -0
  185. package/sa_std/os/prelude.sa +2 -0
  186. package/sa_std/os/prelude.sal +1 -0
  187. package/sa_std/os/unix_ffi.sa +271 -0
  188. package/sa_std/panic.sa +1 -0
  189. package/sa_std/panic.sal +1 -0
  190. package/sa_std/path.sa +3170 -0
  191. package/sa_std/path.sal +12 -0
  192. package/sa_std/phantom_data.sa +3 -0
  193. package/sa_std/phantom_data.sal +2 -0
  194. package/sa_std/pin.sa +79 -0
  195. package/sa_std/pin.sal +5 -0
  196. package/sa_std/plugin_async.sa +90 -0
  197. package/sa_std/plugin_async.sal +29 -0
  198. package/sa_std/plugin_async.sla +4 -0
  199. package/sa_std/plugin_http_async.sa +46 -0
  200. package/sa_std/plugin_http_server.sa +61 -0
  201. package/sa_std/plugin_http_server.sla +2 -0
  202. package/sa_std/plugin_sqlite.sa +106 -0
  203. package/sa_std/plugin_sqlite.sla +2 -0
  204. package/sa_std/prelude.sa +60 -0
  205. package/sa_std/prelude.sal +55 -0
  206. package/sa_std/process.sa +916 -0
  207. package/sa_std/process.sai +57 -0
  208. package/sa_std/process.sal +27 -0
  209. package/sa_std/ptr.sa +503 -0
  210. package/sa_std/ptr.sal +2 -0
  211. package/sa_std/result.sa +2 -0
  212. package/sa_std/result.sal +1 -0
  213. package/sa_std/rust_core.sa +51 -0
  214. package/sa_std/rust_core.sal +26 -0
  215. package/sa_std/sa.mod +7 -0
  216. package/sa_std/sort.sa +156 -0
  217. package/sa_std/str.sla +13 -0
  218. package/sa_std/string.sa +12240 -0
  219. package/sa_std/string.sai +25 -0
  220. package/sa_std/string.sal +17 -0
  221. package/sa_std/string_format.sa +269 -0
  222. package/sa_std/sync/atomic.sa +1500 -0
  223. package/sa_std/sync/atomic.sal +45 -0
  224. package/sa_std/sync/barrier.sa +105 -0
  225. package/sa_std/sync/barrier.sal +7 -0
  226. package/sa_std/sync/condvar.sa +240 -0
  227. package/sa_std/sync/condvar.sal +4 -0
  228. package/sa_std/sync/mpsc.sa +758 -0
  229. package/sa_std/sync/mpsc.sal +42 -0
  230. package/sa_std/sync/mpsc_list.sa +255 -0
  231. package/sa_std/sync/mpsc_list.sal +3 -0
  232. package/sa_std/sync/mutex.sa +182 -0
  233. package/sa_std/sync/mutex.sal +7 -0
  234. package/sa_std/sync/once.sa +371 -0
  235. package/sa_std/sync/once.sal +31 -0
  236. package/sa_std/sync/poison.sa +36 -0
  237. package/sa_std/sync/poison.sal +11 -0
  238. package/sa_std/sync/prelude.sa +8 -0
  239. package/sa_std/sync/prelude.sal +7 -0
  240. package/sa_std/sync/rwlock.sa +369 -0
  241. package/sa_std/sync/rwlock.sal +13 -0
  242. package/sa_std/task.sa +2 -0
  243. package/sa_std/task.sal +1 -0
  244. package/sa_std/term.sa +2 -0
  245. package/sa_std/term.sai +10 -0
  246. package/sa_std/term.sal +33 -0
  247. package/sa_std/testing/assert.sai +4 -0
  248. package/sa_std/testing/mock_io.sa +174 -0
  249. package/sa_std/testing/mock_io.sal +5 -0
  250. package/sa_std/testing/prelude.sa +2 -0
  251. package/sa_std/testing/prelude.sal +1 -0
  252. package/sa_std/text/prelude.sa +1 -0
  253. package/sa_std/text/prelude.sal +1 -0
  254. package/sa_std/text/regex.sa +2 -0
  255. package/sa_std/text/regex.sai +9 -0
  256. package/sa_std/text/regex.sal +33 -0
  257. package/sa_std/thread/join_handle.sa +3 -0
  258. package/sa_std/thread/join_handle.sal +1 -0
  259. package/sa_std/thread/prelude.sa +4 -0
  260. package/sa_std/thread/prelude.sal +3 -0
  261. package/sa_std/thread.sa +160 -0
  262. package/sa_std/thread.sai +11 -0
  263. package/sa_std/thread.sal +4 -0
  264. package/sa_std/thread_local.sa +45 -0
  265. package/sa_std/thread_local.sai +9 -0
  266. package/sa_std/time/duration.sa +3 -0
  267. package/sa_std/time/duration.sal +1 -0
  268. package/sa_std/time/instant.sa +3 -0
  269. package/sa_std/time/instant.sal +1 -0
  270. package/sa_std/time/prelude.sa +4 -0
  271. package/sa_std/time/prelude.sal +4 -0
  272. package/sa_std/time.sa +850 -0
  273. package/sa_std/time.sai +37 -0
  274. package/sa_std/time.sal +35 -0
  275. package/sa_std/time.sla +67 -0
  276. package/sa_std/tls_client.sai +39 -0
  277. package/sa_std/vec.sa +5754 -0
  278. package/sa_std/vec.sal +1 -0
  279. package/sa_std/vec_deque.sa +4925 -0
  280. package/sa_std/vec_deque.sal +8 -0
  281. package/sa_std/vec_runtime_macros.sa +11 -0
  282. package/sa_std/ws_client.sai +57 -0
@@ -0,0 +1,708 @@
1
+ @import "result.sal"
2
+ @import "option.sal"
3
+ @import "panic.sa"
4
+
5
+ @const RESULT_UNWRAP_PANIC = utf8:"called Result::unwrap() on an Err value"
6
+ @const RESULT_UNWRAP_ERR_PANIC = utf8:"called Result::unwrap_err() on an Ok value"
7
+
8
+ [MACRO] RESULT_NEW_OK %out_res, %value
9
+ %out_res = alloc Result_SIZE
10
+ store %out_res+Result_tag, Result_OK as u64
11
+ store %out_res+Result_ok, %value as u64
12
+ store %out_res+Result_err, 0 as u64
13
+ [END_MACRO]
14
+
15
+ [MACRO] RESULT_NEW_ERR %out_res, %err
16
+ %out_res = alloc Result_SIZE
17
+ store %out_res+Result_tag, Result_ERR as u64
18
+ store %out_res+Result_ok, 0 as u64
19
+ store %out_res+Result_err, %err as u64
20
+ [END_MACRO]
21
+
22
+ // Rust constructor-name bare alias over RESULT_NEW_OK.
23
+ [MACRO] RESULT_OK %out_res, %value
24
+ EXPAND RESULT_NEW_OK %out_res, %value
25
+ [END_MACRO]
26
+
27
+ // Rust constructor-name bare alias over RESULT_NEW_ERR.
28
+ [MACRO] RESULT_ERR %out_res, %err
29
+ EXPAND RESULT_NEW_ERR %out_res, %err
30
+ [END_MACRO]
31
+
32
+ [MACRO] RESULT_DEFAULT %out_res
33
+ %out_res = alloc Result_SIZE
34
+ store %out_res+Result_tag, Result_OK as u64
35
+ store %out_res+Result_ok, 0 as u64
36
+ store %out_res+Result_err, 0 as u64
37
+ [END_MACRO]
38
+
39
+ [MACRO] RESULT_IS_OK %out_bool, %res_reg
40
+ __result_tag_%out_bool = load %res_reg+Result_tag as u64
41
+ %out_bool = eq __result_tag_%out_bool, Result_OK
42
+ !__result_tag_%out_bool
43
+ [END_MACRO]
44
+
45
+ [MACRO] RESULT_IS_ERR %out_bool, %res_reg
46
+ __result_tag_%out_bool = load %res_reg+Result_tag as u64
47
+ %out_bool = eq __result_tag_%out_bool, Result_ERR
48
+ !__result_tag_%out_bool
49
+ [END_MACRO]
50
+
51
+ [MACRO] RESULT_GET_OK %out_value, %res_reg
52
+ %out_value = load %res_reg+Result_ok as u64
53
+ [END_MACRO]
54
+
55
+ [MACRO] RESULT_GET_ERR %out_value, %res_reg
56
+ %out_value = load %res_reg+Result_err as u64
57
+ [END_MACRO]
58
+
59
+ [MACRO] RESULT_AS_REF %out_res, %res_reg
60
+ %out_res = alloc Result_SIZE
61
+ __result_as_ref_tag_%out_res = load %res_reg+Result_tag as u64
62
+ __result_as_ref_ok_%out_res = eq __result_as_ref_tag_%out_res, Result_OK
63
+ br __result_as_ref_ok_%out_res -> L_RESULT_AS_REF_OK_%out_res, L_RESULT_AS_REF_ERR_%out_res
64
+ L_RESULT_AS_REF_OK_%out_res:
65
+ __result_as_ref_ok_ptr_%out_res = ptr_add %res_reg, Result_ok
66
+ store %out_res+Result_tag, Result_OK as u64
67
+ store %out_res+Result_ok, __result_as_ref_ok_ptr_%out_res as ptr
68
+ store %out_res+Result_err, 0 as u64
69
+ !__result_as_ref_ok_ptr_%out_res
70
+ !__result_as_ref_ok_%out_res
71
+ !__result_as_ref_tag_%out_res
72
+ jmp L_RESULT_AS_REF_END_%out_res
73
+ L_RESULT_AS_REF_ERR_%out_res:
74
+ __result_as_ref_err_ptr_%out_res = ptr_add %res_reg, Result_err
75
+ store %out_res+Result_tag, Result_ERR as u64
76
+ store %out_res+Result_ok, 0 as u64
77
+ store %out_res+Result_err, __result_as_ref_err_ptr_%out_res as ptr
78
+ !__result_as_ref_err_ptr_%out_res
79
+ !__result_as_ref_ok_%out_res
80
+ !__result_as_ref_tag_%out_res
81
+ L_RESULT_AS_REF_END_%out_res:
82
+ [END_MACRO]
83
+
84
+ [MACRO] RESULT_AS_MUT %out_res, %res_reg
85
+ EXPAND RESULT_AS_REF %out_res, %res_reg
86
+ [END_MACRO]
87
+
88
+ [MACRO] RESULT_COPIED_U64 %out_res, %res_reg
89
+ %out_res = alloc Result_SIZE
90
+ __result_copied_tag_%out_res = load %res_reg+Result_tag as u64
91
+ __result_copied_ok_%out_res = eq __result_copied_tag_%out_res, Result_OK
92
+ br __result_copied_ok_%out_res -> L_RESULT_COPIED_OK_%out_res, L_RESULT_COPIED_ERR_%out_res
93
+ L_RESULT_COPIED_OK_%out_res:
94
+ __result_copied_ok_ptr_%out_res = load %res_reg+Result_ok as ptr
95
+ __result_copied_ok_value_%out_res = load __result_copied_ok_ptr_%out_res+0 as u64
96
+ store %out_res+Result_tag, Result_OK as u64
97
+ store %out_res+Result_ok, __result_copied_ok_value_%out_res as u64
98
+ store %out_res+Result_err, 0 as u64
99
+ !__result_copied_ok_value_%out_res
100
+ !__result_copied_ok_ptr_%out_res
101
+ !__result_copied_ok_%out_res
102
+ !__result_copied_tag_%out_res
103
+ jmp L_RESULT_COPIED_END_%out_res
104
+ L_RESULT_COPIED_ERR_%out_res:
105
+ __result_copied_err_ptr_%out_res = load %res_reg+Result_err as ptr
106
+ __result_copied_err_value_%out_res = load __result_copied_err_ptr_%out_res+0 as u64
107
+ store %out_res+Result_tag, Result_ERR as u64
108
+ store %out_res+Result_ok, 0 as u64
109
+ store %out_res+Result_err, __result_copied_err_value_%out_res as u64
110
+ !__result_copied_err_value_%out_res
111
+ !__result_copied_err_ptr_%out_res
112
+ !__result_copied_ok_%out_res
113
+ !__result_copied_tag_%out_res
114
+ L_RESULT_COPIED_END_%out_res:
115
+ [END_MACRO]
116
+
117
+ // Rust method-name alias over RESULT_COPIED_U64.
118
+ [MACRO] RESULT_COPIED %out_res, %res_reg
119
+ EXPAND RESULT_COPIED_U64 %out_res, %res_reg
120
+ [END_MACRO]
121
+
122
+ [MACRO] RESULT_CLONED_U64 %out_res, %res_reg
123
+ EXPAND RESULT_COPIED_U64 %out_res, %res_reg
124
+ [END_MACRO]
125
+
126
+ // Rust method-name alias over RESULT_CLONED_U64.
127
+ [MACRO] RESULT_CLONED %out_res, %res_reg
128
+ EXPAND RESULT_CLONED_U64 %out_res, %res_reg
129
+ [END_MACRO]
130
+
131
+ [MACRO] RESULT_COPY %out_res, %res_reg
132
+ %out_res = alloc Result_SIZE
133
+ __result_copy_tag_%out_res = load %res_reg+Result_tag as u64
134
+ __result_copy_ok_%out_res = load %res_reg+Result_ok as u64
135
+ __result_copy_err_%out_res = load %res_reg+Result_err as u64
136
+ store %out_res+Result_tag, __result_copy_tag_%out_res as u64
137
+ store %out_res+Result_ok, __result_copy_ok_%out_res as u64
138
+ store %out_res+Result_err, __result_copy_err_%out_res as u64
139
+ !__result_copy_err_%out_res
140
+ !__result_copy_ok_%out_res
141
+ !__result_copy_tag_%out_res
142
+ [END_MACRO]
143
+
144
+ [MACRO] RESULT_IS_OK_AND %out_bool, %res_reg, %pred_fn
145
+ __result_ok_and_tag_%out_bool = load %res_reg+Result_tag as u64
146
+ __result_ok_and_ok_%out_bool = eq __result_ok_and_tag_%out_bool, Result_OK
147
+ br __result_ok_and_ok_%out_bool -> L_RESULT_OK_AND_OK_%out_bool, L_RESULT_OK_AND_ERR_%out_bool
148
+ L_RESULT_OK_AND_OK_%out_bool:
149
+ __result_ok_and_value_%out_bool = load %res_reg+Result_ok as u64
150
+ __result_ok_and_pred_%out_bool = call %pred_fn(__result_ok_and_value_%out_bool)
151
+ %out_bool = ne __result_ok_and_pred_%out_bool, 0
152
+ !__result_ok_and_pred_%out_bool
153
+ !__result_ok_and_value_%out_bool
154
+ !__result_ok_and_ok_%out_bool
155
+ !__result_ok_and_tag_%out_bool
156
+ jmp L_RESULT_OK_AND_END_%out_bool
157
+ L_RESULT_OK_AND_ERR_%out_bool:
158
+ %out_bool = add 0, 0
159
+ !__result_ok_and_ok_%out_bool
160
+ !__result_ok_and_tag_%out_bool
161
+ L_RESULT_OK_AND_END_%out_bool:
162
+ [END_MACRO]
163
+
164
+ [MACRO] RESULT_IS_ERR_AND %out_bool, %res_reg, %pred_fn
165
+ __result_err_and_tag_%out_bool = load %res_reg+Result_tag as u64
166
+ __result_err_and_err_%out_bool = eq __result_err_and_tag_%out_bool, Result_ERR
167
+ br __result_err_and_err_%out_bool -> L_RESULT_ERR_AND_ERR_%out_bool, L_RESULT_ERR_AND_OK_%out_bool
168
+ L_RESULT_ERR_AND_ERR_%out_bool:
169
+ __result_err_and_value_%out_bool = load %res_reg+Result_err as u64
170
+ __result_err_and_pred_%out_bool = call %pred_fn(__result_err_and_value_%out_bool)
171
+ %out_bool = ne __result_err_and_pred_%out_bool, 0
172
+ !__result_err_and_pred_%out_bool
173
+ !__result_err_and_value_%out_bool
174
+ !__result_err_and_err_%out_bool
175
+ !__result_err_and_tag_%out_bool
176
+ jmp L_RESULT_ERR_AND_END_%out_bool
177
+ L_RESULT_ERR_AND_OK_%out_bool:
178
+ %out_bool = add 0, 0
179
+ !__result_err_and_err_%out_bool
180
+ !__result_err_and_tag_%out_bool
181
+ L_RESULT_ERR_AND_END_%out_bool:
182
+ [END_MACRO]
183
+
184
+ [MACRO] RESULT_UNWRAP_OR %out_value, %res_reg, %default_value
185
+ __result_tag_%out_value = load %res_reg+Result_tag as u64
186
+ __result_is_ok_%out_value = eq __result_tag_%out_value, Result_OK
187
+ br __result_is_ok_%out_value -> L_RESULT_UNWRAP_OR_OK_%out_value, L_RESULT_UNWRAP_OR_ERR_%out_value
188
+ L_RESULT_UNWRAP_OR_OK_%out_value:
189
+ %out_value = load %res_reg+Result_ok as u64
190
+ !__result_tag_%out_value
191
+ jmp L_RESULT_UNWRAP_OR_END_%out_value
192
+ L_RESULT_UNWRAP_OR_ERR_%out_value:
193
+ %out_value = add %default_value, 0
194
+ !__result_tag_%out_value
195
+ L_RESULT_UNWRAP_OR_END_%out_value:
196
+ [END_MACRO]
197
+
198
+ [MACRO] RESULT_UNWRAP_OR_ELSE %out_value, %res_reg, %default_fn
199
+ __result_unwrap_else_tag_%out_value = load %res_reg+Result_tag as u64
200
+ __result_unwrap_else_ok_%out_value = eq __result_unwrap_else_tag_%out_value, Result_OK
201
+ br __result_unwrap_else_ok_%out_value -> L_RESULT_UNWRAP_ELSE_OK_%out_value, L_RESULT_UNWRAP_ELSE_ERR_%out_value
202
+ L_RESULT_UNWRAP_ELSE_OK_%out_value:
203
+ %out_value = load %res_reg+Result_ok as u64
204
+ !__result_unwrap_else_ok_%out_value
205
+ !__result_unwrap_else_tag_%out_value
206
+ jmp L_RESULT_UNWRAP_ELSE_END_%out_value
207
+ L_RESULT_UNWRAP_ELSE_ERR_%out_value:
208
+ __result_unwrap_else_err_%out_value = load %res_reg+Result_err as u64
209
+ %out_value = call %default_fn(__result_unwrap_else_err_%out_value)
210
+ !__result_unwrap_else_err_%out_value
211
+ !__result_unwrap_else_ok_%out_value
212
+ !__result_unwrap_else_tag_%out_value
213
+ L_RESULT_UNWRAP_ELSE_END_%out_value:
214
+ [END_MACRO]
215
+
216
+ [MACRO] RESULT_UNWRAP_OR_DEFAULT %out_value, %res_reg
217
+ EXPAND RESULT_UNWRAP_OR %out_value, %res_reg, 0
218
+ [END_MACRO]
219
+
220
+ [MACRO] RESULT_RETURN_ERR %res_reg, %err_value
221
+ store %res_reg+Result_tag, Result_ERR as u64
222
+ store %res_reg+Result_ok, 0 as u64
223
+ store %res_reg+Result_err, %err_value as u64
224
+ return %res_reg
225
+ [END_MACRO]
226
+
227
+ [MACRO] TRY_RESULT %out_value, %res_reg
228
+ __try_result_tag_%out_value = load %res_reg+Result_tag as u64
229
+ __try_result_is_ok_%out_value = eq __try_result_tag_%out_value, Result_OK
230
+ br __try_result_is_ok_%out_value -> L_TRY_RESULT_OK_%out_value, L_TRY_RESULT_ERR_%out_value
231
+ L_TRY_RESULT_OK_%out_value:
232
+ %out_value = load %res_reg+Result_ok as u64
233
+ !__try_result_is_ok_%out_value
234
+ !__try_result_tag_%out_value
235
+ jmp L_TRY_RESULT_END_%out_value
236
+ L_TRY_RESULT_ERR_%out_value:
237
+ !__try_result_is_ok_%out_value
238
+ !__try_result_tag_%out_value
239
+ return %res_reg
240
+ L_TRY_RESULT_END_%out_value:
241
+ [END_MACRO]
242
+
243
+ [MACRO] TRY_RESULT_RETURN %out_value, %res_reg
244
+ EXPAND TRY_RESULT %out_value, %res_reg
245
+ [END_MACRO]
246
+
247
+ [MACRO] RESULT_MAP_OK %out_value, %res_reg, %map_fn
248
+ __result_tag_%out_value = load %res_reg+Result_tag as u64
249
+ __result_is_ok_%out_value = eq __result_tag_%out_value, Result_OK
250
+ br __result_is_ok_%out_value -> L_RESULT_MAP_OK_OK_%out_value, L_RESULT_MAP_OK_ERR_%out_value
251
+ L_RESULT_MAP_OK_OK_%out_value:
252
+ __result_value_%out_value = load %res_reg+Result_ok as u64
253
+ %out_value = call %map_fn(__result_value_%out_value)
254
+ !__result_value_%out_value
255
+ !__result_tag_%out_value
256
+ jmp L_RESULT_MAP_OK_END_%out_value
257
+ L_RESULT_MAP_OK_ERR_%out_value:
258
+ %out_value = add 0, 0
259
+ !__result_tag_%out_value
260
+ L_RESULT_MAP_OK_END_%out_value:
261
+ [END_MACRO]
262
+
263
+ [MACRO] RESULT_MAP %out_res, %res_reg, %map_fn
264
+ %out_res = alloc Result_SIZE
265
+ __result_map_tag_%out_res = load %res_reg+Result_tag as u64
266
+ __result_map_ok_%out_res = eq __result_map_tag_%out_res, Result_OK
267
+ br __result_map_ok_%out_res -> L_RESULT_MAP_OK_%out_res, L_RESULT_MAP_ERR_%out_res
268
+ L_RESULT_MAP_OK_%out_res:
269
+ __result_map_value_%out_res = load %res_reg+Result_ok as u64
270
+ __result_map_mapped_%out_res = call %map_fn(__result_map_value_%out_res)
271
+ store %out_res+Result_tag, Result_OK as u64
272
+ store %out_res+Result_ok, __result_map_mapped_%out_res as u64
273
+ store %out_res+Result_err, 0 as u64
274
+ !__result_map_mapped_%out_res
275
+ !__result_map_value_%out_res
276
+ !__result_map_ok_%out_res
277
+ !__result_map_tag_%out_res
278
+ jmp L_RESULT_MAP_END_%out_res
279
+ L_RESULT_MAP_ERR_%out_res:
280
+ __result_map_err_%out_res = load %res_reg+Result_err as u64
281
+ store %out_res+Result_tag, Result_ERR as u64
282
+ store %out_res+Result_ok, 0 as u64
283
+ store %out_res+Result_err, __result_map_err_%out_res as u64
284
+ !__result_map_err_%out_res
285
+ !__result_map_ok_%out_res
286
+ !__result_map_tag_%out_res
287
+ L_RESULT_MAP_END_%out_res:
288
+ [END_MACRO]
289
+
290
+ [MACRO] RESULT_INSPECT %out_res, %res_reg, %inspect_fn
291
+ __result_inspect_tag_%out_res = load %res_reg+Result_tag as u64
292
+ __result_inspect_ok_%out_res = eq __result_inspect_tag_%out_res, Result_OK
293
+ br __result_inspect_ok_%out_res -> L_RESULT_INSPECT_OK_%out_res, L_RESULT_INSPECT_SKIP_%out_res
294
+ L_RESULT_INSPECT_OK_%out_res:
295
+ __result_inspect_value_%out_res = load %res_reg+Result_ok as u64
296
+ __result_inspect_ignored_%out_res = call %inspect_fn(__result_inspect_value_%out_res)
297
+ !__result_inspect_ignored_%out_res
298
+ !__result_inspect_value_%out_res
299
+ jmp L_RESULT_INSPECT_COPY_%out_res
300
+ L_RESULT_INSPECT_SKIP_%out_res:
301
+ jmp L_RESULT_INSPECT_COPY_%out_res
302
+ L_RESULT_INSPECT_COPY_%out_res:
303
+ EXPAND RESULT_COPY %out_res, %res_reg
304
+ !__result_inspect_ok_%out_res
305
+ !__result_inspect_tag_%out_res
306
+ [END_MACRO]
307
+
308
+ [MACRO] RESULT_INSPECT_ERR %out_res, %res_reg, %inspect_fn
309
+ __result_inspect_err_tag_%out_res = load %res_reg+Result_tag as u64
310
+ __result_inspect_err_is_err_%out_res = eq __result_inspect_err_tag_%out_res, Result_ERR
311
+ br __result_inspect_err_is_err_%out_res -> L_RESULT_INSPECT_ERR_ERR_%out_res, L_RESULT_INSPECT_ERR_SKIP_%out_res
312
+ L_RESULT_INSPECT_ERR_ERR_%out_res:
313
+ __result_inspect_err_value_%out_res = load %res_reg+Result_err as u64
314
+ __result_inspect_err_ignored_%out_res = call %inspect_fn(__result_inspect_err_value_%out_res)
315
+ !__result_inspect_err_ignored_%out_res
316
+ !__result_inspect_err_value_%out_res
317
+ jmp L_RESULT_INSPECT_ERR_COPY_%out_res
318
+ L_RESULT_INSPECT_ERR_SKIP_%out_res:
319
+ jmp L_RESULT_INSPECT_ERR_COPY_%out_res
320
+ L_RESULT_INSPECT_ERR_COPY_%out_res:
321
+ EXPAND RESULT_COPY %out_res, %res_reg
322
+ !__result_inspect_err_is_err_%out_res
323
+ !__result_inspect_err_tag_%out_res
324
+ [END_MACRO]
325
+
326
+ [MACRO] RESULT_MAP_ERR_RESULT %out_res, %res_reg, %map_fn
327
+ %out_res = alloc Result_SIZE
328
+ __result_map_err_tag_%out_res = load %res_reg+Result_tag as u64
329
+ __result_map_err_is_err_%out_res = eq __result_map_err_tag_%out_res, Result_ERR
330
+ br __result_map_err_is_err_%out_res -> L_RESULT_MAP_ERR_RESULT_ERR_%out_res, L_RESULT_MAP_ERR_RESULT_OK_%out_res
331
+ L_RESULT_MAP_ERR_RESULT_ERR_%out_res:
332
+ __result_map_err_value_%out_res = load %res_reg+Result_err as u64
333
+ __result_map_err_mapped_%out_res = call %map_fn(__result_map_err_value_%out_res)
334
+ store %out_res+Result_tag, Result_ERR as u64
335
+ store %out_res+Result_ok, 0 as u64
336
+ store %out_res+Result_err, __result_map_err_mapped_%out_res as u64
337
+ !__result_map_err_mapped_%out_res
338
+ !__result_map_err_value_%out_res
339
+ !__result_map_err_is_err_%out_res
340
+ !__result_map_err_tag_%out_res
341
+ jmp L_RESULT_MAP_ERR_RESULT_END_%out_res
342
+ L_RESULT_MAP_ERR_RESULT_OK_%out_res:
343
+ __result_map_err_ok_%out_res = load %res_reg+Result_ok as u64
344
+ store %out_res+Result_tag, Result_OK as u64
345
+ store %out_res+Result_ok, __result_map_err_ok_%out_res as u64
346
+ store %out_res+Result_err, 0 as u64
347
+ !__result_map_err_ok_%out_res
348
+ !__result_map_err_is_err_%out_res
349
+ !__result_map_err_tag_%out_res
350
+ L_RESULT_MAP_ERR_RESULT_END_%out_res:
351
+ [END_MACRO]
352
+
353
+ [MACRO] RESULT_AND %out_res, %res_reg, %other_res
354
+ __result_and_tag_%out_res = load %res_reg+Result_tag as u64
355
+ __result_and_ok_%out_res = eq __result_and_tag_%out_res, Result_OK
356
+ br __result_and_ok_%out_res -> L_RESULT_AND_OTHER_%out_res, L_RESULT_AND_ERR_%out_res
357
+ L_RESULT_AND_OTHER_%out_res:
358
+ EXPAND RESULT_COPY %out_res, %other_res
359
+ !__result_and_ok_%out_res
360
+ !__result_and_tag_%out_res
361
+ jmp L_RESULT_AND_END_%out_res
362
+ L_RESULT_AND_ERR_%out_res:
363
+ %out_res = alloc Result_SIZE
364
+ __result_and_err_%out_res = load %res_reg+Result_err as u64
365
+ store %out_res+Result_tag, Result_ERR as u64
366
+ store %out_res+Result_ok, 0 as u64
367
+ store %out_res+Result_err, __result_and_err_%out_res as u64
368
+ !__result_and_err_%out_res
369
+ !__result_and_ok_%out_res
370
+ !__result_and_tag_%out_res
371
+ L_RESULT_AND_END_%out_res:
372
+ [END_MACRO]
373
+
374
+ [MACRO] RESULT_OR %out_res, %res_reg, %other_res
375
+ __result_or_tag_%out_res = load %res_reg+Result_tag as u64
376
+ __result_or_ok_%out_res = eq __result_or_tag_%out_res, Result_OK
377
+ br __result_or_ok_%out_res -> L_RESULT_OR_SELF_%out_res, L_RESULT_OR_OTHER_%out_res
378
+ L_RESULT_OR_SELF_%out_res:
379
+ EXPAND RESULT_COPY %out_res, %res_reg
380
+ !__result_or_ok_%out_res
381
+ !__result_or_tag_%out_res
382
+ jmp L_RESULT_OR_END_%out_res
383
+ L_RESULT_OR_OTHER_%out_res:
384
+ EXPAND RESULT_COPY %out_res, %other_res
385
+ !__result_or_ok_%out_res
386
+ !__result_or_tag_%out_res
387
+ L_RESULT_OR_END_%out_res:
388
+ [END_MACRO]
389
+
390
+ [MACRO] RESULT_AND_THEN %out_res, %res_reg, %then_fn
391
+ __result_then_tag_%out_res = load %res_reg+Result_tag as u64
392
+ __result_then_ok_%out_res = eq __result_then_tag_%out_res, Result_OK
393
+ br __result_then_ok_%out_res -> L_RESULT_AND_THEN_OK_%out_res, L_RESULT_AND_THEN_ERR_%out_res
394
+ L_RESULT_AND_THEN_OK_%out_res:
395
+ __result_then_value_%out_res = load %res_reg+Result_ok as u64
396
+ %out_res = call %then_fn(__result_then_value_%out_res)
397
+ !__result_then_value_%out_res
398
+ !__result_then_ok_%out_res
399
+ !__result_then_tag_%out_res
400
+ jmp L_RESULT_AND_THEN_END_%out_res
401
+ L_RESULT_AND_THEN_ERR_%out_res:
402
+ %out_res = alloc Result_SIZE
403
+ __result_then_err_%out_res = load %res_reg+Result_err as u64
404
+ store %out_res+Result_tag, Result_ERR as u64
405
+ store %out_res+Result_ok, 0 as u64
406
+ store %out_res+Result_err, __result_then_err_%out_res as u64
407
+ !__result_then_err_%out_res
408
+ !__result_then_ok_%out_res
409
+ !__result_then_tag_%out_res
410
+ L_RESULT_AND_THEN_END_%out_res:
411
+ [END_MACRO]
412
+
413
+ [MACRO] RESULT_OR_ELSE %out_res, %res_reg, %else_fn
414
+ __result_or_else_tag_%out_res = load %res_reg+Result_tag as u64
415
+ __result_or_else_ok_%out_res = eq __result_or_else_tag_%out_res, Result_OK
416
+ br __result_or_else_ok_%out_res -> L_RESULT_OR_ELSE_SELF_%out_res, L_RESULT_OR_ELSE_DEFAULT_%out_res
417
+ L_RESULT_OR_ELSE_SELF_%out_res:
418
+ EXPAND RESULT_COPY %out_res, %res_reg
419
+ !__result_or_else_ok_%out_res
420
+ !__result_or_else_tag_%out_res
421
+ jmp L_RESULT_OR_ELSE_END_%out_res
422
+ L_RESULT_OR_ELSE_DEFAULT_%out_res:
423
+ __result_or_else_err_%out_res = load %res_reg+Result_err as u64
424
+ %out_res = call %else_fn(__result_or_else_err_%out_res)
425
+ !__result_or_else_err_%out_res
426
+ !__result_or_else_ok_%out_res
427
+ !__result_or_else_tag_%out_res
428
+ L_RESULT_OR_ELSE_END_%out_res:
429
+ [END_MACRO]
430
+
431
+ [MACRO] RESULT_OK_TO_OPTION %out_opt, %res_reg
432
+ %out_opt = alloc Option_SIZE
433
+ __result_ok_option_tag_%out_opt = load %res_reg+Result_tag as u64
434
+ __result_ok_option_ok_%out_opt = eq __result_ok_option_tag_%out_opt, Result_OK
435
+ br __result_ok_option_ok_%out_opt -> L_RESULT_OK_TO_OPTION_SOME_%out_opt, L_RESULT_OK_TO_OPTION_NONE_%out_opt
436
+ L_RESULT_OK_TO_OPTION_SOME_%out_opt:
437
+ __result_ok_option_value_%out_opt = load %res_reg+Result_ok as u64
438
+ store %out_opt+Option_tag, Option_SOME as u64
439
+ store %out_opt+Option_value, __result_ok_option_value_%out_opt as u64
440
+ !__result_ok_option_value_%out_opt
441
+ !__result_ok_option_ok_%out_opt
442
+ !__result_ok_option_tag_%out_opt
443
+ jmp L_RESULT_OK_TO_OPTION_END_%out_opt
444
+ L_RESULT_OK_TO_OPTION_NONE_%out_opt:
445
+ store %out_opt+Option_tag, Option_NONE as u64
446
+ store %out_opt+Option_value, 0 as u64
447
+ !__result_ok_option_ok_%out_opt
448
+ !__result_ok_option_tag_%out_opt
449
+ L_RESULT_OK_TO_OPTION_END_%out_opt:
450
+ [END_MACRO]
451
+
452
+ [MACRO] RESULT_ERR_TO_OPTION %out_opt, %res_reg
453
+ %out_opt = alloc Option_SIZE
454
+ __result_err_option_tag_%out_opt = load %res_reg+Result_tag as u64
455
+ __result_err_option_err_%out_opt = eq __result_err_option_tag_%out_opt, Result_ERR
456
+ br __result_err_option_err_%out_opt -> L_RESULT_ERR_TO_OPTION_SOME_%out_opt, L_RESULT_ERR_TO_OPTION_NONE_%out_opt
457
+ L_RESULT_ERR_TO_OPTION_SOME_%out_opt:
458
+ __result_err_option_value_%out_opt = load %res_reg+Result_err as u64
459
+ store %out_opt+Option_tag, Option_SOME as u64
460
+ store %out_opt+Option_value, __result_err_option_value_%out_opt as u64
461
+ !__result_err_option_value_%out_opt
462
+ !__result_err_option_err_%out_opt
463
+ !__result_err_option_tag_%out_opt
464
+ jmp L_RESULT_ERR_TO_OPTION_END_%out_opt
465
+ L_RESULT_ERR_TO_OPTION_NONE_%out_opt:
466
+ store %out_opt+Option_tag, Option_NONE as u64
467
+ store %out_opt+Option_value, 0 as u64
468
+ !__result_err_option_err_%out_opt
469
+ !__result_err_option_tag_%out_opt
470
+ L_RESULT_ERR_TO_OPTION_END_%out_opt:
471
+ [END_MACRO]
472
+
473
+ [MACRO] RESULT_UNWRAP %out_value, %res_reg
474
+ __result_tag_%out_value = load %res_reg+Result_tag as u64
475
+ __result_is_ok_%out_value = eq __result_tag_%out_value, Result_OK
476
+ br __result_is_ok_%out_value -> L_RESULT_UNWRAP_OK_%out_value, L_RESULT_UNWRAP_ERR_%out_value
477
+ L_RESULT_UNWRAP_OK_%out_value:
478
+ %out_value = load %res_reg+Result_ok as u64
479
+ !__result_tag_%out_value
480
+ !__result_is_ok_%out_value
481
+ jmp L_RESULT_UNWRAP_END_%out_value
482
+ L_RESULT_UNWRAP_ERR_%out_value:
483
+ EXPAND PANIC_MSG 17, *RESULT_UNWRAP_PANIC, 39
484
+ %out_value = add 0, 0
485
+ !__result_is_ok_%out_value
486
+ !__result_tag_%out_value
487
+ L_RESULT_UNWRAP_END_%out_value:
488
+ [END_MACRO]
489
+
490
+ [MACRO] RESULT_EXPECT %out_value, %res_reg, %msg_ptr, %msg_len
491
+ __result_expect_tag_%out_value = load %res_reg+Result_tag as u64
492
+ __result_expect_ok_%out_value = eq __result_expect_tag_%out_value, Result_OK
493
+ br __result_expect_ok_%out_value -> L_RESULT_EXPECT_OK_%out_value, L_RESULT_EXPECT_ERR_%out_value
494
+ L_RESULT_EXPECT_OK_%out_value:
495
+ %out_value = load %res_reg+Result_ok as u64
496
+ !__result_expect_ok_%out_value
497
+ !__result_expect_tag_%out_value
498
+ jmp L_RESULT_EXPECT_END_%out_value
499
+ L_RESULT_EXPECT_ERR_%out_value:
500
+ EXPAND PANIC_MSG 17, %msg_ptr, %msg_len
501
+ %out_value = add 0, 0
502
+ L_RESULT_EXPECT_END_%out_value:
503
+ [END_MACRO]
504
+
505
+ [MACRO] RESULT_UNWRAP_UNCHECKED %out_value, %res_reg
506
+ %out_value = load %res_reg+Result_ok as u64
507
+ [END_MACRO]
508
+
509
+ [MACRO] RESULT_INTO_OK %out_value, %res_reg
510
+ EXPAND RESULT_UNWRAP %out_value, %res_reg
511
+ [END_MACRO]
512
+
513
+ [MACRO] RESULT_UNWRAP_ERR %out_value, %res_reg
514
+ __result_tag_%out_value = load %res_reg+Result_tag as u64
515
+ __result_is_err_%out_value = eq __result_tag_%out_value, Result_ERR
516
+ br __result_is_err_%out_value -> L_RESULT_UNWRAP_ERR_ERR_%out_value, L_RESULT_UNWRAP_ERR_OK_%out_value
517
+ L_RESULT_UNWRAP_ERR_ERR_%out_value:
518
+ %out_value = load %res_reg+Result_err as u64
519
+ !__result_tag_%out_value
520
+ jmp L_RESULT_UNWRAP_ERR_END_%out_value
521
+ L_RESULT_UNWRAP_ERR_OK_%out_value:
522
+ EXPAND PANIC_MSG 17, *RESULT_UNWRAP_ERR_PANIC, 42
523
+ %out_value = add 0, 0
524
+ L_RESULT_UNWRAP_ERR_END_%out_value:
525
+ [END_MACRO]
526
+
527
+ [MACRO] RESULT_EXPECT_ERR %out_value, %res_reg, %msg_ptr, %msg_len
528
+ __result_expect_err_tag_%out_value = load %res_reg+Result_tag as u64
529
+ __result_expect_err_is_err_%out_value = eq __result_expect_err_tag_%out_value, Result_ERR
530
+ br __result_expect_err_is_err_%out_value -> L_RESULT_EXPECT_ERR_ERR_%out_value, L_RESULT_EXPECT_ERR_OK_%out_value
531
+ L_RESULT_EXPECT_ERR_ERR_%out_value:
532
+ %out_value = load %res_reg+Result_err as u64
533
+ !__result_expect_err_is_err_%out_value
534
+ !__result_expect_err_tag_%out_value
535
+ jmp L_RESULT_EXPECT_ERR_END_%out_value
536
+ L_RESULT_EXPECT_ERR_OK_%out_value:
537
+ EXPAND PANIC_MSG 17, %msg_ptr, %msg_len
538
+ %out_value = add 0, 0
539
+ L_RESULT_EXPECT_ERR_END_%out_value:
540
+ [END_MACRO]
541
+
542
+ [MACRO] RESULT_UNWRAP_ERR_UNCHECKED %out_value, %res_reg
543
+ %out_value = load %res_reg+Result_err as u64
544
+ [END_MACRO]
545
+
546
+ [MACRO] RESULT_INTO_ERR %out_value, %res_reg
547
+ EXPAND RESULT_UNWRAP_ERR %out_value, %res_reg
548
+ [END_MACRO]
549
+
550
+ [MACRO] RESULT_MAP_OR %out_value, %res_reg, %map_fn, %default_value
551
+ __result_tag_%out_value = load %res_reg+Result_tag as u64
552
+ __result_is_ok_%out_value = eq __result_tag_%out_value, Result_OK
553
+ br __result_is_ok_%out_value -> L_RESULT_MAP_OR_OK_%out_value, L_RESULT_MAP_OR_ERR_%out_value
554
+ L_RESULT_MAP_OR_OK_%out_value:
555
+ __result_value_%out_value = load %res_reg+Result_ok as u64
556
+ %out_value = call %map_fn(__result_value_%out_value)
557
+ !__result_value_%out_value
558
+ !__result_tag_%out_value
559
+ jmp L_RESULT_MAP_OR_END_%out_value
560
+ L_RESULT_MAP_OR_ERR_%out_value:
561
+ %out_value = add %default_value, 0
562
+ !__result_tag_%out_value
563
+ L_RESULT_MAP_OR_END_%out_value:
564
+ [END_MACRO]
565
+
566
+ [MACRO] RESULT_MAP_OR_ELSE %out_value, %res_reg, %map_fn, %default_fn
567
+ __result_tag_%out_value = load %res_reg+Result_tag as u64
568
+ __result_is_ok_%out_value = eq __result_tag_%out_value, Result_OK
569
+ br __result_is_ok_%out_value -> L_RESULT_MAP_OR_ELSE_OK_%out_value, L_RESULT_MAP_OR_ELSE_ERR_%out_value
570
+ L_RESULT_MAP_OR_ELSE_OK_%out_value:
571
+ __result_value_%out_value = load %res_reg+Result_ok as u64
572
+ %out_value = call %map_fn(__result_value_%out_value)
573
+ !__result_value_%out_value
574
+ !__result_tag_%out_value
575
+ jmp L_RESULT_MAP_OR_ELSE_END_%out_value
576
+ L_RESULT_MAP_OR_ELSE_ERR_%out_value:
577
+ %out_value = call %default_fn()
578
+ !__result_tag_%out_value
579
+ L_RESULT_MAP_OR_ELSE_END_%out_value:
580
+ [END_MACRO]
581
+
582
+ [MACRO] RESULT_MAP_OR_DEFAULT %out_value, %res_reg, %map_fn
583
+ EXPAND RESULT_MAP_OR %out_value, %res_reg, %map_fn, 0
584
+ [END_MACRO]
585
+
586
+ [MACRO] RESULT_SET_OK %res_reg, %value
587
+ store %res_reg+Result_tag, Result_OK as u64
588
+ store %res_reg+Result_ok, %value as u64
589
+ store %res_reg+Result_err, 0 as u64
590
+ [END_MACRO]
591
+
592
+ [MACRO] RESULT_SET_ERR %res_reg, %err
593
+ store %res_reg+Result_tag, Result_ERR as u64
594
+ store %res_reg+Result_ok, 0 as u64
595
+ store %res_reg+Result_err, %err as u64
596
+ [END_MACRO]
597
+
598
+ [MACRO] RESULT_FLATTEN %out_res, %res_reg
599
+ %out_res = alloc Result_SIZE
600
+ __result_flatten_tag_%out_res = load %res_reg+Result_tag as u64
601
+ __result_flatten_ok_%out_res = eq __result_flatten_tag_%out_res, Result_OK
602
+ br __result_flatten_ok_%out_res -> L_RESULT_FLATTEN_OK_%out_res, L_RESULT_FLATTEN_ERR_%out_res
603
+ L_RESULT_FLATTEN_OK_%out_res:
604
+ __result_flatten_inner_%out_res = load %res_reg+Result_ok as ptr
605
+ __result_flatten_inner_tag_%out_res = load __result_flatten_inner_%out_res+Result_tag as u64
606
+ __result_flatten_inner_ok_%out_res = load __result_flatten_inner_%out_res+Result_ok as u64
607
+ __result_flatten_inner_err_%out_res = load __result_flatten_inner_%out_res+Result_err as u64
608
+ store %out_res+Result_tag, __result_flatten_inner_tag_%out_res as u64
609
+ store %out_res+Result_ok, __result_flatten_inner_ok_%out_res as u64
610
+ store %out_res+Result_err, __result_flatten_inner_err_%out_res as u64
611
+ !__result_flatten_inner_err_%out_res
612
+ !__result_flatten_inner_ok_%out_res
613
+ !__result_flatten_inner_tag_%out_res
614
+ !__result_flatten_inner_%out_res
615
+ !__result_flatten_ok_%out_res
616
+ !__result_flatten_tag_%out_res
617
+ jmp L_RESULT_FLATTEN_END_%out_res
618
+ L_RESULT_FLATTEN_ERR_%out_res:
619
+ __result_flatten_err_%out_res = load %res_reg+Result_err as u64
620
+ store %out_res+Result_tag, Result_ERR as u64
621
+ store %out_res+Result_ok, 0 as u64
622
+ store %out_res+Result_err, __result_flatten_err_%out_res as u64
623
+ !__result_flatten_err_%out_res
624
+ !__result_flatten_ok_%out_res
625
+ !__result_flatten_tag_%out_res
626
+ L_RESULT_FLATTEN_END_%out_res:
627
+ [END_MACRO]
628
+
629
+ [MACRO] RESULT_TRANSPOSE %out_opt, %res_reg
630
+ %out_opt = alloc Option_SIZE
631
+ __result_transpose_tag_%out_opt = load %res_reg+Result_tag as u64
632
+ __result_transpose_ok_%out_opt = eq __result_transpose_tag_%out_opt, Result_OK
633
+ br __result_transpose_ok_%out_opt -> L_RESULT_TRANSPOSE_OK_%out_opt, L_RESULT_TRANSPOSE_ERR_%out_opt
634
+ L_RESULT_TRANSPOSE_OK_%out_opt:
635
+ __result_transpose_inner_opt_%out_opt = load %res_reg+Result_ok as ptr
636
+ __result_transpose_inner_tag_%out_opt = load __result_transpose_inner_opt_%out_opt+Option_tag as u64
637
+ __result_transpose_inner_some_%out_opt = eq __result_transpose_inner_tag_%out_opt, Option_SOME
638
+ br __result_transpose_inner_some_%out_opt -> L_RESULT_TRANSPOSE_SOME_%out_opt, L_RESULT_TRANSPOSE_NONE_%out_opt
639
+ L_RESULT_TRANSPOSE_SOME_%out_opt:
640
+ __result_transpose_value_%out_opt = load __result_transpose_inner_opt_%out_opt+Option_value as u64
641
+ __result_transpose_result_%out_opt = alloc Result_SIZE
642
+ store __result_transpose_result_%out_opt+Result_tag, Result_OK as u64
643
+ store __result_transpose_result_%out_opt+Result_ok, __result_transpose_value_%out_opt as u64
644
+ store __result_transpose_result_%out_opt+Result_err, 0 as u64
645
+ store %out_opt+Option_tag, Option_SOME as u64
646
+ store %out_opt+Option_value, __result_transpose_result_%out_opt as ptr
647
+ !__result_transpose_result_%out_opt
648
+ !__result_transpose_value_%out_opt
649
+ !__result_transpose_inner_some_%out_opt
650
+ !__result_transpose_inner_tag_%out_opt
651
+ !__result_transpose_inner_opt_%out_opt
652
+ !__result_transpose_ok_%out_opt
653
+ !__result_transpose_tag_%out_opt
654
+ jmp L_RESULT_TRANSPOSE_END_%out_opt
655
+ L_RESULT_TRANSPOSE_NONE_%out_opt:
656
+ store %out_opt+Option_tag, Option_NONE as u64
657
+ store %out_opt+Option_value, 0 as u64
658
+ !__result_transpose_inner_some_%out_opt
659
+ !__result_transpose_inner_tag_%out_opt
660
+ !__result_transpose_inner_opt_%out_opt
661
+ !__result_transpose_ok_%out_opt
662
+ !__result_transpose_tag_%out_opt
663
+ jmp L_RESULT_TRANSPOSE_END_%out_opt
664
+ L_RESULT_TRANSPOSE_ERR_%out_opt:
665
+ __result_transpose_err_%out_opt = load %res_reg+Result_err as u64
666
+ __result_transpose_err_result_%out_opt = alloc Result_SIZE
667
+ store __result_transpose_err_result_%out_opt+Result_tag, Result_ERR as u64
668
+ store __result_transpose_err_result_%out_opt+Result_ok, 0 as u64
669
+ store __result_transpose_err_result_%out_opt+Result_err, __result_transpose_err_%out_opt as u64
670
+ store %out_opt+Option_tag, Option_SOME as u64
671
+ store %out_opt+Option_value, __result_transpose_err_result_%out_opt as ptr
672
+ !__result_transpose_err_result_%out_opt
673
+ !__result_transpose_err_%out_opt
674
+ !__result_transpose_ok_%out_opt
675
+ !__result_transpose_tag_%out_opt
676
+ L_RESULT_TRANSPOSE_END_%out_opt:
677
+ [END_MACRO]
678
+
679
+ [MACRO] RESULT_BRANCH %res_reg, %ok_label, %err_label
680
+ __result_tag_%res_reg = load %res_reg+Result_tag as u64
681
+ __result_is_ok_%res_reg = eq __result_tag_%res_reg, Result_OK
682
+ br __result_is_ok_%res_reg -> %ok_label, %err_label
683
+ !__result_tag_%res_reg
684
+ [END_MACRO]
685
+
686
+ [MACRO] MATCH_RESULT %out_value, %res_reg, %ok_label, %err_label
687
+ __match_result_tag_%out_value = load %res_reg+Result_tag as u64
688
+ __match_result_is_ok_%out_value = eq __match_result_tag_%out_value, Result_OK
689
+ br __match_result_is_ok_%out_value -> L_MATCH_RESULT_OK_%out_value, L_MATCH_RESULT_ERR_%out_value
690
+ L_MATCH_RESULT_OK_%out_value:
691
+ %out_value = load %res_reg+Result_ok as u64
692
+ !__match_result_tag_%out_value
693
+ jmp %ok_label
694
+ L_MATCH_RESULT_ERR_%out_value:
695
+ %out_value = load %res_reg+Result_err as u64
696
+ !__match_result_tag_%out_value
697
+ jmp %err_label
698
+ [END_MACRO]
699
+
700
+ [MACRO] RESULT_MATCH_OK_ERR %out_value, %res_reg, %ok_label, %err_label
701
+ EXPAND MATCH_RESULT %out_value, %res_reg, %ok_label, %err_label
702
+ [END_MACRO]
703
+
704
+ [MACRO] MATCHES_RESULT %out_bool, %res_reg, %expected_tag
705
+ __matches_result_tag_%out_bool = load %res_reg+Result_tag as u64
706
+ %out_bool = eq __matches_result_tag_%out_bool, %expected_tag
707
+ !__matches_result_tag_%out_bool
708
+ [END_MACRO]