@salang/sa 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (282) hide show
  1. package/bin/sa.js +13 -1
  2. package/package.json +8 -7
  3. package/sa_std/alloc/layout.sal +12 -0
  4. package/sa_std/alloc/prelude.sa +1 -0
  5. package/sa_std/alloc/prelude.sal +1 -0
  6. package/sa_std/alloc/string.sa +3 -0
  7. package/sa_std/alloc/vec.sa +684 -0
  8. package/sa_std/alloc/vec.sal +4 -0
  9. package/sa_std/any.sa +130 -0
  10. package/sa_std/any.sal +23 -0
  11. package/sa_std/array.sa +1876 -0
  12. package/sa_std/ascii.sa +2 -0
  13. package/sa_std/ascii.sal +1 -0
  14. package/sa_std/async.sla +116 -0
  15. package/sa_std/binary_heap.sa +3003 -0
  16. package/sa_std/binary_heap.sal +7 -0
  17. package/sa_std/borrow.sa +171 -0
  18. package/sa_std/borrow.sal +13 -0
  19. package/sa_std/btree_map.sa +2210 -0
  20. package/sa_std/btree_map.sal +11 -0
  21. package/sa_std/btree_set.sa +1072 -0
  22. package/sa_std/btree_set.sal +6 -0
  23. package/sa_std/char.sa +1309 -0
  24. package/sa_std/char.sal +50 -0
  25. package/sa_std/cmp.sa +554 -0
  26. package/sa_std/cmp.sal +14 -0
  27. package/sa_std/collections/binary_heap.sa +1 -0
  28. package/sa_std/collections/btree_map.sa +1 -0
  29. package/sa_std/collections/btree_set.sa +1 -0
  30. package/sa_std/collections/hashmap.sa +1 -0
  31. package/sa_std/collections/hashset.sa +1 -0
  32. package/sa_std/collections/linked_list.sa +1120 -0
  33. package/sa_std/collections/linked_list.sal +10 -0
  34. package/sa_std/collections/prelude.sa +7 -0
  35. package/sa_std/collections/prelude.sal +1 -0
  36. package/sa_std/collections/vec_deque.sa +1 -0
  37. package/sa_std/collections.sal +13 -0
  38. package/sa_std/convert.sa +1115 -0
  39. package/sa_std/convert.sal +24 -0
  40. package/sa_std/core/arc.sa +233 -0
  41. package/sa_std/core/arc.sal +4 -0
  42. package/sa_std/core/ascii.sa +784 -0
  43. package/sa_std/core/ascii.sal +34 -0
  44. package/sa_std/core/bit.sa +41 -0
  45. package/sa_std/core/box.sa +1 -0
  46. package/sa_std/core/box.sal +2 -0
  47. package/sa_std/core/cell.sa +108 -0
  48. package/sa_std/core/cell.sal +5 -0
  49. package/sa_std/core/cleanup.sa +26 -0
  50. package/sa_std/core/control.sa +20 -0
  51. package/sa_std/core/derive.sa +60 -0
  52. package/sa_std/core/derive.sal +1 -0
  53. package/sa_std/core/dispatch.sa +7 -0
  54. package/sa_std/core/dispatch.sal +5 -0
  55. package/sa_std/core/future.sa +777 -0
  56. package/sa_std/core/future.sal +73 -0
  57. package/sa_std/core/hash.sa +48 -0
  58. package/sa_std/core/iter.sa +2805 -0
  59. package/sa_std/core/iter.sal +4 -0
  60. package/sa_std/core/loop.sa +60 -0
  61. package/sa_std/core/mem.sa +220 -0
  62. package/sa_std/core/option.sa +825 -0
  63. package/sa_std/core/option.sal +11 -0
  64. package/sa_std/core/panic.sa +23 -0
  65. package/sa_std/core/panic.sal +12 -0
  66. package/sa_std/core/prelude.sa +18 -0
  67. package/sa_std/core/prelude.sal +18 -0
  68. package/sa_std/core/rc.sa +225 -0
  69. package/sa_std/core/rc.sal +4 -0
  70. package/sa_std/core/refcell.sa +283 -0
  71. package/sa_std/core/refcell.sal +13 -0
  72. package/sa_std/core/result.sa +708 -0
  73. package/sa_std/core/result.sal +6 -0
  74. package/sa_std/core/rust_patterns.sal +295 -0
  75. package/sa_std/core/sa_core.sa +84 -0
  76. package/sa_std/core/slice.sa +4021 -0
  77. package/sa_std/core/slice.sal +7 -0
  78. package/sa_std/core/task.sa +112 -0
  79. package/sa_std/core/task.sal +15 -0
  80. package/sa_std/core/trait_object.sa +26 -0
  81. package/sa_std/core/trait_object.sal +4 -0
  82. package/sa_std/core/waker.sa +289 -0
  83. package/sa_std/core/waker.sal +31 -0
  84. package/sa_std/core/weak.sa +2 -0
  85. package/sa_std/core/weak.sal +4 -0
  86. package/sa_std/cow.sa +3 -0
  87. package/sa_std/cow.sal +2 -0
  88. package/sa_std/cstring.sa +3 -0
  89. package/sa_std/cstring.sal +2 -0
  90. package/sa_std/default.sa +99 -0
  91. package/sa_std/duration.sa +3 -0
  92. package/sa_std/duration.sal +2 -0
  93. package/sa_std/encoding/json.sa +259 -0
  94. package/sa_std/encoding/json.sai +54 -0
  95. package/sa_std/encoding/json.sal +35 -0
  96. package/sa_std/encoding/prelude.sa +1 -0
  97. package/sa_std/encoding/prelude.sal +0 -0
  98. package/sa_std/env.sa +390 -0
  99. package/sa_std/env.sai +25 -0
  100. package/sa_std/error.sa +253 -0
  101. package/sa_std/error.sal +44 -0
  102. package/sa_std/ffi/cstring.sa +3 -0
  103. package/sa_std/ffi/cstring.sal +1 -0
  104. package/sa_std/ffi/prelude.sa +2 -0
  105. package/sa_std/ffi/prelude.sal +2 -0
  106. package/sa_std/ffi.sa +635 -0
  107. package/sa_std/ffi.sal +51 -0
  108. package/sa_std/fmt.sa +2 -0
  109. package/sa_std/fmt.sai +18 -0
  110. package/sa_std/fmt.sal +35 -0
  111. package/sa_std/fs.sa +1023 -0
  112. package/sa_std/fs.sai +127 -0
  113. package/sa_std/fs.sal +51 -0
  114. package/sa_std/future.sa +2 -0
  115. package/sa_std/future.sal +1 -0
  116. package/sa_std/hash.sa +1486 -0
  117. package/sa_std/hash.sal +13 -0
  118. package/sa_std/hashmap.sa +1962 -0
  119. package/sa_std/hashmap.sal +20 -0
  120. package/sa_std/hashset.sa +1004 -0
  121. package/sa_std/hashset.sal +18 -0
  122. package/sa_std/http2.sa +78 -0
  123. package/sa_std/http2.sai +26 -0
  124. package/sa_std/http2.sal +36 -0
  125. package/sa_std/instant.sa +3 -0
  126. package/sa_std/instant.sal +2 -0
  127. package/sa_std/io/buf_reader.sa +43 -0
  128. package/sa_std/io/buf_writer.sa +35 -0
  129. package/sa_std/io/bufio.sa +4 -0
  130. package/sa_std/io/bufio.sal +4 -0
  131. package/sa_std/io/prelude.sa +1 -0
  132. package/sa_std/io/prelude.sal +1 -0
  133. package/sa_std/io/print.sa +2 -0
  134. package/sa_std/io/print.sai +3 -0
  135. package/sa_std/io.sa +925 -0
  136. package/sa_std/io.sai +25 -0
  137. package/sa_std/io.sal +84 -0
  138. package/sa_std/iter.sa +2 -0
  139. package/sa_std/iter.sal +1 -0
  140. package/sa_std/join_handle.sa +3 -0
  141. package/sa_std/join_handle.sal +2 -0
  142. package/sa_std/libsa_async.sa +80 -0
  143. package/sa_std/m_async.sa +137 -0
  144. package/sa_std/m_async.sal +30 -0
  145. package/sa_std/m_async.sla +2 -0
  146. package/sa_std/manually_drop.sa +3 -0
  147. package/sa_std/manually_drop.sal +2 -0
  148. package/sa_std/marker/phantom_data.sa +3 -0
  149. package/sa_std/marker/phantom_data.sal +1 -0
  150. package/sa_std/marker/prelude.sa +4 -0
  151. package/sa_std/marker/prelude.sal +4 -0
  152. package/sa_std/marker.sa +220 -0
  153. package/sa_std/marker.sal +15 -0
  154. package/sa_std/math.sa +84 -0
  155. package/sa_std/math.sai +10 -0
  156. package/sa_std/mem/manually_drop.sa +3 -0
  157. package/sa_std/mem/manually_drop.sal +1 -0
  158. package/sa_std/mem/prelude.sa +2 -0
  159. package/sa_std/mem/prelude.sal +2 -0
  160. package/sa_std/mem.sa +564 -0
  161. package/sa_std/mem.sal +40 -0
  162. package/sa_std/modstate.sai +19 -0
  163. package/sa_std/net.sa +4227 -0
  164. package/sa_std/net.sai +239 -0
  165. package/sa_std/net.sal +159 -0
  166. package/sa_std/netx.sa +85 -0
  167. package/sa_std/netx.sai +11 -0
  168. package/sa_std/netx.sal +39 -0
  169. package/sa_std/nonzero.sa +3 -0
  170. package/sa_std/nonzero.sal +2 -0
  171. package/sa_std/num/nonzero.sa +3 -0
  172. package/sa_std/num/nonzero.sal +1 -0
  173. package/sa_std/num/prelude.sa +3 -0
  174. package/sa_std/num/prelude.sal +3 -0
  175. package/sa_std/num.sa +17302 -0
  176. package/sa_std/num.sai +11 -0
  177. package/sa_std/num.sal +341 -0
  178. package/sa_std/ops.sa +1884 -0
  179. package/sa_std/ops.sal +68 -0
  180. package/sa_std/option.sa +2 -0
  181. package/sa_std/option.sal +1 -0
  182. package/sa_std/os/fd.sa +96 -0
  183. package/sa_std/os/fd.sai +7 -0
  184. package/sa_std/os/fd.sal +11 -0
  185. package/sa_std/os/prelude.sa +2 -0
  186. package/sa_std/os/prelude.sal +1 -0
  187. package/sa_std/os/unix_ffi.sa +271 -0
  188. package/sa_std/panic.sa +1 -0
  189. package/sa_std/panic.sal +1 -0
  190. package/sa_std/path.sa +3170 -0
  191. package/sa_std/path.sal +12 -0
  192. package/sa_std/phantom_data.sa +3 -0
  193. package/sa_std/phantom_data.sal +2 -0
  194. package/sa_std/pin.sa +79 -0
  195. package/sa_std/pin.sal +5 -0
  196. package/sa_std/plugin_async.sa +90 -0
  197. package/sa_std/plugin_async.sal +29 -0
  198. package/sa_std/plugin_async.sla +4 -0
  199. package/sa_std/plugin_http_async.sa +46 -0
  200. package/sa_std/plugin_http_server.sa +61 -0
  201. package/sa_std/plugin_http_server.sla +2 -0
  202. package/sa_std/plugin_sqlite.sa +106 -0
  203. package/sa_std/plugin_sqlite.sla +2 -0
  204. package/sa_std/prelude.sa +60 -0
  205. package/sa_std/prelude.sal +55 -0
  206. package/sa_std/process.sa +916 -0
  207. package/sa_std/process.sai +57 -0
  208. package/sa_std/process.sal +27 -0
  209. package/sa_std/ptr.sa +503 -0
  210. package/sa_std/ptr.sal +2 -0
  211. package/sa_std/result.sa +2 -0
  212. package/sa_std/result.sal +1 -0
  213. package/sa_std/rust_core.sa +51 -0
  214. package/sa_std/rust_core.sal +26 -0
  215. package/sa_std/sa.mod +7 -0
  216. package/sa_std/sort.sa +156 -0
  217. package/sa_std/str.sla +13 -0
  218. package/sa_std/string.sa +12240 -0
  219. package/sa_std/string.sai +25 -0
  220. package/sa_std/string.sal +17 -0
  221. package/sa_std/string_format.sa +269 -0
  222. package/sa_std/sync/atomic.sa +1500 -0
  223. package/sa_std/sync/atomic.sal +45 -0
  224. package/sa_std/sync/barrier.sa +105 -0
  225. package/sa_std/sync/barrier.sal +7 -0
  226. package/sa_std/sync/condvar.sa +240 -0
  227. package/sa_std/sync/condvar.sal +4 -0
  228. package/sa_std/sync/mpsc.sa +758 -0
  229. package/sa_std/sync/mpsc.sal +42 -0
  230. package/sa_std/sync/mpsc_list.sa +255 -0
  231. package/sa_std/sync/mpsc_list.sal +3 -0
  232. package/sa_std/sync/mutex.sa +182 -0
  233. package/sa_std/sync/mutex.sal +7 -0
  234. package/sa_std/sync/once.sa +371 -0
  235. package/sa_std/sync/once.sal +31 -0
  236. package/sa_std/sync/poison.sa +36 -0
  237. package/sa_std/sync/poison.sal +11 -0
  238. package/sa_std/sync/prelude.sa +8 -0
  239. package/sa_std/sync/prelude.sal +7 -0
  240. package/sa_std/sync/rwlock.sa +369 -0
  241. package/sa_std/sync/rwlock.sal +13 -0
  242. package/sa_std/task.sa +2 -0
  243. package/sa_std/task.sal +1 -0
  244. package/sa_std/term.sa +2 -0
  245. package/sa_std/term.sai +10 -0
  246. package/sa_std/term.sal +33 -0
  247. package/sa_std/testing/assert.sai +4 -0
  248. package/sa_std/testing/mock_io.sa +174 -0
  249. package/sa_std/testing/mock_io.sal +5 -0
  250. package/sa_std/testing/prelude.sa +2 -0
  251. package/sa_std/testing/prelude.sal +1 -0
  252. package/sa_std/text/prelude.sa +1 -0
  253. package/sa_std/text/prelude.sal +1 -0
  254. package/sa_std/text/regex.sa +2 -0
  255. package/sa_std/text/regex.sai +9 -0
  256. package/sa_std/text/regex.sal +33 -0
  257. package/sa_std/thread/join_handle.sa +3 -0
  258. package/sa_std/thread/join_handle.sal +1 -0
  259. package/sa_std/thread/prelude.sa +4 -0
  260. package/sa_std/thread/prelude.sal +3 -0
  261. package/sa_std/thread.sa +160 -0
  262. package/sa_std/thread.sai +11 -0
  263. package/sa_std/thread.sal +4 -0
  264. package/sa_std/thread_local.sa +45 -0
  265. package/sa_std/thread_local.sai +9 -0
  266. package/sa_std/time/duration.sa +3 -0
  267. package/sa_std/time/duration.sal +1 -0
  268. package/sa_std/time/instant.sa +3 -0
  269. package/sa_std/time/instant.sal +1 -0
  270. package/sa_std/time/prelude.sa +4 -0
  271. package/sa_std/time/prelude.sal +4 -0
  272. package/sa_std/time.sa +850 -0
  273. package/sa_std/time.sai +37 -0
  274. package/sa_std/time.sal +35 -0
  275. package/sa_std/time.sla +67 -0
  276. package/sa_std/tls_client.sai +39 -0
  277. package/sa_std/vec.sa +5754 -0
  278. package/sa_std/vec.sal +1 -0
  279. package/sa_std/vec_deque.sa +4925 -0
  280. package/sa_std/vec_deque.sal +8 -0
  281. package/sa_std/vec_runtime_macros.sa +11 -0
  282. package/sa_std/ws_client.sai +57 -0
@@ -0,0 +1,4 @@
1
+ #def Iter_SIZE = 24
2
+ #def Iter_ptr = +0
3
+ #def Iter_len = +8
4
+ #def Iter_index = +16
@@ -0,0 +1,60 @@
1
+ @import "../math.sa"
2
+ @import "slice.sal"
3
+ @import "slice.sa"
4
+ @import "iter.sal"
5
+ @import "iter.sa"
6
+
7
+ [MACRO] WHILE %cond, %body_label, %done_label
8
+ br %cond -> %body_label, %done_label
9
+ [END_MACRO]
10
+
11
+ [MACRO] WHILE_COND %cond, %body_label, %done_label
12
+ EXPAND WHILE %cond, %body_label, %done_label
13
+ [END_MACRO]
14
+
15
+ [MACRO] FOR_RANGE %out_index, %start_value, %end_value, %body_label, %done_label
16
+ %out_index = add %start_value, 0
17
+ __for_range_take_%out_index = ult %out_index, %end_value
18
+ br __for_range_take_%out_index -> %body_label, %done_label
19
+ [END_MACRO]
20
+
21
+ [MACRO] INDEX_LOOP %out_index, %start_value, %end_value, %body_label, %done_label
22
+ EXPAND FOR_RANGE %out_index, %start_value, %end_value, %body_label, %done_label
23
+ [END_MACRO]
24
+
25
+ [MACRO] ARRAY_FOR_EACH %out_index, %slice_reg, %body_label, %done_label
26
+ __array_len_%out_index = load %slice_reg+Slice_len as u64
27
+ %out_index = add 0, 0
28
+ __array_has_item_%out_index = ult %out_index, __array_len_%out_index
29
+ br __array_has_item_%out_index -> %body_label, %done_label
30
+ [END_MACRO]
31
+
32
+ [MACRO] ARRAY_SCAN_MIN %out_value, %current_value, %next_value
33
+ __array_take_left_%out_value = ult %current_value, %next_value
34
+ br __array_take_left_%out_value -> L_ARRAY_SCAN_MIN_LEFT_%out_value, L_ARRAY_SCAN_MIN_RIGHT_%out_value
35
+ L_ARRAY_SCAN_MIN_LEFT_%out_value:
36
+ %out_value = add %current_value, 0
37
+ !__array_take_left_%out_value
38
+ jmp L_ARRAY_SCAN_MIN_END_%out_value
39
+ L_ARRAY_SCAN_MIN_RIGHT_%out_value:
40
+ %out_value = add %next_value, 0
41
+ !__array_take_left_%out_value
42
+ L_ARRAY_SCAN_MIN_END_%out_value:
43
+ [END_MACRO]
44
+
45
+ [MACRO] ARRAY_SCAN_MAX %out_value, %current_value, %next_value
46
+ __array_take_left_%out_value = ugt %current_value, %next_value
47
+ br __array_take_left_%out_value -> L_ARRAY_SCAN_MAX_LEFT_%out_value, L_ARRAY_SCAN_MAX_RIGHT_%out_value
48
+ L_ARRAY_SCAN_MAX_LEFT_%out_value:
49
+ %out_value = add %current_value, 0
50
+ !__array_take_left_%out_value
51
+ jmp L_ARRAY_SCAN_MAX_END_%out_value
52
+ L_ARRAY_SCAN_MAX_RIGHT_%out_value:
53
+ %out_value = add %next_value, 0
54
+ !__array_take_left_%out_value
55
+ L_ARRAY_SCAN_MAX_END_%out_value:
56
+ [END_MACRO]
57
+
58
+ [MACRO] SLICE_GET_U64_AT %out_value, %slice_reg, %index
59
+ EXPAND SLICE_GET_U64 %out_value, %slice_reg, %index
60
+ [END_MACRO]
@@ -0,0 +1,220 @@
1
+ @export sa_mem_copy(&dst: ptr, &src: ptr, count: u64) -> void:
2
+ L_ENTRY:
3
+ nonzero = ne count, 0
4
+ br nonzero -> L_CHECK_DST, L_COPY_INIT
5
+ L_CHECK_DST:
6
+ dst_null = eq dst, 0
7
+ br dst_null -> L_NULL_DST, L_CHECK_SRC
8
+ L_NULL_DST:
9
+ panic(1701)
10
+ L_CHECK_SRC:
11
+ src_null = eq src, 0
12
+ br src_null -> L_NULL_SRC, L_COPY_INIT_FROM_CHECK
13
+ L_NULL_SRC:
14
+ panic(1702)
15
+ L_COPY_INIT_FROM_CHECK:
16
+ !src_null
17
+ !dst_null
18
+ jmp L_COPY_INIT
19
+ L_COPY_INIT:
20
+ zero_slot = stack_alloc 8
21
+ one_slot = stack_alloc 8
22
+ offset_slot = stack_alloc 8
23
+ remaining_slot = stack_alloc 8
24
+ store zero_slot+0, 0 as i64
25
+ zero = load zero_slot+0 as i64
26
+ store one_slot+0, 1 as i64
27
+ one = load one_slot+0 as i64
28
+ store offset_slot+0, 0 as u64
29
+ store remaining_slot+0, count as u64
30
+ jmp L_LOOP
31
+ L_LOOP:
32
+ offset = load offset_slot+0 as u64
33
+ remaining = load remaining_slot+0 as u64
34
+ done = eq remaining, zero
35
+ br done -> L_END, L_BODY
36
+ L_BODY:
37
+ src_ip = ptr_add src, offset
38
+ dst_ip = ptr_add dst, offset
39
+ byte = load src_ip+0 as u8
40
+ store dst_ip+0, byte as u8
41
+ next_offset = add offset, one
42
+ next_remaining = sub remaining, one
43
+ !src_ip
44
+ !dst_ip
45
+ !byte
46
+ !offset
47
+ !remaining
48
+ !done
49
+ store offset_slot+0, next_offset as u64
50
+ store remaining_slot+0, next_remaining as u64
51
+ !next_offset
52
+ !next_remaining
53
+ jmp L_LOOP
54
+ L_END:
55
+ !done
56
+ !offset
57
+ !remaining
58
+ !one
59
+ !zero
60
+ !nonzero
61
+ !count
62
+ !src
63
+ !dst
64
+ return
65
+
66
+ @export sa_mem_set(&dst: ptr, val: u8, count: u64) -> void:
67
+ L_ENTRY:
68
+ nonzero = ne count, 0
69
+ br nonzero -> L_CHECK_DST, L_SET_INIT
70
+ L_CHECK_DST:
71
+ dst_null = eq dst, 0
72
+ br dst_null -> L_NULL_DST, L_SET_INIT_FROM_CHECK
73
+ L_NULL_DST:
74
+ panic(1703)
75
+ L_SET_INIT_FROM_CHECK:
76
+ !dst_null
77
+ jmp L_SET_INIT
78
+ L_SET_INIT:
79
+ zero_slot = stack_alloc 8
80
+ one_slot = stack_alloc 8
81
+ offset_slot = stack_alloc 8
82
+ remaining_slot = stack_alloc 8
83
+ store zero_slot+0, 0 as i64
84
+ zero = load zero_slot+0 as i64
85
+ store one_slot+0, 1 as i64
86
+ one = load one_slot+0 as i64
87
+ store offset_slot+0, 0 as u64
88
+ store remaining_slot+0, count as u64
89
+ jmp L_LOOP
90
+ L_LOOP:
91
+ offset = load offset_slot+0 as u64
92
+ remaining = load remaining_slot+0 as u64
93
+ done = eq remaining, zero
94
+ br done -> L_END, L_BODY
95
+ L_BODY:
96
+ dst_ip = ptr_add dst, offset
97
+ store dst_ip+0, val as u8
98
+ next_offset = add offset, one
99
+ next_remaining = sub remaining, one
100
+ !dst_ip
101
+ !offset
102
+ !remaining
103
+ !done
104
+ store offset_slot+0, next_offset as u64
105
+ store remaining_slot+0, next_remaining as u64
106
+ !next_offset
107
+ !next_remaining
108
+ jmp L_LOOP
109
+ L_END:
110
+ !done
111
+ !offset
112
+ !remaining
113
+ !one
114
+ !zero
115
+ !nonzero
116
+ !count
117
+ !val
118
+ !dst
119
+ return
120
+
121
+ [MACRO] BOX_NEW %out_box, %value
122
+ %out_box = alloc Box_SIZE
123
+ store %out_box+Box_value, %value as u64
124
+ [END_MACRO]
125
+
126
+ [MACRO] BOX_DEFAULT_U64 %out_box
127
+ EXPAND BOX_NEW %out_box, 0
128
+ [END_MACRO]
129
+
130
+ // Rust method-name alias over BOX_DEFAULT_U64.
131
+ [MACRO] BOX_DEFAULT %out_box
132
+ EXPAND BOX_DEFAULT_U64 %out_box
133
+ [END_MACRO]
134
+
135
+ [MACRO] BOX_GET_U64 %out_value, %box_reg
136
+ %out_value = load %box_reg+Box_value as u64
137
+ [END_MACRO]
138
+
139
+ // Rust method-name alias over BOX_GET_U64.
140
+ [MACRO] BOX_GET %out_value, %box_reg
141
+ EXPAND BOX_GET_U64 %out_value, %box_reg
142
+ [END_MACRO]
143
+
144
+ [MACRO] BOX_SET_U64 %box_reg, %value
145
+ store %box_reg+Box_value, %value as u64
146
+ [END_MACRO]
147
+
148
+ // Rust method-name alias over BOX_SET_U64.
149
+ [MACRO] BOX_SET %box_reg, %value
150
+ EXPAND BOX_SET_U64 %box_reg, %value
151
+ [END_MACRO]
152
+
153
+ [MACRO] BOX_AS_PTR %out_ptr, %box_reg
154
+ %out_ptr = ptr_add %box_reg, Box_value
155
+ [END_MACRO]
156
+
157
+ [MACRO] BOX_AS_MUT_PTR %out_ptr, %box_reg
158
+ %out_ptr = ptr_add %box_reg, Box_value
159
+ [END_MACRO]
160
+
161
+ [MACRO] BOX_PTR_EQ %out_bool, %left_box, %right_box
162
+ %out_bool = eq %left_box, %right_box
163
+ [END_MACRO]
164
+
165
+ [MACRO] BOX_REPLACE_U64 %out_old, %box_reg, %new_value
166
+ %out_old = load %box_reg+Box_value as u64
167
+ store %box_reg+Box_value, %new_value as u64
168
+ [END_MACRO]
169
+
170
+ // Rust method-name alias over BOX_REPLACE_U64.
171
+ [MACRO] BOX_REPLACE %out_old, %box_reg, %new_value
172
+ EXPAND BOX_REPLACE_U64 %out_old, %box_reg, %new_value
173
+ [END_MACRO]
174
+
175
+ [MACRO] BOX_TAKE_U64 %out_old, %box_reg
176
+ %out_old = load %box_reg+Box_value as u64
177
+ store %box_reg+Box_value, 0 as u64
178
+ [END_MACRO]
179
+
180
+ // Rust method-name alias over BOX_TAKE_U64.
181
+ [MACRO] BOX_TAKE %out_old, %box_reg
182
+ EXPAND BOX_TAKE_U64 %out_old, %box_reg
183
+ [END_MACRO]
184
+
185
+ [MACRO] BOX_CLONE_U64 %out_box, %box_reg
186
+ __box_clone_value_%out_box = load %box_reg+Box_value as u64
187
+ EXPAND BOX_NEW %out_box, __box_clone_value_%out_box
188
+ !__box_clone_value_%out_box
189
+ [END_MACRO]
190
+
191
+ // Rust method-name alias over BOX_CLONE_U64.
192
+ [MACRO] BOX_CLONE %out_box, %box_reg
193
+ EXPAND BOX_CLONE_U64 %out_box, %box_reg
194
+ [END_MACRO]
195
+
196
+ [MACRO] BOX_INTO_INNER_U64 %out_value, %box_reg
197
+ %out_value = load %box_reg+Box_value as u64
198
+ !%box_reg
199
+ [END_MACRO]
200
+
201
+ // Rust method-name alias over BOX_INTO_INNER_U64.
202
+ [MACRO] BOX_INTO_INNER %out_value, %box_reg
203
+ EXPAND BOX_INTO_INNER_U64 %out_value, %box_reg
204
+ [END_MACRO]
205
+
206
+ [MACRO] BOX_INTO_RAW %out_ptr, %box_reg
207
+ %out_ptr = ptr_add %box_reg, Box_value
208
+ [END_MACRO]
209
+
210
+ [MACRO] BOX_FROM_RAW %out_box, %raw_ptr
211
+ %out_box = ptr_add %raw_ptr, 0
212
+ [END_MACRO]
213
+
214
+ [MACRO] BOX_LEAK %out_ptr, %box_reg
215
+ %out_ptr = ptr_add %box_reg, Box_value
216
+ [END_MACRO]
217
+
218
+ [MACRO] BOX_FREE %box_reg
219
+ !%box_reg
220
+ [END_MACRO]