@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
package/sa_std/io.sa ADDED
@@ -0,0 +1,925 @@
1
+ @import "io.sal"
2
+ @import "fmt.sai"
3
+ @import "io.sai"
4
+ @import "core/mem.sa"
5
+ @import "string.sai"
6
+ @import "os/fd.sa"
7
+
8
+ @const IO_NEWLINE = utf8:"\n"
9
+
10
+ [MACRO] PRINT %msg, %len
11
+ call @sa_print_bytes(&%msg, %len)
12
+ [END_MACRO]
13
+
14
+ [MACRO] PRINTLN %msg, %len
15
+ call @sa_print_bytes(&%msg, %len)
16
+ call @sa_print_bytes(&IO_NEWLINE, 1)
17
+ [END_MACRO]
18
+
19
+ [MACRO] WRITE %handle, %msg, %len
20
+ call @sa_io_write_all(%handle, &%msg, %len)
21
+ [END_MACRO]
22
+
23
+ [MACRO] WRITELN %handle, %msg, %len
24
+ call @sa_io_write_all(%handle, &%msg, %len)
25
+ call @sa_io_write_all(%handle, &IO_NEWLINE, 1)
26
+ [END_MACRO]
27
+
28
+ [MACRO] IO_STDIN %out_handle
29
+ %out_handle = call @sa_io_stdin()
30
+ [END_MACRO]
31
+
32
+ [MACRO] IO_STDOUT %out_handle
33
+ %out_handle = call @sa_io_stdout()
34
+ [END_MACRO]
35
+
36
+ [MACRO] IO_STDERR %out_handle
37
+ %out_handle = call @sa_io_stderr()
38
+ [END_MACRO]
39
+
40
+ [MACRO] IO_STDIN_AS_RAW_FD %out_status, %out_fd
41
+ __io_stdin_handle_%out_status = call @sa_io_stdin()
42
+ EXPAND FD_AS_RAW %out_status, %out_fd, __io_stdin_handle_%out_status
43
+ !__io_stdin_handle_%out_status
44
+ [END_MACRO]
45
+
46
+ [MACRO] IO_STDIN_AS_FD %out_status, %out_fd
47
+ __io_stdin_handle_%out_status = call @sa_io_stdin()
48
+ EXPAND FD_AS_RAW %out_status, %out_fd, __io_stdin_handle_%out_status
49
+ !__io_stdin_handle_%out_status
50
+ [END_MACRO]
51
+
52
+ [MACRO] IO_STDOUT_AS_RAW_FD %out_status, %out_fd
53
+ __io_stdout_handle_%out_status = call @sa_io_stdout()
54
+ EXPAND FD_AS_RAW %out_status, %out_fd, __io_stdout_handle_%out_status
55
+ !__io_stdout_handle_%out_status
56
+ [END_MACRO]
57
+
58
+ [MACRO] IO_STDOUT_AS_FD %out_status, %out_fd
59
+ __io_stdout_handle_%out_status = call @sa_io_stdout()
60
+ EXPAND FD_AS_RAW %out_status, %out_fd, __io_stdout_handle_%out_status
61
+ !__io_stdout_handle_%out_status
62
+ [END_MACRO]
63
+
64
+ [MACRO] IO_STDERR_AS_RAW_FD %out_status, %out_fd
65
+ __io_stderr_handle_%out_status = call @sa_io_stderr()
66
+ EXPAND FD_AS_RAW %out_status, %out_fd, __io_stderr_handle_%out_status
67
+ !__io_stderr_handle_%out_status
68
+ [END_MACRO]
69
+
70
+ [MACRO] IO_STDERR_AS_FD %out_status, %out_fd
71
+ __io_stderr_handle_%out_status = call @sa_io_stderr()
72
+ EXPAND FD_AS_RAW %out_status, %out_fd, __io_stderr_handle_%out_status
73
+ !__io_stderr_handle_%out_status
74
+ [END_MACRO]
75
+
76
+ [MACRO] EPRINT %msg, %len
77
+ __eprint_handle = call @sa_io_stderr()
78
+ EXPAND WRITE __eprint_handle, %msg, %len
79
+ !__eprint_handle
80
+ [END_MACRO]
81
+
82
+ [MACRO] EPRINTLN %msg, %len
83
+ __eprintln_handle = call @sa_io_stderr()
84
+ EXPAND WRITELN __eprintln_handle, %msg, %len
85
+ !__eprintln_handle
86
+ [END_MACRO]
87
+
88
+ [MACRO] READ_LINE %out_buf, %handle, %max_bytes
89
+ __read_line = call @sa_io_read_line(%handle, %max_bytes)
90
+ %out_buf = ? __read_line
91
+ !__read_line
92
+ [END_MACRO]
93
+
94
+ [MACRO] IO_READ_LINE %out_buf, %handle, %max_bytes
95
+ EXPAND READ_LINE %out_buf, %handle, %max_bytes
96
+ [END_MACRO]
97
+
98
+ [MACRO] READ %out_len, %handle, %buf, %cap
99
+ __read_len_slot = stack_alloc 8
100
+ __read_status = call @sa_io_read(%handle, &%buf, %cap, &__read_len_slot)
101
+ %out_len = load __read_len_slot+0 as u64
102
+ !__read_status
103
+ [END_MACRO]
104
+
105
+ [MACRO] IO_READ_SOME %out_len, %handle, %buf, %cap
106
+ EXPAND READ %out_len, %handle, %buf, %cap
107
+ [END_MACRO]
108
+
109
+ [MACRO] WRITE_SOME %out_len, %handle, %buf, %len
110
+ __write_len_slot = stack_alloc 8
111
+ __write_status = call @sa_io_write(%handle, &%buf, %len, &__write_len_slot)
112
+ %out_len = load __write_len_slot+0 as u64
113
+ !__write_status
114
+ [END_MACRO]
115
+
116
+ [MACRO] IO_WRITE_SOME %out_len, %handle, %buf, %len
117
+ EXPAND WRITE_SOME %out_len, %handle, %buf, %len
118
+ [END_MACRO]
119
+
120
+ [MACRO] FORMAT_INT %out_buf, %value, %base
121
+ %out_buf = call @sa_fmt_i64(%value, %base)
122
+ [END_MACRO]
123
+
124
+ [MACRO] IO_ERROR_KIND_FROM_STATUS %out_kind, %status
125
+ __io_kind_eof_%out_kind = eq %status, SA_IO_ERR_EOF
126
+ br __io_kind_eof_%out_kind -> L_IO_KIND_EOF_%out_kind, L_IO_KIND_WOULD_BLOCK_CHECK_%out_kind
127
+
128
+ L_IO_KIND_EOF_%out_kind:
129
+ %out_kind = add 0, IO_ERROR_KIND_UNEXPECTED_EOF
130
+ !__io_kind_eof_%out_kind
131
+ jmp L_IO_KIND_END_%out_kind
132
+
133
+ L_IO_KIND_WOULD_BLOCK_CHECK_%out_kind:
134
+ __io_kind_would_block_%out_kind = eq %status, SA_IO_ERR_WOULD_BLOCK
135
+ br __io_kind_would_block_%out_kind -> L_IO_KIND_WOULD_BLOCK_%out_kind, L_IO_KIND_INTERRUPTED_CHECK_%out_kind
136
+
137
+ L_IO_KIND_WOULD_BLOCK_%out_kind:
138
+ %out_kind = add 0, IO_ERROR_KIND_WOULD_BLOCK
139
+ !__io_kind_would_block_%out_kind
140
+ !__io_kind_eof_%out_kind
141
+ jmp L_IO_KIND_END_%out_kind
142
+
143
+ L_IO_KIND_INTERRUPTED_CHECK_%out_kind:
144
+ __io_kind_interrupted_%out_kind = eq %status, SA_IO_ERR_INTERRUPTED
145
+ br __io_kind_interrupted_%out_kind -> L_IO_KIND_INTERRUPTED_%out_kind, L_IO_KIND_INVALID_CHECK_%out_kind
146
+
147
+ L_IO_KIND_INTERRUPTED_%out_kind:
148
+ %out_kind = add 0, IO_ERROR_KIND_INTERRUPTED
149
+ !__io_kind_interrupted_%out_kind
150
+ !__io_kind_would_block_%out_kind
151
+ !__io_kind_eof_%out_kind
152
+ jmp L_IO_KIND_END_%out_kind
153
+
154
+ L_IO_KIND_INVALID_CHECK_%out_kind:
155
+ __io_kind_invalid_%out_kind = eq %status, SA_IO_ERR_INVALID_HANDLE
156
+ br __io_kind_invalid_%out_kind -> L_IO_KIND_INVALID_%out_kind, L_IO_KIND_INVALID_DATA_CHECK_%out_kind
157
+
158
+ L_IO_KIND_INVALID_%out_kind:
159
+ %out_kind = add 0, IO_ERROR_KIND_INVALID_INPUT
160
+ !__io_kind_invalid_%out_kind
161
+ !__io_kind_interrupted_%out_kind
162
+ !__io_kind_would_block_%out_kind
163
+ !__io_kind_eof_%out_kind
164
+ jmp L_IO_KIND_END_%out_kind
165
+
166
+ L_IO_KIND_INVALID_DATA_CHECK_%out_kind:
167
+ __io_kind_invalid_data_%out_kind = eq %status, SA_IO_ERR_INVALID_DATA
168
+ br __io_kind_invalid_data_%out_kind -> L_IO_KIND_INVALID_DATA_%out_kind, L_IO_KIND_OTHER_%out_kind
169
+
170
+ L_IO_KIND_INVALID_DATA_%out_kind:
171
+ %out_kind = add 0, IO_ERROR_KIND_INVALID_DATA
172
+ !__io_kind_invalid_data_%out_kind
173
+ !__io_kind_invalid_%out_kind
174
+ !__io_kind_interrupted_%out_kind
175
+ !__io_kind_would_block_%out_kind
176
+ !__io_kind_eof_%out_kind
177
+ jmp L_IO_KIND_END_%out_kind
178
+
179
+ L_IO_KIND_OTHER_%out_kind:
180
+ %out_kind = add 0, IO_ERROR_KIND_OTHER
181
+ !__io_kind_invalid_data_%out_kind
182
+ !__io_kind_invalid_%out_kind
183
+ !__io_kind_interrupted_%out_kind
184
+ !__io_kind_would_block_%out_kind
185
+ !__io_kind_eof_%out_kind
186
+
187
+ L_IO_KIND_END_%out_kind:
188
+ [END_MACRO]
189
+
190
+ [MACRO] IO_ERROR_KIND_IS_RETRYABLE %out_bool, %kind
191
+ __io_retry_would_block_%out_bool = eq %kind, IO_ERROR_KIND_WOULD_BLOCK
192
+ __io_retry_interrupted_%out_bool = eq %kind, IO_ERROR_KIND_INTERRUPTED
193
+ %out_bool = or __io_retry_would_block_%out_bool, __io_retry_interrupted_%out_bool
194
+ !__io_retry_interrupted_%out_bool
195
+ !__io_retry_would_block_%out_bool
196
+ [END_MACRO]
197
+
198
+ [MACRO] IO_SLICE_NEW %io_slice, %ptr, %len
199
+ store %io_slice+IoSlice_ptr, %ptr as ptr
200
+ store %io_slice+IoSlice_len, %len as u64
201
+ [END_MACRO]
202
+
203
+ [MACRO] IO_SLICE_AS_PTR %out_ptr, %io_slice
204
+ %out_ptr = load %io_slice+IoSlice_ptr as ptr
205
+ [END_MACRO]
206
+
207
+ [MACRO] IO_SLICE_LEN %out_len, %io_slice
208
+ %out_len = load %io_slice+IoSlice_len as u64
209
+ [END_MACRO]
210
+
211
+ [MACRO] IO_SLICE_IS_EMPTY %out_bool, %io_slice
212
+ __io_slice_len_%out_bool = load %io_slice+IoSlice_len as u64
213
+ %out_bool = eq __io_slice_len_%out_bool, 0
214
+ !__io_slice_len_%out_bool
215
+ [END_MACRO]
216
+
217
+ [MACRO] IO_SLICE_MUT_NEW %io_slice, %ptr, %len
218
+ store %io_slice+IoSliceMut_ptr, %ptr as ptr
219
+ store %io_slice+IoSliceMut_len, %len as u64
220
+ [END_MACRO]
221
+
222
+ [MACRO] IO_SLICE_MUT_AS_PTR %out_ptr, %io_slice
223
+ %out_ptr = load %io_slice+IoSliceMut_ptr as ptr
224
+ [END_MACRO]
225
+
226
+ [MACRO] IO_SLICE_MUT_LEN %out_len, %io_slice
227
+ %out_len = load %io_slice+IoSliceMut_len as u64
228
+ [END_MACRO]
229
+
230
+ [MACRO] IO_SLICE_MUT_IS_EMPTY %out_bool, %io_slice
231
+ __io_slice_mut_len_%out_bool = load %io_slice+IoSliceMut_len as u64
232
+ %out_bool = eq __io_slice_mut_len_%out_bool, 0
233
+ !__io_slice_mut_len_%out_bool
234
+ [END_MACRO]
235
+
236
+ [MACRO] IO_CURSOR_NEW %cursor, %ptr, %len
237
+ store %cursor+IoCursor_ptr, %ptr as ptr
238
+ store %cursor+IoCursor_len, %len as u64
239
+ store %cursor+IoCursor_pos, 0 as u64
240
+ [END_MACRO]
241
+
242
+ [MACRO] IO_CURSOR_AS_PTR %out_ptr, %cursor
243
+ %out_ptr = load %cursor+IoCursor_ptr as ptr
244
+ [END_MACRO]
245
+
246
+ [MACRO] IO_CURSOR_LEN %out_len, %cursor
247
+ %out_len = load %cursor+IoCursor_len as u64
248
+ [END_MACRO]
249
+
250
+ [MACRO] IO_CURSOR_IS_EMPTY %out_bool, %cursor
251
+ __io_cursor_len_%out_bool = load %cursor+IoCursor_len as u64
252
+ %out_bool = eq __io_cursor_len_%out_bool, 0
253
+ !__io_cursor_len_%out_bool
254
+ [END_MACRO]
255
+
256
+ [MACRO] IO_CURSOR_AS_SLICE %out_slice, %cursor
257
+ __io_cursor_ptr_%out_slice = load %cursor+IoCursor_ptr as ptr
258
+ __io_cursor_len_%out_slice = load %cursor+IoCursor_len as u64
259
+ store %out_slice+IoSlice_ptr, __io_cursor_ptr_%out_slice as ptr
260
+ store %out_slice+IoSlice_len, __io_cursor_len_%out_slice as u64
261
+ !__io_cursor_len_%out_slice
262
+ !__io_cursor_ptr_%out_slice
263
+ [END_MACRO]
264
+
265
+ [MACRO] IO_CURSOR_AS_MUT_SLICE %out_slice, %cursor
266
+ __io_cursor_ptr_%out_slice = load %cursor+IoCursor_ptr as ptr
267
+ __io_cursor_len_%out_slice = load %cursor+IoCursor_len as u64
268
+ store %out_slice+IoSliceMut_ptr, __io_cursor_ptr_%out_slice as ptr
269
+ store %out_slice+IoSliceMut_len, __io_cursor_len_%out_slice as u64
270
+ !__io_cursor_len_%out_slice
271
+ !__io_cursor_ptr_%out_slice
272
+ [END_MACRO]
273
+
274
+ [MACRO] IO_CURSOR_INTO_INNER %out_ptr, %out_len, %cursor
275
+ %out_ptr = load %cursor+IoCursor_ptr as ptr
276
+ %out_len = load %cursor+IoCursor_len as u64
277
+ [END_MACRO]
278
+
279
+ [MACRO] IO_CURSOR_POSITION %out_pos, %cursor
280
+ %out_pos = load %cursor+IoCursor_pos as u64
281
+ [END_MACRO]
282
+
283
+ [MACRO] IO_CURSOR_SET_POSITION %cursor, %pos
284
+ store %cursor+IoCursor_pos, %pos as u64
285
+ [END_MACRO]
286
+
287
+ [MACRO] IO_CURSOR_REMAINING %out_len, %cursor
288
+ __io_cursor_len_%out_len = load %cursor+IoCursor_len as u64
289
+ __io_cursor_pos_%out_len = load %cursor+IoCursor_pos as u64
290
+ __io_cursor_past_end_%out_len = uge __io_cursor_pos_%out_len, __io_cursor_len_%out_len
291
+ br __io_cursor_past_end_%out_len -> L_IO_CURSOR_REMAINING_ZERO_%out_len, L_IO_CURSOR_REMAINING_SUB_%out_len
292
+
293
+ L_IO_CURSOR_REMAINING_ZERO_%out_len:
294
+ %out_len = add 0, 0
295
+ !__io_cursor_past_end_%out_len
296
+ !__io_cursor_pos_%out_len
297
+ !__io_cursor_len_%out_len
298
+ jmp L_IO_CURSOR_REMAINING_END_%out_len
299
+
300
+ L_IO_CURSOR_REMAINING_SUB_%out_len:
301
+ %out_len = sub __io_cursor_len_%out_len, __io_cursor_pos_%out_len
302
+ !__io_cursor_past_end_%out_len
303
+ !__io_cursor_pos_%out_len
304
+ !__io_cursor_len_%out_len
305
+
306
+ L_IO_CURSOR_REMAINING_END_%out_len:
307
+ [END_MACRO]
308
+
309
+ [MACRO] IO_CURSOR_REMAINING_SLICE %out_slice, %cursor
310
+ EXPAND IO_CURSOR_REMAINING __io_cursor_remaining_slice_len_%out_slice, %cursor
311
+ __io_cursor_remaining_slice_base_%out_slice = load %cursor+IoCursor_ptr as ptr
312
+ __io_cursor_remaining_slice_pos_%out_slice = load %cursor+IoCursor_pos as u64
313
+ __io_cursor_remaining_slice_ptr_%out_slice = ptr_add __io_cursor_remaining_slice_base_%out_slice, __io_cursor_remaining_slice_pos_%out_slice
314
+ store %out_slice+IoSlice_ptr, __io_cursor_remaining_slice_ptr_%out_slice as ptr
315
+ store %out_slice+IoSlice_len, __io_cursor_remaining_slice_len_%out_slice as u64
316
+ !__io_cursor_remaining_slice_ptr_%out_slice
317
+ !__io_cursor_remaining_slice_pos_%out_slice
318
+ !__io_cursor_remaining_slice_base_%out_slice
319
+ !__io_cursor_remaining_slice_len_%out_slice
320
+ [END_MACRO]
321
+
322
+ [MACRO] IO_CURSOR_READ %out_len, %cursor, %dst_ptr, %cap
323
+ EXPAND IO_CURSOR_REMAINING __io_cursor_rem_%out_len, %cursor
324
+ __io_cursor_take_cap_%out_len = ule %cap, __io_cursor_rem_%out_len
325
+ br __io_cursor_take_cap_%out_len -> L_IO_CURSOR_READ_CAP_%out_len, L_IO_CURSOR_READ_REM_%out_len
326
+
327
+ L_IO_CURSOR_READ_CAP_%out_len:
328
+ %out_len = add %cap, 0
329
+ jmp L_IO_CURSOR_READ_COPY_%out_len
330
+
331
+ L_IO_CURSOR_READ_REM_%out_len:
332
+ %out_len = add __io_cursor_rem_%out_len, 0
333
+
334
+ L_IO_CURSOR_READ_COPY_%out_len:
335
+ __io_cursor_base_%out_len = load %cursor+IoCursor_ptr as ptr
336
+ __io_cursor_pos_%out_len = load %cursor+IoCursor_pos as u64
337
+ __io_cursor_src_%out_len = ptr_add __io_cursor_base_%out_len, __io_cursor_pos_%out_len
338
+ call @sa_mem_copy(&%dst_ptr, &__io_cursor_src_%out_len, %out_len)
339
+ __io_cursor_next_%out_len = add __io_cursor_pos_%out_len, %out_len
340
+ store %cursor+IoCursor_pos, __io_cursor_next_%out_len as u64
341
+ !__io_cursor_next_%out_len
342
+ !__io_cursor_src_%out_len
343
+ !__io_cursor_pos_%out_len
344
+ !__io_cursor_base_%out_len
345
+ !__io_cursor_take_cap_%out_len
346
+ !__io_cursor_rem_%out_len
347
+ [END_MACRO]
348
+
349
+ [MACRO] IO_CURSOR_READ_EXACT %out_status, %cursor, %dst_ptr, %len
350
+ EXPAND IO_CURSOR_REMAINING __io_cursor_exact_rem_%out_status, %cursor
351
+ __io_cursor_exact_fits_%out_status = ule %len, __io_cursor_exact_rem_%out_status
352
+ br __io_cursor_exact_fits_%out_status -> L_IO_CURSOR_READ_EXACT_OK_%out_status, L_IO_CURSOR_READ_EXACT_EOF_%out_status
353
+
354
+ L_IO_CURSOR_READ_EXACT_OK_%out_status:
355
+ EXPAND IO_CURSOR_READ __io_cursor_exact_read_%out_status, %cursor, %dst_ptr, %len
356
+ %out_status = add 0, SA_IO_OK
357
+ !__io_cursor_exact_read_%out_status
358
+ !__io_cursor_exact_fits_%out_status
359
+ !__io_cursor_exact_rem_%out_status
360
+ jmp L_IO_CURSOR_READ_EXACT_END_%out_status
361
+
362
+ L_IO_CURSOR_READ_EXACT_EOF_%out_status:
363
+ __io_cursor_exact_len_%out_status = load %cursor+IoCursor_len as u64
364
+ store %cursor+IoCursor_pos, __io_cursor_exact_len_%out_status as u64
365
+ %out_status = add 0, SA_IO_ERR_EOF
366
+ !__io_cursor_exact_len_%out_status
367
+ !__io_cursor_exact_fits_%out_status
368
+ !__io_cursor_exact_rem_%out_status
369
+
370
+ L_IO_CURSOR_READ_EXACT_END_%out_status:
371
+ [END_MACRO]
372
+
373
+ [MACRO] IO_CURSOR_FILL_BUF %out_status, %out_slice, %cursor
374
+ EXPAND IO_CURSOR_REMAINING_SLICE %out_slice, %cursor
375
+ %out_status = add 0, SA_IO_OK
376
+ [END_MACRO]
377
+
378
+ [MACRO] IO_CURSOR_CONSUME %cursor, %amt
379
+ __io_cursor_consume_pos_%cursor = load %cursor+IoCursor_pos as u64
380
+ __io_cursor_consume_next_%cursor = add __io_cursor_consume_pos_%cursor, %amt
381
+ store %cursor+IoCursor_pos, __io_cursor_consume_next_%cursor as u64
382
+ !__io_cursor_consume_next_%cursor
383
+ !__io_cursor_consume_pos_%cursor
384
+ [END_MACRO]
385
+
386
+ [MACRO] IO_CURSOR_READ_TO_END %out_len, %cursor, %dst_ptr, %cap
387
+ EXPAND IO_CURSOR_REMAINING __io_cursor_read_to_end_rem_%out_len, %cursor
388
+ __io_cursor_read_to_end_cap_%out_len = ule %cap, __io_cursor_read_to_end_rem_%out_len
389
+ br __io_cursor_read_to_end_cap_%out_len -> L_IO_CURSOR_READ_TO_END_CAP_%out_len, L_IO_CURSOR_READ_TO_END_REM_%out_len
390
+
391
+ L_IO_CURSOR_READ_TO_END_CAP_%out_len:
392
+ %out_len = add %cap, 0
393
+ jmp L_IO_CURSOR_READ_TO_END_COPY_%out_len
394
+
395
+ L_IO_CURSOR_READ_TO_END_REM_%out_len:
396
+ %out_len = add __io_cursor_read_to_end_rem_%out_len, 0
397
+
398
+ L_IO_CURSOR_READ_TO_END_COPY_%out_len:
399
+ __io_cursor_read_to_end_base_%out_len = load %cursor+IoCursor_ptr as ptr
400
+ __io_cursor_read_to_end_pos_%out_len = load %cursor+IoCursor_pos as u64
401
+ __io_cursor_read_to_end_src_%out_len = ptr_add __io_cursor_read_to_end_base_%out_len, __io_cursor_read_to_end_pos_%out_len
402
+ call @sa_mem_copy(&%dst_ptr, &__io_cursor_read_to_end_src_%out_len, %out_len)
403
+ __io_cursor_read_to_end_next_%out_len = add __io_cursor_read_to_end_pos_%out_len, %out_len
404
+ store %cursor+IoCursor_pos, __io_cursor_read_to_end_next_%out_len as u64
405
+ !__io_cursor_read_to_end_next_%out_len
406
+ !__io_cursor_read_to_end_src_%out_len
407
+ !__io_cursor_read_to_end_pos_%out_len
408
+ !__io_cursor_read_to_end_base_%out_len
409
+
410
+ L_IO_CURSOR_READ_TO_END_DONE_%out_len:
411
+ !__io_cursor_read_to_end_cap_%out_len
412
+ !__io_cursor_read_to_end_rem_%out_len
413
+ [END_MACRO]
414
+
415
+ [MACRO] IO_CURSOR_READ_TO_STRING %out_status, %out_slice, %cursor, %dst_ptr, %cap
416
+ EXPAND IO_CURSOR_READ_TO_END __io_cursor_read_to_string_len_%out_status, %cursor, %dst_ptr, %cap
417
+ EXPAND IO_SLICE_NEW %out_slice, %dst_ptr, __io_cursor_read_to_string_len_%out_status
418
+ __io_cursor_read_to_string_status_%out_status = call @sa_str_utf8_validate(&%dst_ptr, __io_cursor_read_to_string_len_%out_status)
419
+ __io_cursor_read_to_string_ok_%out_status = eq __io_cursor_read_to_string_status_%out_status, 0
420
+ br __io_cursor_read_to_string_ok_%out_status -> L_IO_CURSOR_READ_TO_STRING_OK_%out_status, L_IO_CURSOR_READ_TO_STRING_BAD_%out_status
421
+
422
+ L_IO_CURSOR_READ_TO_STRING_OK_%out_status:
423
+ %out_status = add 0, SA_IO_OK
424
+ !__io_cursor_read_to_string_ok_%out_status
425
+ !__io_cursor_read_to_string_status_%out_status
426
+ !__io_cursor_read_to_string_len_%out_status
427
+ jmp L_IO_CURSOR_READ_TO_STRING_END_%out_status
428
+
429
+ L_IO_CURSOR_READ_TO_STRING_BAD_%out_status:
430
+ %out_status = add 0, SA_IO_ERR_INVALID_DATA
431
+ __io_cursor_read_to_string_null_%out_status = 0 as ptr
432
+ EXPAND IO_SLICE_NEW %out_slice, __io_cursor_read_to_string_null_%out_status, 0
433
+ !__io_cursor_read_to_string_null_%out_status
434
+ !__io_cursor_read_to_string_ok_%out_status
435
+ !__io_cursor_read_to_string_status_%out_status
436
+ !__io_cursor_read_to_string_len_%out_status
437
+
438
+ L_IO_CURSOR_READ_TO_STRING_END_%out_status:
439
+ [END_MACRO]
440
+
441
+ [MACRO] IO_CURSOR_WRITE %out_len, %cursor, %src_ptr, %len
442
+ EXPAND IO_CURSOR_REMAINING __io_cursor_rem_%out_len, %cursor
443
+ __io_cursor_take_len_%out_len = ule %len, __io_cursor_rem_%out_len
444
+ br __io_cursor_take_len_%out_len -> L_IO_CURSOR_WRITE_LEN_%out_len, L_IO_CURSOR_WRITE_REM_%out_len
445
+
446
+ L_IO_CURSOR_WRITE_LEN_%out_len:
447
+ %out_len = add %len, 0
448
+ jmp L_IO_CURSOR_WRITE_COPY_%out_len
449
+
450
+ L_IO_CURSOR_WRITE_REM_%out_len:
451
+ %out_len = add __io_cursor_rem_%out_len, 0
452
+
453
+ L_IO_CURSOR_WRITE_COPY_%out_len:
454
+ __io_cursor_base_%out_len = load %cursor+IoCursor_ptr as ptr
455
+ __io_cursor_pos_%out_len = load %cursor+IoCursor_pos as u64
456
+ __io_cursor_dst_%out_len = ptr_add __io_cursor_base_%out_len, __io_cursor_pos_%out_len
457
+ call @sa_mem_copy(&__io_cursor_dst_%out_len, &%src_ptr, %out_len)
458
+ __io_cursor_next_%out_len = add __io_cursor_pos_%out_len, %out_len
459
+ store %cursor+IoCursor_pos, __io_cursor_next_%out_len as u64
460
+ !__io_cursor_next_%out_len
461
+ !__io_cursor_dst_%out_len
462
+ !__io_cursor_pos_%out_len
463
+ !__io_cursor_base_%out_len
464
+ !__io_cursor_take_len_%out_len
465
+ !__io_cursor_rem_%out_len
466
+ [END_MACRO]
467
+
468
+ [MACRO] IO_CURSOR_WRITE_ALL %out_status, %cursor, %src_ptr, %len
469
+ EXPAND IO_CURSOR_WRITE __io_cursor_write_all_len_%out_status, %cursor, %src_ptr, %len
470
+ __io_cursor_write_all_ok_%out_status = eq __io_cursor_write_all_len_%out_status, %len
471
+ br __io_cursor_write_all_ok_%out_status -> L_IO_CURSOR_WRITE_ALL_OK_%out_status, L_IO_CURSOR_WRITE_ALL_EOF_%out_status
472
+
473
+ L_IO_CURSOR_WRITE_ALL_OK_%out_status:
474
+ %out_status = add 0, SA_IO_OK
475
+ !__io_cursor_write_all_ok_%out_status
476
+ !__io_cursor_write_all_len_%out_status
477
+ jmp L_IO_CURSOR_WRITE_ALL_END_%out_status
478
+
479
+ L_IO_CURSOR_WRITE_ALL_EOF_%out_status:
480
+ %out_status = add 0, SA_IO_ERR_EOF
481
+ !__io_cursor_write_all_ok_%out_status
482
+ !__io_cursor_write_all_len_%out_status
483
+
484
+ L_IO_CURSOR_WRITE_ALL_END_%out_status:
485
+ [END_MACRO]
486
+
487
+ [MACRO] IO_CURSOR_SEEK_START %out_pos, %cursor, %pos
488
+ store %cursor+IoCursor_pos, %pos as u64
489
+ %out_pos = add %pos, 0
490
+ [END_MACRO]
491
+
492
+ [MACRO] IO_CURSOR_SEEK_CURRENT %out_pos, %cursor, %offset
493
+ __io_cursor_seek_pos_%out_pos = load %cursor+IoCursor_pos as u64
494
+ __io_cursor_seek_forward_%out_pos = sge %offset, 0
495
+ br __io_cursor_seek_forward_%out_pos -> L_IO_CURSOR_SEEK_CURRENT_FORWARD_%out_pos, L_IO_CURSOR_SEEK_CURRENT_BACK_%out_pos
496
+
497
+ L_IO_CURSOR_SEEK_CURRENT_FORWARD_%out_pos:
498
+ %out_pos = add __io_cursor_seek_pos_%out_pos, %offset
499
+ store %cursor+IoCursor_pos, %out_pos as u64
500
+ jmp L_IO_CURSOR_SEEK_CURRENT_DONE_%out_pos
501
+
502
+ L_IO_CURSOR_SEEK_CURRENT_BACK_%out_pos:
503
+ __io_cursor_seek_back_%out_pos = sub 0, %offset
504
+ __io_cursor_seek_can_sub_%out_pos = uge __io_cursor_seek_pos_%out_pos, __io_cursor_seek_back_%out_pos
505
+ br __io_cursor_seek_can_sub_%out_pos -> L_IO_CURSOR_SEEK_CURRENT_SUB_%out_pos, L_IO_CURSOR_SEEK_CURRENT_ZERO_%out_pos
506
+
507
+ L_IO_CURSOR_SEEK_CURRENT_SUB_%out_pos:
508
+ %out_pos = sub __io_cursor_seek_pos_%out_pos, __io_cursor_seek_back_%out_pos
509
+ store %cursor+IoCursor_pos, %out_pos as u64
510
+ !__io_cursor_seek_can_sub_%out_pos
511
+ !__io_cursor_seek_back_%out_pos
512
+ jmp L_IO_CURSOR_SEEK_CURRENT_DONE_%out_pos
513
+
514
+ L_IO_CURSOR_SEEK_CURRENT_ZERO_%out_pos:
515
+ %out_pos = add 0, 0
516
+ store %cursor+IoCursor_pos, %out_pos as u64
517
+ !__io_cursor_seek_can_sub_%out_pos
518
+ !__io_cursor_seek_back_%out_pos
519
+ jmp L_IO_CURSOR_SEEK_CURRENT_DONE_%out_pos
520
+
521
+ L_IO_CURSOR_SEEK_CURRENT_DONE_%out_pos:
522
+ !__io_cursor_seek_forward_%out_pos
523
+ !__io_cursor_seek_pos_%out_pos
524
+ [END_MACRO]
525
+
526
+ [MACRO] IO_CURSOR_SEEK_END %out_pos, %cursor, %offset
527
+ __io_cursor_seek_len_%out_pos = load %cursor+IoCursor_len as u64
528
+ __io_cursor_seek_forward_%out_pos = sge %offset, 0
529
+ br __io_cursor_seek_forward_%out_pos -> L_IO_CURSOR_SEEK_END_FORWARD_%out_pos, L_IO_CURSOR_SEEK_END_BACK_%out_pos
530
+
531
+ L_IO_CURSOR_SEEK_END_FORWARD_%out_pos:
532
+ %out_pos = add __io_cursor_seek_len_%out_pos, %offset
533
+ store %cursor+IoCursor_pos, %out_pos as u64
534
+ jmp L_IO_CURSOR_SEEK_END_DONE_%out_pos
535
+
536
+ L_IO_CURSOR_SEEK_END_BACK_%out_pos:
537
+ __io_cursor_seek_back_%out_pos = sub 0, %offset
538
+ __io_cursor_seek_can_sub_%out_pos = uge __io_cursor_seek_len_%out_pos, __io_cursor_seek_back_%out_pos
539
+ br __io_cursor_seek_can_sub_%out_pos -> L_IO_CURSOR_SEEK_END_SUB_%out_pos, L_IO_CURSOR_SEEK_END_ZERO_%out_pos
540
+
541
+ L_IO_CURSOR_SEEK_END_SUB_%out_pos:
542
+ %out_pos = sub __io_cursor_seek_len_%out_pos, __io_cursor_seek_back_%out_pos
543
+ store %cursor+IoCursor_pos, %out_pos as u64
544
+ !__io_cursor_seek_can_sub_%out_pos
545
+ !__io_cursor_seek_back_%out_pos
546
+ jmp L_IO_CURSOR_SEEK_END_DONE_%out_pos
547
+
548
+ L_IO_CURSOR_SEEK_END_ZERO_%out_pos:
549
+ %out_pos = add 0, 0
550
+ store %cursor+IoCursor_pos, %out_pos as u64
551
+ !__io_cursor_seek_can_sub_%out_pos
552
+ !__io_cursor_seek_back_%out_pos
553
+ jmp L_IO_CURSOR_SEEK_END_DONE_%out_pos
554
+
555
+ L_IO_CURSOR_SEEK_END_DONE_%out_pos:
556
+ !__io_cursor_seek_forward_%out_pos
557
+ !__io_cursor_seek_len_%out_pos
558
+ [END_MACRO]
559
+
560
+ [MACRO] IO_EMPTY_READ %out_len, %dst_ptr, %cap
561
+ %out_len = add 0, 0
562
+ [END_MACRO]
563
+
564
+ [MACRO] IO_EMPTY_READ_EXACT %out_status, %dst_ptr, %len
565
+ __io_empty_exact_zero_%out_status = eq %len, 0
566
+ br __io_empty_exact_zero_%out_status -> L_IO_EMPTY_READ_EXACT_OK_%out_status, L_IO_EMPTY_READ_EXACT_EOF_%out_status
567
+
568
+ L_IO_EMPTY_READ_EXACT_OK_%out_status:
569
+ %out_status = add 0, SA_IO_OK
570
+ !__io_empty_exact_zero_%out_status
571
+ jmp L_IO_EMPTY_READ_EXACT_END_%out_status
572
+
573
+ L_IO_EMPTY_READ_EXACT_EOF_%out_status:
574
+ %out_status = add 0, SA_IO_ERR_EOF
575
+ !__io_empty_exact_zero_%out_status
576
+
577
+ L_IO_EMPTY_READ_EXACT_END_%out_status:
578
+ [END_MACRO]
579
+
580
+ [MACRO] IO_EMPTY_SEEK %out_pos
581
+ %out_pos = add 0, 0
582
+ [END_MACRO]
583
+
584
+ [MACRO] IO_TAKE_NEW %take, %cursor, %limit
585
+ store %take+IoTake_cursor, %cursor as ptr
586
+ store %take+IoTake_limit, %limit as u64
587
+ [END_MACRO]
588
+
589
+ [MACRO] IO_TAKE_LIMIT %out_limit, %take
590
+ %out_limit = load %take+IoTake_limit as u64
591
+ [END_MACRO]
592
+
593
+ [MACRO] IO_TAKE_INTO_INNER %out_cursor, %take
594
+ %out_cursor = load %take+IoTake_cursor as ptr
595
+ [END_MACRO]
596
+
597
+ [MACRO] IO_TAKE_READ %out_len, %take, %dst_ptr, %cap
598
+ __io_take_limit_%out_len = load %take+IoTake_limit as u64
599
+ __io_take_cursor_%out_len = load %take+IoTake_cursor as ptr
600
+ __io_take_limit_zero_%out_len = eq __io_take_limit_%out_len, 0
601
+ br __io_take_limit_zero_%out_len -> L_IO_TAKE_READ_ZERO_%out_len, L_IO_TAKE_READ_HAS_LIMIT_%out_len
602
+
603
+ L_IO_TAKE_READ_ZERO_%out_len:
604
+ %out_len = add 0, 0
605
+ !__io_take_limit_zero_%out_len
606
+ !__io_take_cursor_%out_len
607
+ !__io_take_limit_%out_len
608
+ jmp L_IO_TAKE_READ_DONE_%out_len
609
+
610
+ L_IO_TAKE_READ_HAS_LIMIT_%out_len:
611
+ __io_take_cap_within_%out_len = ule %cap, __io_take_limit_%out_len
612
+ br __io_take_cap_within_%out_len -> L_IO_TAKE_READ_CAP_%out_len, L_IO_TAKE_READ_LIMIT_%out_len
613
+
614
+ L_IO_TAKE_READ_CAP_%out_len:
615
+ __io_take_request_%out_len = add %cap, 0
616
+ jmp L_IO_TAKE_READ_DO_%out_len
617
+
618
+ L_IO_TAKE_READ_LIMIT_%out_len:
619
+ __io_take_request_%out_len = add __io_take_limit_%out_len, 0
620
+ jmp L_IO_TAKE_READ_DO_%out_len
621
+
622
+ L_IO_TAKE_READ_DO_%out_len:
623
+ EXPAND IO_CURSOR_READ %out_len, __io_take_cursor_%out_len, %dst_ptr, __io_take_request_%out_len
624
+ __io_take_next_limit_%out_len = sub __io_take_limit_%out_len, %out_len
625
+ store %take+IoTake_limit, __io_take_next_limit_%out_len as u64
626
+ !__io_take_next_limit_%out_len
627
+ !__io_take_request_%out_len
628
+ !__io_take_cap_within_%out_len
629
+ !__io_take_limit_zero_%out_len
630
+ !__io_take_cursor_%out_len
631
+ !__io_take_limit_%out_len
632
+
633
+ L_IO_TAKE_READ_DONE_%out_len:
634
+ [END_MACRO]
635
+
636
+ [MACRO] IO_TAKE_READ_TO_END %out_len, %take, %dst_ptr, %cap
637
+ EXPAND IO_TAKE_READ %out_len, %take, %dst_ptr, %cap
638
+ [END_MACRO]
639
+
640
+ [MACRO] IO_TAKE_READ_TO_STRING %out_status, %out_slice, %take, %dst_ptr, %cap
641
+ EXPAND IO_TAKE_READ_TO_END __io_take_read_to_string_len_%out_status, %take, %dst_ptr, %cap
642
+ EXPAND IO_SLICE_NEW %out_slice, %dst_ptr, __io_take_read_to_string_len_%out_status
643
+ __io_take_read_to_string_status_%out_status = call @sa_str_utf8_validate(&%dst_ptr, __io_take_read_to_string_len_%out_status)
644
+ __io_take_read_to_string_ok_%out_status = eq __io_take_read_to_string_status_%out_status, 0
645
+ br __io_take_read_to_string_ok_%out_status -> L_IO_TAKE_READ_TO_STRING_OK_%out_status, L_IO_TAKE_READ_TO_STRING_BAD_%out_status
646
+
647
+ L_IO_TAKE_READ_TO_STRING_OK_%out_status:
648
+ %out_status = add 0, SA_IO_OK
649
+ !__io_take_read_to_string_ok_%out_status
650
+ !__io_take_read_to_string_status_%out_status
651
+ !__io_take_read_to_string_len_%out_status
652
+ jmp L_IO_TAKE_READ_TO_STRING_END_%out_status
653
+
654
+ L_IO_TAKE_READ_TO_STRING_BAD_%out_status:
655
+ %out_status = add 0, SA_IO_ERR_INVALID_DATA
656
+ __io_take_read_to_string_null_%out_status = 0 as ptr
657
+ EXPAND IO_SLICE_NEW %out_slice, __io_take_read_to_string_null_%out_status, 0
658
+ !__io_take_read_to_string_null_%out_status
659
+ !__io_take_read_to_string_ok_%out_status
660
+ !__io_take_read_to_string_status_%out_status
661
+ !__io_take_read_to_string_len_%out_status
662
+
663
+ L_IO_TAKE_READ_TO_STRING_END_%out_status:
664
+ [END_MACRO]
665
+
666
+ [MACRO] IO_REPEAT_NEW %repeat, %byte
667
+ store %repeat+IoRepeat_byte, %byte as u8
668
+ [END_MACRO]
669
+
670
+ [MACRO] IO_REPEAT_READ %out_len, %repeat, %dst_ptr, %cap
671
+ __io_repeat_byte_%out_len = load %repeat+IoRepeat_byte as u8
672
+ call @sa_mem_set(&%dst_ptr, __io_repeat_byte_%out_len, %cap)
673
+ %out_len = add %cap, 0
674
+ !__io_repeat_byte_%out_len
675
+ [END_MACRO]
676
+
677
+ [MACRO] IO_REPEAT_READ_EXACT %out_status, %repeat, %dst_ptr, %len
678
+ EXPAND IO_REPEAT_READ __io_repeat_exact_len_%out_status, %repeat, %dst_ptr, %len
679
+ %out_status = add 0, SA_IO_OK
680
+ !__io_repeat_exact_len_%out_status
681
+ [END_MACRO]
682
+
683
+ [MACRO] IO_SINK_WRITE %out_len, %src_ptr, %len
684
+ %out_len = add %len, 0
685
+ [END_MACRO]
686
+
687
+ [MACRO] IO_SINK_WRITE_ALL %out_status, %src_ptr, %len
688
+ EXPAND IO_SINK_WRITE __io_sink_write_all_len_%out_status, %src_ptr, %len
689
+ %out_status = add 0, SA_IO_OK
690
+ !__io_sink_write_all_len_%out_status
691
+ [END_MACRO]
692
+
693
+ [MACRO] IO_COPY_SLICE %out_len, %dst_ptr, %src_slice
694
+ __io_copy_src_ptr_%out_len = load %src_slice+IoSlice_ptr as ptr
695
+ __io_copy_src_len_%out_len = load %src_slice+IoSlice_len as u64
696
+ call @sa_mem_copy(&%dst_ptr, &__io_copy_src_ptr_%out_len, __io_copy_src_len_%out_len)
697
+ %out_len = add __io_copy_src_len_%out_len, 0
698
+ !__io_copy_src_len_%out_len
699
+ !__io_copy_src_ptr_%out_len
700
+ [END_MACRO]
701
+
702
+ // Handle-to-handle byte copy over sa_io_read/sa_io_write_all.
703
+ // Uses a fixed 4096-byte stack chunk; not trait-object io::copy.
704
+
705
+ [MACRO] IO_COPY %out_status, %out_total, %reader, %writer
706
+ %out_total = add 0, 0
707
+ __io_copy_buf_%out_status = stack_alloc 4096
708
+ __io_copy_read_slot_%out_status = stack_alloc 8
709
+ jmp L_IO_COPY_HEAD_%out_status
710
+
711
+ L_IO_COPY_HEAD_%out_status:
712
+ __io_copy_read_status_%out_status = call @sa_io_read(%reader, &__io_copy_buf_%out_status, 4096, &__io_copy_read_slot_%out_status)
713
+ __io_copy_read_ok_%out_status = eq __io_copy_read_status_%out_status, SA_IO_OK
714
+ br __io_copy_read_ok_%out_status -> L_IO_COPY_READ_OK_%out_status, L_IO_COPY_READ_ERR_%out_status
715
+
716
+ L_IO_COPY_READ_ERR_%out_status:
717
+ %out_status = add __io_copy_read_status_%out_status, 0
718
+ !__io_copy_read_ok_%out_status
719
+ !__io_copy_read_status_%out_status
720
+ jmp L_IO_COPY_END_%out_status
721
+
722
+ L_IO_COPY_READ_OK_%out_status:
723
+ __io_copy_n_%out_status = load __io_copy_read_slot_%out_status+0 as u64
724
+ __io_copy_is_eof_%out_status = eq __io_copy_n_%out_status, 0
725
+ br __io_copy_is_eof_%out_status -> L_IO_COPY_DONE_%out_status, L_IO_COPY_WRITE_%out_status
726
+
727
+ L_IO_COPY_WRITE_%out_status:
728
+ __io_copy_write_status_%out_status = call @sa_io_write_all(%writer, &__io_copy_buf_%out_status, __io_copy_n_%out_status)
729
+ __io_copy_write_ok_%out_status = eq __io_copy_write_status_%out_status, SA_IO_OK
730
+ br __io_copy_write_ok_%out_status -> L_IO_COPY_WRITE_OK_%out_status, L_IO_COPY_WRITE_ERR_%out_status
731
+
732
+ L_IO_COPY_WRITE_ERR_%out_status:
733
+ %out_status = add __io_copy_write_status_%out_status, 0
734
+ !__io_copy_write_ok_%out_status
735
+ !__io_copy_write_status_%out_status
736
+ !__io_copy_is_eof_%out_status
737
+ !__io_copy_n_%out_status
738
+ !__io_copy_read_ok_%out_status
739
+ !__io_copy_read_status_%out_status
740
+ jmp L_IO_COPY_END_%out_status
741
+
742
+ L_IO_COPY_WRITE_OK_%out_status:
743
+ %out_total = add %out_total, __io_copy_n_%out_status
744
+ !__io_copy_write_ok_%out_status
745
+ !__io_copy_write_status_%out_status
746
+ !__io_copy_is_eof_%out_status
747
+ !__io_copy_n_%out_status
748
+ !__io_copy_read_ok_%out_status
749
+ !__io_copy_read_status_%out_status
750
+ jmp L_IO_COPY_HEAD_%out_status
751
+
752
+ L_IO_COPY_DONE_%out_status:
753
+ %out_status = add 0, SA_IO_OK
754
+ !__io_copy_is_eof_%out_status
755
+ !__io_copy_n_%out_status
756
+ !__io_copy_read_ok_%out_status
757
+ !__io_copy_read_status_%out_status
758
+ jmp L_IO_COPY_END_%out_status
759
+
760
+ L_IO_COPY_END_%out_status:
761
+ [END_MACRO]
762
+
763
+ // Handle-to-handle byte copy with an upper bound (%max_bytes).
764
+ // Uses a fixed 4096-byte stack chunk; stops at EOF or when max is reached.
765
+
766
+ [MACRO] IO_COPY_N %out_status, %out_total, %reader, %writer, %max_bytes
767
+ %out_total = add 0, 0
768
+ __io_copy_n_remaining_slot_%out_status = stack_alloc 8
769
+ store __io_copy_n_remaining_slot_%out_status+0, %max_bytes as u64
770
+ __io_copy_n_buf_%out_status = stack_alloc 4096
771
+ __io_copy_n_read_slot_%out_status = stack_alloc 8
772
+ jmp L_IO_COPY_N_HEAD_%out_status
773
+
774
+ L_IO_COPY_N_HEAD_%out_status:
775
+ __io_copy_n_remaining_%out_status = load __io_copy_n_remaining_slot_%out_status+0 as u64
776
+ __io_copy_n_done_max_%out_status = eq __io_copy_n_remaining_%out_status, 0
777
+ br __io_copy_n_done_max_%out_status -> L_IO_COPY_N_DONE_MAX_%out_status, L_IO_COPY_N_READ_%out_status
778
+
779
+ L_IO_COPY_N_DONE_MAX_%out_status:
780
+ %out_status = add 0, SA_IO_OK
781
+ !__io_copy_n_done_max_%out_status
782
+ !__io_copy_n_remaining_%out_status
783
+ jmp L_IO_COPY_N_END_%out_status
784
+
785
+ L_IO_COPY_N_READ_%out_status:
786
+ __io_copy_n_chunk_cap_%out_status = add 0, 4096
787
+ __io_copy_n_use_rem_%out_status = ult __io_copy_n_remaining_%out_status, __io_copy_n_chunk_cap_%out_status
788
+ br __io_copy_n_use_rem_%out_status -> L_IO_COPY_N_CAP_REM_%out_status, L_IO_COPY_N_CAP_FULL_%out_status
789
+
790
+ L_IO_COPY_N_CAP_REM_%out_status:
791
+ __io_copy_n_cap_%out_status = add __io_copy_n_remaining_%out_status, 0
792
+ !__io_copy_n_use_rem_%out_status
793
+ !__io_copy_n_chunk_cap_%out_status
794
+ jmp L_IO_COPY_N_DO_READ_%out_status
795
+
796
+ L_IO_COPY_N_CAP_FULL_%out_status:
797
+ __io_copy_n_cap_%out_status = add 0, 4096
798
+ !__io_copy_n_use_rem_%out_status
799
+ !__io_copy_n_chunk_cap_%out_status
800
+ jmp L_IO_COPY_N_DO_READ_%out_status
801
+
802
+ L_IO_COPY_N_DO_READ_%out_status:
803
+ __io_copy_n_read_status_%out_status = call @sa_io_read(%reader, &__io_copy_n_buf_%out_status, __io_copy_n_cap_%out_status, &__io_copy_n_read_slot_%out_status)
804
+ __io_copy_n_read_ok_%out_status = eq __io_copy_n_read_status_%out_status, SA_IO_OK
805
+ br __io_copy_n_read_ok_%out_status -> L_IO_COPY_N_READ_OK_%out_status, L_IO_COPY_N_READ_ERR_%out_status
806
+
807
+ L_IO_COPY_N_READ_ERR_%out_status:
808
+ %out_status = add __io_copy_n_read_status_%out_status, 0
809
+ !__io_copy_n_read_ok_%out_status
810
+ !__io_copy_n_read_status_%out_status
811
+ !__io_copy_n_cap_%out_status
812
+ !__io_copy_n_done_max_%out_status
813
+ !__io_copy_n_remaining_%out_status
814
+ jmp L_IO_COPY_N_END_%out_status
815
+
816
+ L_IO_COPY_N_READ_OK_%out_status:
817
+ __io_copy_n_n_%out_status = load __io_copy_n_read_slot_%out_status+0 as u64
818
+ __io_copy_n_is_eof_%out_status = eq __io_copy_n_n_%out_status, 0
819
+ br __io_copy_n_is_eof_%out_status -> L_IO_COPY_N_EOF_%out_status, L_IO_COPY_N_WRITE_%out_status
820
+
821
+ L_IO_COPY_N_EOF_%out_status:
822
+ %out_status = add 0, SA_IO_OK
823
+ !__io_copy_n_is_eof_%out_status
824
+ !__io_copy_n_n_%out_status
825
+ !__io_copy_n_read_ok_%out_status
826
+ !__io_copy_n_read_status_%out_status
827
+ !__io_copy_n_cap_%out_status
828
+ !__io_copy_n_done_max_%out_status
829
+ !__io_copy_n_remaining_%out_status
830
+ jmp L_IO_COPY_N_END_%out_status
831
+
832
+ L_IO_COPY_N_WRITE_%out_status:
833
+ __io_copy_n_write_status_%out_status = call @sa_io_write_all(%writer, &__io_copy_n_buf_%out_status, __io_copy_n_n_%out_status)
834
+ __io_copy_n_write_ok_%out_status = eq __io_copy_n_write_status_%out_status, SA_IO_OK
835
+ br __io_copy_n_write_ok_%out_status -> L_IO_COPY_N_WRITE_OK_%out_status, L_IO_COPY_N_WRITE_ERR_%out_status
836
+
837
+ L_IO_COPY_N_WRITE_ERR_%out_status:
838
+ %out_status = add __io_copy_n_write_status_%out_status, 0
839
+ !__io_copy_n_write_ok_%out_status
840
+ !__io_copy_n_write_status_%out_status
841
+ !__io_copy_n_is_eof_%out_status
842
+ !__io_copy_n_n_%out_status
843
+ !__io_copy_n_read_ok_%out_status
844
+ !__io_copy_n_read_status_%out_status
845
+ !__io_copy_n_cap_%out_status
846
+ !__io_copy_n_done_max_%out_status
847
+ !__io_copy_n_remaining_%out_status
848
+ jmp L_IO_COPY_N_END_%out_status
849
+
850
+ L_IO_COPY_N_WRITE_OK_%out_status:
851
+ %out_total = add %out_total, __io_copy_n_n_%out_status
852
+ __io_copy_n_next_rem_%out_status = sub __io_copy_n_remaining_%out_status, __io_copy_n_n_%out_status
853
+ store __io_copy_n_remaining_slot_%out_status+0, __io_copy_n_next_rem_%out_status as u64
854
+ !__io_copy_n_next_rem_%out_status
855
+ !__io_copy_n_write_ok_%out_status
856
+ !__io_copy_n_write_status_%out_status
857
+ !__io_copy_n_is_eof_%out_status
858
+ !__io_copy_n_n_%out_status
859
+ !__io_copy_n_read_ok_%out_status
860
+ !__io_copy_n_read_status_%out_status
861
+ !__io_copy_n_cap_%out_status
862
+ !__io_copy_n_done_max_%out_status
863
+ !__io_copy_n_remaining_%out_status
864
+ jmp L_IO_COPY_N_HEAD_%out_status
865
+
866
+ L_IO_COPY_N_END_%out_status:
867
+ [END_MACRO]
868
+
869
+ // Handle-level Read/Write/Flush/Close naming aliases over sa_io_* runtime.
870
+
871
+ [MACRO] IO_READ %out_status, %out_len, %handle, %buf, %cap
872
+ __io_read_len_slot_%out_status = stack_alloc 8
873
+ %out_status = call @sa_io_read(%handle, &%buf, %cap, &__io_read_len_slot_%out_status)
874
+ %out_len = load __io_read_len_slot_%out_status+0 as u64
875
+ [END_MACRO]
876
+
877
+ [MACRO] IO_READ_BYTES %out_status, %out_len, %handle, %buf, %cap
878
+ EXPAND IO_READ %out_status, %out_len, %handle, %buf, %cap
879
+ [END_MACRO]
880
+
881
+ [MACRO] IO_READ_EXACT %out_status, %handle, %buf, %len
882
+ %out_status = call @sa_io_read_exact(%handle, &%buf, %len)
883
+ [END_MACRO]
884
+
885
+ [MACRO] IO_READ_EXACT_BYTES %out_status, %handle, %buf, %len
886
+ EXPAND IO_READ_EXACT %out_status, %handle, %buf, %len
887
+ [END_MACRO]
888
+
889
+ [MACRO] IO_WRITE %out_status, %out_len, %handle, %buf, %len
890
+ __io_write_len_slot_%out_status = stack_alloc 8
891
+ %out_status = call @sa_io_write(%handle, &%buf, %len, &__io_write_len_slot_%out_status)
892
+ %out_len = load __io_write_len_slot_%out_status+0 as u64
893
+ [END_MACRO]
894
+
895
+ [MACRO] IO_WRITE_BYTES %out_status, %out_len, %handle, %buf, %len
896
+ EXPAND IO_WRITE %out_status, %out_len, %handle, %buf, %len
897
+ [END_MACRO]
898
+
899
+ [MACRO] IO_WRITE_ALL %out_status, %handle, %buf, %len
900
+ %out_status = call @sa_io_write_all(%handle, &%buf, %len)
901
+ [END_MACRO]
902
+
903
+ [MACRO] IO_WRITE_ALL_BYTES %out_status, %handle, %buf, %len
904
+ EXPAND IO_WRITE_ALL %out_status, %handle, %buf, %len
905
+ [END_MACRO]
906
+
907
+ [MACRO] IO_FLUSH %out_status, %handle
908
+ %out_status = call @sa_io_flush(%handle)
909
+ [END_MACRO]
910
+
911
+ [MACRO] IO_FLUSH_STDOUT %out_status
912
+ EXPAND IO_STDOUT __io_flush_stdout_handle_%out_status
913
+ EXPAND IO_FLUSH %out_status, __io_flush_stdout_handle_%out_status
914
+ !__io_flush_stdout_handle_%out_status
915
+ [END_MACRO]
916
+
917
+ [MACRO] IO_FLUSH_STDERR %out_status
918
+ EXPAND IO_STDERR __io_flush_stderr_handle_%out_status
919
+ EXPAND IO_FLUSH %out_status, __io_flush_stderr_handle_%out_status
920
+ !__io_flush_stderr_handle_%out_status
921
+ [END_MACRO]
922
+
923
+ [MACRO] IO_CLOSE %out_status, %handle
924
+ %out_status = call @sa_io_close(%handle)
925
+ [END_MACRO]