@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,34 @@
1
+ #def ASCII_CASE_MASK = 32
2
+ #def ASCII_MAX = 127
3
+ #def ASCII_DELETE = 127
4
+
5
+ #def ASCII_TAB = 9
6
+ #def ASCII_LF = 10
7
+ #def ASCII_FF = 12
8
+ #def ASCII_CR = 13
9
+ #def ASCII_SPACE = 32
10
+ #def ASCII_SINGLE_QUOTE = 39
11
+ #def ASCII_DOUBLE_QUOTE = 34
12
+ #def ASCII_BACKSLASH = 92
13
+
14
+ #def ASCII_ESCAPE_N = 110
15
+ #def ASCII_ESCAPE_R = 114
16
+ #def ASCII_ESCAPE_T = 116
17
+ #def ASCII_ESCAPE_X = 120
18
+
19
+ #def ASCII_DIGIT_0 = 48
20
+ #def ASCII_DIGIT_7 = 55
21
+ #def ASCII_DIGIT_9 = 57
22
+
23
+ #def ASCII_UPPER_A = 65
24
+ #def ASCII_UPPER_F = 70
25
+ #def ASCII_UPPER_Z = 90
26
+ #def ASCII_LOWER_A = 97
27
+ #def ASCII_LOWER_F = 102
28
+ #def ASCII_LOWER_Z = 122
29
+
30
+ #def ASCII_GRAPHIC_MIN = 33
31
+ #def ASCII_GRAPHIC_MAX = 126
32
+
33
+ #def AsciiChar_SIZE = 1
34
+ #def AsciiChar_value = +0
@@ -0,0 +1,41 @@
1
+ [MACRO] BIT_MASK %out_mask, %bit_index
2
+ one = add 0, 1
3
+ %out_mask = shl one, %bit_index
4
+ !one
5
+ [END_MACRO]
6
+
7
+ [MACRO] BIT_SET %out_value, %value, %bit_index
8
+ EXPAND BIT_MASK __bit_mask_%out_value, %bit_index
9
+ %out_value = or %value, __bit_mask_%out_value
10
+ !__bit_mask_%out_value
11
+ [END_MACRO]
12
+
13
+ [MACRO] BIT_GET %out_value, %value, %bit_index
14
+ EXPAND BIT_MASK __bit_mask_%out_value, %bit_index
15
+ __bit_value_%out_value = and %value, __bit_mask_%out_value
16
+ %out_value = ne __bit_value_%out_value, 0
17
+ !__bit_value_%out_value
18
+ !__bit_mask_%out_value
19
+ [END_MACRO]
20
+
21
+ [MACRO] BIT_CLEAR %out_value, %value, %bit_index
22
+ EXPAND BIT_MASK __bit_mask_%out_value, %bit_index
23
+ __bit_not_mask_%out_value = xor __bit_mask_%out_value, -1
24
+ %out_value = and %value, __bit_not_mask_%out_value
25
+ !__bit_not_mask_%out_value
26
+ !__bit_mask_%out_value
27
+ [END_MACRO]
28
+
29
+ [MACRO] BIT_TEST %out_bool, %value, %bit_index
30
+ EXPAND BIT_GET %out_bool, %value, %bit_index
31
+ [END_MACRO]
32
+
33
+ [MACRO] BIT_INDEX_BYTE %out_index, %bit_index
34
+ %out_index = lshr %bit_index, 3
35
+ [END_MACRO]
36
+
37
+ [MACRO] BIT_INDEX_BIT %out_index, %bit_index
38
+ eight = add 0, 8
39
+ %out_index = rem %bit_index, eight
40
+ !eight
41
+ [END_MACRO]
@@ -0,0 +1 @@
1
+ @import "mem.sa"
@@ -0,0 +1,2 @@
1
+ #def Box_SIZE = 8
2
+ #def Box_value = +0
@@ -0,0 +1,108 @@
1
+ @import "cell.sal"
2
+
3
+ [MACRO] CELL_NEW %out_cell
4
+ %out_cell = alloc Cell_SIZE
5
+ store %out_cell+Cell_value, 0 as i32
6
+ [END_MACRO]
7
+
8
+ [MACRO] CELL_NEW_VALUE %out_cell, %value
9
+ %out_cell = alloc Cell_SIZE
10
+ EXPAND CELL_SET %out_cell, %value
11
+ [END_MACRO]
12
+
13
+ [MACRO] CELL_DEFAULT %out_cell
14
+ EXPAND CELL_NEW %out_cell
15
+ [END_MACRO]
16
+
17
+ [MACRO] CELL_GET %out_value, %cell_reg
18
+ %out_value = load %cell_reg+Cell_value as i32
19
+ [END_MACRO]
20
+
21
+ [MACRO] CELL_SET %cell_reg, %value
22
+ store %cell_reg+Cell_value, %value as i32
23
+ [END_MACRO]
24
+
25
+ [MACRO] CELL_REPLACE %out_old, %cell_reg, %value
26
+ %out_old = load %cell_reg+Cell_value as i32
27
+ store %cell_reg+Cell_value, %value as i32
28
+ [END_MACRO]
29
+
30
+ [MACRO] CELL_U64_NEW %out_cell, %value
31
+ %out_cell = alloc CellU64_SIZE
32
+ store %out_cell+CellU64_value, %value as u64
33
+ [END_MACRO]
34
+
35
+ [MACRO] CELL_U64_DEFAULT %out_cell
36
+ %out_cell = alloc CellU64_SIZE
37
+ store %out_cell+CellU64_value, 0 as u64
38
+ [END_MACRO]
39
+
40
+ [MACRO] CELL_U64_GET %out_value, %cell_reg
41
+ %out_value = load %cell_reg+CellU64_value as u64
42
+ [END_MACRO]
43
+
44
+ [MACRO] CELL_U64_SET %cell_reg, %value
45
+ store %cell_reg+CellU64_value, %value as u64
46
+ [END_MACRO]
47
+
48
+ [MACRO] CELL_U64_REPLACE %out_old, %cell_reg, %value
49
+ %out_old = load %cell_reg+CellU64_value as u64
50
+ store %cell_reg+CellU64_value, %value as u64
51
+ [END_MACRO]
52
+
53
+ [MACRO] CELL_U64_TAKE %out_old, %cell_reg
54
+ %out_old = load %cell_reg+CellU64_value as u64
55
+ store %cell_reg+CellU64_value, 0 as u64
56
+ [END_MACRO]
57
+
58
+ [MACRO] CELL_U64_SWAP %left_cell, %right_cell
59
+ __cell_swap_left_%left_cell = load %left_cell+CellU64_value as u64
60
+ __cell_swap_right_%left_cell = load %right_cell+CellU64_value as u64
61
+ store %left_cell+CellU64_value, __cell_swap_right_%left_cell as u64
62
+ store %right_cell+CellU64_value, __cell_swap_left_%left_cell as u64
63
+ !__cell_swap_right_%left_cell
64
+ !__cell_swap_left_%left_cell
65
+ [END_MACRO]
66
+
67
+ [MACRO] CELL_U64_UPDATE %out_old, %out_new, %cell_reg, %update_fn
68
+ %out_old = load %cell_reg+CellU64_value as u64
69
+ %out_new = call %update_fn(%out_old)
70
+ store %cell_reg+CellU64_value, %out_new as u64
71
+ [END_MACRO]
72
+
73
+ [MACRO] CELL_U64_REPLACE_WITH %out_old, %out_new, %cell_reg, %update_fn
74
+ EXPAND CELL_U64_UPDATE %out_old, %out_new, %cell_reg, %update_fn
75
+ [END_MACRO]
76
+
77
+ [MACRO] CELL_U64_INTO_INNER %out_value, %cell_reg
78
+ %out_value = load %cell_reg+CellU64_value as u64
79
+ [END_MACRO]
80
+
81
+ [MACRO] CELL_U64_AS_PTR %out_ptr, %cell_reg
82
+ %out_ptr = ptr_add %cell_reg, CellU64_value
83
+ [END_MACRO]
84
+
85
+ [MACRO] CELL_U64_GET_MUT_PTR %out_ptr, %cell_reg
86
+ %out_ptr = ptr_add %cell_reg, CellU64_value
87
+ [END_MACRO]
88
+
89
+ [MACRO] CELL_U64_FROM_MUT_PTR %out_cell, %value_ptr
90
+ %out_cell = add %value_ptr, 0
91
+ [END_MACRO]
92
+
93
+ [MACRO] CELL_UPDATE %out_old, %cell_reg, %map_fn
94
+ EXPAND CELL_GET __cell_upd_cur_%out_old, %cell_reg
95
+ __cell_upd_next_%out_old = call %map_fn(__cell_upd_cur_%out_old)
96
+ EXPAND CELL_REPLACE %out_old, %cell_reg, __cell_upd_next_%out_old
97
+ !__cell_upd_next_%out_old
98
+ !__cell_upd_cur_%out_old
99
+ [END_MACRO]
100
+
101
+ [MACRO] CELL_SWAP %left_cell, %right_cell
102
+ EXPAND CELL_GET __cell_sw_l_%left_cell, %left_cell
103
+ EXPAND CELL_GET __cell_sw_r_%left_cell, %right_cell
104
+ EXPAND CELL_SET %left_cell, __cell_sw_r_%left_cell
105
+ EXPAND CELL_SET %right_cell, __cell_sw_l_%left_cell
106
+ !__cell_sw_r_%left_cell
107
+ !__cell_sw_l_%left_cell
108
+ [END_MACRO]
@@ -0,0 +1,5 @@
1
+ #def Cell_SIZE = 4
2
+ #def Cell_value = +0
3
+
4
+ #def CellU64_SIZE = 8
5
+ #def CellU64_value = +0
@@ -0,0 +1,26 @@
1
+ @import "box.sal"
2
+ @import "box.sa"
3
+
4
+ [MACRO] DEFER %resource_reg
5
+ !%resource_reg
6
+ [END_MACRO]
7
+
8
+ [MACRO] CLEANUP_ON_ERROR %cond, %resource_reg, %error_label
9
+ br %cond -> L_CLEANUP_ON_ERROR_OK_%resource_reg, %error_label
10
+ L_CLEANUP_ON_ERROR_OK_%resource_reg:
11
+ !%resource_reg
12
+ [END_MACRO]
13
+
14
+ [MACRO] WITH_TEMP %out_reg, %size
15
+ %out_reg = alloc %size
16
+ [END_MACRO]
17
+
18
+ [MACRO] RETURN_CLEAN %resource_reg, %value
19
+ !%resource_reg
20
+ return %value
21
+ [END_MACRO]
22
+
23
+ [MACRO] FREE_AND_RETURN %resource_reg, %value
24
+ !%resource_reg
25
+ return %value
26
+ [END_MACRO]
@@ -0,0 +1,20 @@
1
+ [MACRO] MATCH_BOOL %out_value, %cond, %true_label, %false_label
2
+ %out_value = add %cond, 0
3
+ br %cond -> %true_label, %false_label
4
+ [END_MACRO]
5
+
6
+ [MACRO] ELIF %cond, %true_label, %false_label
7
+ br %cond -> %true_label, %false_label
8
+ [END_MACRO]
9
+
10
+ [MACRO] WHILE_LET %cond, %body_label, %done_label
11
+ br %cond -> %body_label, %done_label
12
+ [END_MACRO]
13
+
14
+ [MACRO] BREAK_IF %cond, %break_label, %cont_label
15
+ br %cond -> %break_label, %cont_label
16
+ [END_MACRO]
17
+
18
+ [MACRO] CONTINUE_IF %cond, %continue_label, %next_label
19
+ br %cond -> %continue_label, %next_label
20
+ [END_MACRO]
@@ -0,0 +1,60 @@
1
+ @import "derive.sal"
2
+
3
+ [MACRO] STRUCT_COPY_FIELD %dst_reg, %src_reg, %dst_offset, %src_offset
4
+ __derive_src_%dst_reg = load %src_reg+%src_offset as u64
5
+ store %dst_reg+%dst_offset, __derive_src_%dst_reg as u64
6
+ !__derive_src_%dst_reg
7
+ [END_MACRO]
8
+
9
+ [MACRO] PTR_FIELD %out_ptr, %base_reg, %offset
10
+ __derive_ptr_%out_ptr = ptr_add %base_reg, %offset
11
+ %out_ptr = add __derive_ptr_%out_ptr, 0
12
+ !__derive_ptr_%out_ptr
13
+ [END_MACRO]
14
+
15
+ [MACRO] FIELD_GET %out_value, %base_reg, %offset
16
+ %out_value = load %base_reg+%offset as u64
17
+ [END_MACRO]
18
+
19
+ [MACRO] FIELD_SET %base_reg, %offset, %value
20
+ store %base_reg+%offset, %value as u64
21
+ [END_MACRO]
22
+
23
+ [MACRO] STRUCT_NEW %out_reg, %size
24
+ %out_reg = alloc %size
25
+ [END_MACRO]
26
+
27
+ [MACRO] STRUCT_FREE %reg
28
+ !%reg
29
+ [END_MACRO]
30
+
31
+ [MACRO] STRUCT_COPY %dst_reg, %src_reg, %offset0, %offset1, %offset2, %offset3
32
+ EXPAND STRUCT_COPY_FIELD %dst_reg, %src_reg, %offset0, %offset0
33
+ EXPAND STRUCT_COPY_FIELD %dst_reg, %src_reg, %offset1, %offset1
34
+ EXPAND STRUCT_COPY_FIELD %dst_reg, %src_reg, %offset2, %offset2
35
+ EXPAND STRUCT_COPY_FIELD %dst_reg, %src_reg, %offset3, %offset3
36
+ [END_MACRO]
37
+
38
+ [MACRO] STRUCT_EQ_FIELD %out_bool, %lhs_reg, %rhs_reg, %offset
39
+ __derive_lhs_%out_bool = load %lhs_reg+%offset as u64
40
+ __derive_rhs_%out_bool = load %rhs_reg+%offset as u64
41
+ %out_bool = eq __derive_lhs_%out_bool, __derive_rhs_%out_bool
42
+ !__derive_rhs_%out_bool
43
+ !__derive_lhs_%out_bool
44
+ [END_MACRO]
45
+
46
+ [MACRO] STRUCT_EQ4 %out_bool, %lhs_reg, %rhs_reg, %offset0, %offset1, %offset2, %offset3
47
+ EXPAND STRUCT_EQ_FIELD eq0, %lhs_reg, %rhs_reg, %offset0
48
+ EXPAND STRUCT_EQ_FIELD eq1, %lhs_reg, %rhs_reg, %offset1
49
+ EXPAND STRUCT_EQ_FIELD eq2, %lhs_reg, %rhs_reg, %offset2
50
+ EXPAND STRUCT_EQ_FIELD eq3, %lhs_reg, %rhs_reg, %offset3
51
+ eq01 = and eq0, eq1
52
+ eq02 = and eq2, eq3
53
+ %out_bool = and eq01, eq02
54
+ !eq0
55
+ !eq1
56
+ !eq2
57
+ !eq3
58
+ !eq01
59
+ !eq02
60
+ [END_MACRO]
@@ -0,0 +1 @@
1
+ #def Derive_RESULT = +0
@@ -0,0 +1,7 @@
1
+ @import "dispatch.sal"
2
+
3
+ [MACRO] DISPATCH %dispatch_reg, %tag_a_label, %tag_b_label
4
+ __dispatch_tag = load %dispatch_reg+Dispatch_tag as u64
5
+ __dispatch_is_a = eq __dispatch_tag, Dispatch_TAG_A
6
+ br __dispatch_is_a -> %tag_a_label, %tag_b_label
7
+ [END_MACRO]
@@ -0,0 +1,5 @@
1
+ #def Dispatch_SIZE = 16
2
+ #def Dispatch_tag = +0
3
+ #def Dispatch_payload = +8
4
+ #def Dispatch_TAG_A = 0
5
+ #def Dispatch_TAG_B = 1