@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,7 @@
1
+ #def BinaryHeap_SIZE = 24
2
+ #def BinaryHeap_buf = +0
3
+ #def BinaryHeap_cap = +8
4
+ #def BinaryHeap_len = +16
5
+
6
+ #def BinaryHeap_INITIAL_CAP = 8
7
+ #def BinaryHeap_SLOT_SIZE = 8
@@ -0,0 +1,171 @@
1
+ @import "borrow.sal"
2
+ @import "core/slice.sal"
3
+ @import "hash.sa"
4
+
5
+ [MACRO] BORROW_REF_NEW %borrow_ref, %ptr
6
+ store %borrow_ref+BorrowRef_ptr, %ptr as ptr
7
+ [END_MACRO]
8
+
9
+ [MACRO] BORROW_REF_GET %out_ptr, %borrow_ref
10
+ %out_ptr = load %borrow_ref+BorrowRef_ptr as ptr
11
+ [END_MACRO]
12
+
13
+ [MACRO] BORROW_MUT_NEW %borrow_mut, %ptr
14
+ store %borrow_mut+BorrowMut_ptr, %ptr as ptr
15
+ [END_MACRO]
16
+
17
+ [MACRO] BORROW_MUT_GET %out_ptr, %borrow_mut
18
+ %out_ptr = load %borrow_mut+BorrowMut_ptr as ptr
19
+ [END_MACRO]
20
+
21
+ [MACRO] BORROW_PTR %out_ptr, %ptr
22
+ %out_ptr = ptr_add %ptr, 0
23
+ [END_MACRO]
24
+
25
+ [MACRO] BORROW_MUT_PTR %out_ptr, %ptr
26
+ %out_ptr = ptr_add %ptr, 0
27
+ [END_MACRO]
28
+
29
+ [MACRO] COW_SLICE_BORROWED %cow, %slice
30
+ __cow_borrowed_ptr_%cow = load %slice+Slice_ptr as ptr
31
+ __cow_borrowed_len_%cow = load %slice+Slice_len as u64
32
+ store %cow+CowSlice_tag, COW_BORROWED as u64
33
+ store %cow+CowSlice_ptr, __cow_borrowed_ptr_%cow as ptr
34
+ store %cow+CowSlice_len, __cow_borrowed_len_%cow as u64
35
+ !__cow_borrowed_len_%cow
36
+ !__cow_borrowed_ptr_%cow
37
+ [END_MACRO]
38
+
39
+ [MACRO] COW_SLICE_OWNED %cow, %slice
40
+ __cow_owned_ptr_%cow = load %slice+Slice_ptr as ptr
41
+ __cow_owned_len_%cow = load %slice+Slice_len as u64
42
+ store %cow+CowSlice_tag, COW_OWNED as u64
43
+ store %cow+CowSlice_ptr, __cow_owned_ptr_%cow as ptr
44
+ store %cow+CowSlice_len, __cow_owned_len_%cow as u64
45
+ !__cow_owned_len_%cow
46
+ !__cow_owned_ptr_%cow
47
+ [END_MACRO]
48
+
49
+ [MACRO] COW_SLICE_IS_BORROWED %out_bool, %cow
50
+ __cow_tag_%out_bool = load %cow+CowSlice_tag as u64
51
+ %out_bool = eq __cow_tag_%out_bool, COW_BORROWED
52
+ !__cow_tag_%out_bool
53
+ [END_MACRO]
54
+
55
+ [MACRO] COW_SLICE_IS_OWNED %out_bool, %cow
56
+ __cow_tag_%out_bool = load %cow+CowSlice_tag as u64
57
+ %out_bool = eq __cow_tag_%out_bool, COW_OWNED
58
+ !__cow_tag_%out_bool
59
+ [END_MACRO]
60
+
61
+ [MACRO] COW_SLICE_AS_SLICE %out_slice, %cow
62
+ __cow_slice_ptr_%out_slice = load %cow+CowSlice_ptr as ptr
63
+ __cow_slice_len_%out_slice = load %cow+CowSlice_len as u64
64
+ store %out_slice+Slice_ptr, __cow_slice_ptr_%out_slice as ptr
65
+ store %out_slice+Slice_len, __cow_slice_len_%out_slice as u64
66
+ !__cow_slice_len_%out_slice
67
+ !__cow_slice_ptr_%out_slice
68
+ [END_MACRO]
69
+
70
+ [MACRO] DEFAULT_HASHER_WRITE_COW_SLICE_U64 %hasher, %cow
71
+ __cow_hash_slice_%hasher = stack_alloc Slice_SIZE
72
+ EXPAND COW_SLICE_AS_SLICE __cow_hash_slice_%hasher, %cow
73
+ EXPAND DEFAULT_HASHER_WRITE_SLICE_U64 %hasher, __cow_hash_slice_%hasher
74
+ [END_MACRO]
75
+
76
+ // Rust method-name alias over DEFAULT_HASHER_WRITE_COW_SLICE_U64.
77
+ [MACRO] DEFAULT_HASHER_WRITE_COW_SLICE %hasher, %cow
78
+ EXPAND DEFAULT_HASHER_WRITE_COW_SLICE_U64 %hasher, %cow
79
+ [END_MACRO]
80
+
81
+ [MACRO] COW_SLICE_HASH_U64 %out_hash, %cow
82
+ __cow_hash_one_slice_%out_hash = stack_alloc Slice_SIZE
83
+ EXPAND COW_SLICE_AS_SLICE __cow_hash_one_slice_%out_hash, %cow
84
+ EXPAND SLICE_HASH_U64 %out_hash, __cow_hash_one_slice_%out_hash
85
+ [END_MACRO]
86
+
87
+ // Rust method-name alias over COW_SLICE_HASH_U64.
88
+ [MACRO] COW_SLICE_HASH %out_hash, %cow
89
+ EXPAND COW_SLICE_HASH_U64 %out_hash, %cow
90
+ [END_MACRO]
91
+
92
+ [MACRO] BUILD_HASHER_DEFAULT_HASH_ONE_COW_SLICE_U64 %out_hash, %builder, %cow
93
+ __build_hash_one_cow_slice_u64_hasher_%out_hash = stack_alloc DefaultHasher_SIZE
94
+ EXPAND BUILD_HASHER_DEFAULT_BUILD __build_hash_one_cow_slice_u64_hasher_%out_hash, %builder
95
+ EXPAND DEFAULT_HASHER_WRITE_COW_SLICE_U64 __build_hash_one_cow_slice_u64_hasher_%out_hash, %cow
96
+ EXPAND DEFAULT_HASHER_FINISH %out_hash, __build_hash_one_cow_slice_u64_hasher_%out_hash
97
+ [END_MACRO]
98
+
99
+ // Rust method-name alias over BUILD_HASHER_DEFAULT_HASH_ONE_COW_SLICE_U64.
100
+ [MACRO] BUILD_HASHER_DEFAULT_HASH_ONE_COW_SLICE %out_hash, %builder, %cow
101
+ EXPAND BUILD_HASHER_DEFAULT_HASH_ONE_COW_SLICE_U64 %out_hash, %builder, %cow
102
+ [END_MACRO]
103
+
104
+ [MACRO] RANDOM_STATE_HASH_ONE_COW_SLICE_U64 %out_hash, %state, %cow
105
+ __random_state_hash_one_cow_slice_u64_hasher_%out_hash = stack_alloc DefaultHasher_SIZE
106
+ EXPAND RANDOM_STATE_BUILD __random_state_hash_one_cow_slice_u64_hasher_%out_hash, %state
107
+ EXPAND DEFAULT_HASHER_WRITE_COW_SLICE_U64 __random_state_hash_one_cow_slice_u64_hasher_%out_hash, %cow
108
+ EXPAND DEFAULT_HASHER_FINISH %out_hash, __random_state_hash_one_cow_slice_u64_hasher_%out_hash
109
+ [END_MACRO]
110
+
111
+ // Rust method-name alias over RANDOM_STATE_HASH_ONE_COW_SLICE_U64.
112
+ [MACRO] RANDOM_STATE_HASH_ONE_COW_SLICE %out_hash, %state, %cow
113
+ EXPAND RANDOM_STATE_HASH_ONE_COW_SLICE_U64 %out_hash, %state, %cow
114
+ [END_MACRO]
115
+
116
+ [MACRO] COW_SLICE_TO_MUT %out_ok, %out_slice, %cow
117
+ EXPAND COW_SLICE_IS_OWNED __cow_to_mut_owned_%out_ok, %cow
118
+ br __cow_to_mut_owned_%out_ok -> L_COW_TO_MUT_OWNED_%out_ok, L_COW_TO_MUT_BORROWED_%out_ok
119
+
120
+ L_COW_TO_MUT_OWNED_%out_ok:
121
+ EXPAND COW_SLICE_AS_SLICE %out_slice, %cow
122
+ %out_ok = add 0, 1
123
+ !__cow_to_mut_owned_%out_ok
124
+ jmp L_COW_TO_MUT_END_%out_ok
125
+
126
+ L_COW_TO_MUT_BORROWED_%out_ok:
127
+ store %out_slice+Slice_ptr, 0 as ptr
128
+ store %out_slice+Slice_len, 0 as u64
129
+ %out_ok = add 0, 0
130
+ !__cow_to_mut_owned_%out_ok
131
+
132
+ L_COW_TO_MUT_END_%out_ok:
133
+ [END_MACRO]
134
+
135
+ [MACRO] COW_SLICE_INTO_OWNED %out_ok, %out_slice, %cow
136
+ EXPAND COW_SLICE_TO_MUT %out_ok, %out_slice, %cow
137
+ [END_MACRO]
138
+
139
+ [MACRO] COW_SLICE_LEN %out_len, %cow
140
+ %out_len = load %cow+CowSlice_len as u64
141
+ [END_MACRO]
142
+
143
+ [MACRO] COW_SLICE_PTR %out_ptr, %cow
144
+ %out_ptr = load %cow+CowSlice_ptr as ptr
145
+ [END_MACRO]
146
+
147
+ // Clone the Cow header (shared view). Models supportable Clone for concrete
148
+ // CowSlice without generic ToOwned allocation for borrowed→owned upgrade.
149
+ [MACRO] COW_SLICE_CLONE %out_cow, %cow
150
+ __cow_c_tag_%out_cow = load %cow+CowSlice_tag as u64
151
+ __cow_c_ptr_%out_cow = load %cow+CowSlice_ptr as ptr
152
+ __cow_c_len_%out_cow = load %cow+CowSlice_len as u64
153
+ store %out_cow+CowSlice_tag, __cow_c_tag_%out_cow as u64
154
+ store %out_cow+CowSlice_ptr, __cow_c_ptr_%out_cow as ptr
155
+ store %out_cow+CowSlice_len, __cow_c_len_%out_cow as u64
156
+ !__cow_c_len_%out_cow
157
+ !__cow_c_ptr_%out_cow
158
+ !__cow_c_tag_%out_cow
159
+ [END_MACRO]
160
+
161
+ [MACRO] COW_SLICE_EQ_U64 %out_bool, %left_cow, %right_cow
162
+ __cow_eq_l_%out_bool = stack_alloc Slice_SIZE
163
+ __cow_eq_r_%out_bool = stack_alloc Slice_SIZE
164
+ EXPAND COW_SLICE_AS_SLICE __cow_eq_l_%out_bool, %left_cow
165
+ EXPAND COW_SLICE_AS_SLICE __cow_eq_r_%out_bool, %right_cow
166
+ EXPAND SLICE_EQ_U64 %out_bool, __cow_eq_l_%out_bool, __cow_eq_r_%out_bool
167
+ [END_MACRO]
168
+
169
+ [MACRO] COW_SLICE_EQ %out_bool, %left_cow, %right_cow
170
+ EXPAND COW_SLICE_EQ_U64 %out_bool, %left_cow, %right_cow
171
+ [END_MACRO]
@@ -0,0 +1,13 @@
1
+ #def BorrowRef_SIZE = 8
2
+ #def BorrowRef_ptr = +0
3
+
4
+ #def BorrowMut_SIZE = 8
5
+ #def BorrowMut_ptr = +0
6
+
7
+ #def CowSlice_SIZE = 24
8
+ #def CowSlice_tag = +0
9
+ #def CowSlice_ptr = +8
10
+ #def CowSlice_len = +16
11
+
12
+ #def COW_BORROWED = 0
13
+ #def COW_OWNED = 1