@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,57 @@
1
+ // SA-facing contracts for the Zig-backed sa_std.process module.
2
+ // Process handles are opaque u64 resource handles and must be closed explicitly.
3
+ // `argv` is a borrowed pointer to an array of SaProcessArgv records.
4
+ @extern sa_std_process_run(&argv: ptr, argv_len: u64, &out_handle: ptr) -> i32
5
+ @extern sa_std_process_run_cwd(&argv: ptr, argv_len: u64, &cwd: ptr, cwd_len: u64, &out_handle: ptr) -> i32
6
+ @extern sa_std_process_spawn(&argv: ptr, argv_len: u64, &out_handle: ptr) -> i32
7
+ @extern sa_std_process_spawn_cwd(&argv: ptr, argv_len: u64, &cwd: ptr, cwd_len: u64, &out_handle: ptr) -> i32
8
+ @extern sa_std_process_spawn_stream(&argv: ptr, argv_len: u64, &out_process: ptr, &out_stdout: ptr, &out_stderr: ptr) -> i32
9
+ @extern sa_std_process_spawn_stream_cwd(&argv: ptr, argv_len: u64, &cwd: ptr, cwd_len: u64, &out_process: ptr, &out_stdout: ptr, &out_stderr: ptr) -> i32
10
+ @extern sa_std_process_run_command_ext(&argv: ptr, argv_len: u64, &cwd: ptr, cwd_len: u64, has_cwd: u32, &arg0: ptr, arg0_len: u64, has_arg0: u32, process_group: i32, has_process_group: u32, setsid: u32, &out_handle: ptr) -> i32
11
+ @extern sa_std_process_spawn_command_ext(&argv: ptr, argv_len: u64, &cwd: ptr, cwd_len: u64, has_cwd: u32, &arg0: ptr, arg0_len: u64, has_arg0: u32, process_group: i32, has_process_group: u32, setsid: u32, &out_handle: ptr) -> i32
12
+ @extern sa_std_process_spawn_stream_command_ext(&argv: ptr, argv_len: u64, &cwd: ptr, cwd_len: u64, has_cwd: u32, &arg0: ptr, arg0_len: u64, has_arg0: u32, process_group: i32, has_process_group: u32, setsid: u32, &out_process: ptr, &out_stdout: ptr, &out_stderr: ptr) -> i32
13
+ @extern sa_std_process_run_command_ext_pidfd(&argv: ptr, argv_len: u64, &cwd: ptr, cwd_len: u64, has_cwd: u32, &arg0: ptr, arg0_len: u64, has_arg0: u32, process_group: i32, has_process_group: u32, setsid: u32, create_pidfd: u32, &out_handle: ptr) -> i32
14
+ @extern sa_std_process_spawn_command_ext_pidfd(&argv: ptr, argv_len: u64, &cwd: ptr, cwd_len: u64, has_cwd: u32, &arg0: ptr, arg0_len: u64, has_arg0: u32, process_group: i32, has_process_group: u32, setsid: u32, create_pidfd: u32, &out_handle: ptr) -> i32
15
+ @extern sa_std_process_spawn_stream_command_ext_pidfd(&argv: ptr, argv_len: u64, &cwd: ptr, cwd_len: u64, has_cwd: u32, &arg0: ptr, arg0_len: u64, has_arg0: u32, process_group: i32, has_process_group: u32, setsid: u32, create_pidfd: u32, &out_process: ptr, &out_stdout: ptr, &out_stderr: ptr) -> i32
16
+ @extern sa_std_process_run_command_ext_uid_gid(&argv: ptr, argv_len: u64, &cwd: ptr, cwd_len: u64, has_cwd: u32, &arg0: ptr, arg0_len: u64, has_arg0: u32, process_group: i32, has_process_group: u32, setsid: u32, uid: u32, has_uid: u32, gid: u32, has_gid: u32, &out_handle: ptr) -> i32
17
+ @extern sa_std_process_spawn_command_ext_uid_gid(&argv: ptr, argv_len: u64, &cwd: ptr, cwd_len: u64, has_cwd: u32, &arg0: ptr, arg0_len: u64, has_arg0: u32, process_group: i32, has_process_group: u32, setsid: u32, uid: u32, has_uid: u32, gid: u32, has_gid: u32, &out_handle: ptr) -> i32
18
+ @extern sa_std_process_spawn_stream_command_ext_uid_gid(&argv: ptr, argv_len: u64, &cwd: ptr, cwd_len: u64, has_cwd: u32, &arg0: ptr, arg0_len: u64, has_arg0: u32, process_group: i32, has_process_group: u32, setsid: u32, uid: u32, has_uid: u32, gid: u32, has_gid: u32, &out_process: ptr, &out_stdout: ptr, &out_stderr: ptr) -> i32
19
+ @extern sa_std_process_run_command_ext_groups(&argv: ptr, argv_len: u64, &cwd: ptr, cwd_len: u64, has_cwd: u32, &arg0: ptr, arg0_len: u64, has_arg0: u32, process_group: i32, has_process_group: u32, setsid: u32, &groups: ptr, groups_len: u64, has_groups: u32, &out_handle: ptr) -> i32
20
+ @extern sa_std_process_spawn_command_ext_groups(&argv: ptr, argv_len: u64, &cwd: ptr, cwd_len: u64, has_cwd: u32, &arg0: ptr, arg0_len: u64, has_arg0: u32, process_group: i32, has_process_group: u32, setsid: u32, &groups: ptr, groups_len: u64, has_groups: u32, &out_handle: ptr) -> i32
21
+ @extern sa_std_process_spawn_stream_command_ext_groups(&argv: ptr, argv_len: u64, &cwd: ptr, cwd_len: u64, has_cwd: u32, &arg0: ptr, arg0_len: u64, has_arg0: u32, process_group: i32, has_process_group: u32, setsid: u32, &groups: ptr, groups_len: u64, has_groups: u32, &out_process: ptr, &out_stdout: ptr, &out_stderr: ptr) -> i32
22
+ @extern sa_std_process_run_command_ext_chroot(&argv: ptr, argv_len: u64, &cwd: ptr, cwd_len: u64, has_cwd: u32, &arg0: ptr, arg0_len: u64, has_arg0: u32, process_group: i32, has_process_group: u32, setsid: u32, &chroot: ptr, chroot_len: u64, has_chroot: u32, &out_handle: ptr) -> i32
23
+ @extern sa_std_process_spawn_command_ext_chroot(&argv: ptr, argv_len: u64, &cwd: ptr, cwd_len: u64, has_cwd: u32, &arg0: ptr, arg0_len: u64, has_arg0: u32, process_group: i32, has_process_group: u32, setsid: u32, &chroot: ptr, chroot_len: u64, has_chroot: u32, &out_handle: ptr) -> i32
24
+ @extern sa_std_process_spawn_stream_command_ext_chroot(&argv: ptr, argv_len: u64, &cwd: ptr, cwd_len: u64, has_cwd: u32, &arg0: ptr, arg0_len: u64, has_arg0: u32, process_group: i32, has_process_group: u32, setsid: u32, &chroot: ptr, chroot_len: u64, has_chroot: u32, &out_process: ptr, &out_stdout: ptr, &out_stderr: ptr) -> i32
25
+ @extern sa_std_process_exec_command_ext(&argv: ptr, argv_len: u64, &cwd: ptr, cwd_len: u64, has_cwd: u32, &arg0: ptr, arg0_len: u64, has_arg0: u32, process_group: i32, has_process_group: u32, setsid: u32, uid: u32, has_uid: u32, gid: u32, has_gid: u32, &groups: ptr, groups_len: u64, has_groups: u32, &chroot: ptr, chroot_len: u64, has_chroot: u32) -> i32
26
+ @extern sa_std_process_id() -> u32
27
+ @extern sa_std_process_parent_id() -> u32
28
+ @extern sa_std_process_user_id() -> u32
29
+ @extern sa_std_process_group_id() -> u32
30
+ @extern sa_std_process_abort() -> void
31
+ @extern sa_std_process_child_id(handle: u64, &out_pid: ptr) -> i32
32
+ @extern sa_std_process_pidfd(handle: u64, &out_pidfd: ptr) -> i32
33
+ @extern sa_std_process_into_pidfd(handle: u64, &out_pidfd: ptr) -> i32
34
+ @extern sa_std_process_wait(handle: u64, &out_code: ptr) -> i32
35
+ @extern sa_std_process_wait_raw(handle: u64, &out_raw: ptr) -> i32
36
+ @extern sa_std_process_try_wait(handle: u64, &out_ready: ptr, &out_code: ptr) -> i32
37
+ @extern sa_std_process_try_wait_raw(handle: u64, &out_ready: ptr, &out_raw: ptr) -> i32
38
+ @extern sa_std_process_kill(handle: u64) -> i32
39
+ @extern sa_std_process_send_signal(handle: u64, signal: i32) -> i32
40
+ @extern sa_std_process_send_process_group_signal(handle: u64, signal: i32) -> i32
41
+ @extern sa_std_process_kill_process_group(handle: u64) -> i32
42
+ @extern sa_std_pidfd_kill(handle: u64) -> i32
43
+ @extern sa_std_pidfd_send_signal(handle: u64, signal: i32) -> i32
44
+ @extern sa_std_pidfd_wait(handle: u64, &out_code: ptr) -> i32
45
+ @extern sa_std_pidfd_wait_raw(handle: u64, &out_raw: ptr) -> i32
46
+ @extern sa_std_pidfd_try_wait(handle: u64, &out_ready: ptr, &out_code: ptr) -> i32
47
+ @extern sa_std_pidfd_try_wait_raw(handle: u64, &out_ready: ptr, &out_raw: ptr) -> i32
48
+ @extern sa_std_process_exit_status_code(raw: i32) -> u32
49
+ @extern sa_std_process_exit_status_signal(raw: i32) -> i32
50
+ @extern sa_std_process_exit_status_core_dumped(raw: i32) -> u8
51
+ @extern sa_std_process_exit_status_stopped_signal(raw: i32) -> i32
52
+ @extern sa_std_process_exit_status_continued(raw: i32) -> u8
53
+ @extern sa_std_process_read_stdout(handle: u64, &buf: ptr, cap: u64, &out_read: ptr) -> i32
54
+ @extern sa_std_process_read_stderr(handle: u64, &buf: ptr, cap: u64, &out_read: ptr) -> i32
55
+ @extern sa_std_process_exec_capture(&argv: ptr, argv_len: u64, &out_code: ptr, &out_stdout: ptr, &out_stderr: ptr) -> i32
56
+ @extern sa_std_process_exec_capture_cwd(&argv: ptr, argv_len: u64, &cwd: ptr, cwd_len: u64, &out_code: ptr, &out_stdout: ptr, &out_stderr: ptr) -> i32
57
+ @extern sa_std_process_close(handle: u64) -> i32
@@ -0,0 +1,27 @@
1
+ #def SA_PROCESS_OK = 0
2
+ #def SA_PROCESS_ERR_INVALID_ARGUMENT = 1
3
+ #def SA_PROCESS_ERR_INVALID_HANDLE = 2
4
+ #def SA_PROCESS_ERR_NO_MEMORY = 5
5
+ #def SA_PROCESS_ERR_IO = 6
6
+ #def SA_PROCESS_ERR_UNSUPPORTED = 8
7
+ #def SA_PROCESS_ERR_UNKNOWN = 127
8
+
9
+ #def SaProcessArgv_SIZE = 16
10
+ #def SaProcessArgv_data = +0
11
+ #def SaProcessArgv_len = +8
12
+
13
+ #def ProcessExitStatus_SIZE = 8
14
+ #def ProcessExitStatus_code = +0
15
+ #def ProcessExitStatus_raw = +4
16
+
17
+ #def ProcessOutput_SIZE = 24
18
+ #def ProcessOutput_status = +0
19
+ #def ProcessOutput_stdout = +8
20
+ #def ProcessOutput_stderr = +16
21
+
22
+ #def ProcessStdio_SIZE = 1
23
+ #def ProcessStdio_ALIGN = 1
24
+ #def ProcessStdio_kind = +0
25
+ #def PROCESS_STDIO_KIND_INHERIT = 0
26
+ #def PROCESS_STDIO_KIND_PIPED = 1
27
+ #def PROCESS_STDIO_KIND_NULL = 2
package/sa_std/ptr.sa ADDED
@@ -0,0 +1,503 @@
1
+ @import "core/mem.sa"
2
+ @import "ptr.sal"
3
+
4
+ [MACRO] PTR_NULL %out_ptr
5
+ %out_ptr = 0 as ptr
6
+ [END_MACRO]
7
+
8
+ [MACRO] PTR_IS_NULL %out_bool, %ptr_reg
9
+ __ptr_null_%out_bool = 0 as ptr
10
+ %out_bool = eq %ptr_reg, __ptr_null_%out_bool
11
+ !__ptr_null_%out_bool
12
+ [END_MACRO]
13
+
14
+ [MACRO] PTR_IS_NONNULL %out_bool, %ptr_reg
15
+ __ptr_null_%out_bool = 0 as ptr
16
+ %out_bool = ne %ptr_reg, __ptr_null_%out_bool
17
+ !__ptr_null_%out_bool
18
+ [END_MACRO]
19
+
20
+ [MACRO] PTR_EQ %out_bool, %lhs_ptr, %rhs_ptr
21
+ %out_bool = eq %lhs_ptr, %rhs_ptr
22
+ [END_MACRO]
23
+
24
+ [MACRO] PTR_NE %out_bool, %lhs_ptr, %rhs_ptr
25
+ %out_bool = ne %lhs_ptr, %rhs_ptr
26
+ [END_MACRO]
27
+
28
+ [MACRO] PTR_ADDR %out_addr, %ptr_reg
29
+ %out_addr = bitcast %ptr_reg as u64
30
+ [END_MACRO]
31
+
32
+ [MACRO] PTR_EXPOSE_ADDR %out_addr, %ptr_reg
33
+ EXPAND PTR_ADDR %out_addr, %ptr_reg
34
+ [END_MACRO]
35
+
36
+ [MACRO] PTR_EXPOSE_PROVENANCE %out_addr, %ptr_reg
37
+ EXPAND PTR_ADDR %out_addr, %ptr_reg
38
+ [END_MACRO]
39
+
40
+ [MACRO] PTR_CAST %out_ptr, %ptr_reg
41
+ %out_ptr = ptr_add %ptr_reg, 0
42
+ [END_MACRO]
43
+
44
+ [MACRO] PTR_CAST_CONST %out_ptr, %ptr_reg
45
+ %out_ptr = ptr_add %ptr_reg, 0
46
+ [END_MACRO]
47
+
48
+ [MACRO] PTR_CAST_MUT %out_ptr, %ptr_reg
49
+ %out_ptr = ptr_add %ptr_reg, 0
50
+ [END_MACRO]
51
+
52
+ [MACRO] PTR_OFFSET_BYTES %out_ptr, %ptr_reg, %byte_offset
53
+ %out_ptr = ptr_add %ptr_reg, %byte_offset
54
+ [END_MACRO]
55
+
56
+ [MACRO] PTR_BYTE_ADD %out_ptr, %ptr_reg, %byte_offset
57
+ %out_ptr = ptr_add %ptr_reg, %byte_offset
58
+ [END_MACRO]
59
+
60
+ [MACRO] PTR_BYTE_SUB %out_ptr, %ptr_reg, %byte_offset
61
+ __ptr_sub_offset_%out_ptr = sub 0, %byte_offset
62
+ %out_ptr = ptr_add %ptr_reg, __ptr_sub_offset_%out_ptr
63
+ !__ptr_sub_offset_%out_ptr
64
+ [END_MACRO]
65
+
66
+ [MACRO] PTR_WRAPPING_BYTE_ADD %out_ptr, %ptr_reg, %byte_offset
67
+ EXPAND PTR_BYTE_ADD %out_ptr, %ptr_reg, %byte_offset
68
+ [END_MACRO]
69
+
70
+ [MACRO] PTR_WRAPPING_BYTE_SUB %out_ptr, %ptr_reg, %byte_offset
71
+ EXPAND PTR_BYTE_SUB %out_ptr, %ptr_reg, %byte_offset
72
+ [END_MACRO]
73
+
74
+ [MACRO] PTR_OFFSET_FROM_BYTES %out_offset, %ptr_reg, %base_ptr
75
+ __ptr_offset_addr_%out_offset = bitcast %ptr_reg as u64
76
+ __ptr_offset_base_%out_offset = bitcast %base_ptr as u64
77
+ %out_offset = sub __ptr_offset_addr_%out_offset, __ptr_offset_base_%out_offset
78
+ !__ptr_offset_base_%out_offset
79
+ !__ptr_offset_addr_%out_offset
80
+ [END_MACRO]
81
+
82
+ [MACRO] PTR_OFFSET_FROM_U64 %out_offset, %ptr_reg, %base_ptr
83
+ EXPAND PTR_OFFSET_FROM_BYTES __ptr_offset_bytes_%out_offset, %ptr_reg, %base_ptr
84
+ %out_offset = udiv __ptr_offset_bytes_%out_offset, 8
85
+ !__ptr_offset_bytes_%out_offset
86
+ [END_MACRO]
87
+
88
+ // Rust method-name alias over PTR_OFFSET_FROM_U64.
89
+ [MACRO] PTR_OFFSET_FROM %out_offset, %ptr_reg, %base_ptr
90
+ EXPAND PTR_OFFSET_FROM_U64 %out_offset, %ptr_reg, %base_ptr
91
+ [END_MACRO]
92
+
93
+ [MACRO] PTR_BYTE_OFFSET_FROM_UNSIGNED %out_offset, %ptr_reg, %base_ptr
94
+ EXPAND PTR_OFFSET_FROM_BYTES %out_offset, %ptr_reg, %base_ptr
95
+ [END_MACRO]
96
+
97
+ [MACRO] PTR_OFFSET_FROM_UNSIGNED_U64 %out_offset, %ptr_reg, %base_ptr
98
+ EXPAND PTR_OFFSET_FROM_U64 %out_offset, %ptr_reg, %base_ptr
99
+ [END_MACRO]
100
+
101
+ // Rust method-name alias over PTR_OFFSET_FROM_UNSIGNED_U64.
102
+ [MACRO] PTR_OFFSET_FROM_UNSIGNED %out_offset, %ptr_reg, %base_ptr
103
+ EXPAND PTR_OFFSET_FROM_UNSIGNED_U64 %out_offset, %ptr_reg, %base_ptr
104
+ [END_MACRO]
105
+
106
+ [MACRO] PTR_OFFSET_U64 %out_ptr, %ptr_reg, %index
107
+ __ptr_u64_off_%out_ptr = mul %index, 8
108
+ %out_ptr = ptr_add %ptr_reg, __ptr_u64_off_%out_ptr
109
+ !__ptr_u64_off_%out_ptr
110
+ [END_MACRO]
111
+
112
+ // Rust method-name alias over PTR_OFFSET_U64.
113
+ [MACRO] PTR_OFFSET %out_ptr, %ptr_reg, %index
114
+ EXPAND PTR_OFFSET_U64 %out_ptr, %ptr_reg, %index
115
+ [END_MACRO]
116
+
117
+ [MACRO] PTR_ADD_U64 %out_ptr, %ptr_reg, %index
118
+ EXPAND PTR_OFFSET_U64 %out_ptr, %ptr_reg, %index
119
+ [END_MACRO]
120
+
121
+ // Rust method-name alias over PTR_ADD_U64.
122
+ [MACRO] PTR_ADD %out_ptr, %ptr_reg, %index
123
+ EXPAND PTR_ADD_U64 %out_ptr, %ptr_reg, %index
124
+ [END_MACRO]
125
+
126
+ [MACRO] PTR_SUB_U64 %out_ptr, %ptr_reg, %index
127
+ __ptr_u64_sub_off_%out_ptr = mul %index, 8
128
+ __ptr_u64_sub_neg_%out_ptr = sub 0, __ptr_u64_sub_off_%out_ptr
129
+ %out_ptr = ptr_add %ptr_reg, __ptr_u64_sub_neg_%out_ptr
130
+ !__ptr_u64_sub_neg_%out_ptr
131
+ !__ptr_u64_sub_off_%out_ptr
132
+ [END_MACRO]
133
+
134
+ // Rust method-name alias over PTR_SUB_U64.
135
+ [MACRO] PTR_SUB %out_ptr, %ptr_reg, %index
136
+ EXPAND PTR_SUB_U64 %out_ptr, %ptr_reg, %index
137
+ [END_MACRO]
138
+
139
+ [MACRO] PTR_WRAPPING_ADD_U64 %out_ptr, %ptr_reg, %index
140
+ EXPAND PTR_ADD_U64 %out_ptr, %ptr_reg, %index
141
+ [END_MACRO]
142
+
143
+ // Rust method-name alias over PTR_WRAPPING_ADD_U64.
144
+ [MACRO] PTR_WRAPPING_ADD %out_ptr, %ptr_reg, %index
145
+ EXPAND PTR_WRAPPING_ADD_U64 %out_ptr, %ptr_reg, %index
146
+ [END_MACRO]
147
+
148
+ [MACRO] PTR_WRAPPING_SUB_U64 %out_ptr, %ptr_reg, %index
149
+ EXPAND PTR_SUB_U64 %out_ptr, %ptr_reg, %index
150
+ [END_MACRO]
151
+
152
+ // Rust method-name alias over PTR_WRAPPING_SUB_U64.
153
+ [MACRO] PTR_WRAPPING_SUB %out_ptr, %ptr_reg, %index
154
+ EXPAND PTR_WRAPPING_SUB_U64 %out_ptr, %ptr_reg, %index
155
+ [END_MACRO]
156
+
157
+ [MACRO] PTR_IS_ALIGNED_TO %out_bool, %ptr_reg, %align
158
+ __ptr_addr_%out_bool = bitcast %ptr_reg as u64
159
+ __ptr_rem_%out_bool = rem __ptr_addr_%out_bool, %align
160
+ %out_bool = eq __ptr_rem_%out_bool, 0
161
+ !__ptr_rem_%out_bool
162
+ !__ptr_addr_%out_bool
163
+ [END_MACRO]
164
+
165
+ [MACRO] PTR_GUARANTEED_EQ %out_ok, %out_bool, %lhs_ptr, %rhs_ptr
166
+ %out_bool = eq %lhs_ptr, %rhs_ptr
167
+ %out_ok = add 0, 1
168
+ [END_MACRO]
169
+
170
+ [MACRO] PTR_GUARANTEED_NE %out_ok, %out_bool, %lhs_ptr, %rhs_ptr
171
+ %out_bool = ne %lhs_ptr, %rhs_ptr
172
+ %out_ok = add 0, 1
173
+ [END_MACRO]
174
+
175
+ [MACRO] PTR_READ_U64 %out_value, %ptr_reg
176
+ %out_value = load %ptr_reg+0 as u64
177
+ [END_MACRO]
178
+
179
+ // Rust method-name alias over PTR_READ_U64.
180
+ [MACRO] PTR_READ %out_value, %ptr_reg
181
+ EXPAND PTR_READ_U64 %out_value, %ptr_reg
182
+ [END_MACRO]
183
+
184
+ [MACRO] PTR_READ_UNALIGNED_U64 %out_value, %ptr_reg
185
+ %out_value = load %ptr_reg+0 as u64
186
+ [END_MACRO]
187
+
188
+ // Rust method-name alias over PTR_READ_UNALIGNED_U64.
189
+ [MACRO] PTR_READ_UNALIGNED %out_value, %ptr_reg
190
+ EXPAND PTR_READ_UNALIGNED_U64 %out_value, %ptr_reg
191
+ [END_MACRO]
192
+
193
+ [MACRO] PTR_READ_VOLATILE_U64 %out_value, %ptr_reg
194
+ %out_value = load %ptr_reg+0 as u64
195
+ [END_MACRO]
196
+
197
+ // Rust method-name alias over PTR_READ_VOLATILE_U64.
198
+ [MACRO] PTR_READ_VOLATILE %out_value, %ptr_reg
199
+ EXPAND PTR_READ_VOLATILE_U64 %out_value, %ptr_reg
200
+ [END_MACRO]
201
+
202
+ [MACRO] PTR_READ_VOLATILE_I32 %out_value, %ptr_reg
203
+ %out_value = load %ptr_reg+0 as i32
204
+ [END_MACRO]
205
+
206
+ [MACRO] PTR_READ_U8 %out_value, %ptr_reg
207
+ %out_value = load %ptr_reg+0 as u8
208
+ [END_MACRO]
209
+
210
+ [MACRO] PTR_READ_UNALIGNED_U8 %out_value, %ptr_reg
211
+ %out_value = load %ptr_reg+0 as u8
212
+ [END_MACRO]
213
+
214
+ [MACRO] PTR_READ_VOLATILE_U8 %out_value, %ptr_reg
215
+ %out_value = load %ptr_reg+0 as u8
216
+ [END_MACRO]
217
+
218
+ [MACRO] PTR_WRITE_U64 %ptr_reg, %value
219
+ store %ptr_reg+0, %value as u64
220
+ [END_MACRO]
221
+
222
+ // Rust method-name alias over PTR_WRITE_U64.
223
+ [MACRO] PTR_WRITE %ptr_reg, %value
224
+ EXPAND PTR_WRITE_U64 %ptr_reg, %value
225
+ [END_MACRO]
226
+
227
+ [MACRO] PTR_WRITE_UNALIGNED_U64 %ptr_reg, %value
228
+ store %ptr_reg+0, %value as u64
229
+ [END_MACRO]
230
+
231
+ // Rust method-name alias over PTR_WRITE_UNALIGNED_U64.
232
+ [MACRO] PTR_WRITE_UNALIGNED %ptr_reg, %value
233
+ EXPAND PTR_WRITE_UNALIGNED_U64 %ptr_reg, %value
234
+ [END_MACRO]
235
+
236
+ [MACRO] PTR_WRITE_VOLATILE_U64 %ptr_reg, %value
237
+ store %ptr_reg+0, %value as u64
238
+ [END_MACRO]
239
+
240
+ // Rust method-name alias over PTR_WRITE_VOLATILE_U64.
241
+ [MACRO] PTR_WRITE_VOLATILE %ptr_reg, %value
242
+ EXPAND PTR_WRITE_VOLATILE_U64 %ptr_reg, %value
243
+ [END_MACRO]
244
+
245
+ [MACRO] PTR_WRITE_U8 %ptr_reg, %value
246
+ store %ptr_reg+0, %value as u8
247
+ [END_MACRO]
248
+
249
+ [MACRO] PTR_WRITE_UNALIGNED_U8 %ptr_reg, %value
250
+ store %ptr_reg+0, %value as u8
251
+ [END_MACRO]
252
+
253
+ [MACRO] PTR_WRITE_VOLATILE_U8 %ptr_reg, %value
254
+ store %ptr_reg+0, %value as u8
255
+ [END_MACRO]
256
+
257
+ [MACRO] PTR_SWAP_U64 %lhs_ptr, %rhs_ptr
258
+ __ptr_swap_lhs_%lhs_ptr = load %lhs_ptr+0 as u64
259
+ __ptr_swap_rhs_%lhs_ptr = load %rhs_ptr+0 as u64
260
+ store %lhs_ptr+0, __ptr_swap_rhs_%lhs_ptr as u64
261
+ store %rhs_ptr+0, __ptr_swap_lhs_%lhs_ptr as u64
262
+ !__ptr_swap_rhs_%lhs_ptr
263
+ !__ptr_swap_lhs_%lhs_ptr
264
+ [END_MACRO]
265
+
266
+ // Rust method-name alias over PTR_SWAP_U64.
267
+ [MACRO] PTR_SWAP %lhs_ptr, %rhs_ptr
268
+ EXPAND PTR_SWAP_U64 %lhs_ptr, %rhs_ptr
269
+ [END_MACRO]
270
+
271
+ [MACRO] PTR_SWAP_NONOVERLAPPING_U64 %lhs_ptr, %rhs_ptr
272
+ EXPAND PTR_SWAP_U64 %lhs_ptr, %rhs_ptr
273
+ [END_MACRO]
274
+
275
+ // Rust method-name alias over PTR_SWAP_NONOVERLAPPING_U64.
276
+ [MACRO] PTR_SWAP_NONOVERLAPPING %lhs_ptr, %rhs_ptr
277
+ EXPAND PTR_SWAP_NONOVERLAPPING_U64 %lhs_ptr, %rhs_ptr
278
+ [END_MACRO]
279
+
280
+ [MACRO] PTR_REPLACE_U64 %out_old, %ptr_reg, %new_value
281
+ %out_old = load %ptr_reg+0 as u64
282
+ store %ptr_reg+0, %new_value as u64
283
+ [END_MACRO]
284
+
285
+ // Rust method-name alias over PTR_REPLACE_U64.
286
+ [MACRO] PTR_REPLACE %out_old, %ptr_reg, %new_value
287
+ EXPAND PTR_REPLACE_U64 %out_old, %ptr_reg, %new_value
288
+ [END_MACRO]
289
+
290
+ [MACRO] PTR_TAKE_U64 %out_old, %ptr_reg
291
+ %out_old = load %ptr_reg+0 as u64
292
+ store %ptr_reg+0, 0 as u64
293
+ [END_MACRO]
294
+
295
+ // Rust method-name alias over PTR_TAKE_U64.
296
+ [MACRO] PTR_TAKE %out_old, %ptr_reg
297
+ EXPAND PTR_TAKE_U64 %out_old, %ptr_reg
298
+ [END_MACRO]
299
+
300
+ [MACRO] PTR_COPY_BYTES %dst_ptr, %src_ptr, %byte_count
301
+ call @sa_mem_copy(&%dst_ptr, &%src_ptr, %byte_count)
302
+ [END_MACRO]
303
+
304
+ [MACRO] PTR_COPY_NONOVERLAPPING_BYTES %dst_ptr, %src_ptr, %byte_count
305
+ call @sa_mem_copy(&%dst_ptr, &%src_ptr, %byte_count)
306
+ [END_MACRO]
307
+
308
+ [MACRO] PTR_WRITE_BYTES %dst_ptr, %byte_value, %byte_count
309
+ call @sa_mem_set(&%dst_ptr, %byte_value, %byte_count)
310
+ [END_MACRO]
311
+
312
+ [MACRO] PTR_COPY_U64S %dst_ptr, %src_ptr, %count
313
+ __ptr_copy_bytes_%dst_ptr = mul %count, 8
314
+ call @sa_mem_copy(&%dst_ptr, &%src_ptr, __ptr_copy_bytes_%dst_ptr)
315
+ !__ptr_copy_bytes_%dst_ptr
316
+ [END_MACRO]
317
+
318
+ [MACRO] PTR_COPY_NONOVERLAPPING_U64S %dst_ptr, %src_ptr, %count
319
+ __ptr_copy_nonoverlap_bytes_%dst_ptr = mul %count, 8
320
+ call @sa_mem_copy(&%dst_ptr, &%src_ptr, __ptr_copy_nonoverlap_bytes_%dst_ptr)
321
+ !__ptr_copy_nonoverlap_bytes_%dst_ptr
322
+ [END_MACRO]
323
+
324
+ [MACRO] NONNULL_NEW %out_ok, %nonnull_ptr, %ptr_reg
325
+ EXPAND PTR_IS_NONNULL %out_ok, %ptr_reg
326
+ store %nonnull_ptr+NonNull_ptr, %ptr_reg as ptr
327
+ [END_MACRO]
328
+
329
+ [MACRO] NONNULL_NEW_UNCHECKED %nonnull_ptr, %ptr_reg
330
+ store %nonnull_ptr+NonNull_ptr, %ptr_reg as ptr
331
+ [END_MACRO]
332
+
333
+ [MACRO] NONNULL_AS_PTR %out_ptr, %nonnull_ptr
334
+ %out_ptr = load %nonnull_ptr+NonNull_ptr as ptr
335
+ [END_MACRO]
336
+
337
+ [MACRO] NONNULL_AS_REF %out_ptr, %nonnull_ptr
338
+ %out_ptr = load %nonnull_ptr+NonNull_ptr as ptr
339
+ [END_MACRO]
340
+
341
+ [MACRO] NONNULL_AS_MUT %out_ptr, %nonnull_ptr
342
+ %out_ptr = load %nonnull_ptr+NonNull_ptr as ptr
343
+ [END_MACRO]
344
+
345
+ [MACRO] NONNULL_ADDR %out_addr, %nonnull_ptr
346
+ __nonnull_addr_ptr_%out_addr = load %nonnull_ptr+NonNull_ptr as ptr
347
+ EXPAND PTR_ADDR %out_addr, __nonnull_addr_ptr_%out_addr
348
+ !__nonnull_addr_ptr_%out_addr
349
+ [END_MACRO]
350
+
351
+ [MACRO] NONNULL_EXPOSE_PROVENANCE %out_addr, %nonnull_ptr
352
+ EXPAND NONNULL_ADDR %out_addr, %nonnull_ptr
353
+ [END_MACRO]
354
+
355
+ [MACRO] NONNULL_BYTE_ADD %out_nonnull, %nonnull_ptr, %byte_offset
356
+ __nonnull_add_ptr_%out_nonnull = load %nonnull_ptr+NonNull_ptr as ptr
357
+ __nonnull_add_next_%out_nonnull = ptr_add __nonnull_add_ptr_%out_nonnull, %byte_offset
358
+ store %out_nonnull+NonNull_ptr, __nonnull_add_next_%out_nonnull as ptr
359
+ !__nonnull_add_next_%out_nonnull
360
+ !__nonnull_add_ptr_%out_nonnull
361
+ [END_MACRO]
362
+
363
+ [MACRO] NONNULL_BYTE_SUB %out_nonnull, %nonnull_ptr, %byte_offset
364
+ __nonnull_sub_ptr_%out_nonnull = load %nonnull_ptr+NonNull_ptr as ptr
365
+ __nonnull_sub_offset_%out_nonnull = sub 0, %byte_offset
366
+ __nonnull_sub_next_%out_nonnull = ptr_add __nonnull_sub_ptr_%out_nonnull, __nonnull_sub_offset_%out_nonnull
367
+ store %out_nonnull+NonNull_ptr, __nonnull_sub_next_%out_nonnull as ptr
368
+ !__nonnull_sub_next_%out_nonnull
369
+ !__nonnull_sub_offset_%out_nonnull
370
+ !__nonnull_sub_ptr_%out_nonnull
371
+ [END_MACRO]
372
+
373
+ [MACRO] NONNULL_WRAPPING_BYTE_ADD %out_nonnull, %nonnull_ptr, %byte_offset
374
+ EXPAND NONNULL_BYTE_ADD %out_nonnull, %nonnull_ptr, %byte_offset
375
+ [END_MACRO]
376
+
377
+ [MACRO] NONNULL_WRAPPING_BYTE_SUB %out_nonnull, %nonnull_ptr, %byte_offset
378
+ EXPAND NONNULL_BYTE_SUB %out_nonnull, %nonnull_ptr, %byte_offset
379
+ [END_MACRO]
380
+
381
+ [MACRO] NONNULL_ADD_U64 %out_nonnull, %nonnull_ptr, %index
382
+ __nonnull_add_u64_bytes_%out_nonnull = mul %index, 8
383
+ EXPAND NONNULL_BYTE_ADD %out_nonnull, %nonnull_ptr, __nonnull_add_u64_bytes_%out_nonnull
384
+ !__nonnull_add_u64_bytes_%out_nonnull
385
+ [END_MACRO]
386
+
387
+ // Rust method-name alias over NONNULL_ADD_U64.
388
+ [MACRO] NONNULL_ADD %out_nonnull, %nonnull_ptr, %index
389
+ EXPAND NONNULL_ADD_U64 %out_nonnull, %nonnull_ptr, %index
390
+ [END_MACRO]
391
+
392
+ [MACRO] NONNULL_SUB_U64 %out_nonnull, %nonnull_ptr, %index
393
+ __nonnull_sub_u64_bytes_%out_nonnull = mul %index, 8
394
+ EXPAND NONNULL_BYTE_SUB %out_nonnull, %nonnull_ptr, __nonnull_sub_u64_bytes_%out_nonnull
395
+ !__nonnull_sub_u64_bytes_%out_nonnull
396
+ [END_MACRO]
397
+
398
+ // Rust method-name alias over NONNULL_SUB_U64.
399
+ [MACRO] NONNULL_SUB %out_nonnull, %nonnull_ptr, %index
400
+ EXPAND NONNULL_SUB_U64 %out_nonnull, %nonnull_ptr, %index
401
+ [END_MACRO]
402
+
403
+ [MACRO] NONNULL_WRAPPING_ADD_U64 %out_nonnull, %nonnull_ptr, %index
404
+ EXPAND NONNULL_ADD_U64 %out_nonnull, %nonnull_ptr, %index
405
+ [END_MACRO]
406
+
407
+ // Rust method-name alias over NONNULL_WRAPPING_ADD_U64.
408
+ [MACRO] NONNULL_WRAPPING_ADD %out_nonnull, %nonnull_ptr, %index
409
+ EXPAND NONNULL_WRAPPING_ADD_U64 %out_nonnull, %nonnull_ptr, %index
410
+ [END_MACRO]
411
+
412
+ [MACRO] NONNULL_WRAPPING_SUB_U64 %out_nonnull, %nonnull_ptr, %index
413
+ EXPAND NONNULL_SUB_U64 %out_nonnull, %nonnull_ptr, %index
414
+ [END_MACRO]
415
+
416
+ // Rust method-name alias over NONNULL_WRAPPING_SUB_U64.
417
+ [MACRO] NONNULL_WRAPPING_SUB %out_nonnull, %nonnull_ptr, %index
418
+ EXPAND NONNULL_WRAPPING_SUB_U64 %out_nonnull, %nonnull_ptr, %index
419
+ [END_MACRO]
420
+
421
+ [MACRO] NONNULL_OFFSET_FROM_BYTES %out_offset, %nonnull_ptr, %base_nonnull
422
+ __nonnull_offset_ptr_%out_offset = load %nonnull_ptr+NonNull_ptr as ptr
423
+ __nonnull_offset_base_%out_offset = load %base_nonnull+NonNull_ptr as ptr
424
+ EXPAND PTR_OFFSET_FROM_BYTES %out_offset, __nonnull_offset_ptr_%out_offset, __nonnull_offset_base_%out_offset
425
+ !__nonnull_offset_base_%out_offset
426
+ !__nonnull_offset_ptr_%out_offset
427
+ [END_MACRO]
428
+
429
+ [MACRO] NONNULL_OFFSET_FROM_U64 %out_offset, %nonnull_ptr, %base_nonnull
430
+ __nonnull_offset_u64_ptr_%out_offset = load %nonnull_ptr+NonNull_ptr as ptr
431
+ __nonnull_offset_u64_base_%out_offset = load %base_nonnull+NonNull_ptr as ptr
432
+ EXPAND PTR_OFFSET_FROM_U64 %out_offset, __nonnull_offset_u64_ptr_%out_offset, __nonnull_offset_u64_base_%out_offset
433
+ !__nonnull_offset_u64_base_%out_offset
434
+ !__nonnull_offset_u64_ptr_%out_offset
435
+ [END_MACRO]
436
+
437
+ // Rust method-name alias over NONNULL_OFFSET_FROM_U64.
438
+ [MACRO] NONNULL_OFFSET_FROM %out_offset, %nonnull_ptr, %base_nonnull
439
+ EXPAND NONNULL_OFFSET_FROM_U64 %out_offset, %nonnull_ptr, %base_nonnull
440
+ [END_MACRO]
441
+
442
+ [MACRO] NONNULL_BYTE_OFFSET_FROM_UNSIGNED %out_offset, %nonnull_ptr, %base_nonnull
443
+ EXPAND NONNULL_OFFSET_FROM_BYTES %out_offset, %nonnull_ptr, %base_nonnull
444
+ [END_MACRO]
445
+
446
+ [MACRO] NONNULL_OFFSET_FROM_UNSIGNED_U64 %out_offset, %nonnull_ptr, %base_nonnull
447
+ EXPAND NONNULL_OFFSET_FROM_U64 %out_offset, %nonnull_ptr, %base_nonnull
448
+ [END_MACRO]
449
+
450
+ // Rust method-name alias over NONNULL_OFFSET_FROM_UNSIGNED_U64.
451
+ [MACRO] NONNULL_OFFSET_FROM_UNSIGNED %out_offset, %nonnull_ptr, %base_nonnull
452
+ EXPAND NONNULL_OFFSET_FROM_UNSIGNED_U64 %out_offset, %nonnull_ptr, %base_nonnull
453
+ [END_MACRO]
454
+
455
+ [MACRO] NONNULL_IS_NONNULL %out_bool, %nonnull_ptr
456
+ __nonnull_ptr_%out_bool = load %nonnull_ptr+NonNull_ptr as ptr
457
+ EXPAND PTR_IS_NONNULL %out_bool, __nonnull_ptr_%out_bool
458
+ !__nonnull_ptr_%out_bool
459
+ [END_MACRO]
460
+
461
+ [MACRO] NONNULL_IS_NULL %out_bool, %nonnull_ptr
462
+ __nonnull_ptr_%out_bool = load %nonnull_ptr+NonNull_ptr as ptr
463
+ EXPAND PTR_IS_NULL %out_bool, __nonnull_ptr_%out_bool
464
+ !__nonnull_ptr_%out_bool
465
+ [END_MACRO]
466
+
467
+ [MACRO] NONNULL_IS_ALIGNED_TO %out_bool, %nonnull_ptr, %align
468
+ __nonnull_align_ptr_%out_bool = load %nonnull_ptr+NonNull_ptr as ptr
469
+ EXPAND PTR_IS_ALIGNED_TO %out_bool, __nonnull_align_ptr_%out_bool, %align
470
+ !__nonnull_align_ptr_%out_bool
471
+ [END_MACRO]
472
+
473
+ [MACRO] NONNULL_EQ %out_bool, %lhs_nonnull, %rhs_nonnull
474
+ __nonnull_lhs_%out_bool = load %lhs_nonnull+NonNull_ptr as ptr
475
+ __nonnull_rhs_%out_bool = load %rhs_nonnull+NonNull_ptr as ptr
476
+ %out_bool = eq __nonnull_lhs_%out_bool, __nonnull_rhs_%out_bool
477
+ !__nonnull_rhs_%out_bool
478
+ !__nonnull_lhs_%out_bool
479
+ [END_MACRO]
480
+
481
+ [MACRO] NONNULL_NE %out_bool, %lhs_nonnull, %rhs_nonnull
482
+ __nonnull_lhs_%out_bool = load %lhs_nonnull+NonNull_ptr as ptr
483
+ __nonnull_rhs_%out_bool = load %rhs_nonnull+NonNull_ptr as ptr
484
+ %out_bool = ne __nonnull_lhs_%out_bool, __nonnull_rhs_%out_bool
485
+ !__nonnull_rhs_%out_bool
486
+ !__nonnull_lhs_%out_bool
487
+ [END_MACRO]
488
+
489
+ [MACRO] NONNULL_GUARANTEED_EQ %out_ok, %out_bool, %lhs_nonnull, %rhs_nonnull
490
+ EXPAND NONNULL_EQ %out_bool, %lhs_nonnull, %rhs_nonnull
491
+ %out_ok = add 0, 1
492
+ [END_MACRO]
493
+
494
+ [MACRO] NONNULL_GUARANTEED_NE %out_ok, %out_bool, %lhs_nonnull, %rhs_nonnull
495
+ EXPAND NONNULL_NE %out_bool, %lhs_nonnull, %rhs_nonnull
496
+ %out_ok = add 0, 1
497
+ [END_MACRO]
498
+
499
+ [MACRO] NONNULL_CAST %out_nonnull, %nonnull_ptr
500
+ __nonnull_cast_ptr_%out_nonnull = load %nonnull_ptr+NonNull_ptr as ptr
501
+ store %out_nonnull+NonNull_ptr, __nonnull_cast_ptr_%out_nonnull as ptr
502
+ !__nonnull_cast_ptr_%out_nonnull
503
+ [END_MACRO]
package/sa_std/ptr.sal ADDED
@@ -0,0 +1,2 @@
1
+ #def NonNull_SIZE = 8
2
+ #def NonNull_ptr = +0
@@ -0,0 +1,2 @@
1
+ @import "core/result.sal"
2
+ @import "core/result.sa"
@@ -0,0 +1 @@
1
+ @import "core/result.sal"
@@ -0,0 +1,51 @@
1
+ @import "rust_core.sal"
2
+ @import "core/cell.sal"
3
+ @import "core/cell.sa"
4
+ @import "core/refcell.sal"
5
+ @import "core/refcell.sa"
6
+ @import "core/rc.sal"
7
+ @import "core/rc.sa"
8
+ @import "core/box.sal"
9
+ @import "core/box.sa"
10
+ @import "core/derive.sal"
11
+ @import "core/derive.sa"
12
+ @import "core/weak.sal"
13
+ @import "core/weak.sa"
14
+ @import "core/arc.sal"
15
+ @import "core/arc.sa"
16
+ @import "core/bit.sa"
17
+ @import "sync/rwlock.sal"
18
+ @import "sync/rwlock.sa"
19
+ @import "sync/mutex.sal"
20
+ @import "sync/mutex.sa"
21
+ @import "sync/barrier.sal"
22
+ @import "sync/barrier.sa"
23
+ @import "sync/condvar.sal"
24
+ @import "sync/condvar.sa"
25
+ @import "sync/mpsc_list.sa"
26
+ @import "collections/linked_list.sal"
27
+ @import "collections/linked_list.sa"
28
+
29
+ @import "core/trait_object.sal"
30
+ @import "core/trait_object.sa"
31
+ @import "core/waker.sal"
32
+ @import "core/waker.sa"
33
+ @import "core/future.sal"
34
+ @import "core/future.sa"
35
+ @import "core/task.sal"
36
+ @import "core/task.sa"
37
+ @import "core/option.sal"
38
+ @import "core/option.sa"
39
+ @import "core/result.sal"
40
+ @import "core/result.sa"
41
+ @import "core/dispatch.sal"
42
+ @import "core/dispatch.sa"
43
+ @import "core/panic.sa"
44
+ @import "core/iter.sal"
45
+ @import "core/iter.sa"
46
+ @import "core/loop.sa"
47
+ @import "core/control.sa"
48
+ @import "core/hash.sa"
49
+ @import "core/cleanup.sa"
50
+ @import "core/ascii.sal"
51
+ @import "core/ascii.sa"
@@ -0,0 +1,26 @@
1
+ @import "core/cell.sal"
2
+ @import "core/refcell.sal"
3
+ @import "core/rc.sal"
4
+ @import "core/weak.sal"
5
+ @import "core/trait_object.sal"
6
+ @import "core/waker.sal"
7
+ @import "core/future.sal"
8
+ @import "core/task.sal"
9
+ @import "core/option.sal"
10
+ @import "core/result.sal"
11
+ @import "core/iter.sal"
12
+
13
+ #def RustCore_VERSION = 1
14
+ #def RustCore_SUPPORTS_OPTION = 1
15
+ #def RustCore_SUPPORTS_RESULT = 1
16
+ #def RustCore_SUPPORTS_PANIC = 1
17
+ #def RustCore_SUPPORTS_ITER = 1
18
+ #def RustCore_SUPPORTS_CELL = 1
19
+ #def RustCore_SUPPORTS_REFCELL = 1
20
+ #def RustCore_SUPPORTS_RC = 1
21
+ #def RustCore_SUPPORTS_WEAK = 1
22
+ #def RustCore_SUPPORTS_TRAIT_OBJECT = 1
23
+ #def RustCore_SUPPORTS_WAKER = 1
24
+ #def RustCore_SUPPORTS_FUTURE = 1
25
+ #def RustCore_SUPPORTS_TASK = 1
26
+ #def RustCore_SUPPORTS_ASCII = 1
package/sa_std/sa.mod ADDED
@@ -0,0 +1,7 @@
1
+ # sa_std package manifest
2
+ #
3
+ # The compiler-shipped standard library is sourced from this repo tree.
4
+ # The package declaration makes the boundary explicit for sa.pkg resolution;
5
+ # dependency, version, feature, and ABI-release fields remain unsupported by
6
+ # the current manifest grammar and are documented as architecture follow-up.
7
+ package "sa_std"