@salang/sa 0.1.2 → 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 +19 -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,825 @@
1
+ @import "option.sal"
2
+ @import "result.sal"
3
+ @import "slice.sal"
4
+ @import "panic.sa"
5
+
6
+ @const OPTION_UNWRAP_PANIC = utf8:"called Option::unwrap() on a None value"
7
+
8
+ [MACRO] OPTION_NEW_NONE %out_opt
9
+ %out_opt = alloc Option_SIZE
10
+ store %out_opt+Option_tag, Option_NONE as u64
11
+ store %out_opt+Option_value, 0 as u64
12
+ [END_MACRO]
13
+
14
+ [MACRO] OPTION_NEW_SOME %out_opt, %value
15
+ %out_opt = alloc Option_SIZE
16
+ store %out_opt+Option_tag, Option_SOME as u64
17
+ store %out_opt+Option_value, %value as u64
18
+ [END_MACRO]
19
+
20
+ // Rust constructor-name bare alias over OPTION_NEW_SOME.
21
+ [MACRO] OPTION_SOME %out_opt, %value
22
+ EXPAND OPTION_NEW_SOME %out_opt, %value
23
+ [END_MACRO]
24
+
25
+ // Rust constructor-name bare alias over OPTION_NEW_NONE.
26
+ [MACRO] OPTION_NONE %out_opt
27
+ EXPAND OPTION_NEW_NONE %out_opt
28
+ [END_MACRO]
29
+
30
+ [MACRO] OPTION_IS_SOME %out_bool, %opt_reg
31
+ __option_tag_%out_bool = load %opt_reg+Option_tag as u64
32
+ %out_bool = eq __option_tag_%out_bool, Option_SOME
33
+ !__option_tag_%out_bool
34
+ [END_MACRO]
35
+
36
+ [MACRO] OPTION_IS_NONE %out_bool, %opt_reg
37
+ __option_tag_%out_bool = load %opt_reg+Option_tag as u64
38
+ %out_bool = eq __option_tag_%out_bool, Option_NONE
39
+ !__option_tag_%out_bool
40
+ [END_MACRO]
41
+
42
+ [MACRO] OPTION_GET %out_value, %opt_reg
43
+ %out_value = load %opt_reg+Option_value as u64
44
+ [END_MACRO]
45
+
46
+ [MACRO] OPTION_AS_REF %out_opt, %opt_reg
47
+ %out_opt = alloc Option_SIZE
48
+ __option_as_ref_tag_%out_opt = load %opt_reg+Option_tag as u64
49
+ __option_as_ref_some_%out_opt = eq __option_as_ref_tag_%out_opt, Option_SOME
50
+ br __option_as_ref_some_%out_opt -> L_OPTION_AS_REF_SOME_%out_opt, L_OPTION_AS_REF_NONE_%out_opt
51
+ L_OPTION_AS_REF_SOME_%out_opt:
52
+ __option_as_ref_ptr_%out_opt = ptr_add %opt_reg, Option_value
53
+ store %out_opt+Option_tag, Option_SOME as u64
54
+ store %out_opt+Option_value, __option_as_ref_ptr_%out_opt as ptr
55
+ !__option_as_ref_ptr_%out_opt
56
+ !__option_as_ref_some_%out_opt
57
+ !__option_as_ref_tag_%out_opt
58
+ jmp L_OPTION_AS_REF_END_%out_opt
59
+ L_OPTION_AS_REF_NONE_%out_opt:
60
+ store %out_opt+Option_tag, Option_NONE as u64
61
+ store %out_opt+Option_value, 0 as u64
62
+ !__option_as_ref_some_%out_opt
63
+ !__option_as_ref_tag_%out_opt
64
+ L_OPTION_AS_REF_END_%out_opt:
65
+ [END_MACRO]
66
+
67
+ [MACRO] OPTION_AS_MUT %out_opt, %opt_reg
68
+ EXPAND OPTION_AS_REF %out_opt, %opt_reg
69
+ [END_MACRO]
70
+
71
+ [MACRO] OPTION_COPIED_U64 %out_opt, %opt_reg
72
+ %out_opt = alloc Option_SIZE
73
+ __option_copied_tag_%out_opt = load %opt_reg+Option_tag as u64
74
+ __option_copied_some_%out_opt = eq __option_copied_tag_%out_opt, Option_SOME
75
+ br __option_copied_some_%out_opt -> L_OPTION_COPIED_SOME_%out_opt, L_OPTION_COPIED_NONE_%out_opt
76
+ L_OPTION_COPIED_SOME_%out_opt:
77
+ __option_copied_ptr_%out_opt = load %opt_reg+Option_value as ptr
78
+ __option_copied_value_%out_opt = load __option_copied_ptr_%out_opt+0 as u64
79
+ store %out_opt+Option_tag, Option_SOME as u64
80
+ store %out_opt+Option_value, __option_copied_value_%out_opt as u64
81
+ !__option_copied_value_%out_opt
82
+ !__option_copied_ptr_%out_opt
83
+ !__option_copied_some_%out_opt
84
+ !__option_copied_tag_%out_opt
85
+ jmp L_OPTION_COPIED_END_%out_opt
86
+ L_OPTION_COPIED_NONE_%out_opt:
87
+ store %out_opt+Option_tag, Option_NONE as u64
88
+ store %out_opt+Option_value, 0 as u64
89
+ !__option_copied_some_%out_opt
90
+ !__option_copied_tag_%out_opt
91
+ L_OPTION_COPIED_END_%out_opt:
92
+ [END_MACRO]
93
+
94
+ // Rust method-name alias over OPTION_COPIED_U64.
95
+ [MACRO] OPTION_COPIED %out_opt, %opt_reg
96
+ EXPAND OPTION_COPIED_U64 %out_opt, %opt_reg
97
+ [END_MACRO]
98
+
99
+ [MACRO] OPTION_CLONED_U64 %out_opt, %opt_reg
100
+ EXPAND OPTION_COPIED_U64 %out_opt, %opt_reg
101
+ [END_MACRO]
102
+
103
+ // Rust method-name alias over OPTION_CLONED_U64.
104
+ [MACRO] OPTION_CLONED %out_opt, %opt_reg
105
+ EXPAND OPTION_CLONED_U64 %out_opt, %opt_reg
106
+ [END_MACRO]
107
+
108
+ [MACRO] OPTION_AS_SLICE %out_slice, %opt_reg
109
+ %out_slice = alloc Slice_SIZE
110
+ __option_slice_tag_%out_slice = load %opt_reg+Option_tag as u64
111
+ __option_slice_len_%out_slice = eq __option_slice_tag_%out_slice, Option_SOME
112
+ __option_slice_ptr_%out_slice = ptr_add %opt_reg, Option_value
113
+ store %out_slice+Slice_ptr, __option_slice_ptr_%out_slice as ptr
114
+ store %out_slice+Slice_len, __option_slice_len_%out_slice as u64
115
+ !__option_slice_ptr_%out_slice
116
+ !__option_slice_len_%out_slice
117
+ !__option_slice_tag_%out_slice
118
+ [END_MACRO]
119
+
120
+ [MACRO] OPTION_AS_MUT_SLICE %out_slice, %opt_reg
121
+ EXPAND OPTION_AS_SLICE %out_slice, %opt_reg
122
+ [END_MACRO]
123
+
124
+ [MACRO] OPTION_COPY %out_opt, %opt_reg
125
+ %out_opt = alloc Option_SIZE
126
+ __option_copy_tag_%out_opt = load %opt_reg+Option_tag as u64
127
+ __option_copy_value_%out_opt = load %opt_reg+Option_value as u64
128
+ store %out_opt+Option_tag, __option_copy_tag_%out_opt as u64
129
+ store %out_opt+Option_value, __option_copy_value_%out_opt as u64
130
+ !__option_copy_value_%out_opt
131
+ !__option_copy_tag_%out_opt
132
+ [END_MACRO]
133
+
134
+ [MACRO] OPTION_CONTAINS_U64 %out_bool, %opt_reg, %value
135
+ __option_contains_tag_%out_bool = load %opt_reg+Option_tag as u64
136
+ __option_contains_some_%out_bool = eq __option_contains_tag_%out_bool, Option_SOME
137
+ br __option_contains_some_%out_bool -> L_OPTION_CONTAINS_SOME_%out_bool, L_OPTION_CONTAINS_NONE_%out_bool
138
+ L_OPTION_CONTAINS_SOME_%out_bool:
139
+ __option_contains_value_%out_bool = load %opt_reg+Option_value as u64
140
+ %out_bool = eq __option_contains_value_%out_bool, %value
141
+ !__option_contains_value_%out_bool
142
+ !__option_contains_some_%out_bool
143
+ !__option_contains_tag_%out_bool
144
+ jmp L_OPTION_CONTAINS_END_%out_bool
145
+ L_OPTION_CONTAINS_NONE_%out_bool:
146
+ %out_bool = add 0, 0
147
+ !__option_contains_some_%out_bool
148
+ !__option_contains_tag_%out_bool
149
+ L_OPTION_CONTAINS_END_%out_bool:
150
+ [END_MACRO]
151
+
152
+ // Rust method-name alias over OPTION_CONTAINS_U64.
153
+ [MACRO] OPTION_CONTAINS %out_bool, %opt_reg, %value
154
+ EXPAND OPTION_CONTAINS_U64 %out_bool, %opt_reg, %value
155
+ [END_MACRO]
156
+
157
+ [MACRO] OPTION_IS_SOME_AND %out_bool, %opt_reg, %pred_fn
158
+ __option_some_and_tag_%out_bool = load %opt_reg+Option_tag as u64
159
+ __option_some_and_some_%out_bool = eq __option_some_and_tag_%out_bool, Option_SOME
160
+ br __option_some_and_some_%out_bool -> L_OPTION_SOME_AND_SOME_%out_bool, L_OPTION_SOME_AND_NONE_%out_bool
161
+ L_OPTION_SOME_AND_SOME_%out_bool:
162
+ __option_some_and_value_%out_bool = load %opt_reg+Option_value as u64
163
+ __option_some_and_pred_%out_bool = call %pred_fn(__option_some_and_value_%out_bool)
164
+ %out_bool = ne __option_some_and_pred_%out_bool, 0
165
+ !__option_some_and_pred_%out_bool
166
+ !__option_some_and_value_%out_bool
167
+ !__option_some_and_some_%out_bool
168
+ !__option_some_and_tag_%out_bool
169
+ jmp L_OPTION_SOME_AND_END_%out_bool
170
+ L_OPTION_SOME_AND_NONE_%out_bool:
171
+ %out_bool = add 0, 0
172
+ !__option_some_and_some_%out_bool
173
+ !__option_some_and_tag_%out_bool
174
+ L_OPTION_SOME_AND_END_%out_bool:
175
+ [END_MACRO]
176
+
177
+ [MACRO] OPTION_IS_NONE_OR %out_bool, %opt_reg, %pred_fn
178
+ __option_none_or_tag_%out_bool = load %opt_reg+Option_tag as u64
179
+ __option_none_or_some_%out_bool = eq __option_none_or_tag_%out_bool, Option_SOME
180
+ br __option_none_or_some_%out_bool -> L_OPTION_NONE_OR_SOME_%out_bool, L_OPTION_NONE_OR_NONE_%out_bool
181
+ L_OPTION_NONE_OR_SOME_%out_bool:
182
+ __option_none_or_value_%out_bool = load %opt_reg+Option_value as u64
183
+ __option_none_or_pred_%out_bool = call %pred_fn(__option_none_or_value_%out_bool)
184
+ %out_bool = ne __option_none_or_pred_%out_bool, 0
185
+ !__option_none_or_pred_%out_bool
186
+ !__option_none_or_value_%out_bool
187
+ !__option_none_or_some_%out_bool
188
+ !__option_none_or_tag_%out_bool
189
+ jmp L_OPTION_NONE_OR_END_%out_bool
190
+ L_OPTION_NONE_OR_NONE_%out_bool:
191
+ %out_bool = add 0, 1
192
+ !__option_none_or_some_%out_bool
193
+ !__option_none_or_tag_%out_bool
194
+ L_OPTION_NONE_OR_END_%out_bool:
195
+ [END_MACRO]
196
+
197
+ [MACRO] OPTION_MAP %out_opt, %opt_reg, %map_fn
198
+ %out_opt = alloc Option_SIZE
199
+ __option_map_tag_%out_opt = load %opt_reg+Option_tag as u64
200
+ __option_map_some_%out_opt = eq __option_map_tag_%out_opt, Option_SOME
201
+ br __option_map_some_%out_opt -> L_OPTION_MAP_SOME_%out_opt, L_OPTION_MAP_NONE_%out_opt
202
+ L_OPTION_MAP_SOME_%out_opt:
203
+ __option_map_value_%out_opt = load %opt_reg+Option_value as u64
204
+ __option_map_mapped_%out_opt = call %map_fn(__option_map_value_%out_opt)
205
+ store %out_opt+Option_tag, Option_SOME as u64
206
+ store %out_opt+Option_value, __option_map_mapped_%out_opt as u64
207
+ !__option_map_mapped_%out_opt
208
+ !__option_map_value_%out_opt
209
+ !__option_map_some_%out_opt
210
+ !__option_map_tag_%out_opt
211
+ jmp L_OPTION_MAP_END_%out_opt
212
+ L_OPTION_MAP_NONE_%out_opt:
213
+ store %out_opt+Option_tag, Option_NONE as u64
214
+ store %out_opt+Option_value, 0 as u64
215
+ !__option_map_some_%out_opt
216
+ !__option_map_tag_%out_opt
217
+ L_OPTION_MAP_END_%out_opt:
218
+ [END_MACRO]
219
+
220
+ [MACRO] OPTION_INSPECT %out_opt, %opt_reg, %inspect_fn
221
+ __option_inspect_tag_%out_opt = load %opt_reg+Option_tag as u64
222
+ __option_inspect_some_%out_opt = eq __option_inspect_tag_%out_opt, Option_SOME
223
+ br __option_inspect_some_%out_opt -> L_OPTION_INSPECT_SOME_%out_opt, L_OPTION_INSPECT_NONE_%out_opt
224
+ L_OPTION_INSPECT_SOME_%out_opt:
225
+ __option_inspect_value_%out_opt = load %opt_reg+Option_value as u64
226
+ __option_inspect_ignored_%out_opt = call %inspect_fn(__option_inspect_value_%out_opt)
227
+ !__option_inspect_ignored_%out_opt
228
+ !__option_inspect_value_%out_opt
229
+ jmp L_OPTION_INSPECT_COPY_%out_opt
230
+ L_OPTION_INSPECT_NONE_%out_opt:
231
+ jmp L_OPTION_INSPECT_COPY_%out_opt
232
+ L_OPTION_INSPECT_COPY_%out_opt:
233
+ EXPAND OPTION_COPY %out_opt, %opt_reg
234
+ !__option_inspect_some_%out_opt
235
+ !__option_inspect_tag_%out_opt
236
+ [END_MACRO]
237
+
238
+ [MACRO] OPTION_FILTER %out_opt, %opt_reg, %pred_fn
239
+ %out_opt = alloc Option_SIZE
240
+ __option_filter_tag_%out_opt = load %opt_reg+Option_tag as u64
241
+ __option_filter_some_%out_opt = eq __option_filter_tag_%out_opt, Option_SOME
242
+ br __option_filter_some_%out_opt -> L_OPTION_FILTER_CHECK_%out_opt, L_OPTION_FILTER_NONE_%out_opt
243
+ L_OPTION_FILTER_CHECK_%out_opt:
244
+ __option_filter_value_%out_opt = load %opt_reg+Option_value as u64
245
+ __option_filter_pred_%out_opt = call %pred_fn(__option_filter_value_%out_opt)
246
+ __option_filter_keep_%out_opt = ne __option_filter_pred_%out_opt, 0
247
+ br __option_filter_keep_%out_opt -> L_OPTION_FILTER_KEEP_%out_opt, L_OPTION_FILTER_DROP_%out_opt
248
+ L_OPTION_FILTER_KEEP_%out_opt:
249
+ store %out_opt+Option_tag, Option_SOME as u64
250
+ store %out_opt+Option_value, __option_filter_value_%out_opt as u64
251
+ jmp L_OPTION_FILTER_CHECK_DONE_%out_opt
252
+ L_OPTION_FILTER_DROP_%out_opt:
253
+ store %out_opt+Option_tag, Option_NONE as u64
254
+ store %out_opt+Option_value, 0 as u64
255
+ jmp L_OPTION_FILTER_CHECK_DONE_%out_opt
256
+ L_OPTION_FILTER_CHECK_DONE_%out_opt:
257
+ !__option_filter_keep_%out_opt
258
+ !__option_filter_pred_%out_opt
259
+ !__option_filter_value_%out_opt
260
+ !__option_filter_some_%out_opt
261
+ !__option_filter_tag_%out_opt
262
+ jmp L_OPTION_FILTER_END_%out_opt
263
+ L_OPTION_FILTER_NONE_%out_opt:
264
+ store %out_opt+Option_tag, Option_NONE as u64
265
+ store %out_opt+Option_value, 0 as u64
266
+ !__option_filter_some_%out_opt
267
+ !__option_filter_tag_%out_opt
268
+ L_OPTION_FILTER_END_%out_opt:
269
+ [END_MACRO]
270
+
271
+ [MACRO] OPTION_AND %out_opt, %opt_reg, %other_opt
272
+ __option_and_tag_%out_opt = load %opt_reg+Option_tag as u64
273
+ __option_and_some_%out_opt = eq __option_and_tag_%out_opt, Option_SOME
274
+ br __option_and_some_%out_opt -> L_OPTION_AND_OTHER_%out_opt, L_OPTION_AND_NONE_%out_opt
275
+ L_OPTION_AND_OTHER_%out_opt:
276
+ EXPAND OPTION_COPY %out_opt, %other_opt
277
+ !__option_and_some_%out_opt
278
+ !__option_and_tag_%out_opt
279
+ jmp L_OPTION_AND_END_%out_opt
280
+ L_OPTION_AND_NONE_%out_opt:
281
+ EXPAND OPTION_NEW_NONE %out_opt
282
+ !__option_and_some_%out_opt
283
+ !__option_and_tag_%out_opt
284
+ L_OPTION_AND_END_%out_opt:
285
+ [END_MACRO]
286
+
287
+ [MACRO] OPTION_OR %out_opt, %opt_reg, %other_opt
288
+ __option_or_tag_%out_opt = load %opt_reg+Option_tag as u64
289
+ __option_or_some_%out_opt = eq __option_or_tag_%out_opt, Option_SOME
290
+ br __option_or_some_%out_opt -> L_OPTION_OR_SELF_%out_opt, L_OPTION_OR_OTHER_%out_opt
291
+ L_OPTION_OR_SELF_%out_opt:
292
+ EXPAND OPTION_COPY %out_opt, %opt_reg
293
+ !__option_or_some_%out_opt
294
+ !__option_or_tag_%out_opt
295
+ jmp L_OPTION_OR_END_%out_opt
296
+ L_OPTION_OR_OTHER_%out_opt:
297
+ EXPAND OPTION_COPY %out_opt, %other_opt
298
+ !__option_or_some_%out_opt
299
+ !__option_or_tag_%out_opt
300
+ L_OPTION_OR_END_%out_opt:
301
+ [END_MACRO]
302
+
303
+ [MACRO] OPTION_XOR %out_opt, %left_opt, %right_opt
304
+ %out_opt = alloc Option_SIZE
305
+ __option_xor_left_tag_%out_opt = load %left_opt+Option_tag as u64
306
+ __option_xor_right_tag_%out_opt = load %right_opt+Option_tag as u64
307
+ __option_xor_left_some_%out_opt = eq __option_xor_left_tag_%out_opt, Option_SOME
308
+ __option_xor_right_some_%out_opt = eq __option_xor_right_tag_%out_opt, Option_SOME
309
+ __option_xor_one_%out_opt = xor __option_xor_left_some_%out_opt, __option_xor_right_some_%out_opt
310
+ br __option_xor_one_%out_opt -> L_OPTION_XOR_SOME_%out_opt, L_OPTION_XOR_NONE_%out_opt
311
+ L_OPTION_XOR_SOME_%out_opt:
312
+ br __option_xor_left_some_%out_opt -> L_OPTION_XOR_LEFT_%out_opt, L_OPTION_XOR_RIGHT_%out_opt
313
+ L_OPTION_XOR_LEFT_%out_opt:
314
+ __option_xor_left_value_%out_opt = load %left_opt+Option_value as u64
315
+ store %out_opt+Option_tag, Option_SOME as u64
316
+ store %out_opt+Option_value, __option_xor_left_value_%out_opt as u64
317
+ !__option_xor_left_value_%out_opt
318
+ jmp L_OPTION_XOR_SOME_DONE_%out_opt
319
+ L_OPTION_XOR_RIGHT_%out_opt:
320
+ __option_xor_right_value_%out_opt = load %right_opt+Option_value as u64
321
+ store %out_opt+Option_tag, Option_SOME as u64
322
+ store %out_opt+Option_value, __option_xor_right_value_%out_opt as u64
323
+ !__option_xor_right_value_%out_opt
324
+ L_OPTION_XOR_SOME_DONE_%out_opt:
325
+ jmp L_OPTION_XOR_DONE_%out_opt
326
+ L_OPTION_XOR_NONE_%out_opt:
327
+ store %out_opt+Option_tag, Option_NONE as u64
328
+ store %out_opt+Option_value, 0 as u64
329
+ L_OPTION_XOR_DONE_%out_opt:
330
+ !__option_xor_one_%out_opt
331
+ !__option_xor_right_some_%out_opt
332
+ !__option_xor_left_some_%out_opt
333
+ !__option_xor_right_tag_%out_opt
334
+ !__option_xor_left_tag_%out_opt
335
+ [END_MACRO]
336
+
337
+ [MACRO] OPTION_AND_THEN %out_opt, %opt_reg, %then_fn
338
+ __option_then_tag_%out_opt = load %opt_reg+Option_tag as u64
339
+ __option_then_some_%out_opt = eq __option_then_tag_%out_opt, Option_SOME
340
+ br __option_then_some_%out_opt -> L_OPTION_AND_THEN_SOME_%out_opt, L_OPTION_AND_THEN_NONE_%out_opt
341
+ L_OPTION_AND_THEN_SOME_%out_opt:
342
+ __option_then_value_%out_opt = load %opt_reg+Option_value as u64
343
+ %out_opt = call %then_fn(__option_then_value_%out_opt)
344
+ !__option_then_value_%out_opt
345
+ !__option_then_some_%out_opt
346
+ !__option_then_tag_%out_opt
347
+ jmp L_OPTION_AND_THEN_END_%out_opt
348
+ L_OPTION_AND_THEN_NONE_%out_opt:
349
+ EXPAND OPTION_NEW_NONE %out_opt
350
+ !__option_then_some_%out_opt
351
+ !__option_then_tag_%out_opt
352
+ L_OPTION_AND_THEN_END_%out_opt:
353
+ [END_MACRO]
354
+
355
+ [MACRO] OPTION_OR_ELSE %out_opt, %opt_reg, %else_fn
356
+ __option_or_else_tag_%out_opt = load %opt_reg+Option_tag as u64
357
+ __option_or_else_some_%out_opt = eq __option_or_else_tag_%out_opt, Option_SOME
358
+ br __option_or_else_some_%out_opt -> L_OPTION_OR_ELSE_SELF_%out_opt, L_OPTION_OR_ELSE_DEFAULT_%out_opt
359
+ L_OPTION_OR_ELSE_SELF_%out_opt:
360
+ EXPAND OPTION_COPY %out_opt, %opt_reg
361
+ !__option_or_else_some_%out_opt
362
+ !__option_or_else_tag_%out_opt
363
+ jmp L_OPTION_OR_ELSE_END_%out_opt
364
+ L_OPTION_OR_ELSE_DEFAULT_%out_opt:
365
+ %out_opt = call %else_fn()
366
+ !__option_or_else_some_%out_opt
367
+ !__option_or_else_tag_%out_opt
368
+ L_OPTION_OR_ELSE_END_%out_opt:
369
+ [END_MACRO]
370
+
371
+ [MACRO] OPTION_OK_OR %out_res, %opt_reg, %err_value
372
+ %out_res = alloc Result_SIZE
373
+ __option_ok_or_tag_%out_res = load %opt_reg+Option_tag as u64
374
+ __option_ok_or_some_%out_res = eq __option_ok_or_tag_%out_res, Option_SOME
375
+ br __option_ok_or_some_%out_res -> L_OPTION_OK_OR_SOME_%out_res, L_OPTION_OK_OR_NONE_%out_res
376
+ L_OPTION_OK_OR_SOME_%out_res:
377
+ __option_ok_or_value_%out_res = load %opt_reg+Option_value as u64
378
+ store %out_res+Result_tag, Result_OK as u64
379
+ store %out_res+Result_ok, __option_ok_or_value_%out_res as u64
380
+ store %out_res+Result_err, 0 as u64
381
+ !__option_ok_or_value_%out_res
382
+ !__option_ok_or_some_%out_res
383
+ !__option_ok_or_tag_%out_res
384
+ jmp L_OPTION_OK_OR_END_%out_res
385
+ L_OPTION_OK_OR_NONE_%out_res:
386
+ store %out_res+Result_tag, Result_ERR as u64
387
+ store %out_res+Result_ok, 0 as u64
388
+ store %out_res+Result_err, %err_value as u64
389
+ !__option_ok_or_some_%out_res
390
+ !__option_ok_or_tag_%out_res
391
+ L_OPTION_OK_OR_END_%out_res:
392
+ [END_MACRO]
393
+
394
+ [MACRO] OPTION_OK_OR_ELSE %out_res, %opt_reg, %err_fn
395
+ %out_res = alloc Result_SIZE
396
+ __option_ok_or_else_tag_%out_res = load %opt_reg+Option_tag as u64
397
+ __option_ok_or_else_some_%out_res = eq __option_ok_or_else_tag_%out_res, Option_SOME
398
+ br __option_ok_or_else_some_%out_res -> L_OPTION_OK_OR_ELSE_SOME_%out_res, L_OPTION_OK_OR_ELSE_NONE_%out_res
399
+ L_OPTION_OK_OR_ELSE_SOME_%out_res:
400
+ __option_ok_or_else_value_%out_res = load %opt_reg+Option_value as u64
401
+ store %out_res+Result_tag, Result_OK as u64
402
+ store %out_res+Result_ok, __option_ok_or_else_value_%out_res as u64
403
+ store %out_res+Result_err, 0 as u64
404
+ !__option_ok_or_else_value_%out_res
405
+ !__option_ok_or_else_some_%out_res
406
+ !__option_ok_or_else_tag_%out_res
407
+ jmp L_OPTION_OK_OR_ELSE_END_%out_res
408
+ L_OPTION_OK_OR_ELSE_NONE_%out_res:
409
+ __option_ok_or_else_err_%out_res = call %err_fn()
410
+ store %out_res+Result_tag, Result_ERR as u64
411
+ store %out_res+Result_ok, 0 as u64
412
+ store %out_res+Result_err, __option_ok_or_else_err_%out_res as u64
413
+ !__option_ok_or_else_err_%out_res
414
+ !__option_ok_or_else_some_%out_res
415
+ !__option_ok_or_else_tag_%out_res
416
+ L_OPTION_OK_OR_ELSE_END_%out_res:
417
+ [END_MACRO]
418
+
419
+ [MACRO] OPTION_UNWRAP_OR %out_value, %opt_reg, %default_value
420
+ __option_tag_%out_value = load %opt_reg+Option_tag as u64
421
+ br __option_tag_%out_value -> L_OPTION_UNWRAP_OR_SOME_%out_value, L_OPTION_UNWRAP_OR_NONE_%out_value
422
+ L_OPTION_UNWRAP_OR_SOME_%out_value:
423
+ %out_value = load %opt_reg+Option_value as u64
424
+ !__option_tag_%out_value
425
+ jmp L_OPTION_UNWRAP_OR_END_%out_value
426
+ L_OPTION_UNWRAP_OR_NONE_%out_value:
427
+ %out_value = add %default_value, 0
428
+ !__option_tag_%out_value
429
+ L_OPTION_UNWRAP_OR_END_%out_value:
430
+ [END_MACRO]
431
+
432
+ [MACRO] OPTION_UNWRAP_OR_ELSE %out_value, %opt_reg, %default_fn
433
+ __option_unwrap_else_tag_%out_value = load %opt_reg+Option_tag as u64
434
+ __option_unwrap_else_some_%out_value = eq __option_unwrap_else_tag_%out_value, Option_SOME
435
+ br __option_unwrap_else_some_%out_value -> L_OPTION_UNWRAP_ELSE_SOME_%out_value, L_OPTION_UNWRAP_ELSE_NONE_%out_value
436
+ L_OPTION_UNWRAP_ELSE_SOME_%out_value:
437
+ %out_value = load %opt_reg+Option_value as u64
438
+ !__option_unwrap_else_some_%out_value
439
+ !__option_unwrap_else_tag_%out_value
440
+ jmp L_OPTION_UNWRAP_ELSE_END_%out_value
441
+ L_OPTION_UNWRAP_ELSE_NONE_%out_value:
442
+ %out_value = call %default_fn()
443
+ !__option_unwrap_else_some_%out_value
444
+ !__option_unwrap_else_tag_%out_value
445
+ L_OPTION_UNWRAP_ELSE_END_%out_value:
446
+ [END_MACRO]
447
+
448
+ [MACRO] OPTION_UNWRAP_OR_DEFAULT %out_value, %opt_reg
449
+ EXPAND OPTION_UNWRAP_OR %out_value, %opt_reg, 0
450
+ [END_MACRO]
451
+
452
+ [MACRO] OPTION_UNWRAP_OR_RETURN %out_value, %opt_reg, %default_value
453
+ __option_tag_%out_value = load %opt_reg+Option_tag as u64
454
+ __option_is_some_%out_value = eq __option_tag_%out_value, Option_SOME
455
+ br __option_is_some_%out_value -> L_OPTION_UNWRAP_OR_RETURN_SOME_%out_value, L_OPTION_UNWRAP_OR_RETURN_NONE_%out_value
456
+ L_OPTION_UNWRAP_OR_RETURN_SOME_%out_value:
457
+ %out_value = load %opt_reg+Option_value as u64
458
+ !__option_tag_%out_value
459
+ jmp L_OPTION_UNWRAP_OR_RETURN_END_%out_value
460
+ L_OPTION_UNWRAP_OR_RETURN_NONE_%out_value:
461
+ !__option_tag_%out_value
462
+ return %default_value
463
+ L_OPTION_UNWRAP_OR_RETURN_END_%out_value:
464
+ [END_MACRO]
465
+
466
+ [MACRO] TRY_OPTION %out_value, %opt_reg
467
+ __try_option_tag_%out_value = load %opt_reg+Option_tag as u64
468
+ __try_option_is_some_%out_value = eq __try_option_tag_%out_value, Option_SOME
469
+ br __try_option_is_some_%out_value -> L_TRY_OPTION_SOME_%out_value, L_TRY_OPTION_NONE_%out_value
470
+ L_TRY_OPTION_SOME_%out_value:
471
+ %out_value = load %opt_reg+Option_value as u64
472
+ !__try_option_is_some_%out_value
473
+ !__try_option_tag_%out_value
474
+ jmp L_TRY_OPTION_END_%out_value
475
+ L_TRY_OPTION_NONE_%out_value:
476
+ !__try_option_is_some_%out_value
477
+ !__try_option_tag_%out_value
478
+ return %opt_reg
479
+ L_TRY_OPTION_END_%out_value:
480
+ [END_MACRO]
481
+
482
+ [MACRO] TRY_OPTION_RETURN %out_value, %opt_reg
483
+ EXPAND TRY_OPTION %out_value, %opt_reg
484
+ [END_MACRO]
485
+
486
+ [MACRO] OPTION_UNWRAP %out_value, %opt_reg
487
+ __option_tag_%out_value = load %opt_reg+Option_tag as u64
488
+ br __option_tag_%out_value -> L_OPTION_UNWRAP_SOME_%out_value, L_OPTION_UNWRAP_NONE_%out_value
489
+ L_OPTION_UNWRAP_SOME_%out_value:
490
+ %out_value = load %opt_reg+Option_value as u64
491
+ !__option_tag_%out_value
492
+ jmp L_OPTION_UNWRAP_END_%out_value
493
+ L_OPTION_UNWRAP_NONE_%out_value:
494
+ EXPAND PANIC_MSG 17, *OPTION_UNWRAP_PANIC, 39
495
+ %out_value = add 0, 0
496
+ L_OPTION_UNWRAP_END_%out_value:
497
+ [END_MACRO]
498
+
499
+ [MACRO] OPTION_EXPECT %out_value, %opt_reg, %msg_ptr, %msg_len
500
+ __option_expect_tag_%out_value = load %opt_reg+Option_tag as u64
501
+ __option_expect_some_%out_value = eq __option_expect_tag_%out_value, Option_SOME
502
+ br __option_expect_some_%out_value -> L_OPTION_EXPECT_SOME_%out_value, L_OPTION_EXPECT_NONE_%out_value
503
+ L_OPTION_EXPECT_SOME_%out_value:
504
+ %out_value = load %opt_reg+Option_value as u64
505
+ !__option_expect_some_%out_value
506
+ !__option_expect_tag_%out_value
507
+ jmp L_OPTION_EXPECT_END_%out_value
508
+ L_OPTION_EXPECT_NONE_%out_value:
509
+ EXPAND PANIC_MSG 17, %msg_ptr, %msg_len
510
+ %out_value = add 0, 0
511
+ L_OPTION_EXPECT_END_%out_value:
512
+ [END_MACRO]
513
+
514
+ [MACRO] OPTION_UNWRAP_UNCHECKED %out_value, %opt_reg
515
+ %out_value = load %opt_reg+Option_value as u64
516
+ [END_MACRO]
517
+
518
+ [MACRO] OPTION_MAP_OR %out_value, %opt_reg, %map_fn, %default_value
519
+ __option_tag_%out_value = load %opt_reg+Option_tag as u64
520
+ br __option_tag_%out_value -> L_OPTION_MAP_OR_SOME_%out_value, L_OPTION_MAP_OR_NONE_%out_value
521
+ L_OPTION_MAP_OR_SOME_%out_value:
522
+ __option_value_%out_value = load %opt_reg+Option_value as u64
523
+ %out_value = call %map_fn(__option_value_%out_value)
524
+ !__option_value_%out_value
525
+ !__option_tag_%out_value
526
+ jmp L_OPTION_MAP_OR_END_%out_value
527
+ L_OPTION_MAP_OR_NONE_%out_value:
528
+ %out_value = add %default_value, 0
529
+ !__option_tag_%out_value
530
+ L_OPTION_MAP_OR_END_%out_value:
531
+ [END_MACRO]
532
+
533
+ [MACRO] OPTION_MAP_OR_ELSE %out_value, %opt_reg, %map_fn, %default_fn
534
+ __option_tag_%out_value = load %opt_reg+Option_tag as u64
535
+ br __option_tag_%out_value -> L_OPTION_MAP_OR_ELSE_SOME_%out_value, L_OPTION_MAP_OR_ELSE_NONE_%out_value
536
+ L_OPTION_MAP_OR_ELSE_SOME_%out_value:
537
+ __option_value_%out_value = load %opt_reg+Option_value as u64
538
+ %out_value = call %map_fn(__option_value_%out_value)
539
+ !__option_value_%out_value
540
+ !__option_tag_%out_value
541
+ jmp L_OPTION_MAP_OR_ELSE_END_%out_value
542
+ L_OPTION_MAP_OR_ELSE_NONE_%out_value:
543
+ %out_value = call %default_fn()
544
+ !__option_tag_%out_value
545
+ L_OPTION_MAP_OR_ELSE_END_%out_value:
546
+ [END_MACRO]
547
+
548
+ [MACRO] OPTION_MAP_OR_DEFAULT %out_value, %opt_reg, %map_fn
549
+ EXPAND OPTION_MAP_OR %out_value, %opt_reg, %map_fn, 0
550
+ [END_MACRO]
551
+
552
+ [MACRO] OPTION_SET_NONE %opt_reg
553
+ store %opt_reg+Option_tag, Option_NONE as u64
554
+ store %opt_reg+Option_value, 0 as u64
555
+ [END_MACRO]
556
+
557
+ [MACRO] OPTION_SET_SOME %opt_reg, %value
558
+ store %opt_reg+Option_tag, Option_SOME as u64
559
+ store %opt_reg+Option_value, %value as u64
560
+ [END_MACRO]
561
+
562
+ [MACRO] OPTION_TAKE %out_opt, %opt_reg
563
+ EXPAND OPTION_COPY %out_opt, %opt_reg
564
+ EXPAND OPTION_SET_NONE %opt_reg
565
+ [END_MACRO]
566
+
567
+ [MACRO] OPTION_TAKE_IF %out_opt, %opt_reg, %pred_fn
568
+ __option_take_if_tag_%out_opt = load %opt_reg+Option_tag as u64
569
+ __option_take_if_some_%out_opt = eq __option_take_if_tag_%out_opt, Option_SOME
570
+ br __option_take_if_some_%out_opt -> L_OPTION_TAKE_IF_CHECK_%out_opt, L_OPTION_TAKE_IF_NONE_%out_opt
571
+ L_OPTION_TAKE_IF_CHECK_%out_opt:
572
+ __option_take_if_value_%out_opt = load %opt_reg+Option_value as u64
573
+ __option_take_if_pred_%out_opt = call %pred_fn(__option_take_if_value_%out_opt)
574
+ __option_take_if_take_%out_opt = ne __option_take_if_pred_%out_opt, 0
575
+ br __option_take_if_take_%out_opt -> L_OPTION_TAKE_IF_TAKE_%out_opt, L_OPTION_TAKE_IF_KEEP_%out_opt
576
+ L_OPTION_TAKE_IF_TAKE_%out_opt:
577
+ EXPAND OPTION_NEW_SOME %out_opt, __option_take_if_value_%out_opt
578
+ EXPAND OPTION_SET_NONE %opt_reg
579
+ jmp L_OPTION_TAKE_IF_CHECK_DONE_%out_opt
580
+ L_OPTION_TAKE_IF_KEEP_%out_opt:
581
+ EXPAND OPTION_NEW_NONE %out_opt
582
+ jmp L_OPTION_TAKE_IF_CHECK_DONE_%out_opt
583
+ L_OPTION_TAKE_IF_CHECK_DONE_%out_opt:
584
+ !__option_take_if_take_%out_opt
585
+ !__option_take_if_pred_%out_opt
586
+ !__option_take_if_value_%out_opt
587
+ !__option_take_if_some_%out_opt
588
+ !__option_take_if_tag_%out_opt
589
+ jmp L_OPTION_TAKE_IF_END_%out_opt
590
+ L_OPTION_TAKE_IF_NONE_%out_opt:
591
+ EXPAND OPTION_NEW_NONE %out_opt
592
+ !__option_take_if_some_%out_opt
593
+ !__option_take_if_tag_%out_opt
594
+ L_OPTION_TAKE_IF_END_%out_opt:
595
+ [END_MACRO]
596
+
597
+ [MACRO] OPTION_REPLACE %out_opt, %opt_reg, %value
598
+ EXPAND OPTION_COPY %out_opt, %opt_reg
599
+ EXPAND OPTION_SET_SOME %opt_reg, %value
600
+ [END_MACRO]
601
+
602
+ [MACRO] OPTION_INSERT %out_ptr, %opt_reg, %value
603
+ EXPAND OPTION_SET_SOME %opt_reg, %value
604
+ %out_ptr = ptr_add %opt_reg, Option_value
605
+ [END_MACRO]
606
+
607
+ [MACRO] OPTION_GET_OR_INSERT %out_ptr, %opt_reg, %value
608
+ __option_get_or_insert_tag_%out_ptr = load %opt_reg+Option_tag as u64
609
+ __option_get_or_insert_some_%out_ptr = eq __option_get_or_insert_tag_%out_ptr, Option_SOME
610
+ br __option_get_or_insert_some_%out_ptr -> L_OPTION_GET_OR_INSERT_DONE_%out_ptr, L_OPTION_GET_OR_INSERT_SET_%out_ptr
611
+ L_OPTION_GET_OR_INSERT_SET_%out_ptr:
612
+ EXPAND OPTION_SET_SOME %opt_reg, %value
613
+ jmp L_OPTION_GET_OR_INSERT_DONE_%out_ptr
614
+ L_OPTION_GET_OR_INSERT_DONE_%out_ptr:
615
+ %out_ptr = ptr_add %opt_reg, Option_value
616
+ !__option_get_or_insert_some_%out_ptr
617
+ !__option_get_or_insert_tag_%out_ptr
618
+ [END_MACRO]
619
+
620
+ [MACRO] OPTION_GET_OR_INSERT_WITH %out_ptr, %opt_reg, %default_fn
621
+ __option_get_or_with_tag_%out_ptr = load %opt_reg+Option_tag as u64
622
+ __option_get_or_with_some_%out_ptr = eq __option_get_or_with_tag_%out_ptr, Option_SOME
623
+ br __option_get_or_with_some_%out_ptr -> L_OPTION_GET_OR_WITH_DONE_%out_ptr, L_OPTION_GET_OR_WITH_SET_%out_ptr
624
+ L_OPTION_GET_OR_WITH_SET_%out_ptr:
625
+ __option_get_or_with_value_%out_ptr = call %default_fn()
626
+ EXPAND OPTION_SET_SOME %opt_reg, __option_get_or_with_value_%out_ptr
627
+ !__option_get_or_with_value_%out_ptr
628
+ jmp L_OPTION_GET_OR_WITH_DONE_%out_ptr
629
+ L_OPTION_GET_OR_WITH_DONE_%out_ptr:
630
+ %out_ptr = ptr_add %opt_reg, Option_value
631
+ !__option_get_or_with_some_%out_ptr
632
+ !__option_get_or_with_tag_%out_ptr
633
+ [END_MACRO]
634
+
635
+ [MACRO] OPTION_GET_OR_INSERT_DEFAULT %out_ptr, %opt_reg
636
+ EXPAND OPTION_GET_OR_INSERT %out_ptr, %opt_reg, 0
637
+ [END_MACRO]
638
+
639
+ [MACRO] OPTION_FLATTEN %out_opt, %opt_reg
640
+ %out_opt = alloc Option_SIZE
641
+ __option_flatten_tag_%out_opt = load %opt_reg+Option_tag as u64
642
+ __option_flatten_some_%out_opt = eq __option_flatten_tag_%out_opt, Option_SOME
643
+ br __option_flatten_some_%out_opt -> L_OPTION_FLATTEN_SOME_%out_opt, L_OPTION_FLATTEN_NONE_%out_opt
644
+ L_OPTION_FLATTEN_SOME_%out_opt:
645
+ __option_flatten_inner_%out_opt = load %opt_reg+Option_value as ptr
646
+ __option_flatten_inner_tag_%out_opt = load __option_flatten_inner_%out_opt+Option_tag as u64
647
+ __option_flatten_inner_value_%out_opt = load __option_flatten_inner_%out_opt+Option_value as u64
648
+ store %out_opt+Option_tag, __option_flatten_inner_tag_%out_opt as u64
649
+ store %out_opt+Option_value, __option_flatten_inner_value_%out_opt as u64
650
+ !__option_flatten_inner_value_%out_opt
651
+ !__option_flatten_inner_tag_%out_opt
652
+ !__option_flatten_inner_%out_opt
653
+ !__option_flatten_some_%out_opt
654
+ !__option_flatten_tag_%out_opt
655
+ jmp L_OPTION_FLATTEN_END_%out_opt
656
+ L_OPTION_FLATTEN_NONE_%out_opt:
657
+ store %out_opt+Option_tag, Option_NONE as u64
658
+ store %out_opt+Option_value, 0 as u64
659
+ !__option_flatten_some_%out_opt
660
+ !__option_flatten_tag_%out_opt
661
+ L_OPTION_FLATTEN_END_%out_opt:
662
+ [END_MACRO]
663
+
664
+ [MACRO] OPTION_TRANSPOSE %out_res, %opt_reg
665
+ %out_res = alloc Result_SIZE
666
+ __option_transpose_tag_%out_res = load %opt_reg+Option_tag as u64
667
+ __option_transpose_some_%out_res = eq __option_transpose_tag_%out_res, Option_SOME
668
+ br __option_transpose_some_%out_res -> L_OPTION_TRANSPOSE_SOME_%out_res, L_OPTION_TRANSPOSE_NONE_%out_res
669
+ L_OPTION_TRANSPOSE_SOME_%out_res:
670
+ __option_transpose_inner_res_%out_res = load %opt_reg+Option_value as ptr
671
+ __option_transpose_inner_tag_%out_res = load __option_transpose_inner_res_%out_res+Result_tag as u64
672
+ __option_transpose_inner_ok_%out_res = eq __option_transpose_inner_tag_%out_res, Result_OK
673
+ br __option_transpose_inner_ok_%out_res -> L_OPTION_TRANSPOSE_OK_%out_res, L_OPTION_TRANSPOSE_ERR_%out_res
674
+ L_OPTION_TRANSPOSE_OK_%out_res:
675
+ __option_transpose_ok_value_%out_res = load __option_transpose_inner_res_%out_res+Result_ok as u64
676
+ __option_transpose_ok_opt_%out_res = alloc Option_SIZE
677
+ store __option_transpose_ok_opt_%out_res+Option_tag, Option_SOME as u64
678
+ store __option_transpose_ok_opt_%out_res+Option_value, __option_transpose_ok_value_%out_res as u64
679
+ store %out_res+Result_tag, Result_OK as u64
680
+ store %out_res+Result_ok, __option_transpose_ok_opt_%out_res as ptr
681
+ store %out_res+Result_err, 0 as u64
682
+ !__option_transpose_ok_opt_%out_res
683
+ !__option_transpose_ok_value_%out_res
684
+ !__option_transpose_inner_ok_%out_res
685
+ !__option_transpose_inner_tag_%out_res
686
+ !__option_transpose_inner_res_%out_res
687
+ !__option_transpose_some_%out_res
688
+ !__option_transpose_tag_%out_res
689
+ jmp L_OPTION_TRANSPOSE_END_%out_res
690
+ L_OPTION_TRANSPOSE_ERR_%out_res:
691
+ __option_transpose_err_value_%out_res = load __option_transpose_inner_res_%out_res+Result_err as u64
692
+ store %out_res+Result_tag, Result_ERR as u64
693
+ store %out_res+Result_ok, 0 as u64
694
+ store %out_res+Result_err, __option_transpose_err_value_%out_res as u64
695
+ !__option_transpose_err_value_%out_res
696
+ !__option_transpose_inner_ok_%out_res
697
+ !__option_transpose_inner_tag_%out_res
698
+ !__option_transpose_inner_res_%out_res
699
+ !__option_transpose_some_%out_res
700
+ !__option_transpose_tag_%out_res
701
+ jmp L_OPTION_TRANSPOSE_END_%out_res
702
+ L_OPTION_TRANSPOSE_NONE_%out_res:
703
+ __option_transpose_none_opt_%out_res = alloc Option_SIZE
704
+ store __option_transpose_none_opt_%out_res+Option_tag, Option_NONE as u64
705
+ store __option_transpose_none_opt_%out_res+Option_value, 0 as u64
706
+ store %out_res+Result_tag, Result_OK as u64
707
+ store %out_res+Result_ok, __option_transpose_none_opt_%out_res as ptr
708
+ store %out_res+Result_err, 0 as u64
709
+ !__option_transpose_none_opt_%out_res
710
+ !__option_transpose_some_%out_res
711
+ !__option_transpose_tag_%out_res
712
+ L_OPTION_TRANSPOSE_END_%out_res:
713
+ [END_MACRO]
714
+
715
+ [MACRO] OPTION_BRANCH %opt_reg, %some_label, %none_label
716
+ __option_tag_%opt_reg = load %opt_reg+Option_tag as u64
717
+ br __option_tag_%opt_reg -> %some_label, %none_label
718
+ !__option_tag_%opt_reg
719
+ [END_MACRO]
720
+
721
+ [MACRO] MATCH_OPTION %out_value, %opt_reg, %some_label, %none_label
722
+ __match_option_tag_%out_value = load %opt_reg+Option_tag as u64
723
+ __match_option_is_some_%out_value = eq __match_option_tag_%out_value, Option_SOME
724
+ br __match_option_is_some_%out_value -> L_MATCH_OPTION_SOME_%out_value, L_MATCH_OPTION_NONE_%out_value
725
+ L_MATCH_OPTION_SOME_%out_value:
726
+ %out_value = load %opt_reg+Option_value as u64
727
+ !__match_option_tag_%out_value
728
+ jmp %some_label
729
+ L_MATCH_OPTION_NONE_%out_value:
730
+ %out_value = add 0, 0
731
+ !__match_option_tag_%out_value
732
+ jmp %none_label
733
+ [END_MACRO]
734
+
735
+ [MACRO] OPTION_MATCH_SOME_NONE %out_value, %opt_reg, %some_label, %none_label
736
+ EXPAND MATCH_OPTION %out_value, %opt_reg, %some_label, %none_label
737
+ [END_MACRO]
738
+
739
+ [MACRO] MATCHES_OPTION %out_bool, %opt_reg, %expected_tag
740
+ __matches_option_tag_%out_bool = load %opt_reg+Option_tag as u64
741
+ %out_bool = eq __matches_option_tag_%out_bool, %expected_tag
742
+ !__matches_option_tag_%out_bool
743
+ [END_MACRO]
744
+
745
+ [MACRO] OPTION_DEFAULT %out_opt
746
+ EXPAND OPTION_NEW_NONE %out_opt
747
+ [END_MACRO]
748
+
749
+ [MACRO] OPTION_ZIP_U64 %out_opt, %opt_a, %opt_b
750
+ %out_opt = alloc OptionPairU64_SIZE
751
+ __zip_tag_a_%out_opt = load %opt_a+Option_tag as u64
752
+ __zip_some_a_%out_opt = eq __zip_tag_a_%out_opt, Option_SOME
753
+ br __zip_some_a_%out_opt -> L_ZIP_CHECK_B_%out_opt, L_ZIP_NONE_A_%out_opt
754
+ L_ZIP_CHECK_B_%out_opt:
755
+ __zip_tag_b_%out_opt = load %opt_b+Option_tag as u64
756
+ __zip_some_b_%out_opt = eq __zip_tag_b_%out_opt, Option_SOME
757
+ br __zip_some_b_%out_opt -> L_ZIP_SOME_%out_opt, L_ZIP_NONE_B_%out_opt
758
+ L_ZIP_SOME_%out_opt:
759
+ __zip_val_a_%out_opt = load %opt_a+Option_value as u64
760
+ __zip_val_b_%out_opt = load %opt_b+Option_value as u64
761
+ store %out_opt+OptionPairU64_tag, Option_SOME as u64
762
+ store %out_opt+OptionPairU64_value1, __zip_val_a_%out_opt as u64
763
+ store %out_opt+OptionPairU64_value2, __zip_val_b_%out_opt as u64
764
+ !__zip_val_b_%out_opt
765
+ !__zip_val_a_%out_opt
766
+ !__zip_some_b_%out_opt
767
+ !__zip_tag_b_%out_opt
768
+ !__zip_some_a_%out_opt
769
+ !__zip_tag_a_%out_opt
770
+ jmp L_ZIP_END_%out_opt
771
+ L_ZIP_NONE_A_%out_opt:
772
+ store %out_opt+OptionPairU64_tag, Option_NONE as u64
773
+ store %out_opt+OptionPairU64_value1, 0 as u64
774
+ store %out_opt+OptionPairU64_value2, 0 as u64
775
+ !__zip_some_a_%out_opt
776
+ !__zip_tag_a_%out_opt
777
+ jmp L_ZIP_END_%out_opt
778
+ L_ZIP_NONE_B_%out_opt:
779
+ store %out_opt+OptionPairU64_tag, Option_NONE as u64
780
+ store %out_opt+OptionPairU64_value1, 0 as u64
781
+ store %out_opt+OptionPairU64_value2, 0 as u64
782
+ !__zip_some_b_%out_opt
783
+ !__zip_tag_b_%out_opt
784
+ !__zip_some_a_%out_opt
785
+ !__zip_tag_a_%out_opt
786
+ L_ZIP_END_%out_opt:
787
+ [END_MACRO]
788
+
789
+ // Rust method-name alias over OPTION_ZIP_U64.
790
+ [MACRO] OPTION_ZIP %out_opt, %opt_a, %opt_b
791
+ EXPAND OPTION_ZIP_U64 %out_opt, %opt_a, %opt_b
792
+ [END_MACRO]
793
+
794
+ [MACRO] OPTION_UNZIP_TO_U64 %out_opt_a, %out_opt_b, %pair_opt
795
+ %out_opt_a = alloc Option_SIZE
796
+ %out_opt_b = alloc Option_SIZE
797
+ __unzip_tag_%out_opt_a = load %pair_opt+OptionPairU64_tag as u64
798
+ __unzip_some_%out_opt_a = eq __unzip_tag_%out_opt_a, Option_SOME
799
+ br __unzip_some_%out_opt_a -> L_UNZIP_SOME_%out_opt_a, L_UNZIP_NONE_%out_opt_a
800
+ L_UNZIP_SOME_%out_opt_a:
801
+ __unzip_v1_%out_opt_a = load %pair_opt+OptionPairU64_value1 as u64
802
+ __unzip_v2_%out_opt_a = load %pair_opt+OptionPairU64_value2 as u64
803
+ store %out_opt_a+Option_tag, Option_SOME as u64
804
+ store %out_opt_a+Option_value, __unzip_v1_%out_opt_a as u64
805
+ store %out_opt_b+Option_tag, Option_SOME as u64
806
+ store %out_opt_b+Option_value, __unzip_v2_%out_opt_a as u64
807
+ !__unzip_v2_%out_opt_a
808
+ !__unzip_v1_%out_opt_a
809
+ !__unzip_some_%out_opt_a
810
+ !__unzip_tag_%out_opt_a
811
+ jmp L_UNZIP_END_%out_opt_a
812
+ L_UNZIP_NONE_%out_opt_a:
813
+ store %out_opt_a+Option_tag, Option_NONE as u64
814
+ store %out_opt_a+Option_value, 0 as u64
815
+ store %out_opt_b+Option_tag, Option_NONE as u64
816
+ store %out_opt_b+Option_value, 0 as u64
817
+ !__unzip_some_%out_opt_a
818
+ !__unzip_tag_%out_opt_a
819
+ L_UNZIP_END_%out_opt_a:
820
+ [END_MACRO]
821
+
822
+ // Rust method-name alias over OPTION_UNZIP_TO_U64.
823
+ [MACRO] OPTION_UNZIP_TO %out_opt_a, %out_opt_b, %pair_opt
824
+ EXPAND OPTION_UNZIP_TO_U64 %out_opt_a, %out_opt_b, %pair_opt
825
+ [END_MACRO]