@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
package/sa_std/char.sa ADDED
@@ -0,0 +1,1309 @@
1
+ @import "char.sal"
2
+ @import "ascii.sa"
3
+
4
+ [MACRO] CHAR_IS_VALID_SCALAR %out_bool, %code
5
+ __char_in_max_%out_bool = ule %code, CHAR_MAX
6
+ __char_ge_sur_%out_bool = uge %code, CHAR_SURROGATE_MIN
7
+ __char_le_sur_%out_bool = ule %code, CHAR_SURROGATE_MAX
8
+ __char_is_sur_%out_bool = and __char_ge_sur_%out_bool, __char_le_sur_%out_bool
9
+ __char_not_sur_%out_bool = eq __char_is_sur_%out_bool, 0
10
+ %out_bool = and __char_in_max_%out_bool, __char_not_sur_%out_bool
11
+ !__char_not_sur_%out_bool
12
+ !__char_is_sur_%out_bool
13
+ !__char_le_sur_%out_bool
14
+ !__char_ge_sur_%out_bool
15
+ !__char_in_max_%out_bool
16
+ [END_MACRO]
17
+
18
+ [MACRO] CHAR_FROM_U32 %out_ok, %out_char, %code
19
+ EXPAND CHAR_IS_VALID_SCALAR __char_valid_%out_ok, %code
20
+ br __char_valid_%out_ok -> L_CHAR_FROM_U32_OK_%out_ok, L_CHAR_FROM_U32_ERR_%out_ok
21
+
22
+ L_CHAR_FROM_U32_OK_%out_ok:
23
+ %out_char = add %code, 0
24
+ %out_ok = add 0, 1
25
+ !__char_valid_%out_ok
26
+ jmp L_CHAR_FROM_U32_END_%out_ok
27
+
28
+ L_CHAR_FROM_U32_ERR_%out_ok:
29
+ %out_char = add 0, 0
30
+ %out_ok = add 0, 0
31
+ !__char_valid_%out_ok
32
+
33
+ L_CHAR_FROM_U32_END_%out_ok:
34
+ [END_MACRO]
35
+
36
+ [MACRO] CHAR_FROM_U32_UNCHECKED %out_char, %code
37
+ %out_char = add %code, 0
38
+ [END_MACRO]
39
+
40
+ [MACRO] CHAR_LEN_UTF8 %out_len, %code
41
+ __char_one_%out_len = ule %code, CHAR_UTF8_ONE_MAX
42
+ br __char_one_%out_len -> L_CHAR_LEN_UTF8_ONE_%out_len, L_CHAR_LEN_UTF8_CHECK_TWO_%out_len
43
+
44
+ L_CHAR_LEN_UTF8_CHECK_TWO_%out_len:
45
+ __char_two_%out_len = ule %code, CHAR_UTF8_TWO_MAX
46
+ br __char_two_%out_len -> L_CHAR_LEN_UTF8_TWO_%out_len, L_CHAR_LEN_UTF8_CHECK_THREE_%out_len
47
+
48
+ L_CHAR_LEN_UTF8_CHECK_THREE_%out_len:
49
+ __char_three_%out_len = ule %code, CHAR_UTF8_THREE_MAX
50
+ br __char_three_%out_len -> L_CHAR_LEN_UTF8_THREE_%out_len, L_CHAR_LEN_UTF8_FOUR_%out_len
51
+
52
+ L_CHAR_LEN_UTF8_ONE_%out_len:
53
+ %out_len = add 0, 1
54
+ !__char_one_%out_len
55
+ jmp L_CHAR_LEN_UTF8_END_%out_len
56
+
57
+ L_CHAR_LEN_UTF8_TWO_%out_len:
58
+ %out_len = add 0, 2
59
+ !__char_two_%out_len
60
+ !__char_one_%out_len
61
+ jmp L_CHAR_LEN_UTF8_END_%out_len
62
+
63
+ L_CHAR_LEN_UTF8_THREE_%out_len:
64
+ %out_len = add 0, 3
65
+ !__char_three_%out_len
66
+ !__char_two_%out_len
67
+ !__char_one_%out_len
68
+ jmp L_CHAR_LEN_UTF8_END_%out_len
69
+
70
+ L_CHAR_LEN_UTF8_FOUR_%out_len:
71
+ %out_len = add 0, 4
72
+ !__char_three_%out_len
73
+ !__char_two_%out_len
74
+ !__char_one_%out_len
75
+
76
+ L_CHAR_LEN_UTF8_END_%out_len:
77
+ [END_MACRO]
78
+
79
+ [MACRO] CHAR_LEN_UTF16 %out_len, %code
80
+ __char_bmp_%out_len = ule %code, CHAR_UTF8_THREE_MAX
81
+ br __char_bmp_%out_len -> L_CHAR_LEN_UTF16_ONE_%out_len, L_CHAR_LEN_UTF16_TWO_%out_len
82
+
83
+ L_CHAR_LEN_UTF16_ONE_%out_len:
84
+ %out_len = add 0, 1
85
+ !__char_bmp_%out_len
86
+ jmp L_CHAR_LEN_UTF16_END_%out_len
87
+
88
+ L_CHAR_LEN_UTF16_TWO_%out_len:
89
+ %out_len = add 0, 2
90
+ !__char_bmp_%out_len
91
+
92
+ L_CHAR_LEN_UTF16_END_%out_len:
93
+ [END_MACRO]
94
+
95
+ [MACRO] CHAR_IS_ASCII %out_bool, %code
96
+ EXPAND ASCII_IS_ASCII %out_bool, %code
97
+ [END_MACRO]
98
+
99
+ [MACRO] CHAR_IS_ASCII_ALPHABETIC %out_bool, %code
100
+ EXPAND ASCII_IS_ALPHABETIC %out_bool, %code
101
+ [END_MACRO]
102
+
103
+ [MACRO] CHAR_IS_ASCII_ALPHANUMERIC %out_bool, %code
104
+ EXPAND ASCII_IS_ALPHANUMERIC %out_bool, %code
105
+ [END_MACRO]
106
+
107
+ [MACRO] CHAR_IS_ASCII_DIGIT %out_bool, %code
108
+ EXPAND ASCII_IS_DIGIT %out_bool, %code
109
+ [END_MACRO]
110
+
111
+ [MACRO] CHAR_IS_ASCII_HEXDIGIT %out_bool, %code
112
+ EXPAND ASCII_IS_HEXDIGIT %out_bool, %code
113
+ [END_MACRO]
114
+
115
+ [MACRO] CHAR_IS_ASCII_WHITESPACE %out_bool, %code
116
+ EXPAND ASCII_IS_WHITESPACE %out_bool, %code
117
+ [END_MACRO]
118
+
119
+ [MACRO] CHAR_TO_ASCII_UPPERCASE %out_code, %code
120
+ EXPAND ASCII_TO_UPPERCASE %out_code, %code
121
+ [END_MACRO]
122
+
123
+ [MACRO] CHAR_TO_ASCII_LOWERCASE %out_code, %code
124
+ EXPAND ASCII_TO_LOWERCASE %out_code, %code
125
+ [END_MACRO]
126
+
127
+ [MACRO] CHAR_EQ_IGNORE_ASCII_CASE %out_bool, %left_code, %right_code
128
+ EXPAND ASCII_EQ_IGNORE_CASE %out_bool, %left_code, %right_code
129
+ [END_MACRO]
130
+
131
+ [MACRO] CHAR_TO_DIGIT %out_ok, %out_value, %code, %radix
132
+ __char_radix_ge_%out_ok = uge %radix, 2
133
+ __char_radix_le_%out_ok = ule %radix, 36
134
+ __char_radix_ok_%out_ok = and __char_radix_ge_%out_ok, __char_radix_le_%out_ok
135
+ br __char_radix_ok_%out_ok -> L_CHAR_TO_DIGIT_CHECK_DEC_%out_ok, L_CHAR_TO_DIGIT_NONE_%out_ok
136
+
137
+ L_CHAR_TO_DIGIT_CHECK_DEC_%out_ok:
138
+ __char_digit_ge_%out_ok = uge %code, 48
139
+ __char_digit_le_%out_ok = ule %code, 57
140
+ __char_digit_dec_%out_ok = and __char_digit_ge_%out_ok, __char_digit_le_%out_ok
141
+ br __char_digit_dec_%out_ok -> L_CHAR_TO_DIGIT_DEC_%out_ok, L_CHAR_TO_DIGIT_CHECK_ALPHA_%out_ok
142
+
143
+ L_CHAR_TO_DIGIT_DEC_%out_ok:
144
+ __char_dec_value_%out_ok = sub %code, 48
145
+ __char_dec_in_radix_%out_ok = ult __char_dec_value_%out_ok, %radix
146
+ br __char_dec_in_radix_%out_ok -> L_CHAR_TO_DIGIT_DEC_OK_%out_ok, L_CHAR_TO_DIGIT_DEC_BAD_%out_ok
147
+
148
+ L_CHAR_TO_DIGIT_DEC_OK_%out_ok:
149
+ %out_value = add __char_dec_value_%out_ok, 0
150
+ %out_ok = add 0, 1
151
+ !__char_dec_in_radix_%out_ok
152
+ !__char_dec_value_%out_ok
153
+ !__char_digit_dec_%out_ok
154
+ !__char_digit_le_%out_ok
155
+ !__char_digit_ge_%out_ok
156
+ !__char_radix_ok_%out_ok
157
+ !__char_radix_le_%out_ok
158
+ !__char_radix_ge_%out_ok
159
+ jmp L_CHAR_TO_DIGIT_END_%out_ok
160
+
161
+ L_CHAR_TO_DIGIT_DEC_BAD_%out_ok:
162
+ !__char_dec_in_radix_%out_ok
163
+ !__char_dec_value_%out_ok
164
+ jmp L_CHAR_TO_DIGIT_NONE_AFTER_DEC_%out_ok
165
+
166
+ L_CHAR_TO_DIGIT_CHECK_ALPHA_%out_ok:
167
+ EXPAND ASCII_TO_UPPERCASE __char_upper_%out_ok, %code
168
+ __char_alpha_ge_%out_ok = uge __char_upper_%out_ok, 65
169
+ __char_alpha_le_%out_ok = ule __char_upper_%out_ok, 90
170
+ __char_alpha_%out_ok = and __char_alpha_ge_%out_ok, __char_alpha_le_%out_ok
171
+ br __char_alpha_%out_ok -> L_CHAR_TO_DIGIT_ALPHA_%out_ok, L_CHAR_TO_DIGIT_NONE_ALPHA_%out_ok
172
+
173
+ L_CHAR_TO_DIGIT_ALPHA_%out_ok:
174
+ __char_alpha_base_%out_ok = sub __char_upper_%out_ok, 65
175
+ __char_alpha_value_%out_ok = add __char_alpha_base_%out_ok, 10
176
+ __char_alpha_in_radix_%out_ok = ult __char_alpha_value_%out_ok, %radix
177
+ br __char_alpha_in_radix_%out_ok -> L_CHAR_TO_DIGIT_ALPHA_OK_%out_ok, L_CHAR_TO_DIGIT_ALPHA_BAD_%out_ok
178
+
179
+ L_CHAR_TO_DIGIT_ALPHA_OK_%out_ok:
180
+ %out_value = add __char_alpha_value_%out_ok, 0
181
+ %out_ok = add 0, 1
182
+ !__char_alpha_in_radix_%out_ok
183
+ !__char_alpha_value_%out_ok
184
+ !__char_alpha_base_%out_ok
185
+ !__char_alpha_%out_ok
186
+ !__char_alpha_le_%out_ok
187
+ !__char_alpha_ge_%out_ok
188
+ !__char_upper_%out_ok
189
+ !__char_digit_dec_%out_ok
190
+ !__char_digit_le_%out_ok
191
+ !__char_digit_ge_%out_ok
192
+ !__char_radix_ok_%out_ok
193
+ !__char_radix_le_%out_ok
194
+ !__char_radix_ge_%out_ok
195
+ jmp L_CHAR_TO_DIGIT_END_%out_ok
196
+
197
+ L_CHAR_TO_DIGIT_ALPHA_BAD_%out_ok:
198
+ !__char_alpha_in_radix_%out_ok
199
+ !__char_alpha_value_%out_ok
200
+ !__char_alpha_base_%out_ok
201
+ jmp L_CHAR_TO_DIGIT_NONE_ALPHA_%out_ok
202
+
203
+ L_CHAR_TO_DIGIT_NONE_ALPHA_%out_ok:
204
+ !__char_alpha_%out_ok
205
+ !__char_alpha_le_%out_ok
206
+ !__char_alpha_ge_%out_ok
207
+ !__char_upper_%out_ok
208
+ jmp L_CHAR_TO_DIGIT_NONE_AFTER_DEC_%out_ok
209
+
210
+ L_CHAR_TO_DIGIT_NONE_AFTER_DEC_%out_ok:
211
+ !__char_digit_dec_%out_ok
212
+ !__char_digit_le_%out_ok
213
+ !__char_digit_ge_%out_ok
214
+
215
+ L_CHAR_TO_DIGIT_NONE_%out_ok:
216
+ %out_value = add 0, 0
217
+ %out_ok = add 0, 0
218
+ !__char_radix_ok_%out_ok
219
+ !__char_radix_le_%out_ok
220
+ !__char_radix_ge_%out_ok
221
+
222
+ L_CHAR_TO_DIGIT_END_%out_ok:
223
+ [END_MACRO]
224
+
225
+ [MACRO] CHAR_IS_DIGIT %out_bool, %code, %radix
226
+ EXPAND CHAR_TO_DIGIT __char_digit_ok_%out_bool, __char_digit_value_%out_bool, %code, %radix
227
+ %out_bool = add __char_digit_ok_%out_bool, 0
228
+ !__char_digit_value_%out_bool
229
+ !__char_digit_ok_%out_bool
230
+ [END_MACRO]
231
+
232
+ [MACRO] CHAR_FROM_DIGIT %out_ok, %out_char, %digit, %radix
233
+ __char_from_radix_ge_%out_ok = uge %radix, 2
234
+ __char_from_radix_le_%out_ok = ule %radix, 36
235
+ __char_from_radix_ok_%out_ok = and __char_from_radix_ge_%out_ok, __char_from_radix_le_%out_ok
236
+ __char_from_in_radix_%out_ok = ult %digit, %radix
237
+ __char_from_ok_%out_ok = and __char_from_radix_ok_%out_ok, __char_from_in_radix_%out_ok
238
+ br __char_from_ok_%out_ok -> L_CHAR_FROM_DIGIT_OK_%out_ok, L_CHAR_FROM_DIGIT_NONE_%out_ok
239
+
240
+ L_CHAR_FROM_DIGIT_OK_%out_ok:
241
+ __char_from_decimal_%out_ok = ult %digit, 10
242
+ br __char_from_decimal_%out_ok -> L_CHAR_FROM_DIGIT_DEC_%out_ok, L_CHAR_FROM_DIGIT_ALPHA_%out_ok
243
+
244
+ L_CHAR_FROM_DIGIT_DEC_%out_ok:
245
+ %out_char = add %digit, 48
246
+ %out_ok = add 0, 1
247
+ !__char_from_decimal_%out_ok
248
+ !__char_from_ok_%out_ok
249
+ !__char_from_in_radix_%out_ok
250
+ !__char_from_radix_ok_%out_ok
251
+ !__char_from_radix_le_%out_ok
252
+ !__char_from_radix_ge_%out_ok
253
+ jmp L_CHAR_FROM_DIGIT_END_%out_ok
254
+
255
+ L_CHAR_FROM_DIGIT_ALPHA_%out_ok:
256
+ __char_from_alpha_base_%out_ok = sub %digit, 10
257
+ %out_char = add __char_from_alpha_base_%out_ok, 97
258
+ %out_ok = add 0, 1
259
+ !__char_from_alpha_base_%out_ok
260
+ !__char_from_decimal_%out_ok
261
+ !__char_from_ok_%out_ok
262
+ !__char_from_in_radix_%out_ok
263
+ !__char_from_radix_ok_%out_ok
264
+ !__char_from_radix_le_%out_ok
265
+ !__char_from_radix_ge_%out_ok
266
+ jmp L_CHAR_FROM_DIGIT_END_%out_ok
267
+
268
+ L_CHAR_FROM_DIGIT_NONE_%out_ok:
269
+ %out_char = add 0, 0
270
+ %out_ok = add 0, 0
271
+ !__char_from_ok_%out_ok
272
+ !__char_from_in_radix_%out_ok
273
+ !__char_from_radix_ok_%out_ok
274
+ !__char_from_radix_le_%out_ok
275
+ !__char_from_radix_ge_%out_ok
276
+
277
+ L_CHAR_FROM_DIGIT_END_%out_ok:
278
+ [END_MACRO]
279
+
280
+ [MACRO] CHAR_ESCAPE_UNICODE_WRITE %out_ok, %out_len, %dst_ptr, %dst_len, %code
281
+ EXPAND CHAR_IS_VALID_SCALAR __char_escape_valid_%out_ok, %code
282
+ br __char_escape_valid_%out_ok -> L_CHAR_ESCAPE_CHECK_1_%out_ok, L_CHAR_ESCAPE_FAIL_%out_ok
283
+
284
+ L_CHAR_ESCAPE_CHECK_1_%out_ok:
285
+ __char_escape_le_1_%out_ok = ule %code, 15
286
+ br __char_escape_le_1_%out_ok -> L_CHAR_ESCAPE_WRITE_1_%out_ok, L_CHAR_ESCAPE_CHECK_2_%out_ok
287
+
288
+ L_CHAR_ESCAPE_WRITE_1_%out_ok:
289
+ !__char_escape_le_1_%out_ok
290
+ !__char_escape_valid_%out_ok
291
+ EXPAND CHAR_ESCAPE_UNICODE_WRITE_1 %out_ok, %out_len, %dst_ptr, %dst_len, %code
292
+ jmp L_CHAR_ESCAPE_END_%out_ok
293
+
294
+ L_CHAR_ESCAPE_CHECK_2_%out_ok:
295
+ __char_escape_le_2_%out_ok = ule %code, 255
296
+ br __char_escape_le_2_%out_ok -> L_CHAR_ESCAPE_WRITE_2_%out_ok, L_CHAR_ESCAPE_CHECK_3_%out_ok
297
+
298
+ L_CHAR_ESCAPE_WRITE_2_%out_ok:
299
+ !__char_escape_le_2_%out_ok
300
+ !__char_escape_le_1_%out_ok
301
+ !__char_escape_valid_%out_ok
302
+ EXPAND CHAR_ESCAPE_UNICODE_WRITE_2 %out_ok, %out_len, %dst_ptr, %dst_len, %code
303
+ jmp L_CHAR_ESCAPE_END_%out_ok
304
+
305
+ L_CHAR_ESCAPE_CHECK_3_%out_ok:
306
+ __char_escape_le_3_%out_ok = ule %code, 4095
307
+ br __char_escape_le_3_%out_ok -> L_CHAR_ESCAPE_WRITE_3_%out_ok, L_CHAR_ESCAPE_CHECK_4_%out_ok
308
+
309
+ L_CHAR_ESCAPE_WRITE_3_%out_ok:
310
+ !__char_escape_le_3_%out_ok
311
+ !__char_escape_le_2_%out_ok
312
+ !__char_escape_le_1_%out_ok
313
+ !__char_escape_valid_%out_ok
314
+ EXPAND CHAR_ESCAPE_UNICODE_WRITE_3 %out_ok, %out_len, %dst_ptr, %dst_len, %code
315
+ jmp L_CHAR_ESCAPE_END_%out_ok
316
+
317
+ L_CHAR_ESCAPE_CHECK_4_%out_ok:
318
+ __char_escape_le_4_%out_ok = ule %code, 65535
319
+ br __char_escape_le_4_%out_ok -> L_CHAR_ESCAPE_WRITE_4_%out_ok, L_CHAR_ESCAPE_CHECK_5_%out_ok
320
+
321
+ L_CHAR_ESCAPE_WRITE_4_%out_ok:
322
+ !__char_escape_le_4_%out_ok
323
+ !__char_escape_le_3_%out_ok
324
+ !__char_escape_le_2_%out_ok
325
+ !__char_escape_le_1_%out_ok
326
+ !__char_escape_valid_%out_ok
327
+ EXPAND CHAR_ESCAPE_UNICODE_WRITE_4 %out_ok, %out_len, %dst_ptr, %dst_len, %code
328
+ jmp L_CHAR_ESCAPE_END_%out_ok
329
+
330
+ L_CHAR_ESCAPE_CHECK_5_%out_ok:
331
+ __char_escape_le_5_%out_ok = ule %code, 1048575
332
+ br __char_escape_le_5_%out_ok -> L_CHAR_ESCAPE_WRITE_5_%out_ok, L_CHAR_ESCAPE_WRITE_6_%out_ok
333
+
334
+ L_CHAR_ESCAPE_WRITE_5_%out_ok:
335
+ !__char_escape_le_5_%out_ok
336
+ !__char_escape_le_4_%out_ok
337
+ !__char_escape_le_3_%out_ok
338
+ !__char_escape_le_2_%out_ok
339
+ !__char_escape_le_1_%out_ok
340
+ !__char_escape_valid_%out_ok
341
+ EXPAND CHAR_ESCAPE_UNICODE_WRITE_5 %out_ok, %out_len, %dst_ptr, %dst_len, %code
342
+ jmp L_CHAR_ESCAPE_END_%out_ok
343
+
344
+ L_CHAR_ESCAPE_WRITE_6_%out_ok:
345
+ !__char_escape_le_5_%out_ok
346
+ !__char_escape_le_4_%out_ok
347
+ !__char_escape_le_3_%out_ok
348
+ !__char_escape_le_2_%out_ok
349
+ !__char_escape_le_1_%out_ok
350
+ !__char_escape_valid_%out_ok
351
+ EXPAND CHAR_ESCAPE_UNICODE_WRITE_6 %out_ok, %out_len, %dst_ptr, %dst_len, %code
352
+ jmp L_CHAR_ESCAPE_END_%out_ok
353
+
354
+ L_CHAR_ESCAPE_FAIL_%out_ok:
355
+ %out_len = add 0, 0
356
+ %out_ok = add 0, 0
357
+ !__char_escape_valid_%out_ok
358
+
359
+ L_CHAR_ESCAPE_END_%out_ok:
360
+ [END_MACRO]
361
+
362
+ [MACRO] CHAR_ESCAPE_UNICODE_WRITE_1 %out_ok, %out_len, %dst_ptr, %dst_len, %code
363
+ __char_escape_fits1_%out_ok = uge %dst_len, 5
364
+ br __char_escape_fits1_%out_ok -> L_CHAR_ESCAPE_WRITE1_OK_%out_ok, L_CHAR_ESCAPE_WRITE1_FAIL_%out_ok
365
+
366
+ L_CHAR_ESCAPE_WRITE1_OK_%out_ok:
367
+ __char_escape_n0_1_%out_ok = and %code, 15
368
+ EXPAND ASCII_NIBBLE_TO_LOWER_HEX __char_escape_d0_1_%out_ok, __char_escape_n0_1_%out_ok
369
+ store %dst_ptr+0, CHAR_ESCAPE_BACKSLASH as u8
370
+ __char_escape_p1_1_%out_ok = ptr_add %dst_ptr, 1
371
+ __char_escape_p2_1_%out_ok = ptr_add %dst_ptr, 2
372
+ __char_escape_p3_1_%out_ok = ptr_add %dst_ptr, 3
373
+ __char_escape_p4_1_%out_ok = ptr_add %dst_ptr, 4
374
+ store __char_escape_p1_1_%out_ok+0, CHAR_ESCAPE_U as u8
375
+ store __char_escape_p2_1_%out_ok+0, CHAR_ESCAPE_LBRACE as u8
376
+ store __char_escape_p3_1_%out_ok+0, __char_escape_d0_1_%out_ok as u8
377
+ store __char_escape_p4_1_%out_ok+0, CHAR_ESCAPE_RBRACE as u8
378
+ %out_len = add 0, 5
379
+ %out_ok = add 0, 1
380
+ !__char_escape_p4_1_%out_ok
381
+ !__char_escape_p3_1_%out_ok
382
+ !__char_escape_p2_1_%out_ok
383
+ !__char_escape_p1_1_%out_ok
384
+ !__char_escape_d0_1_%out_ok
385
+ !__char_escape_n0_1_%out_ok
386
+ !__char_escape_fits1_%out_ok
387
+ jmp L_CHAR_ESCAPE_WRITE1_END_%out_ok
388
+
389
+ L_CHAR_ESCAPE_WRITE1_FAIL_%out_ok:
390
+ %out_len = add 0, 0
391
+ %out_ok = add 0, 0
392
+ !__char_escape_fits1_%out_ok
393
+
394
+ L_CHAR_ESCAPE_WRITE1_END_%out_ok:
395
+ [END_MACRO]
396
+
397
+ [MACRO] CHAR_ESCAPE_UNICODE_WRITE_2 %out_ok, %out_len, %dst_ptr, %dst_len, %code
398
+ __char_escape_fits2_%out_ok = uge %dst_len, 6
399
+ br __char_escape_fits2_%out_ok -> L_CHAR_ESCAPE_WRITE2_OK_%out_ok, L_CHAR_ESCAPE_WRITE2_FAIL_%out_ok
400
+
401
+ L_CHAR_ESCAPE_WRITE2_OK_%out_ok:
402
+ __char_escape_s4_2_%out_ok = shr %code, 4
403
+ __char_escape_n1_2_%out_ok = and __char_escape_s4_2_%out_ok, 15
404
+ __char_escape_n0_2_%out_ok = and %code, 15
405
+ EXPAND ASCII_NIBBLE_TO_LOWER_HEX __char_escape_d1_2_%out_ok, __char_escape_n1_2_%out_ok
406
+ EXPAND ASCII_NIBBLE_TO_LOWER_HEX __char_escape_d0_2_%out_ok, __char_escape_n0_2_%out_ok
407
+ store %dst_ptr+0, CHAR_ESCAPE_BACKSLASH as u8
408
+ __char_escape_p1_2_%out_ok = ptr_add %dst_ptr, 1
409
+ __char_escape_p2_2_%out_ok = ptr_add %dst_ptr, 2
410
+ __char_escape_p3_2_%out_ok = ptr_add %dst_ptr, 3
411
+ __char_escape_p4_2_%out_ok = ptr_add %dst_ptr, 4
412
+ __char_escape_p5_2_%out_ok = ptr_add %dst_ptr, 5
413
+ store __char_escape_p1_2_%out_ok+0, CHAR_ESCAPE_U as u8
414
+ store __char_escape_p2_2_%out_ok+0, CHAR_ESCAPE_LBRACE as u8
415
+ store __char_escape_p3_2_%out_ok+0, __char_escape_d1_2_%out_ok as u8
416
+ store __char_escape_p4_2_%out_ok+0, __char_escape_d0_2_%out_ok as u8
417
+ store __char_escape_p5_2_%out_ok+0, CHAR_ESCAPE_RBRACE as u8
418
+ %out_len = add 0, 6
419
+ %out_ok = add 0, 1
420
+ !__char_escape_p5_2_%out_ok
421
+ !__char_escape_p4_2_%out_ok
422
+ !__char_escape_p3_2_%out_ok
423
+ !__char_escape_p2_2_%out_ok
424
+ !__char_escape_p1_2_%out_ok
425
+ !__char_escape_d0_2_%out_ok
426
+ !__char_escape_d1_2_%out_ok
427
+ !__char_escape_n0_2_%out_ok
428
+ !__char_escape_n1_2_%out_ok
429
+ !__char_escape_s4_2_%out_ok
430
+ !__char_escape_fits2_%out_ok
431
+ jmp L_CHAR_ESCAPE_WRITE2_END_%out_ok
432
+
433
+ L_CHAR_ESCAPE_WRITE2_FAIL_%out_ok:
434
+ %out_len = add 0, 0
435
+ %out_ok = add 0, 0
436
+ !__char_escape_fits2_%out_ok
437
+
438
+ L_CHAR_ESCAPE_WRITE2_END_%out_ok:
439
+ [END_MACRO]
440
+
441
+ [MACRO] CHAR_ESCAPE_UNICODE_WRITE_3 %out_ok, %out_len, %dst_ptr, %dst_len, %code
442
+ __char_escape_fits3_%out_ok = uge %dst_len, 7
443
+ br __char_escape_fits3_%out_ok -> L_CHAR_ESCAPE_WRITE3_OK_%out_ok, L_CHAR_ESCAPE_WRITE3_FAIL_%out_ok
444
+
445
+ L_CHAR_ESCAPE_WRITE3_OK_%out_ok:
446
+ __char_escape_s8_3_%out_ok = shr %code, 8
447
+ __char_escape_s4_3_%out_ok = shr %code, 4
448
+ __char_escape_n2_3_%out_ok = and __char_escape_s8_3_%out_ok, 15
449
+ __char_escape_n1_3_%out_ok = and __char_escape_s4_3_%out_ok, 15
450
+ __char_escape_n0_3_%out_ok = and %code, 15
451
+ EXPAND ASCII_NIBBLE_TO_LOWER_HEX __char_escape_d2_3_%out_ok, __char_escape_n2_3_%out_ok
452
+ EXPAND ASCII_NIBBLE_TO_LOWER_HEX __char_escape_d1_3_%out_ok, __char_escape_n1_3_%out_ok
453
+ EXPAND ASCII_NIBBLE_TO_LOWER_HEX __char_escape_d0_3_%out_ok, __char_escape_n0_3_%out_ok
454
+ store %dst_ptr+0, CHAR_ESCAPE_BACKSLASH as u8
455
+ __char_escape_p1_3_%out_ok = ptr_add %dst_ptr, 1
456
+ __char_escape_p2_3_%out_ok = ptr_add %dst_ptr, 2
457
+ __char_escape_p3_3_%out_ok = ptr_add %dst_ptr, 3
458
+ __char_escape_p4_3_%out_ok = ptr_add %dst_ptr, 4
459
+ __char_escape_p5_3_%out_ok = ptr_add %dst_ptr, 5
460
+ __char_escape_p6_3_%out_ok = ptr_add %dst_ptr, 6
461
+ store __char_escape_p1_3_%out_ok+0, CHAR_ESCAPE_U as u8
462
+ store __char_escape_p2_3_%out_ok+0, CHAR_ESCAPE_LBRACE as u8
463
+ store __char_escape_p3_3_%out_ok+0, __char_escape_d2_3_%out_ok as u8
464
+ store __char_escape_p4_3_%out_ok+0, __char_escape_d1_3_%out_ok as u8
465
+ store __char_escape_p5_3_%out_ok+0, __char_escape_d0_3_%out_ok as u8
466
+ store __char_escape_p6_3_%out_ok+0, CHAR_ESCAPE_RBRACE as u8
467
+ %out_len = add 0, 7
468
+ %out_ok = add 0, 1
469
+ !__char_escape_p6_3_%out_ok
470
+ !__char_escape_p5_3_%out_ok
471
+ !__char_escape_p4_3_%out_ok
472
+ !__char_escape_p3_3_%out_ok
473
+ !__char_escape_p2_3_%out_ok
474
+ !__char_escape_p1_3_%out_ok
475
+ !__char_escape_d0_3_%out_ok
476
+ !__char_escape_d1_3_%out_ok
477
+ !__char_escape_d2_3_%out_ok
478
+ !__char_escape_n0_3_%out_ok
479
+ !__char_escape_n1_3_%out_ok
480
+ !__char_escape_n2_3_%out_ok
481
+ !__char_escape_s4_3_%out_ok
482
+ !__char_escape_s8_3_%out_ok
483
+ !__char_escape_fits3_%out_ok
484
+ jmp L_CHAR_ESCAPE_WRITE3_END_%out_ok
485
+
486
+ L_CHAR_ESCAPE_WRITE3_FAIL_%out_ok:
487
+ %out_len = add 0, 0
488
+ %out_ok = add 0, 0
489
+ !__char_escape_fits3_%out_ok
490
+
491
+ L_CHAR_ESCAPE_WRITE3_END_%out_ok:
492
+ [END_MACRO]
493
+
494
+ [MACRO] CHAR_ESCAPE_UNICODE_WRITE_4 %out_ok, %out_len, %dst_ptr, %dst_len, %code
495
+ __char_escape_fits4_%out_ok = uge %dst_len, 8
496
+ br __char_escape_fits4_%out_ok -> L_CHAR_ESCAPE_WRITE4_OK_%out_ok, L_CHAR_ESCAPE_WRITE4_FAIL_%out_ok
497
+
498
+ L_CHAR_ESCAPE_WRITE4_OK_%out_ok:
499
+ __char_escape_s12_4_%out_ok = shr %code, 12
500
+ __char_escape_s8_4_%out_ok = shr %code, 8
501
+ __char_escape_s4_4_%out_ok = shr %code, 4
502
+ __char_escape_n3_4_%out_ok = and __char_escape_s12_4_%out_ok, 15
503
+ __char_escape_n2_4_%out_ok = and __char_escape_s8_4_%out_ok, 15
504
+ __char_escape_n1_4_%out_ok = and __char_escape_s4_4_%out_ok, 15
505
+ __char_escape_n0_4_%out_ok = and %code, 15
506
+ EXPAND ASCII_NIBBLE_TO_LOWER_HEX __char_escape_d3_4_%out_ok, __char_escape_n3_4_%out_ok
507
+ EXPAND ASCII_NIBBLE_TO_LOWER_HEX __char_escape_d2_4_%out_ok, __char_escape_n2_4_%out_ok
508
+ EXPAND ASCII_NIBBLE_TO_LOWER_HEX __char_escape_d1_4_%out_ok, __char_escape_n1_4_%out_ok
509
+ EXPAND ASCII_NIBBLE_TO_LOWER_HEX __char_escape_d0_4_%out_ok, __char_escape_n0_4_%out_ok
510
+ store %dst_ptr+0, CHAR_ESCAPE_BACKSLASH as u8
511
+ __char_escape_p1_4_%out_ok = ptr_add %dst_ptr, 1
512
+ __char_escape_p2_4_%out_ok = ptr_add %dst_ptr, 2
513
+ __char_escape_p3_4_%out_ok = ptr_add %dst_ptr, 3
514
+ __char_escape_p4_4_%out_ok = ptr_add %dst_ptr, 4
515
+ __char_escape_p5_4_%out_ok = ptr_add %dst_ptr, 5
516
+ __char_escape_p6_4_%out_ok = ptr_add %dst_ptr, 6
517
+ __char_escape_p7_4_%out_ok = ptr_add %dst_ptr, 7
518
+ store __char_escape_p1_4_%out_ok+0, CHAR_ESCAPE_U as u8
519
+ store __char_escape_p2_4_%out_ok+0, CHAR_ESCAPE_LBRACE as u8
520
+ store __char_escape_p3_4_%out_ok+0, __char_escape_d3_4_%out_ok as u8
521
+ store __char_escape_p4_4_%out_ok+0, __char_escape_d2_4_%out_ok as u8
522
+ store __char_escape_p5_4_%out_ok+0, __char_escape_d1_4_%out_ok as u8
523
+ store __char_escape_p6_4_%out_ok+0, __char_escape_d0_4_%out_ok as u8
524
+ store __char_escape_p7_4_%out_ok+0, CHAR_ESCAPE_RBRACE as u8
525
+ %out_len = add 0, 8
526
+ %out_ok = add 0, 1
527
+ !__char_escape_p7_4_%out_ok
528
+ !__char_escape_p6_4_%out_ok
529
+ !__char_escape_p5_4_%out_ok
530
+ !__char_escape_p4_4_%out_ok
531
+ !__char_escape_p3_4_%out_ok
532
+ !__char_escape_p2_4_%out_ok
533
+ !__char_escape_p1_4_%out_ok
534
+ !__char_escape_d0_4_%out_ok
535
+ !__char_escape_d1_4_%out_ok
536
+ !__char_escape_d2_4_%out_ok
537
+ !__char_escape_d3_4_%out_ok
538
+ !__char_escape_n0_4_%out_ok
539
+ !__char_escape_n1_4_%out_ok
540
+ !__char_escape_n2_4_%out_ok
541
+ !__char_escape_n3_4_%out_ok
542
+ !__char_escape_s4_4_%out_ok
543
+ !__char_escape_s8_4_%out_ok
544
+ !__char_escape_s12_4_%out_ok
545
+ !__char_escape_fits4_%out_ok
546
+ jmp L_CHAR_ESCAPE_WRITE4_END_%out_ok
547
+
548
+ L_CHAR_ESCAPE_WRITE4_FAIL_%out_ok:
549
+ %out_len = add 0, 0
550
+ %out_ok = add 0, 0
551
+ !__char_escape_fits4_%out_ok
552
+
553
+ L_CHAR_ESCAPE_WRITE4_END_%out_ok:
554
+ [END_MACRO]
555
+
556
+ [MACRO] CHAR_ESCAPE_UNICODE_WRITE_5 %out_ok, %out_len, %dst_ptr, %dst_len, %code
557
+ __char_escape_fits5_%out_ok = uge %dst_len, 9
558
+ br __char_escape_fits5_%out_ok -> L_CHAR_ESCAPE_WRITE5_OK_%out_ok, L_CHAR_ESCAPE_WRITE5_FAIL_%out_ok
559
+
560
+ L_CHAR_ESCAPE_WRITE5_OK_%out_ok:
561
+ __char_escape_s16_5_%out_ok = shr %code, 16
562
+ __char_escape_s12_5_%out_ok = shr %code, 12
563
+ __char_escape_s8_5_%out_ok = shr %code, 8
564
+ __char_escape_s4_5_%out_ok = shr %code, 4
565
+ __char_escape_n4_5_%out_ok = and __char_escape_s16_5_%out_ok, 15
566
+ __char_escape_n3_5_%out_ok = and __char_escape_s12_5_%out_ok, 15
567
+ __char_escape_n2_5_%out_ok = and __char_escape_s8_5_%out_ok, 15
568
+ __char_escape_n1_5_%out_ok = and __char_escape_s4_5_%out_ok, 15
569
+ __char_escape_n0_5_%out_ok = and %code, 15
570
+ EXPAND ASCII_NIBBLE_TO_LOWER_HEX __char_escape_d4_5_%out_ok, __char_escape_n4_5_%out_ok
571
+ EXPAND ASCII_NIBBLE_TO_LOWER_HEX __char_escape_d3_5_%out_ok, __char_escape_n3_5_%out_ok
572
+ EXPAND ASCII_NIBBLE_TO_LOWER_HEX __char_escape_d2_5_%out_ok, __char_escape_n2_5_%out_ok
573
+ EXPAND ASCII_NIBBLE_TO_LOWER_HEX __char_escape_d1_5_%out_ok, __char_escape_n1_5_%out_ok
574
+ EXPAND ASCII_NIBBLE_TO_LOWER_HEX __char_escape_d0_5_%out_ok, __char_escape_n0_5_%out_ok
575
+ store %dst_ptr+0, CHAR_ESCAPE_BACKSLASH as u8
576
+ __char_escape_p1_5_%out_ok = ptr_add %dst_ptr, 1
577
+ __char_escape_p2_5_%out_ok = ptr_add %dst_ptr, 2
578
+ __char_escape_p3_5_%out_ok = ptr_add %dst_ptr, 3
579
+ __char_escape_p4_5_%out_ok = ptr_add %dst_ptr, 4
580
+ __char_escape_p5_5_%out_ok = ptr_add %dst_ptr, 5
581
+ __char_escape_p6_5_%out_ok = ptr_add %dst_ptr, 6
582
+ __char_escape_p7_5_%out_ok = ptr_add %dst_ptr, 7
583
+ __char_escape_p8_5_%out_ok = ptr_add %dst_ptr, 8
584
+ store __char_escape_p1_5_%out_ok+0, CHAR_ESCAPE_U as u8
585
+ store __char_escape_p2_5_%out_ok+0, CHAR_ESCAPE_LBRACE as u8
586
+ store __char_escape_p3_5_%out_ok+0, __char_escape_d4_5_%out_ok as u8
587
+ store __char_escape_p4_5_%out_ok+0, __char_escape_d3_5_%out_ok as u8
588
+ store __char_escape_p5_5_%out_ok+0, __char_escape_d2_5_%out_ok as u8
589
+ store __char_escape_p6_5_%out_ok+0, __char_escape_d1_5_%out_ok as u8
590
+ store __char_escape_p7_5_%out_ok+0, __char_escape_d0_5_%out_ok as u8
591
+ store __char_escape_p8_5_%out_ok+0, CHAR_ESCAPE_RBRACE as u8
592
+ %out_len = add 0, 9
593
+ %out_ok = add 0, 1
594
+ !__char_escape_p8_5_%out_ok
595
+ !__char_escape_p7_5_%out_ok
596
+ !__char_escape_p6_5_%out_ok
597
+ !__char_escape_p5_5_%out_ok
598
+ !__char_escape_p4_5_%out_ok
599
+ !__char_escape_p3_5_%out_ok
600
+ !__char_escape_p2_5_%out_ok
601
+ !__char_escape_p1_5_%out_ok
602
+ !__char_escape_d0_5_%out_ok
603
+ !__char_escape_d1_5_%out_ok
604
+ !__char_escape_d2_5_%out_ok
605
+ !__char_escape_d3_5_%out_ok
606
+ !__char_escape_d4_5_%out_ok
607
+ !__char_escape_n0_5_%out_ok
608
+ !__char_escape_n1_5_%out_ok
609
+ !__char_escape_n2_5_%out_ok
610
+ !__char_escape_n3_5_%out_ok
611
+ !__char_escape_n4_5_%out_ok
612
+ !__char_escape_s4_5_%out_ok
613
+ !__char_escape_s8_5_%out_ok
614
+ !__char_escape_s12_5_%out_ok
615
+ !__char_escape_s16_5_%out_ok
616
+ !__char_escape_fits5_%out_ok
617
+ jmp L_CHAR_ESCAPE_WRITE5_END_%out_ok
618
+
619
+ L_CHAR_ESCAPE_WRITE5_FAIL_%out_ok:
620
+ %out_len = add 0, 0
621
+ %out_ok = add 0, 0
622
+ !__char_escape_fits5_%out_ok
623
+
624
+ L_CHAR_ESCAPE_WRITE5_END_%out_ok:
625
+ [END_MACRO]
626
+
627
+ [MACRO] CHAR_ESCAPE_UNICODE_WRITE_6 %out_ok, %out_len, %dst_ptr, %dst_len, %code
628
+ __char_escape_fits6_%out_ok = uge %dst_len, 10
629
+ br __char_escape_fits6_%out_ok -> L_CHAR_ESCAPE_WRITE6_OK_%out_ok, L_CHAR_ESCAPE_WRITE6_FAIL_%out_ok
630
+
631
+ L_CHAR_ESCAPE_WRITE6_OK_%out_ok:
632
+ __char_escape_s20_6_%out_ok = shr %code, 20
633
+ __char_escape_s16_6_%out_ok = shr %code, 16
634
+ __char_escape_s12_6_%out_ok = shr %code, 12
635
+ __char_escape_s8_6_%out_ok = shr %code, 8
636
+ __char_escape_s4_6_%out_ok = shr %code, 4
637
+ __char_escape_n5_6_%out_ok = and __char_escape_s20_6_%out_ok, 15
638
+ __char_escape_n4_6_%out_ok = and __char_escape_s16_6_%out_ok, 15
639
+ __char_escape_n3_6_%out_ok = and __char_escape_s12_6_%out_ok, 15
640
+ __char_escape_n2_6_%out_ok = and __char_escape_s8_6_%out_ok, 15
641
+ __char_escape_n1_6_%out_ok = and __char_escape_s4_6_%out_ok, 15
642
+ __char_escape_n0_6_%out_ok = and %code, 15
643
+ EXPAND ASCII_NIBBLE_TO_LOWER_HEX __char_escape_d5_6_%out_ok, __char_escape_n5_6_%out_ok
644
+ EXPAND ASCII_NIBBLE_TO_LOWER_HEX __char_escape_d4_6_%out_ok, __char_escape_n4_6_%out_ok
645
+ EXPAND ASCII_NIBBLE_TO_LOWER_HEX __char_escape_d3_6_%out_ok, __char_escape_n3_6_%out_ok
646
+ EXPAND ASCII_NIBBLE_TO_LOWER_HEX __char_escape_d2_6_%out_ok, __char_escape_n2_6_%out_ok
647
+ EXPAND ASCII_NIBBLE_TO_LOWER_HEX __char_escape_d1_6_%out_ok, __char_escape_n1_6_%out_ok
648
+ EXPAND ASCII_NIBBLE_TO_LOWER_HEX __char_escape_d0_6_%out_ok, __char_escape_n0_6_%out_ok
649
+ store %dst_ptr+0, CHAR_ESCAPE_BACKSLASH as u8
650
+ __char_escape_p1_6_%out_ok = ptr_add %dst_ptr, 1
651
+ __char_escape_p2_6_%out_ok = ptr_add %dst_ptr, 2
652
+ __char_escape_p3_6_%out_ok = ptr_add %dst_ptr, 3
653
+ __char_escape_p4_6_%out_ok = ptr_add %dst_ptr, 4
654
+ __char_escape_p5_6_%out_ok = ptr_add %dst_ptr, 5
655
+ __char_escape_p6_6_%out_ok = ptr_add %dst_ptr, 6
656
+ __char_escape_p7_6_%out_ok = ptr_add %dst_ptr, 7
657
+ __char_escape_p8_6_%out_ok = ptr_add %dst_ptr, 8
658
+ __char_escape_p9_6_%out_ok = ptr_add %dst_ptr, 9
659
+ store __char_escape_p1_6_%out_ok+0, CHAR_ESCAPE_U as u8
660
+ store __char_escape_p2_6_%out_ok+0, CHAR_ESCAPE_LBRACE as u8
661
+ store __char_escape_p3_6_%out_ok+0, __char_escape_d5_6_%out_ok as u8
662
+ store __char_escape_p4_6_%out_ok+0, __char_escape_d4_6_%out_ok as u8
663
+ store __char_escape_p5_6_%out_ok+0, __char_escape_d3_6_%out_ok as u8
664
+ store __char_escape_p6_6_%out_ok+0, __char_escape_d2_6_%out_ok as u8
665
+ store __char_escape_p7_6_%out_ok+0, __char_escape_d1_6_%out_ok as u8
666
+ store __char_escape_p8_6_%out_ok+0, __char_escape_d0_6_%out_ok as u8
667
+ store __char_escape_p9_6_%out_ok+0, CHAR_ESCAPE_RBRACE as u8
668
+ %out_len = add 0, 10
669
+ %out_ok = add 0, 1
670
+ !__char_escape_p9_6_%out_ok
671
+ !__char_escape_p8_6_%out_ok
672
+ !__char_escape_p7_6_%out_ok
673
+ !__char_escape_p6_6_%out_ok
674
+ !__char_escape_p5_6_%out_ok
675
+ !__char_escape_p4_6_%out_ok
676
+ !__char_escape_p3_6_%out_ok
677
+ !__char_escape_p2_6_%out_ok
678
+ !__char_escape_p1_6_%out_ok
679
+ !__char_escape_d0_6_%out_ok
680
+ !__char_escape_d1_6_%out_ok
681
+ !__char_escape_d2_6_%out_ok
682
+ !__char_escape_d3_6_%out_ok
683
+ !__char_escape_d4_6_%out_ok
684
+ !__char_escape_d5_6_%out_ok
685
+ !__char_escape_n0_6_%out_ok
686
+ !__char_escape_n1_6_%out_ok
687
+ !__char_escape_n2_6_%out_ok
688
+ !__char_escape_n3_6_%out_ok
689
+ !__char_escape_n4_6_%out_ok
690
+ !__char_escape_n5_6_%out_ok
691
+ !__char_escape_s4_6_%out_ok
692
+ !__char_escape_s8_6_%out_ok
693
+ !__char_escape_s12_6_%out_ok
694
+ !__char_escape_s16_6_%out_ok
695
+ !__char_escape_s20_6_%out_ok
696
+ !__char_escape_fits6_%out_ok
697
+ jmp L_CHAR_ESCAPE_WRITE6_END_%out_ok
698
+
699
+ L_CHAR_ESCAPE_WRITE6_FAIL_%out_ok:
700
+ %out_len = add 0, 0
701
+ %out_ok = add 0, 0
702
+ !__char_escape_fits6_%out_ok
703
+
704
+ L_CHAR_ESCAPE_WRITE6_END_%out_ok:
705
+ [END_MACRO]
706
+
707
+ [MACRO] CHAR_ESCAPE_DEFAULT_WRITE %out_ok, %out_len, %dst_ptr, %dst_len, %code
708
+ __char_default_pair_slot_%out_ok = stack_alloc 8
709
+ EXPAND CHAR_IS_VALID_SCALAR __char_default_valid_%out_ok, %code
710
+ br __char_default_valid_%out_ok -> L_CHAR_DEFAULT_CHECK_TAB_%out_ok, L_CHAR_DEFAULT_FAIL_%out_ok
711
+
712
+ L_CHAR_DEFAULT_CHECK_TAB_%out_ok:
713
+ __char_default_is_tab_%out_ok = eq %code, ASCII_TAB
714
+ br __char_default_is_tab_%out_ok -> L_CHAR_DEFAULT_TAB_%out_ok, L_CHAR_DEFAULT_CHECK_LF_%out_ok
715
+
716
+ L_CHAR_DEFAULT_CHECK_LF_%out_ok:
717
+ __char_default_is_lf_%out_ok = eq %code, ASCII_LF
718
+ br __char_default_is_lf_%out_ok -> L_CHAR_DEFAULT_LF_%out_ok, L_CHAR_DEFAULT_CHECK_CR_%out_ok
719
+
720
+ L_CHAR_DEFAULT_CHECK_CR_%out_ok:
721
+ __char_default_is_cr_%out_ok = eq %code, ASCII_CR
722
+ br __char_default_is_cr_%out_ok -> L_CHAR_DEFAULT_CR_%out_ok, L_CHAR_DEFAULT_CHECK_BACKSLASH_%out_ok
723
+
724
+ L_CHAR_DEFAULT_CHECK_BACKSLASH_%out_ok:
725
+ __char_default_is_backslash_%out_ok = eq %code, ASCII_BACKSLASH
726
+ br __char_default_is_backslash_%out_ok -> L_CHAR_DEFAULT_BACKSLASH_%out_ok, L_CHAR_DEFAULT_CHECK_SINGLE_%out_ok
727
+
728
+ L_CHAR_DEFAULT_CHECK_SINGLE_%out_ok:
729
+ __char_default_is_single_%out_ok = eq %code, ASCII_SINGLE_QUOTE
730
+ br __char_default_is_single_%out_ok -> L_CHAR_DEFAULT_SINGLE_%out_ok, L_CHAR_DEFAULT_CHECK_DOUBLE_%out_ok
731
+
732
+ L_CHAR_DEFAULT_CHECK_DOUBLE_%out_ok:
733
+ __char_default_is_double_%out_ok = eq %code, ASCII_DOUBLE_QUOTE
734
+ br __char_default_is_double_%out_ok -> L_CHAR_DEFAULT_DOUBLE_%out_ok, L_CHAR_DEFAULT_CHECK_PRINTABLE_%out_ok
735
+
736
+ L_CHAR_DEFAULT_CHECK_PRINTABLE_%out_ok:
737
+ __char_default_ge_space_%out_ok = uge %code, ASCII_SPACE
738
+ __char_default_le_tilde_%out_ok = ule %code, ASCII_GRAPHIC_MAX
739
+ __char_default_printable_%out_ok = and __char_default_ge_space_%out_ok, __char_default_le_tilde_%out_ok
740
+ br __char_default_printable_%out_ok -> L_CHAR_DEFAULT_RAW_%out_ok, L_CHAR_DEFAULT_UNICODE_%out_ok
741
+
742
+ L_CHAR_DEFAULT_TAB_%out_ok:
743
+ store __char_default_pair_slot_%out_ok+0, ASCII_ESCAPE_T as u8
744
+ !__char_default_is_tab_%out_ok
745
+ !__char_default_valid_%out_ok
746
+ jmp L_CHAR_DEFAULT_PAIR_%out_ok
747
+
748
+ L_CHAR_DEFAULT_LF_%out_ok:
749
+ store __char_default_pair_slot_%out_ok+0, ASCII_ESCAPE_N as u8
750
+ !__char_default_is_lf_%out_ok
751
+ !__char_default_is_tab_%out_ok
752
+ !__char_default_valid_%out_ok
753
+ jmp L_CHAR_DEFAULT_PAIR_%out_ok
754
+
755
+ L_CHAR_DEFAULT_CR_%out_ok:
756
+ store __char_default_pair_slot_%out_ok+0, ASCII_ESCAPE_R as u8
757
+ !__char_default_is_cr_%out_ok
758
+ !__char_default_is_lf_%out_ok
759
+ !__char_default_is_tab_%out_ok
760
+ !__char_default_valid_%out_ok
761
+ jmp L_CHAR_DEFAULT_PAIR_%out_ok
762
+
763
+ L_CHAR_DEFAULT_BACKSLASH_%out_ok:
764
+ store __char_default_pair_slot_%out_ok+0, ASCII_BACKSLASH as u8
765
+ !__char_default_is_backslash_%out_ok
766
+ !__char_default_is_cr_%out_ok
767
+ !__char_default_is_lf_%out_ok
768
+ !__char_default_is_tab_%out_ok
769
+ !__char_default_valid_%out_ok
770
+ jmp L_CHAR_DEFAULT_PAIR_%out_ok
771
+
772
+ L_CHAR_DEFAULT_SINGLE_%out_ok:
773
+ store __char_default_pair_slot_%out_ok+0, ASCII_SINGLE_QUOTE as u8
774
+ !__char_default_is_single_%out_ok
775
+ !__char_default_is_backslash_%out_ok
776
+ !__char_default_is_cr_%out_ok
777
+ !__char_default_is_lf_%out_ok
778
+ !__char_default_is_tab_%out_ok
779
+ !__char_default_valid_%out_ok
780
+ jmp L_CHAR_DEFAULT_PAIR_%out_ok
781
+
782
+ L_CHAR_DEFAULT_DOUBLE_%out_ok:
783
+ store __char_default_pair_slot_%out_ok+0, ASCII_DOUBLE_QUOTE as u8
784
+ !__char_default_is_double_%out_ok
785
+ !__char_default_is_single_%out_ok
786
+ !__char_default_is_backslash_%out_ok
787
+ !__char_default_is_cr_%out_ok
788
+ !__char_default_is_lf_%out_ok
789
+ !__char_default_is_tab_%out_ok
790
+ !__char_default_valid_%out_ok
791
+ jmp L_CHAR_DEFAULT_PAIR_%out_ok
792
+
793
+ L_CHAR_DEFAULT_PAIR_%out_ok:
794
+ __char_default_pair_byte_%out_ok = load __char_default_pair_slot_%out_ok+0 as u8
795
+ EXPAND ASCII_ESCAPE_DEFAULT_WRITE_PAIR %out_ok, %out_len, %dst_ptr, %dst_len, __char_default_pair_byte_%out_ok
796
+ !__char_default_pair_byte_%out_ok
797
+ jmp L_CHAR_DEFAULT_END_%out_ok
798
+
799
+ L_CHAR_DEFAULT_RAW_%out_ok:
800
+ __char_default_raw_fits_%out_ok = uge %dst_len, 1
801
+ br __char_default_raw_fits_%out_ok -> L_CHAR_DEFAULT_RAW_WRITE_%out_ok, L_CHAR_DEFAULT_RAW_FAIL_%out_ok
802
+
803
+ L_CHAR_DEFAULT_RAW_WRITE_%out_ok:
804
+ store %dst_ptr+0, %code as u8
805
+ %out_len = add 0, 1
806
+ %out_ok = add 0, 1
807
+ !__char_default_raw_fits_%out_ok
808
+ !__char_default_printable_%out_ok
809
+ !__char_default_le_tilde_%out_ok
810
+ !__char_default_ge_space_%out_ok
811
+ !__char_default_is_double_%out_ok
812
+ !__char_default_is_single_%out_ok
813
+ !__char_default_is_backslash_%out_ok
814
+ !__char_default_is_cr_%out_ok
815
+ !__char_default_is_lf_%out_ok
816
+ !__char_default_is_tab_%out_ok
817
+ !__char_default_valid_%out_ok
818
+ jmp L_CHAR_DEFAULT_END_%out_ok
819
+
820
+ L_CHAR_DEFAULT_RAW_FAIL_%out_ok:
821
+ %out_len = add 0, 0
822
+ %out_ok = add 0, 0
823
+ !__char_default_raw_fits_%out_ok
824
+ !__char_default_printable_%out_ok
825
+ !__char_default_le_tilde_%out_ok
826
+ !__char_default_ge_space_%out_ok
827
+ !__char_default_is_double_%out_ok
828
+ !__char_default_is_single_%out_ok
829
+ !__char_default_is_backslash_%out_ok
830
+ !__char_default_is_cr_%out_ok
831
+ !__char_default_is_lf_%out_ok
832
+ !__char_default_is_tab_%out_ok
833
+ !__char_default_valid_%out_ok
834
+ jmp L_CHAR_DEFAULT_END_%out_ok
835
+
836
+ L_CHAR_DEFAULT_UNICODE_%out_ok:
837
+ !__char_default_printable_%out_ok
838
+ !__char_default_le_tilde_%out_ok
839
+ !__char_default_ge_space_%out_ok
840
+ !__char_default_is_double_%out_ok
841
+ !__char_default_is_single_%out_ok
842
+ !__char_default_is_backslash_%out_ok
843
+ !__char_default_is_cr_%out_ok
844
+ !__char_default_is_lf_%out_ok
845
+ !__char_default_is_tab_%out_ok
846
+ !__char_default_valid_%out_ok
847
+ EXPAND CHAR_ESCAPE_UNICODE_WRITE %out_ok, %out_len, %dst_ptr, %dst_len, %code
848
+ jmp L_CHAR_DEFAULT_END_%out_ok
849
+
850
+ L_CHAR_DEFAULT_FAIL_%out_ok:
851
+ %out_len = add 0, 0
852
+ %out_ok = add 0, 0
853
+ !__char_default_valid_%out_ok
854
+
855
+ L_CHAR_DEFAULT_END_%out_ok:
856
+ [END_MACRO]
857
+
858
+ [MACRO] CHAR_TRY_ENCODE_UTF8 %out_ok, %out_len, %dst_ptr, %dst_len, %code
859
+ EXPAND CHAR_IS_VALID_SCALAR __char_enc_valid_%out_ok, %code
860
+ EXPAND CHAR_LEN_UTF8 __char_enc_len_%out_ok, %code
861
+ __char_enc_fits_%out_ok = uge %dst_len, __char_enc_len_%out_ok
862
+ __char_enc_can_%out_ok = and __char_enc_valid_%out_ok, __char_enc_fits_%out_ok
863
+ br __char_enc_can_%out_ok -> L_CHAR_ENC_DISPATCH_%out_ok, L_CHAR_ENC_FAIL_%out_ok
864
+
865
+ L_CHAR_ENC_DISPATCH_%out_ok:
866
+ __char_enc_is_one_%out_ok = eq __char_enc_len_%out_ok, 1
867
+ br __char_enc_is_one_%out_ok -> L_CHAR_ENC_ONE_%out_ok, L_CHAR_ENC_CHECK_TWO_%out_ok
868
+
869
+ L_CHAR_ENC_CHECK_TWO_%out_ok:
870
+ __char_enc_is_two_%out_ok = eq __char_enc_len_%out_ok, 2
871
+ br __char_enc_is_two_%out_ok -> L_CHAR_ENC_TWO_%out_ok, L_CHAR_ENC_CHECK_THREE_%out_ok
872
+
873
+ L_CHAR_ENC_CHECK_THREE_%out_ok:
874
+ __char_enc_is_three_%out_ok = eq __char_enc_len_%out_ok, 3
875
+ br __char_enc_is_three_%out_ok -> L_CHAR_ENC_THREE_%out_ok, L_CHAR_ENC_FOUR_%out_ok
876
+
877
+ L_CHAR_ENC_ONE_%out_ok:
878
+ store %dst_ptr+0, %code as u8
879
+ %out_len = add 0, 1
880
+ %out_ok = add 0, 1
881
+ !__char_enc_is_one_%out_ok
882
+ !__char_enc_can_%out_ok
883
+ !__char_enc_fits_%out_ok
884
+ !__char_enc_len_%out_ok
885
+ !__char_enc_valid_%out_ok
886
+ jmp L_CHAR_ENC_END_%out_ok
887
+
888
+ L_CHAR_ENC_TWO_%out_ok:
889
+ __char_enc_two_tail_raw_%out_ok = and %code, CHAR_UTF8_CONT_MASK
890
+ __char_enc_two_tail_%out_ok = or __char_enc_two_tail_raw_%out_ok, CHAR_UTF8_CONT_TAG
891
+ __char_enc_two_head_raw_%out_ok = shr %code, 6
892
+ __char_enc_two_head_%out_ok = or __char_enc_two_head_raw_%out_ok, CHAR_UTF8_TWO_TAG
893
+ store %dst_ptr+0, __char_enc_two_head_%out_ok as u8
894
+ __char_enc_two_p1_%out_ok = ptr_add %dst_ptr, 1
895
+ store __char_enc_two_p1_%out_ok+0, __char_enc_two_tail_%out_ok as u8
896
+ %out_len = add 0, 2
897
+ %out_ok = add 0, 1
898
+ !__char_enc_two_p1_%out_ok
899
+ !__char_enc_two_head_%out_ok
900
+ !__char_enc_two_head_raw_%out_ok
901
+ !__char_enc_two_tail_%out_ok
902
+ !__char_enc_two_tail_raw_%out_ok
903
+ !__char_enc_is_two_%out_ok
904
+ !__char_enc_is_one_%out_ok
905
+ !__char_enc_can_%out_ok
906
+ !__char_enc_fits_%out_ok
907
+ !__char_enc_len_%out_ok
908
+ !__char_enc_valid_%out_ok
909
+ jmp L_CHAR_ENC_END_%out_ok
910
+
911
+ L_CHAR_ENC_THREE_%out_ok:
912
+ __char_enc_three_tail1_raw_%out_ok = and %code, CHAR_UTF8_CONT_MASK
913
+ __char_enc_three_tail1_%out_ok = or __char_enc_three_tail1_raw_%out_ok, CHAR_UTF8_CONT_TAG
914
+ __char_enc_three_mid_source_%out_ok = shr %code, 6
915
+ __char_enc_three_tail2_raw_%out_ok = and __char_enc_three_mid_source_%out_ok, CHAR_UTF8_CONT_MASK
916
+ __char_enc_three_tail2_%out_ok = or __char_enc_three_tail2_raw_%out_ok, CHAR_UTF8_CONT_TAG
917
+ __char_enc_three_head_raw_%out_ok = shr %code, 12
918
+ __char_enc_three_head_%out_ok = or __char_enc_three_head_raw_%out_ok, CHAR_UTF8_THREE_TAG
919
+ store %dst_ptr+0, __char_enc_three_head_%out_ok as u8
920
+ __char_enc_three_p1_%out_ok = ptr_add %dst_ptr, 1
921
+ __char_enc_three_p2_%out_ok = ptr_add %dst_ptr, 2
922
+ store __char_enc_three_p1_%out_ok+0, __char_enc_three_tail2_%out_ok as u8
923
+ store __char_enc_three_p2_%out_ok+0, __char_enc_three_tail1_%out_ok as u8
924
+ %out_len = add 0, 3
925
+ %out_ok = add 0, 1
926
+ !__char_enc_three_p2_%out_ok
927
+ !__char_enc_three_p1_%out_ok
928
+ !__char_enc_three_head_%out_ok
929
+ !__char_enc_three_head_raw_%out_ok
930
+ !__char_enc_three_tail2_%out_ok
931
+ !__char_enc_three_tail2_raw_%out_ok
932
+ !__char_enc_three_mid_source_%out_ok
933
+ !__char_enc_three_tail1_%out_ok
934
+ !__char_enc_three_tail1_raw_%out_ok
935
+ !__char_enc_is_three_%out_ok
936
+ !__char_enc_is_two_%out_ok
937
+ !__char_enc_is_one_%out_ok
938
+ !__char_enc_can_%out_ok
939
+ !__char_enc_fits_%out_ok
940
+ !__char_enc_len_%out_ok
941
+ !__char_enc_valid_%out_ok
942
+ jmp L_CHAR_ENC_END_%out_ok
943
+
944
+ L_CHAR_ENC_FOUR_%out_ok:
945
+ __char_enc_four_tail1_raw_%out_ok = and %code, CHAR_UTF8_CONT_MASK
946
+ __char_enc_four_tail1_%out_ok = or __char_enc_four_tail1_raw_%out_ok, CHAR_UTF8_CONT_TAG
947
+ __char_enc_four_s6_%out_ok = shr %code, 6
948
+ __char_enc_four_tail2_raw_%out_ok = and __char_enc_four_s6_%out_ok, CHAR_UTF8_CONT_MASK
949
+ __char_enc_four_tail2_%out_ok = or __char_enc_four_tail2_raw_%out_ok, CHAR_UTF8_CONT_TAG
950
+ __char_enc_four_s12_%out_ok = shr %code, 12
951
+ __char_enc_four_tail3_raw_%out_ok = and __char_enc_four_s12_%out_ok, CHAR_UTF8_CONT_MASK
952
+ __char_enc_four_tail3_%out_ok = or __char_enc_four_tail3_raw_%out_ok, CHAR_UTF8_CONT_TAG
953
+ __char_enc_four_head_raw_%out_ok = shr %code, 18
954
+ __char_enc_four_head_%out_ok = or __char_enc_four_head_raw_%out_ok, CHAR_UTF8_FOUR_TAG
955
+ store %dst_ptr+0, __char_enc_four_head_%out_ok as u8
956
+ __char_enc_four_p1_%out_ok = ptr_add %dst_ptr, 1
957
+ __char_enc_four_p2_%out_ok = ptr_add %dst_ptr, 2
958
+ __char_enc_four_p3_%out_ok = ptr_add %dst_ptr, 3
959
+ store __char_enc_four_p1_%out_ok+0, __char_enc_four_tail3_%out_ok as u8
960
+ store __char_enc_four_p2_%out_ok+0, __char_enc_four_tail2_%out_ok as u8
961
+ store __char_enc_four_p3_%out_ok+0, __char_enc_four_tail1_%out_ok as u8
962
+ %out_len = add 0, 4
963
+ %out_ok = add 0, 1
964
+ !__char_enc_four_p3_%out_ok
965
+ !__char_enc_four_p2_%out_ok
966
+ !__char_enc_four_p1_%out_ok
967
+ !__char_enc_four_head_%out_ok
968
+ !__char_enc_four_head_raw_%out_ok
969
+ !__char_enc_four_tail3_%out_ok
970
+ !__char_enc_four_tail3_raw_%out_ok
971
+ !__char_enc_four_s12_%out_ok
972
+ !__char_enc_four_tail2_%out_ok
973
+ !__char_enc_four_tail2_raw_%out_ok
974
+ !__char_enc_four_s6_%out_ok
975
+ !__char_enc_four_tail1_%out_ok
976
+ !__char_enc_four_tail1_raw_%out_ok
977
+ !__char_enc_is_three_%out_ok
978
+ !__char_enc_is_two_%out_ok
979
+ !__char_enc_is_one_%out_ok
980
+ !__char_enc_can_%out_ok
981
+ !__char_enc_fits_%out_ok
982
+ !__char_enc_len_%out_ok
983
+ !__char_enc_valid_%out_ok
984
+ jmp L_CHAR_ENC_END_%out_ok
985
+
986
+ L_CHAR_ENC_FAIL_%out_ok:
987
+ %out_len = add 0, 0
988
+ %out_ok = add 0, 0
989
+ !__char_enc_can_%out_ok
990
+ !__char_enc_fits_%out_ok
991
+ !__char_enc_len_%out_ok
992
+ !__char_enc_valid_%out_ok
993
+
994
+ L_CHAR_ENC_END_%out_ok:
995
+ [END_MACRO]
996
+
997
+ // Rust method-name alias over CHAR_TRY_ENCODE_UTF8.
998
+ [MACRO] CHAR_ENCODE_UTF8 %out_ok, %out_len, %dst_ptr, %dst_len, %code
999
+ EXPAND CHAR_TRY_ENCODE_UTF8 %out_ok, %out_len, %dst_ptr, %dst_len, %code
1000
+ [END_MACRO]
1001
+
1002
+ [MACRO] CHAR_ESCAPE_DEBUG_WRITE %out_ok, %out_len, %dst_ptr, %dst_len, %code
1003
+ __char_debug_pair_slot_%out_ok = stack_alloc 8
1004
+ EXPAND CHAR_IS_VALID_SCALAR __char_debug_valid_%out_ok, %code
1005
+ br __char_debug_valid_%out_ok -> L_CHAR_DEBUG_CHECK_TAB_%out_ok, L_CHAR_DEBUG_FAIL_%out_ok
1006
+
1007
+ L_CHAR_DEBUG_CHECK_TAB_%out_ok:
1008
+ __char_debug_is_tab_%out_ok = eq %code, ASCII_TAB
1009
+ br __char_debug_is_tab_%out_ok -> L_CHAR_DEBUG_TAB_%out_ok, L_CHAR_DEBUG_CHECK_LF_%out_ok
1010
+
1011
+ L_CHAR_DEBUG_CHECK_LF_%out_ok:
1012
+ __char_debug_is_lf_%out_ok = eq %code, ASCII_LF
1013
+ br __char_debug_is_lf_%out_ok -> L_CHAR_DEBUG_LF_%out_ok, L_CHAR_DEBUG_CHECK_CR_%out_ok
1014
+
1015
+ L_CHAR_DEBUG_CHECK_CR_%out_ok:
1016
+ __char_debug_is_cr_%out_ok = eq %code, ASCII_CR
1017
+ br __char_debug_is_cr_%out_ok -> L_CHAR_DEBUG_CR_%out_ok, L_CHAR_DEBUG_CHECK_BACKSLASH_%out_ok
1018
+
1019
+ L_CHAR_DEBUG_CHECK_BACKSLASH_%out_ok:
1020
+ __char_debug_is_backslash_%out_ok = eq %code, ASCII_BACKSLASH
1021
+ br __char_debug_is_backslash_%out_ok -> L_CHAR_DEBUG_BACKSLASH_%out_ok, L_CHAR_DEBUG_CHECK_SINGLE_%out_ok
1022
+
1023
+ L_CHAR_DEBUG_CHECK_SINGLE_%out_ok:
1024
+ __char_debug_is_single_%out_ok = eq %code, ASCII_SINGLE_QUOTE
1025
+ br __char_debug_is_single_%out_ok -> L_CHAR_DEBUG_SINGLE_%out_ok, L_CHAR_DEBUG_CHECK_DOUBLE_%out_ok
1026
+
1027
+ L_CHAR_DEBUG_CHECK_DOUBLE_%out_ok:
1028
+ __char_debug_is_double_%out_ok = eq %code, ASCII_DOUBLE_QUOTE
1029
+ br __char_debug_is_double_%out_ok -> L_CHAR_DEBUG_DOUBLE_%out_ok, L_CHAR_DEBUG_CHECK_ASCII_PRINTABLE_%out_ok
1030
+
1031
+ L_CHAR_DEBUG_CHECK_ASCII_PRINTABLE_%out_ok:
1032
+ __char_debug_ge_space_%out_ok = uge %code, ASCII_SPACE
1033
+ __char_debug_le_tilde_%out_ok = ule %code, ASCII_GRAPHIC_MAX
1034
+ __char_debug_ascii_printable_%out_ok = and __char_debug_ge_space_%out_ok, __char_debug_le_tilde_%out_ok
1035
+ br __char_debug_ascii_printable_%out_ok -> L_CHAR_DEBUG_ASCII_RAW_%out_ok, L_CHAR_DEBUG_CHECK_UNICODE_PRINTABLE_%out_ok
1036
+
1037
+ L_CHAR_DEBUG_CHECK_UNICODE_PRINTABLE_%out_ok:
1038
+ __char_debug_is_ascii_%out_ok = ule %code, 127
1039
+ br __char_debug_is_ascii_%out_ok -> L_CHAR_DEBUG_UNICODE_%out_ok, L_CHAR_DEBUG_UNICODE_RAW_%out_ok
1040
+
1041
+ L_CHAR_DEBUG_TAB_%out_ok:
1042
+ store __char_debug_pair_slot_%out_ok+0, ASCII_ESCAPE_T as u8
1043
+ !__char_debug_is_tab_%out_ok
1044
+ !__char_debug_valid_%out_ok
1045
+ jmp L_CHAR_DEBUG_PAIR_%out_ok
1046
+
1047
+ L_CHAR_DEBUG_LF_%out_ok:
1048
+ store __char_debug_pair_slot_%out_ok+0, ASCII_ESCAPE_N as u8
1049
+ !__char_debug_is_lf_%out_ok
1050
+ !__char_debug_is_tab_%out_ok
1051
+ !__char_debug_valid_%out_ok
1052
+ jmp L_CHAR_DEBUG_PAIR_%out_ok
1053
+
1054
+ L_CHAR_DEBUG_CR_%out_ok:
1055
+ store __char_debug_pair_slot_%out_ok+0, ASCII_ESCAPE_R as u8
1056
+ !__char_debug_is_cr_%out_ok
1057
+ !__char_debug_is_lf_%out_ok
1058
+ !__char_debug_is_tab_%out_ok
1059
+ !__char_debug_valid_%out_ok
1060
+ jmp L_CHAR_DEBUG_PAIR_%out_ok
1061
+
1062
+ L_CHAR_DEBUG_BACKSLASH_%out_ok:
1063
+ store __char_debug_pair_slot_%out_ok+0, ASCII_BACKSLASH as u8
1064
+ !__char_debug_is_backslash_%out_ok
1065
+ !__char_debug_is_cr_%out_ok
1066
+ !__char_debug_is_lf_%out_ok
1067
+ !__char_debug_is_tab_%out_ok
1068
+ !__char_debug_valid_%out_ok
1069
+ jmp L_CHAR_DEBUG_PAIR_%out_ok
1070
+
1071
+ L_CHAR_DEBUG_SINGLE_%out_ok:
1072
+ store __char_debug_pair_slot_%out_ok+0, ASCII_SINGLE_QUOTE as u8
1073
+ !__char_debug_is_single_%out_ok
1074
+ !__char_debug_is_backslash_%out_ok
1075
+ !__char_debug_is_cr_%out_ok
1076
+ !__char_debug_is_lf_%out_ok
1077
+ !__char_debug_is_tab_%out_ok
1078
+ !__char_debug_valid_%out_ok
1079
+ jmp L_CHAR_DEBUG_PAIR_%out_ok
1080
+
1081
+ L_CHAR_DEBUG_DOUBLE_%out_ok:
1082
+ store __char_debug_pair_slot_%out_ok+0, ASCII_DOUBLE_QUOTE as u8
1083
+ !__char_debug_is_double_%out_ok
1084
+ !__char_debug_is_single_%out_ok
1085
+ !__char_debug_is_backslash_%out_ok
1086
+ !__char_debug_is_cr_%out_ok
1087
+ !__char_debug_is_lf_%out_ok
1088
+ !__char_debug_is_tab_%out_ok
1089
+ !__char_debug_valid_%out_ok
1090
+ jmp L_CHAR_DEBUG_PAIR_%out_ok
1091
+
1092
+ L_CHAR_DEBUG_PAIR_%out_ok:
1093
+ __char_debug_pair_byte_%out_ok = load __char_debug_pair_slot_%out_ok+0 as u8
1094
+ EXPAND ASCII_ESCAPE_DEFAULT_WRITE_PAIR %out_ok, %out_len, %dst_ptr, %dst_len, __char_debug_pair_byte_%out_ok
1095
+ !__char_debug_pair_byte_%out_ok
1096
+ jmp L_CHAR_DEBUG_END_%out_ok
1097
+
1098
+ L_CHAR_DEBUG_ASCII_RAW_%out_ok:
1099
+ __char_debug_raw_fits_%out_ok = uge %dst_len, 1
1100
+ br __char_debug_raw_fits_%out_ok -> L_CHAR_DEBUG_ASCII_RAW_WRITE_%out_ok, L_CHAR_DEBUG_ASCII_RAW_FAIL_%out_ok
1101
+
1102
+ L_CHAR_DEBUG_ASCII_RAW_WRITE_%out_ok:
1103
+ store %dst_ptr+0, %code as u8
1104
+ %out_len = add 0, 1
1105
+ %out_ok = add 0, 1
1106
+ !__char_debug_raw_fits_%out_ok
1107
+ !__char_debug_ascii_printable_%out_ok
1108
+ !__char_debug_le_tilde_%out_ok
1109
+ !__char_debug_ge_space_%out_ok
1110
+ !__char_debug_is_double_%out_ok
1111
+ !__char_debug_is_single_%out_ok
1112
+ !__char_debug_is_backslash_%out_ok
1113
+ !__char_debug_is_cr_%out_ok
1114
+ !__char_debug_is_lf_%out_ok
1115
+ !__char_debug_is_tab_%out_ok
1116
+ !__char_debug_valid_%out_ok
1117
+ jmp L_CHAR_DEBUG_END_%out_ok
1118
+
1119
+ L_CHAR_DEBUG_ASCII_RAW_FAIL_%out_ok:
1120
+ %out_len = add 0, 0
1121
+ %out_ok = add 0, 0
1122
+ !__char_debug_raw_fits_%out_ok
1123
+ !__char_debug_ascii_printable_%out_ok
1124
+ !__char_debug_le_tilde_%out_ok
1125
+ !__char_debug_ge_space_%out_ok
1126
+ !__char_debug_is_double_%out_ok
1127
+ !__char_debug_is_single_%out_ok
1128
+ !__char_debug_is_backslash_%out_ok
1129
+ !__char_debug_is_cr_%out_ok
1130
+ !__char_debug_is_lf_%out_ok
1131
+ !__char_debug_is_tab_%out_ok
1132
+ !__char_debug_valid_%out_ok
1133
+ jmp L_CHAR_DEBUG_END_%out_ok
1134
+
1135
+ L_CHAR_DEBUG_UNICODE_RAW_%out_ok:
1136
+ !__char_debug_is_ascii_%out_ok
1137
+ !__char_debug_ascii_printable_%out_ok
1138
+ !__char_debug_le_tilde_%out_ok
1139
+ !__char_debug_ge_space_%out_ok
1140
+ !__char_debug_is_double_%out_ok
1141
+ !__char_debug_is_single_%out_ok
1142
+ !__char_debug_is_backslash_%out_ok
1143
+ !__char_debug_is_cr_%out_ok
1144
+ !__char_debug_is_lf_%out_ok
1145
+ !__char_debug_is_tab_%out_ok
1146
+ !__char_debug_valid_%out_ok
1147
+ EXPAND CHAR_TRY_ENCODE_UTF8 %out_ok, %out_len, %dst_ptr, %dst_len, %code
1148
+ jmp L_CHAR_DEBUG_END_%out_ok
1149
+
1150
+ L_CHAR_DEBUG_UNICODE_%out_ok:
1151
+ !__char_debug_is_ascii_%out_ok
1152
+ !__char_debug_ascii_printable_%out_ok
1153
+ !__char_debug_le_tilde_%out_ok
1154
+ !__char_debug_ge_space_%out_ok
1155
+ !__char_debug_is_double_%out_ok
1156
+ !__char_debug_is_single_%out_ok
1157
+ !__char_debug_is_backslash_%out_ok
1158
+ !__char_debug_is_cr_%out_ok
1159
+ !__char_debug_is_lf_%out_ok
1160
+ !__char_debug_is_tab_%out_ok
1161
+ !__char_debug_valid_%out_ok
1162
+ EXPAND CHAR_ESCAPE_UNICODE_WRITE %out_ok, %out_len, %dst_ptr, %dst_len, %code
1163
+ jmp L_CHAR_DEBUG_END_%out_ok
1164
+
1165
+ L_CHAR_DEBUG_FAIL_%out_ok:
1166
+ %out_len = add 0, 0
1167
+ %out_ok = add 0, 0
1168
+ !__char_debug_valid_%out_ok
1169
+
1170
+ L_CHAR_DEBUG_END_%out_ok:
1171
+ [END_MACRO]
1172
+
1173
+ [MACRO] CHAR_TRY_ENCODE_UTF16 %out_ok, %out_len, %dst_ptr, %dst_len, %code
1174
+ EXPAND CHAR_IS_VALID_SCALAR __char_enc16_valid_%out_ok, %code
1175
+ EXPAND CHAR_LEN_UTF16 __char_enc16_len_%out_ok, %code
1176
+ __char_enc16_fits_%out_ok = uge %dst_len, __char_enc16_len_%out_ok
1177
+ __char_enc16_can_%out_ok = and __char_enc16_valid_%out_ok, __char_enc16_fits_%out_ok
1178
+ br __char_enc16_can_%out_ok -> L_CHAR_ENC16_DISPATCH_%out_ok, L_CHAR_ENC16_FAIL_%out_ok
1179
+
1180
+ L_CHAR_ENC16_DISPATCH_%out_ok:
1181
+ __char_enc16_one_%out_ok = eq __char_enc16_len_%out_ok, 1
1182
+ br __char_enc16_one_%out_ok -> L_CHAR_ENC16_ONE_%out_ok, L_CHAR_ENC16_PAIR_%out_ok
1183
+
1184
+ L_CHAR_ENC16_ONE_%out_ok:
1185
+ store %dst_ptr+0, %code as u16
1186
+ %out_len = add 0, 1
1187
+ %out_ok = add 0, 1
1188
+ !__char_enc16_one_%out_ok
1189
+ !__char_enc16_can_%out_ok
1190
+ !__char_enc16_fits_%out_ok
1191
+ !__char_enc16_len_%out_ok
1192
+ !__char_enc16_valid_%out_ok
1193
+ jmp L_CHAR_ENC16_END_%out_ok
1194
+
1195
+ L_CHAR_ENC16_PAIR_%out_ok:
1196
+ __char_enc16_shifted_%out_ok = sub %code, CHAR_UTF16_SUPPLEMENTARY_BASE
1197
+ __char_enc16_high_bits_%out_ok = shr __char_enc16_shifted_%out_ok, 10
1198
+ __char_enc16_high_%out_ok = add __char_enc16_high_bits_%out_ok, CHAR_UTF16_HIGH_SURROGATE_MIN
1199
+ __char_enc16_low_bits_%out_ok = and __char_enc16_shifted_%out_ok, CHAR_UTF16_TRAIL_MASK
1200
+ __char_enc16_low_%out_ok = add __char_enc16_low_bits_%out_ok, CHAR_UTF16_LOW_SURROGATE_MIN
1201
+ store %dst_ptr+0, __char_enc16_high_%out_ok as u16
1202
+ __char_enc16_p1_%out_ok = ptr_add %dst_ptr, 2
1203
+ store __char_enc16_p1_%out_ok+0, __char_enc16_low_%out_ok as u16
1204
+ %out_len = add 0, 2
1205
+ %out_ok = add 0, 1
1206
+ !__char_enc16_p1_%out_ok
1207
+ !__char_enc16_low_%out_ok
1208
+ !__char_enc16_low_bits_%out_ok
1209
+ !__char_enc16_high_%out_ok
1210
+ !__char_enc16_high_bits_%out_ok
1211
+ !__char_enc16_shifted_%out_ok
1212
+ !__char_enc16_one_%out_ok
1213
+ !__char_enc16_can_%out_ok
1214
+ !__char_enc16_fits_%out_ok
1215
+ !__char_enc16_len_%out_ok
1216
+ !__char_enc16_valid_%out_ok
1217
+ jmp L_CHAR_ENC16_END_%out_ok
1218
+
1219
+ L_CHAR_ENC16_FAIL_%out_ok:
1220
+ %out_len = add 0, 0
1221
+ %out_ok = add 0, 0
1222
+ !__char_enc16_can_%out_ok
1223
+ !__char_enc16_fits_%out_ok
1224
+ !__char_enc16_len_%out_ok
1225
+ !__char_enc16_valid_%out_ok
1226
+
1227
+ L_CHAR_ENC16_END_%out_ok:
1228
+ [END_MACRO]
1229
+
1230
+ // Rust method-name alias over CHAR_TRY_ENCODE_UTF16.
1231
+ [MACRO] CHAR_ENCODE_UTF16 %out_ok, %out_len, %dst_ptr, %dst_len, %code
1232
+ EXPAND CHAR_TRY_ENCODE_UTF16 %out_ok, %out_len, %dst_ptr, %dst_len, %code
1233
+ [END_MACRO]
1234
+
1235
+ [MACRO] CHAR_DECODE_UTF16_UNIT %out_ok, %out_char, %out_units, %lead, %trail
1236
+ __char_dec16_high_ge_%out_ok = uge %lead, CHAR_UTF16_HIGH_SURROGATE_MIN
1237
+ __char_dec16_high_le_%out_ok = ule %lead, CHAR_UTF16_HIGH_SURROGATE_MAX
1238
+ __char_dec16_is_high_%out_ok = and __char_dec16_high_ge_%out_ok, __char_dec16_high_le_%out_ok
1239
+ br __char_dec16_is_high_%out_ok -> L_CHAR_DEC16_HIGH_%out_ok, L_CHAR_DEC16_NOT_HIGH_%out_ok
1240
+
1241
+ L_CHAR_DEC16_NOT_HIGH_%out_ok:
1242
+ __char_dec16_low_ge_alone_%out_ok = uge %lead, CHAR_UTF16_LOW_SURROGATE_MIN
1243
+ __char_dec16_low_le_alone_%out_ok = ule %lead, CHAR_UTF16_LOW_SURROGATE_MAX
1244
+ __char_dec16_is_low_alone_%out_ok = and __char_dec16_low_ge_alone_%out_ok, __char_dec16_low_le_alone_%out_ok
1245
+ br __char_dec16_is_low_alone_%out_ok -> L_CHAR_DEC16_ERR_LOW_%out_ok, L_CHAR_DEC16_BMP_%out_ok
1246
+
1247
+ L_CHAR_DEC16_BMP_%out_ok:
1248
+ %out_char = add %lead, 0
1249
+ %out_units = add 0, 1
1250
+ %out_ok = add 0, 1
1251
+ !__char_dec16_is_low_alone_%out_ok
1252
+ !__char_dec16_low_le_alone_%out_ok
1253
+ !__char_dec16_low_ge_alone_%out_ok
1254
+ !__char_dec16_is_high_%out_ok
1255
+ !__char_dec16_high_le_%out_ok
1256
+ !__char_dec16_high_ge_%out_ok
1257
+ jmp L_CHAR_DEC16_END_%out_ok
1258
+
1259
+ L_CHAR_DEC16_ERR_LOW_%out_ok:
1260
+ %out_char = add 0, 0
1261
+ %out_units = add 0, 1
1262
+ %out_ok = add 0, 0
1263
+ !__char_dec16_is_low_alone_%out_ok
1264
+ !__char_dec16_low_le_alone_%out_ok
1265
+ !__char_dec16_low_ge_alone_%out_ok
1266
+ !__char_dec16_is_high_%out_ok
1267
+ !__char_dec16_high_le_%out_ok
1268
+ !__char_dec16_high_ge_%out_ok
1269
+ jmp L_CHAR_DEC16_END_%out_ok
1270
+
1271
+ L_CHAR_DEC16_HIGH_%out_ok:
1272
+ __char_dec16_trail_ge_%out_ok = uge %trail, CHAR_UTF16_LOW_SURROGATE_MIN
1273
+ __char_dec16_trail_le_%out_ok = ule %trail, CHAR_UTF16_LOW_SURROGATE_MAX
1274
+ __char_dec16_trail_ok_%out_ok = and __char_dec16_trail_ge_%out_ok, __char_dec16_trail_le_%out_ok
1275
+ br __char_dec16_trail_ok_%out_ok -> L_CHAR_DEC16_PAIR_%out_ok, L_CHAR_DEC16_ERR_HIGH_%out_ok
1276
+
1277
+ L_CHAR_DEC16_PAIR_%out_ok:
1278
+ __char_dec16_high_part_%out_ok = sub %lead, CHAR_UTF16_HIGH_SURROGATE_MIN
1279
+ __char_dec16_high_shift_%out_ok = shl __char_dec16_high_part_%out_ok, 10
1280
+ __char_dec16_low_part_%out_ok = sub %trail, CHAR_UTF16_LOW_SURROGATE_MIN
1281
+ __char_dec16_pair_payload_%out_ok = or __char_dec16_high_shift_%out_ok, __char_dec16_low_part_%out_ok
1282
+ %out_char = add __char_dec16_pair_payload_%out_ok, CHAR_UTF16_SUPPLEMENTARY_BASE
1283
+ %out_units = add 0, 2
1284
+ %out_ok = add 0, 1
1285
+ !__char_dec16_pair_payload_%out_ok
1286
+ !__char_dec16_low_part_%out_ok
1287
+ !__char_dec16_high_shift_%out_ok
1288
+ !__char_dec16_high_part_%out_ok
1289
+ !__char_dec16_trail_ok_%out_ok
1290
+ !__char_dec16_trail_le_%out_ok
1291
+ !__char_dec16_trail_ge_%out_ok
1292
+ !__char_dec16_is_high_%out_ok
1293
+ !__char_dec16_high_le_%out_ok
1294
+ !__char_dec16_high_ge_%out_ok
1295
+ jmp L_CHAR_DEC16_END_%out_ok
1296
+
1297
+ L_CHAR_DEC16_ERR_HIGH_%out_ok:
1298
+ %out_char = add 0, 0
1299
+ %out_units = add 0, 1
1300
+ %out_ok = add 0, 0
1301
+ !__char_dec16_trail_ok_%out_ok
1302
+ !__char_dec16_trail_le_%out_ok
1303
+ !__char_dec16_trail_ge_%out_ok
1304
+ !__char_dec16_is_high_%out_ok
1305
+ !__char_dec16_high_le_%out_ok
1306
+ !__char_dec16_high_ge_%out_ok
1307
+
1308
+ L_CHAR_DEC16_END_%out_ok:
1309
+ [END_MACRO]