@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,259 @@
1
+ @import "json.sal"
2
+ @import "json.sai"
3
+
4
+ [MACRO] JSON_PARSE %out_root, %bytes, %len
5
+ %out_root = call @sa_json_parse(&%bytes, %len)
6
+ [END_MACRO]
7
+
8
+ [MACRO] JSON_KIND %out_kind, %node
9
+ %out_kind = call @sa_json_kind(%node)
10
+ [END_MACRO]
11
+
12
+ [MACRO] JSON_IS_NULL %out_bool, %node
13
+ __json_kind_%out_bool = call @sa_json_kind(%node)
14
+ %out_bool = eq __json_kind_%out_bool, SA_JSON_KIND_NULL
15
+ !__json_kind_%out_bool
16
+ [END_MACRO]
17
+
18
+ [MACRO] JSON_IS_BOOL %out_bool, %node
19
+ __json_kind_%out_bool = call @sa_json_kind(%node)
20
+ %out_bool = eq __json_kind_%out_bool, SA_JSON_KIND_BOOL
21
+ !__json_kind_%out_bool
22
+ [END_MACRO]
23
+
24
+ [MACRO] JSON_IS_STRING %out_bool, %node
25
+ __json_kind_%out_bool = call @sa_json_kind(%node)
26
+ %out_bool = eq __json_kind_%out_bool, SA_JSON_KIND_STRING
27
+ !__json_kind_%out_bool
28
+ [END_MACRO]
29
+
30
+ [MACRO] JSON_IS_ARRAY %out_bool, %node
31
+ __json_kind_%out_bool = call @sa_json_kind(%node)
32
+ %out_bool = eq __json_kind_%out_bool, SA_JSON_KIND_ARRAY
33
+ !__json_kind_%out_bool
34
+ [END_MACRO]
35
+
36
+ [MACRO] JSON_IS_OBJECT %out_bool, %node
37
+ __json_kind_%out_bool = call @sa_json_kind(%node)
38
+ %out_bool = eq __json_kind_%out_bool, SA_JSON_KIND_OBJECT
39
+ !__json_kind_%out_bool
40
+ [END_MACRO]
41
+
42
+ [MACRO] JSON_IS_NUMBER %out_bool, %node
43
+ __json_kind_%out_bool = call @sa_json_kind(%node)
44
+ __json_is_int_%out_bool = eq __json_kind_%out_bool, SA_JSON_KIND_INTEGER
45
+ __json_is_float_%out_bool = eq __json_kind_%out_bool, SA_JSON_KIND_FLOAT
46
+ __json_is_numstr_%out_bool = eq __json_kind_%out_bool, SA_JSON_KIND_NUMBER_STRING
47
+ __json_is_num_a_%out_bool = or __json_is_int_%out_bool, __json_is_float_%out_bool
48
+ %out_bool = or __json_is_num_a_%out_bool, __json_is_numstr_%out_bool
49
+ !__json_kind_%out_bool
50
+ !__json_is_int_%out_bool
51
+ !__json_is_float_%out_bool
52
+ !__json_is_numstr_%out_bool
53
+ !__json_is_num_a_%out_bool
54
+ [END_MACRO]
55
+
56
+ [MACRO] JSON_OBJECT_GET %out_status, %out_node, %node, %key, %key_len
57
+ __json_get_slot_%out_node = stack_alloc 8
58
+ %out_status = call @sa_json_object_get(%node, &%key, %key_len, &__json_get_slot_%out_node)
59
+ %out_node = load __json_get_slot_%out_node+0 as ptr
60
+ [END_MACRO]
61
+
62
+ [MACRO] JSON_ARRAY_GET %out_status, %out_node, %node, %index
63
+ __json_array_slot_%out_node = stack_alloc 8
64
+ %out_status = call @sa_json_array_get(%node, %index, &__json_array_slot_%out_node)
65
+ %out_node = load __json_array_slot_%out_node+0 as ptr
66
+ [END_MACRO]
67
+
68
+ [MACRO] JSON_OBJECT_KEY_AT %out_status, %out_ptr, %out_len, %node, %index
69
+ __json_key_ptr_slot_%out_ptr = stack_alloc 8
70
+ __json_key_len_slot_%out_ptr = stack_alloc 8
71
+ %out_status = call @sa_json_object_key_at(%node, %index, &__json_key_ptr_slot_%out_ptr, &__json_key_len_slot_%out_ptr)
72
+ %out_ptr = load __json_key_ptr_slot_%out_ptr+0 as ptr
73
+ %out_len = load __json_key_len_slot_%out_ptr+0 as u64
74
+ [END_MACRO]
75
+
76
+ [MACRO] JSON_OBJECT_GET_STRING %out_status, %out_ptr, %out_len, %node, %key, %key_len
77
+ __json_str_ptr_slot_%out_ptr = stack_alloc 8
78
+ __json_str_len_slot_%out_ptr = stack_alloc 8
79
+ %out_status = call @sa_json_object_get_string(%node, &%key, %key_len, &__json_str_ptr_slot_%out_ptr, &__json_str_len_slot_%out_ptr)
80
+ %out_ptr = load __json_str_ptr_slot_%out_ptr+0 as ptr
81
+ %out_len = load __json_str_len_slot_%out_ptr+0 as u64
82
+ [END_MACRO]
83
+
84
+ [MACRO] JSON_OBJECT_GET_BOOL %out_status, %out_value, %node, %key, %key_len
85
+ __json_bool_slot_%out_value = stack_alloc 1
86
+ %out_status = call @sa_json_object_get_bool(%node, &%key, %key_len, &__json_bool_slot_%out_value)
87
+ %out_value = load __json_bool_slot_%out_value+0 as u8
88
+ [END_MACRO]
89
+
90
+ [MACRO] JSON_OBJECT_GET_I64 %out_status, %out_value, %node, %key, %key_len
91
+ __json_i64_slot_%out_value = stack_alloc 8
92
+ %out_status = call @sa_json_object_get_i64(%node, &%key, %key_len, &__json_i64_slot_%out_value)
93
+ %out_value = load __json_i64_slot_%out_value+0 as i64
94
+ [END_MACRO]
95
+
96
+ [MACRO] JSON_OBJECT_GET_F64 %out_status, %out_value, %node, %key, %key_len
97
+ __json_f64_slot_%out_value = stack_alloc 8
98
+ %out_status = call @sa_json_object_get_f64(%node, &%key, %key_len, &__json_f64_slot_%out_value)
99
+ %out_value = load __json_f64_slot_%out_value+0 as f64
100
+ [END_MACRO]
101
+
102
+ [MACRO] JSON_AS_BOOL %out_status, %out_value, %node
103
+ __json_as_bool_slot_%out_value = stack_alloc 1
104
+ %out_status = call @sa_json_as_bool(%node, &__json_as_bool_slot_%out_value)
105
+ %out_value = load __json_as_bool_slot_%out_value+0 as u8
106
+ [END_MACRO]
107
+
108
+ [MACRO] JSON_AS_I64 %out_status, %out_value, %node
109
+ __json_as_i64_slot_%out_value = stack_alloc 8
110
+ %out_status = call @sa_json_as_i64(%node, &__json_as_i64_slot_%out_value)
111
+ %out_value = load __json_as_i64_slot_%out_value+0 as i64
112
+ [END_MACRO]
113
+
114
+ [MACRO] JSON_AS_F64 %out_status, %out_value, %node
115
+ __json_as_f64_slot_%out_value = stack_alloc 8
116
+ %out_status = call @sa_json_as_f64(%node, &__json_as_f64_slot_%out_value)
117
+ %out_value = load __json_as_f64_slot_%out_value+0 as f64
118
+ [END_MACRO]
119
+
120
+ [MACRO] JSON_VALUE_COUNT %out_status, %out_count, %node
121
+ __json_count_slot_%out_count = stack_alloc 8
122
+ %out_status = call @sa_json_value_count(%node, &__json_count_slot_%out_count)
123
+ %out_count = load __json_count_slot_%out_count+0 as u64
124
+ [END_MACRO]
125
+
126
+ [MACRO] JSON_ARRAY_LOOP_INIT %out_status, %out_index, %out_count, %array
127
+ EXPAND JSON_VALUE_COUNT %out_status, %out_count, %array
128
+ %out_index = add 0, 0
129
+ [END_MACRO]
130
+
131
+ [MACRO] JSON_ARRAY_LOOP_HAS_NEXT %out_bool, %index, %count
132
+ %out_bool = ult %index, %count
133
+ [END_MACRO]
134
+
135
+ [MACRO] JSON_ARRAY_LOOP_NEXT %out_index, %index
136
+ %out_index = add %index, 1
137
+ [END_MACRO]
138
+
139
+ [MACRO] JSON_OBJECT_LOOP_INIT %out_status, %out_index, %out_count, %object
140
+ EXPAND JSON_VALUE_COUNT %out_status, %out_count, %object
141
+ %out_index = add 0, 0
142
+ [END_MACRO]
143
+
144
+ [MACRO] JSON_OBJECT_LOOP_HAS_NEXT %out_bool, %index, %count
145
+ %out_bool = ult %index, %count
146
+ [END_MACRO]
147
+
148
+ [MACRO] JSON_OBJECT_LOOP_NEXT %out_index, %index
149
+ %out_index = add %index, 1
150
+ [END_MACRO]
151
+
152
+ [MACRO] JSON_STRING_SLICE %out_ptr, %out_len, %node
153
+ %out_ptr = call @sa_json_string_ptr(%node)
154
+ %out_len = call @sa_json_string_len(%node)
155
+ [END_MACRO]
156
+
157
+ [MACRO] JSON_STRING_PTR %out_ptr, %node
158
+ %out_ptr = call @sa_json_string_ptr(%node)
159
+ [END_MACRO]
160
+
161
+ [MACRO] JSON_FREE %node
162
+ __json_free_res_%node = call @sa_json_free(^%node)
163
+ !__json_free_res_%node
164
+ [END_MACRO]
165
+
166
+ [MACRO] JSON_BUFFER_SLICE %out_ptr, %out_len, %buffer
167
+ %out_ptr = call @sa_json_buffer_data(%buffer)
168
+ %out_len = call @sa_json_buffer_len(%buffer)
169
+ [END_MACRO]
170
+
171
+ [MACRO] JSON_BUFFER_FREE %buffer
172
+ __json_buffer_free_res_%buffer = call @sa_json_buffer_free(^%buffer)
173
+ !__json_buffer_free_res_%buffer
174
+ [END_MACRO]
175
+
176
+ [MACRO] JSON_WRITER_NEW_MINIFIED %out_status, %out_writer
177
+ __json_writer_slot_%out_writer = stack_alloc 8
178
+ %out_status = call @sa_json_writer_new(SA_JSON_WHITESPACE_MINIFIED, 1, 0, 0, 0, &__json_writer_slot_%out_writer)
179
+ %out_writer = load __json_writer_slot_%out_writer+0 as ptr
180
+ [END_MACRO]
181
+
182
+ [MACRO] JSON_WRITER_FIELD %out_status, %writer, %key, %key_len
183
+ %out_status = call @sa_json_writer_object_field(%writer, &%key, %key_len)
184
+ [END_MACRO]
185
+
186
+ [MACRO] JSON_WRITER_FIELD_STRING %out_status, %writer, %key, %key_len, %data, %data_len
187
+ %out_status = call @sa_json_writer_field_string(%writer, &%key, %key_len, &%data, %data_len)
188
+ [END_MACRO]
189
+
190
+ [MACRO] JSON_WRITER_FIELD_BOOL %out_status, %writer, %key, %key_len, %value
191
+ %out_status = call @sa_json_writer_field_bool(%writer, &%key, %key_len, %value)
192
+ [END_MACRO]
193
+
194
+ [MACRO] JSON_WRITER_FIELD_I64 %out_status, %writer, %key, %key_len, %value
195
+ %out_status = call @sa_json_writer_field_i64(%writer, &%key, %key_len, %value)
196
+ [END_MACRO]
197
+
198
+ [MACRO] JSON_WRITER_FIELD_F64 %out_status, %writer, %key, %key_len, %value
199
+ %out_status = call @sa_json_writer_field_f64(%writer, &%key, %key_len, %value)
200
+ [END_MACRO]
201
+
202
+ [MACRO] JSON_WRITER_FIELD_NULL %out_status, %writer, %key, %key_len
203
+ %out_status = call @sa_json_writer_field_null(%writer, &%key, %key_len)
204
+ [END_MACRO]
205
+
206
+ [MACRO] JSON_WRITER_FIELD_NODE %out_status, %writer, %key, %key_len, %node
207
+ %out_status = call @sa_json_writer_field_node(%writer, &%key, %key_len, %node)
208
+ [END_MACRO]
209
+
210
+ [MACRO] JSON_WRITER_BEGIN_OBJECT %out_status, %writer
211
+ %out_status = call @sa_json_writer_begin_object(%writer)
212
+ [END_MACRO]
213
+
214
+ [MACRO] JSON_WRITER_END_OBJECT %out_status, %writer
215
+ %out_status = call @sa_json_writer_end_object(%writer)
216
+ [END_MACRO]
217
+
218
+ [MACRO] JSON_WRITER_BEGIN_ARRAY %out_status, %writer
219
+ %out_status = call @sa_json_writer_begin_array(%writer)
220
+ [END_MACRO]
221
+
222
+ [MACRO] JSON_WRITER_END_ARRAY %out_status, %writer
223
+ %out_status = call @sa_json_writer_end_array(%writer)
224
+ [END_MACRO]
225
+
226
+ [MACRO] JSON_WRITER_WRITE_STRING %out_status, %writer, %data, %len
227
+ %out_status = call @sa_json_writer_write_string(%writer, &%data, %len)
228
+ [END_MACRO]
229
+
230
+ [MACRO] JSON_WRITER_WRITE_BOOL %out_status, %writer, %value
231
+ %out_status = call @sa_json_writer_write_bool(%writer, %value)
232
+ [END_MACRO]
233
+
234
+ [MACRO] JSON_WRITER_WRITE_I64 %out_status, %writer, %value
235
+ %out_status = call @sa_json_writer_write_i64(%writer, %value)
236
+ [END_MACRO]
237
+
238
+ [MACRO] JSON_WRITER_WRITE_F64 %out_status, %writer, %value
239
+ %out_status = call @sa_json_writer_write_f64(%writer, %value)
240
+ [END_MACRO]
241
+
242
+ [MACRO] JSON_WRITER_WRITE_NULL %out_status, %writer
243
+ %out_status = call @sa_json_writer_write_null(%writer)
244
+ [END_MACRO]
245
+
246
+ [MACRO] JSON_WRITER_WRITE_NODE %out_status, %writer, %node
247
+ %out_status = call @sa_json_writer_write_node(%writer, %node)
248
+ [END_MACRO]
249
+
250
+ [MACRO] JSON_WRITER_FINISH %out_status, %out_buffer, %writer
251
+ __json_finish_slot_%out_buffer = stack_alloc 8
252
+ %out_status = call @sa_json_writer_finish(%writer, &__json_finish_slot_%out_buffer)
253
+ %out_buffer = load __json_finish_slot_%out_buffer+0 as ptr
254
+ [END_MACRO]
255
+
256
+ [MACRO] JSON_WRITER_FREE %writer
257
+ __json_writer_free_res_%writer = call @sa_json_writer_free(^%writer)
258
+ !__json_writer_free_res_%writer
259
+ [END_MACRO]
@@ -0,0 +1,54 @@
1
+ // SA-facing contracts for the Zig-backed sa_std.encoding.json module.
2
+ // JSON documents and derived nodes are opaque owned ptr values and must be freed explicitly.
3
+ // JSON stringification returns an owned byte buffer handle.
4
+ @extern sa_json_parse(&json_bytes: ptr, len: u64) -> ^ptr
5
+ @extern sa_json_kind(node: ptr) -> u32
6
+ @extern sa_json_object_get(node: ptr, &key: ptr, key_len: u64, &out_handle: ptr) -> i32
7
+ @extern sa_json_array_get(node: ptr, index: u64, &out_handle: ptr) -> i32
8
+ @extern sa_json_object_key_at(node: ptr, index: u64, &out_ptr: ptr, &out_len: ptr) -> i32
9
+ @extern sa_json_object_get_string(node: ptr, &key: ptr, key_len: u64, &out_ptr: ptr, &out_len: ptr) -> i32
10
+ @extern sa_json_object_get_bool(node: ptr, &key: ptr, key_len: u64, &out_value: ptr) -> i32
11
+ @extern sa_json_object_get_i64(node: ptr, &key: ptr, key_len: u64, &out_value: ptr) -> i32
12
+ @extern sa_json_object_get_f64(node: ptr, &key: ptr, key_len: u64, &out_value: ptr) -> i32
13
+ @extern sa_json_as_f64(node: ptr, &out_value: ptr) -> i32
14
+ @extern sa_json_as_i64(node: ptr, &out_value: ptr) -> i32
15
+ @extern sa_json_as_bool(node: ptr, &out_value: ptr) -> i32
16
+ @extern sa_json_string_ptr(node: ptr) -> &ptr
17
+ @extern sa_json_string_len(node: ptr) -> u64
18
+ @extern sa_json_value_count(node: ptr, &out_count: ptr) -> i32
19
+ @extern sa_json_free(^node: ptr) -> i32!
20
+ @extern sa_json_stringify(node: ptr, &out_handle: ptr) -> i32
21
+ @extern sa_json_buffer_data(buffer: ptr) -> &ptr
22
+ @extern sa_json_buffer_len(buffer: ptr) -> u64
23
+ @extern sa_json_buffer_free(^buffer: ptr) -> i32!
24
+ @extern sa_json_scanner_new(&out_handle: ptr) -> i32
25
+ @extern sa_json_scanner_feed(scanner: ptr, &input: ptr, len: u64) -> i32
26
+ @extern sa_json_scanner_end_input(scanner: ptr) -> i32
27
+ @extern sa_json_scanner_next(scanner: ptr, &out_token: ptr) -> i32
28
+ @extern sa_json_scanner_free(^scanner: ptr) -> i32
29
+ @extern sa_json_stream_new(&json_bytes: ptr, len: u64) -> ^ptr
30
+ @extern sa_json_stream_next(stream: ptr) -> u32
31
+ @extern sa_json_stream_get_slice_ptr(stream: ptr) -> &ptr
32
+ @extern sa_json_stream_get_slice_len(stream: ptr) -> u64
33
+ @extern sa_json_stream_free(^stream: ptr) -> i32!
34
+ @extern sa_json_writer_new(whitespace: u32, emit_null_optional_fields: u8, emit_strings_as_arrays: u8, escape_unicode: u8, emit_nonportable_numbers_as_strings: u8, &out_handle: ptr) -> i32
35
+ @extern sa_json_writer_begin_object(writer: ptr) -> i32
36
+ @extern sa_json_writer_end_object(writer: ptr) -> i32
37
+ @extern sa_json_writer_begin_array(writer: ptr) -> i32
38
+ @extern sa_json_writer_end_array(writer: ptr) -> i32
39
+ @extern sa_json_writer_object_field(writer: ptr, &key: ptr, key_len: u64) -> i32
40
+ @extern sa_json_writer_field_string(writer: ptr, &key: ptr, key_len: u64, &data: ptr, len: u64) -> i32
41
+ @extern sa_json_writer_field_bool(writer: ptr, &key: ptr, key_len: u64, value: u8) -> i32
42
+ @extern sa_json_writer_field_i64(writer: ptr, &key: ptr, key_len: u64, value: i64) -> i32
43
+ @extern sa_json_writer_field_f64(writer: ptr, &key: ptr, key_len: u64, value: f64) -> i32
44
+ @extern sa_json_writer_field_null(writer: ptr, &key: ptr, key_len: u64) -> i32
45
+ @extern sa_json_writer_field_node(writer: ptr, &key: ptr, key_len: u64, node: ptr) -> i32
46
+ @extern sa_json_writer_write_bool(writer: ptr, value: u8) -> i32
47
+ @extern sa_json_writer_write_i64(writer: ptr, value: i64) -> i32
48
+ @extern sa_json_writer_write_f64(writer: ptr, value: f64) -> i32
49
+ @extern sa_json_writer_write_string(writer: ptr, &data: ptr, len: u64) -> i32
50
+ @extern sa_json_writer_write_null(writer: ptr) -> i32
51
+ @extern sa_json_writer_write_node(writer: ptr, node: ptr) -> i32
52
+ @extern sa_json_writer_finish(writer: ptr, &out_handle: ptr) -> i32
53
+ @extern sa_json_writer_finish_buffer(writer: ptr) -> ptr
54
+ @extern sa_json_writer_free(^writer: ptr) -> i32
@@ -0,0 +1,35 @@
1
+ #def SA_JSON_KIND_INVALID = 4294967295
2
+ #def SA_JSON_KIND_NULL = 0
3
+ #def SA_JSON_KIND_BOOL = 1
4
+ #def SA_JSON_KIND_INTEGER = 2
5
+ #def SA_JSON_KIND_FLOAT = 3
6
+ #def SA_JSON_KIND_NUMBER_STRING = 4
7
+ #def SA_JSON_KIND_STRING = 5
8
+ #def SA_JSON_KIND_ARRAY = 6
9
+ #def SA_JSON_KIND_OBJECT = 7
10
+ #def SA_JSON_TOKEN_INVALID = 4294967295
11
+ #def SA_JSON_TOKEN_OBJECT_BEGIN = 0
12
+ #def SA_JSON_TOKEN_OBJECT_END = 1
13
+ #def SA_JSON_TOKEN_ARRAY_BEGIN = 2
14
+ #def SA_JSON_TOKEN_ARRAY_END = 3
15
+ #def SA_JSON_TOKEN_TRUE = 4
16
+ #def SA_JSON_TOKEN_FALSE = 5
17
+ #def SA_JSON_TOKEN_NULL = 6
18
+ #def SA_JSON_TOKEN_NUMBER = 7
19
+ #def SA_JSON_TOKEN_PARTIAL_NUMBER = 8
20
+ #def SA_JSON_TOKEN_STRING = 9
21
+ #def SA_JSON_TOKEN_PARTIAL_STRING = 10
22
+ #def SA_JSON_TOKEN_PARTIAL_STRING_ESCAPED_1 = 11
23
+ #def SA_JSON_TOKEN_PARTIAL_STRING_ESCAPED_2 = 12
24
+ #def SA_JSON_TOKEN_PARTIAL_STRING_ESCAPED_3 = 13
25
+ #def SA_JSON_TOKEN_PARTIAL_STRING_ESCAPED_4 = 14
26
+ #def SA_JSON_TOKEN_END_OF_DOCUMENT = 15
27
+ #def SA_JSON_TOKEN_ALLOCATED_NUMBER = 16
28
+ #def SA_JSON_TOKEN_ALLOCATED_STRING = 17
29
+ #def SA_JSON_WHITESPACE_MINIFIED = 0
30
+ #def SA_JSON_WHITESPACE_INDENT_1 = 1
31
+ #def SA_JSON_WHITESPACE_INDENT_2 = 2
32
+ #def SA_JSON_WHITESPACE_INDENT_3 = 3
33
+ #def SA_JSON_WHITESPACE_INDENT_4 = 4
34
+ #def SA_JSON_WHITESPACE_INDENT_8 = 5
35
+ #def SA_JSON_WHITESPACE_INDENT_TAB = 6
@@ -0,0 +1 @@
1
+ @import "json.sa"
File without changes