@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,24 @@
1
+ #def CONVERT_U8_MAX = 255
2
+ #def CONVERT_U16_MAX = 65535
3
+ #def CONVERT_U32_MAX = 4294967295
4
+ #def CONVERT_I8_MIN = -128
5
+ #def CONVERT_I8_MAX = 127
6
+ #def CONVERT_I16_MIN = -32768
7
+ #def CONVERT_I16_MAX = 32767
8
+ #def CONVERT_I32_MIN = -2147483648
9
+ #def CONVERT_I32_MAX = 2147483647
10
+ #def CONVERT_I64_MAX = 9223372036854775807
11
+
12
+ #def Infallible_SIZE = 0
13
+ #def Infallible_ALIGN = 1
14
+
15
+ #def CONVERT_U64_MIN = 0
16
+ #def CONVERT_U64_MAX = -1
17
+ #def CONVERT_I64_MIN = -9223372036854775807 - 1
18
+ #def CONVERT_USIZE_MIN = 0
19
+ #def CONVERT_USIZE_MAX = -1
20
+ #def CONVERT_ISIZE_MIN = -9223372036854775807 - 1
21
+ #def CONVERT_ISIZE_MAX = 9223372036854775807
22
+
23
+ #def CONVERT_BOOL_MIN = 0
24
+ #def CONVERT_BOOL_MAX = 1
@@ -0,0 +1,233 @@
1
+ @import "../num.sal"
2
+
3
+ [MACRO] ARC_NEW %out_arc, %value
4
+ %out_arc = alloc ArcBox_SIZE
5
+ store %out_arc+ArcBox_strong, 1 as u64
6
+ store %out_arc+ArcBox_weak, 1 as u64
7
+ store %out_arc+ArcBox_data, %value as u64
8
+ [END_MACRO]
9
+
10
+ // Rust-style Default for concrete Arc<u64>: Arc::new(0).
11
+ [MACRO] ARC_DEFAULT_U64 %out_arc
12
+ EXPAND ARC_NEW %out_arc, 0
13
+ [END_MACRO]
14
+
15
+ // Rust method-name alias over ARC_DEFAULT_U64.
16
+ [MACRO] ARC_DEFAULT %out_arc
17
+ EXPAND ARC_DEFAULT_U64 %out_arc
18
+ [END_MACRO]
19
+
20
+ [MACRO] ARC_CLONE %arc_reg
21
+ __arc_old_strong_%arc_reg = atomic_rmw_add %arc_reg+ArcBox_strong, 1 as u64 acq_rel
22
+ __arc_strong_overflow_%arc_reg = eq __arc_old_strong_%arc_reg, NUM_U64_MAX
23
+ br __arc_strong_overflow_%arc_reg -> L_ARC_CLONE_OVERFLOW_%arc_reg, L_ARC_CLONE_OK_%arc_reg
24
+ L_ARC_CLONE_OVERFLOW_%arc_reg:
25
+ panic(1501)
26
+ L_ARC_CLONE_OK_%arc_reg:
27
+ !__arc_strong_overflow_%arc_reg
28
+ !__arc_old_strong_%arc_reg
29
+ [END_MACRO]
30
+
31
+ [MACRO] ARC_CLONE_OUT %out_arc, %arc_reg
32
+ %out_arc = add %arc_reg, 0
33
+ EXPAND ARC_CLONE %out_arc
34
+ [END_MACRO]
35
+
36
+ [MACRO] ARC_GET %out_value, %arc_reg
37
+ %out_value = load %arc_reg+ArcBox_data as u64
38
+ [END_MACRO]
39
+
40
+ [MACRO] ARC_AS_PTR %out_ptr, %arc_reg
41
+ %out_ptr = ptr_add %arc_reg, ArcBox_data
42
+ [END_MACRO]
43
+
44
+ [MACRO] ARC_INTO_RAW %out_ptr, %arc_reg
45
+ %out_ptr = ptr_add %arc_reg, ArcBox_data
46
+ [END_MACRO]
47
+
48
+ [MACRO] ARC_FROM_RAW %out_arc, %raw_ptr
49
+ %out_arc = sub %raw_ptr, ArcBox_data
50
+ [END_MACRO]
51
+
52
+ [MACRO] ARC_INCREMENT_STRONG_COUNT %raw_ptr
53
+ __arc_inc_box_%raw_ptr = sub %raw_ptr, ArcBox_data
54
+ __arc_inc_old_%raw_ptr = atomic_rmw_add __arc_inc_box_%raw_ptr+ArcBox_strong, 1 as u64 acq_rel
55
+ __arc_inc_overflow_%raw_ptr = eq __arc_inc_old_%raw_ptr, NUM_U64_MAX
56
+ br __arc_inc_overflow_%raw_ptr -> L_ARC_INC_STRONG_OVERFLOW_%raw_ptr, L_ARC_INC_STRONG_OK_%raw_ptr
57
+ L_ARC_INC_STRONG_OVERFLOW_%raw_ptr:
58
+ panic(1502)
59
+ L_ARC_INC_STRONG_OK_%raw_ptr:
60
+ !__arc_inc_overflow_%raw_ptr
61
+ !__arc_inc_old_%raw_ptr
62
+ !__arc_inc_box_%raw_ptr
63
+ [END_MACRO]
64
+
65
+ [MACRO] ARC_DECREMENT_STRONG_COUNT %raw_ptr
66
+ __arc_dec_box_%raw_ptr = sub %raw_ptr, ArcBox_data
67
+ __arc_dec_old_%raw_ptr = atomic_rmw_sub __arc_dec_box_%raw_ptr+ArcBox_strong, 1 as u64 acq_rel
68
+ !__arc_dec_old_%raw_ptr
69
+ !__arc_dec_box_%raw_ptr
70
+ [END_MACRO]
71
+
72
+ [MACRO] ARC_STRONG_COUNT %out_count, %arc_reg
73
+ %out_count = atomic_load %arc_reg+ArcBox_strong as u64 acquire
74
+ [END_MACRO]
75
+
76
+ [MACRO] ARC_WEAK_COUNT %out_count, %arc_reg
77
+ __arc_weak_total_%out_count = atomic_load %arc_reg+ArcBox_weak as u64 acquire
78
+ %out_count = sub __arc_weak_total_%out_count, 1
79
+ !__arc_weak_total_%out_count
80
+ [END_MACRO]
81
+
82
+ [MACRO] ARC_PTR_EQ %out_bool, %left_arc, %right_arc
83
+ %out_bool = eq %left_arc, %right_arc
84
+ [END_MACRO]
85
+
86
+ [MACRO] ARC_GET_MUT %out_ok, %out_ptr, %arc_reg
87
+ __arc_mut_strong_%out_ok = atomic_load %arc_reg+ArcBox_strong as u64 acquire
88
+ __arc_mut_weak_%out_ok = atomic_load %arc_reg+ArcBox_weak as u64 acquire
89
+ __arc_mut_strong_one_%out_ok = eq __arc_mut_strong_%out_ok, 1
90
+ __arc_mut_weak_one_%out_ok = eq __arc_mut_weak_%out_ok, 1
91
+ __arc_mut_unique_%out_ok = and __arc_mut_strong_one_%out_ok, __arc_mut_weak_one_%out_ok
92
+ br __arc_mut_unique_%out_ok -> L_ARC_GET_MUT_OK_%out_ok, L_ARC_GET_MUT_FAIL_%out_ok
93
+ L_ARC_GET_MUT_OK_%out_ok:
94
+ %out_ptr = ptr_add %arc_reg, ArcBox_data
95
+ %out_ok = add 0, 1
96
+ jmp L_ARC_GET_MUT_DONE_%out_ok
97
+ L_ARC_GET_MUT_FAIL_%out_ok:
98
+ %out_ptr = 0 as ptr
99
+ %out_ok = add 0, 0
100
+ L_ARC_GET_MUT_DONE_%out_ok:
101
+ !__arc_mut_unique_%out_ok
102
+ !__arc_mut_weak_one_%out_ok
103
+ !__arc_mut_strong_one_%out_ok
104
+ !__arc_mut_weak_%out_ok
105
+ !__arc_mut_strong_%out_ok
106
+ [END_MACRO]
107
+
108
+ [MACRO] ARC_TRY_UNWRAP %out_ok, %out_value, %arc_reg
109
+ __arc_unwrap_strong_%out_ok = atomic_load %arc_reg+ArcBox_strong as u64 acquire
110
+ __arc_unwrap_unique_%out_ok = eq __arc_unwrap_strong_%out_ok, 1
111
+ br __arc_unwrap_unique_%out_ok -> L_ARC_TRY_UNWRAP_OK_%out_ok, L_ARC_TRY_UNWRAP_FAIL_%out_ok
112
+ L_ARC_TRY_UNWRAP_OK_%out_ok:
113
+ %out_value = load %arc_reg+ArcBox_data as u64
114
+ %out_ok = add 0, 1
115
+ jmp L_ARC_TRY_UNWRAP_DONE_%out_ok
116
+ L_ARC_TRY_UNWRAP_FAIL_%out_ok:
117
+ %out_value = add 0, 0
118
+ %out_ok = add 0, 0
119
+ L_ARC_TRY_UNWRAP_DONE_%out_ok:
120
+ !__arc_unwrap_unique_%out_ok
121
+ !__arc_unwrap_strong_%out_ok
122
+ [END_MACRO]
123
+
124
+ [MACRO] ARC_MAKE_MUT_U64 %out_ptr, %arc_reg
125
+ %out_ptr = ptr_add %arc_reg, ArcBox_data
126
+ [END_MACRO]
127
+
128
+ // Rust method-name alias over ARC_MAKE_MUT_U64.
129
+ [MACRO] ARC_MAKE_MUT %out_ptr, %arc_reg
130
+ EXPAND ARC_MAKE_MUT_U64 %out_ptr, %arc_reg
131
+ [END_MACRO]
132
+
133
+ [MACRO] ARC_UNWRAP_OR_CLONE_U64 %out_value, %arc_reg
134
+ %out_value = load %arc_reg+ArcBox_data as u64
135
+ [END_MACRO]
136
+
137
+ // Rust method-name alias over ARC_UNWRAP_OR_CLONE_U64.
138
+ [MACRO] ARC_UNWRAP_OR_CLONE %out_value, %arc_reg
139
+ EXPAND ARC_UNWRAP_OR_CLONE_U64 %out_value, %arc_reg
140
+ [END_MACRO]
141
+
142
+ [MACRO] ARC_DROP %arc_reg, %cleanup_label
143
+ __arc_strong_%arc_reg = atomic_rmw_sub %arc_reg+ArcBox_strong, 1 as u64 acq_rel
144
+ __arc_is_last_%arc_reg = eq __arc_strong_%arc_reg, 1
145
+ br __arc_is_last_%arc_reg -> %cleanup_label, L_ARC_DROP_DONE_%arc_reg
146
+ L_ARC_DROP_DONE_%arc_reg:
147
+ !__arc_is_last_%arc_reg
148
+ !__arc_strong_%arc_reg
149
+ [END_MACRO]
150
+
151
+ [MACRO] ARC_DOWNGRADE %out_weak, %arc_reg
152
+ __arc_weak_%out_weak = atomic_rmw_add %arc_reg+ArcBox_weak, 1 as u64 acq_rel
153
+ __arc_weak_overflow_%out_weak = eq __arc_weak_%out_weak, NUM_U64_MAX
154
+ br __arc_weak_overflow_%out_weak -> L_ARC_DOWNGRADE_OVERFLOW_%out_weak, L_ARC_DOWNGRADE_OK_%out_weak
155
+ L_ARC_DOWNGRADE_OVERFLOW_%out_weak:
156
+ panic(1503)
157
+ L_ARC_DOWNGRADE_OK_%out_weak:
158
+ %out_weak = add %arc_reg, 0
159
+ !__arc_weak_overflow_%out_weak
160
+ !__arc_weak_%out_weak
161
+ [END_MACRO]
162
+
163
+ [MACRO] ARC_WEAK_CLONE %weak_reg
164
+ __weak_old_%weak_reg = atomic_rmw_add %weak_reg+ArcBox_weak, 1 as u64 acq_rel
165
+ __weak_overflow_%weak_reg = eq __weak_old_%weak_reg, NUM_U64_MAX
166
+ br __weak_overflow_%weak_reg -> L_ARC_WEAK_CLONE_OVERFLOW_%weak_reg, L_ARC_WEAK_CLONE_OK_%weak_reg
167
+ L_ARC_WEAK_CLONE_OVERFLOW_%weak_reg:
168
+ panic(1504)
169
+ L_ARC_WEAK_CLONE_OK_%weak_reg:
170
+ !__weak_overflow_%weak_reg
171
+ !__weak_old_%weak_reg
172
+ [END_MACRO]
173
+
174
+ [MACRO] ARC_WEAK_NEW %out_weak
175
+ %out_weak = alloc ArcBox_SIZE
176
+ store %out_weak+ArcBox_strong, 0 as u64
177
+ store %out_weak+ArcBox_weak, 1 as u64
178
+ store %out_weak+ArcBox_data, 0 as u64
179
+ [END_MACRO]
180
+
181
+ // Rust-style Default alias for Weak::new().
182
+ [MACRO] ARC_WEAK_DEFAULT %out_weak
183
+ EXPAND ARC_WEAK_NEW %out_weak
184
+ [END_MACRO]
185
+
186
+ [MACRO] ARC_WEAK_STRONG_COUNT %out_count, %weak_reg
187
+ %out_count = atomic_load %weak_reg+ArcBox_strong as u64 acquire
188
+ [END_MACRO]
189
+
190
+ [MACRO] ARC_WEAK_WEAK_COUNT %out_count, %weak_reg
191
+ __arc_weak_total_%out_count = atomic_load %weak_reg+ArcBox_weak as u64 acquire
192
+ %out_count = sub __arc_weak_total_%out_count, 1
193
+ !__arc_weak_total_%out_count
194
+ [END_MACRO]
195
+
196
+ [MACRO] ARC_WEAK_PTR_EQ %out_bool, %left_weak, %right_weak
197
+ %out_bool = eq %left_weak, %right_weak
198
+ [END_MACRO]
199
+
200
+ [MACRO] ARC_WEAK_DROP %weak_reg, %free_label
201
+ __weak_next_count_%weak_reg = atomic_rmw_sub %weak_reg+ArcBox_weak, 1 as u64 acq_rel
202
+ __weak_is_last_%weak_reg = eq __weak_next_count_%weak_reg, 1
203
+ br __weak_is_last_%weak_reg -> %free_label, L_ARC_WEAK_DROP_DONE_%weak_reg
204
+ L_ARC_WEAK_DROP_DONE_%weak_reg:
205
+ !__weak_is_last_%weak_reg
206
+ !__weak_next_count_%weak_reg
207
+ [END_MACRO]
208
+
209
+ [MACRO] ARC_WEAK_UPGRADE %out_arc, %out_ok, %weak_reg
210
+ __weak_strong_%out_arc = atomic_load %weak_reg+ArcBox_strong as u64 acquire
211
+ __weak_is_alive_%out_arc = ne __weak_strong_%out_arc, 0
212
+ br __weak_is_alive_%out_arc -> L_ARC_WEAK_UPGRADE_OK_%out_arc, L_ARC_WEAK_UPGRADE_NONE_%out_arc
213
+ L_ARC_WEAK_UPGRADE_OK_%out_arc:
214
+ __weak_next_strong_%out_arc = atomic_rmw_add %weak_reg+ArcBox_strong, 1 as u64 acq_rel
215
+ __weak_upgrade_overflow_%out_arc = eq __weak_next_strong_%out_arc, NUM_U64_MAX
216
+ br __weak_upgrade_overflow_%out_arc -> L_ARC_WEAK_UPGRADE_OVERFLOW_%out_arc, L_ARC_WEAK_UPGRADE_STORE_%out_arc
217
+ L_ARC_WEAK_UPGRADE_OVERFLOW_%out_arc:
218
+ panic(1505)
219
+ L_ARC_WEAK_UPGRADE_STORE_%out_arc:
220
+ %out_arc = add %weak_reg, 0
221
+ %out_ok = add 0, 1
222
+ !__weak_upgrade_overflow_%out_arc
223
+ !__weak_next_strong_%out_arc
224
+ !__weak_is_alive_%out_arc
225
+ !__weak_strong_%out_arc
226
+ jmp L_ARC_WEAK_UPGRADE_END_%out_arc
227
+ L_ARC_WEAK_UPGRADE_NONE_%out_arc:
228
+ %out_arc = add 0, 0
229
+ %out_ok = add 0, 0
230
+ !__weak_is_alive_%out_arc
231
+ !__weak_strong_%out_arc
232
+ L_ARC_WEAK_UPGRADE_END_%out_arc:
233
+ [END_MACRO]
@@ -0,0 +1,4 @@
1
+ #def ArcBox_SIZE = 24
2
+ #def ArcBox_strong = +0
3
+ #def ArcBox_weak = +8
4
+ #def ArcBox_data = +16