@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/path.sa ADDED
@@ -0,0 +1,3170 @@
1
+ // POSIX-like path helpers over Slice values.
2
+ // Trailing separators are ignored; callers own the returned Slice and must ! it.
3
+ @import "core/slice.sal"
4
+ @import "core/slice.sa"
5
+ @import "fs.sa"
6
+ @import "string.sa"
7
+ @import "os/unix_ffi.sa"
8
+ @import "num.sa"
9
+
10
+ @const PATH_SEPARATOR = utf8:"/"
11
+
12
+ [MACRO] PATH_MAKE_EMPTY %out_slice
13
+ %out_slice = alloc Slice_SIZE
14
+ __path_empty_ptr = 0 as ptr
15
+ __path_empty_len = 0 as u64
16
+ EXPAND SLICE_NEW %out_slice, __path_empty_ptr, __path_empty_len
17
+ !__path_empty_ptr
18
+ !__path_empty_len
19
+ [END_MACRO]
20
+
21
+ [MACRO] PATH_BASENAME %out_slice, %path_slice
22
+ __path_ptr = load %path_slice+Slice_ptr as ptr
23
+ __path_len = load %path_slice+Slice_len as u64
24
+ __path_end_slot = stack_alloc 8
25
+ __path_cursor_slot = stack_alloc 8
26
+ store __path_end_slot+0, __path_len as u64
27
+ __path_is_empty = eq __path_len, 0
28
+ br __path_is_empty -> L_PATH_BASENAME_EMPTY_%out_slice, L_PATH_BASENAME_TRIM_%out_slice
29
+
30
+ L_PATH_BASENAME_TRIM_%out_slice:
31
+ __path_end = load __path_end_slot+0 as u64
32
+ __path_end_is_zero = eq __path_end, 0
33
+ br __path_end_is_zero -> L_PATH_BASENAME_ROOT_%out_slice, L_PATH_BASENAME_CHECK_%out_slice
34
+
35
+ L_PATH_BASENAME_CHECK_%out_slice:
36
+ __path_prev_end = sub __path_end, 1
37
+ __path_ch_ip = ptr_add __path_ptr, __path_prev_end
38
+ __path_ch = load __path_ch_ip+0 as u8
39
+ __path_is_slash = eq __path_ch, 47
40
+ br __path_is_slash -> L_PATH_BASENAME_TRIM_NEXT_%out_slice, L_PATH_BASENAME_SCAN_%out_slice
41
+
42
+ L_PATH_BASENAME_TRIM_NEXT_%out_slice:
43
+ store __path_end_slot+0, __path_prev_end as u64
44
+ !__path_prev_end
45
+ !__path_ch_ip
46
+ !__path_ch
47
+ !__path_is_slash
48
+ !__path_end
49
+ !__path_end_is_zero
50
+ jmp L_PATH_BASENAME_TRIM_%out_slice
51
+
52
+ L_PATH_BASENAME_SCAN_%out_slice:
53
+ store __path_cursor_slot+0, __path_end as u64
54
+ !__path_prev_end
55
+ !__path_ch_ip
56
+ !__path_ch
57
+ !__path_is_slash
58
+ !__path_end_is_zero
59
+ jmp L_PATH_BASENAME_SCAN_LOOP_%out_slice
60
+
61
+ L_PATH_BASENAME_SCAN_LOOP_%out_slice:
62
+ __path_cursor = load __path_cursor_slot+0 as u64
63
+ __path_cursor_is_zero = eq __path_cursor, 0
64
+ br __path_cursor_is_zero -> L_PATH_BASENAME_NO_SLASH_%out_slice, L_PATH_BASENAME_SCAN_CHECK_%out_slice
65
+
66
+ L_PATH_BASENAME_SCAN_CHECK_%out_slice:
67
+ __path_prev = sub __path_cursor, 1
68
+ __path_ch_ip = ptr_add __path_ptr, __path_prev
69
+ __path_ch = load __path_ch_ip+0 as u8
70
+ __path_is_slash = eq __path_ch, 47
71
+ br __path_is_slash -> L_PATH_BASENAME_FOUND_%out_slice, L_PATH_BASENAME_SCAN_NEXT_%out_slice
72
+
73
+ L_PATH_BASENAME_SCAN_NEXT_%out_slice:
74
+ __path_next_cursor = sub __path_cursor, 1
75
+ store __path_cursor_slot+0, __path_next_cursor as u64
76
+ !__path_cursor
77
+ !__path_cursor_is_zero
78
+ !__path_prev
79
+ !__path_ch_ip
80
+ !__path_ch
81
+ !__path_is_slash
82
+ !__path_next_cursor
83
+ jmp L_PATH_BASENAME_SCAN_LOOP_%out_slice
84
+
85
+ L_PATH_BASENAME_FOUND_%out_slice:
86
+ __path_start = add __path_cursor, 0
87
+ __path_basename_len = sub __path_end, __path_start
88
+ EXPAND STR_SLICE %out_slice, %path_slice, __path_start, __path_basename_len
89
+ !__path_basename_len
90
+ !__path_cursor
91
+ !__path_cursor_is_zero
92
+ !__path_prev
93
+ !__path_ch_ip
94
+ !__path_ch
95
+ !__path_is_slash
96
+ !__path_end
97
+ jmp L_PATH_BASENAME_END_%out_slice
98
+
99
+ L_PATH_BASENAME_NO_SLASH_%out_slice:
100
+ __path_start = 0 as u64
101
+ __path_basename_len = add __path_end, 0
102
+ EXPAND STR_SLICE %out_slice, %path_slice, __path_start, __path_basename_len
103
+ !__path_basename_len
104
+ !__path_cursor
105
+ !__path_cursor_is_zero
106
+ !__path_end
107
+ jmp L_PATH_BASENAME_END_%out_slice
108
+
109
+ L_PATH_BASENAME_ROOT_%out_slice:
110
+ EXPAND STR_SLICE %out_slice, %path_slice, 0, 1
111
+ !__path_end
112
+ !__path_end_is_zero
113
+ jmp L_PATH_BASENAME_END_%out_slice
114
+
115
+ L_PATH_BASENAME_EMPTY_%out_slice:
116
+ EXPAND PATH_MAKE_EMPTY %out_slice
117
+ jmp L_PATH_BASENAME_END_%out_slice
118
+
119
+ L_PATH_BASENAME_END_%out_slice:
120
+ !__path_ptr
121
+ !__path_len
122
+ !__path_is_empty
123
+ [END_MACRO]
124
+
125
+ [MACRO] PATH_DIRNAME %out_slice, %path_slice
126
+ __path_ptr = load %path_slice+Slice_ptr as ptr
127
+ __path_len = load %path_slice+Slice_len as u64
128
+ __path_end_slot = stack_alloc 8
129
+ __path_cursor_slot = stack_alloc 8
130
+ store __path_end_slot+0, __path_len as u64
131
+ __path_is_empty = eq __path_len, 0
132
+ br __path_is_empty -> L_PATH_DIRNAME_EMPTY, L_PATH_DIRNAME_TRIM
133
+
134
+ L_PATH_DIRNAME_TRIM:
135
+ __path_end = load __path_end_slot+0 as u64
136
+ __path_end_is_zero = eq __path_end, 0
137
+ br __path_end_is_zero -> L_PATH_DIRNAME_ROOT_FROM_TRIM, L_PATH_DIRNAME_CHECK
138
+
139
+ L_PATH_DIRNAME_CHECK:
140
+ __path_prev_end = sub __path_end, 1
141
+ __path_ch_ip = ptr_add __path_ptr, __path_prev_end
142
+ __path_ch = load __path_ch_ip+0 as u8
143
+ __path_is_slash = eq __path_ch, 47
144
+ br __path_is_slash -> L_PATH_DIRNAME_TRIM_NEXT, L_PATH_DIRNAME_SCAN
145
+
146
+ L_PATH_DIRNAME_TRIM_NEXT:
147
+ store __path_end_slot+0, __path_prev_end as u64
148
+ !__path_prev_end
149
+ !__path_ch_ip
150
+ !__path_ch
151
+ !__path_is_slash
152
+ !__path_end
153
+ !__path_end_is_zero
154
+ jmp L_PATH_DIRNAME_TRIM
155
+
156
+ L_PATH_DIRNAME_SCAN:
157
+ store __path_cursor_slot+0, __path_end as u64
158
+ !__path_prev_end
159
+ !__path_ch_ip
160
+ !__path_ch
161
+ !__path_is_slash
162
+ !__path_end_is_zero
163
+ jmp L_PATH_DIRNAME_SCAN_LOOP
164
+
165
+ L_PATH_DIRNAME_SCAN_LOOP:
166
+ __path_cursor = load __path_cursor_slot+0 as u64
167
+ __path_cursor_is_zero = eq __path_cursor, 0
168
+ br __path_cursor_is_zero -> L_PATH_DIRNAME_NO_SLASH, L_PATH_DIRNAME_SCAN_CHECK
169
+
170
+ L_PATH_DIRNAME_SCAN_CHECK:
171
+ __path_prev = sub __path_cursor, 1
172
+ __path_ch_ip = ptr_add __path_ptr, __path_prev
173
+ __path_ch = load __path_ch_ip+0 as u8
174
+ __path_is_slash = eq __path_ch, 47
175
+ br __path_is_slash -> L_PATH_DIRNAME_FOUND, L_PATH_DIRNAME_SCAN_NEXT
176
+
177
+ L_PATH_DIRNAME_SCAN_NEXT:
178
+ __path_next_cursor = sub __path_cursor, 1
179
+ store __path_cursor_slot+0, __path_next_cursor as u64
180
+ !__path_cursor
181
+ !__path_cursor_is_zero
182
+ !__path_prev
183
+ !__path_ch_ip
184
+ !__path_ch
185
+ !__path_is_slash
186
+ !__path_next_cursor
187
+ jmp L_PATH_DIRNAME_SCAN_LOOP
188
+
189
+ L_PATH_DIRNAME_FOUND:
190
+ __path_slash_is_root = eq __path_prev, 0
191
+ br __path_slash_is_root -> L_PATH_DIRNAME_ROOT_FROM_SCAN, L_PATH_DIRNAME_PREFIX
192
+
193
+ L_PATH_DIRNAME_PREFIX:
194
+ __path_dirname_len = add __path_prev, 0
195
+ EXPAND STR_SLICE %out_slice, %path_slice, 0, __path_dirname_len
196
+ !__path_dirname_len
197
+ !__path_slash_is_root
198
+ !__path_cursor
199
+ !__path_cursor_is_zero
200
+ !__path_prev
201
+ !__path_ch_ip
202
+ !__path_ch
203
+ !__path_is_slash
204
+ !__path_end
205
+ jmp L_PATH_DIRNAME_END
206
+
207
+ L_PATH_DIRNAME_ROOT_FROM_SCAN:
208
+ EXPAND STR_SLICE %out_slice, %path_slice, 0, 1
209
+ !__path_slash_is_root
210
+ !__path_cursor
211
+ !__path_cursor_is_zero
212
+ !__path_prev
213
+ !__path_ch_ip
214
+ !__path_ch
215
+ !__path_is_slash
216
+ !__path_end
217
+ jmp L_PATH_DIRNAME_END
218
+
219
+ L_PATH_DIRNAME_NO_SLASH:
220
+ EXPAND PATH_MAKE_EMPTY %out_slice
221
+ !__path_cursor
222
+ !__path_cursor_is_zero
223
+ !__path_end
224
+ jmp L_PATH_DIRNAME_END
225
+
226
+ L_PATH_DIRNAME_ROOT_FROM_TRIM:
227
+ EXPAND STR_SLICE %out_slice, %path_slice, 0, 1
228
+ !__path_end
229
+ !__path_end_is_zero
230
+ jmp L_PATH_DIRNAME_END
231
+
232
+ L_PATH_DIRNAME_EMPTY:
233
+ EXPAND PATH_MAKE_EMPTY %out_slice
234
+ jmp L_PATH_DIRNAME_END
235
+
236
+ L_PATH_DIRNAME_END:
237
+ !__path_ptr
238
+ !__path_len
239
+ !__path_is_empty
240
+ [END_MACRO]
241
+
242
+ [MACRO] PATH_STEM %out_slice, %path_slice
243
+ EXPAND PATH_BASENAME __path_base_%out_slice, %path_slice
244
+ __path_base_ptr = load __path_base_%out_slice+Slice_ptr as ptr
245
+ __path_base_len = load __path_base_%out_slice+Slice_len as u64
246
+ __path_dot_cursor_slot = stack_alloc 8
247
+ store __path_dot_cursor_slot+0, __path_base_len as u64
248
+ jmp L_PATH_STEM_SCAN_%out_slice
249
+
250
+ L_PATH_STEM_SCAN_%out_slice:
251
+ __path_dot_cursor = load __path_dot_cursor_slot+0 as u64
252
+ __path_dot_cursor_is_zero = eq __path_dot_cursor, 0
253
+ br __path_dot_cursor_is_zero -> L_PATH_STEM_NO_DOT_EMPTY_%out_slice, L_PATH_STEM_SCAN_CHECK_%out_slice
254
+
255
+ L_PATH_STEM_SCAN_CHECK_%out_slice:
256
+ __path_dot_prev = sub __path_dot_cursor, 1
257
+ __path_dot_ch_ip = ptr_add __path_base_ptr, __path_dot_prev
258
+ __path_dot_ch = load __path_dot_ch_ip+0 as u8
259
+ __path_is_dot = eq __path_dot_ch, 46
260
+ br __path_is_dot -> L_PATH_STEM_DOT_%out_slice, L_PATH_STEM_SCAN_NEXT_%out_slice
261
+
262
+ L_PATH_STEM_SCAN_NEXT_%out_slice:
263
+ __path_next_dot_cursor = sub __path_dot_cursor, 1
264
+ store __path_dot_cursor_slot+0, __path_next_dot_cursor as u64
265
+ !__path_dot_cursor
266
+ !__path_dot_cursor_is_zero
267
+ !__path_dot_prev
268
+ !__path_dot_ch_ip
269
+ !__path_dot_ch
270
+ !__path_is_dot
271
+ !__path_next_dot_cursor
272
+ jmp L_PATH_STEM_SCAN_%out_slice
273
+
274
+ L_PATH_STEM_DOT_%out_slice:
275
+ __path_leading_dot = eq __path_dot_prev, 0
276
+ br __path_leading_dot -> L_PATH_STEM_NO_DOT_LEADING_%out_slice, L_PATH_STEM_VALID_%out_slice
277
+
278
+ L_PATH_STEM_VALID_%out_slice:
279
+ __path_stem_len = add __path_dot_prev, 0
280
+ EXPAND STR_SLICE %out_slice, __path_base_%out_slice, 0, __path_stem_len
281
+ !__path_stem_len
282
+ !__path_leading_dot
283
+ !__path_dot_cursor
284
+ !__path_dot_cursor_is_zero
285
+ !__path_dot_prev
286
+ !__path_dot_ch_ip
287
+ !__path_dot_ch
288
+ !__path_is_dot
289
+ !__path_base_ptr
290
+ !__path_base_len
291
+ !__path_base_%out_slice
292
+ jmp L_PATH_STEM_END_%out_slice
293
+
294
+ L_PATH_STEM_NO_DOT_EMPTY_%out_slice:
295
+ EXPAND STR_SLICE %out_slice, __path_base_%out_slice, 0, __path_base_len
296
+ !__path_dot_cursor
297
+ !__path_dot_cursor_is_zero
298
+ !__path_base_ptr
299
+ !__path_base_len
300
+ !__path_base_%out_slice
301
+ jmp L_PATH_STEM_END_%out_slice
302
+
303
+ L_PATH_STEM_NO_DOT_LEADING_%out_slice:
304
+ EXPAND STR_SLICE %out_slice, __path_base_%out_slice, 0, __path_base_len
305
+ !__path_leading_dot
306
+ !__path_dot_cursor
307
+ !__path_dot_cursor_is_zero
308
+ !__path_dot_prev
309
+ !__path_dot_ch_ip
310
+ !__path_dot_ch
311
+ !__path_is_dot
312
+ !__path_base_ptr
313
+ !__path_base_len
314
+ !__path_base_%out_slice
315
+ jmp L_PATH_STEM_END_%out_slice
316
+
317
+ L_PATH_STEM_END_%out_slice:
318
+ [END_MACRO]
319
+
320
+ [MACRO] PATH_EXT %out_slice, %path_slice
321
+ EXPAND PATH_BASENAME __path_base_%out_slice, %path_slice
322
+ __path_base_ptr = load __path_base_%out_slice+Slice_ptr as ptr
323
+ __path_base_len = load __path_base_%out_slice+Slice_len as u64
324
+ __path_dot_cursor_slot = stack_alloc 8
325
+ store __path_dot_cursor_slot+0, __path_base_len as u64
326
+ jmp L_PATH_EXT_SCAN_%out_slice
327
+
328
+ L_PATH_EXT_SCAN_%out_slice:
329
+ __path_dot_cursor = load __path_dot_cursor_slot+0 as u64
330
+ __path_dot_cursor_is_zero = eq __path_dot_cursor, 0
331
+ br __path_dot_cursor_is_zero -> L_PATH_EXT_NO_DOT_EMPTY_%out_slice, L_PATH_EXT_SCAN_CHECK_%out_slice
332
+
333
+ L_PATH_EXT_SCAN_CHECK_%out_slice:
334
+ __path_dot_prev = sub __path_dot_cursor, 1
335
+ __path_dot_ch_ip = ptr_add __path_base_ptr, __path_dot_prev
336
+ __path_dot_ch = load __path_dot_ch_ip+0 as u8
337
+ __path_is_dot = eq __path_dot_ch, 46
338
+ br __path_is_dot -> L_PATH_EXT_DOT_%out_slice, L_PATH_EXT_SCAN_NEXT_%out_slice
339
+
340
+ L_PATH_EXT_SCAN_NEXT_%out_slice:
341
+ __path_next_dot_cursor = sub __path_dot_cursor, 1
342
+ store __path_dot_cursor_slot+0, __path_next_dot_cursor as u64
343
+ !__path_dot_cursor
344
+ !__path_dot_cursor_is_zero
345
+ !__path_dot_prev
346
+ !__path_dot_ch_ip
347
+ !__path_dot_ch
348
+ !__path_is_dot
349
+ !__path_next_dot_cursor
350
+ jmp L_PATH_EXT_SCAN_%out_slice
351
+
352
+ L_PATH_EXT_DOT_%out_slice:
353
+ __path_leading_dot = eq __path_dot_prev, 0
354
+ br __path_leading_dot -> L_PATH_EXT_NO_DOT_LEADING_%out_slice, L_PATH_EXT_TRAILING_%out_slice
355
+
356
+ L_PATH_EXT_TRAILING_%out_slice:
357
+ __path_trailing_dot = eq __path_dot_cursor, __path_base_len
358
+ br __path_trailing_dot -> L_PATH_EXT_NO_DOT_TRAILING_%out_slice, L_PATH_EXT_VALID_%out_slice
359
+
360
+ L_PATH_EXT_VALID_%out_slice:
361
+ __path_ext_start = add __path_dot_prev, 1
362
+ __path_ext_len = sub __path_base_len, __path_ext_start
363
+ EXPAND STR_SLICE %out_slice, __path_base_%out_slice, __path_ext_start, __path_ext_len
364
+ !__path_ext_start
365
+ !__path_ext_len
366
+ !__path_trailing_dot
367
+ !__path_leading_dot
368
+ !__path_dot_cursor
369
+ !__path_dot_cursor_is_zero
370
+ !__path_dot_prev
371
+ !__path_dot_ch_ip
372
+ !__path_dot_ch
373
+ !__path_is_dot
374
+ !__path_base_ptr
375
+ !__path_base_len
376
+ !__path_base_%out_slice
377
+ jmp L_PATH_EXT_END_%out_slice
378
+
379
+ L_PATH_EXT_NO_DOT_EMPTY_%out_slice:
380
+ EXPAND PATH_MAKE_EMPTY %out_slice
381
+ !__path_dot_cursor
382
+ !__path_dot_cursor_is_zero
383
+ !__path_base_ptr
384
+ !__path_base_len
385
+ !__path_base_%out_slice
386
+ jmp L_PATH_EXT_END_%out_slice
387
+
388
+ L_PATH_EXT_NO_DOT_LEADING_%out_slice:
389
+ EXPAND PATH_MAKE_EMPTY %out_slice
390
+ !__path_leading_dot
391
+ !__path_dot_cursor
392
+ !__path_dot_cursor_is_zero
393
+ !__path_dot_prev
394
+ !__path_dot_ch_ip
395
+ !__path_dot_ch
396
+ !__path_is_dot
397
+ !__path_base_ptr
398
+ !__path_base_len
399
+ !__path_base_%out_slice
400
+ jmp L_PATH_EXT_END_%out_slice
401
+
402
+ L_PATH_EXT_NO_DOT_TRAILING_%out_slice:
403
+ EXPAND PATH_MAKE_EMPTY %out_slice
404
+ !__path_trailing_dot
405
+ !__path_leading_dot
406
+ !__path_dot_cursor
407
+ !__path_dot_cursor_is_zero
408
+ !__path_dot_prev
409
+ !__path_dot_ch_ip
410
+ !__path_dot_ch
411
+ !__path_is_dot
412
+ !__path_base_ptr
413
+ !__path_base_len
414
+ !__path_base_%out_slice
415
+ jmp L_PATH_EXT_END_%out_slice
416
+
417
+ L_PATH_EXT_END_%out_slice:
418
+ [END_MACRO]
419
+
420
+ [MACRO] PATH_IS_ABSOLUTE %out_bool, %path_slice
421
+ __path_len_%out_bool = load %path_slice+Slice_len as u64
422
+ __path_empty_%out_bool = eq __path_len_%out_bool, 0
423
+ br __path_empty_%out_bool -> L_PATH_IS_ABSOLUTE_FALSE, L_PATH_IS_ABSOLUTE_CHECK
424
+
425
+ L_PATH_IS_ABSOLUTE_CHECK:
426
+ __path_ptr_%out_bool = load %path_slice+Slice_ptr as ptr
427
+ __path_first_%out_bool = load __path_ptr_%out_bool+0 as u8
428
+ %out_bool = eq __path_first_%out_bool, 47
429
+ !__path_first_%out_bool
430
+ !__path_ptr_%out_bool
431
+ !__path_empty_%out_bool
432
+ !__path_len_%out_bool
433
+ jmp L_PATH_IS_ABSOLUTE_END
434
+
435
+ L_PATH_IS_ABSOLUTE_FALSE:
436
+ %out_bool = add 0, 0
437
+ !__path_empty_%out_bool
438
+ !__path_len_%out_bool
439
+ jmp L_PATH_IS_ABSOLUTE_END
440
+
441
+ L_PATH_IS_ABSOLUTE_END:
442
+ [END_MACRO]
443
+
444
+ [MACRO] PATH_HAS_ROOT %out_bool, %path_slice
445
+ EXPAND PATH_IS_ABSOLUTE %out_bool, %path_slice
446
+ [END_MACRO]
447
+
448
+ [MACRO] PATH_IS_RELATIVE %out_bool, %path_slice
449
+ EXPAND PATH_IS_ABSOLUTE __path_abs_%out_bool, %path_slice
450
+ %out_bool = eq __path_abs_%out_bool, 0
451
+ !__path_abs_%out_bool
452
+ [END_MACRO]
453
+
454
+ [MACRO] PATH_IS_EMPTY %out_bool, %path_slice
455
+ __path_len_%out_bool = load %path_slice+Slice_len as u64
456
+ %out_bool = eq __path_len_%out_bool, 0
457
+ !__path_len_%out_bool
458
+ [END_MACRO]
459
+
460
+ [MACRO] PATH_ENDS_WITH_SEPARATOR %out_bool, %path_slice
461
+ __path_len_%out_bool = load %path_slice+Slice_len as u64
462
+ __path_empty_%out_bool = eq __path_len_%out_bool, 0
463
+ br __path_empty_%out_bool -> L_PATH_ENDS_WITH_SEPARATOR_FALSE, L_PATH_ENDS_WITH_SEPARATOR_CHECK
464
+
465
+ L_PATH_ENDS_WITH_SEPARATOR_CHECK:
466
+ __path_ptr_%out_bool = load %path_slice+Slice_ptr as ptr
467
+ __path_last_idx_%out_bool = sub __path_len_%out_bool, 1
468
+ __path_last_ptr_%out_bool = ptr_add __path_ptr_%out_bool, __path_last_idx_%out_bool
469
+ __path_last_%out_bool = load __path_last_ptr_%out_bool+0 as u8
470
+ %out_bool = eq __path_last_%out_bool, 47
471
+ !__path_last_%out_bool
472
+ !__path_last_ptr_%out_bool
473
+ !__path_last_idx_%out_bool
474
+ !__path_ptr_%out_bool
475
+ !__path_empty_%out_bool
476
+ !__path_len_%out_bool
477
+ jmp L_PATH_ENDS_WITH_SEPARATOR_END
478
+
479
+ L_PATH_ENDS_WITH_SEPARATOR_FALSE:
480
+ %out_bool = add 0, 0
481
+ !__path_empty_%out_bool
482
+ !__path_len_%out_bool
483
+ jmp L_PATH_ENDS_WITH_SEPARATOR_END
484
+
485
+ L_PATH_ENDS_WITH_SEPARATOR_END:
486
+ [END_MACRO]
487
+
488
+ [MACRO] PATH_STARTS_WITH %out_bool, %path_slice, %prefix_slice
489
+ __path_prefix_len_%out_bool = load %prefix_slice+Slice_len as u64
490
+ __path_len_%out_bool = load %path_slice+Slice_len as u64
491
+ __path_idx_slot_%out_bool = stack_alloc 8
492
+ store __path_idx_slot_%out_bool+0, 0 as u64
493
+ __path_prefix_empty_%out_bool = eq __path_prefix_len_%out_bool, 0
494
+ br __path_prefix_empty_%out_bool -> L_PATH_STARTS_WITH_TRUE_EMPTY, L_PATH_STARTS_WITH_CHECK_PREFIX
495
+
496
+ L_PATH_STARTS_WITH_CHECK_PREFIX:
497
+ __path_prefix_fits_%out_bool = ule __path_prefix_len_%out_bool, __path_len_%out_bool
498
+ br __path_prefix_fits_%out_bool -> L_PATH_STARTS_WITH_COMPARE_INIT, L_PATH_STARTS_WITH_FALSE_SHORT
499
+
500
+ L_PATH_STARTS_WITH_COMPARE_INIT:
501
+ __path_ptr_%out_bool = load %path_slice+Slice_ptr as ptr
502
+ __path_prefix_ptr_%out_bool = load %prefix_slice+Slice_ptr as ptr
503
+ jmp L_PATH_STARTS_WITH_COMPARE_HEAD
504
+
505
+ L_PATH_STARTS_WITH_COMPARE_HEAD:
506
+ __path_idx_%out_bool = load __path_idx_slot_%out_bool+0 as u64
507
+ __path_compare_done_%out_bool = eq __path_idx_%out_bool, __path_prefix_len_%out_bool
508
+ br __path_compare_done_%out_bool -> L_PATH_STARTS_WITH_CHECK_BOUNDARY, L_PATH_STARTS_WITH_COMPARE_BODY
509
+
510
+ L_PATH_STARTS_WITH_COMPARE_BODY:
511
+ __path_byte_ptr_%out_bool = ptr_add __path_ptr_%out_bool, __path_idx_%out_bool
512
+ __path_prefix_byte_ptr_%out_bool = ptr_add __path_prefix_ptr_%out_bool, __path_idx_%out_bool
513
+ __path_byte_%out_bool = load __path_byte_ptr_%out_bool+0 as u8
514
+ __path_prefix_byte_%out_bool = load __path_prefix_byte_ptr_%out_bool+0 as u8
515
+ __path_bytes_eq_%out_bool = eq __path_byte_%out_bool, __path_prefix_byte_%out_bool
516
+ br __path_bytes_eq_%out_bool -> L_PATH_STARTS_WITH_COMPARE_NEXT, L_PATH_STARTS_WITH_FALSE_COMPARE
517
+
518
+ L_PATH_STARTS_WITH_COMPARE_NEXT:
519
+ __path_next_idx_%out_bool = add __path_idx_%out_bool, 1
520
+ store __path_idx_slot_%out_bool+0, __path_next_idx_%out_bool as u64
521
+ !__path_next_idx_%out_bool
522
+ !__path_bytes_eq_%out_bool
523
+ !__path_prefix_byte_%out_bool
524
+ !__path_byte_%out_bool
525
+ !__path_prefix_byte_ptr_%out_bool
526
+ !__path_byte_ptr_%out_bool
527
+ !__path_compare_done_%out_bool
528
+ !__path_idx_%out_bool
529
+ jmp L_PATH_STARTS_WITH_COMPARE_HEAD
530
+
531
+ L_PATH_STARTS_WITH_CHECK_BOUNDARY:
532
+ __path_same_len_%out_bool = eq __path_len_%out_bool, __path_prefix_len_%out_bool
533
+ br __path_same_len_%out_bool -> L_PATH_STARTS_WITH_TRUE_SAME, L_PATH_STARTS_WITH_CHECK_PREFIX_SEPARATOR
534
+
535
+ L_PATH_STARTS_WITH_CHECK_PREFIX_SEPARATOR:
536
+ __path_prefix_last_idx_%out_bool = sub __path_prefix_len_%out_bool, 1
537
+ __path_prefix_last_ptr_%out_bool = ptr_add __path_prefix_ptr_%out_bool, __path_prefix_last_idx_%out_bool
538
+ __path_prefix_last_%out_bool = load __path_prefix_last_ptr_%out_bool+0 as u8
539
+ __path_prefix_ends_sep_%out_bool = eq __path_prefix_last_%out_bool, 47
540
+ br __path_prefix_ends_sep_%out_bool -> L_PATH_STARTS_WITH_TRUE_PREFIX_SEP, L_PATH_STARTS_WITH_CHECK_PATH_SEPARATOR
541
+
542
+ L_PATH_STARTS_WITH_CHECK_PATH_SEPARATOR:
543
+ __path_boundary_ptr_%out_bool = ptr_add __path_ptr_%out_bool, __path_prefix_len_%out_bool
544
+ __path_boundary_%out_bool = load __path_boundary_ptr_%out_bool+0 as u8
545
+ %out_bool = eq __path_boundary_%out_bool, 47
546
+ !__path_boundary_%out_bool
547
+ !__path_boundary_ptr_%out_bool
548
+ !__path_ptr_%out_bool
549
+ !__path_prefix_ends_sep_%out_bool
550
+ !__path_prefix_last_%out_bool
551
+ !__path_prefix_last_ptr_%out_bool
552
+ !__path_prefix_last_idx_%out_bool
553
+ !__path_prefix_ptr_%out_bool
554
+ !__path_compare_done_%out_bool
555
+ !__path_idx_%out_bool
556
+ !__path_same_len_%out_bool
557
+ !__path_prefix_fits_%out_bool
558
+ !__path_prefix_empty_%out_bool
559
+ !__path_len_%out_bool
560
+ !__path_prefix_len_%out_bool
561
+ jmp L_PATH_STARTS_WITH_END
562
+
563
+ L_PATH_STARTS_WITH_TRUE_PREFIX_SEP:
564
+ %out_bool = add 0, 1
565
+ !__path_prefix_ends_sep_%out_bool
566
+ !__path_prefix_last_%out_bool
567
+ !__path_prefix_last_ptr_%out_bool
568
+ !__path_prefix_last_idx_%out_bool
569
+ !__path_prefix_ptr_%out_bool
570
+ !__path_ptr_%out_bool
571
+ !__path_compare_done_%out_bool
572
+ !__path_idx_%out_bool
573
+ !__path_same_len_%out_bool
574
+ !__path_prefix_fits_%out_bool
575
+ !__path_prefix_empty_%out_bool
576
+ !__path_len_%out_bool
577
+ !__path_prefix_len_%out_bool
578
+ jmp L_PATH_STARTS_WITH_END
579
+
580
+ L_PATH_STARTS_WITH_TRUE_SAME:
581
+ %out_bool = add 0, 1
582
+ !__path_same_len_%out_bool
583
+ !__path_prefix_ptr_%out_bool
584
+ !__path_ptr_%out_bool
585
+ !__path_compare_done_%out_bool
586
+ !__path_idx_%out_bool
587
+ !__path_prefix_fits_%out_bool
588
+ !__path_prefix_empty_%out_bool
589
+ !__path_len_%out_bool
590
+ !__path_prefix_len_%out_bool
591
+ jmp L_PATH_STARTS_WITH_END
592
+
593
+ L_PATH_STARTS_WITH_FALSE_COMPARE:
594
+ %out_bool = add 0, 0
595
+ !__path_bytes_eq_%out_bool
596
+ !__path_prefix_byte_%out_bool
597
+ !__path_byte_%out_bool
598
+ !__path_prefix_byte_ptr_%out_bool
599
+ !__path_byte_ptr_%out_bool
600
+ !__path_compare_done_%out_bool
601
+ !__path_idx_%out_bool
602
+ !__path_prefix_ptr_%out_bool
603
+ !__path_ptr_%out_bool
604
+ !__path_prefix_fits_%out_bool
605
+ !__path_prefix_empty_%out_bool
606
+ !__path_len_%out_bool
607
+ !__path_prefix_len_%out_bool
608
+ jmp L_PATH_STARTS_WITH_END
609
+
610
+ L_PATH_STARTS_WITH_FALSE_SHORT:
611
+ %out_bool = add 0, 0
612
+ !__path_prefix_fits_%out_bool
613
+ !__path_prefix_empty_%out_bool
614
+ !__path_len_%out_bool
615
+ !__path_prefix_len_%out_bool
616
+ jmp L_PATH_STARTS_WITH_END
617
+
618
+ L_PATH_STARTS_WITH_TRUE_EMPTY:
619
+ %out_bool = add 0, 1
620
+ !__path_prefix_empty_%out_bool
621
+ !__path_len_%out_bool
622
+ !__path_prefix_len_%out_bool
623
+ jmp L_PATH_STARTS_WITH_END
624
+
625
+ L_PATH_STARTS_WITH_END:
626
+ [END_MACRO]
627
+
628
+ [MACRO] PATH_TRY_STRIP_PREFIX %out_ok, %out_slice, %path_slice, %prefix_slice
629
+ EXPAND PATH_STARTS_WITH __path_strip_match_%out_ok, %path_slice, %prefix_slice
630
+ br __path_strip_match_%out_ok -> L_PATH_STRIP_HIT, L_PATH_STRIP_MISS
631
+
632
+ L_PATH_STRIP_HIT:
633
+ __path_prefix_len_%out_ok = load %prefix_slice+Slice_len as u64
634
+ __path_len_%out_ok = load %path_slice+Slice_len as u64
635
+ __path_exact_%out_ok = eq __path_prefix_len_%out_ok, __path_len_%out_ok
636
+ br __path_exact_%out_ok -> L_PATH_STRIP_EXACT, L_PATH_STRIP_CHECK_EMPTY
637
+
638
+ L_PATH_STRIP_CHECK_EMPTY:
639
+ __path_prefix_empty_%out_ok = eq __path_prefix_len_%out_ok, 0
640
+ br __path_prefix_empty_%out_ok -> L_PATH_STRIP_FROM_ZERO, L_PATH_STRIP_CHECK_PREFIX_SEPARATOR
641
+
642
+ L_PATH_STRIP_CHECK_PREFIX_SEPARATOR:
643
+ __path_prefix_ptr_%out_ok = load %prefix_slice+Slice_ptr as ptr
644
+ __path_prefix_last_idx_%out_ok = sub __path_prefix_len_%out_ok, 1
645
+ __path_prefix_last_ptr_%out_ok = ptr_add __path_prefix_ptr_%out_ok, __path_prefix_last_idx_%out_ok
646
+ __path_prefix_last_%out_ok = load __path_prefix_last_ptr_%out_ok+0 as u8
647
+ __path_prefix_ends_sep_%out_ok = eq __path_prefix_last_%out_ok, 47
648
+ br __path_prefix_ends_sep_%out_ok -> L_PATH_STRIP_FROM_PREFIX, L_PATH_STRIP_AFTER_SEPARATOR
649
+
650
+ L_PATH_STRIP_AFTER_SEPARATOR:
651
+ __path_start_%out_ok = add __path_prefix_len_%out_ok, 1
652
+ __path_rest_len_%out_ok = sub __path_len_%out_ok, __path_start_%out_ok
653
+ EXPAND STR_SLICE %out_slice, %path_slice, __path_start_%out_ok, __path_rest_len_%out_ok
654
+ %out_ok = add 0, 1
655
+ !__path_rest_len_%out_ok
656
+ !__path_start_%out_ok
657
+ !__path_prefix_ends_sep_%out_ok
658
+ !__path_prefix_last_%out_ok
659
+ !__path_prefix_last_ptr_%out_ok
660
+ !__path_prefix_last_idx_%out_ok
661
+ !__path_prefix_ptr_%out_ok
662
+ !__path_prefix_empty_%out_ok
663
+ !__path_exact_%out_ok
664
+ !__path_len_%out_ok
665
+ !__path_prefix_len_%out_ok
666
+ !__path_strip_match_%out_ok
667
+ jmp L_PATH_STRIP_END
668
+
669
+ L_PATH_STRIP_FROM_PREFIX:
670
+ __path_start_%out_ok = add __path_prefix_len_%out_ok, 0
671
+ __path_rest_len_%out_ok = sub __path_len_%out_ok, __path_start_%out_ok
672
+ EXPAND STR_SLICE %out_slice, %path_slice, __path_start_%out_ok, __path_rest_len_%out_ok
673
+ %out_ok = add 0, 1
674
+ !__path_rest_len_%out_ok
675
+ !__path_start_%out_ok
676
+ !__path_prefix_ends_sep_%out_ok
677
+ !__path_prefix_last_%out_ok
678
+ !__path_prefix_last_ptr_%out_ok
679
+ !__path_prefix_last_idx_%out_ok
680
+ !__path_prefix_ptr_%out_ok
681
+ !__path_prefix_empty_%out_ok
682
+ !__path_exact_%out_ok
683
+ !__path_len_%out_ok
684
+ !__path_prefix_len_%out_ok
685
+ !__path_strip_match_%out_ok
686
+ jmp L_PATH_STRIP_END
687
+
688
+ L_PATH_STRIP_FROM_ZERO:
689
+ EXPAND STR_SLICE %out_slice, %path_slice, 0, __path_len_%out_ok
690
+ %out_ok = add 0, 1
691
+ !__path_prefix_empty_%out_ok
692
+ !__path_exact_%out_ok
693
+ !__path_len_%out_ok
694
+ !__path_prefix_len_%out_ok
695
+ !__path_strip_match_%out_ok
696
+ jmp L_PATH_STRIP_END
697
+
698
+ L_PATH_STRIP_EXACT:
699
+ EXPAND PATH_MAKE_EMPTY %out_slice
700
+ %out_ok = add 0, 1
701
+ !__path_exact_%out_ok
702
+ !__path_len_%out_ok
703
+ !__path_prefix_len_%out_ok
704
+ !__path_strip_match_%out_ok
705
+ jmp L_PATH_STRIP_END
706
+
707
+ L_PATH_STRIP_MISS:
708
+ EXPAND PATH_MAKE_EMPTY %out_slice
709
+ %out_ok = add 0, 0
710
+ !__path_strip_match_%out_ok
711
+ jmp L_PATH_STRIP_END
712
+
713
+ L_PATH_STRIP_END:
714
+ [END_MACRO]
715
+
716
+ // Rust method-name alias over PATH_TRY_STRIP_PREFIX.
717
+ [MACRO] PATH_STRIP_PREFIX %out_ok, %out_slice, %path_slice, %prefix_slice
718
+ EXPAND PATH_TRY_STRIP_PREFIX %out_ok, %out_slice, %path_slice, %prefix_slice
719
+ [END_MACRO]
720
+
721
+ [MACRO] PATH_TRIM_PREFIX %out_slice, %path_slice, %prefix_slice
722
+ EXPAND PATH_TRY_STRIP_PREFIX __path_trim_ok_%out_slice, __path_trim_value_%out_slice, %path_slice, %prefix_slice
723
+ br __path_trim_ok_%out_slice -> L_PATH_TRIM_PREFIX_HIT_%out_slice, L_PATH_TRIM_PREFIX_MISS_%out_slice
724
+
725
+ L_PATH_TRIM_PREFIX_HIT_%out_slice:
726
+ __path_trim_value_len_%out_slice = load __path_trim_value_%out_slice+Slice_len as u64
727
+ EXPAND STR_SLICE %out_slice, __path_trim_value_%out_slice, 0, __path_trim_value_len_%out_slice
728
+ !__path_trim_value_len_%out_slice
729
+ !__path_trim_value_%out_slice
730
+ !__path_trim_ok_%out_slice
731
+ jmp L_PATH_TRIM_PREFIX_END_%out_slice
732
+
733
+ L_PATH_TRIM_PREFIX_MISS_%out_slice:
734
+ __path_trim_len_%out_slice = load %path_slice+Slice_len as u64
735
+ EXPAND STR_SLICE %out_slice, %path_slice, 0, __path_trim_len_%out_slice
736
+ !__path_trim_len_%out_slice
737
+ !__path_trim_value_%out_slice
738
+ !__path_trim_ok_%out_slice
739
+
740
+ L_PATH_TRIM_PREFIX_END_%out_slice:
741
+ [END_MACRO]
742
+
743
+ [MACRO] PATH_ENDS_WITH %out_bool, %path_slice, %child_slice
744
+ __path_end_path_len_%out_bool = load %path_slice+Slice_len as u64
745
+ __path_end_child_len_%out_bool = load %child_slice+Slice_len as u64
746
+ __path_end_idx_slot_%out_bool = stack_alloc 8
747
+ __path_end_child_empty_%out_bool = eq __path_end_child_len_%out_bool, 0
748
+ br __path_end_child_empty_%out_bool -> L_PATH_ENDS_WITH_TRUE_EMPTY_%out_bool, L_PATH_ENDS_WITH_CHECK_ABS_%out_bool
749
+
750
+ L_PATH_ENDS_WITH_CHECK_ABS_%out_bool:
751
+ EXPAND PATH_IS_ABSOLUTE __path_end_child_abs_%out_bool, %child_slice
752
+ br __path_end_child_abs_%out_bool -> L_PATH_ENDS_WITH_ABS_CHILD_%out_bool, L_PATH_ENDS_WITH_REL_CHILD_%out_bool
753
+
754
+ L_PATH_ENDS_WITH_ABS_CHILD_%out_bool:
755
+ __path_end_abs_same_len_%out_bool = eq __path_end_path_len_%out_bool, __path_end_child_len_%out_bool
756
+ br __path_end_abs_same_len_%out_bool -> L_PATH_ENDS_WITH_COMPARE_ZERO_%out_bool, L_PATH_ENDS_WITH_FALSE_ABS_%out_bool
757
+
758
+ L_PATH_ENDS_WITH_REL_CHILD_%out_bool:
759
+ __path_end_child_fits_%out_bool = ule __path_end_child_len_%out_bool, __path_end_path_len_%out_bool
760
+ br __path_end_child_fits_%out_bool -> L_PATH_ENDS_WITH_REL_START_%out_bool, L_PATH_ENDS_WITH_FALSE_SHORT_%out_bool
761
+
762
+ L_PATH_ENDS_WITH_REL_START_%out_bool:
763
+ __path_end_start_%out_bool = sub __path_end_path_len_%out_bool, __path_end_child_len_%out_bool
764
+ __path_end_at_start_%out_bool = eq __path_end_start_%out_bool, 0
765
+ br __path_end_at_start_%out_bool -> L_PATH_ENDS_WITH_COMPARE_INIT_AFTER_REL_START_%out_bool, L_PATH_ENDS_WITH_CHECK_BOUNDARY_%out_bool
766
+
767
+ L_PATH_ENDS_WITH_COMPARE_INIT_AFTER_REL_START_%out_bool:
768
+ !__path_end_at_start_%out_bool
769
+ !__path_end_child_fits_%out_bool
770
+ jmp L_PATH_ENDS_WITH_COMPARE_INIT_%out_bool
771
+
772
+ L_PATH_ENDS_WITH_CHECK_BOUNDARY_%out_bool:
773
+ __path_end_path_ptr_%out_bool = load %path_slice+Slice_ptr as ptr
774
+ __path_end_prev_idx_%out_bool = sub __path_end_start_%out_bool, 1
775
+ __path_end_prev_ptr_%out_bool = ptr_add __path_end_path_ptr_%out_bool, __path_end_prev_idx_%out_bool
776
+ __path_end_prev_%out_bool = load __path_end_prev_ptr_%out_bool+0 as u8
777
+ __path_end_boundary_%out_bool = eq __path_end_prev_%out_bool, 47
778
+ br __path_end_boundary_%out_bool -> L_PATH_ENDS_WITH_COMPARE_INIT_AFTER_BOUNDARY_%out_bool, L_PATH_ENDS_WITH_FALSE_BOUNDARY_%out_bool
779
+
780
+ L_PATH_ENDS_WITH_COMPARE_INIT_AFTER_BOUNDARY_%out_bool:
781
+ !__path_end_boundary_%out_bool
782
+ !__path_end_prev_%out_bool
783
+ !__path_end_prev_ptr_%out_bool
784
+ !__path_end_prev_idx_%out_bool
785
+ !__path_end_path_ptr_%out_bool
786
+ !__path_end_at_start_%out_bool
787
+ !__path_end_child_fits_%out_bool
788
+ jmp L_PATH_ENDS_WITH_COMPARE_INIT_%out_bool
789
+
790
+ L_PATH_ENDS_WITH_COMPARE_ZERO_%out_bool:
791
+ __path_end_start_%out_bool = add 0, 0
792
+ !__path_end_abs_same_len_%out_bool
793
+ jmp L_PATH_ENDS_WITH_COMPARE_INIT_%out_bool
794
+
795
+ L_PATH_ENDS_WITH_COMPARE_INIT_%out_bool:
796
+ store __path_end_idx_slot_%out_bool+0, 0 as u64
797
+ __path_end_path_ptr_%out_bool = load %path_slice+Slice_ptr as ptr
798
+ __path_end_child_ptr_%out_bool = load %child_slice+Slice_ptr as ptr
799
+ jmp L_PATH_ENDS_WITH_COMPARE_HEAD_%out_bool
800
+
801
+ L_PATH_ENDS_WITH_COMPARE_HEAD_%out_bool:
802
+ __path_end_idx_%out_bool = load __path_end_idx_slot_%out_bool+0 as u64
803
+ __path_end_done_%out_bool = eq __path_end_idx_%out_bool, __path_end_child_len_%out_bool
804
+ br __path_end_done_%out_bool -> L_PATH_ENDS_WITH_TRUE_DONE_%out_bool, L_PATH_ENDS_WITH_COMPARE_BODY_%out_bool
805
+
806
+ L_PATH_ENDS_WITH_COMPARE_BODY_%out_bool:
807
+ __path_end_path_idx_%out_bool = add __path_end_start_%out_bool, __path_end_idx_%out_bool
808
+ __path_end_path_byte_ptr_%out_bool = ptr_add __path_end_path_ptr_%out_bool, __path_end_path_idx_%out_bool
809
+ __path_end_child_byte_ptr_%out_bool = ptr_add __path_end_child_ptr_%out_bool, __path_end_idx_%out_bool
810
+ __path_end_path_byte_%out_bool = load __path_end_path_byte_ptr_%out_bool+0 as u8
811
+ __path_end_child_byte_%out_bool = load __path_end_child_byte_ptr_%out_bool+0 as u8
812
+ __path_end_bytes_eq_%out_bool = eq __path_end_path_byte_%out_bool, __path_end_child_byte_%out_bool
813
+ br __path_end_bytes_eq_%out_bool -> L_PATH_ENDS_WITH_COMPARE_NEXT_%out_bool, L_PATH_ENDS_WITH_FALSE_COMPARE_%out_bool
814
+
815
+ L_PATH_ENDS_WITH_COMPARE_NEXT_%out_bool:
816
+ __path_end_next_idx_%out_bool = add __path_end_idx_%out_bool, 1
817
+ store __path_end_idx_slot_%out_bool+0, __path_end_next_idx_%out_bool as u64
818
+ !__path_end_next_idx_%out_bool
819
+ !__path_end_bytes_eq_%out_bool
820
+ !__path_end_child_byte_%out_bool
821
+ !__path_end_path_byte_%out_bool
822
+ !__path_end_child_byte_ptr_%out_bool
823
+ !__path_end_path_byte_ptr_%out_bool
824
+ !__path_end_path_idx_%out_bool
825
+ !__path_end_done_%out_bool
826
+ !__path_end_idx_%out_bool
827
+ jmp L_PATH_ENDS_WITH_COMPARE_HEAD_%out_bool
828
+
829
+ L_PATH_ENDS_WITH_TRUE_DONE_%out_bool:
830
+ %out_bool = add 0, 1
831
+ !__path_end_done_%out_bool
832
+ !__path_end_idx_%out_bool
833
+ !__path_end_child_ptr_%out_bool
834
+ !__path_end_path_ptr_%out_bool
835
+ !__path_end_start_%out_bool
836
+ !__path_end_child_abs_%out_bool
837
+ !__path_end_child_empty_%out_bool
838
+ !__path_end_child_len_%out_bool
839
+ !__path_end_path_len_%out_bool
840
+ jmp L_PATH_ENDS_WITH_END_%out_bool
841
+
842
+ L_PATH_ENDS_WITH_FALSE_COMPARE_%out_bool:
843
+ %out_bool = add 0, 0
844
+ !__path_end_bytes_eq_%out_bool
845
+ !__path_end_child_byte_%out_bool
846
+ !__path_end_path_byte_%out_bool
847
+ !__path_end_child_byte_ptr_%out_bool
848
+ !__path_end_path_byte_ptr_%out_bool
849
+ !__path_end_path_idx_%out_bool
850
+ !__path_end_done_%out_bool
851
+ !__path_end_idx_%out_bool
852
+ !__path_end_child_ptr_%out_bool
853
+ !__path_end_path_ptr_%out_bool
854
+ !__path_end_start_%out_bool
855
+ !__path_end_child_abs_%out_bool
856
+ !__path_end_child_empty_%out_bool
857
+ !__path_end_child_len_%out_bool
858
+ !__path_end_path_len_%out_bool
859
+ jmp L_PATH_ENDS_WITH_END_%out_bool
860
+
861
+ L_PATH_ENDS_WITH_FALSE_BOUNDARY_%out_bool:
862
+ %out_bool = add 0, 0
863
+ !__path_end_boundary_%out_bool
864
+ !__path_end_prev_%out_bool
865
+ !__path_end_prev_ptr_%out_bool
866
+ !__path_end_prev_idx_%out_bool
867
+ !__path_end_path_ptr_%out_bool
868
+ !__path_end_at_start_%out_bool
869
+ !__path_end_start_%out_bool
870
+ !__path_end_child_fits_%out_bool
871
+ !__path_end_child_abs_%out_bool
872
+ !__path_end_child_empty_%out_bool
873
+ !__path_end_child_len_%out_bool
874
+ !__path_end_path_len_%out_bool
875
+ jmp L_PATH_ENDS_WITH_END_%out_bool
876
+
877
+ L_PATH_ENDS_WITH_FALSE_ABS_%out_bool:
878
+ %out_bool = add 0, 0
879
+ !__path_end_abs_same_len_%out_bool
880
+ !__path_end_child_abs_%out_bool
881
+ !__path_end_child_empty_%out_bool
882
+ !__path_end_child_len_%out_bool
883
+ !__path_end_path_len_%out_bool
884
+ jmp L_PATH_ENDS_WITH_END_%out_bool
885
+
886
+ L_PATH_ENDS_WITH_FALSE_SHORT_%out_bool:
887
+ %out_bool = add 0, 0
888
+ !__path_end_child_fits_%out_bool
889
+ !__path_end_child_abs_%out_bool
890
+ !__path_end_child_empty_%out_bool
891
+ !__path_end_child_len_%out_bool
892
+ !__path_end_path_len_%out_bool
893
+ jmp L_PATH_ENDS_WITH_END_%out_bool
894
+
895
+ L_PATH_ENDS_WITH_TRUE_EMPTY_%out_bool:
896
+ %out_bool = add 0, 1
897
+ !__path_end_child_empty_%out_bool
898
+ !__path_end_child_len_%out_bool
899
+ !__path_end_path_len_%out_bool
900
+ jmp L_PATH_ENDS_WITH_END_%out_bool
901
+
902
+ L_PATH_ENDS_WITH_END_%out_bool:
903
+ [END_MACRO]
904
+
905
+ [MACRO] PATH_JOIN %out_slice, %base_slice, %child_slice
906
+ EXPAND PATH_IS_ABSOLUTE __path_join_child_abs_%out_slice, %child_slice
907
+ br __path_join_child_abs_%out_slice -> L_PATH_JOIN_CHILD_VIEW, L_PATH_JOIN_CHECK_BASE
908
+
909
+ L_PATH_JOIN_CHECK_BASE:
910
+ __path_join_base_len_%out_slice = load %base_slice+Slice_len as u64
911
+ __path_join_base_empty_%out_slice = eq __path_join_base_len_%out_slice, 0
912
+ br __path_join_base_empty_%out_slice -> L_PATH_JOIN_CHILD_VIEW_FROM_EMPTY_BASE, L_PATH_JOIN_CHECK_CHILD
913
+
914
+ L_PATH_JOIN_CHECK_CHILD:
915
+ __path_join_child_len_%out_slice = load %child_slice+Slice_len as u64
916
+ __path_join_child_empty_%out_slice = eq __path_join_child_len_%out_slice, 0
917
+ br __path_join_child_empty_%out_slice -> L_PATH_JOIN_BASE_VIEW, L_PATH_JOIN_CHECK_SEPARATOR
918
+
919
+ L_PATH_JOIN_CHECK_SEPARATOR:
920
+ EXPAND PATH_ENDS_WITH_SEPARATOR __path_join_base_has_sep_%out_slice, %base_slice
921
+ br __path_join_base_has_sep_%out_slice -> L_PATH_JOIN_CONCAT_DIRECT, L_PATH_JOIN_CONCAT_WITH_SEPARATOR
922
+
923
+ L_PATH_JOIN_CONCAT_DIRECT:
924
+ EXPAND STR_CONCAT %out_slice, %base_slice, %child_slice
925
+ !__path_join_base_has_sep_%out_slice
926
+ !__path_join_child_empty_%out_slice
927
+ !__path_join_child_len_%out_slice
928
+ !__path_join_base_empty_%out_slice
929
+ !__path_join_base_len_%out_slice
930
+ !__path_join_child_abs_%out_slice
931
+ jmp L_PATH_JOIN_END
932
+
933
+ L_PATH_JOIN_CONCAT_WITH_SEPARATOR:
934
+ EXPAND STR_FROM_PARTS __path_join_sep_%out_slice, &PATH_SEPARATOR, 1
935
+ EXPAND STR_CONCAT __path_join_base_sep_%out_slice, %base_slice, __path_join_sep_%out_slice
936
+ EXPAND STR_CONCAT %out_slice, __path_join_base_sep_%out_slice, %child_slice
937
+ !__path_join_base_sep_%out_slice
938
+ !__path_join_sep_%out_slice
939
+ !__path_join_base_has_sep_%out_slice
940
+ !__path_join_child_empty_%out_slice
941
+ !__path_join_child_len_%out_slice
942
+ !__path_join_base_empty_%out_slice
943
+ !__path_join_base_len_%out_slice
944
+ !__path_join_child_abs_%out_slice
945
+ jmp L_PATH_JOIN_END
946
+
947
+ L_PATH_JOIN_BASE_VIEW:
948
+ EXPAND STR_SLICE %out_slice, %base_slice, 0, __path_join_base_len_%out_slice
949
+ !__path_join_child_empty_%out_slice
950
+ !__path_join_child_len_%out_slice
951
+ !__path_join_base_empty_%out_slice
952
+ !__path_join_base_len_%out_slice
953
+ !__path_join_child_abs_%out_slice
954
+ jmp L_PATH_JOIN_END
955
+
956
+ L_PATH_JOIN_CHILD_VIEW_FROM_EMPTY_BASE:
957
+ __path_join_child_len_%out_slice = load %child_slice+Slice_len as u64
958
+ EXPAND STR_SLICE %out_slice, %child_slice, 0, __path_join_child_len_%out_slice
959
+ !__path_join_child_len_%out_slice
960
+ !__path_join_base_empty_%out_slice
961
+ !__path_join_base_len_%out_slice
962
+ !__path_join_child_abs_%out_slice
963
+ jmp L_PATH_JOIN_END
964
+
965
+ L_PATH_JOIN_CHILD_VIEW:
966
+ __path_join_child_len_%out_slice = load %child_slice+Slice_len as u64
967
+ EXPAND STR_SLICE %out_slice, %child_slice, 0, __path_join_child_len_%out_slice
968
+ !__path_join_child_len_%out_slice
969
+ !__path_join_child_abs_%out_slice
970
+ jmp L_PATH_JOIN_END
971
+
972
+ L_PATH_JOIN_END:
973
+ [END_MACRO]
974
+
975
+ [MACRO] PATH_PARENT %out_slice, %path_slice
976
+ EXPAND PATH_DIRNAME %out_slice, %path_slice
977
+ [END_MACRO]
978
+
979
+ [MACRO] PATH_FILE_STEM %out_slice, %path_slice
980
+ EXPAND PATH_STEM %out_slice, %path_slice
981
+ [END_MACRO]
982
+
983
+ [MACRO] PATH_FILE_PREFIX %out_slice, %path_slice
984
+ EXPAND PATH_BASENAME __path_prefix_base_%out_slice, %path_slice
985
+ __path_prefix_base_ptr_%out_slice = load __path_prefix_base_%out_slice+Slice_ptr as ptr
986
+ __path_prefix_base_len_%out_slice = load __path_prefix_base_%out_slice+Slice_len as u64
987
+ __path_prefix_scan_slot_%out_slice = stack_alloc 8
988
+ __path_prefix_empty_%out_slice = eq __path_prefix_base_len_%out_slice, 0
989
+ br __path_prefix_empty_%out_slice -> L_PATH_FILE_PREFIX_EMPTY_%out_slice, L_PATH_FILE_PREFIX_INIT_%out_slice
990
+
991
+ L_PATH_FILE_PREFIX_INIT_%out_slice:
992
+ __path_prefix_first_%out_slice = load __path_prefix_base_ptr_%out_slice+0 as u8
993
+ __path_prefix_starts_dot_%out_slice = eq __path_prefix_first_%out_slice, 46
994
+ br __path_prefix_starts_dot_%out_slice -> L_PATH_FILE_PREFIX_INIT_HIDDEN_%out_slice, L_PATH_FILE_PREFIX_INIT_NORMAL_%out_slice
995
+
996
+ L_PATH_FILE_PREFIX_INIT_HIDDEN_%out_slice:
997
+ store __path_prefix_scan_slot_%out_slice+0, 1 as u64
998
+ !__path_prefix_starts_dot_%out_slice
999
+ !__path_prefix_first_%out_slice
1000
+ jmp L_PATH_FILE_PREFIX_SCAN_%out_slice
1001
+
1002
+ L_PATH_FILE_PREFIX_INIT_NORMAL_%out_slice:
1003
+ store __path_prefix_scan_slot_%out_slice+0, 0 as u64
1004
+ !__path_prefix_starts_dot_%out_slice
1005
+ !__path_prefix_first_%out_slice
1006
+ jmp L_PATH_FILE_PREFIX_SCAN_%out_slice
1007
+
1008
+ L_PATH_FILE_PREFIX_SCAN_%out_slice:
1009
+ __path_prefix_idx_%out_slice = load __path_prefix_scan_slot_%out_slice+0 as u64
1010
+ __path_prefix_done_%out_slice = eq __path_prefix_idx_%out_slice, __path_prefix_base_len_%out_slice
1011
+ br __path_prefix_done_%out_slice -> L_PATH_FILE_PREFIX_NO_DOT_%out_slice, L_PATH_FILE_PREFIX_CHECK_%out_slice
1012
+
1013
+ L_PATH_FILE_PREFIX_CHECK_%out_slice:
1014
+ __path_prefix_ch_ptr_%out_slice = ptr_add __path_prefix_base_ptr_%out_slice, __path_prefix_idx_%out_slice
1015
+ __path_prefix_ch_%out_slice = load __path_prefix_ch_ptr_%out_slice+0 as u8
1016
+ __path_prefix_is_dot_%out_slice = eq __path_prefix_ch_%out_slice, 46
1017
+ br __path_prefix_is_dot_%out_slice -> L_PATH_FILE_PREFIX_FOUND_%out_slice, L_PATH_FILE_PREFIX_NEXT_%out_slice
1018
+
1019
+ L_PATH_FILE_PREFIX_NEXT_%out_slice:
1020
+ __path_prefix_next_%out_slice = add __path_prefix_idx_%out_slice, 1
1021
+ store __path_prefix_scan_slot_%out_slice+0, __path_prefix_next_%out_slice as u64
1022
+ !__path_prefix_next_%out_slice
1023
+ !__path_prefix_is_dot_%out_slice
1024
+ !__path_prefix_ch_%out_slice
1025
+ !__path_prefix_ch_ptr_%out_slice
1026
+ !__path_prefix_done_%out_slice
1027
+ !__path_prefix_idx_%out_slice
1028
+ jmp L_PATH_FILE_PREFIX_SCAN_%out_slice
1029
+
1030
+ L_PATH_FILE_PREFIX_FOUND_%out_slice:
1031
+ EXPAND STR_SLICE %out_slice, __path_prefix_base_%out_slice, 0, __path_prefix_idx_%out_slice
1032
+ !__path_prefix_is_dot_%out_slice
1033
+ !__path_prefix_ch_%out_slice
1034
+ !__path_prefix_ch_ptr_%out_slice
1035
+ !__path_prefix_done_%out_slice
1036
+ !__path_prefix_idx_%out_slice
1037
+ !__path_prefix_empty_%out_slice
1038
+ !__path_prefix_base_len_%out_slice
1039
+ !__path_prefix_base_ptr_%out_slice
1040
+ !__path_prefix_base_%out_slice
1041
+ jmp L_PATH_FILE_PREFIX_END_%out_slice
1042
+
1043
+ L_PATH_FILE_PREFIX_NO_DOT_%out_slice:
1044
+ EXPAND STR_SLICE %out_slice, __path_prefix_base_%out_slice, 0, __path_prefix_base_len_%out_slice
1045
+ !__path_prefix_done_%out_slice
1046
+ !__path_prefix_idx_%out_slice
1047
+ !__path_prefix_empty_%out_slice
1048
+ !__path_prefix_base_len_%out_slice
1049
+ !__path_prefix_base_ptr_%out_slice
1050
+ !__path_prefix_base_%out_slice
1051
+ jmp L_PATH_FILE_PREFIX_END_%out_slice
1052
+
1053
+ L_PATH_FILE_PREFIX_EMPTY_%out_slice:
1054
+ EXPAND PATH_MAKE_EMPTY %out_slice
1055
+ !__path_prefix_empty_%out_slice
1056
+ !__path_prefix_base_len_%out_slice
1057
+ !__path_prefix_base_ptr_%out_slice
1058
+ !__path_prefix_base_%out_slice
1059
+ jmp L_PATH_FILE_PREFIX_END_%out_slice
1060
+
1061
+ L_PATH_FILE_PREFIX_END_%out_slice:
1062
+ [END_MACRO]
1063
+
1064
+ [MACRO] PATH_TRY_FILE_PREFIX %out_ok, %out_slice, %path_slice
1065
+ EXPAND PATH_TRY_FILE_NAME __path_try_prefix_name_ok_%out_ok, __path_try_prefix_name_%out_ok, %path_slice
1066
+ br __path_try_prefix_name_ok_%out_ok -> L_PATH_TRY_FILE_PREFIX_SOME_%out_ok, L_PATH_TRY_FILE_PREFIX_NONE_%out_ok
1067
+
1068
+ L_PATH_TRY_FILE_PREFIX_SOME_%out_ok:
1069
+ EXPAND PATH_FILE_PREFIX %out_slice, %path_slice
1070
+ %out_ok = add 0, 1
1071
+ !__path_try_prefix_name_%out_ok
1072
+ !__path_try_prefix_name_ok_%out_ok
1073
+ jmp L_PATH_TRY_FILE_PREFIX_END_%out_ok
1074
+
1075
+ L_PATH_TRY_FILE_PREFIX_NONE_%out_ok:
1076
+ EXPAND PATH_MAKE_EMPTY %out_slice
1077
+ %out_ok = add 0, 0
1078
+ !__path_try_prefix_name_%out_ok
1079
+ !__path_try_prefix_name_ok_%out_ok
1080
+
1081
+ L_PATH_TRY_FILE_PREFIX_END_%out_ok:
1082
+ [END_MACRO]
1083
+
1084
+ [MACRO] PATH_FILE_NAME %out_slice, %path_slice
1085
+ EXPAND PATH_BASENAME %out_slice, %path_slice
1086
+ [END_MACRO]
1087
+
1088
+ [MACRO] PATH_TRY_FILE_NAME %out_ok, %out_slice, %path_slice
1089
+ EXPAND PATH_BASENAME __path_try_file_name_base_%out_ok, %path_slice
1090
+ __path_try_file_name_len_%out_ok = load __path_try_file_name_base_%out_ok+Slice_len as u64
1091
+ __path_try_file_name_empty_%out_ok = eq __path_try_file_name_len_%out_ok, 0
1092
+ br __path_try_file_name_empty_%out_ok -> L_PATH_TRY_FILE_NAME_NONE_%out_ok, L_PATH_TRY_FILE_NAME_CHECK_ROOT_%out_ok
1093
+
1094
+ L_PATH_TRY_FILE_NAME_CHECK_ROOT_%out_ok:
1095
+ __path_try_file_name_ptr_%out_ok = load __path_try_file_name_base_%out_ok+Slice_ptr as ptr
1096
+ __path_try_file_name_one_%out_ok = eq __path_try_file_name_len_%out_ok, 1
1097
+ __path_try_file_name_first_%out_ok = load __path_try_file_name_ptr_%out_ok+0 as u8
1098
+ __path_try_file_name_slash_%out_ok = eq __path_try_file_name_first_%out_ok, 47
1099
+ __path_try_file_name_root_%out_ok = and __path_try_file_name_one_%out_ok, __path_try_file_name_slash_%out_ok
1100
+ br __path_try_file_name_root_%out_ok -> L_PATH_TRY_FILE_NAME_NONE_AFTER_ROOT_%out_ok, L_PATH_TRY_FILE_NAME_SOME_%out_ok
1101
+
1102
+ L_PATH_TRY_FILE_NAME_SOME_%out_ok:
1103
+ EXPAND STR_SLICE %out_slice, __path_try_file_name_base_%out_ok, 0, __path_try_file_name_len_%out_ok
1104
+ %out_ok = add 0, 1
1105
+ !__path_try_file_name_root_%out_ok
1106
+ !__path_try_file_name_slash_%out_ok
1107
+ !__path_try_file_name_first_%out_ok
1108
+ !__path_try_file_name_one_%out_ok
1109
+ !__path_try_file_name_ptr_%out_ok
1110
+ !__path_try_file_name_empty_%out_ok
1111
+ !__path_try_file_name_len_%out_ok
1112
+ !__path_try_file_name_base_%out_ok
1113
+ jmp L_PATH_TRY_FILE_NAME_END_%out_ok
1114
+
1115
+ L_PATH_TRY_FILE_NAME_NONE_AFTER_ROOT_%out_ok:
1116
+ !__path_try_file_name_root_%out_ok
1117
+ !__path_try_file_name_slash_%out_ok
1118
+ !__path_try_file_name_first_%out_ok
1119
+ !__path_try_file_name_one_%out_ok
1120
+ !__path_try_file_name_ptr_%out_ok
1121
+ !__path_try_file_name_empty_%out_ok
1122
+ jmp L_PATH_TRY_FILE_NAME_NONE_AFTER_CHECK_%out_ok
1123
+
1124
+ L_PATH_TRY_FILE_NAME_NONE_%out_ok:
1125
+ !__path_try_file_name_empty_%out_ok
1126
+ jmp L_PATH_TRY_FILE_NAME_NONE_AFTER_CHECK_%out_ok
1127
+
1128
+ L_PATH_TRY_FILE_NAME_NONE_AFTER_CHECK_%out_ok:
1129
+ EXPAND PATH_MAKE_EMPTY %out_slice
1130
+ %out_ok = add 0, 0
1131
+ !__path_try_file_name_len_%out_ok
1132
+ !__path_try_file_name_base_%out_ok
1133
+
1134
+ L_PATH_TRY_FILE_NAME_END_%out_ok:
1135
+ [END_MACRO]
1136
+
1137
+ [MACRO] PATH_EXTENSION %out_slice, %path_slice
1138
+ EXPAND PATH_EXT %out_slice, %path_slice
1139
+ [END_MACRO]
1140
+
1141
+ [MACRO] PATH_TRY_EXTENSION %out_ok, %out_slice, %path_slice
1142
+ EXPAND PATH_EXTENSION %out_slice, %path_slice
1143
+ __path_try_ext_len_%out_ok = load %out_slice+Slice_len as u64
1144
+ %out_ok = ne __path_try_ext_len_%out_ok, 0
1145
+ !__path_try_ext_len_%out_ok
1146
+ [END_MACRO]
1147
+
1148
+ [MACRO] PATH_TRY_FILE_STEM %out_ok, %out_slice, %path_slice
1149
+ EXPAND PATH_TRY_FILE_NAME __path_try_stem_name_ok_%out_ok, __path_try_stem_name_%out_ok, %path_slice
1150
+ br __path_try_stem_name_ok_%out_ok -> L_PATH_TRY_FILE_STEM_SOME_%out_ok, L_PATH_TRY_FILE_STEM_NONE_%out_ok
1151
+
1152
+ L_PATH_TRY_FILE_STEM_SOME_%out_ok:
1153
+ EXPAND PATH_FILE_STEM %out_slice, %path_slice
1154
+ %out_ok = add 0, 1
1155
+ !__path_try_stem_name_%out_ok
1156
+ !__path_try_stem_name_ok_%out_ok
1157
+ jmp L_PATH_TRY_FILE_STEM_END_%out_ok
1158
+
1159
+ L_PATH_TRY_FILE_STEM_NONE_%out_ok:
1160
+ EXPAND PATH_MAKE_EMPTY %out_slice
1161
+ %out_ok = add 0, 0
1162
+ !__path_try_stem_name_%out_ok
1163
+ !__path_try_stem_name_ok_%out_ok
1164
+
1165
+ L_PATH_TRY_FILE_STEM_END_%out_ok:
1166
+ [END_MACRO]
1167
+
1168
+ [MACRO] PATH_TRY_PARENT %out_ok, %out_slice, %path_slice
1169
+ EXPAND PATH_TRIM_TRAILING_SEPARATOR __path_try_parent_trim_%out_ok, %path_slice
1170
+ __path_try_parent_len_%out_ok = load __path_try_parent_trim_%out_ok+Slice_len as u64
1171
+ __path_try_parent_empty_%out_ok = eq __path_try_parent_len_%out_ok, 0
1172
+ br __path_try_parent_empty_%out_ok -> L_PATH_TRY_PARENT_NONE_%out_ok, L_PATH_TRY_PARENT_CHECK_ROOT_%out_ok
1173
+
1174
+ L_PATH_TRY_PARENT_CHECK_ROOT_%out_ok:
1175
+ __path_try_parent_ptr_%out_ok = load __path_try_parent_trim_%out_ok+Slice_ptr as ptr
1176
+ __path_try_parent_one_%out_ok = eq __path_try_parent_len_%out_ok, 1
1177
+ __path_try_parent_first_%out_ok = load __path_try_parent_ptr_%out_ok+0 as u8
1178
+ __path_try_parent_slash_%out_ok = eq __path_try_parent_first_%out_ok, 47
1179
+ __path_try_parent_root_%out_ok = and __path_try_parent_one_%out_ok, __path_try_parent_slash_%out_ok
1180
+ br __path_try_parent_root_%out_ok -> L_PATH_TRY_PARENT_NONE_AFTER_ROOT_%out_ok, L_PATH_TRY_PARENT_SOME_%out_ok
1181
+
1182
+ L_PATH_TRY_PARENT_SOME_%out_ok:
1183
+ EXPAND PATH_PARENT %out_slice, __path_try_parent_trim_%out_ok
1184
+ %out_ok = add 0, 1
1185
+ !__path_try_parent_root_%out_ok
1186
+ !__path_try_parent_slash_%out_ok
1187
+ !__path_try_parent_first_%out_ok
1188
+ !__path_try_parent_one_%out_ok
1189
+ !__path_try_parent_ptr_%out_ok
1190
+ !__path_try_parent_empty_%out_ok
1191
+ !__path_try_parent_len_%out_ok
1192
+ !__path_try_parent_trim_%out_ok
1193
+ jmp L_PATH_TRY_PARENT_END_%out_ok
1194
+
1195
+ L_PATH_TRY_PARENT_NONE_AFTER_ROOT_%out_ok:
1196
+ !__path_try_parent_root_%out_ok
1197
+ !__path_try_parent_slash_%out_ok
1198
+ !__path_try_parent_first_%out_ok
1199
+ !__path_try_parent_one_%out_ok
1200
+ !__path_try_parent_ptr_%out_ok
1201
+ !__path_try_parent_empty_%out_ok
1202
+ jmp L_PATH_TRY_PARENT_NONE_AFTER_CHECK_%out_ok
1203
+
1204
+ L_PATH_TRY_PARENT_NONE_%out_ok:
1205
+ !__path_try_parent_empty_%out_ok
1206
+ jmp L_PATH_TRY_PARENT_NONE_AFTER_CHECK_%out_ok
1207
+
1208
+ L_PATH_TRY_PARENT_NONE_AFTER_CHECK_%out_ok:
1209
+ EXPAND PATH_MAKE_EMPTY %out_slice
1210
+ %out_ok = add 0, 0
1211
+ !__path_try_parent_len_%out_ok
1212
+ !__path_try_parent_trim_%out_ok
1213
+
1214
+ L_PATH_TRY_PARENT_END_%out_ok:
1215
+ [END_MACRO]
1216
+
1217
+ [MACRO] PATH_TRY_TO_STR %out_ok, %out_slice, %path_slice
1218
+ __path_to_str_ptr_%out_ok = load %path_slice+Slice_ptr as ptr
1219
+ __path_to_str_len_%out_ok = load %path_slice+Slice_len as u64
1220
+ __path_to_str_status_%out_ok = call @sa_str_utf8_validate(__path_to_str_ptr_%out_ok, __path_to_str_len_%out_ok)
1221
+ __path_to_str_valid_%out_ok = eq __path_to_str_status_%out_ok, 0
1222
+ br __path_to_str_valid_%out_ok -> L_PATH_TO_STR_VALID_%out_ok, L_PATH_TO_STR_INVALID_%out_ok
1223
+
1224
+ L_PATH_TO_STR_VALID_%out_ok:
1225
+ EXPAND STR_FROM_PARTS %out_slice, __path_to_str_ptr_%out_ok, __path_to_str_len_%out_ok
1226
+ %out_ok = add 0, 1
1227
+ jmp L_PATH_TO_STR_END_%out_ok
1228
+
1229
+ L_PATH_TO_STR_INVALID_%out_ok:
1230
+ EXPAND PATH_MAKE_EMPTY %out_slice
1231
+ %out_ok = add 0, 0
1232
+
1233
+ L_PATH_TO_STR_END_%out_ok:
1234
+ !__path_to_str_valid_%out_ok
1235
+ !__path_to_str_status_%out_ok
1236
+ !__path_to_str_len_%out_ok
1237
+ !__path_to_str_ptr_%out_ok
1238
+ [END_MACRO]
1239
+
1240
+ // Rust method-name alias over PATH_TRY_TO_STR.
1241
+ [MACRO] PATH_TO_STR %out_ok, %out_slice, %path_slice
1242
+ EXPAND PATH_TRY_TO_STR %out_ok, %out_slice, %path_slice
1243
+ [END_MACRO]
1244
+
1245
+ [MACRO] DEFAULT_HASHER_WRITE_PATH %hasher, %path_slice
1246
+ __path_hash_ptr_%hasher = load %path_slice+Slice_ptr as ptr
1247
+ __path_hash_len_%hasher = load %path_slice+Slice_len as u64
1248
+ __path_hash_idx_slot_%hasher = stack_alloc 8
1249
+ __path_hash_start_slot_%hasher = stack_alloc 8
1250
+ __path_hash_chunk_slot_%hasher = stack_alloc 8
1251
+ __path_hash_write_ptr_slot_%hasher = stack_alloc 8
1252
+ __path_hash_write_len_slot_%hasher = stack_alloc 8
1253
+ __path_hash_write_idx_slot_%hasher = stack_alloc 8
1254
+ __path_hash_return_slot_%hasher = stack_alloc 8
1255
+ store __path_hash_idx_slot_%hasher+0, 0 as u64
1256
+ store __path_hash_start_slot_%hasher+0, 0 as u64
1257
+ store __path_hash_chunk_slot_%hasher+0, 0 as u64
1258
+ jmp L_PATH_HASH_HEAD_%hasher
1259
+
1260
+ L_PATH_HASH_HEAD_%hasher:
1261
+ __path_hash_idx_%hasher = load __path_hash_idx_slot_%hasher+0 as u64
1262
+ __path_hash_done_%hasher = eq __path_hash_idx_%hasher, __path_hash_len_%hasher
1263
+ br __path_hash_done_%hasher -> L_PATH_HASH_EOF_%hasher, L_PATH_HASH_BODY_%hasher
1264
+
1265
+ L_PATH_HASH_BODY_%hasher:
1266
+ __path_hash_ch_ptr_%hasher = ptr_add __path_hash_ptr_%hasher, __path_hash_idx_%hasher
1267
+ __path_hash_ch_%hasher = load __path_hash_ch_ptr_%hasher+0 as u8
1268
+ __path_hash_is_sep_%hasher = eq __path_hash_ch_%hasher, 47
1269
+ br __path_hash_is_sep_%hasher -> L_PATH_HASH_SEPARATOR_%hasher, L_PATH_HASH_NEXT_%hasher
1270
+
1271
+ L_PATH_HASH_SEPARATOR_%hasher:
1272
+ __path_hash_start_%hasher = load __path_hash_start_slot_%hasher+0 as u64
1273
+ __path_hash_has_component_%hasher = ult __path_hash_start_%hasher, __path_hash_idx_%hasher
1274
+ br __path_hash_has_component_%hasher -> L_PATH_HASH_WRITE_COMPONENT_%hasher, L_PATH_HASH_AFTER_COMPONENT_%hasher
1275
+
1276
+ L_PATH_HASH_WRITE_COMPONENT_%hasher:
1277
+ __path_hash_component_len_%hasher = sub __path_hash_idx_%hasher, __path_hash_start_%hasher
1278
+ __path_hash_component_ptr_%hasher = ptr_add __path_hash_ptr_%hasher, __path_hash_start_%hasher
1279
+ __path_hash_chunk_%hasher = load __path_hash_chunk_slot_%hasher+0 as u64
1280
+ __path_hash_chunk_sum_%hasher = add __path_hash_chunk_%hasher, __path_hash_component_len_%hasher
1281
+ EXPAND NUM_U64_ROTATE_RIGHT __path_hash_chunk_next_%hasher, __path_hash_chunk_sum_%hasher, 2
1282
+ store __path_hash_chunk_slot_%hasher+0, __path_hash_chunk_next_%hasher as u64
1283
+ store __path_hash_write_ptr_slot_%hasher+0, __path_hash_component_ptr_%hasher as ptr
1284
+ store __path_hash_write_len_slot_%hasher+0, __path_hash_component_len_%hasher as u64
1285
+ store __path_hash_return_slot_%hasher+0, 1 as u64
1286
+ !__path_hash_chunk_next_%hasher
1287
+ !__path_hash_chunk_sum_%hasher
1288
+ !__path_hash_chunk_%hasher
1289
+ !__path_hash_component_ptr_%hasher
1290
+ !__path_hash_component_len_%hasher
1291
+ jmp L_PATH_HASH_WRITE_BYTES_INIT_%hasher
1292
+
1293
+ L_PATH_HASH_AFTER_COMPONENT_%hasher:
1294
+ __path_hash_next_start_%hasher = add __path_hash_idx_%hasher, 1
1295
+ store __path_hash_start_slot_%hasher+0, __path_hash_next_start_%hasher as u64
1296
+ __path_hash_tail_empty_%hasher = eq __path_hash_next_start_%hasher, __path_hash_len_%hasher
1297
+ br __path_hash_tail_empty_%hasher -> L_PATH_HASH_AFTER_DOT_CHECK_%hasher, L_PATH_HASH_CHECK_DOT_%hasher
1298
+
1299
+ L_PATH_HASH_CHECK_DOT_%hasher:
1300
+ __path_hash_tail_ptr_%hasher = ptr_add __path_hash_ptr_%hasher, __path_hash_next_start_%hasher
1301
+ __path_hash_tail_first_%hasher = load __path_hash_tail_ptr_%hasher+0 as u8
1302
+ __path_hash_tail_is_dot_%hasher = eq __path_hash_tail_first_%hasher, 46
1303
+ br __path_hash_tail_is_dot_%hasher -> L_PATH_HASH_CHECK_DOT_END_%hasher, L_PATH_HASH_NO_DOT_SKIP_%hasher
1304
+
1305
+ L_PATH_HASH_CHECK_DOT_END_%hasher:
1306
+ __path_hash_after_dot_%hasher = add __path_hash_next_start_%hasher, 1
1307
+ __path_hash_dot_at_end_%hasher = eq __path_hash_after_dot_%hasher, __path_hash_len_%hasher
1308
+ br __path_hash_dot_at_end_%hasher -> L_PATH_HASH_SKIP_DOT_%hasher, L_PATH_HASH_CHECK_DOT_SEP_%hasher
1309
+
1310
+ L_PATH_HASH_CHECK_DOT_SEP_%hasher:
1311
+ __path_hash_after_dot_ptr_%hasher = ptr_add __path_hash_ptr_%hasher, __path_hash_after_dot_%hasher
1312
+ __path_hash_after_dot_ch_%hasher = load __path_hash_after_dot_ptr_%hasher+0 as u8
1313
+ __path_hash_dot_then_sep_%hasher = eq __path_hash_after_dot_ch_%hasher, 47
1314
+ br __path_hash_dot_then_sep_%hasher -> L_PATH_HASH_SKIP_DOT_%hasher, L_PATH_HASH_NO_DOT_SKIP_AFTER_DOT_%hasher
1315
+
1316
+ L_PATH_HASH_SKIP_DOT_%hasher:
1317
+ store __path_hash_start_slot_%hasher+0, __path_hash_after_dot_%hasher as u64
1318
+ !__path_hash_after_dot_%hasher
1319
+ jmp L_PATH_HASH_AFTER_DOT_CHECK_%hasher
1320
+
1321
+ L_PATH_HASH_NO_DOT_SKIP_AFTER_DOT_%hasher:
1322
+ !__path_hash_dot_then_sep_%hasher
1323
+ !__path_hash_after_dot_ch_%hasher
1324
+ !__path_hash_after_dot_ptr_%hasher
1325
+ !__path_hash_dot_at_end_%hasher
1326
+ !__path_hash_after_dot_%hasher
1327
+ jmp L_PATH_HASH_AFTER_DOT_CHECK_%hasher
1328
+
1329
+ L_PATH_HASH_NO_DOT_SKIP_%hasher:
1330
+ !__path_hash_tail_is_dot_%hasher
1331
+ !__path_hash_tail_first_%hasher
1332
+ !__path_hash_tail_ptr_%hasher
1333
+ jmp L_PATH_HASH_AFTER_DOT_CHECK_%hasher
1334
+
1335
+ L_PATH_HASH_AFTER_DOT_CHECK_%hasher:
1336
+ !__path_hash_tail_empty_%hasher
1337
+ !__path_hash_next_start_%hasher
1338
+ !__path_hash_has_component_%hasher
1339
+ !__path_hash_start_%hasher
1340
+ jmp L_PATH_HASH_NEXT_%hasher
1341
+
1342
+ L_PATH_HASH_NEXT_%hasher:
1343
+ __path_hash_next_idx_%hasher = add __path_hash_idx_%hasher, 1
1344
+ store __path_hash_idx_slot_%hasher+0, __path_hash_next_idx_%hasher as u64
1345
+ !__path_hash_next_idx_%hasher
1346
+ !__path_hash_is_sep_%hasher
1347
+ !__path_hash_ch_%hasher
1348
+ !__path_hash_ch_ptr_%hasher
1349
+ !__path_hash_done_%hasher
1350
+ !__path_hash_idx_%hasher
1351
+ jmp L_PATH_HASH_HEAD_%hasher
1352
+
1353
+ L_PATH_HASH_EOF_%hasher:
1354
+ __path_hash_final_start_%hasher = load __path_hash_start_slot_%hasher+0 as u64
1355
+ __path_hash_has_tail_%hasher = ult __path_hash_final_start_%hasher, __path_hash_len_%hasher
1356
+ br __path_hash_has_tail_%hasher -> L_PATH_HASH_WRITE_TAIL_%hasher, L_PATH_HASH_FINISH_%hasher
1357
+
1358
+ L_PATH_HASH_WRITE_TAIL_%hasher:
1359
+ __path_hash_tail_len_%hasher = sub __path_hash_len_%hasher, __path_hash_final_start_%hasher
1360
+ __path_hash_tail_ptr_%hasher = ptr_add __path_hash_ptr_%hasher, __path_hash_final_start_%hasher
1361
+ __path_hash_tail_chunk_%hasher = load __path_hash_chunk_slot_%hasher+0 as u64
1362
+ __path_hash_tail_sum_%hasher = add __path_hash_tail_chunk_%hasher, __path_hash_tail_len_%hasher
1363
+ EXPAND NUM_U64_ROTATE_RIGHT __path_hash_tail_chunk_next_%hasher, __path_hash_tail_sum_%hasher, 2
1364
+ store __path_hash_chunk_slot_%hasher+0, __path_hash_tail_chunk_next_%hasher as u64
1365
+ store __path_hash_write_ptr_slot_%hasher+0, __path_hash_tail_ptr_%hasher as ptr
1366
+ store __path_hash_write_len_slot_%hasher+0, __path_hash_tail_len_%hasher as u64
1367
+ store __path_hash_return_slot_%hasher+0, 2 as u64
1368
+ !__path_hash_tail_chunk_next_%hasher
1369
+ !__path_hash_tail_sum_%hasher
1370
+ !__path_hash_tail_chunk_%hasher
1371
+ !__path_hash_tail_ptr_%hasher
1372
+ !__path_hash_tail_len_%hasher
1373
+ jmp L_PATH_HASH_WRITE_BYTES_INIT_%hasher
1374
+
1375
+ L_PATH_HASH_WRITE_BYTES_INIT_%hasher:
1376
+ store __path_hash_write_idx_slot_%hasher+0, 0 as u64
1377
+ jmp L_PATH_HASH_WRITE_BYTES_HEAD_%hasher
1378
+
1379
+ L_PATH_HASH_WRITE_BYTES_HEAD_%hasher:
1380
+ __path_hash_write_idx_%hasher = load __path_hash_write_idx_slot_%hasher+0 as u64
1381
+ __path_hash_write_len_%hasher = load __path_hash_write_len_slot_%hasher+0 as u64
1382
+ __path_hash_write_done_%hasher = eq __path_hash_write_idx_%hasher, __path_hash_write_len_%hasher
1383
+ br __path_hash_write_done_%hasher -> L_PATH_HASH_WRITE_BYTES_DONE_%hasher, L_PATH_HASH_WRITE_BYTES_BODY_%hasher
1384
+
1385
+ L_PATH_HASH_WRITE_BYTES_BODY_%hasher:
1386
+ __path_hash_write_ptr_%hasher = load __path_hash_write_ptr_slot_%hasher+0 as ptr
1387
+ __path_hash_write_item_%hasher = ptr_add __path_hash_write_ptr_%hasher, __path_hash_write_idx_%hasher
1388
+ __path_hash_write_value_%hasher = load __path_hash_write_item_%hasher+0 as u8
1389
+ EXPAND DEFAULT_HASHER_WRITE_U8 %hasher, __path_hash_write_value_%hasher
1390
+ __path_hash_write_next_%hasher = add __path_hash_write_idx_%hasher, 1
1391
+ store __path_hash_write_idx_slot_%hasher+0, __path_hash_write_next_%hasher as u64
1392
+ !__path_hash_write_next_%hasher
1393
+ !__path_hash_write_value_%hasher
1394
+ !__path_hash_write_item_%hasher
1395
+ !__path_hash_write_ptr_%hasher
1396
+ !__path_hash_write_done_%hasher
1397
+ !__path_hash_write_len_%hasher
1398
+ !__path_hash_write_idx_%hasher
1399
+ jmp L_PATH_HASH_WRITE_BYTES_HEAD_%hasher
1400
+
1401
+ L_PATH_HASH_WRITE_BYTES_DONE_%hasher:
1402
+ __path_hash_return_%hasher = load __path_hash_return_slot_%hasher+0 as u64
1403
+ __path_hash_return_component_%hasher = eq __path_hash_return_%hasher, 1
1404
+ br __path_hash_return_component_%hasher -> L_PATH_HASH_AFTER_COMPONENT_%hasher, L_PATH_HASH_FINISH_%hasher
1405
+
1406
+ L_PATH_HASH_FINISH_%hasher:
1407
+ __path_hash_chunk_final_%hasher = load __path_hash_chunk_slot_%hasher+0 as u64
1408
+ EXPAND DEFAULT_HASHER_WRITE_USIZE %hasher, __path_hash_chunk_final_%hasher
1409
+ !__path_hash_chunk_final_%hasher
1410
+ !__path_hash_has_tail_%hasher
1411
+ !__path_hash_final_start_%hasher
1412
+ !__path_hash_done_%hasher
1413
+ !__path_hash_idx_%hasher
1414
+ !__path_hash_len_%hasher
1415
+ !__path_hash_ptr_%hasher
1416
+ [END_MACRO]
1417
+
1418
+ [MACRO] PATH_HASH %out_hash, %path_slice
1419
+ __path_hash_hasher_%out_hash = stack_alloc DefaultHasher_SIZE
1420
+ EXPAND DEFAULT_HASHER_NEW __path_hash_hasher_%out_hash
1421
+ EXPAND DEFAULT_HASHER_WRITE_PATH __path_hash_hasher_%out_hash, %path_slice
1422
+ EXPAND DEFAULT_HASHER_FINISH %out_hash, __path_hash_hasher_%out_hash
1423
+ [END_MACRO]
1424
+
1425
+ [MACRO] BUILD_HASHER_DEFAULT_HASH_ONE_PATH %out_hash, %builder, %path_slice
1426
+ __build_hash_one_path_hasher_%out_hash = stack_alloc DefaultHasher_SIZE
1427
+ EXPAND BUILD_HASHER_DEFAULT_BUILD __build_hash_one_path_hasher_%out_hash, %builder
1428
+ EXPAND DEFAULT_HASHER_WRITE_PATH __build_hash_one_path_hasher_%out_hash, %path_slice
1429
+ EXPAND DEFAULT_HASHER_FINISH %out_hash, __build_hash_one_path_hasher_%out_hash
1430
+ [END_MACRO]
1431
+
1432
+ [MACRO] RANDOM_STATE_HASH_ONE_PATH %out_hash, %state, %path_slice
1433
+ __random_state_hash_one_path_hasher_%out_hash = stack_alloc DefaultHasher_SIZE
1434
+ EXPAND RANDOM_STATE_BUILD __random_state_hash_one_path_hasher_%out_hash, %state
1435
+ EXPAND DEFAULT_HASHER_WRITE_PATH __random_state_hash_one_path_hasher_%out_hash, %path_slice
1436
+ EXPAND DEFAULT_HASHER_FINISH %out_hash, __random_state_hash_one_path_hasher_%out_hash
1437
+ [END_MACRO]
1438
+
1439
+ [MACRO] PATH_EXISTS %out_flag, %path_slice
1440
+ __path_exists_ptr_%out_flag = load %path_slice+Slice_ptr as ptr
1441
+ __path_exists_len_%out_flag = load %path_slice+Slice_len as u64
1442
+ EXPAND FS_EXISTS %out_flag, __path_exists_ptr_%out_flag, __path_exists_len_%out_flag
1443
+ !__path_exists_len_%out_flag
1444
+ !__path_exists_ptr_%out_flag
1445
+ [END_MACRO]
1446
+
1447
+ [MACRO] PATH_TRY_EXISTS %out_status, %out_flag, %path_slice
1448
+ __path_try_exists_ptr_%out_status = load %path_slice+Slice_ptr as ptr
1449
+ __path_try_exists_len_%out_status = load %path_slice+Slice_len as u64
1450
+ EXPAND FS_TRY_EXISTS %out_status, %out_flag, __path_try_exists_ptr_%out_status, __path_try_exists_len_%out_status
1451
+ !__path_try_exists_len_%out_status
1452
+ !__path_try_exists_ptr_%out_status
1453
+ [END_MACRO]
1454
+
1455
+ [MACRO] PATH_METADATA %out_status, %out_metadata, %path_slice
1456
+ __path_metadata_ptr_%out_status = load %path_slice+Slice_ptr as ptr
1457
+ __path_metadata_len_%out_status = load %path_slice+Slice_len as u64
1458
+ EXPAND FS_METADATA %out_status, %out_metadata, __path_metadata_ptr_%out_status, __path_metadata_len_%out_status
1459
+ !__path_metadata_len_%out_status
1460
+ !__path_metadata_ptr_%out_status
1461
+ [END_MACRO]
1462
+
1463
+ [MACRO] PATH_CANONICALIZE %out_status, %out_buffer, %path_slice
1464
+ __path_canonical_ptr_%out_status = load %path_slice+Slice_ptr as ptr
1465
+ __path_canonical_len_%out_status = load %path_slice+Slice_len as u64
1466
+ EXPAND FS_CANONICALIZE %out_status, %out_buffer, __path_canonical_ptr_%out_status, __path_canonical_len_%out_status
1467
+ !__path_canonical_len_%out_status
1468
+ !__path_canonical_ptr_%out_status
1469
+ [END_MACRO]
1470
+
1471
+ [MACRO] PATH_READ_LINK %out_status, %out_buffer, %path_slice
1472
+ __path_read_link_ptr_%out_status = load %path_slice+Slice_ptr as ptr
1473
+ __path_read_link_len_%out_status = load %path_slice+Slice_len as u64
1474
+ EXPAND FS_READ_LINK %out_status, %out_buffer, __path_read_link_ptr_%out_status, __path_read_link_len_%out_status
1475
+ !__path_read_link_len_%out_status
1476
+ !__path_read_link_ptr_%out_status
1477
+ [END_MACRO]
1478
+
1479
+ [MACRO] PATH_IS_FILE %out_flag, %path_slice
1480
+ __path_is_file_ptr_%out_flag = load %path_slice+Slice_ptr as ptr
1481
+ __path_is_file_len_%out_flag = load %path_slice+Slice_len as u64
1482
+ EXPAND FS_METADATA __path_is_file_status_%out_flag, __path_is_file_metadata_%out_flag, __path_is_file_ptr_%out_flag, __path_is_file_len_%out_flag
1483
+ __path_is_file_ok_%out_flag = eq __path_is_file_status_%out_flag, SA_FS_OK
1484
+ br __path_is_file_ok_%out_flag -> L_PATH_IS_FILE_OK_%out_flag, L_PATH_IS_FILE_MISS_%out_flag
1485
+
1486
+ L_PATH_IS_FILE_OK_%out_flag:
1487
+ EXPAND FS_METADATA_IS_FILE %out_flag, __path_is_file_metadata_%out_flag
1488
+ EXPAND FS_METADATA_FREE __path_is_file_free_status_%out_flag, __path_is_file_metadata_%out_flag
1489
+ !__path_is_file_free_status_%out_flag
1490
+ !__path_is_file_ok_%out_flag
1491
+ !__path_is_file_status_%out_flag
1492
+ !__path_is_file_metadata_%out_flag
1493
+ !__path_is_file_len_%out_flag
1494
+ !__path_is_file_ptr_%out_flag
1495
+ jmp L_PATH_IS_FILE_END_%out_flag
1496
+
1497
+ L_PATH_IS_FILE_MISS_%out_flag:
1498
+ %out_flag = add 0, 0
1499
+ !__path_is_file_ok_%out_flag
1500
+ !__path_is_file_status_%out_flag
1501
+ !__path_is_file_metadata_%out_flag
1502
+ !__path_is_file_len_%out_flag
1503
+ !__path_is_file_ptr_%out_flag
1504
+
1505
+ L_PATH_IS_FILE_END_%out_flag:
1506
+ [END_MACRO]
1507
+
1508
+ [MACRO] PATH_IS_DIR %out_flag, %path_slice
1509
+ __path_is_dir_ptr_%out_flag = load %path_slice+Slice_ptr as ptr
1510
+ __path_is_dir_len_%out_flag = load %path_slice+Slice_len as u64
1511
+ EXPAND FS_METADATA __path_is_dir_status_%out_flag, __path_is_dir_metadata_%out_flag, __path_is_dir_ptr_%out_flag, __path_is_dir_len_%out_flag
1512
+ __path_is_dir_ok_%out_flag = eq __path_is_dir_status_%out_flag, SA_FS_OK
1513
+ br __path_is_dir_ok_%out_flag -> L_PATH_IS_DIR_OK_%out_flag, L_PATH_IS_DIR_MISS_%out_flag
1514
+
1515
+ L_PATH_IS_DIR_OK_%out_flag:
1516
+ EXPAND FS_METADATA_IS_DIR %out_flag, __path_is_dir_metadata_%out_flag
1517
+ EXPAND FS_METADATA_FREE __path_is_dir_free_status_%out_flag, __path_is_dir_metadata_%out_flag
1518
+ !__path_is_dir_free_status_%out_flag
1519
+ !__path_is_dir_ok_%out_flag
1520
+ !__path_is_dir_status_%out_flag
1521
+ !__path_is_dir_metadata_%out_flag
1522
+ !__path_is_dir_len_%out_flag
1523
+ !__path_is_dir_ptr_%out_flag
1524
+ jmp L_PATH_IS_DIR_END_%out_flag
1525
+
1526
+ L_PATH_IS_DIR_MISS_%out_flag:
1527
+ %out_flag = add 0, 0
1528
+ !__path_is_dir_ok_%out_flag
1529
+ !__path_is_dir_status_%out_flag
1530
+ !__path_is_dir_metadata_%out_flag
1531
+ !__path_is_dir_len_%out_flag
1532
+ !__path_is_dir_ptr_%out_flag
1533
+
1534
+ L_PATH_IS_DIR_END_%out_flag:
1535
+ [END_MACRO]
1536
+
1537
+ [MACRO] PATH_IS_SYMLINK %out_flag, %path_slice
1538
+ __path_is_symlink_ptr_%out_flag = load %path_slice+Slice_ptr as ptr
1539
+ __path_is_symlink_len_%out_flag = load %path_slice+Slice_len as u64
1540
+ EXPAND FS_METADATA __path_is_symlink_status_%out_flag, __path_is_symlink_metadata_%out_flag, __path_is_symlink_ptr_%out_flag, __path_is_symlink_len_%out_flag
1541
+ __path_is_symlink_ok_%out_flag = eq __path_is_symlink_status_%out_flag, SA_FS_OK
1542
+ br __path_is_symlink_ok_%out_flag -> L_PATH_IS_SYMLINK_OK_%out_flag, L_PATH_IS_SYMLINK_MISS_%out_flag
1543
+
1544
+ L_PATH_IS_SYMLINK_OK_%out_flag:
1545
+ EXPAND FS_METADATA_IS_SYMLINK %out_flag, __path_is_symlink_metadata_%out_flag
1546
+ EXPAND FS_METADATA_FREE __path_is_symlink_free_status_%out_flag, __path_is_symlink_metadata_%out_flag
1547
+ !__path_is_symlink_free_status_%out_flag
1548
+ !__path_is_symlink_ok_%out_flag
1549
+ !__path_is_symlink_status_%out_flag
1550
+ !__path_is_symlink_metadata_%out_flag
1551
+ !__path_is_symlink_len_%out_flag
1552
+ !__path_is_symlink_ptr_%out_flag
1553
+ jmp L_PATH_IS_SYMLINK_END_%out_flag
1554
+
1555
+ L_PATH_IS_SYMLINK_MISS_%out_flag:
1556
+ %out_flag = add 0, 0
1557
+ !__path_is_symlink_ok_%out_flag
1558
+ !__path_is_symlink_status_%out_flag
1559
+ !__path_is_symlink_metadata_%out_flag
1560
+ !__path_is_symlink_len_%out_flag
1561
+ !__path_is_symlink_ptr_%out_flag
1562
+
1563
+ L_PATH_IS_SYMLINK_END_%out_flag:
1564
+ [END_MACRO]
1565
+
1566
+ [MACRO] PATH_STRIP_EXTENSION %out_slice, %path_slice
1567
+ EXPAND PATH_PARENT __path_strip_ext_parent_%out_slice, %path_slice
1568
+ EXPAND PATH_FILE_STEM __path_strip_ext_stem_%out_slice, %path_slice
1569
+ EXPAND PATH_JOIN %out_slice, __path_strip_ext_parent_%out_slice, __path_strip_ext_stem_%out_slice
1570
+ !__path_strip_ext_stem_%out_slice
1571
+ !__path_strip_ext_parent_%out_slice
1572
+ [END_MACRO]
1573
+
1574
+ [MACRO] PATH_WITH_FILE_NAME %out_slice, %path_slice, %file_name_slice
1575
+ EXPAND PATH_PARENT __path_parent_%out_slice, %path_slice
1576
+ EXPAND PATH_JOIN %out_slice, __path_parent_%out_slice, %file_name_slice
1577
+ !__path_parent_%out_slice
1578
+ [END_MACRO]
1579
+
1580
+ [MACRO] PATH_WITH_EXTENSION %out_slice, %path_slice, %extension_slice
1581
+ EXPAND PATH_STRIP_EXTENSION __path_no_ext_%out_slice, %path_slice
1582
+ __path_ext_len_%out_slice = load %extension_slice+Slice_len as u64
1583
+ __path_ext_empty_%out_slice = eq __path_ext_len_%out_slice, 0
1584
+ br __path_ext_empty_%out_slice -> L_PATH_WITH_EXTENSION_NO_EXT_%out_slice, L_PATH_WITH_EXTENSION_JOIN_%out_slice
1585
+
1586
+ L_PATH_WITH_EXTENSION_JOIN_%out_slice:
1587
+ __path_dot_ptr_%out_slice = stack_alloc 1
1588
+ store __path_dot_ptr_%out_slice+0, 46 as u8
1589
+ __path_dot_slice_%out_slice = alloc Slice_SIZE
1590
+ EXPAND SLICE_NEW __path_dot_slice_%out_slice, __path_dot_ptr_%out_slice, 1
1591
+ EXPAND STR_CONCAT __path_dot_ext_%out_slice, __path_dot_slice_%out_slice, %extension_slice
1592
+ EXPAND STR_CONCAT %out_slice, __path_no_ext_%out_slice, __path_dot_ext_%out_slice
1593
+ !__path_dot_ext_%out_slice
1594
+ !__path_dot_slice_%out_slice
1595
+ !__path_ext_empty_%out_slice
1596
+ !__path_ext_len_%out_slice
1597
+ !__path_no_ext_%out_slice
1598
+ jmp L_PATH_WITH_EXTENSION_END_%out_slice
1599
+
1600
+ L_PATH_WITH_EXTENSION_NO_EXT_%out_slice:
1601
+ __path_no_ext_len_%out_slice = load __path_no_ext_%out_slice+Slice_len as u64
1602
+ EXPAND STR_SLICE %out_slice, __path_no_ext_%out_slice, 0, __path_no_ext_len_%out_slice
1603
+ !__path_no_ext_len_%out_slice
1604
+ !__path_ext_empty_%out_slice
1605
+ !__path_ext_len_%out_slice
1606
+ !__path_no_ext_%out_slice
1607
+
1608
+ L_PATH_WITH_EXTENSION_END_%out_slice:
1609
+ [END_MACRO]
1610
+
1611
+ [MACRO] PATH_WITH_ADDED_EXTENSION %out_slice, %path_slice, %extension_slice
1612
+ __path_add_ext_len_%out_slice = load %extension_slice+Slice_len as u64
1613
+ __path_add_ext_empty_%out_slice = eq __path_add_ext_len_%out_slice, 0
1614
+ br __path_add_ext_empty_%out_slice -> L_PATH_ADD_EXTENSION_COPY_%out_slice, L_PATH_ADD_EXTENSION_JOIN_%out_slice
1615
+
1616
+ L_PATH_ADD_EXTENSION_JOIN_%out_slice:
1617
+ __path_add_dot_ptr_%out_slice = stack_alloc 1
1618
+ store __path_add_dot_ptr_%out_slice+0, 46 as u8
1619
+ __path_add_dot_slice_%out_slice = alloc Slice_SIZE
1620
+ EXPAND SLICE_NEW __path_add_dot_slice_%out_slice, __path_add_dot_ptr_%out_slice, 1
1621
+ EXPAND STR_CONCAT __path_add_dot_ext_%out_slice, __path_add_dot_slice_%out_slice, %extension_slice
1622
+ EXPAND STR_CONCAT %out_slice, %path_slice, __path_add_dot_ext_%out_slice
1623
+ !__path_add_dot_ext_%out_slice
1624
+ !__path_add_dot_slice_%out_slice
1625
+ !__path_add_ext_empty_%out_slice
1626
+ !__path_add_ext_len_%out_slice
1627
+ jmp L_PATH_ADD_EXTENSION_END_%out_slice
1628
+
1629
+ L_PATH_ADD_EXTENSION_COPY_%out_slice:
1630
+ __path_add_copy_len_%out_slice = load %path_slice+Slice_len as u64
1631
+ EXPAND STR_SLICE %out_slice, %path_slice, 0, __path_add_copy_len_%out_slice
1632
+ !__path_add_copy_len_%out_slice
1633
+ !__path_add_ext_empty_%out_slice
1634
+ !__path_add_ext_len_%out_slice
1635
+
1636
+ L_PATH_ADD_EXTENSION_END_%out_slice:
1637
+ [END_MACRO]
1638
+
1639
+ [MACRO] PATH_TRIM_TRAILING_SEPARATOR %out_slice, %path_slice
1640
+ __path_trim_sep_len_%out_slice = load %path_slice+Slice_len as u64
1641
+ __path_trim_sep_empty_%out_slice = eq __path_trim_sep_len_%out_slice, 0
1642
+ br __path_trim_sep_empty_%out_slice -> L_PATH_TRIM_SEP_EMPTY_%out_slice, L_PATH_TRIM_SEP_INIT_%out_slice
1643
+
1644
+ L_PATH_TRIM_SEP_INIT_%out_slice:
1645
+ __path_trim_sep_end_slot_%out_slice = stack_alloc 8
1646
+ store __path_trim_sep_end_slot_%out_slice+0, __path_trim_sep_len_%out_slice as u64
1647
+ jmp L_PATH_TRIM_SEP_HEAD_%out_slice
1648
+
1649
+ L_PATH_TRIM_SEP_HEAD_%out_slice:
1650
+ __path_trim_sep_end_%out_slice = load __path_trim_sep_end_slot_%out_slice+0 as u64
1651
+ __path_trim_sep_keep_root_%out_slice = ule __path_trim_sep_end_%out_slice, 1
1652
+ br __path_trim_sep_keep_root_%out_slice -> L_PATH_TRIM_SEP_COPY_CURRENT_%out_slice, L_PATH_TRIM_SEP_CHECK_LAST_%out_slice
1653
+
1654
+ L_PATH_TRIM_SEP_CHECK_LAST_%out_slice:
1655
+ __path_trim_sep_ptr_%out_slice = load %path_slice+Slice_ptr as ptr
1656
+ __path_trim_sep_prev_%out_slice = sub __path_trim_sep_end_%out_slice, 1
1657
+ __path_trim_sep_last_ptr_%out_slice = ptr_add __path_trim_sep_ptr_%out_slice, __path_trim_sep_prev_%out_slice
1658
+ __path_trim_sep_last_%out_slice = load __path_trim_sep_last_ptr_%out_slice+0 as u8
1659
+ __path_trim_sep_is_sep_%out_slice = eq __path_trim_sep_last_%out_slice, 47
1660
+ br __path_trim_sep_is_sep_%out_slice -> L_PATH_TRIM_SEP_DROP_%out_slice, L_PATH_TRIM_SEP_COPY_AFTER_CHECK_%out_slice
1661
+
1662
+ L_PATH_TRIM_SEP_DROP_%out_slice:
1663
+ store __path_trim_sep_end_slot_%out_slice+0, __path_trim_sep_prev_%out_slice as u64
1664
+ !__path_trim_sep_is_sep_%out_slice
1665
+ !__path_trim_sep_last_%out_slice
1666
+ !__path_trim_sep_last_ptr_%out_slice
1667
+ !__path_trim_sep_prev_%out_slice
1668
+ !__path_trim_sep_ptr_%out_slice
1669
+ !__path_trim_sep_keep_root_%out_slice
1670
+ !__path_trim_sep_end_%out_slice
1671
+ jmp L_PATH_TRIM_SEP_HEAD_%out_slice
1672
+
1673
+ L_PATH_TRIM_SEP_COPY_AFTER_CHECK_%out_slice:
1674
+ EXPAND STR_SLICE %out_slice, %path_slice, 0, __path_trim_sep_end_%out_slice
1675
+ !__path_trim_sep_is_sep_%out_slice
1676
+ !__path_trim_sep_last_%out_slice
1677
+ !__path_trim_sep_last_ptr_%out_slice
1678
+ !__path_trim_sep_prev_%out_slice
1679
+ !__path_trim_sep_ptr_%out_slice
1680
+ !__path_trim_sep_keep_root_%out_slice
1681
+ !__path_trim_sep_end_%out_slice
1682
+ !__path_trim_sep_empty_%out_slice
1683
+ !__path_trim_sep_len_%out_slice
1684
+ jmp L_PATH_TRIM_SEP_END_%out_slice
1685
+
1686
+ L_PATH_TRIM_SEP_COPY_CURRENT_%out_slice:
1687
+ EXPAND STR_SLICE %out_slice, %path_slice, 0, __path_trim_sep_end_%out_slice
1688
+ !__path_trim_sep_keep_root_%out_slice
1689
+ !__path_trim_sep_end_%out_slice
1690
+ !__path_trim_sep_empty_%out_slice
1691
+ !__path_trim_sep_len_%out_slice
1692
+ jmp L_PATH_TRIM_SEP_END_%out_slice
1693
+
1694
+ L_PATH_TRIM_SEP_EMPTY_%out_slice:
1695
+ EXPAND PATH_MAKE_EMPTY %out_slice
1696
+ !__path_trim_sep_empty_%out_slice
1697
+ !__path_trim_sep_len_%out_slice
1698
+
1699
+ L_PATH_TRIM_SEP_END_%out_slice:
1700
+ [END_MACRO]
1701
+
1702
+ [MACRO] PATH_WITH_TRAILING_SEPARATOR %out_slice, %path_slice
1703
+ EXPAND PATH_ENDS_WITH_SEPARATOR __path_with_sep_has_%out_slice, %path_slice
1704
+ br __path_with_sep_has_%out_slice -> L_PATH_WITH_SEP_COPY_%out_slice, L_PATH_WITH_SEP_APPEND_%out_slice
1705
+
1706
+ L_PATH_WITH_SEP_APPEND_%out_slice:
1707
+ EXPAND STR_FROM_PARTS __path_with_sep_sep_slice_%out_slice, &PATH_SEPARATOR, 1
1708
+ EXPAND STR_CONCAT %out_slice, %path_slice, __path_with_sep_sep_slice_%out_slice
1709
+ !__path_with_sep_sep_slice_%out_slice
1710
+ !__path_with_sep_has_%out_slice
1711
+ jmp L_PATH_WITH_SEP_END_%out_slice
1712
+
1713
+ L_PATH_WITH_SEP_COPY_%out_slice:
1714
+ __path_with_sep_len_%out_slice = load %path_slice+Slice_len as u64
1715
+ EXPAND STR_SLICE %out_slice, %path_slice, 0, __path_with_sep_len_%out_slice
1716
+ !__path_with_sep_len_%out_slice
1717
+ !__path_with_sep_has_%out_slice
1718
+
1719
+ L_PATH_WITH_SEP_END_%out_slice:
1720
+ [END_MACRO]
1721
+
1722
+ [MACRO] PATH_COMPONENT_COUNT %out_count, %path_slice
1723
+ __path_comp_ptr_%out_count = load %path_slice+Slice_ptr as ptr
1724
+ __path_comp_len_%out_count = load %path_slice+Slice_len as u64
1725
+ __path_comp_idx_slot_%out_count = stack_alloc 8
1726
+ __path_comp_in_slot_%out_count = stack_alloc 8
1727
+ store __path_comp_idx_slot_%out_count+0, 0 as u64
1728
+ store __path_comp_in_slot_%out_count+0, 0 as u64
1729
+ %out_count = add 0, 0
1730
+ jmp L_PATH_COMPONENT_COUNT_HEAD_%out_count
1731
+
1732
+ L_PATH_COMPONENT_COUNT_HEAD_%out_count:
1733
+ __path_comp_idx_%out_count = load __path_comp_idx_slot_%out_count+0 as u64
1734
+ __path_comp_done_%out_count = eq __path_comp_idx_%out_count, __path_comp_len_%out_count
1735
+ br __path_comp_done_%out_count -> L_PATH_COMPONENT_COUNT_DONE_%out_count, L_PATH_COMPONENT_COUNT_BODY_%out_count
1736
+
1737
+ L_PATH_COMPONENT_COUNT_BODY_%out_count:
1738
+ __path_comp_ch_ptr_%out_count = ptr_add __path_comp_ptr_%out_count, __path_comp_idx_%out_count
1739
+ __path_comp_ch_%out_count = load __path_comp_ch_ptr_%out_count+0 as u8
1740
+ __path_comp_is_sep_%out_count = eq __path_comp_ch_%out_count, 47
1741
+ br __path_comp_is_sep_%out_count -> L_PATH_COMPONENT_COUNT_SEP_%out_count, L_PATH_COMPONENT_COUNT_NON_SEP_%out_count
1742
+
1743
+ L_PATH_COMPONENT_COUNT_NON_SEP_%out_count:
1744
+ __path_comp_in_%out_count = load __path_comp_in_slot_%out_count+0 as u64
1745
+ __path_comp_was_out_%out_count = eq __path_comp_in_%out_count, 0
1746
+ br __path_comp_was_out_%out_count -> L_PATH_COMPONENT_COUNT_START_%out_count, L_PATH_COMPONENT_COUNT_NEXT_NON_SEP_%out_count
1747
+
1748
+ L_PATH_COMPONENT_COUNT_START_%out_count:
1749
+ %out_count = add %out_count, 1
1750
+ store __path_comp_in_slot_%out_count+0, 1 as u64
1751
+ !__path_comp_was_out_%out_count
1752
+ !__path_comp_in_%out_count
1753
+ jmp L_PATH_COMPONENT_COUNT_NEXT_%out_count
1754
+
1755
+ L_PATH_COMPONENT_COUNT_NEXT_NON_SEP_%out_count:
1756
+ !__path_comp_was_out_%out_count
1757
+ !__path_comp_in_%out_count
1758
+ jmp L_PATH_COMPONENT_COUNT_NEXT_%out_count
1759
+
1760
+ L_PATH_COMPONENT_COUNT_SEP_%out_count:
1761
+ store __path_comp_in_slot_%out_count+0, 0 as u64
1762
+ jmp L_PATH_COMPONENT_COUNT_NEXT_%out_count
1763
+
1764
+ L_PATH_COMPONENT_COUNT_NEXT_%out_count:
1765
+ __path_comp_next_%out_count = add __path_comp_idx_%out_count, 1
1766
+ store __path_comp_idx_slot_%out_count+0, __path_comp_next_%out_count as u64
1767
+ !__path_comp_next_%out_count
1768
+ !__path_comp_is_sep_%out_count
1769
+ !__path_comp_ch_%out_count
1770
+ !__path_comp_ch_ptr_%out_count
1771
+ !__path_comp_done_%out_count
1772
+ !__path_comp_idx_%out_count
1773
+ jmp L_PATH_COMPONENT_COUNT_HEAD_%out_count
1774
+
1775
+ L_PATH_COMPONENT_COUNT_DONE_%out_count:
1776
+ !__path_comp_done_%out_count
1777
+ !__path_comp_idx_%out_count
1778
+ !__path_comp_len_%out_count
1779
+ !__path_comp_ptr_%out_count
1780
+ [END_MACRO]
1781
+
1782
+ [MACRO] PATH_TRY_COMPONENT_AT %out_ok, %out_slice, %path_slice, %component_index
1783
+ __path_comp_at_ptr_%out_ok = load %path_slice+Slice_ptr as ptr
1784
+ __path_comp_at_len_%out_ok = load %path_slice+Slice_len as u64
1785
+ __path_comp_at_idx_slot_%out_ok = stack_alloc 8
1786
+ __path_comp_at_current_slot_%out_ok = stack_alloc 8
1787
+ __path_comp_at_in_slot_%out_ok = stack_alloc 8
1788
+ __path_comp_at_start_slot_%out_ok = stack_alloc 8
1789
+ store __path_comp_at_idx_slot_%out_ok+0, 0 as u64
1790
+ store __path_comp_at_current_slot_%out_ok+0, 0 as u64
1791
+ store __path_comp_at_in_slot_%out_ok+0, 0 as u64
1792
+ store __path_comp_at_start_slot_%out_ok+0, 0 as u64
1793
+ jmp L_PATH_COMPONENT_AT_HEAD_%out_ok
1794
+
1795
+ L_PATH_COMPONENT_AT_HEAD_%out_ok:
1796
+ __path_comp_at_idx_%out_ok = load __path_comp_at_idx_slot_%out_ok+0 as u64
1797
+ __path_comp_at_done_%out_ok = eq __path_comp_at_idx_%out_ok, __path_comp_at_len_%out_ok
1798
+ br __path_comp_at_done_%out_ok -> L_PATH_COMPONENT_AT_EOF_%out_ok, L_PATH_COMPONENT_AT_BODY_%out_ok
1799
+
1800
+ L_PATH_COMPONENT_AT_BODY_%out_ok:
1801
+ __path_comp_at_ch_ptr_%out_ok = ptr_add __path_comp_at_ptr_%out_ok, __path_comp_at_idx_%out_ok
1802
+ __path_comp_at_ch_%out_ok = load __path_comp_at_ch_ptr_%out_ok+0 as u8
1803
+ __path_comp_at_is_sep_%out_ok = eq __path_comp_at_ch_%out_ok, 47
1804
+ br __path_comp_at_is_sep_%out_ok -> L_PATH_COMPONENT_AT_SEP_%out_ok, L_PATH_COMPONENT_AT_NON_SEP_%out_ok
1805
+
1806
+ L_PATH_COMPONENT_AT_NON_SEP_%out_ok:
1807
+ __path_comp_at_in_%out_ok = load __path_comp_at_in_slot_%out_ok+0 as u64
1808
+ __path_comp_at_was_out_%out_ok = eq __path_comp_at_in_%out_ok, 0
1809
+ br __path_comp_at_was_out_%out_ok -> L_PATH_COMPONENT_AT_START_%out_ok, L_PATH_COMPONENT_AT_NEXT_NON_SEP_%out_ok
1810
+
1811
+ L_PATH_COMPONENT_AT_START_%out_ok:
1812
+ store __path_comp_at_start_slot_%out_ok+0, __path_comp_at_idx_%out_ok as u64
1813
+ store __path_comp_at_in_slot_%out_ok+0, 1 as u64
1814
+ !__path_comp_at_was_out_%out_ok
1815
+ !__path_comp_at_in_%out_ok
1816
+ jmp L_PATH_COMPONENT_AT_NEXT_%out_ok
1817
+
1818
+ L_PATH_COMPONENT_AT_NEXT_NON_SEP_%out_ok:
1819
+ !__path_comp_at_was_out_%out_ok
1820
+ !__path_comp_at_in_%out_ok
1821
+ jmp L_PATH_COMPONENT_AT_NEXT_%out_ok
1822
+
1823
+ L_PATH_COMPONENT_AT_SEP_%out_ok:
1824
+ __path_comp_at_in_%out_ok = load __path_comp_at_in_slot_%out_ok+0 as u64
1825
+ br __path_comp_at_in_%out_ok -> L_PATH_COMPONENT_AT_END_COMPONENT_%out_ok, L_PATH_COMPONENT_AT_NEXT_SEP_%out_ok
1826
+
1827
+ L_PATH_COMPONENT_AT_END_COMPONENT_%out_ok:
1828
+ __path_comp_at_current_%out_ok = load __path_comp_at_current_slot_%out_ok+0 as u64
1829
+ __path_comp_at_match_%out_ok = eq __path_comp_at_current_%out_ok, %component_index
1830
+ br __path_comp_at_match_%out_ok -> L_PATH_COMPONENT_AT_HIT_%out_ok, L_PATH_COMPONENT_AT_ADVANCE_COMPONENT_%out_ok
1831
+
1832
+ L_PATH_COMPONENT_AT_ADVANCE_COMPONENT_%out_ok:
1833
+ __path_comp_at_next_current_%out_ok = add __path_comp_at_current_%out_ok, 1
1834
+ store __path_comp_at_current_slot_%out_ok+0, __path_comp_at_next_current_%out_ok as u64
1835
+ store __path_comp_at_in_slot_%out_ok+0, 0 as u64
1836
+ !__path_comp_at_next_current_%out_ok
1837
+ !__path_comp_at_match_%out_ok
1838
+ !__path_comp_at_current_%out_ok
1839
+ !__path_comp_at_in_%out_ok
1840
+ jmp L_PATH_COMPONENT_AT_NEXT_%out_ok
1841
+
1842
+ L_PATH_COMPONENT_AT_NEXT_SEP_%out_ok:
1843
+ !__path_comp_at_in_%out_ok
1844
+ jmp L_PATH_COMPONENT_AT_NEXT_%out_ok
1845
+
1846
+ L_PATH_COMPONENT_AT_HIT_%out_ok:
1847
+ __path_comp_at_start_%out_ok = load __path_comp_at_start_slot_%out_ok+0 as u64
1848
+ __path_comp_at_part_len_%out_ok = sub __path_comp_at_idx_%out_ok, __path_comp_at_start_%out_ok
1849
+ EXPAND STR_SLICE %out_slice, %path_slice, __path_comp_at_start_%out_ok, __path_comp_at_part_len_%out_ok
1850
+ %out_ok = add 0, 1
1851
+ !__path_comp_at_part_len_%out_ok
1852
+ !__path_comp_at_start_%out_ok
1853
+ !__path_comp_at_match_%out_ok
1854
+ !__path_comp_at_current_%out_ok
1855
+ !__path_comp_at_in_%out_ok
1856
+ !__path_comp_at_is_sep_%out_ok
1857
+ !__path_comp_at_ch_%out_ok
1858
+ !__path_comp_at_ch_ptr_%out_ok
1859
+ !__path_comp_at_done_%out_ok
1860
+ !__path_comp_at_idx_%out_ok
1861
+ !__path_comp_at_len_%out_ok
1862
+ !__path_comp_at_ptr_%out_ok
1863
+ jmp L_PATH_COMPONENT_AT_END_%out_ok
1864
+
1865
+ L_PATH_COMPONENT_AT_NEXT_%out_ok:
1866
+ __path_comp_at_next_idx_%out_ok = add __path_comp_at_idx_%out_ok, 1
1867
+ store __path_comp_at_idx_slot_%out_ok+0, __path_comp_at_next_idx_%out_ok as u64
1868
+ !__path_comp_at_next_idx_%out_ok
1869
+ !__path_comp_at_is_sep_%out_ok
1870
+ !__path_comp_at_ch_%out_ok
1871
+ !__path_comp_at_ch_ptr_%out_ok
1872
+ !__path_comp_at_done_%out_ok
1873
+ !__path_comp_at_idx_%out_ok
1874
+ jmp L_PATH_COMPONENT_AT_HEAD_%out_ok
1875
+
1876
+ L_PATH_COMPONENT_AT_EOF_%out_ok:
1877
+ __path_comp_at_in_%out_ok = load __path_comp_at_in_slot_%out_ok+0 as u64
1878
+ br __path_comp_at_in_%out_ok -> L_PATH_COMPONENT_AT_EOF_COMPONENT_%out_ok, L_PATH_COMPONENT_AT_MISS_%out_ok
1879
+
1880
+ L_PATH_COMPONENT_AT_EOF_COMPONENT_%out_ok:
1881
+ __path_comp_at_current_%out_ok = load __path_comp_at_current_slot_%out_ok+0 as u64
1882
+ __path_comp_at_match_%out_ok = eq __path_comp_at_current_%out_ok, %component_index
1883
+ br __path_comp_at_match_%out_ok -> L_PATH_COMPONENT_AT_EOF_HIT_%out_ok, L_PATH_COMPONENT_AT_EOF_MISS_%out_ok
1884
+
1885
+ L_PATH_COMPONENT_AT_EOF_HIT_%out_ok:
1886
+ __path_comp_at_start_%out_ok = load __path_comp_at_start_slot_%out_ok+0 as u64
1887
+ __path_comp_at_part_len_%out_ok = sub __path_comp_at_len_%out_ok, __path_comp_at_start_%out_ok
1888
+ EXPAND STR_SLICE %out_slice, %path_slice, __path_comp_at_start_%out_ok, __path_comp_at_part_len_%out_ok
1889
+ %out_ok = add 0, 1
1890
+ !__path_comp_at_part_len_%out_ok
1891
+ !__path_comp_at_start_%out_ok
1892
+ !__path_comp_at_match_%out_ok
1893
+ !__path_comp_at_current_%out_ok
1894
+ !__path_comp_at_in_%out_ok
1895
+ !__path_comp_at_done_%out_ok
1896
+ !__path_comp_at_idx_%out_ok
1897
+ !__path_comp_at_len_%out_ok
1898
+ !__path_comp_at_ptr_%out_ok
1899
+ jmp L_PATH_COMPONENT_AT_END_%out_ok
1900
+
1901
+ L_PATH_COMPONENT_AT_EOF_MISS_%out_ok:
1902
+ !__path_comp_at_match_%out_ok
1903
+ !__path_comp_at_current_%out_ok
1904
+ !__path_comp_at_in_%out_ok
1905
+ jmp L_PATH_COMPONENT_AT_MISS_AFTER_EOF_%out_ok
1906
+
1907
+ L_PATH_COMPONENT_AT_MISS_%out_ok:
1908
+ !__path_comp_at_in_%out_ok
1909
+ jmp L_PATH_COMPONENT_AT_MISS_AFTER_EOF_%out_ok
1910
+
1911
+ L_PATH_COMPONENT_AT_MISS_AFTER_EOF_%out_ok:
1912
+ EXPAND PATH_MAKE_EMPTY %out_slice
1913
+ %out_ok = add 0, 0
1914
+ !__path_comp_at_done_%out_ok
1915
+ !__path_comp_at_idx_%out_ok
1916
+ !__path_comp_at_len_%out_ok
1917
+ !__path_comp_at_ptr_%out_ok
1918
+
1919
+ L_PATH_COMPONENT_AT_END_%out_ok:
1920
+ [END_MACRO]
1921
+
1922
+ // Rust method-name alias over PATH_TRY_COMPONENT_AT.
1923
+ [MACRO] PATH_COMPONENT_AT %out_ok, %out_slice, %path_slice, %component_index
1924
+ EXPAND PATH_TRY_COMPONENT_AT %out_ok, %out_slice, %path_slice, %component_index
1925
+ [END_MACRO]
1926
+
1927
+ [MACRO] PATH_TRY_COMPONENT_PREFIX_AT %out_ok, %out_slice, %path_slice, %component_index
1928
+ EXPAND PATH_TRY_COMPONENT_AT %out_ok, __path_prefix_component_%out_ok, %path_slice, %component_index
1929
+ br %out_ok -> L_PATH_COMPONENT_PREFIX_HIT_%out_ok, L_PATH_COMPONENT_PREFIX_MISS_%out_ok
1930
+
1931
+ L_PATH_COMPONENT_PREFIX_HIT_%out_ok:
1932
+ __path_prefix_path_ptr_%out_ok = load %path_slice+Slice_ptr as ptr
1933
+ __path_prefix_comp_ptr_%out_ok = load __path_prefix_component_%out_ok+Slice_ptr as ptr
1934
+ __path_prefix_comp_len_%out_ok = load __path_prefix_component_%out_ok+Slice_len as u64
1935
+ __path_prefix_path_len_%out_ok = load %path_slice+Slice_len as u64
1936
+ __path_prefix_scan_slot_%out_ok = stack_alloc 8
1937
+ store __path_prefix_scan_slot_%out_ok+0, 0 as u64
1938
+ jmp L_PATH_COMPONENT_PREFIX_SCAN_HEAD_%out_ok
1939
+
1940
+ L_PATH_COMPONENT_PREFIX_SCAN_HEAD_%out_ok:
1941
+ __path_prefix_scan_idx_%out_ok = load __path_prefix_scan_slot_%out_ok+0 as u64
1942
+ __path_prefix_scan_done_%out_ok = eq __path_prefix_scan_idx_%out_ok, __path_prefix_path_len_%out_ok
1943
+ br __path_prefix_scan_done_%out_ok -> L_PATH_COMPONENT_PREFIX_SCAN_MISS_%out_ok, L_PATH_COMPONENT_PREFIX_SCAN_BODY_%out_ok
1944
+
1945
+ L_PATH_COMPONENT_PREFIX_SCAN_BODY_%out_ok:
1946
+ __path_prefix_scan_ptr_%out_ok = ptr_add __path_prefix_path_ptr_%out_ok, __path_prefix_scan_idx_%out_ok
1947
+ __path_prefix_scan_hit_%out_ok = eq __path_prefix_scan_ptr_%out_ok, __path_prefix_comp_ptr_%out_ok
1948
+ br __path_prefix_scan_hit_%out_ok -> L_PATH_COMPONENT_PREFIX_SCAN_HIT_%out_ok, L_PATH_COMPONENT_PREFIX_SCAN_NEXT_%out_ok
1949
+
1950
+ L_PATH_COMPONENT_PREFIX_SCAN_NEXT_%out_ok:
1951
+ __path_prefix_scan_next_%out_ok = add __path_prefix_scan_idx_%out_ok, 1
1952
+ store __path_prefix_scan_slot_%out_ok+0, __path_prefix_scan_next_%out_ok as u64
1953
+ !__path_prefix_scan_next_%out_ok
1954
+ !__path_prefix_scan_hit_%out_ok
1955
+ !__path_prefix_scan_ptr_%out_ok
1956
+ !__path_prefix_scan_done_%out_ok
1957
+ !__path_prefix_scan_idx_%out_ok
1958
+ jmp L_PATH_COMPONENT_PREFIX_SCAN_HEAD_%out_ok
1959
+
1960
+ L_PATH_COMPONENT_PREFIX_SCAN_HIT_%out_ok:
1961
+ __path_prefix_end_offset_%out_ok = add __path_prefix_scan_idx_%out_ok, __path_prefix_comp_len_%out_ok
1962
+ EXPAND STR_SLICE %out_slice, %path_slice, 0, __path_prefix_end_offset_%out_ok
1963
+ !__path_prefix_end_offset_%out_ok
1964
+ !__path_prefix_scan_hit_%out_ok
1965
+ !__path_prefix_scan_ptr_%out_ok
1966
+ !__path_prefix_scan_done_%out_ok
1967
+ !__path_prefix_scan_idx_%out_ok
1968
+ !__path_prefix_path_len_%out_ok
1969
+ !__path_prefix_comp_len_%out_ok
1970
+ !__path_prefix_comp_ptr_%out_ok
1971
+ !__path_prefix_path_ptr_%out_ok
1972
+ !__path_prefix_component_%out_ok
1973
+ jmp L_PATH_COMPONENT_PREFIX_END_%out_ok
1974
+
1975
+ L_PATH_COMPONENT_PREFIX_SCAN_MISS_%out_ok:
1976
+ EXPAND PATH_MAKE_EMPTY %out_slice
1977
+ %out_ok = add 0, 0
1978
+ !__path_prefix_scan_done_%out_ok
1979
+ !__path_prefix_scan_idx_%out_ok
1980
+ !__path_prefix_path_len_%out_ok
1981
+ !__path_prefix_comp_len_%out_ok
1982
+ !__path_prefix_comp_ptr_%out_ok
1983
+ !__path_prefix_path_ptr_%out_ok
1984
+ !__path_prefix_component_%out_ok
1985
+ jmp L_PATH_COMPONENT_PREFIX_END_%out_ok
1986
+
1987
+ L_PATH_COMPONENT_PREFIX_MISS_%out_ok:
1988
+ EXPAND PATH_MAKE_EMPTY %out_slice
1989
+ !__path_prefix_component_%out_ok
1990
+
1991
+ L_PATH_COMPONENT_PREFIX_END_%out_ok:
1992
+ [END_MACRO]
1993
+
1994
+ // Rust method-name alias over PATH_TRY_COMPONENT_PREFIX_AT.
1995
+ [MACRO] PATH_COMPONENT_PREFIX_AT %out_ok, %out_slice, %path_slice, %component_index
1996
+ EXPAND PATH_TRY_COMPONENT_PREFIX_AT %out_ok, %out_slice, %path_slice, %component_index
1997
+ [END_MACRO]
1998
+
1999
+ [MACRO] PATH_ANCESTOR_COUNT %out_count, %path_slice
2000
+ EXPAND PATH_COMPONENT_COUNT __path_ancestor_components_%out_count, %path_slice
2001
+ %out_count = add __path_ancestor_components_%out_count, 1
2002
+ !__path_ancestor_components_%out_count
2003
+ [END_MACRO]
2004
+
2005
+ [MACRO] PATH_TRY_ANCESTOR_AT %out_ok, %out_slice, %path_slice, %ancestor_index
2006
+ EXPAND PATH_COMPONENT_COUNT __path_ancestor_components_%out_ok, %path_slice
2007
+ __path_ancestor_len_%out_ok = load %path_slice+Slice_len as u64
2008
+ __path_ancestor_scan_slot_%out_ok = stack_alloc 8
2009
+ __path_ancestor_current_slot_%out_ok = stack_alloc 8
2010
+ __path_ancestor_in_slot_%out_ok = stack_alloc 8
2011
+ store __path_ancestor_scan_slot_%out_ok+0, 0 as u64
2012
+ store __path_ancestor_current_slot_%out_ok+0, 0 as u64
2013
+ store __path_ancestor_in_slot_%out_ok+0, 0 as u64
2014
+ __path_ancestor_is_self_%out_ok = eq %ancestor_index, 0
2015
+ br __path_ancestor_is_self_%out_ok -> L_PATH_ANCESTOR_SELF_%out_ok, L_PATH_ANCESTOR_CHECK_FITS_%out_ok
2016
+
2017
+ L_PATH_ANCESTOR_CHECK_FITS_%out_ok:
2018
+ __path_ancestor_fits_%out_ok = ule %ancestor_index, __path_ancestor_components_%out_ok
2019
+ br __path_ancestor_fits_%out_ok -> L_PATH_ANCESTOR_CHECK_TERMINAL_%out_ok, L_PATH_ANCESTOR_MISS_%out_ok
2020
+
2021
+ L_PATH_ANCESTOR_CHECK_TERMINAL_%out_ok:
2022
+ __path_ancestor_terminal_%out_ok = eq %ancestor_index, __path_ancestor_components_%out_ok
2023
+ br __path_ancestor_terminal_%out_ok -> L_PATH_ANCESTOR_TERMINAL_%out_ok, L_PATH_ANCESTOR_PREFIX_%out_ok
2024
+
2025
+ L_PATH_ANCESTOR_PREFIX_%out_ok:
2026
+ __path_ancestor_remaining_%out_ok = sub __path_ancestor_components_%out_ok, %ancestor_index
2027
+ __path_ancestor_target_%out_ok = sub __path_ancestor_remaining_%out_ok, 1
2028
+ __path_ancestor_ptr_%out_ok = load %path_slice+Slice_ptr as ptr
2029
+ !__path_ancestor_remaining_%out_ok
2030
+ jmp L_PATH_ANCESTOR_SCAN_HEAD_%out_ok
2031
+
2032
+ L_PATH_ANCESTOR_SCAN_HEAD_%out_ok:
2033
+ __path_ancestor_scan_%out_ok = load __path_ancestor_scan_slot_%out_ok+0 as u64
2034
+ __path_ancestor_done_%out_ok = eq __path_ancestor_scan_%out_ok, __path_ancestor_len_%out_ok
2035
+ br __path_ancestor_done_%out_ok -> L_PATH_ANCESTOR_SCAN_EOF_%out_ok, L_PATH_ANCESTOR_SCAN_BODY_%out_ok
2036
+
2037
+ L_PATH_ANCESTOR_SCAN_BODY_%out_ok:
2038
+ __path_ancestor_ch_ptr_%out_ok = ptr_add __path_ancestor_ptr_%out_ok, __path_ancestor_scan_%out_ok
2039
+ __path_ancestor_ch_%out_ok = load __path_ancestor_ch_ptr_%out_ok+0 as u8
2040
+ __path_ancestor_is_sep_%out_ok = eq __path_ancestor_ch_%out_ok, 47
2041
+ br __path_ancestor_is_sep_%out_ok -> L_PATH_ANCESTOR_SCAN_SEP_%out_ok, L_PATH_ANCESTOR_SCAN_NON_SEP_%out_ok
2042
+
2043
+ L_PATH_ANCESTOR_SCAN_NON_SEP_%out_ok:
2044
+ __path_ancestor_in_%out_ok = load __path_ancestor_in_slot_%out_ok+0 as u64
2045
+ __path_ancestor_was_out_%out_ok = eq __path_ancestor_in_%out_ok, 0
2046
+ br __path_ancestor_was_out_%out_ok -> L_PATH_ANCESTOR_SCAN_START_%out_ok, L_PATH_ANCESTOR_SCAN_NEXT_NON_SEP_%out_ok
2047
+
2048
+ L_PATH_ANCESTOR_SCAN_START_%out_ok:
2049
+ store __path_ancestor_in_slot_%out_ok+0, 1 as u64
2050
+ !__path_ancestor_was_out_%out_ok
2051
+ !__path_ancestor_in_%out_ok
2052
+ jmp L_PATH_ANCESTOR_SCAN_NEXT_%out_ok
2053
+
2054
+ L_PATH_ANCESTOR_SCAN_NEXT_NON_SEP_%out_ok:
2055
+ !__path_ancestor_was_out_%out_ok
2056
+ !__path_ancestor_in_%out_ok
2057
+ jmp L_PATH_ANCESTOR_SCAN_NEXT_%out_ok
2058
+
2059
+ L_PATH_ANCESTOR_SCAN_SEP_%out_ok:
2060
+ __path_ancestor_in_%out_ok = load __path_ancestor_in_slot_%out_ok+0 as u64
2061
+ br __path_ancestor_in_%out_ok -> L_PATH_ANCESTOR_SCAN_COMPONENT_END_%out_ok, L_PATH_ANCESTOR_SCAN_NEXT_SEP_%out_ok
2062
+
2063
+ L_PATH_ANCESTOR_SCAN_COMPONENT_END_%out_ok:
2064
+ __path_ancestor_current_%out_ok = load __path_ancestor_current_slot_%out_ok+0 as u64
2065
+ __path_ancestor_target_hit_%out_ok = eq __path_ancestor_current_%out_ok, __path_ancestor_target_%out_ok
2066
+ br __path_ancestor_target_hit_%out_ok -> L_PATH_ANCESTOR_SCAN_HIT_%out_ok, L_PATH_ANCESTOR_SCAN_ADVANCE_%out_ok
2067
+
2068
+ L_PATH_ANCESTOR_SCAN_ADVANCE_%out_ok:
2069
+ __path_ancestor_next_current_%out_ok = add __path_ancestor_current_%out_ok, 1
2070
+ store __path_ancestor_current_slot_%out_ok+0, __path_ancestor_next_current_%out_ok as u64
2071
+ store __path_ancestor_in_slot_%out_ok+0, 0 as u64
2072
+ !__path_ancestor_next_current_%out_ok
2073
+ !__path_ancestor_target_hit_%out_ok
2074
+ !__path_ancestor_current_%out_ok
2075
+ !__path_ancestor_in_%out_ok
2076
+ jmp L_PATH_ANCESTOR_SCAN_NEXT_%out_ok
2077
+
2078
+ L_PATH_ANCESTOR_SCAN_NEXT_SEP_%out_ok:
2079
+ !__path_ancestor_in_%out_ok
2080
+ jmp L_PATH_ANCESTOR_SCAN_NEXT_%out_ok
2081
+
2082
+ L_PATH_ANCESTOR_SCAN_NEXT_%out_ok:
2083
+ __path_ancestor_next_scan_%out_ok = add __path_ancestor_scan_%out_ok, 1
2084
+ store __path_ancestor_scan_slot_%out_ok+0, __path_ancestor_next_scan_%out_ok as u64
2085
+ !__path_ancestor_next_scan_%out_ok
2086
+ !__path_ancestor_is_sep_%out_ok
2087
+ !__path_ancestor_ch_%out_ok
2088
+ !__path_ancestor_ch_ptr_%out_ok
2089
+ !__path_ancestor_done_%out_ok
2090
+ !__path_ancestor_scan_%out_ok
2091
+ jmp L_PATH_ANCESTOR_SCAN_HEAD_%out_ok
2092
+
2093
+ L_PATH_ANCESTOR_SCAN_HIT_%out_ok:
2094
+ EXPAND STR_SLICE %out_slice, %path_slice, 0, __path_ancestor_scan_%out_ok
2095
+ %out_ok = add 0, 1
2096
+ !__path_ancestor_target_hit_%out_ok
2097
+ !__path_ancestor_current_%out_ok
2098
+ !__path_ancestor_in_%out_ok
2099
+ !__path_ancestor_is_sep_%out_ok
2100
+ !__path_ancestor_ch_%out_ok
2101
+ !__path_ancestor_ch_ptr_%out_ok
2102
+ !__path_ancestor_done_%out_ok
2103
+ !__path_ancestor_scan_%out_ok
2104
+ !__path_ancestor_ptr_%out_ok
2105
+ !__path_ancestor_target_%out_ok
2106
+ !__path_ancestor_terminal_%out_ok
2107
+ !__path_ancestor_fits_%out_ok
2108
+ !__path_ancestor_is_self_%out_ok
2109
+ !__path_ancestor_len_%out_ok
2110
+ !__path_ancestor_components_%out_ok
2111
+ jmp L_PATH_ANCESTOR_END_%out_ok
2112
+
2113
+ L_PATH_ANCESTOR_SCAN_EOF_%out_ok:
2114
+ __path_ancestor_in_%out_ok = load __path_ancestor_in_slot_%out_ok+0 as u64
2115
+ br __path_ancestor_in_%out_ok -> L_PATH_ANCESTOR_SCAN_EOF_COMPONENT_%out_ok, L_PATH_ANCESTOR_SCAN_MISS_%out_ok
2116
+
2117
+ L_PATH_ANCESTOR_SCAN_EOF_COMPONENT_%out_ok:
2118
+ __path_ancestor_current_%out_ok = load __path_ancestor_current_slot_%out_ok+0 as u64
2119
+ __path_ancestor_target_hit_%out_ok = eq __path_ancestor_current_%out_ok, __path_ancestor_target_%out_ok
2120
+ br __path_ancestor_target_hit_%out_ok -> L_PATH_ANCESTOR_SCAN_EOF_HIT_%out_ok, L_PATH_ANCESTOR_SCAN_EOF_MISS_%out_ok
2121
+
2122
+ L_PATH_ANCESTOR_SCAN_EOF_HIT_%out_ok:
2123
+ EXPAND STR_SLICE %out_slice, %path_slice, 0, __path_ancestor_len_%out_ok
2124
+ %out_ok = add 0, 1
2125
+ !__path_ancestor_target_hit_%out_ok
2126
+ !__path_ancestor_current_%out_ok
2127
+ !__path_ancestor_in_%out_ok
2128
+ !__path_ancestor_done_%out_ok
2129
+ !__path_ancestor_scan_%out_ok
2130
+ !__path_ancestor_ptr_%out_ok
2131
+ !__path_ancestor_target_%out_ok
2132
+ !__path_ancestor_terminal_%out_ok
2133
+ !__path_ancestor_fits_%out_ok
2134
+ !__path_ancestor_is_self_%out_ok
2135
+ !__path_ancestor_len_%out_ok
2136
+ !__path_ancestor_components_%out_ok
2137
+ jmp L_PATH_ANCESTOR_END_%out_ok
2138
+
2139
+ L_PATH_ANCESTOR_SCAN_EOF_MISS_%out_ok:
2140
+ !__path_ancestor_target_hit_%out_ok
2141
+ !__path_ancestor_current_%out_ok
2142
+ !__path_ancestor_in_%out_ok
2143
+ jmp L_PATH_ANCESTOR_SCAN_MISS_AFTER_EOF_%out_ok
2144
+
2145
+ L_PATH_ANCESTOR_SCAN_MISS_%out_ok:
2146
+ !__path_ancestor_in_%out_ok
2147
+ jmp L_PATH_ANCESTOR_SCAN_MISS_AFTER_EOF_%out_ok
2148
+
2149
+ L_PATH_ANCESTOR_SCAN_MISS_AFTER_EOF_%out_ok:
2150
+ EXPAND PATH_MAKE_EMPTY %out_slice
2151
+ %out_ok = add 0, 0
2152
+ !__path_ancestor_done_%out_ok
2153
+ !__path_ancestor_scan_%out_ok
2154
+ !__path_ancestor_ptr_%out_ok
2155
+ !__path_ancestor_target_%out_ok
2156
+ !__path_ancestor_terminal_%out_ok
2157
+ !__path_ancestor_fits_%out_ok
2158
+ !__path_ancestor_is_self_%out_ok
2159
+ !__path_ancestor_len_%out_ok
2160
+ !__path_ancestor_components_%out_ok
2161
+ jmp L_PATH_ANCESTOR_END_%out_ok
2162
+
2163
+ L_PATH_ANCESTOR_TERMINAL_%out_ok:
2164
+ EXPAND PATH_IS_ABSOLUTE __path_ancestor_abs_%out_ok, %path_slice
2165
+ br __path_ancestor_abs_%out_ok -> L_PATH_ANCESTOR_ROOT_%out_ok, L_PATH_ANCESTOR_EMPTY_%out_ok
2166
+
2167
+ L_PATH_ANCESTOR_ROOT_%out_ok:
2168
+ EXPAND STR_SLICE %out_slice, %path_slice, 0, 1
2169
+ %out_ok = add 0, 1
2170
+ !__path_ancestor_abs_%out_ok
2171
+ !__path_ancestor_terminal_%out_ok
2172
+ !__path_ancestor_fits_%out_ok
2173
+ !__path_ancestor_is_self_%out_ok
2174
+ !__path_ancestor_len_%out_ok
2175
+ !__path_ancestor_components_%out_ok
2176
+ jmp L_PATH_ANCESTOR_END_%out_ok
2177
+
2178
+ L_PATH_ANCESTOR_EMPTY_%out_ok:
2179
+ EXPAND PATH_MAKE_EMPTY %out_slice
2180
+ %out_ok = add 0, 1
2181
+ !__path_ancestor_abs_%out_ok
2182
+ !__path_ancestor_terminal_%out_ok
2183
+ !__path_ancestor_fits_%out_ok
2184
+ !__path_ancestor_is_self_%out_ok
2185
+ !__path_ancestor_len_%out_ok
2186
+ !__path_ancestor_components_%out_ok
2187
+ jmp L_PATH_ANCESTOR_END_%out_ok
2188
+
2189
+ L_PATH_ANCESTOR_SELF_%out_ok:
2190
+ EXPAND STR_SLICE %out_slice, %path_slice, 0, __path_ancestor_len_%out_ok
2191
+ %out_ok = add 0, 1
2192
+ !__path_ancestor_len_%out_ok
2193
+ !__path_ancestor_is_self_%out_ok
2194
+ !__path_ancestor_components_%out_ok
2195
+ jmp L_PATH_ANCESTOR_END_%out_ok
2196
+
2197
+ L_PATH_ANCESTOR_MISS_%out_ok:
2198
+ EXPAND PATH_MAKE_EMPTY %out_slice
2199
+ %out_ok = add 0, 0
2200
+ !__path_ancestor_fits_%out_ok
2201
+ !__path_ancestor_is_self_%out_ok
2202
+ !__path_ancestor_len_%out_ok
2203
+ !__path_ancestor_components_%out_ok
2204
+
2205
+ L_PATH_ANCESTOR_END_%out_ok:
2206
+ [END_MACRO]
2207
+
2208
+ // Rust method-name alias over PATH_TRY_ANCESTOR_AT.
2209
+ [MACRO] PATH_ANCESTOR_AT %out_ok, %out_slice, %path_slice, %ancestor_index
2210
+ EXPAND PATH_TRY_ANCESTOR_AT %out_ok, %out_slice, %path_slice, %ancestor_index
2211
+ [END_MACRO]
2212
+
2213
+
2214
+ // Concrete owned PathBuf facade over StringBuf / Vec-u8 storage.
2215
+ // Path queries reuse the existing PATH_* Slice helpers via PATH_BUF_AS_PATH.
2216
+
2217
+ [MACRO] PATH_BUF_NEW %out_path_buf
2218
+ EXPAND STRING_BUF_NEW %out_path_buf
2219
+ [END_MACRO]
2220
+
2221
+ [MACRO] PATH_BUF_DEFAULT %out_path_buf
2222
+ EXPAND PATH_BUF_NEW %out_path_buf
2223
+ [END_MACRO]
2224
+
2225
+ [MACRO] PATH_BUF_WITH_CAPACITY %out_path_buf, %capacity
2226
+ EXPAND STRING_BUF_WITH_CAPACITY %out_path_buf, %capacity
2227
+ [END_MACRO]
2228
+
2229
+ [MACRO] PATH_BUF_TRY_WITH_CAPACITY %out_ok, %out_path_buf, %capacity
2230
+ EXPAND STRING_BUF_TRY_WITH_CAPACITY %out_ok, %out_path_buf, %capacity
2231
+ [END_MACRO]
2232
+
2233
+ [MACRO] PATH_BUF_FROM_PATH %out_path_buf, %path_slice
2234
+ EXPAND STRING_BUF_FROM_STR %out_path_buf, %path_slice
2235
+ [END_MACRO]
2236
+
2237
+ [MACRO] PATH_BUF_FROM_STR %out_path_buf, %path_slice
2238
+ EXPAND PATH_BUF_FROM_PATH %out_path_buf, %path_slice
2239
+ [END_MACRO]
2240
+
2241
+ [MACRO] PATH_BUF_FREE %path_buf
2242
+ EXPAND STRING_BUF_FREE %path_buf
2243
+ [END_MACRO]
2244
+
2245
+ [MACRO] PATH_BUF_CLEAR %path_buf
2246
+ EXPAND STRING_BUF_CLEAR %path_buf
2247
+ [END_MACRO]
2248
+
2249
+ [MACRO] PATH_BUF_LEN %out_len, %path_buf
2250
+ EXPAND STRING_BUF_LEN %out_len, %path_buf
2251
+ [END_MACRO]
2252
+
2253
+ [MACRO] PATH_BUF_CAPACITY %out_cap, %path_buf
2254
+ EXPAND STRING_BUF_CAPACITY %out_cap, %path_buf
2255
+ [END_MACRO]
2256
+
2257
+ [MACRO] PATH_BUF_IS_EMPTY %out_bool, %path_buf
2258
+ EXPAND STRING_BUF_IS_EMPTY %out_bool, %path_buf
2259
+ [END_MACRO]
2260
+
2261
+ [MACRO] PATH_BUF_RESERVE %path_buf, %additional
2262
+ EXPAND STRING_BUF_RESERVE %path_buf, %additional
2263
+ [END_MACRO]
2264
+
2265
+ [MACRO] PATH_BUF_CLONE %out_path_buf, %path_buf
2266
+ EXPAND STRING_BUF_CLONE %out_path_buf, %path_buf
2267
+ [END_MACRO]
2268
+
2269
+ [MACRO] PATH_BUF_AS_PATH %out_slice, %path_buf
2270
+ EXPAND STRING_BUF_AS_STR %out_slice, %path_buf
2271
+ [END_MACRO]
2272
+
2273
+ [MACRO] PATH_BUF_AS_STR %out_slice, %path_buf
2274
+ EXPAND PATH_BUF_AS_PATH %out_slice, %path_buf
2275
+ [END_MACRO]
2276
+
2277
+ [MACRO] DEFAULT_HASHER_WRITE_PATH_BUF %hasher, %path_buf
2278
+ EXPAND PATH_BUF_AS_PATH __path_buf_hash_view_%hasher, %path_buf
2279
+ EXPAND DEFAULT_HASHER_WRITE_PATH %hasher, __path_buf_hash_view_%hasher
2280
+ !__path_buf_hash_view_%hasher
2281
+ [END_MACRO]
2282
+
2283
+ [MACRO] PATH_BUF_HASH %out_hash, %path_buf
2284
+ EXPAND PATH_BUF_AS_PATH __path_buf_hash_view_%out_hash, %path_buf
2285
+ EXPAND PATH_HASH %out_hash, __path_buf_hash_view_%out_hash
2286
+ !__path_buf_hash_view_%out_hash
2287
+ [END_MACRO]
2288
+
2289
+ [MACRO] BUILD_HASHER_DEFAULT_HASH_ONE_PATH_BUF %out_hash, %builder, %path_buf
2290
+ __build_hash_one_path_buf_hasher_%out_hash = stack_alloc DefaultHasher_SIZE
2291
+ EXPAND BUILD_HASHER_DEFAULT_BUILD __build_hash_one_path_buf_hasher_%out_hash, %builder
2292
+ EXPAND DEFAULT_HASHER_WRITE_PATH_BUF __build_hash_one_path_buf_hasher_%out_hash, %path_buf
2293
+ EXPAND DEFAULT_HASHER_FINISH %out_hash, __build_hash_one_path_buf_hasher_%out_hash
2294
+ [END_MACRO]
2295
+
2296
+ [MACRO] RANDOM_STATE_HASH_ONE_PATH_BUF %out_hash, %state, %path_buf
2297
+ __random_state_hash_one_path_buf_hasher_%out_hash = stack_alloc DefaultHasher_SIZE
2298
+ EXPAND RANDOM_STATE_BUILD __random_state_hash_one_path_buf_hasher_%out_hash, %state
2299
+ EXPAND DEFAULT_HASHER_WRITE_PATH_BUF __random_state_hash_one_path_buf_hasher_%out_hash, %path_buf
2300
+ EXPAND DEFAULT_HASHER_FINISH %out_hash, __random_state_hash_one_path_buf_hasher_%out_hash
2301
+ [END_MACRO]
2302
+
2303
+ [MACRO] PATH_BUF_PUSH %path_buf, %child_slice
2304
+ EXPAND PATH_BUF_AS_PATH __pb_push_view_%path_buf, %path_buf
2305
+ EXPAND PATH_JOIN __pb_push_joined_%path_buf, __pb_push_view_%path_buf, %child_slice
2306
+ EXPAND STRING_BUF_FROM_STR __pb_push_tmp_%path_buf, __pb_push_joined_%path_buf
2307
+ EXPAND STRING_BUF_CLONE_FROM %path_buf, __pb_push_tmp_%path_buf
2308
+ EXPAND STRING_BUF_FREE __pb_push_tmp_%path_buf
2309
+ !__pb_push_joined_%path_buf
2310
+ !__pb_push_view_%path_buf
2311
+ [END_MACRO]
2312
+
2313
+ [MACRO] PATH_BUF_POP %out_ok, %path_buf
2314
+ EXPAND PATH_BUF_AS_PATH __pb_pop_view_%out_ok, %path_buf
2315
+ EXPAND PATH_TRY_PARENT __pb_pop_has_%out_ok, __pb_pop_parent_%out_ok, __pb_pop_view_%out_ok
2316
+ br __pb_pop_has_%out_ok -> L_PB_POP_APPLY_%out_ok, L_PB_POP_FAIL_%out_ok
2317
+
2318
+ L_PB_POP_APPLY_%out_ok:
2319
+ EXPAND STRING_BUF_CLEAR %path_buf
2320
+ EXPAND STRING_BUF_PUSH_STR %path_buf, __pb_pop_parent_%out_ok
2321
+ %out_ok = add 0, 1
2322
+ !__pb_pop_parent_%out_ok
2323
+ !__pb_pop_has_%out_ok
2324
+ !__pb_pop_view_%out_ok
2325
+ jmp L_PB_POP_END_%out_ok
2326
+
2327
+ L_PB_POP_FAIL_%out_ok:
2328
+ %out_ok = add 0, 0
2329
+ !__pb_pop_parent_%out_ok
2330
+ !__pb_pop_has_%out_ok
2331
+ !__pb_pop_view_%out_ok
2332
+ jmp L_PB_POP_END_%out_ok
2333
+
2334
+ L_PB_POP_END_%out_ok:
2335
+ [END_MACRO]
2336
+
2337
+ [MACRO] PATH_BUF_SET_FILE_NAME %path_buf, %file_name_slice
2338
+ EXPAND STRING_BUF_AS_STR __pb_set_name_view_%path_buf, %path_buf
2339
+ EXPAND PATH_WITH_FILE_NAME __pb_set_name_new_%path_buf, __pb_set_name_view_%path_buf, %file_name_slice
2340
+ EXPAND STRING_BUF_CLEAR %path_buf
2341
+ EXPAND STRING_BUF_PUSH_STR %path_buf, __pb_set_name_new_%path_buf
2342
+ !__pb_set_name_new_%path_buf
2343
+ !__pb_set_name_view_%path_buf
2344
+ [END_MACRO]
2345
+
2346
+ [MACRO] PATH_BUF_SET_EXTENSION %path_buf, %extension_slice
2347
+ EXPAND STRING_BUF_AS_STR __pb_set_ext_view_%path_buf, %path_buf
2348
+ EXPAND PATH_WITH_EXTENSION __pb_set_ext_new_%path_buf, __pb_set_ext_view_%path_buf, %extension_slice
2349
+ EXPAND STRING_BUF_CLEAR %path_buf
2350
+ EXPAND STRING_BUF_PUSH_STR %path_buf, __pb_set_ext_new_%path_buf
2351
+ !__pb_set_ext_new_%path_buf
2352
+ !__pb_set_ext_view_%path_buf
2353
+ [END_MACRO]
2354
+
2355
+ [MACRO] PATH_BUF_PUSH_TRAILING_SEPARATOR %path_buf
2356
+ EXPAND STRING_BUF_AS_STR __pb_trail_view_%path_buf, %path_buf
2357
+ EXPAND PATH_WITH_TRAILING_SEPARATOR __pb_trail_new_%path_buf, __pb_trail_view_%path_buf
2358
+ EXPAND STRING_BUF_CLEAR %path_buf
2359
+ EXPAND STRING_BUF_PUSH_STR %path_buf, __pb_trail_new_%path_buf
2360
+ !__pb_trail_new_%path_buf
2361
+ !__pb_trail_view_%path_buf
2362
+ [END_MACRO]
2363
+
2364
+ [MACRO] PATH_BUF_EXISTS %out_flag, %path_buf
2365
+ EXPAND PATH_BUF_AS_PATH __pb_exists_view_%path_buf, %path_buf
2366
+ EXPAND PATH_EXISTS %out_flag, __pb_exists_view_%path_buf
2367
+ !__pb_exists_view_%path_buf
2368
+ [END_MACRO]
2369
+
2370
+ [MACRO] PATH_BUF_IS_FILE %out_flag, %path_buf
2371
+ EXPAND PATH_BUF_AS_PATH __pb_is_file_view_%path_buf, %path_buf
2372
+ EXPAND PATH_IS_FILE %out_flag, __pb_is_file_view_%path_buf
2373
+ !__pb_is_file_view_%path_buf
2374
+ [END_MACRO]
2375
+
2376
+ [MACRO] PATH_BUF_IS_DIR %out_flag, %path_buf
2377
+ EXPAND PATH_BUF_AS_PATH __pb_is_dir_view_%path_buf, %path_buf
2378
+ EXPAND PATH_IS_DIR %out_flag, __pb_is_dir_view_%path_buf
2379
+ !__pb_is_dir_view_%path_buf
2380
+ [END_MACRO]
2381
+
2382
+ [MACRO] PATH_BUF_CAPACITY_REMAINING %out_remaining, %path_buf
2383
+ EXPAND STRING_BUF_CAPACITY_REMAINING %out_remaining, %path_buf
2384
+ [END_MACRO]
2385
+
2386
+ [MACRO] PATH_BUF_REMAINING_CAPACITY %out_remaining, %path_buf
2387
+ EXPAND PATH_BUF_CAPACITY_REMAINING %out_remaining, %path_buf
2388
+ [END_MACRO]
2389
+
2390
+ [MACRO] PATH_BUF_EXTRA_CAPACITY %out_remaining, %path_buf
2391
+ EXPAND PATH_BUF_CAPACITY_REMAINING %out_remaining, %path_buf
2392
+ [END_MACRO]
2393
+
2394
+ [MACRO] PATH_BUF_LIT1 %out_path_buf, %s0
2395
+ EXPAND PATH_BUF_FROM_PATH %out_path_buf, %s0
2396
+ [END_MACRO]
2397
+
2398
+ [MACRO] PATH_BUF_LIT2 %out_path_buf, %s0, %s1
2399
+ EXPAND PATH_BUF_FROM_PATH %out_path_buf, %s0
2400
+ EXPAND PATH_BUF_PUSH %out_path_buf, %s1
2401
+ [END_MACRO]
2402
+
2403
+ [MACRO] PATH_BUF_LIT3 %out_path_buf, %s0, %s1, %s2
2404
+ EXPAND PATH_BUF_FROM_PATH %out_path_buf, %s0
2405
+ EXPAND PATH_BUF_PUSH %out_path_buf, %s1
2406
+ EXPAND PATH_BUF_PUSH %out_path_buf, %s2
2407
+ [END_MACRO]
2408
+
2409
+ // PathBuf <-> OsString/OsStr concrete Unix byte-buffer conversions.
2410
+
2411
+ [MACRO] PATH_BUF_AS_OS_STR %out_os_str, %path_buf
2412
+ EXPAND PATH_BUF_AS_PATH %out_os_str, %path_buf
2413
+ [END_MACRO]
2414
+
2415
+ [MACRO] PATH_BUF_FROM_OS_STR %out_path_buf, %os_str
2416
+ EXPAND OS_STR_AS_BYTES __pb_from_os_str_bytes_%out_path_buf, %os_str
2417
+ EXPAND PATH_BUF_FROM_PATH %out_path_buf, __pb_from_os_str_bytes_%out_path_buf
2418
+ !__pb_from_os_str_bytes_%out_path_buf
2419
+ [END_MACRO]
2420
+
2421
+ [MACRO] PATH_BUF_FROM_OS_STRING %out_path_buf, %os_string
2422
+ EXPAND OS_STRING_AS_SLICE __pb_from_os_string_bytes_%out_path_buf, %os_string
2423
+ EXPAND PATH_BUF_FROM_PATH %out_path_buf, __pb_from_os_string_bytes_%out_path_buf
2424
+ !__pb_from_os_string_bytes_%out_path_buf
2425
+ [END_MACRO]
2426
+
2427
+ [MACRO] PATH_BUF_INTO_OS_STRING %out_os_string, %path_buf
2428
+ EXPAND PATH_BUF_AS_PATH __pb_into_os_string_view_%out_os_string, %path_buf
2429
+ EXPAND OS_STRING_FROM_STR %out_os_string, __pb_into_os_string_view_%out_os_string
2430
+ !__pb_into_os_string_view_%out_os_string
2431
+ [END_MACRO]
2432
+
2433
+ [MACRO] PATH_BUF_INTO_OS_STRING_MOVE %out_os_string, %path_buf
2434
+ EXPAND PATH_BUF_INTO_OS_STRING %out_os_string, %path_buf
2435
+ EXPAND PATH_BUF_FREE %path_buf
2436
+ [END_MACRO]
2437
+
2438
+ // PathBuf query/component aliases over PATH_BUF_AS_PATH + existing PATH_* helpers.
2439
+
2440
+ [MACRO] PATH_BUF_IS_ABSOLUTE %out_flag, %path_buf
2441
+ EXPAND PATH_BUF_AS_PATH __pb_is_abs_view_%out_flag, %path_buf
2442
+ EXPAND PATH_IS_ABSOLUTE %out_flag, __pb_is_abs_view_%out_flag
2443
+ !__pb_is_abs_view_%out_flag
2444
+ [END_MACRO]
2445
+
2446
+ [MACRO] PATH_BUF_IS_RELATIVE %out_flag, %path_buf
2447
+ EXPAND PATH_BUF_AS_PATH __pb_is_rel_view_%out_flag, %path_buf
2448
+ EXPAND PATH_IS_RELATIVE %out_flag, __pb_is_rel_view_%out_flag
2449
+ !__pb_is_rel_view_%out_flag
2450
+ [END_MACRO]
2451
+
2452
+ [MACRO] PATH_BUF_HAS_ROOT %out_flag, %path_buf
2453
+ EXPAND PATH_BUF_AS_PATH __pb_has_root_view_%out_flag, %path_buf
2454
+ EXPAND PATH_HAS_ROOT %out_flag, __pb_has_root_view_%out_flag
2455
+ !__pb_has_root_view_%out_flag
2456
+ [END_MACRO]
2457
+
2458
+ [MACRO] PATH_BUF_COMPONENT_COUNT %out_count, %path_buf
2459
+ EXPAND PATH_BUF_AS_PATH __pb_comp_count_view_%out_count, %path_buf
2460
+ EXPAND PATH_COMPONENT_COUNT %out_count, __pb_comp_count_view_%out_count
2461
+ !__pb_comp_count_view_%out_count
2462
+ [END_MACRO]
2463
+
2464
+ [MACRO] PATH_BUF_TRY_COMPONENT_AT %out_ok, %out_slice, %path_buf, %component_index
2465
+ EXPAND PATH_BUF_AS_PATH __pb_comp_at_view_%out_ok, %path_buf
2466
+ EXPAND PATH_TRY_COMPONENT_AT %out_ok, %out_slice, __pb_comp_at_view_%out_ok, %component_index
2467
+ !__pb_comp_at_view_%out_ok
2468
+ [END_MACRO]
2469
+
2470
+ [MACRO] PATH_BUF_ANCESTOR_COUNT %out_count, %path_buf
2471
+ EXPAND PATH_BUF_AS_PATH __pb_anc_count_view_%out_count, %path_buf
2472
+ EXPAND PATH_ANCESTOR_COUNT %out_count, __pb_anc_count_view_%out_count
2473
+ !__pb_anc_count_view_%out_count
2474
+ [END_MACRO]
2475
+
2476
+ [MACRO] PATH_BUF_TRY_ANCESTOR_AT %out_ok, %out_slice, %path_buf, %ancestor_index
2477
+ EXPAND PATH_BUF_AS_PATH __pb_anc_at_view_%out_ok, %path_buf
2478
+ EXPAND PATH_TRY_ANCESTOR_AT %out_ok, %out_slice, __pb_anc_at_view_%out_ok, %ancestor_index
2479
+ !__pb_anc_at_view_%out_ok
2480
+ [END_MACRO]
2481
+
2482
+ [MACRO] PATH_BUF_TRY_PARENT %out_ok, %out_slice, %path_buf
2483
+ EXPAND PATH_BUF_AS_PATH __pb_try_parent_view_%out_ok, %path_buf
2484
+ EXPAND PATH_TRY_PARENT %out_ok, %out_slice, __pb_try_parent_view_%out_ok
2485
+ !__pb_try_parent_view_%out_ok
2486
+ [END_MACRO]
2487
+
2488
+ [MACRO] PATH_BUF_TRY_FILE_NAME %out_ok, %out_slice, %path_buf
2489
+ EXPAND PATH_BUF_AS_PATH __pb_try_file_view_%out_ok, %path_buf
2490
+ EXPAND PATH_TRY_FILE_NAME %out_ok, %out_slice, __pb_try_file_view_%out_ok
2491
+ !__pb_try_file_view_%out_ok
2492
+ [END_MACRO]
2493
+
2494
+ [MACRO] PATH_BUF_TRY_FILE_STEM %out_ok, %out_slice, %path_buf
2495
+ EXPAND PATH_BUF_AS_PATH __pb_try_stem_view_%out_ok, %path_buf
2496
+ EXPAND PATH_TRY_FILE_STEM %out_ok, %out_slice, __pb_try_stem_view_%out_ok
2497
+ !__pb_try_stem_view_%out_ok
2498
+ [END_MACRO]
2499
+
2500
+ [MACRO] PATH_BUF_TRY_EXTENSION %out_ok, %out_slice, %path_buf
2501
+ EXPAND PATH_BUF_AS_PATH __pb_try_ext_view_%out_ok, %path_buf
2502
+ EXPAND PATH_TRY_EXTENSION %out_ok, %out_slice, __pb_try_ext_view_%out_ok
2503
+ !__pb_try_ext_view_%out_ok
2504
+ [END_MACRO]
2505
+
2506
+ // PathBuf-to-PathBuf push/join convenience over AS_PATH + PUSH.
2507
+
2508
+ [MACRO] PATH_BUF_PUSH_PATH_BUF %path_buf, %child_path_buf
2509
+ EXPAND PATH_BUF_AS_PATH __pb_push_pb_child_%path_buf, %child_path_buf
2510
+ EXPAND PATH_BUF_PUSH %path_buf, __pb_push_pb_child_%path_buf
2511
+ !__pb_push_pb_child_%path_buf
2512
+ [END_MACRO]
2513
+
2514
+ [MACRO] PATH_BUF_JOIN %path_buf, %child_slice
2515
+ EXPAND PATH_BUF_PUSH %path_buf, %child_slice
2516
+ [END_MACRO]
2517
+
2518
+ [MACRO] PATH_BUF_JOIN_PATH_BUF %path_buf, %child_path_buf
2519
+ EXPAND PATH_BUF_PUSH_PATH_BUF %path_buf, %child_path_buf
2520
+ [END_MACRO]
2521
+
2522
+ [MACRO] PATH_BUF_CLONE_FROM %dst_path_buf, %src_path_buf
2523
+ EXPAND STRING_BUF_CLONE_FROM %dst_path_buf, %src_path_buf
2524
+ [END_MACRO]
2525
+
2526
+
2527
+ // PathBuf filesystem query/mutation aliases over AS_PATH + PATH_* helpers.
2528
+
2529
+ [MACRO] PATH_BUF_TRY_EXISTS %out_status, %out_flag, %path_buf
2530
+ EXPAND PATH_BUF_AS_PATH __pb_try_exists_view_%out_status, %path_buf
2531
+ EXPAND PATH_TRY_EXISTS %out_status, %out_flag, __pb_try_exists_view_%out_status
2532
+ !__pb_try_exists_view_%out_status
2533
+ [END_MACRO]
2534
+
2535
+ [MACRO] PATH_BUF_METADATA %out_status, %out_metadata, %path_buf
2536
+ EXPAND PATH_BUF_AS_PATH __pb_metadata_view_%out_status, %path_buf
2537
+ EXPAND PATH_METADATA %out_status, %out_metadata, __pb_metadata_view_%out_status
2538
+ !__pb_metadata_view_%out_status
2539
+ [END_MACRO]
2540
+
2541
+ [MACRO] PATH_BUF_CANONICALIZE %out_status, %out_buffer, %path_buf
2542
+ EXPAND PATH_BUF_AS_PATH __pb_canon_view_%out_status, %path_buf
2543
+ EXPAND PATH_CANONICALIZE %out_status, %out_buffer, __pb_canon_view_%out_status
2544
+ !__pb_canon_view_%out_status
2545
+ [END_MACRO]
2546
+
2547
+ [MACRO] PATH_BUF_READ_LINK %out_status, %out_buffer, %path_buf
2548
+ EXPAND PATH_BUF_AS_PATH __pb_read_link_view_%out_status, %path_buf
2549
+ EXPAND PATH_READ_LINK %out_status, %out_buffer, __pb_read_link_view_%out_status
2550
+ !__pb_read_link_view_%out_status
2551
+ [END_MACRO]
2552
+
2553
+ [MACRO] PATH_BUF_IS_SYMLINK %out_flag, %path_buf
2554
+ EXPAND PATH_BUF_AS_PATH __pb_is_symlink_view_%out_flag, %path_buf
2555
+ EXPAND PATH_IS_SYMLINK %out_flag, __pb_is_symlink_view_%out_flag
2556
+ !__pb_is_symlink_view_%out_flag
2557
+ [END_MACRO]
2558
+
2559
+ // Slice-path filesystem operation aliases over FS_* ptr/len helpers.
2560
+
2561
+ [MACRO] PATH_OPEN_READ %out_status, %out_file, %path_slice
2562
+ __path_open_read_ptr_%out_status = load %path_slice+Slice_ptr as ptr
2563
+ __path_open_read_len_%out_status = load %path_slice+Slice_len as u64
2564
+ EXPAND FS_OPEN_READ %out_status, %out_file, __path_open_read_ptr_%out_status, __path_open_read_len_%out_status
2565
+ !__path_open_read_len_%out_status
2566
+ !__path_open_read_ptr_%out_status
2567
+ [END_MACRO]
2568
+
2569
+ [MACRO] PATH_OPEN_WRITE %out_status, %out_file, %path_slice, %truncate
2570
+ __path_open_write_ptr_%out_status = load %path_slice+Slice_ptr as ptr
2571
+ __path_open_write_len_%out_status = load %path_slice+Slice_len as u64
2572
+ EXPAND FS_OPEN_WRITE %out_status, %out_file, __path_open_write_ptr_%out_status, __path_open_write_len_%out_status, %truncate
2573
+ !__path_open_write_len_%out_status
2574
+ !__path_open_write_ptr_%out_status
2575
+ [END_MACRO]
2576
+
2577
+ [MACRO] PATH_CREATE %out_status, %out_file, %path_slice
2578
+ __path_create_ptr_%out_status = load %path_slice+Slice_ptr as ptr
2579
+ __path_create_len_%out_status = load %path_slice+Slice_len as u64
2580
+ EXPAND FS_CREATE %out_status, %out_file, __path_create_ptr_%out_status, __path_create_len_%out_status
2581
+ !__path_create_len_%out_status
2582
+ !__path_create_ptr_%out_status
2583
+ [END_MACRO]
2584
+
2585
+ [MACRO] PATH_READ_FILE %out_status, %out_buffer, %path_slice, %max_bytes
2586
+ __path_read_file_ptr_%out_status = load %path_slice+Slice_ptr as ptr
2587
+ __path_read_file_len_%out_status = load %path_slice+Slice_len as u64
2588
+ EXPAND FS_READ_FILE %out_status, %out_buffer, __path_read_file_ptr_%out_status, __path_read_file_len_%out_status, %max_bytes
2589
+ !__path_read_file_len_%out_status
2590
+ !__path_read_file_ptr_%out_status
2591
+ [END_MACRO]
2592
+
2593
+ [MACRO] PATH_WRITE_FILE %out_status, %path_slice, %buf, %len
2594
+ __path_write_file_ptr_%out_status = load %path_slice+Slice_ptr as ptr
2595
+ __path_write_file_len_%out_status = load %path_slice+Slice_len as u64
2596
+ EXPAND FS_WRITE_FILE %out_status, __path_write_file_ptr_%out_status, __path_write_file_len_%out_status, %buf, %len
2597
+ !__path_write_file_len_%out_status
2598
+ !__path_write_file_ptr_%out_status
2599
+ [END_MACRO]
2600
+
2601
+ [MACRO] PATH_REMOVE_FILE %out_status, %path_slice
2602
+ __path_remove_file_ptr_%out_status = load %path_slice+Slice_ptr as ptr
2603
+ __path_remove_file_len_%out_status = load %path_slice+Slice_len as u64
2604
+ EXPAND FS_REMOVE_FILE %out_status, __path_remove_file_ptr_%out_status, __path_remove_file_len_%out_status
2605
+ !__path_remove_file_len_%out_status
2606
+ !__path_remove_file_ptr_%out_status
2607
+ [END_MACRO]
2608
+
2609
+ [MACRO] PATH_REMOVE_DIR %out_status, %path_slice
2610
+ __path_remove_dir_ptr_%out_status = load %path_slice+Slice_ptr as ptr
2611
+ __path_remove_dir_len_%out_status = load %path_slice+Slice_len as u64
2612
+ EXPAND FS_REMOVE_DIR %out_status, __path_remove_dir_ptr_%out_status, __path_remove_dir_len_%out_status
2613
+ !__path_remove_dir_len_%out_status
2614
+ !__path_remove_dir_ptr_%out_status
2615
+ [END_MACRO]
2616
+
2617
+ [MACRO] PATH_CREATE_DIR %out_status, %path_slice
2618
+ __path_create_dir_ptr_%out_status = load %path_slice+Slice_ptr as ptr
2619
+ __path_create_dir_len_%out_status = load %path_slice+Slice_len as u64
2620
+ EXPAND FS_CREATE_DIR %out_status, __path_create_dir_ptr_%out_status, __path_create_dir_len_%out_status
2621
+ !__path_create_dir_len_%out_status
2622
+ !__path_create_dir_ptr_%out_status
2623
+ [END_MACRO]
2624
+
2625
+ [MACRO] PATH_COPY %out_status, %from_slice, %to_slice
2626
+ __path_copy_from_ptr_%out_status = load %from_slice+Slice_ptr as ptr
2627
+ __path_copy_from_len_%out_status = load %from_slice+Slice_len as u64
2628
+ __path_copy_to_ptr_%out_status = load %to_slice+Slice_ptr as ptr
2629
+ __path_copy_to_len_%out_status = load %to_slice+Slice_len as u64
2630
+ EXPAND FS_COPY %out_status, __path_copy_from_ptr_%out_status, __path_copy_from_len_%out_status, __path_copy_to_ptr_%out_status, __path_copy_to_len_%out_status
2631
+ !__path_copy_to_len_%out_status
2632
+ !__path_copy_to_ptr_%out_status
2633
+ !__path_copy_from_len_%out_status
2634
+ !__path_copy_from_ptr_%out_status
2635
+ [END_MACRO]
2636
+
2637
+ // PathBuf filesystem operation aliases over AS_PATH + PATH_* helpers.
2638
+
2639
+ [MACRO] PATH_BUF_OPEN_READ %out_status, %out_file, %path_buf
2640
+ EXPAND PATH_BUF_AS_PATH __pb_open_read_view_%out_status, %path_buf
2641
+ EXPAND PATH_OPEN_READ %out_status, %out_file, __pb_open_read_view_%out_status
2642
+ !__pb_open_read_view_%out_status
2643
+ [END_MACRO]
2644
+
2645
+ [MACRO] PATH_BUF_OPEN_WRITE %out_status, %out_file, %path_buf, %truncate
2646
+ EXPAND PATH_BUF_AS_PATH __pb_open_write_view_%out_status, %path_buf
2647
+ EXPAND PATH_OPEN_WRITE %out_status, %out_file, __pb_open_write_view_%out_status, %truncate
2648
+ !__pb_open_write_view_%out_status
2649
+ [END_MACRO]
2650
+
2651
+ [MACRO] PATH_BUF_CREATE %out_status, %out_file, %path_buf
2652
+ EXPAND PATH_BUF_AS_PATH __pb_create_view_%out_status, %path_buf
2653
+ EXPAND PATH_CREATE %out_status, %out_file, __pb_create_view_%out_status
2654
+ !__pb_create_view_%out_status
2655
+ [END_MACRO]
2656
+
2657
+ [MACRO] PATH_BUF_READ_FILE %out_status, %out_buffer, %path_buf, %max_bytes
2658
+ EXPAND PATH_BUF_AS_PATH __pb_read_file_view_%out_status, %path_buf
2659
+ EXPAND PATH_READ_FILE %out_status, %out_buffer, __pb_read_file_view_%out_status, %max_bytes
2660
+ !__pb_read_file_view_%out_status
2661
+ [END_MACRO]
2662
+
2663
+ [MACRO] PATH_BUF_WRITE_FILE %out_status, %path_buf, %buf, %len
2664
+ EXPAND PATH_BUF_AS_PATH __pb_write_file_view_%out_status, %path_buf
2665
+ EXPAND PATH_WRITE_FILE %out_status, __pb_write_file_view_%out_status, %buf, %len
2666
+ !__pb_write_file_view_%out_status
2667
+ [END_MACRO]
2668
+
2669
+ [MACRO] PATH_BUF_REMOVE_FILE %out_status, %path_buf
2670
+ EXPAND PATH_BUF_AS_PATH __pb_remove_file_view_%out_status, %path_buf
2671
+ EXPAND PATH_REMOVE_FILE %out_status, __pb_remove_file_view_%out_status
2672
+ !__pb_remove_file_view_%out_status
2673
+ [END_MACRO]
2674
+
2675
+ [MACRO] PATH_BUF_CREATE_DIR %out_status, %path_buf
2676
+ EXPAND PATH_BUF_AS_PATH __pb_create_dir_view_%out_status, %path_buf
2677
+ EXPAND PATH_CREATE_DIR %out_status, __pb_create_dir_view_%out_status
2678
+ !__pb_create_dir_view_%out_status
2679
+ [END_MACRO]
2680
+
2681
+ [MACRO] PATH_BUF_REMOVE_DIR %out_status, %path_buf
2682
+ EXPAND PATH_BUF_AS_PATH __pb_remove_dir_view_%out_status, %path_buf
2683
+ EXPAND PATH_REMOVE_DIR %out_status, __pb_remove_dir_view_%out_status
2684
+ !__pb_remove_dir_view_%out_status
2685
+ [END_MACRO]
2686
+
2687
+ [MACRO] PATH_BUF_COPY %out_status, %from_path_buf, %to_path_buf
2688
+ EXPAND PATH_BUF_AS_PATH __pb_copy_from_view_%out_status, %from_path_buf
2689
+ EXPAND PATH_BUF_AS_PATH __pb_copy_to_view_%out_status, %to_path_buf
2690
+ EXPAND PATH_COPY %out_status, __pb_copy_from_view_%out_status, __pb_copy_to_view_%out_status
2691
+ !__pb_copy_to_view_%out_status
2692
+ !__pb_copy_from_view_%out_status
2693
+ [END_MACRO]
2694
+
2695
+ // Additional Path filesystem operation aliases over FS_* helpers.
2696
+
2697
+ [MACRO] PATH_READ_TO_STRING %out_status, %out_buffer, %path_slice, %max_bytes
2698
+ __path_read_to_string_ptr_%out_status = load %path_slice+Slice_ptr as ptr
2699
+ __path_read_to_string_len_%out_status = load %path_slice+Slice_len as u64
2700
+ EXPAND FS_READ_TO_STRING %out_status, %out_buffer, __path_read_to_string_ptr_%out_status, __path_read_to_string_len_%out_status, %max_bytes
2701
+ !__path_read_to_string_len_%out_status
2702
+ !__path_read_to_string_ptr_%out_status
2703
+ [END_MACRO]
2704
+
2705
+ [MACRO] PATH_CREATE_DIR_ALL %out_status, %path_slice
2706
+ __path_create_dir_all_ptr_%out_status = load %path_slice+Slice_ptr as ptr
2707
+ __path_create_dir_all_len_%out_status = load %path_slice+Slice_len as u64
2708
+ EXPAND FS_CREATE_DIR_ALL %out_status, __path_create_dir_all_ptr_%out_status, __path_create_dir_all_len_%out_status
2709
+ !__path_create_dir_all_len_%out_status
2710
+ !__path_create_dir_all_ptr_%out_status
2711
+ [END_MACRO]
2712
+
2713
+ [MACRO] PATH_REMOVE_DIR_ALL %out_status, %path_slice
2714
+ __path_remove_dir_all_ptr_%out_status = load %path_slice+Slice_ptr as ptr
2715
+ __path_remove_dir_all_len_%out_status = load %path_slice+Slice_len as u64
2716
+ EXPAND FS_REMOVE_DIR_ALL %out_status, __path_remove_dir_all_ptr_%out_status, __path_remove_dir_all_len_%out_status
2717
+ !__path_remove_dir_all_len_%out_status
2718
+ !__path_remove_dir_all_ptr_%out_status
2719
+ [END_MACRO]
2720
+
2721
+ [MACRO] PATH_RENAME %out_status, %from_slice, %to_slice
2722
+ __path_rename_from_ptr_%out_status = load %from_slice+Slice_ptr as ptr
2723
+ __path_rename_from_len_%out_status = load %from_slice+Slice_len as u64
2724
+ __path_rename_to_ptr_%out_status = load %to_slice+Slice_ptr as ptr
2725
+ __path_rename_to_len_%out_status = load %to_slice+Slice_len as u64
2726
+ EXPAND FS_RENAME %out_status, __path_rename_from_ptr_%out_status, __path_rename_from_len_%out_status, __path_rename_to_ptr_%out_status, __path_rename_to_len_%out_status
2727
+ !__path_rename_to_len_%out_status
2728
+ !__path_rename_to_ptr_%out_status
2729
+ !__path_rename_from_len_%out_status
2730
+ !__path_rename_from_ptr_%out_status
2731
+ [END_MACRO]
2732
+
2733
+ [MACRO] PATH_HARD_LINK %out_status, %from_slice, %to_slice
2734
+ __path_hard_link_from_ptr_%out_status = load %from_slice+Slice_ptr as ptr
2735
+ __path_hard_link_from_len_%out_status = load %from_slice+Slice_len as u64
2736
+ __path_hard_link_to_ptr_%out_status = load %to_slice+Slice_ptr as ptr
2737
+ __path_hard_link_to_len_%out_status = load %to_slice+Slice_len as u64
2738
+ EXPAND FS_HARD_LINK %out_status, __path_hard_link_from_ptr_%out_status, __path_hard_link_from_len_%out_status, __path_hard_link_to_ptr_%out_status, __path_hard_link_to_len_%out_status
2739
+ !__path_hard_link_to_len_%out_status
2740
+ !__path_hard_link_to_ptr_%out_status
2741
+ !__path_hard_link_from_len_%out_status
2742
+ !__path_hard_link_from_ptr_%out_status
2743
+ [END_MACRO]
2744
+
2745
+ [MACRO] PATH_SYMLINK %out_status, %target_slice, %link_slice
2746
+ __path_symlink_target_ptr_%out_status = load %target_slice+Slice_ptr as ptr
2747
+ __path_symlink_target_len_%out_status = load %target_slice+Slice_len as u64
2748
+ __path_symlink_link_ptr_%out_status = load %link_slice+Slice_ptr as ptr
2749
+ __path_symlink_link_len_%out_status = load %link_slice+Slice_len as u64
2750
+ EXPAND FS_SYMLINK %out_status, __path_symlink_target_ptr_%out_status, __path_symlink_target_len_%out_status, __path_symlink_link_ptr_%out_status, __path_symlink_link_len_%out_status
2751
+ !__path_symlink_link_len_%out_status
2752
+ !__path_symlink_link_ptr_%out_status
2753
+ !__path_symlink_target_len_%out_status
2754
+ !__path_symlink_target_ptr_%out_status
2755
+ [END_MACRO]
2756
+
2757
+ [MACRO] PATH_SET_PERMISSIONS %out_status, %path_slice, %mode
2758
+ __path_set_perm_ptr_%out_status = load %path_slice+Slice_ptr as ptr
2759
+ __path_set_perm_len_%out_status = load %path_slice+Slice_len as u64
2760
+ EXPAND FS_SET_PERMISSIONS %out_status, __path_set_perm_ptr_%out_status, __path_set_perm_len_%out_status, %mode
2761
+ !__path_set_perm_len_%out_status
2762
+ !__path_set_perm_ptr_%out_status
2763
+ [END_MACRO]
2764
+
2765
+ [MACRO] PATH_SET_TIMES_MS %out_status, %path_slice, %accessed_ms, %modified_ms
2766
+ __path_set_times_ptr_%out_status = load %path_slice+Slice_ptr as ptr
2767
+ __path_set_times_len_%out_status = load %path_slice+Slice_len as u64
2768
+ EXPAND FS_SET_TIMES_MS %out_status, __path_set_times_ptr_%out_status, __path_set_times_len_%out_status, %accessed_ms, %modified_ms
2769
+ !__path_set_times_len_%out_status
2770
+ !__path_set_times_ptr_%out_status
2771
+ [END_MACRO]
2772
+
2773
+ // PathBuf wrappers for the additional Path filesystem operations.
2774
+
2775
+ [MACRO] PATH_BUF_READ_TO_STRING %out_status, %out_buffer, %path_buf, %max_bytes
2776
+ EXPAND PATH_BUF_AS_PATH __pb_read_to_string_view_%out_status, %path_buf
2777
+ EXPAND PATH_READ_TO_STRING %out_status, %out_buffer, __pb_read_to_string_view_%out_status, %max_bytes
2778
+ !__pb_read_to_string_view_%out_status
2779
+ [END_MACRO]
2780
+
2781
+ [MACRO] PATH_BUF_CREATE_DIR_ALL %out_status, %path_buf
2782
+ EXPAND PATH_BUF_AS_PATH __pb_create_dir_all_view_%out_status, %path_buf
2783
+ EXPAND PATH_CREATE_DIR_ALL %out_status, __pb_create_dir_all_view_%out_status
2784
+ !__pb_create_dir_all_view_%out_status
2785
+ [END_MACRO]
2786
+
2787
+ [MACRO] PATH_BUF_REMOVE_DIR_ALL %out_status, %path_buf
2788
+ EXPAND PATH_BUF_AS_PATH __pb_remove_dir_all_view_%out_status, %path_buf
2789
+ EXPAND PATH_REMOVE_DIR_ALL %out_status, __pb_remove_dir_all_view_%out_status
2790
+ !__pb_remove_dir_all_view_%out_status
2791
+ [END_MACRO]
2792
+
2793
+ [MACRO] PATH_BUF_RENAME %out_status, %from_path_buf, %to_path_buf
2794
+ EXPAND PATH_BUF_AS_PATH __pb_rename_from_view_%out_status, %from_path_buf
2795
+ EXPAND PATH_BUF_AS_PATH __pb_rename_to_view_%out_status, %to_path_buf
2796
+ EXPAND PATH_RENAME %out_status, __pb_rename_from_view_%out_status, __pb_rename_to_view_%out_status
2797
+ !__pb_rename_to_view_%out_status
2798
+ !__pb_rename_from_view_%out_status
2799
+ [END_MACRO]
2800
+
2801
+ [MACRO] PATH_BUF_HARD_LINK %out_status, %from_path_buf, %to_path_buf
2802
+ EXPAND PATH_BUF_AS_PATH __pb_hard_link_from_view_%out_status, %from_path_buf
2803
+ EXPAND PATH_BUF_AS_PATH __pb_hard_link_to_view_%out_status, %to_path_buf
2804
+ EXPAND PATH_HARD_LINK %out_status, __pb_hard_link_from_view_%out_status, __pb_hard_link_to_view_%out_status
2805
+ !__pb_hard_link_to_view_%out_status
2806
+ !__pb_hard_link_from_view_%out_status
2807
+ [END_MACRO]
2808
+
2809
+ [MACRO] PATH_BUF_SYMLINK %out_status, %target_path_buf, %link_path_buf
2810
+ EXPAND PATH_BUF_AS_PATH __pb_symlink_target_view_%out_status, %target_path_buf
2811
+ EXPAND PATH_BUF_AS_PATH __pb_symlink_link_view_%out_status, %link_path_buf
2812
+ EXPAND PATH_SYMLINK %out_status, __pb_symlink_target_view_%out_status, __pb_symlink_link_view_%out_status
2813
+ !__pb_symlink_link_view_%out_status
2814
+ !__pb_symlink_target_view_%out_status
2815
+ [END_MACRO]
2816
+
2817
+ [MACRO] PATH_BUF_SET_PERMISSIONS %out_status, %path_buf, %mode
2818
+ EXPAND PATH_BUF_AS_PATH __pb_set_perm_view_%out_status, %path_buf
2819
+ EXPAND PATH_SET_PERMISSIONS %out_status, __pb_set_perm_view_%out_status, %mode
2820
+ !__pb_set_perm_view_%out_status
2821
+ [END_MACRO]
2822
+
2823
+ [MACRO] PATH_BUF_SET_TIMES_MS %out_status, %path_buf, %accessed_ms, %modified_ms
2824
+ EXPAND PATH_BUF_AS_PATH __pb_set_times_view_%out_status, %path_buf
2825
+ EXPAND PATH_SET_TIMES_MS %out_status, __pb_set_times_view_%out_status, %accessed_ms, %modified_ms
2826
+ !__pb_set_times_view_%out_status
2827
+ [END_MACRO]
2828
+
2829
+ // Path directory listing aliases over FS_READ_DIR_* helpers.
2830
+
2831
+ [MACRO] PATH_READ_DIR_JSON %out_status, %out_buffer, %path_slice, %max_entries
2832
+ __path_read_dir_json_ptr_%out_status = load %path_slice+Slice_ptr as ptr
2833
+ __path_read_dir_json_len_%out_status = load %path_slice+Slice_len as u64
2834
+ EXPAND FS_READ_DIR_JSON %out_status, %out_buffer, __path_read_dir_json_ptr_%out_status, __path_read_dir_json_len_%out_status, %max_entries
2835
+ !__path_read_dir_json_len_%out_status
2836
+ !__path_read_dir_json_ptr_%out_status
2837
+ [END_MACRO]
2838
+
2839
+ [MACRO] PATH_READ_DIR_ENTRIES %out_status, %out_entries, %path_slice, %max_entries
2840
+ __path_read_dir_entries_ptr_%out_status = load %path_slice+Slice_ptr as ptr
2841
+ __path_read_dir_entries_len_%out_status = load %path_slice+Slice_len as u64
2842
+ EXPAND FS_READ_DIR_ENTRIES %out_status, %out_entries, __path_read_dir_entries_ptr_%out_status, __path_read_dir_entries_len_%out_status, %max_entries
2843
+ !__path_read_dir_entries_len_%out_status
2844
+ !__path_read_dir_entries_ptr_%out_status
2845
+ [END_MACRO]
2846
+
2847
+ [MACRO] PATH_BUF_READ_DIR_JSON %out_status, %out_buffer, %path_buf, %max_entries
2848
+ EXPAND PATH_BUF_AS_PATH __pb_read_dir_json_view_%out_status, %path_buf
2849
+ EXPAND PATH_READ_DIR_JSON %out_status, %out_buffer, __pb_read_dir_json_view_%out_status, %max_entries
2850
+ !__pb_read_dir_json_view_%out_status
2851
+ [END_MACRO]
2852
+
2853
+ [MACRO] PATH_BUF_READ_DIR_ENTRIES %out_status, %out_entries, %path_buf, %max_entries
2854
+ EXPAND PATH_BUF_AS_PATH __pb_read_dir_entries_view_%out_status, %path_buf
2855
+ EXPAND PATH_READ_DIR_ENTRIES %out_status, %out_entries, __pb_read_dir_entries_view_%out_status, %max_entries
2856
+ !__pb_read_dir_entries_view_%out_status
2857
+ [END_MACRO]
2858
+
2859
+ // Path slice facades over FS DirBuilder / OpenOptions SSA builders.
2860
+
2861
+ [MACRO] PATH_DIR_BUILDER_CREATE %out_status, %recursive, %mode, %path_slice
2862
+ __path_dir_builder_ptr_%out_status = load %path_slice+Slice_ptr as ptr
2863
+ __path_dir_builder_len_%out_status = load %path_slice+Slice_len as u64
2864
+ EXPAND FS_DIR_BUILDER_CREATE %out_status, %recursive, %mode, __path_dir_builder_ptr_%out_status, __path_dir_builder_len_%out_status
2865
+ !__path_dir_builder_len_%out_status
2866
+ !__path_dir_builder_ptr_%out_status
2867
+ [END_MACRO]
2868
+
2869
+ [MACRO] PATH_OPEN_OPTIONS_BUILDER_OPEN %out_status, %out_file, %flags, %mode, %custom, %path_slice
2870
+ __path_oob_ptr_%out_status = load %path_slice+Slice_ptr as ptr
2871
+ __path_oob_len_%out_status = load %path_slice+Slice_len as u64
2872
+ EXPAND FS_OPEN_OPTIONS_BUILDER_OPEN %out_status, %out_file, %flags, %mode, %custom, __path_oob_ptr_%out_status, __path_oob_len_%out_status
2873
+ !__path_oob_len_%out_status
2874
+ !__path_oob_ptr_%out_status
2875
+ [END_MACRO]
2876
+
2877
+ [MACRO] PATH_BUF_DIR_BUILDER_CREATE %out_status, %recursive, %mode, %path_buf
2878
+ EXPAND PATH_BUF_AS_PATH __pb_dir_builder_view_%out_status, %path_buf
2879
+ EXPAND PATH_DIR_BUILDER_CREATE %out_status, %recursive, %mode, __pb_dir_builder_view_%out_status
2880
+ !__pb_dir_builder_view_%out_status
2881
+ [END_MACRO]
2882
+
2883
+ [MACRO] PATH_BUF_OPEN_OPTIONS_BUILDER_OPEN %out_status, %out_file, %flags, %mode, %custom, %path_buf
2884
+ EXPAND PATH_BUF_AS_PATH __pb_oob_view_%out_status, %path_buf
2885
+ EXPAND PATH_OPEN_OPTIONS_BUILDER_OPEN %out_status, %out_file, %flags, %mode, %custom, __pb_oob_view_%out_status
2886
+ !__pb_oob_view_%out_status
2887
+ [END_MACRO]
2888
+
2889
+ // Path slice facades over FS permissions-object and FileTimes helpers.
2890
+
2891
+ [MACRO] PATH_SET_PERMISSIONS_OBJ %out_status, %path_slice, %permissions
2892
+ __path_set_perm_obj_ptr_%out_status = load %path_slice+Slice_ptr as ptr
2893
+ __path_set_perm_obj_len_%out_status = load %path_slice+Slice_len as u64
2894
+ EXPAND FS_SET_PERMISSIONS_OBJ %out_status, __path_set_perm_obj_ptr_%out_status, __path_set_perm_obj_len_%out_status, %permissions
2895
+ !__path_set_perm_obj_len_%out_status
2896
+ !__path_set_perm_obj_ptr_%out_status
2897
+ [END_MACRO]
2898
+
2899
+ [MACRO] PATH_FILE_TIMES_SET %out_status, %path_slice, %accessed_ms, %modified_ms
2900
+ __path_file_times_ptr_%out_status = load %path_slice+Slice_ptr as ptr
2901
+ __path_file_times_len_%out_status = load %path_slice+Slice_len as u64
2902
+ EXPAND FS_FILE_TIMES_SET %out_status, __path_file_times_ptr_%out_status, __path_file_times_len_%out_status, %accessed_ms, %modified_ms
2903
+ !__path_file_times_len_%out_status
2904
+ !__path_file_times_ptr_%out_status
2905
+ [END_MACRO]
2906
+
2907
+ [MACRO] PATH_BUF_SET_PERMISSIONS_OBJ %out_status, %path_buf, %permissions
2908
+ EXPAND PATH_BUF_AS_PATH __pb_set_perm_obj_view_%out_status, %path_buf
2909
+ EXPAND PATH_SET_PERMISSIONS_OBJ %out_status, __pb_set_perm_obj_view_%out_status, %permissions
2910
+ !__pb_set_perm_obj_view_%out_status
2911
+ [END_MACRO]
2912
+
2913
+ [MACRO] PATH_BUF_FILE_TIMES_SET %out_status, %path_buf, %accessed_ms, %modified_ms
2914
+ EXPAND PATH_BUF_AS_PATH __pb_file_times_view_%out_status, %path_buf
2915
+ EXPAND PATH_FILE_TIMES_SET %out_status, __pb_file_times_view_%out_status, %accessed_ms, %modified_ms
2916
+ !__pb_file_times_view_%out_status
2917
+ [END_MACRO]
2918
+
2919
+ // batch path wrappers g1
2920
+ [MACRO] PATH_METADATA_JSON %out_status, %out_buffer, %path_slice
2921
+ __path_metadata_json_ptr_%out_status = load %path_slice+Slice_ptr as ptr
2922
+ __path_metadata_json_len_%out_status = load %path_slice+Slice_len as u64
2923
+ EXPAND FS_METADATA_JSON %out_status, %out_buffer, __path_metadata_json_ptr_%out_status, __path_metadata_json_len_%out_status
2924
+ !__path_metadata_json_len_%out_status
2925
+ !__path_metadata_json_ptr_%out_status
2926
+ [END_MACRO]
2927
+
2928
+ [MACRO] PATH_BUF_METADATA_JSON %out_status, %out_buffer, %path_buf
2929
+ EXPAND PATH_BUF_AS_PATH __pb_metadata_json_view_%out_status, %path_buf
2930
+ EXPAND PATH_METADATA_JSON %out_status, %out_buffer, __pb_metadata_json_view_%out_status
2931
+ !__pb_metadata_json_view_%out_status
2932
+ [END_MACRO]
2933
+
2934
+ // Path slice facades over FS file-len / remove / create-dir-mode helpers.
2935
+
2936
+ [MACRO] PATH_FS_SIZE %out_status, %out_len, %path_slice
2937
+ __path_file_len_ptr_%out_status = load %path_slice+Slice_ptr as ptr
2938
+ __path_file_len_len_%out_status = load %path_slice+Slice_len as u64
2939
+ EXPAND FS_LEN %out_status, %out_len, __path_file_len_ptr_%out_status, __path_file_len_len_%out_status
2940
+ !__path_file_len_len_%out_status
2941
+ !__path_file_len_ptr_%out_status
2942
+ [END_MACRO]
2943
+
2944
+ [MACRO] PATH_REMOVE_ENTRY %out_status, %path_slice
2945
+ __path_remove_entry_ptr_%out_status = load %path_slice+Slice_ptr as ptr
2946
+ __path_remove_entry_len_%out_status = load %path_slice+Slice_len as u64
2947
+ EXPAND FS_REMOVE %out_status, __path_remove_entry_ptr_%out_status, __path_remove_entry_len_%out_status
2948
+ !__path_remove_entry_len_%out_status
2949
+ !__path_remove_entry_ptr_%out_status
2950
+ [END_MACRO]
2951
+
2952
+ [MACRO] PATH_REMOVE_ANY %out_status, %path_slice
2953
+ __path_remove_any_ptr_%out_status = load %path_slice+Slice_ptr as ptr
2954
+ __path_remove_any_len_%out_status = load %path_slice+Slice_len as u64
2955
+ EXPAND FS_REMOVE_PATH %out_status, __path_remove_any_ptr_%out_status, __path_remove_any_len_%out_status
2956
+ !__path_remove_any_len_%out_status
2957
+ !__path_remove_any_ptr_%out_status
2958
+ [END_MACRO]
2959
+
2960
+ [MACRO] PATH_CREATE_DIR_WITH_MODE %out_status, %path_slice, %mode
2961
+ __path_create_dir_mode_ptr_%out_status = load %path_slice+Slice_ptr as ptr
2962
+ __path_create_dir_mode_len_%out_status = load %path_slice+Slice_len as u64
2963
+ EXPAND FS_CREATE_DIR_MODE %out_status, __path_create_dir_mode_ptr_%out_status, __path_create_dir_mode_len_%out_status, %mode
2964
+ !__path_create_dir_mode_len_%out_status
2965
+ !__path_create_dir_mode_ptr_%out_status
2966
+ [END_MACRO]
2967
+
2968
+ [MACRO] PATH_CREATE_DIR_ALL_WITH_MODE %out_status, %path_slice, %mode
2969
+ __path_create_dir_all_mode_ptr_%out_status = load %path_slice+Slice_ptr as ptr
2970
+ __path_create_dir_all_mode_len_%out_status = load %path_slice+Slice_len as u64
2971
+ EXPAND FS_CREATE_DIR_ALL_MODE %out_status, __path_create_dir_all_mode_ptr_%out_status, __path_create_dir_all_mode_len_%out_status, %mode
2972
+ !__path_create_dir_all_mode_len_%out_status
2973
+ !__path_create_dir_all_mode_ptr_%out_status
2974
+ [END_MACRO]
2975
+
2976
+ [MACRO] PATH_BUF_FS_SIZE %out_status, %out_len, %path_buf
2977
+ EXPAND PATH_BUF_AS_PATH __pb_file_len_view_%out_status, %path_buf
2978
+ EXPAND PATH_FS_SIZE %out_status, %out_len, __pb_file_len_view_%out_status
2979
+ !__pb_file_len_view_%out_status
2980
+ [END_MACRO]
2981
+
2982
+ [MACRO] PATH_BUF_REMOVE_ENTRY %out_status, %path_buf
2983
+ EXPAND PATH_BUF_AS_PATH __pb_remove_entry_view_%out_status, %path_buf
2984
+ EXPAND PATH_REMOVE_ENTRY %out_status, __pb_remove_entry_view_%out_status
2985
+ !__pb_remove_entry_view_%out_status
2986
+ [END_MACRO]
2987
+
2988
+ [MACRO] PATH_BUF_REMOVE_ANY %out_status, %path_buf
2989
+ EXPAND PATH_BUF_AS_PATH __pb_remove_any_view_%out_status, %path_buf
2990
+ EXPAND PATH_REMOVE_ANY %out_status, __pb_remove_any_view_%out_status
2991
+ !__pb_remove_any_view_%out_status
2992
+ [END_MACRO]
2993
+
2994
+ [MACRO] PATH_BUF_CREATE_DIR_WITH_MODE %out_status, %path_buf, %mode
2995
+ EXPAND PATH_BUF_AS_PATH __pb_create_dir_mode_view_%out_status, %path_buf
2996
+ EXPAND PATH_CREATE_DIR_WITH_MODE %out_status, __pb_create_dir_mode_view_%out_status, %mode
2997
+ !__pb_create_dir_mode_view_%out_status
2998
+ [END_MACRO]
2999
+
3000
+ [MACRO] PATH_BUF_CREATE_DIR_ALL_WITH_MODE %out_status, %path_buf, %mode
3001
+ EXPAND PATH_BUF_AS_PATH __pb_create_dir_all_mode_view_%out_status, %path_buf
3002
+ EXPAND PATH_CREATE_DIR_ALL_WITH_MODE %out_status, __pb_create_dir_all_mode_view_%out_status, %mode
3003
+ !__pb_create_dir_all_mode_view_%out_status
3004
+ [END_MACRO]
3005
+
3006
+
3007
+ // Path slice facades over FS open-flags/options and base64 file helpers.
3008
+
3009
+ [MACRO] PATH_OPEN_FLAGS %out_status, %out_file, %path_slice, %flags
3010
+ __path_open_flags_ptr_%out_status = load %path_slice+Slice_ptr as ptr
3011
+ __path_open_flags_len_%out_status = load %path_slice+Slice_len as u64
3012
+ EXPAND FS_OPEN_FLAGS %out_status, %out_file, __path_open_flags_ptr_%out_status, __path_open_flags_len_%out_status, %flags
3013
+ !__path_open_flags_len_%out_status
3014
+ !__path_open_flags_ptr_%out_status
3015
+ [END_MACRO]
3016
+
3017
+ [MACRO] PATH_OPEN_WITH_OPTIONS %out_status, %out_file, %path_slice, %flags, %create_mode, %custom_flags
3018
+ __path_open_with_opts_ptr_%out_status = load %path_slice+Slice_ptr as ptr
3019
+ __path_open_with_opts_len_%out_status = load %path_slice+Slice_len as u64
3020
+ EXPAND FS_OPEN_OPTIONS %out_status, %out_file, __path_open_with_opts_ptr_%out_status, __path_open_with_opts_len_%out_status, %flags, %create_mode, %custom_flags
3021
+ !__path_open_with_opts_len_%out_status
3022
+ !__path_open_with_opts_ptr_%out_status
3023
+ [END_MACRO]
3024
+
3025
+ [MACRO] PATH_READ_FILE_BASE64 %out_status, %out_buffer, %path_slice, %max_bytes
3026
+ __path_read_b64_ptr_%out_status = load %path_slice+Slice_ptr as ptr
3027
+ __path_read_b64_len_%out_status = load %path_slice+Slice_len as u64
3028
+ EXPAND FS_READ_FILE_BASE64 %out_status, %out_buffer, __path_read_b64_ptr_%out_status, __path_read_b64_len_%out_status, %max_bytes
3029
+ !__path_read_b64_len_%out_status
3030
+ !__path_read_b64_ptr_%out_status
3031
+ [END_MACRO]
3032
+
3033
+ [MACRO] PATH_WRITE_FILE_BASE64 %out_status, %path_slice, %buf, %len
3034
+ __path_write_b64_ptr_%out_status = load %path_slice+Slice_ptr as ptr
3035
+ __path_write_b64_len_%out_status = load %path_slice+Slice_len as u64
3036
+ EXPAND FS_WRITE_FILE_BASE64 %out_status, __path_write_b64_ptr_%out_status, __path_write_b64_len_%out_status, %buf, %len
3037
+ !__path_write_b64_len_%out_status
3038
+ !__path_write_b64_ptr_%out_status
3039
+ [END_MACRO]
3040
+
3041
+ [MACRO] PATH_BUF_OPEN_FLAGS %out_status, %out_file, %path_buf, %flags
3042
+ EXPAND PATH_BUF_AS_PATH __pb_open_flags_view_%out_status, %path_buf
3043
+ EXPAND PATH_OPEN_FLAGS %out_status, %out_file, __pb_open_flags_view_%out_status, %flags
3044
+ !__pb_open_flags_view_%out_status
3045
+ [END_MACRO]
3046
+
3047
+ [MACRO] PATH_BUF_OPEN_WITH_OPTIONS %out_status, %out_file, %path_buf, %flags, %create_mode, %custom_flags
3048
+ EXPAND PATH_BUF_AS_PATH __pb_open_with_opts_view_%out_status, %path_buf
3049
+ EXPAND PATH_OPEN_WITH_OPTIONS %out_status, %out_file, __pb_open_with_opts_view_%out_status, %flags, %create_mode, %custom_flags
3050
+ !__pb_open_with_opts_view_%out_status
3051
+ [END_MACRO]
3052
+
3053
+ [MACRO] PATH_BUF_READ_FILE_BASE64 %out_status, %out_buffer, %path_buf, %max_bytes
3054
+ EXPAND PATH_BUF_AS_PATH __pb_read_b64_view_%out_status, %path_buf
3055
+ EXPAND PATH_READ_FILE_BASE64 %out_status, %out_buffer, __pb_read_b64_view_%out_status, %max_bytes
3056
+ !__pb_read_b64_view_%out_status
3057
+ [END_MACRO]
3058
+
3059
+ [MACRO] PATH_BUF_WRITE_FILE_BASE64 %out_status, %path_buf, %buf, %len
3060
+ EXPAND PATH_BUF_AS_PATH __pb_write_b64_view_%out_status, %path_buf
3061
+ EXPAND PATH_WRITE_FILE_BASE64 %out_status, __pb_write_b64_view_%out_status, %buf, %len
3062
+ !__pb_write_b64_view_%out_status
3063
+ [END_MACRO]
3064
+
3065
+
3066
+ // Path slice facades over FS unix ownership / chroot / mkfifo helpers.
3067
+
3068
+ [MACRO] PATH_CHOWN %out_status, %path_slice, %uid, %gid, %has_uid, %has_gid
3069
+ __path_chown_ptr_%out_status = load %path_slice+Slice_ptr as ptr
3070
+ __path_chown_len_%out_status = load %path_slice+Slice_len as u64
3071
+ EXPAND FS_UNIX_CHOWN %out_status, __path_chown_ptr_%out_status, __path_chown_len_%out_status, %uid, %gid, %has_uid, %has_gid
3072
+ !__path_chown_len_%out_status
3073
+ !__path_chown_ptr_%out_status
3074
+ [END_MACRO]
3075
+
3076
+ [MACRO] PATH_LCHOWN %out_status, %path_slice, %uid, %gid, %has_uid, %has_gid
3077
+ __path_lchown_ptr_%out_status = load %path_slice+Slice_ptr as ptr
3078
+ __path_lchown_len_%out_status = load %path_slice+Slice_len as u64
3079
+ EXPAND FS_UNIX_LCHOWN %out_status, __path_lchown_ptr_%out_status, __path_lchown_len_%out_status, %uid, %gid, %has_uid, %has_gid
3080
+ !__path_lchown_len_%out_status
3081
+ !__path_lchown_ptr_%out_status
3082
+ [END_MACRO]
3083
+
3084
+ [MACRO] PATH_CHROOT %out_status, %path_slice
3085
+ __path_chroot_ptr_%out_status = load %path_slice+Slice_ptr as ptr
3086
+ __path_chroot_len_%out_status = load %path_slice+Slice_len as u64
3087
+ EXPAND FS_UNIX_CHROOT %out_status, __path_chroot_ptr_%out_status, __path_chroot_len_%out_status
3088
+ !__path_chroot_len_%out_status
3089
+ !__path_chroot_ptr_%out_status
3090
+ [END_MACRO]
3091
+
3092
+ [MACRO] PATH_MKFIFO %out_status, %path_slice, %mode
3093
+ __path_mkfifo_ptr_%out_status = load %path_slice+Slice_ptr as ptr
3094
+ __path_mkfifo_len_%out_status = load %path_slice+Slice_len as u64
3095
+ EXPAND FS_UNIX_MKFIFO %out_status, __path_mkfifo_ptr_%out_status, __path_mkfifo_len_%out_status, %mode
3096
+ !__path_mkfifo_len_%out_status
3097
+ !__path_mkfifo_ptr_%out_status
3098
+ [END_MACRO]
3099
+
3100
+ [MACRO] PATH_MAKE_DIR %out_status, %path_slice
3101
+ __path_make_dir_ptr_%out_status = load %path_slice+Slice_ptr as ptr
3102
+ __path_make_dir_len_%out_status = load %path_slice+Slice_len as u64
3103
+ EXPAND FS_MAKE_DIR %out_status, __path_make_dir_ptr_%out_status, __path_make_dir_len_%out_status
3104
+ !__path_make_dir_len_%out_status
3105
+ !__path_make_dir_ptr_%out_status
3106
+ [END_MACRO]
3107
+
3108
+ [MACRO] PATH_MAKE_DIR_WITH_MODE %out_status, %path_slice, %mode
3109
+ __path_make_dir_mode_ptr_%out_status = load %path_slice+Slice_ptr as ptr
3110
+ __path_make_dir_mode_len_%out_status = load %path_slice+Slice_len as u64
3111
+ EXPAND FS_MAKE_DIR_MODE %out_status, __path_make_dir_mode_ptr_%out_status, __path_make_dir_mode_len_%out_status, %mode
3112
+ !__path_make_dir_mode_len_%out_status
3113
+ !__path_make_dir_mode_ptr_%out_status
3114
+ [END_MACRO]
3115
+
3116
+ [MACRO] PATH_BUF_CHOWN %out_status, %path_buf, %uid, %gid, %has_uid, %has_gid
3117
+ EXPAND PATH_BUF_AS_PATH __pb_chown_view_%out_status, %path_buf
3118
+ EXPAND PATH_CHOWN %out_status, __pb_chown_view_%out_status, %uid, %gid, %has_uid, %has_gid
3119
+ !__pb_chown_view_%out_status
3120
+ [END_MACRO]
3121
+
3122
+ [MACRO] PATH_BUF_LCHOWN %out_status, %path_buf, %uid, %gid, %has_uid, %has_gid
3123
+ EXPAND PATH_BUF_AS_PATH __pb_lchown_view_%out_status, %path_buf
3124
+ EXPAND PATH_LCHOWN %out_status, __pb_lchown_view_%out_status, %uid, %gid, %has_uid, %has_gid
3125
+ !__pb_lchown_view_%out_status
3126
+ [END_MACRO]
3127
+
3128
+ [MACRO] PATH_BUF_CHROOT %out_status, %path_buf
3129
+ EXPAND PATH_BUF_AS_PATH __pb_chroot_view_%out_status, %path_buf
3130
+ EXPAND PATH_CHROOT %out_status, __pb_chroot_view_%out_status
3131
+ !__pb_chroot_view_%out_status
3132
+ [END_MACRO]
3133
+
3134
+ [MACRO] PATH_BUF_MKFIFO %out_status, %path_buf, %mode
3135
+ EXPAND PATH_BUF_AS_PATH __pb_mkfifo_view_%out_status, %path_buf
3136
+ EXPAND PATH_MKFIFO %out_status, __pb_mkfifo_view_%out_status, %mode
3137
+ !__pb_mkfifo_view_%out_status
3138
+ [END_MACRO]
3139
+
3140
+ [MACRO] PATH_BUF_MAKE_DIR %out_status, %path_buf
3141
+ EXPAND PATH_BUF_AS_PATH __pb_make_dir_view_%out_status, %path_buf
3142
+ EXPAND PATH_MAKE_DIR %out_status, __pb_make_dir_view_%out_status
3143
+ !__pb_make_dir_view_%out_status
3144
+ [END_MACRO]
3145
+
3146
+ [MACRO] PATH_BUF_MAKE_DIR_WITH_MODE %out_status, %path_buf, %mode
3147
+ EXPAND PATH_BUF_AS_PATH __pb_make_dir_mode_view_%out_status, %path_buf
3148
+ EXPAND PATH_MAKE_DIR_WITH_MODE %out_status, __pb_make_dir_mode_view_%out_status, %mode
3149
+ !__pb_make_dir_mode_view_%out_status
3150
+ [END_MACRO]
3151
+
3152
+ [MACRO] PATH_READ_FILE_BYTES %out_status, %out_buffer, %path_slice, %max_bytes
3153
+ EXPAND PATH_READ_FILE %out_status, %out_buffer, %path_slice, %max_bytes
3154
+ [END_MACRO]
3155
+
3156
+ [MACRO] PATH_WRITE_FILE_BYTES %out_status, %path_slice, %buf, %len
3157
+ EXPAND PATH_WRITE_FILE %out_status, %path_slice, %buf, %len
3158
+ [END_MACRO]
3159
+
3160
+ [MACRO] PATH_READ_TO_STRING_BYTES %out_status, %out_buffer, %path_slice, %max_bytes
3161
+ EXPAND PATH_READ_TO_STRING %out_status, %out_buffer, %path_slice, %max_bytes
3162
+ [END_MACRO]
3163
+
3164
+ [MACRO] PATH_BUF_READ_FILE_BYTES %out_status, %out_buffer, %path_buf, %max_bytes
3165
+ EXPAND PATH_BUF_READ_FILE %out_status, %out_buffer, %path_buf, %max_bytes
3166
+ [END_MACRO]
3167
+
3168
+ [MACRO] PATH_BUF_WRITE_FILE_BYTES %out_status, %path_buf, %buf, %len
3169
+ EXPAND PATH_BUF_WRITE_FILE %out_status, %path_buf, %buf, %len
3170
+ [END_MACRO]