@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,777 @@
1
+ @import "future.sal"
2
+ @import "waker.sal"
3
+ @import "waker.sa"
4
+ @import "option.sal"
5
+ @import "result.sal"
6
+
7
+ [MACRO] POLL_PENDING %out_poll
8
+ %out_poll = alloc Poll_SIZE
9
+ store %out_poll+Poll_tag, Poll_PENDING as u64
10
+ store %out_poll+Poll_value, 0 as u64
11
+ [END_MACRO]
12
+
13
+ [MACRO] POLL_READY %out_poll, %value
14
+ %out_poll = alloc Poll_SIZE
15
+ store %out_poll+Poll_tag, Poll_READY as u64
16
+ store %out_poll+Poll_value, %value as u64
17
+ [END_MACRO]
18
+
19
+ [MACRO] POLL_READY_PTR %out_poll, %value_ptr
20
+ %out_poll = alloc Poll_SIZE
21
+ store %out_poll+Poll_tag, Poll_READY as u64
22
+ store %out_poll+Poll_value, %value_ptr as ptr
23
+ [END_MACRO]
24
+
25
+ [MACRO] POLL_SET_PENDING %poll_reg
26
+ store %poll_reg+Poll_tag, Poll_PENDING as u64
27
+ store %poll_reg+Poll_value, 0 as u64
28
+ [END_MACRO]
29
+
30
+ [MACRO] POLL_SET_READY %poll_reg, %value
31
+ store %poll_reg+Poll_tag, Poll_READY as u64
32
+ store %poll_reg+Poll_value, %value as u64
33
+ [END_MACRO]
34
+
35
+ [MACRO] POLL_SET_READY_PTR %poll_reg, %value_ptr
36
+ store %poll_reg+Poll_tag, Poll_READY as u64
37
+ store %poll_reg+Poll_value, %value_ptr as ptr
38
+ [END_MACRO]
39
+
40
+ [MACRO] POLL_IS_READY %out_bool, %poll_reg
41
+ __poll_tag_%out_bool = load %poll_reg+Poll_tag as u64
42
+ %out_bool = eq __poll_tag_%out_bool, Poll_READY
43
+ !__poll_tag_%out_bool
44
+ [END_MACRO]
45
+
46
+ [MACRO] POLL_IS_PENDING %out_bool, %poll_reg
47
+ __poll_tag_%out_bool = load %poll_reg+Poll_tag as u64
48
+ %out_bool = eq __poll_tag_%out_bool, Poll_PENDING
49
+ !__poll_tag_%out_bool
50
+ [END_MACRO]
51
+
52
+ [MACRO] POLL_VALUE %out_value, %poll_reg
53
+ %out_value = load %poll_reg+Poll_value as u64
54
+ [END_MACRO]
55
+
56
+ [MACRO] POLL_VALUE_PTR %out_value, %poll_reg
57
+ %out_value = load %poll_reg+Poll_value as ptr
58
+ [END_MACRO]
59
+
60
+ [MACRO] POLL_MAP %out_poll, %poll_reg, %map_fn
61
+ __poll_map_tag_%out_poll = load %poll_reg+Poll_tag as u64
62
+ __poll_map_ready_%out_poll = eq __poll_map_tag_%out_poll, Poll_READY
63
+ br __poll_map_ready_%out_poll -> L_POLL_MAP_READY_%out_poll, L_POLL_MAP_PENDING_%out_poll
64
+ L_POLL_MAP_READY_%out_poll:
65
+ __poll_map_value_%out_poll = load %poll_reg+Poll_value as u64
66
+ __poll_map_mapped_%out_poll = call %map_fn(__poll_map_value_%out_poll)
67
+ EXPAND POLL_READY %out_poll, __poll_map_mapped_%out_poll
68
+ !__poll_map_mapped_%out_poll
69
+ !__poll_map_value_%out_poll
70
+ jmp L_POLL_MAP_DONE_%out_poll
71
+ L_POLL_MAP_PENDING_%out_poll:
72
+ EXPAND POLL_PENDING %out_poll
73
+ L_POLL_MAP_DONE_%out_poll:
74
+ !__poll_map_ready_%out_poll
75
+ !__poll_map_tag_%out_poll
76
+ [END_MACRO]
77
+
78
+ [MACRO] POLL_RESULT_PENDING %out_poll_res
79
+ %out_poll_res = alloc PollResult_SIZE
80
+ store %out_poll_res+PollResult_poll_tag, Poll_PENDING as u64
81
+ store %out_poll_res+PollResult_result_tag, Result_ERR as u64
82
+ store %out_poll_res+PollResult_ok, 0 as u64
83
+ store %out_poll_res+PollResult_err, 0 as u64
84
+ [END_MACRO]
85
+
86
+ [MACRO] POLL_RESULT_READY_OK %out_poll_res, %value
87
+ %out_poll_res = alloc PollResult_SIZE
88
+ store %out_poll_res+PollResult_poll_tag, Poll_READY as u64
89
+ store %out_poll_res+PollResult_result_tag, Result_OK as u64
90
+ store %out_poll_res+PollResult_ok, %value as u64
91
+ store %out_poll_res+PollResult_err, 0 as u64
92
+ [END_MACRO]
93
+
94
+ [MACRO] POLL_RESULT_READY_ERR %out_poll_res, %err
95
+ %out_poll_res = alloc PollResult_SIZE
96
+ store %out_poll_res+PollResult_poll_tag, Poll_READY as u64
97
+ store %out_poll_res+PollResult_result_tag, Result_ERR as u64
98
+ store %out_poll_res+PollResult_ok, 0 as u64
99
+ store %out_poll_res+PollResult_err, %err as u64
100
+ [END_MACRO]
101
+
102
+ [MACRO] POLL_RESULT_IS_READY %out_bool, %poll_res
103
+ __poll_result_tag_%out_bool = load %poll_res+PollResult_poll_tag as u64
104
+ %out_bool = eq __poll_result_tag_%out_bool, Poll_READY
105
+ !__poll_result_tag_%out_bool
106
+ [END_MACRO]
107
+
108
+ [MACRO] POLL_RESULT_IS_OK %out_bool, %poll_res
109
+ __poll_result_tag_%out_bool = load %poll_res+PollResult_result_tag as u64
110
+ %out_bool = eq __poll_result_tag_%out_bool, Result_OK
111
+ !__poll_result_tag_%out_bool
112
+ [END_MACRO]
113
+
114
+ [MACRO] POLL_RESULT_IS_ERR %out_bool, %poll_res
115
+ __poll_result_tag_%out_bool = load %poll_res+PollResult_result_tag as u64
116
+ %out_bool = eq __poll_result_tag_%out_bool, Result_ERR
117
+ !__poll_result_tag_%out_bool
118
+ [END_MACRO]
119
+
120
+ [MACRO] POLL_RESULT_OK_VALUE %out_value, %poll_res
121
+ %out_value = load %poll_res+PollResult_ok as u64
122
+ [END_MACRO]
123
+
124
+ [MACRO] POLL_RESULT_ERR_VALUE %out_value, %poll_res
125
+ %out_value = load %poll_res+PollResult_err as u64
126
+ [END_MACRO]
127
+
128
+ [MACRO] POLL_RESULT_MAP_OK %out_poll_res, %poll_res, %map_fn
129
+ __poll_result_poll_tag_%out_poll_res = load %poll_res+PollResult_poll_tag as u64
130
+ __poll_result_ready_%out_poll_res = eq __poll_result_poll_tag_%out_poll_res, Poll_READY
131
+ br __poll_result_ready_%out_poll_res -> L_POLL_RESULT_MAP_OK_READY_%out_poll_res, L_POLL_RESULT_MAP_OK_PENDING_%out_poll_res
132
+ L_POLL_RESULT_MAP_OK_READY_%out_poll_res:
133
+ __poll_result_tag_%out_poll_res = load %poll_res+PollResult_result_tag as u64
134
+ __poll_result_ok_%out_poll_res = eq __poll_result_tag_%out_poll_res, Result_OK
135
+ br __poll_result_ok_%out_poll_res -> L_POLL_RESULT_MAP_OK_OK_%out_poll_res, L_POLL_RESULT_MAP_OK_ERR_%out_poll_res
136
+ L_POLL_RESULT_MAP_OK_OK_%out_poll_res:
137
+ __poll_result_value_%out_poll_res = load %poll_res+PollResult_ok as u64
138
+ __poll_result_mapped_%out_poll_res = call %map_fn(__poll_result_value_%out_poll_res)
139
+ EXPAND POLL_RESULT_READY_OK %out_poll_res, __poll_result_mapped_%out_poll_res
140
+ !__poll_result_mapped_%out_poll_res
141
+ !__poll_result_value_%out_poll_res
142
+ jmp L_POLL_RESULT_MAP_OK_READY_DONE_%out_poll_res
143
+ L_POLL_RESULT_MAP_OK_ERR_%out_poll_res:
144
+ __poll_result_err_%out_poll_res = load %poll_res+PollResult_err as u64
145
+ EXPAND POLL_RESULT_READY_ERR %out_poll_res, __poll_result_err_%out_poll_res
146
+ !__poll_result_err_%out_poll_res
147
+ L_POLL_RESULT_MAP_OK_READY_DONE_%out_poll_res:
148
+ !__poll_result_ok_%out_poll_res
149
+ !__poll_result_tag_%out_poll_res
150
+ jmp L_POLL_RESULT_MAP_OK_DONE_%out_poll_res
151
+ L_POLL_RESULT_MAP_OK_PENDING_%out_poll_res:
152
+ EXPAND POLL_RESULT_PENDING %out_poll_res
153
+ L_POLL_RESULT_MAP_OK_DONE_%out_poll_res:
154
+ !__poll_result_ready_%out_poll_res
155
+ !__poll_result_poll_tag_%out_poll_res
156
+ [END_MACRO]
157
+
158
+ [MACRO] POLL_RESULT_MAP_ERR %out_poll_res, %poll_res, %map_fn
159
+ __poll_result_err_poll_tag_%out_poll_res = load %poll_res+PollResult_poll_tag as u64
160
+ __poll_result_err_ready_%out_poll_res = eq __poll_result_err_poll_tag_%out_poll_res, Poll_READY
161
+ br __poll_result_err_ready_%out_poll_res -> L_POLL_RESULT_MAP_ERR_READY_%out_poll_res, L_POLL_RESULT_MAP_ERR_PENDING_%out_poll_res
162
+ L_POLL_RESULT_MAP_ERR_READY_%out_poll_res:
163
+ __poll_result_err_tag_%out_poll_res = load %poll_res+PollResult_result_tag as u64
164
+ __poll_result_err_is_err_%out_poll_res = eq __poll_result_err_tag_%out_poll_res, Result_ERR
165
+ br __poll_result_err_is_err_%out_poll_res -> L_POLL_RESULT_MAP_ERR_ERR_%out_poll_res, L_POLL_RESULT_MAP_ERR_OK_%out_poll_res
166
+ L_POLL_RESULT_MAP_ERR_ERR_%out_poll_res:
167
+ __poll_result_err_value_%out_poll_res = load %poll_res+PollResult_err as u64
168
+ __poll_result_err_mapped_%out_poll_res = call %map_fn(__poll_result_err_value_%out_poll_res)
169
+ EXPAND POLL_RESULT_READY_ERR %out_poll_res, __poll_result_err_mapped_%out_poll_res
170
+ !__poll_result_err_mapped_%out_poll_res
171
+ !__poll_result_err_value_%out_poll_res
172
+ jmp L_POLL_RESULT_MAP_ERR_READY_DONE_%out_poll_res
173
+ L_POLL_RESULT_MAP_ERR_OK_%out_poll_res:
174
+ __poll_result_err_ok_value_%out_poll_res = load %poll_res+PollResult_ok as u64
175
+ EXPAND POLL_RESULT_READY_OK %out_poll_res, __poll_result_err_ok_value_%out_poll_res
176
+ !__poll_result_err_ok_value_%out_poll_res
177
+ L_POLL_RESULT_MAP_ERR_READY_DONE_%out_poll_res:
178
+ !__poll_result_err_is_err_%out_poll_res
179
+ !__poll_result_err_tag_%out_poll_res
180
+ jmp L_POLL_RESULT_MAP_ERR_DONE_%out_poll_res
181
+ L_POLL_RESULT_MAP_ERR_PENDING_%out_poll_res:
182
+ EXPAND POLL_RESULT_PENDING %out_poll_res
183
+ L_POLL_RESULT_MAP_ERR_DONE_%out_poll_res:
184
+ !__poll_result_err_ready_%out_poll_res
185
+ !__poll_result_err_poll_tag_%out_poll_res
186
+ [END_MACRO]
187
+
188
+ [MACRO] POLL_OPTION_RESULT_PENDING %out_poll_res
189
+ %out_poll_res = alloc PollOptionResult_SIZE
190
+ store %out_poll_res+PollOptionResult_poll_tag, Poll_PENDING as u64
191
+ store %out_poll_res+PollOptionResult_option_tag, Option_NONE as u64
192
+ store %out_poll_res+PollOptionResult_result_tag, Result_ERR as u64
193
+ store %out_poll_res+PollOptionResult_ok, 0 as u64
194
+ store %out_poll_res+PollOptionResult_err, 0 as u64
195
+ [END_MACRO]
196
+
197
+ [MACRO] POLL_OPTION_RESULT_READY_NONE %out_poll_res
198
+ %out_poll_res = alloc PollOptionResult_SIZE
199
+ store %out_poll_res+PollOptionResult_poll_tag, Poll_READY as u64
200
+ store %out_poll_res+PollOptionResult_option_tag, Option_NONE as u64
201
+ store %out_poll_res+PollOptionResult_result_tag, Result_ERR as u64
202
+ store %out_poll_res+PollOptionResult_ok, 0 as u64
203
+ store %out_poll_res+PollOptionResult_err, 0 as u64
204
+ [END_MACRO]
205
+
206
+ [MACRO] POLL_OPTION_RESULT_READY_SOME_OK %out_poll_res, %value
207
+ %out_poll_res = alloc PollOptionResult_SIZE
208
+ store %out_poll_res+PollOptionResult_poll_tag, Poll_READY as u64
209
+ store %out_poll_res+PollOptionResult_option_tag, Option_SOME as u64
210
+ store %out_poll_res+PollOptionResult_result_tag, Result_OK as u64
211
+ store %out_poll_res+PollOptionResult_ok, %value as u64
212
+ store %out_poll_res+PollOptionResult_err, 0 as u64
213
+ [END_MACRO]
214
+
215
+ [MACRO] POLL_OPTION_RESULT_READY_SOME_ERR %out_poll_res, %err
216
+ %out_poll_res = alloc PollOptionResult_SIZE
217
+ store %out_poll_res+PollOptionResult_poll_tag, Poll_READY as u64
218
+ store %out_poll_res+PollOptionResult_option_tag, Option_SOME as u64
219
+ store %out_poll_res+PollOptionResult_result_tag, Result_ERR as u64
220
+ store %out_poll_res+PollOptionResult_ok, 0 as u64
221
+ store %out_poll_res+PollOptionResult_err, %err as u64
222
+ [END_MACRO]
223
+
224
+ [MACRO] POLL_OPTION_RESULT_IS_READY %out_bool, %poll_res
225
+ __poll_option_result_tag_%out_bool = load %poll_res+PollOptionResult_poll_tag as u64
226
+ %out_bool = eq __poll_option_result_tag_%out_bool, Poll_READY
227
+ !__poll_option_result_tag_%out_bool
228
+ [END_MACRO]
229
+
230
+ [MACRO] POLL_OPTION_RESULT_IS_SOME %out_bool, %poll_res
231
+ __poll_option_result_tag_%out_bool = load %poll_res+PollOptionResult_option_tag as u64
232
+ %out_bool = eq __poll_option_result_tag_%out_bool, Option_SOME
233
+ !__poll_option_result_tag_%out_bool
234
+ [END_MACRO]
235
+
236
+ [MACRO] POLL_OPTION_RESULT_IS_OK %out_bool, %poll_res
237
+ __poll_option_result_tag_%out_bool = load %poll_res+PollOptionResult_result_tag as u64
238
+ %out_bool = eq __poll_option_result_tag_%out_bool, Result_OK
239
+ !__poll_option_result_tag_%out_bool
240
+ [END_MACRO]
241
+
242
+ [MACRO] POLL_OPTION_RESULT_OK_VALUE %out_value, %poll_res
243
+ %out_value = load %poll_res+PollOptionResult_ok as u64
244
+ [END_MACRO]
245
+
246
+ [MACRO] POLL_OPTION_RESULT_ERR_VALUE %out_value, %poll_res
247
+ %out_value = load %poll_res+PollOptionResult_err as u64
248
+ [END_MACRO]
249
+
250
+ [MACRO] POLL_OPTION_RESULT_MAP_OK %out_poll_res, %poll_res, %map_fn
251
+ __poll_option_ok_poll_tag_%out_poll_res = load %poll_res+PollOptionResult_poll_tag as u64
252
+ __poll_option_ok_ready_%out_poll_res = eq __poll_option_ok_poll_tag_%out_poll_res, Poll_READY
253
+ br __poll_option_ok_ready_%out_poll_res -> L_POLL_OPTION_RESULT_MAP_OK_READY_%out_poll_res, L_POLL_OPTION_RESULT_MAP_OK_PENDING_%out_poll_res
254
+ L_POLL_OPTION_RESULT_MAP_OK_READY_%out_poll_res:
255
+ __poll_option_ok_option_tag_%out_poll_res = load %poll_res+PollOptionResult_option_tag as u64
256
+ __poll_option_ok_some_%out_poll_res = eq __poll_option_ok_option_tag_%out_poll_res, Option_SOME
257
+ br __poll_option_ok_some_%out_poll_res -> L_POLL_OPTION_RESULT_MAP_OK_SOME_%out_poll_res, L_POLL_OPTION_RESULT_MAP_OK_NONE_%out_poll_res
258
+ L_POLL_OPTION_RESULT_MAP_OK_SOME_%out_poll_res:
259
+ __poll_option_ok_result_tag_%out_poll_res = load %poll_res+PollOptionResult_result_tag as u64
260
+ __poll_option_ok_is_ok_%out_poll_res = eq __poll_option_ok_result_tag_%out_poll_res, Result_OK
261
+ br __poll_option_ok_is_ok_%out_poll_res -> L_POLL_OPTION_RESULT_MAP_OK_OK_%out_poll_res, L_POLL_OPTION_RESULT_MAP_OK_ERR_%out_poll_res
262
+ L_POLL_OPTION_RESULT_MAP_OK_OK_%out_poll_res:
263
+ __poll_option_ok_value_%out_poll_res = load %poll_res+PollOptionResult_ok as u64
264
+ __poll_option_ok_mapped_%out_poll_res = call %map_fn(__poll_option_ok_value_%out_poll_res)
265
+ EXPAND POLL_OPTION_RESULT_READY_SOME_OK %out_poll_res, __poll_option_ok_mapped_%out_poll_res
266
+ !__poll_option_ok_mapped_%out_poll_res
267
+ !__poll_option_ok_value_%out_poll_res
268
+ jmp L_POLL_OPTION_RESULT_MAP_OK_SOME_DONE_%out_poll_res
269
+ L_POLL_OPTION_RESULT_MAP_OK_ERR_%out_poll_res:
270
+ __poll_option_ok_err_%out_poll_res = load %poll_res+PollOptionResult_err as u64
271
+ EXPAND POLL_OPTION_RESULT_READY_SOME_ERR %out_poll_res, __poll_option_ok_err_%out_poll_res
272
+ !__poll_option_ok_err_%out_poll_res
273
+ L_POLL_OPTION_RESULT_MAP_OK_SOME_DONE_%out_poll_res:
274
+ !__poll_option_ok_is_ok_%out_poll_res
275
+ !__poll_option_ok_result_tag_%out_poll_res
276
+ jmp L_POLL_OPTION_RESULT_MAP_OK_READY_DONE_%out_poll_res
277
+ L_POLL_OPTION_RESULT_MAP_OK_NONE_%out_poll_res:
278
+ EXPAND POLL_OPTION_RESULT_READY_NONE %out_poll_res
279
+ L_POLL_OPTION_RESULT_MAP_OK_READY_DONE_%out_poll_res:
280
+ !__poll_option_ok_some_%out_poll_res
281
+ !__poll_option_ok_option_tag_%out_poll_res
282
+ jmp L_POLL_OPTION_RESULT_MAP_OK_DONE_%out_poll_res
283
+ L_POLL_OPTION_RESULT_MAP_OK_PENDING_%out_poll_res:
284
+ EXPAND POLL_OPTION_RESULT_PENDING %out_poll_res
285
+ L_POLL_OPTION_RESULT_MAP_OK_DONE_%out_poll_res:
286
+ !__poll_option_ok_ready_%out_poll_res
287
+ !__poll_option_ok_poll_tag_%out_poll_res
288
+ [END_MACRO]
289
+
290
+ [MACRO] POLL_OPTION_RESULT_MAP_ERR %out_poll_res, %poll_res, %map_fn
291
+ __poll_option_err_poll_tag_%out_poll_res = load %poll_res+PollOptionResult_poll_tag as u64
292
+ __poll_option_err_ready_%out_poll_res = eq __poll_option_err_poll_tag_%out_poll_res, Poll_READY
293
+ br __poll_option_err_ready_%out_poll_res -> L_POLL_OPTION_RESULT_MAP_ERR_READY_%out_poll_res, L_POLL_OPTION_RESULT_MAP_ERR_PENDING_%out_poll_res
294
+ L_POLL_OPTION_RESULT_MAP_ERR_READY_%out_poll_res:
295
+ __poll_option_err_option_tag_%out_poll_res = load %poll_res+PollOptionResult_option_tag as u64
296
+ __poll_option_err_some_%out_poll_res = eq __poll_option_err_option_tag_%out_poll_res, Option_SOME
297
+ br __poll_option_err_some_%out_poll_res -> L_POLL_OPTION_RESULT_MAP_ERR_SOME_%out_poll_res, L_POLL_OPTION_RESULT_MAP_ERR_NONE_%out_poll_res
298
+ L_POLL_OPTION_RESULT_MAP_ERR_SOME_%out_poll_res:
299
+ __poll_option_err_result_tag_%out_poll_res = load %poll_res+PollOptionResult_result_tag as u64
300
+ __poll_option_err_is_err_%out_poll_res = eq __poll_option_err_result_tag_%out_poll_res, Result_ERR
301
+ br __poll_option_err_is_err_%out_poll_res -> L_POLL_OPTION_RESULT_MAP_ERR_ERR_%out_poll_res, L_POLL_OPTION_RESULT_MAP_ERR_OK_%out_poll_res
302
+ L_POLL_OPTION_RESULT_MAP_ERR_ERR_%out_poll_res:
303
+ __poll_option_err_value_%out_poll_res = load %poll_res+PollOptionResult_err as u64
304
+ __poll_option_err_mapped_%out_poll_res = call %map_fn(__poll_option_err_value_%out_poll_res)
305
+ EXPAND POLL_OPTION_RESULT_READY_SOME_ERR %out_poll_res, __poll_option_err_mapped_%out_poll_res
306
+ !__poll_option_err_mapped_%out_poll_res
307
+ !__poll_option_err_value_%out_poll_res
308
+ jmp L_POLL_OPTION_RESULT_MAP_ERR_SOME_DONE_%out_poll_res
309
+ L_POLL_OPTION_RESULT_MAP_ERR_OK_%out_poll_res:
310
+ __poll_option_err_ok_%out_poll_res = load %poll_res+PollOptionResult_ok as u64
311
+ EXPAND POLL_OPTION_RESULT_READY_SOME_OK %out_poll_res, __poll_option_err_ok_%out_poll_res
312
+ !__poll_option_err_ok_%out_poll_res
313
+ L_POLL_OPTION_RESULT_MAP_ERR_SOME_DONE_%out_poll_res:
314
+ !__poll_option_err_is_err_%out_poll_res
315
+ !__poll_option_err_result_tag_%out_poll_res
316
+ jmp L_POLL_OPTION_RESULT_MAP_ERR_READY_DONE_%out_poll_res
317
+ L_POLL_OPTION_RESULT_MAP_ERR_NONE_%out_poll_res:
318
+ EXPAND POLL_OPTION_RESULT_READY_NONE %out_poll_res
319
+ L_POLL_OPTION_RESULT_MAP_ERR_READY_DONE_%out_poll_res:
320
+ !__poll_option_err_some_%out_poll_res
321
+ !__poll_option_err_option_tag_%out_poll_res
322
+ jmp L_POLL_OPTION_RESULT_MAP_ERR_DONE_%out_poll_res
323
+ L_POLL_OPTION_RESULT_MAP_ERR_PENDING_%out_poll_res:
324
+ EXPAND POLL_OPTION_RESULT_PENDING %out_poll_res
325
+ L_POLL_OPTION_RESULT_MAP_ERR_DONE_%out_poll_res:
326
+ !__poll_option_err_ready_%out_poll_res
327
+ !__poll_option_err_poll_tag_%out_poll_res
328
+ [END_MACRO]
329
+
330
+ [MACRO] POLL_BRANCH %poll_reg, %ready_label, %pending_label
331
+ __poll_tag_%poll_reg = load %poll_reg+Poll_tag as u64
332
+ __poll_is_ready_%poll_reg = eq __poll_tag_%poll_reg, Poll_READY
333
+ br __poll_is_ready_%poll_reg -> L_POLL_BRANCH_READY_%poll_reg, L_POLL_BRANCH_PENDING_%poll_reg
334
+ L_POLL_BRANCH_READY_%poll_reg:
335
+ !__poll_is_ready_%poll_reg
336
+ !__poll_tag_%poll_reg
337
+ jmp %ready_label
338
+ L_POLL_BRANCH_PENDING_%poll_reg:
339
+ !__poll_is_ready_%poll_reg
340
+ !__poll_tag_%poll_reg
341
+ jmp %pending_label
342
+ [END_MACRO]
343
+
344
+ [MACRO] CONTEXT_NEW %out_ctx, %waker_reg, %data_ptr
345
+ %out_ctx = alloc Context_SIZE
346
+ store %out_ctx+Context_waker, %waker_reg as ptr
347
+ store %out_ctx+Context_local_waker, %waker_reg as ptr
348
+ store %out_ctx+Context_ext, 0 as ptr
349
+ store %out_ctx+Context_data, %data_ptr as ptr
350
+ [END_MACRO]
351
+
352
+ [MACRO] CONTEXT_FROM_WAKER %out_ctx, %waker_reg
353
+ __context_no_data_%out_ctx = 0 as ptr
354
+ EXPAND CONTEXT_NEW %out_ctx, %waker_reg, __context_no_data_%out_ctx
355
+ !__context_no_data_%out_ctx
356
+ [END_MACRO]
357
+
358
+ [MACRO] CONTEXT_WAKER %out_waker, %ctx_reg
359
+ %out_waker = load %ctx_reg+Context_waker as ptr
360
+ [END_MACRO]
361
+
362
+ [MACRO] CONTEXT_LOCAL_WAKER %out_waker, %ctx_reg
363
+ %out_waker = load %ctx_reg+Context_local_waker as ptr
364
+ [END_MACRO]
365
+
366
+ [MACRO] CONTEXT_EXT %out_ext, %ctx_reg
367
+ %out_ext = load %ctx_reg+Context_ext as ptr
368
+ [END_MACRO]
369
+
370
+ [MACRO] CONTEXT_SET_EXT %ctx_reg, %ext_ptr
371
+ store %ctx_reg+Context_ext, %ext_ptr as ptr
372
+ [END_MACRO]
373
+
374
+ [MACRO] CONTEXT_DATA %out_data, %ctx_reg
375
+ %out_data = load %ctx_reg+Context_data as ptr
376
+ [END_MACRO]
377
+
378
+ [MACRO] CONTEXT_BUILDER_FROM_WAKER %out_builder, %waker_reg
379
+ %out_builder = alloc ContextBuilder_SIZE
380
+ store %out_builder+ContextBuilder_waker, %waker_reg as ptr
381
+ store %out_builder+ContextBuilder_local_waker, %waker_reg as ptr
382
+ store %out_builder+ContextBuilder_ext, 0 as ptr
383
+ store %out_builder+ContextBuilder_data, 0 as ptr
384
+ [END_MACRO]
385
+
386
+ [MACRO] CONTEXT_BUILDER_FROM_CONTEXT %out_builder, %ctx_reg
387
+ __ctx_builder_waker_%out_builder = load %ctx_reg+Context_waker as ptr
388
+ __ctx_builder_local_%out_builder = load %ctx_reg+Context_local_waker as ptr
389
+ __ctx_builder_ext_%out_builder = load %ctx_reg+Context_ext as ptr
390
+ __ctx_builder_data_%out_builder = load %ctx_reg+Context_data as ptr
391
+ %out_builder = alloc ContextBuilder_SIZE
392
+ store %out_builder+ContextBuilder_waker, __ctx_builder_waker_%out_builder as ptr
393
+ store %out_builder+ContextBuilder_local_waker, __ctx_builder_local_%out_builder as ptr
394
+ store %out_builder+ContextBuilder_ext, __ctx_builder_ext_%out_builder as ptr
395
+ store %out_builder+ContextBuilder_data, __ctx_builder_data_%out_builder as ptr
396
+ !__ctx_builder_data_%out_builder
397
+ !__ctx_builder_ext_%out_builder
398
+ !__ctx_builder_local_%out_builder
399
+ !__ctx_builder_waker_%out_builder
400
+ [END_MACRO]
401
+
402
+ [MACRO] CONTEXT_BUILDER_SET_WAKER %builder_reg, %waker_reg
403
+ store %builder_reg+ContextBuilder_waker, %waker_reg as ptr
404
+ [END_MACRO]
405
+
406
+ [MACRO] CONTEXT_BUILDER_SET_LOCAL_WAKER %builder_reg, %local_waker_reg
407
+ store %builder_reg+ContextBuilder_local_waker, %local_waker_reg as ptr
408
+ [END_MACRO]
409
+
410
+ [MACRO] CONTEXT_BUILDER_SET_EXT %builder_reg, %ext_ptr
411
+ store %builder_reg+ContextBuilder_ext, %ext_ptr as ptr
412
+ [END_MACRO]
413
+
414
+ [MACRO] CONTEXT_BUILDER_SET_DATA %builder_reg, %data_ptr
415
+ store %builder_reg+ContextBuilder_data, %data_ptr as ptr
416
+ [END_MACRO]
417
+
418
+ [MACRO] CONTEXT_BUILDER_BUILD %out_ctx, %builder_reg
419
+ __ctx_builder_build_waker_%out_ctx = load %builder_reg+ContextBuilder_waker as ptr
420
+ __ctx_builder_build_local_%out_ctx = load %builder_reg+ContextBuilder_local_waker as ptr
421
+ __ctx_builder_build_ext_%out_ctx = load %builder_reg+ContextBuilder_ext as ptr
422
+ __ctx_builder_build_data_%out_ctx = load %builder_reg+ContextBuilder_data as ptr
423
+ %out_ctx = alloc Context_SIZE
424
+ store %out_ctx+Context_waker, __ctx_builder_build_waker_%out_ctx as ptr
425
+ store %out_ctx+Context_local_waker, __ctx_builder_build_local_%out_ctx as ptr
426
+ store %out_ctx+Context_ext, __ctx_builder_build_ext_%out_ctx as ptr
427
+ store %out_ctx+Context_data, __ctx_builder_build_data_%out_ctx as ptr
428
+ !__ctx_builder_build_data_%out_ctx
429
+ !__ctx_builder_build_ext_%out_ctx
430
+ !__ctx_builder_build_local_%out_ctx
431
+ !__ctx_builder_build_waker_%out_ctx
432
+ [END_MACRO]
433
+
434
+ [MACRO] FUTURE_NEW %out_future, %data_ptr, %vtable_ptr
435
+ %out_future = alloc Future_SIZE
436
+ store %out_future+Future_data, %data_ptr as ptr
437
+ store %out_future+Future_vtable, %vtable_ptr as ptr
438
+ [END_MACRO]
439
+
440
+ [MACRO] FUTURE_READY_STATE_NEW %out_state, %value
441
+ %out_state = alloc ReadyFuture_SIZE
442
+ store %out_state+ReadyFuture_state, 1 as u64
443
+ store %out_state+ReadyFuture_value, %value as u64
444
+ [END_MACRO]
445
+
446
+ [MACRO] FUTURE_PENDING_STATE_NEW %out_state
447
+ %out_state = alloc PendingFuture_SIZE
448
+ store %out_state+PendingFuture_marker, 0 as u64
449
+ [END_MACRO]
450
+
451
+ [MACRO] FUTURE_READY_STATE_INTO_INNER %out_value, %state_reg
452
+ %out_value = load %state_reg+ReadyFuture_value as u64
453
+ store %state_reg+ReadyFuture_state, 0 as u64
454
+ [END_MACRO]
455
+
456
+ [MACRO] FUTURE_READY_POLL_STATE %out_poll, %state_reg
457
+ __future_ready_state_%out_poll = load %state_reg+ReadyFuture_state as u64
458
+ __future_ready_available_%out_poll = eq __future_ready_state_%out_poll, 1
459
+ br __future_ready_available_%out_poll -> L_FUTURE_READY_POLL_READY_%out_poll, L_FUTURE_READY_POLL_EMPTY_%out_poll
460
+ L_FUTURE_READY_POLL_READY_%out_poll:
461
+ __future_ready_value_%out_poll = load %state_reg+ReadyFuture_value as u64
462
+ store %state_reg+ReadyFuture_state, 0 as u64
463
+ EXPAND POLL_READY %out_poll, __future_ready_value_%out_poll
464
+ !__future_ready_value_%out_poll
465
+ jmp L_FUTURE_READY_POLL_DONE_%out_poll
466
+ L_FUTURE_READY_POLL_EMPTY_%out_poll:
467
+ EXPAND POLL_PENDING %out_poll
468
+ L_FUTURE_READY_POLL_DONE_%out_poll:
469
+ !__future_ready_available_%out_poll
470
+ !__future_ready_state_%out_poll
471
+ [END_MACRO]
472
+
473
+ [MACRO] FUTURE_READY_SET_POLL_STATE %out_poll_reg, %state_reg
474
+ __future_ready_set_state_%out_poll_reg = load %state_reg+ReadyFuture_state as u64
475
+ __future_ready_set_available_%out_poll_reg = eq __future_ready_set_state_%out_poll_reg, 1
476
+ br __future_ready_set_available_%out_poll_reg -> L_FUTURE_READY_SET_READY_%out_poll_reg, L_FUTURE_READY_SET_EMPTY_%out_poll_reg
477
+ L_FUTURE_READY_SET_READY_%out_poll_reg:
478
+ __future_ready_set_value_%out_poll_reg = load %state_reg+ReadyFuture_value as u64
479
+ store %state_reg+ReadyFuture_state, 0 as u64
480
+ EXPAND POLL_SET_READY %out_poll_reg, __future_ready_set_value_%out_poll_reg
481
+ !__future_ready_set_value_%out_poll_reg
482
+ jmp L_FUTURE_READY_SET_DONE_%out_poll_reg
483
+ L_FUTURE_READY_SET_EMPTY_%out_poll_reg:
484
+ EXPAND POLL_SET_PENDING %out_poll_reg
485
+ L_FUTURE_READY_SET_DONE_%out_poll_reg:
486
+ !__future_ready_set_available_%out_poll_reg
487
+ !__future_ready_set_state_%out_poll_reg
488
+ [END_MACRO]
489
+
490
+ [MACRO] FUTURE_PENDING_POLL_STATE %out_poll, %state_reg
491
+ EXPAND POLL_PENDING %out_poll
492
+ [END_MACRO]
493
+
494
+ [MACRO] FUTURE_PENDING_SET_POLL_STATE %out_poll_reg, %state_reg
495
+ EXPAND POLL_SET_PENDING %out_poll_reg
496
+ [END_MACRO]
497
+
498
+ [MACRO] FUTURE_POLL_FN_STATE_NEW %out_state, %data_ptr, %vtable_ptr
499
+ %out_state = alloc PollFnFuture_SIZE
500
+ store %out_state+PollFnFuture_data, %data_ptr as ptr
501
+ store %out_state+PollFnFuture_vtable, %vtable_ptr as ptr
502
+ [END_MACRO]
503
+
504
+ [MACRO] FUTURE_POLL_FN_STATE_POLL %out_poll, %state_reg, %ctx_reg
505
+ __future_poll_fn_data_%out_poll = load %state_reg+PollFnFuture_data as ptr
506
+ __future_poll_fn_vtable_%out_poll = load %state_reg+PollFnFuture_vtable as ptr
507
+ __future_poll_fn_%out_poll = load __future_poll_fn_vtable_%out_poll+FuturePollSlot as ptr
508
+ %out_poll = alloc Poll_SIZE
509
+ call_indirect __future_poll_fn_%out_poll(&__future_poll_fn_data_%out_poll, &%ctx_reg, &%out_poll)
510
+ !__future_poll_fn_%out_poll
511
+ !__future_poll_fn_vtable_%out_poll
512
+ !__future_poll_fn_data_%out_poll
513
+ [END_MACRO]
514
+
515
+ [MACRO] FUTURE_PAIR_NEW %out_pair, %left_value, %right_value
516
+ %out_pair = alloc FuturePair_SIZE
517
+ store %out_pair+FuturePair_left, %left_value as u64
518
+ store %out_pair+FuturePair_right, %right_value as u64
519
+ [END_MACRO]
520
+
521
+ [MACRO] FUTURE_PAIR_LEFT %out_value, %pair_reg
522
+ %out_value = load %pair_reg+FuturePair_left as u64
523
+ [END_MACRO]
524
+
525
+ [MACRO] FUTURE_PAIR_RIGHT %out_value, %pair_reg
526
+ %out_value = load %pair_reg+FuturePair_right as u64
527
+ [END_MACRO]
528
+
529
+ [MACRO] FUTURE_EITHER_LEFT %out_either, %value
530
+ %out_either = alloc FutureEither_SIZE
531
+ store %out_either+FutureEither_side, FutureSelect_LEFT as u64
532
+ store %out_either+FutureEither_left, %value as u64
533
+ store %out_either+FutureEither_right, 0 as u64
534
+ [END_MACRO]
535
+
536
+ [MACRO] FUTURE_EITHER_RIGHT %out_either, %value
537
+ %out_either = alloc FutureEither_SIZE
538
+ store %out_either+FutureEither_side, FutureSelect_RIGHT as u64
539
+ store %out_either+FutureEither_left, 0 as u64
540
+ store %out_either+FutureEither_right, %value as u64
541
+ [END_MACRO]
542
+
543
+ [MACRO] FUTURE_EITHER_SIDE %out_side, %either_reg
544
+ %out_side = load %either_reg+FutureEither_side as u64
545
+ [END_MACRO]
546
+
547
+ [MACRO] FUTURE_EITHER_LEFT_VALUE %out_value, %either_reg
548
+ %out_value = load %either_reg+FutureEither_left as u64
549
+ [END_MACRO]
550
+
551
+ [MACRO] FUTURE_EITHER_RIGHT_VALUE %out_value, %either_reg
552
+ %out_value = load %either_reg+FutureEither_right as u64
553
+ [END_MACRO]
554
+
555
+ [MACRO] FUTURE_JOIN2_STATE_NEW %out_state, %left_future, %right_future
556
+ %out_state = alloc FutureJoin2State_SIZE
557
+ store %out_state+FutureJoin2State_left, %left_future as ptr
558
+ store %out_state+FutureJoin2State_right, %right_future as ptr
559
+ store %out_state+FutureJoin2State_left_value, 0 as u64
560
+ store %out_state+FutureJoin2State_right_value, 0 as u64
561
+ store %out_state+FutureJoin2State_left_done, 0 as u64
562
+ store %out_state+FutureJoin2State_right_done, 0 as u64
563
+ [END_MACRO]
564
+
565
+ [MACRO] FUTURE_JOIN2_STATE_POLL %out_poll, %join_state, %ctx_reg
566
+ __future_join_state_left_done_%out_poll = load %join_state+FutureJoin2State_left_done as u64
567
+ __future_join_state_left_pending_%out_poll = eq __future_join_state_left_done_%out_poll, 0
568
+ br __future_join_state_left_pending_%out_poll -> L_FUTURE_JOIN2_STATE_POLL_LEFT_%out_poll, L_FUTURE_JOIN2_STATE_AFTER_LEFT_%out_poll
569
+ L_FUTURE_JOIN2_STATE_POLL_LEFT_%out_poll:
570
+ __future_join_state_left_future_%out_poll = load %join_state+FutureJoin2State_left as ptr
571
+ EXPAND FUTURE_POLL __future_join_state_left_poll_%out_poll, __future_join_state_left_future_%out_poll, %ctx_reg
572
+ __future_join_state_left_tag_%out_poll = load __future_join_state_left_poll_%out_poll+Poll_tag as u64
573
+ __future_join_state_left_ready_%out_poll = eq __future_join_state_left_tag_%out_poll, Poll_READY
574
+ br __future_join_state_left_ready_%out_poll -> L_FUTURE_JOIN2_STATE_LEFT_READY_%out_poll, L_FUTURE_JOIN2_STATE_LEFT_PENDING_%out_poll
575
+ L_FUTURE_JOIN2_STATE_LEFT_READY_%out_poll:
576
+ __future_join_state_left_value_%out_poll = load __future_join_state_left_poll_%out_poll+Poll_value as u64
577
+ store %join_state+FutureJoin2State_left_value, __future_join_state_left_value_%out_poll as u64
578
+ store %join_state+FutureJoin2State_left_done, 1 as u64
579
+ !__future_join_state_left_value_%out_poll
580
+ L_FUTURE_JOIN2_STATE_LEFT_PENDING_%out_poll:
581
+ !__future_join_state_left_ready_%out_poll
582
+ !__future_join_state_left_tag_%out_poll
583
+ !__future_join_state_left_poll_%out_poll
584
+ !__future_join_state_left_future_%out_poll
585
+ L_FUTURE_JOIN2_STATE_AFTER_LEFT_%out_poll:
586
+ __future_join_state_right_done_%out_poll = load %join_state+FutureJoin2State_right_done as u64
587
+ __future_join_state_right_pending_%out_poll = eq __future_join_state_right_done_%out_poll, 0
588
+ br __future_join_state_right_pending_%out_poll -> L_FUTURE_JOIN2_STATE_POLL_RIGHT_%out_poll, L_FUTURE_JOIN2_STATE_AFTER_RIGHT_%out_poll
589
+ L_FUTURE_JOIN2_STATE_POLL_RIGHT_%out_poll:
590
+ __future_join_state_right_future_%out_poll = load %join_state+FutureJoin2State_right as ptr
591
+ EXPAND FUTURE_POLL __future_join_state_right_poll_%out_poll, __future_join_state_right_future_%out_poll, %ctx_reg
592
+ __future_join_state_right_tag_%out_poll = load __future_join_state_right_poll_%out_poll+Poll_tag as u64
593
+ __future_join_state_right_ready_%out_poll = eq __future_join_state_right_tag_%out_poll, Poll_READY
594
+ br __future_join_state_right_ready_%out_poll -> L_FUTURE_JOIN2_STATE_RIGHT_READY_%out_poll, L_FUTURE_JOIN2_STATE_RIGHT_PENDING_%out_poll
595
+ L_FUTURE_JOIN2_STATE_RIGHT_READY_%out_poll:
596
+ __future_join_state_right_value_%out_poll = load __future_join_state_right_poll_%out_poll+Poll_value as u64
597
+ store %join_state+FutureJoin2State_right_value, __future_join_state_right_value_%out_poll as u64
598
+ store %join_state+FutureJoin2State_right_done, 1 as u64
599
+ !__future_join_state_right_value_%out_poll
600
+ L_FUTURE_JOIN2_STATE_RIGHT_PENDING_%out_poll:
601
+ !__future_join_state_right_ready_%out_poll
602
+ !__future_join_state_right_tag_%out_poll
603
+ !__future_join_state_right_poll_%out_poll
604
+ !__future_join_state_right_future_%out_poll
605
+ L_FUTURE_JOIN2_STATE_AFTER_RIGHT_%out_poll:
606
+ __future_join_state_left_done_now_%out_poll = load %join_state+FutureJoin2State_left_done as u64
607
+ __future_join_state_right_done_now_%out_poll = load %join_state+FutureJoin2State_right_done as u64
608
+ __future_join_state_all_ready_%out_poll = and __future_join_state_left_done_now_%out_poll, __future_join_state_right_done_now_%out_poll
609
+ br __future_join_state_all_ready_%out_poll -> L_FUTURE_JOIN2_STATE_READY_%out_poll, L_FUTURE_JOIN2_STATE_PENDING_%out_poll
610
+ L_FUTURE_JOIN2_STATE_READY_%out_poll:
611
+ __future_join_state_left_result_%out_poll = load %join_state+FutureJoin2State_left_value as u64
612
+ __future_join_state_right_result_%out_poll = load %join_state+FutureJoin2State_right_value as u64
613
+ EXPAND FUTURE_PAIR_NEW __future_join_state_pair_%out_poll, __future_join_state_left_result_%out_poll, __future_join_state_right_result_%out_poll
614
+ EXPAND POLL_READY_PTR %out_poll, __future_join_state_pair_%out_poll
615
+ ^__future_join_state_pair_%out_poll
616
+ !__future_join_state_right_result_%out_poll
617
+ !__future_join_state_left_result_%out_poll
618
+ jmp L_FUTURE_JOIN2_STATE_DONE_%out_poll
619
+ L_FUTURE_JOIN2_STATE_PENDING_%out_poll:
620
+ EXPAND POLL_PENDING %out_poll
621
+ L_FUTURE_JOIN2_STATE_DONE_%out_poll:
622
+ !__future_join_state_all_ready_%out_poll
623
+ !__future_join_state_right_done_now_%out_poll
624
+ !__future_join_state_left_done_now_%out_poll
625
+ !__future_join_state_right_pending_%out_poll
626
+ !__future_join_state_right_done_%out_poll
627
+ !__future_join_state_left_pending_%out_poll
628
+ !__future_join_state_left_done_%out_poll
629
+ [END_MACRO]
630
+
631
+ [MACRO] FUTURE_SELECT2_STATE_NEW %out_state, %left_future, %right_future
632
+ %out_state = alloc FutureSelect2State_SIZE
633
+ store %out_state+FutureSelect2State_left, %left_future as ptr
634
+ store %out_state+FutureSelect2State_right, %right_future as ptr
635
+ store %out_state+FutureSelect2State_winner, FutureSelect_NONE as u64
636
+ [END_MACRO]
637
+
638
+ [MACRO] FUTURE_SELECT2_STATE_POLL %out_poll, %select_state, %ctx_reg
639
+ __future_select_state_winner_%out_poll = load %select_state+FutureSelect2State_winner as u64
640
+ __future_select_state_has_winner_%out_poll = ne __future_select_state_winner_%out_poll, FutureSelect_NONE
641
+ br __future_select_state_has_winner_%out_poll -> L_FUTURE_SELECT2_STATE_DONE_ALREADY_%out_poll, L_FUTURE_SELECT2_STATE_POLL_LEFT_%out_poll
642
+ L_FUTURE_SELECT2_STATE_DONE_ALREADY_%out_poll:
643
+ EXPAND POLL_PENDING %out_poll
644
+ jmp L_FUTURE_SELECT2_STATE_DONE_%out_poll
645
+ L_FUTURE_SELECT2_STATE_POLL_LEFT_%out_poll:
646
+ __future_select_state_left_%out_poll = load %select_state+FutureSelect2State_left as ptr
647
+ EXPAND FUTURE_POLL __future_select_state_left_poll_%out_poll, __future_select_state_left_%out_poll, %ctx_reg
648
+ __future_select_state_left_tag_%out_poll = load __future_select_state_left_poll_%out_poll+Poll_tag as u64
649
+ __future_select_state_left_ready_%out_poll = eq __future_select_state_left_tag_%out_poll, Poll_READY
650
+ br __future_select_state_left_ready_%out_poll -> L_FUTURE_SELECT2_STATE_LEFT_READY_%out_poll, L_FUTURE_SELECT2_STATE_POLL_RIGHT_%out_poll
651
+ L_FUTURE_SELECT2_STATE_LEFT_READY_%out_poll:
652
+ __future_select_state_left_value_%out_poll = load __future_select_state_left_poll_%out_poll+Poll_value as u64
653
+ store %select_state+FutureSelect2State_winner, FutureSelect_LEFT as u64
654
+ EXPAND FUTURE_EITHER_LEFT __future_select_state_either_left_%out_poll, __future_select_state_left_value_%out_poll
655
+ EXPAND POLL_READY_PTR %out_poll, __future_select_state_either_left_%out_poll
656
+ ^__future_select_state_either_left_%out_poll
657
+ !__future_select_state_left_value_%out_poll
658
+ jmp L_FUTURE_SELECT2_STATE_LEFT_DONE_%out_poll
659
+ L_FUTURE_SELECT2_STATE_POLL_RIGHT_%out_poll:
660
+ __future_select_state_right_%out_poll = load %select_state+FutureSelect2State_right as ptr
661
+ EXPAND FUTURE_POLL __future_select_state_right_poll_%out_poll, __future_select_state_right_%out_poll, %ctx_reg
662
+ __future_select_state_right_tag_%out_poll = load __future_select_state_right_poll_%out_poll+Poll_tag as u64
663
+ __future_select_state_right_ready_%out_poll = eq __future_select_state_right_tag_%out_poll, Poll_READY
664
+ br __future_select_state_right_ready_%out_poll -> L_FUTURE_SELECT2_STATE_RIGHT_READY_%out_poll, L_FUTURE_SELECT2_STATE_PENDING_%out_poll
665
+ L_FUTURE_SELECT2_STATE_RIGHT_READY_%out_poll:
666
+ __future_select_state_right_value_%out_poll = load __future_select_state_right_poll_%out_poll+Poll_value as u64
667
+ store %select_state+FutureSelect2State_winner, FutureSelect_RIGHT as u64
668
+ EXPAND FUTURE_EITHER_RIGHT __future_select_state_either_right_%out_poll, __future_select_state_right_value_%out_poll
669
+ EXPAND POLL_READY_PTR %out_poll, __future_select_state_either_right_%out_poll
670
+ ^__future_select_state_either_right_%out_poll
671
+ !__future_select_state_right_value_%out_poll
672
+ jmp L_FUTURE_SELECT2_STATE_RIGHT_DONE_%out_poll
673
+ L_FUTURE_SELECT2_STATE_PENDING_%out_poll:
674
+ EXPAND POLL_PENDING %out_poll
675
+ L_FUTURE_SELECT2_STATE_RIGHT_DONE_%out_poll:
676
+ !__future_select_state_right_ready_%out_poll
677
+ !__future_select_state_right_tag_%out_poll
678
+ !__future_select_state_right_poll_%out_poll
679
+ !__future_select_state_right_%out_poll
680
+ L_FUTURE_SELECT2_STATE_LEFT_DONE_%out_poll:
681
+ !__future_select_state_left_ready_%out_poll
682
+ !__future_select_state_left_tag_%out_poll
683
+ !__future_select_state_left_poll_%out_poll
684
+ !__future_select_state_left_%out_poll
685
+ L_FUTURE_SELECT2_STATE_DONE_%out_poll:
686
+ !__future_select_state_has_winner_%out_poll
687
+ !__future_select_state_winner_%out_poll
688
+ [END_MACRO]
689
+
690
+ [MACRO] FUTURE_GET_DATA %out_data, %future_reg
691
+ %out_data = load %future_reg+Future_data as ptr
692
+ [END_MACRO]
693
+
694
+ [MACRO] FUTURE_GET_VTABLE %out_vtable, %future_reg
695
+ %out_vtable = load %future_reg+Future_vtable as ptr
696
+ [END_MACRO]
697
+
698
+ [MACRO] FUTURE_POLL %out_poll, %future_reg, %ctx_reg
699
+ __future_data_%out_poll = load %future_reg+Future_data as ptr
700
+ __future_vtable_%out_poll = load %future_reg+Future_vtable as ptr
701
+ __future_poll_fn_%out_poll = load __future_vtable_%out_poll+FuturePollSlot as ptr
702
+ %out_poll = alloc Poll_SIZE
703
+ call_indirect __future_poll_fn_%out_poll(&__future_data_%out_poll, &%ctx_reg, &%out_poll)
704
+ !__future_poll_fn_%out_poll
705
+ !__future_vtable_%out_poll
706
+ !__future_data_%out_poll
707
+ [END_MACRO]
708
+
709
+ [MACRO] FUTURE_POLL_BRANCH %out_poll, %future_reg, %ctx_reg, %ready_label, %pending_label
710
+ EXPAND FUTURE_POLL %out_poll, %future_reg, %ctx_reg
711
+ EXPAND POLL_BRANCH %out_poll, %ready_label, %pending_label
712
+ [END_MACRO]
713
+
714
+ [MACRO] FUTURE_JOIN2_POLL %out_poll, %left_future, %right_future, %ctx_reg
715
+ EXPAND FUTURE_POLL __future_join_left_%out_poll, %left_future, %ctx_reg
716
+ EXPAND FUTURE_POLL __future_join_right_%out_poll, %right_future, %ctx_reg
717
+ __future_join_left_ready_%out_poll = load __future_join_left_%out_poll+Poll_tag as u64
718
+ __future_join_right_ready_%out_poll = load __future_join_right_%out_poll+Poll_tag as u64
719
+ __future_join_left_ok_%out_poll = eq __future_join_left_ready_%out_poll, Poll_READY
720
+ __future_join_right_ok_%out_poll = eq __future_join_right_ready_%out_poll, Poll_READY
721
+ __future_join_ready_%out_poll = and __future_join_left_ok_%out_poll, __future_join_right_ok_%out_poll
722
+ br __future_join_ready_%out_poll -> L_FUTURE_JOIN2_READY_%out_poll, L_FUTURE_JOIN2_PENDING_%out_poll
723
+ L_FUTURE_JOIN2_READY_%out_poll:
724
+ __future_join_left_value_%out_poll = load __future_join_left_%out_poll+Poll_value as u64
725
+ __future_join_right_value_%out_poll = load __future_join_right_%out_poll+Poll_value as u64
726
+ __future_join_value_%out_poll = add __future_join_left_value_%out_poll, __future_join_right_value_%out_poll
727
+ EXPAND POLL_READY %out_poll, __future_join_value_%out_poll
728
+ !__future_join_value_%out_poll
729
+ !__future_join_right_value_%out_poll
730
+ !__future_join_left_value_%out_poll
731
+ jmp L_FUTURE_JOIN2_DONE_%out_poll
732
+ L_FUTURE_JOIN2_PENDING_%out_poll:
733
+ EXPAND POLL_PENDING %out_poll
734
+ L_FUTURE_JOIN2_DONE_%out_poll:
735
+ !__future_join_ready_%out_poll
736
+ !__future_join_right_ok_%out_poll
737
+ !__future_join_left_ok_%out_poll
738
+ !__future_join_right_ready_%out_poll
739
+ !__future_join_left_ready_%out_poll
740
+ !__future_join_right_%out_poll
741
+ !__future_join_left_%out_poll
742
+ [END_MACRO]
743
+
744
+ [MACRO] FUTURE_SELECT2_POLL %out_poll, %left_future, %right_future, %ctx_reg, %out_side
745
+ EXPAND FUTURE_POLL __future_select_left_%out_poll, %left_future, %ctx_reg
746
+ __future_select_left_tag_%out_poll = load __future_select_left_%out_poll+Poll_tag as u64
747
+ __future_select_left_ready_%out_poll = eq __future_select_left_tag_%out_poll, Poll_READY
748
+ br __future_select_left_ready_%out_poll -> L_FUTURE_SELECT2_LEFT_%out_poll, L_FUTURE_SELECT2_TRY_RIGHT_%out_poll
749
+ L_FUTURE_SELECT2_LEFT_%out_poll:
750
+ __future_select_left_value_%out_poll = load __future_select_left_%out_poll+Poll_value as u64
751
+ EXPAND POLL_READY %out_poll, __future_select_left_value_%out_poll
752
+ %out_side = add FutureSelect_LEFT, 0
753
+ !__future_select_left_value_%out_poll
754
+ jmp L_FUTURE_SELECT2_DONE_LEFT_%out_poll
755
+ L_FUTURE_SELECT2_TRY_RIGHT_%out_poll:
756
+ EXPAND FUTURE_POLL __future_select_right_%out_poll, %right_future, %ctx_reg
757
+ __future_select_right_tag_%out_poll = load __future_select_right_%out_poll+Poll_tag as u64
758
+ __future_select_right_ready_%out_poll = eq __future_select_right_tag_%out_poll, Poll_READY
759
+ br __future_select_right_ready_%out_poll -> L_FUTURE_SELECT2_RIGHT_%out_poll, L_FUTURE_SELECT2_PENDING_%out_poll
760
+ L_FUTURE_SELECT2_RIGHT_%out_poll:
761
+ __future_select_right_value_%out_poll = load __future_select_right_%out_poll+Poll_value as u64
762
+ EXPAND POLL_READY %out_poll, __future_select_right_value_%out_poll
763
+ %out_side = add FutureSelect_RIGHT, 0
764
+ !__future_select_right_value_%out_poll
765
+ jmp L_FUTURE_SELECT2_DONE_RIGHT_%out_poll
766
+ L_FUTURE_SELECT2_PENDING_%out_poll:
767
+ EXPAND POLL_PENDING %out_poll
768
+ %out_side = add FutureSelect_NONE, 0
769
+ L_FUTURE_SELECT2_DONE_RIGHT_%out_poll:
770
+ !__future_select_right_ready_%out_poll
771
+ !__future_select_right_tag_%out_poll
772
+ !__future_select_right_%out_poll
773
+ L_FUTURE_SELECT2_DONE_LEFT_%out_poll:
774
+ !__future_select_left_ready_%out_poll
775
+ !__future_select_left_tag_%out_poll
776
+ !__future_select_left_%out_poll
777
+ [END_MACRO]