@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,25 @@
1
+ @extern sa_str_is_ascii(ptr: ptr, len: u64) -> i32
2
+ @extern sa_str_eq_ignore_ascii_case(left: ptr, left_len: u64, right: ptr, right_len: u64) -> i32
3
+ @extern sa_str_trim_ascii_start_index(ptr: ptr, len: u64) -> u64
4
+ @extern sa_str_trim_ascii_end_len(ptr: ptr, len: u64) -> u64
5
+ @extern sa_str_utf8_char_count(ptr: ptr, len: u64) -> u64
6
+ @extern sa_str_utf8_validate(ptr: ptr, len: u64) -> i32
7
+ @extern sa_str_utf8_char_at(ptr: ptr, len: u64, char_index: u64, out_codepoint: ptr) -> i32
8
+ @extern sa_str_utf8_char_at_byte(ptr: ptr, len: u64, byte_index: u64, out_codepoint: ptr, out_len: ptr) -> i32
9
+ @extern sa_str_utf8_lossy_next(ptr: ptr, len: u64, byte_index: u64, out_codepoint: ptr, out_len: ptr) -> i32
10
+ @extern sa_str_utf8_char_range_at(ptr: ptr, len: u64, char_index: u64, out_start: ptr, out_len: ptr) -> i32
11
+ @extern sa_string_concat(left: ptr, left_len: u64, right: ptr, right_len: u64) -> u64
12
+ @extern sa_string_from_char_code(code: i32) -> u64
13
+ @extern sa_string_index_of(hay_ptr: ptr, hay_len: u64, ndl_ptr: ptr, ndl_len: u64, from: u64) -> i32
14
+ @extern sa_string_last_index_of(hay_ptr: ptr, hay_len: u64, ndl_ptr: ptr, ndl_len: u64, from: u64) -> i32
15
+ @extern sa_string_starts_with(hay_ptr: ptr, hay_len: u64, ndl_ptr: ptr, ndl_len: u64) -> i32
16
+ @extern sa_string_ends_with(hay_ptr: ptr, hay_len: u64, ndl_ptr: ptr, ndl_len: u64) -> i32
17
+ @extern sa_string_to_lower_ascii(ptr: ptr, len: u64) -> u64
18
+ @extern sa_string_to_upper_ascii(ptr: ptr, len: u64) -> u64
19
+ @extern sa_parse_float(ptr: ptr, len: u64) -> f64
20
+ @extern sa_string_repeat(ptr: ptr, len: u64, count: u64) -> u64
21
+ @extern sa_string_pad_start(ptr: ptr, len: u64, target_len: u64, pad_ptr: ptr, pad_len: u64) -> u64
22
+ @extern sa_string_pad_end(ptr: ptr, len: u64, target_len: u64, pad_ptr: ptr, pad_len: u64) -> u64
23
+ @extern sa_string_replace(hay_ptr: ptr, hay_len: u64, ndl_ptr: ptr, ndl_len: u64, rep_ptr: ptr, rep_len: u64, all: u64) -> u64
24
+ @extern sa_string_code_point_at(ptr: ptr, len: u64, idx: u64) -> i32
25
+ @extern sa_string_from_code_point(code: i32) -> u64
@@ -0,0 +1,17 @@
1
+ @import "alloc/vec.sal"
2
+ @import "ffi.sal"
3
+
4
+ #def FromUtf8Error_SIZE = 40
5
+ #def FromUtf8Error_ALIGN = 8
6
+ #def FromUtf8Error_bytes = +0
7
+ #def FromUtf8Error_error = +24
8
+ #def FromUtf8Error_utf8_error = FromUtf8Error_error
9
+
10
+ #def FromUtf16Error_SIZE = 8
11
+ #def FromUtf16Error_ALIGN = 8
12
+ #def FromUtf16Error_kind = +0
13
+ #def FROM_UTF16_ERROR_LONE_SURROGATE = 0
14
+ #def FROM_UTF16_ERROR_ODD_BYTES = 1
15
+
16
+ #def ParseBoolError_SIZE = 0
17
+ #def ParseBoolError_ALIGN = 1
@@ -0,0 +1,269 @@
1
+ @import "fmt.sai"
2
+ @import "io.sai"
3
+ @import "vec.sa"
4
+ @import "core/slice.sal"
5
+ @import "core/slice.sa"
6
+
7
+ @const FORMAT_NEWLINE = utf8:"\n"
8
+
9
+ [MACRO] STRFMT_I64 %out_buf, %value, %base
10
+ %out_buf = call @sa_fmt_i64(%value, %base)
11
+ [END_MACRO]
12
+
13
+ [MACRO] STRFMT_U64 %out_buf, %value, %base
14
+ %out_buf = call @sa_fmt_u64(%value, %base)
15
+ [END_MACRO]
16
+
17
+ // Rust method-name alias over STRFMT_U64.
18
+ [MACRO] STRFMT %out_buf, %value, %base
19
+ EXPAND STRFMT_U64 %out_buf, %value, %base
20
+ [END_MACRO]
21
+
22
+ [MACRO] STRFMT_F64 %out_buf, %value, %precision
23
+ %out_buf = call @sa_fmt_f64(%value, %precision)
24
+ [END_MACRO]
25
+
26
+ [MACRO] STRFMT_BOOL %out_buf, %value
27
+ %out_buf = call @sa_fmt_bool(%value)
28
+ [END_MACRO]
29
+
30
+ [MACRO] STRFMT_BYTES %out_buf, %buf, %len
31
+ %out_buf = call @sa_fmt_bytes(&%buf, %len)
32
+ [END_MACRO]
33
+
34
+ [MACRO] STRFMT_I64_INTO %out_ok, %out_len_ptr, %value, %base, %buf, %cap
35
+ %out_ok = call @sa_fmt_i64_into(%value, %base, %buf, %cap, &%out_len_ptr)
36
+ [END_MACRO]
37
+
38
+ [MACRO] STRFMT_U64_INTO %out_ok, %out_len_ptr, %value, %base, %buf, %cap
39
+ %out_ok = call @sa_fmt_u64_into(%value, %base, %buf, %cap, &%out_len_ptr)
40
+ [END_MACRO]
41
+
42
+ [MACRO] STRFMT_F64_INTO %out_ok, %out_len_ptr, %value, %precision, %buf, %cap
43
+ %out_ok = call @sa_fmt_f64_into(%value, %precision, %buf, %cap, &%out_len_ptr)
44
+ [END_MACRO]
45
+
46
+ [MACRO] STRFMT_BOOL_INTO %out_ok, %out_len_ptr, %value, %buf, %cap
47
+ %out_ok = call @sa_fmt_bool_into(%value, %buf, %cap, &%out_len_ptr)
48
+ [END_MACRO]
49
+
50
+ [MACRO] STRFMT_BYTES_INTO %out_ok, %out_len_ptr, %src, %src_len, %buf, %cap
51
+ %out_ok = call @sa_fmt_bytes_into(&%src, %src_len, %buf, %cap, &%out_len_ptr)
52
+ [END_MACRO]
53
+
54
+ [MACRO] STRFMT_DATA %out_ptr, %buffer
55
+ %out_ptr = call @sa_fmt_buffer_data(%buffer)
56
+ [END_MACRO]
57
+
58
+ [MACRO] STRFMT_LEN %out_len, %buffer
59
+ %out_len = call @sa_fmt_buffer_len(%buffer)
60
+ [END_MACRO]
61
+
62
+ [MACRO] STRFMT_WRITE_TO %out_ok, %buffer, %writer
63
+ %out_ok = call @sa_fmt_buffer_write_to(%buffer, %writer)
64
+ [END_MACRO]
65
+
66
+ [MACRO] STRFMT_FREE %out_ok, %buffer
67
+ %out_ok = call @sa_fmt_buffer_free(^%buffer)
68
+ [END_MACRO]
69
+
70
+ [MACRO] FORMAT_BEGIN %out_string, %capacity
71
+ %out_string = call @sa_vec_with_capacity(%capacity, 1)
72
+ [END_MACRO]
73
+
74
+ [MACRO] FORMAT_PUSH_BYTES %tag, %string_reg, %src_ptr, %src_len
75
+ %string_reg = call @sa_vec_reserve(^%string_reg, %src_len, 1)
76
+ __format_view_%tag = & %string_reg
77
+ __format_dst_buf_%tag = load __format_view_%tag+Vec_ptr as ptr
78
+ __format_dst_len_%tag = load __format_view_%tag+Vec_len as u64
79
+ __format_dst_ptr_%tag = ptr_add __format_dst_buf_%tag, __format_dst_len_%tag
80
+ call @sa_mem_copy(&__format_dst_ptr_%tag, &%src_ptr, %src_len)
81
+ __format_next_len_%tag = add __format_dst_len_%tag, %src_len
82
+ store __format_view_%tag+Vec_len, __format_next_len_%tag as u64
83
+ !__format_next_len_%tag
84
+ !__format_dst_ptr_%tag
85
+ !__format_dst_len_%tag
86
+ !__format_dst_buf_%tag
87
+ !__format_view_%tag
88
+ [END_MACRO]
89
+
90
+ [MACRO] FORMAT_PUSH_SLICE %tag, %string_reg, %slice_reg
91
+ __format_slice_ptr_%tag = load %slice_reg+Slice_ptr as ptr
92
+ __format_slice_len_%tag = load %slice_reg+Slice_len as u64
93
+ EXPAND FORMAT_PUSH_BYTES %tag, %string_reg, __format_slice_ptr_%tag, __format_slice_len_%tag
94
+ !__format_slice_len_%tag
95
+ !__format_slice_ptr_%tag
96
+ [END_MACRO]
97
+
98
+ [MACRO] FORMAT_PUSH_I64 %tag, %string_reg, %value
99
+ EXPAND STRFMT_I64 __format_fmt_buf_%tag, %value, 10
100
+ EXPAND STRFMT_DATA __format_fmt_ptr_%tag, __format_fmt_buf_%tag
101
+ EXPAND STRFMT_LEN __format_fmt_len_%tag, __format_fmt_buf_%tag
102
+ EXPAND FORMAT_PUSH_BYTES %tag, %string_reg, __format_fmt_ptr_%tag, __format_fmt_len_%tag
103
+ EXPAND STRFMT_FREE __format_fmt_free_ok_%tag, __format_fmt_buf_%tag
104
+ !__format_fmt_free_ok_%tag
105
+ !__format_fmt_len_%tag
106
+ !__format_fmt_ptr_%tag
107
+ [END_MACRO]
108
+
109
+ [MACRO] FORMAT_PUSH_U64 %tag, %string_reg, %value
110
+ EXPAND STRFMT_U64 __format_fmt_buf_%tag, %value, 10
111
+ EXPAND STRFMT_DATA __format_fmt_ptr_%tag, __format_fmt_buf_%tag
112
+ EXPAND STRFMT_LEN __format_fmt_len_%tag, __format_fmt_buf_%tag
113
+ EXPAND FORMAT_PUSH_BYTES %tag, %string_reg, __format_fmt_ptr_%tag, __format_fmt_len_%tag
114
+ EXPAND STRFMT_FREE __format_fmt_free_ok_%tag, __format_fmt_buf_%tag
115
+ !__format_fmt_free_ok_%tag
116
+ !__format_fmt_len_%tag
117
+ !__format_fmt_ptr_%tag
118
+ [END_MACRO]
119
+
120
+ // Rust method-name alias over FORMAT_PUSH_U64.
121
+ [MACRO] FORMAT_PUSH %tag, %string_reg, %value
122
+ EXPAND FORMAT_PUSH_U64 %tag, %string_reg, %value
123
+ [END_MACRO]
124
+
125
+ [MACRO] FORMAT_PUSH_F64 %tag, %string_reg, %value, %precision
126
+ EXPAND STRFMT_F64 __format_fmt_buf_%tag, %value, %precision
127
+ EXPAND STRFMT_DATA __format_fmt_ptr_%tag, __format_fmt_buf_%tag
128
+ EXPAND STRFMT_LEN __format_fmt_len_%tag, __format_fmt_buf_%tag
129
+ EXPAND FORMAT_PUSH_BYTES %tag, %string_reg, __format_fmt_ptr_%tag, __format_fmt_len_%tag
130
+ EXPAND STRFMT_FREE __format_fmt_free_ok_%tag, __format_fmt_buf_%tag
131
+ !__format_fmt_free_ok_%tag
132
+ !__format_fmt_len_%tag
133
+ !__format_fmt_ptr_%tag
134
+ [END_MACRO]
135
+
136
+ [MACRO] FORMAT_PUSH_BOOL %tag, %string_reg, %value
137
+ EXPAND STRFMT_BOOL __format_fmt_buf_%tag, %value
138
+ EXPAND STRFMT_DATA __format_fmt_ptr_%tag, __format_fmt_buf_%tag
139
+ EXPAND STRFMT_LEN __format_fmt_len_%tag, __format_fmt_buf_%tag
140
+ EXPAND FORMAT_PUSH_BYTES %tag, %string_reg, __format_fmt_ptr_%tag, __format_fmt_len_%tag
141
+ EXPAND STRFMT_FREE __format_fmt_free_ok_%tag, __format_fmt_buf_%tag
142
+ !__format_fmt_free_ok_%tag
143
+ !__format_fmt_len_%tag
144
+ !__format_fmt_ptr_%tag
145
+ [END_MACRO]
146
+
147
+ [MACRO] FORMAT_AS_STR %out_slice, %string_reg
148
+ __format_as_str_view_%out_slice = & %string_reg
149
+ __format_as_str_ptr_%out_slice = load __format_as_str_view_%out_slice+Vec_ptr as ptr
150
+ __format_as_str_len_%out_slice = load __format_as_str_view_%out_slice+Vec_len as u64
151
+ %out_slice = alloc Slice_SIZE
152
+ EXPAND SLICE_NEW %out_slice, __format_as_str_ptr_%out_slice, __format_as_str_len_%out_slice
153
+ !__format_as_str_len_%out_slice
154
+ !__format_as_str_ptr_%out_slice
155
+ !__format_as_str_view_%out_slice
156
+ [END_MACRO]
157
+
158
+ [MACRO] FORMAT_FREE %string_reg
159
+ call @sa_vec_free(^%string_reg)
160
+ [END_MACRO]
161
+
162
+ // Fixed-arity formatting facades for the common Rust/std scalar surfaces.
163
+ [MACRO] FORMAT_U64_TO_STRING %out_buf, %value
164
+ EXPAND STRFMT_U64 %out_buf, %value, 10
165
+ [END_MACRO]
166
+
167
+ [MACRO] FORMAT_I64_TO_STRING %out_buf, %value
168
+ EXPAND STRFMT_I64 %out_buf, %value, 10
169
+ [END_MACRO]
170
+
171
+ [MACRO] FORMAT_F64_TO_STRING %out_buf, %value, %precision
172
+ EXPAND STRFMT_F64 %out_buf, %value, %precision
173
+ [END_MACRO]
174
+
175
+ [MACRO] FORMAT_BOOL_TO_STRING %out_buf, %value
176
+ EXPAND STRFMT_BOOL %out_buf, %value
177
+ [END_MACRO]
178
+
179
+ // Bare aliases default to the u64 concrete lowering, matching the existing
180
+ // method-name alias convention used throughout sa_std.
181
+ [MACRO] FORMAT_TO_STRING %out_buf, %value
182
+ EXPAND FORMAT_U64_TO_STRING %out_buf, %value
183
+ [END_MACRO]
184
+
185
+ // Concrete formatted writes. The returned status is zero on success; the
186
+ // writeln variants combine the value and newline write statuses.
187
+ [MACRO] FORMAT_WRITE_U64 %out_status, %handle, %value
188
+ EXPAND FORMAT_U64_TO_STRING __format_write_u64_buf_%out_status, %value
189
+ EXPAND STRFMT_DATA __format_write_u64_ptr_%out_status, __format_write_u64_buf_%out_status
190
+ EXPAND STRFMT_LEN __format_write_u64_len_%out_status, __format_write_u64_buf_%out_status
191
+ %out_status = call @sa_io_write_all(%handle, __format_write_u64_ptr_%out_status, __format_write_u64_len_%out_status)
192
+ EXPAND STRFMT_FREE __format_write_u64_free_%out_status, __format_write_u64_buf_%out_status
193
+ !__format_write_u64_free_%out_status
194
+ !__format_write_u64_len_%out_status
195
+ !__format_write_u64_ptr_%out_status
196
+ [END_MACRO]
197
+
198
+ [MACRO] FORMAT_WRITE_I64 %out_status, %handle, %value
199
+ EXPAND FORMAT_I64_TO_STRING __format_write_i64_buf_%out_status, %value
200
+ EXPAND STRFMT_DATA __format_write_i64_ptr_%out_status, __format_write_i64_buf_%out_status
201
+ EXPAND STRFMT_LEN __format_write_i64_len_%out_status, __format_write_i64_buf_%out_status
202
+ %out_status = call @sa_io_write_all(%handle, __format_write_i64_ptr_%out_status, __format_write_i64_len_%out_status)
203
+ EXPAND STRFMT_FREE __format_write_i64_free_%out_status, __format_write_i64_buf_%out_status
204
+ !__format_write_i64_free_%out_status
205
+ !__format_write_i64_len_%out_status
206
+ !__format_write_i64_ptr_%out_status
207
+ [END_MACRO]
208
+
209
+ [MACRO] FORMAT_WRITE_F64 %out_status, %handle, %value, %precision
210
+ EXPAND FORMAT_F64_TO_STRING __format_write_f64_buf_%out_status, %value, %precision
211
+ EXPAND STRFMT_DATA __format_write_f64_ptr_%out_status, __format_write_f64_buf_%out_status
212
+ EXPAND STRFMT_LEN __format_write_f64_len_%out_status, __format_write_f64_buf_%out_status
213
+ %out_status = call @sa_io_write_all(%handle, __format_write_f64_ptr_%out_status, __format_write_f64_len_%out_status)
214
+ EXPAND STRFMT_FREE __format_write_f64_free_%out_status, __format_write_f64_buf_%out_status
215
+ !__format_write_f64_free_%out_status
216
+ !__format_write_f64_len_%out_status
217
+ !__format_write_f64_ptr_%out_status
218
+ [END_MACRO]
219
+
220
+ [MACRO] FORMAT_WRITE_BOOL %out_status, %handle, %value
221
+ EXPAND FORMAT_BOOL_TO_STRING __format_write_bool_buf_%out_status, %value
222
+ EXPAND STRFMT_DATA __format_write_bool_ptr_%out_status, __format_write_bool_buf_%out_status
223
+ EXPAND STRFMT_LEN __format_write_bool_len_%out_status, __format_write_bool_buf_%out_status
224
+ %out_status = call @sa_io_write_all(%handle, __format_write_bool_ptr_%out_status, __format_write_bool_len_%out_status)
225
+ EXPAND STRFMT_FREE __format_write_bool_free_%out_status, __format_write_bool_buf_%out_status
226
+ !__format_write_bool_free_%out_status
227
+ !__format_write_bool_len_%out_status
228
+ !__format_write_bool_ptr_%out_status
229
+ [END_MACRO]
230
+
231
+ [MACRO] FORMAT_WRITELN_U64 %out_status, %handle, %value
232
+ EXPAND FORMAT_WRITE_U64 __format_writeln_u64_value_status_%out_status, %handle, %value
233
+ __format_writeln_u64_newline_status_%out_status = call @sa_io_write_all(%handle, &FORMAT_NEWLINE, 1)
234
+ %out_status = add __format_writeln_u64_value_status_%out_status, __format_writeln_u64_newline_status_%out_status
235
+ !__format_writeln_u64_value_status_%out_status
236
+ !__format_writeln_u64_newline_status_%out_status
237
+ [END_MACRO]
238
+
239
+ [MACRO] FORMAT_WRITELN_I64 %out_status, %handle, %value
240
+ EXPAND FORMAT_WRITE_I64 __format_writeln_i64_value_status_%out_status, %handle, %value
241
+ __format_writeln_i64_newline_status_%out_status = call @sa_io_write_all(%handle, &FORMAT_NEWLINE, 1)
242
+ %out_status = add __format_writeln_i64_value_status_%out_status, __format_writeln_i64_newline_status_%out_status
243
+ !__format_writeln_i64_value_status_%out_status
244
+ !__format_writeln_i64_newline_status_%out_status
245
+ [END_MACRO]
246
+
247
+ [MACRO] FORMAT_WRITELN_F64 %out_status, %handle, %value, %precision
248
+ EXPAND FORMAT_WRITE_F64 __format_writeln_f64_value_status_%out_status, %handle, %value, %precision
249
+ __format_writeln_f64_newline_status_%out_status = call @sa_io_write_all(%handle, &FORMAT_NEWLINE, 1)
250
+ %out_status = add __format_writeln_f64_value_status_%out_status, __format_writeln_f64_newline_status_%out_status
251
+ !__format_writeln_f64_value_status_%out_status
252
+ !__format_writeln_f64_newline_status_%out_status
253
+ [END_MACRO]
254
+
255
+ [MACRO] FORMAT_WRITELN_BOOL %out_status, %handle, %value
256
+ EXPAND FORMAT_WRITE_BOOL __format_writeln_bool_value_status_%out_status, %handle, %value
257
+ __format_writeln_bool_newline_status_%out_status = call @sa_io_write_all(%handle, &FORMAT_NEWLINE, 1)
258
+ %out_status = add __format_writeln_bool_value_status_%out_status, __format_writeln_bool_newline_status_%out_status
259
+ !__format_writeln_bool_value_status_%out_status
260
+ !__format_writeln_bool_newline_status_%out_status
261
+ [END_MACRO]
262
+
263
+ [MACRO] FORMAT_WRITE %out_status, %handle, %value
264
+ EXPAND FORMAT_WRITE_U64 %out_status, %handle, %value
265
+ [END_MACRO]
266
+
267
+ [MACRO] FORMAT_WRITELN %out_status, %handle, %value
268
+ EXPAND FORMAT_WRITELN_U64 %out_status, %handle, %value
269
+ [END_MACRO]