@shd101wyy/yo 0.0.2

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 (339) hide show
  1. package/LICENSE.md +17 -0
  2. package/README.md +80 -0
  3. package/out/cjs/index.cjs +51 -0
  4. package/out/cjs/yo-cli.cjs +2158 -0
  5. package/out/esm/index.mjs +51 -0
  6. package/out/types/src/codegen/async/runtime.d.ts +2 -0
  7. package/out/types/src/codegen/async/state-code-gen.d.ts +10 -0
  8. package/out/types/src/codegen/async/state-machine.d.ts +13 -0
  9. package/out/types/src/codegen/c/collection.d.ts +3 -0
  10. package/out/types/src/codegen/codegen-c.d.ts +12 -0
  11. package/out/types/src/codegen/constants.d.ts +3 -0
  12. package/out/types/src/codegen/expressions/array.d.ts +4 -0
  13. package/out/types/src/codegen/expressions/generation.d.ts +11 -0
  14. package/out/types/src/codegen/expressions/index.d.ts +2 -0
  15. package/out/types/src/codegen/functions/collection.d.ts +5 -0
  16. package/out/types/src/codegen/functions/context.d.ts +57 -0
  17. package/out/types/src/codegen/functions/generation.d.ts +25 -0
  18. package/out/types/src/codegen/functions/index.d.ts +2 -0
  19. package/out/types/src/codegen/index.d.ts +20 -0
  20. package/out/types/src/codegen/parallelism/runtime.d.ts +2 -0
  21. package/out/types/src/codegen/types/collection.d.ts +8 -0
  22. package/out/types/src/codegen/types/generation.d.ts +13 -0
  23. package/out/types/src/codegen/types/index.d.ts +2 -0
  24. package/out/types/src/codegen/utils/fixup.d.ts +2 -0
  25. package/out/types/src/codegen/utils/index.d.ts +77 -0
  26. package/out/types/src/codegen/values/index.d.ts +1 -0
  27. package/out/types/src/emitter.d.ts +11 -0
  28. package/out/types/src/env.d.ts +85 -0
  29. package/out/types/src/error.d.ts +45 -0
  30. package/out/types/src/evaluator/async/await-analysis-types.d.ts +23 -0
  31. package/out/types/src/evaluator/async/await-analysis.d.ts +5 -0
  32. package/out/types/src/evaluator/builtins/alignof.d.ts +8 -0
  33. package/out/types/src/evaluator/builtins/and_or.d.ts +8 -0
  34. package/out/types/src/evaluator/builtins/arc_fns.d.ts +58 -0
  35. package/out/types/src/evaluator/builtins/array_fns.d.ts +0 -0
  36. package/out/types/src/evaluator/builtins/as.d.ts +8 -0
  37. package/out/types/src/evaluator/builtins/async_fns.d.ts +8 -0
  38. package/out/types/src/evaluator/builtins/compt_assert.d.ts +8 -0
  39. package/out/types/src/evaluator/builtins/compt_boolean_fns.d.ts +8 -0
  40. package/out/types/src/evaluator/builtins/compt_expect_error.d.ts +8 -0
  41. package/out/types/src/evaluator/builtins/compt_list_fns.d.ts +33 -0
  42. package/out/types/src/evaluator/builtins/compt_print.d.ts +8 -0
  43. package/out/types/src/evaluator/builtins/compt_string_fns.d.ts +8 -0
  44. package/out/types/src/evaluator/builtins/consume.d.ts +8 -0
  45. package/out/types/src/evaluator/builtins/drop.d.ts +8 -0
  46. package/out/types/src/evaluator/builtins/dup.d.ts +8 -0
  47. package/out/types/src/evaluator/builtins/expr_fns.d.ts +33 -0
  48. package/out/types/src/evaluator/builtins/future_fns.d.ts +8 -0
  49. package/out/types/src/evaluator/builtins/gc.d.ts +8 -0
  50. package/out/types/src/evaluator/builtins/gensym.d.ts +8 -0
  51. package/out/types/src/evaluator/builtins/impl_constraint.d.ts +8 -0
  52. package/out/types/src/evaluator/builtins/macro_expand.d.ts +8 -0
  53. package/out/types/src/evaluator/builtins/numeric_fns.d.ts +8 -0
  54. package/out/types/src/evaluator/builtins/panic.d.ts +8 -0
  55. package/out/types/src/evaluator/builtins/ptr_fns.d.ts +8 -0
  56. package/out/types/src/evaluator/builtins/quote.d.ts +13 -0
  57. package/out/types/src/evaluator/builtins/rc.d.ts +8 -0
  58. package/out/types/src/evaluator/builtins/sizeof.d.ts +8 -0
  59. package/out/types/src/evaluator/builtins/the.d.ts +8 -0
  60. package/out/types/src/evaluator/builtins/type_fns.d.ts +28 -0
  61. package/out/types/src/evaluator/builtins/va_start.d.ts +8 -0
  62. package/out/types/src/evaluator/builtins/var_fns.d.ts +18 -0
  63. package/out/types/src/evaluator/calls/array.d.ts +13 -0
  64. package/out/types/src/evaluator/calls/array_type.d.ts +11 -0
  65. package/out/types/src/evaluator/calls/closure_type.d.ts +11 -0
  66. package/out/types/src/evaluator/calls/compt_function.d.ts +19 -0
  67. package/out/types/src/evaluator/calls/compt_list_type.d.ts +11 -0
  68. package/out/types/src/evaluator/calls/function.d.ts +16 -0
  69. package/out/types/src/evaluator/calls/function_type.d.ts +15 -0
  70. package/out/types/src/evaluator/calls/helper.d.ts +42 -0
  71. package/out/types/src/evaluator/calls/iso.d.ts +15 -0
  72. package/out/types/src/evaluator/calls/module_type.d.ts +11 -0
  73. package/out/types/src/evaluator/calls/numeric_type.d.ts +15 -0
  74. package/out/types/src/evaluator/calls/pointer.d.ts +8 -0
  75. package/out/types/src/evaluator/calls/pointer_type.d.ts +14 -0
  76. package/out/types/src/evaluator/calls/type.d.ts +12 -0
  77. package/out/types/src/evaluator/context.d.ts +169 -0
  78. package/out/types/src/evaluator/exprs/_expr.d.ts +8 -0
  79. package/out/types/src/evaluator/exprs/assignment.d.ts +9 -0
  80. package/out/types/src/evaluator/exprs/begin.d.ts +10 -0
  81. package/out/types/src/evaluator/exprs/binding.d.ts +12 -0
  82. package/out/types/src/evaluator/exprs/c_include.d.ts +8 -0
  83. package/out/types/src/evaluator/exprs/cond.d.ts +8 -0
  84. package/out/types/src/evaluator/exprs/destructuring_assignment.d.ts +33 -0
  85. package/out/types/src/evaluator/exprs/exists.d.ts +0 -0
  86. package/out/types/src/evaluator/exprs/expr.d.ts +9 -0
  87. package/out/types/src/evaluator/exprs/extern.d.ts +8 -0
  88. package/out/types/src/evaluator/exprs/identifer_and_operator.d.ts +9 -0
  89. package/out/types/src/evaluator/exprs/import.d.ts +9 -0
  90. package/out/types/src/evaluator/exprs/initialization_assignment.d.ts +8 -0
  91. package/out/types/src/evaluator/exprs/match.d.ts +8 -0
  92. package/out/types/src/evaluator/exprs/open.d.ts +8 -0
  93. package/out/types/src/evaluator/exprs/property_access.d.ts +8 -0
  94. package/out/types/src/evaluator/exprs/recur.d.ts +8 -0
  95. package/out/types/src/evaluator/exprs/subtype_of.d.ts +21 -0
  96. package/out/types/src/evaluator/exprs/test.d.ts +8 -0
  97. package/out/types/src/evaluator/exprs/typeof.d.ts +8 -0
  98. package/out/types/src/evaluator/exprs/while.d.ts +8 -0
  99. package/out/types/src/evaluator/index.d.ts +26 -0
  100. package/out/types/src/evaluator/types/array.d.ts +8 -0
  101. package/out/types/src/evaluator/types/closure.d.ts +8 -0
  102. package/out/types/src/evaluator/types/compt_list.d.ts +8 -0
  103. package/out/types/src/evaluator/types/concrete_module.d.ts +8 -0
  104. package/out/types/src/evaluator/types/dyn.d.ts +8 -0
  105. package/out/types/src/evaluator/types/enum.d.ts +8 -0
  106. package/out/types/src/evaluator/types/expr_synthesizer.d.ts +14 -0
  107. package/out/types/src/evaluator/types/field.d.ts +14 -0
  108. package/out/types/src/evaluator/types/fn_module.d.ts +8 -0
  109. package/out/types/src/evaluator/types/function.d.ts +58 -0
  110. package/out/types/src/evaluator/types/future_module.d.ts +8 -0
  111. package/out/types/src/evaluator/types/module.d.ts +19 -0
  112. package/out/types/src/evaluator/types/newtype.d.ts +8 -0
  113. package/out/types/src/evaluator/types/object.d.ts +8 -0
  114. package/out/types/src/evaluator/types/proofs.d.ts +0 -0
  115. package/out/types/src/evaluator/types/slice.d.ts +8 -0
  116. package/out/types/src/evaluator/types/struct.d.ts +8 -0
  117. package/out/types/src/evaluator/types/synthesizer.d.ts +16 -0
  118. package/out/types/src/evaluator/types/tuple.d.ts +18 -0
  119. package/out/types/src/evaluator/types/union.d.ts +8 -0
  120. package/out/types/src/evaluator/types/utils.d.ts +71 -0
  121. package/out/types/src/evaluator/types/validation.d.ts +3 -0
  122. package/out/types/src/evaluator/utils/array-utils.d.ts +15 -0
  123. package/out/types/src/evaluator/utils/closure.d.ts +35 -0
  124. package/out/types/src/evaluator/utils.d.ts +4 -0
  125. package/out/types/src/evaluator/values/anonymous_function.d.ts +8 -0
  126. package/out/types/src/evaluator/values/anonymous_module.d.ts +17 -0
  127. package/out/types/src/evaluator/values/anonymous_struct.d.ts +8 -0
  128. package/out/types/src/evaluator/values/array.d.ts +8 -0
  129. package/out/types/src/evaluator/values/boolean.d.ts +3 -0
  130. package/out/types/src/evaluator/values/char.d.ts +3 -0
  131. package/out/types/src/evaluator/values/compt_list.d.ts +8 -0
  132. package/out/types/src/evaluator/values/dyn.d.ts +8 -0
  133. package/out/types/src/evaluator/values/float.d.ts +4 -0
  134. package/out/types/src/evaluator/values/integer.d.ts +4 -0
  135. package/out/types/src/evaluator/values/module.d.ts +58 -0
  136. package/out/types/src/evaluator/values/string.d.ts +3 -0
  137. package/out/types/src/evaluator/values/tuple.d.ts +32 -0
  138. package/out/types/src/expr.d.ts +456 -0
  139. package/out/types/src/function-value.d.ts +42 -0
  140. package/out/types/src/index.d.ts +4 -0
  141. package/out/types/src/lexer.d.ts +2 -0
  142. package/out/types/src/logger.d.ts +1 -0
  143. package/out/types/src/module-manager.d.ts +30 -0
  144. package/out/types/src/naming-checker.d.ts +4 -0
  145. package/out/types/src/parser.d.ts +33 -0
  146. package/out/types/src/test-runner.d.ts +30 -0
  147. package/out/types/src/tests/codegen.test.d.ts +1 -0
  148. package/out/types/src/tests/fixme.test.d.ts +1 -0
  149. package/out/types/src/tests/module-manager.test.d.ts +1 -0
  150. package/out/types/src/tests/parser.test.d.ts +1 -0
  151. package/out/types/src/tests/sample.test.d.ts +0 -0
  152. package/out/types/src/tests/std.test.d.ts +1 -0
  153. package/out/types/src/token.d.ts +40 -0
  154. package/out/types/src/type-value.d.ts +7 -0
  155. package/out/types/src/types/compatibility.d.ts +16 -0
  156. package/out/types/src/types/creators.d.ts +73 -0
  157. package/out/types/src/types/definitions.d.ts +218 -0
  158. package/out/types/src/types/guards.d.ts +70 -0
  159. package/out/types/src/types/hierarchy.d.ts +4 -0
  160. package/out/types/src/types/index.d.ts +7 -0
  161. package/out/types/src/types/module_field.d.ts +2 -0
  162. package/out/types/src/types/tags.d.ts +45 -0
  163. package/out/types/src/types/utils.d.ts +50 -0
  164. package/out/types/src/unit-value.d.ts +7 -0
  165. package/out/types/src/utils.d.ts +6 -0
  166. package/out/types/src/value-tag.d.ts +29 -0
  167. package/out/types/src/value.d.ts +110 -0
  168. package/out/types/src/yo-cli.d.ts +1 -0
  169. package/out/types/tsconfig.tsbuildinfo +1 -0
  170. package/package.json +57 -0
  171. package/scripts/check-liburing.js +76 -0
  172. package/std/alg/hash.yo +50 -0
  173. package/std/allocator.yo +113 -0
  174. package/std/allocators/c_allocator.yo +118 -0
  175. package/std/async.yo +13 -0
  176. package/std/collections/array_list.yo +415 -0
  177. package/std/collections/hash_map.yo +482 -0
  178. package/std/collections/hash_set.yo +706 -0
  179. package/std/collections/index.yo +11 -0
  180. package/std/collections/linked_list.yo +439 -0
  181. package/std/error.yo +0 -0
  182. package/std/gc.yo +10 -0
  183. package/std/index.yo +12 -0
  184. package/std/io/file.yo +191 -0
  185. package/std/io/index.yo +5 -0
  186. package/std/libc/assert.yo +39 -0
  187. package/std/libc/ctype.yo +57 -0
  188. package/std/libc/errno.yo +182 -0
  189. package/std/libc/float.yo +87 -0
  190. package/std/libc/index.yo +29 -0
  191. package/std/libc/limits.yo +65 -0
  192. package/std/libc/math.yo +679 -0
  193. package/std/libc/signal.yo +101 -0
  194. package/std/libc/stdatomic.yo +213 -0
  195. package/std/libc/stdint.yo +214 -0
  196. package/std/libc/stdio.yo +225 -0
  197. package/std/libc/stdlib.yo +204 -0
  198. package/std/libc/string.yo +151 -0
  199. package/std/libc/time.yo +92 -0
  200. package/std/libc/unistd.yo +130 -0
  201. package/std/monad.yo +152 -0
  202. package/std/prelude.yo +3094 -0
  203. package/std/string/index.yo +8 -0
  204. package/std/string/rune.yo +82 -0
  205. package/std/string/string.yo +288 -0
  206. package/std/sync.yo +95 -0
  207. package/std/thread.yo +36 -0
  208. package/std/time.yo +13 -0
  209. package/std/worker.yo +36 -0
  210. package/vendor/mimalloc/.gitattributes +12 -0
  211. package/vendor/mimalloc/CMakeLists.txt +763 -0
  212. package/vendor/mimalloc/LICENSE +21 -0
  213. package/vendor/mimalloc/SECURITY.md +41 -0
  214. package/vendor/mimalloc/azure-pipelines.yml +251 -0
  215. package/vendor/mimalloc/bin/mimalloc-redirect-arm64.dll +0 -0
  216. package/vendor/mimalloc/bin/mimalloc-redirect-arm64.lib +0 -0
  217. package/vendor/mimalloc/bin/mimalloc-redirect-arm64ec.dll +0 -0
  218. package/vendor/mimalloc/bin/mimalloc-redirect-arm64ec.lib +0 -0
  219. package/vendor/mimalloc/bin/mimalloc-redirect.dll +0 -0
  220. package/vendor/mimalloc/bin/mimalloc-redirect.lib +0 -0
  221. package/vendor/mimalloc/bin/mimalloc-redirect32.dll +0 -0
  222. package/vendor/mimalloc/bin/mimalloc-redirect32.lib +0 -0
  223. package/vendor/mimalloc/bin/minject-arm64.exe +0 -0
  224. package/vendor/mimalloc/bin/minject.exe +0 -0
  225. package/vendor/mimalloc/bin/minject32.exe +0 -0
  226. package/vendor/mimalloc/bin/readme.md +118 -0
  227. package/vendor/mimalloc/cmake/JoinPaths.cmake +23 -0
  228. package/vendor/mimalloc/cmake/mimalloc-config-version.cmake +19 -0
  229. package/vendor/mimalloc/cmake/mimalloc-config.cmake +14 -0
  230. package/vendor/mimalloc/contrib/docker/alpine/Dockerfile +23 -0
  231. package/vendor/mimalloc/contrib/docker/alpine-arm32v7/Dockerfile +28 -0
  232. package/vendor/mimalloc/contrib/docker/alpine-x86/Dockerfile +28 -0
  233. package/vendor/mimalloc/contrib/docker/manylinux-x64/Dockerfile +23 -0
  234. package/vendor/mimalloc/contrib/docker/readme.md +10 -0
  235. package/vendor/mimalloc/contrib/vcpkg/portfile.cmake +64 -0
  236. package/vendor/mimalloc/contrib/vcpkg/readme.md +40 -0
  237. package/vendor/mimalloc/contrib/vcpkg/usage +20 -0
  238. package/vendor/mimalloc/contrib/vcpkg/vcpkg-cmake-wrapper.cmake +20 -0
  239. package/vendor/mimalloc/contrib/vcpkg/vcpkg.json +48 -0
  240. package/vendor/mimalloc/doc/bench-2020/bench-c5-18xlarge-2020-01-20-a.svg +887 -0
  241. package/vendor/mimalloc/doc/bench-2020/bench-c5-18xlarge-2020-01-20-b.svg +1185 -0
  242. package/vendor/mimalloc/doc/bench-2020/bench-c5-18xlarge-2020-01-20-rss-a.svg +757 -0
  243. package/vendor/mimalloc/doc/bench-2020/bench-c5-18xlarge-2020-01-20-rss-b.svg +1028 -0
  244. package/vendor/mimalloc/doc/bench-2020/bench-r5a-1.svg +769 -0
  245. package/vendor/mimalloc/doc/bench-2020/bench-r5a-12xlarge-2020-01-16-a.svg +868 -0
  246. package/vendor/mimalloc/doc/bench-2020/bench-r5a-12xlarge-2020-01-16-b.svg +1157 -0
  247. package/vendor/mimalloc/doc/bench-2020/bench-r5a-2.svg +983 -0
  248. package/vendor/mimalloc/doc/bench-2020/bench-r5a-rss-1.svg +683 -0
  249. package/vendor/mimalloc/doc/bench-2020/bench-r5a-rss-2.svg +854 -0
  250. package/vendor/mimalloc/doc/bench-2020/bench-spec-rss.svg +713 -0
  251. package/vendor/mimalloc/doc/bench-2020/bench-spec.svg +713 -0
  252. package/vendor/mimalloc/doc/bench-2020/bench-z4-1.svg +890 -0
  253. package/vendor/mimalloc/doc/bench-2020/bench-z4-2.svg +1146 -0
  254. package/vendor/mimalloc/doc/bench-2020/bench-z4-rss-1.svg +796 -0
  255. package/vendor/mimalloc/doc/bench-2020/bench-z4-rss-2.svg +974 -0
  256. package/vendor/mimalloc/doc/bench-2021/bench-amd5950x-2021-01-30-a.svg +952 -0
  257. package/vendor/mimalloc/doc/bench-2021/bench-amd5950x-2021-01-30-b.svg +1255 -0
  258. package/vendor/mimalloc/doc/bench-2021/bench-c5-18xlarge-2021-01-30-a.svg +955 -0
  259. package/vendor/mimalloc/doc/bench-2021/bench-c5-18xlarge-2021-01-30-b.svg +1269 -0
  260. package/vendor/mimalloc/doc/bench-2021/bench-c5-18xlarge-2021-01-30-rss-a.svg +836 -0
  261. package/vendor/mimalloc/doc/bench-2021/bench-c5-18xlarge-2021-01-30-rss-b.svg +1131 -0
  262. package/vendor/mimalloc/doc/bench-2021/bench-macmini-2021-01-30.svg +766 -0
  263. package/vendor/mimalloc/doc/doxyfile +2895 -0
  264. package/vendor/mimalloc/doc/ds-logo.jpg +0 -0
  265. package/vendor/mimalloc/doc/ds-logo.png +0 -0
  266. package/vendor/mimalloc/doc/mimalloc-doc.h +1452 -0
  267. package/vendor/mimalloc/doc/mimalloc-doxygen.css +60 -0
  268. package/vendor/mimalloc/doc/mimalloc-logo-100.png +0 -0
  269. package/vendor/mimalloc/doc/mimalloc-logo.png +0 -0
  270. package/vendor/mimalloc/doc/mimalloc-logo.svg +161 -0
  271. package/vendor/mimalloc/doc/spades-logo.png +0 -0
  272. package/vendor/mimalloc/doc/unreal-logo.svg +43 -0
  273. package/vendor/mimalloc/ide/vs2022/mimalloc-lib.vcxproj +500 -0
  274. package/vendor/mimalloc/ide/vs2022/mimalloc-lib.vcxproj.filters +108 -0
  275. package/vendor/mimalloc/ide/vs2022/mimalloc-override-dll.vcxproj +508 -0
  276. package/vendor/mimalloc/ide/vs2022/mimalloc-override-dll.vcxproj.filters +111 -0
  277. package/vendor/mimalloc/ide/vs2022/mimalloc-override-test-dep.vcxproj +355 -0
  278. package/vendor/mimalloc/ide/vs2022/mimalloc-override-test.vcxproj +360 -0
  279. package/vendor/mimalloc/ide/vs2022/mimalloc-test-api.vcxproj +295 -0
  280. package/vendor/mimalloc/ide/vs2022/mimalloc-test-stress.vcxproj +292 -0
  281. package/vendor/mimalloc/ide/vs2022/mimalloc-test.vcxproj +289 -0
  282. package/vendor/mimalloc/ide/vs2022/mimalloc.sln +151 -0
  283. package/vendor/mimalloc/include/mimalloc/atomic.h +557 -0
  284. package/vendor/mimalloc/include/mimalloc/internal.h +1153 -0
  285. package/vendor/mimalloc/include/mimalloc/prim.h +421 -0
  286. package/vendor/mimalloc/include/mimalloc/track.h +145 -0
  287. package/vendor/mimalloc/include/mimalloc/types.h +685 -0
  288. package/vendor/mimalloc/include/mimalloc-new-delete.h +66 -0
  289. package/vendor/mimalloc/include/mimalloc-override.h +68 -0
  290. package/vendor/mimalloc/include/mimalloc-stats.h +103 -0
  291. package/vendor/mimalloc/include/mimalloc.h +612 -0
  292. package/vendor/mimalloc/mimalloc.pc.in +11 -0
  293. package/vendor/mimalloc/readme.md +946 -0
  294. package/vendor/mimalloc/src/alloc-aligned.c +360 -0
  295. package/vendor/mimalloc/src/alloc-override.c +316 -0
  296. package/vendor/mimalloc/src/alloc-posix.c +185 -0
  297. package/vendor/mimalloc/src/alloc.c +692 -0
  298. package/vendor/mimalloc/src/arena-abandon.c +346 -0
  299. package/vendor/mimalloc/src/arena.c +1043 -0
  300. package/vendor/mimalloc/src/bitmap.c +441 -0
  301. package/vendor/mimalloc/src/bitmap.h +119 -0
  302. package/vendor/mimalloc/src/free.c +572 -0
  303. package/vendor/mimalloc/src/heap.c +733 -0
  304. package/vendor/mimalloc/src/init.c +714 -0
  305. package/vendor/mimalloc/src/libc.c +334 -0
  306. package/vendor/mimalloc/src/options.c +663 -0
  307. package/vendor/mimalloc/src/os.c +770 -0
  308. package/vendor/mimalloc/src/page-queue.c +390 -0
  309. package/vendor/mimalloc/src/page.c +1049 -0
  310. package/vendor/mimalloc/src/prim/emscripten/prim.c +249 -0
  311. package/vendor/mimalloc/src/prim/osx/alloc-override-zone.c +461 -0
  312. package/vendor/mimalloc/src/prim/osx/prim.c +9 -0
  313. package/vendor/mimalloc/src/prim/prim.c +76 -0
  314. package/vendor/mimalloc/src/prim/readme.md +9 -0
  315. package/vendor/mimalloc/src/prim/unix/prim.c +934 -0
  316. package/vendor/mimalloc/src/prim/wasi/prim.c +284 -0
  317. package/vendor/mimalloc/src/prim/windows/etw-mimalloc.wprp +61 -0
  318. package/vendor/mimalloc/src/prim/windows/etw.h +905 -0
  319. package/vendor/mimalloc/src/prim/windows/etw.man +0 -0
  320. package/vendor/mimalloc/src/prim/windows/prim.c +878 -0
  321. package/vendor/mimalloc/src/prim/windows/readme.md +17 -0
  322. package/vendor/mimalloc/src/random.c +258 -0
  323. package/vendor/mimalloc/src/segment-map.c +142 -0
  324. package/vendor/mimalloc/src/segment.c +1702 -0
  325. package/vendor/mimalloc/src/static.c +41 -0
  326. package/vendor/mimalloc/src/stats.c +635 -0
  327. package/vendor/mimalloc/test/CMakeLists.txt +56 -0
  328. package/vendor/mimalloc/test/main-override-dep.cpp +51 -0
  329. package/vendor/mimalloc/test/main-override-dep.h +11 -0
  330. package/vendor/mimalloc/test/main-override-static.c +539 -0
  331. package/vendor/mimalloc/test/main-override.c +36 -0
  332. package/vendor/mimalloc/test/main-override.cpp +497 -0
  333. package/vendor/mimalloc/test/main.c +46 -0
  334. package/vendor/mimalloc/test/readme.md +16 -0
  335. package/vendor/mimalloc/test/test-api-fill.c +343 -0
  336. package/vendor/mimalloc/test/test-api.c +466 -0
  337. package/vendor/mimalloc/test/test-stress.c +428 -0
  338. package/vendor/mimalloc/test/test-wrong.c +92 -0
  339. package/vendor/mimalloc/test/testhelper.h +49 -0
@@ -0,0 +1,2158 @@
1
+ var Vf=Object.create;var Ul=Object.defineProperty;var xf=Object.getOwnPropertyDescriptor;var Mf=Object.getOwnPropertyNames;var Sf=Object.getPrototypeOf,Lf=Object.prototype.hasOwnProperty;var Af=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Mf(t))!Lf.call(e,o)&&o!==n&&Ul(e,o,{get:()=>t[o],enumerable:!(r=xf(t,o))||r.enumerable});return e};var Kn=(e,t,n)=>(n=e!=null?Vf(Sf(e)):{},Af(t||!e||!e.__esModule?Ul(n,"default",{value:e,enumerable:!0}):n,e));var Ea=Kn(require("fs")),kf=Kn(require("yargs")),bf=require("yargs/helpers");var Bl={name:"@shd101wyy/yo",displayName:"Yo",version:"0.0.1",main:"./out/cjs/index.cjs",module:"./out/esm/index.mjs",types:"./out/types/src/index.d.ts",bin:{yo:"./out/cjs/yo-cli.cjs","yo-cli":"./out/cjs/yo-cli.cjs"},files:["out","scripts","vendor","std"],repository:"https://github.com/shd101wyy/yo",author:"Yiyi Wang <shd101wyy@gmail.com>",license:"NCSA",keywords:["yo","language","compiler","vscode-extension"],scripts:{"build:esbuild":"bun run build.js","build:typings":"tsc --project . --declaration",build:"bun run build:esbuild && bun run build:typings",dev:"bun run build.js --watch",format:'prettier --write "**/*.*"',test:"jest","test:watch":"jest --watch","test:coverage":"jest --coverage",postinstall:"node scripts/check-liburing.js"},dependencies:{yargs:"^17.7.2"},devDependencies:{"@types/jest":"^29.5.11","@types/node":"^20.10.5","@types/yargs":"^17.0.32","@typescript-eslint/eslint-plugin":"^6.8.0","@typescript-eslint/parser":"^6.8.0",esbuild:"^0.20.0","esbuild-plugin-polyfill-node":"^0.3.0",eslint:"^8.52.0",glob:"^11.0.3",jest:"^29.7.0",prettier:"^3.0.3","prettier-plugin-packagejson":"^2.4.6","ts-jest":"^29.1.1",typescript:"^5.8.3"}};var Zo=require("child_process"),Jo=Kn(require("fs"));var hf=Kn(require("node:path"));var ei=class{constructor(){this.headers="";this.declarations="";this.code=""}emit(t,n=""){return this.code+=n+t,this.code}emitLine(t,n=""){return this.code+=n+t+`
2
+ `,this.code}emitHeaderLine(t,n=""){return this.headers+=n+t+`
3
+ `,this.headers}emitDeclarationLine(t,n=""){return this.declarations+=n+t+`
4
+ `,this.declarations}print(){return this.headers+`
5
+ `+this.declarations+`
6
+ `+this.code.trim()}};var ka=require("crypto");var ke={modulePath:"_",inputString:"_",type:"identifier",value:"_",position:{row:0,column:0,character:0}};var Ca=["=","+","-","*","/","<",">","@","$","~","&","%","|","!","?","^",".",":","\\","#"];function uo(e){return Ca.includes(e)}function Ln(e){let t=!0;for(let n=0;n<e.length;n++){let r=e[n];if(!uo(r)){t=!1;break}}return t}var ti=/^[_a-zA-Z\xA0-\uFFFF][_a-zA-Z0-9\xA0-\uFFFF]*[!?]?$/;function Pl(e,t){let n=")";if(!e[t])return-1;let r=e[t].type;if(r==="{")n="}";else if(r==="(")n=")";else if(r==="[")n="]";else throw this.formatErrorMessage(e[t],"Expected '{', '(' or '['");t=t+1;let o=1,i=-1;for(;;){let a=e[t];if(!a)return-1;if(a.type===n){if(o=o-1,o===0){i=t;break}}else a.type===r&&(o=o+1);t=t+1}return i}var Nf=0;function ht(){return`id${Nf++}`}function ni(e){return"yo"+(0,ka.createHash)("sha1").update(e).digest("hex").slice(0,8)}var Df=1;function Gl(e){return`_${ni(e)}_temp_`}function Rl(e){return`${Gl(e)}${Df++}`}function St(e,t){return t.startsWith(Gl(e))}var zl=new Map;function mr(e,t){let n="";for(let i=0;i<t.length;i++)if(uo(t[i])){let a=Ca.indexOf(t[i]);n+=`${a}`}else n+=t[i];let r=ni(e)+"_"+n,o=zl.get(r);return o===void 0?o=0:o++,zl.set(r,o),r+(o==0?"":`_${o}`)}function ba(e){return(0,ka.createHash)("sha1").update(e).digest("hex").slice(0,10)}function ql(e){for(let t in e.types){let{type:n}=e.types[t];n.cInclude&&e.cIncludes.add(n.cInclude)}for(let t in e.externFunctions){let{type:n}=e.externFunctions[t];n.cInclude&&e.cIncludes.add(n.cInclude)}}function Yl(e){e.emitter.emitHeaderLine("#ifndef _WIN32"),e.emitter.emitHeaderLine("#define _DEFAULT_SOURCE"),e.emitter.emitHeaderLine("#define _GNU_SOURCE // Needed for sched_getcpu() on Linux"),e.emitter.emitHeaderLine("#endif"),e.emitter.emitHeaderLine("");for(let t of e.cIncludes)e.emitter.emitHeaderLine(`#include ${t}`);e.emitter.emitHeaderLine(""),e.allocator==="mimalloc"?(e.emitter.emitHeaderLine("// Mimalloc compatibility layer - try mimalloc first, fallback to stdlib"),e.emitter.emitHeaderLine("#ifdef __has_include"),e.emitter.emitHeaderLine(" #if __has_include(<mimalloc.h>)"),e.emitter.emitHeaderLine(" #include <mimalloc.h>"),e.emitter.emitHeaderLine(" #define __yo_malloc mi_malloc"),e.emitter.emitHeaderLine(" #define __yo_calloc mi_calloc"),e.emitter.emitHeaderLine(" #define __yo_realloc mi_realloc"),e.emitter.emitHeaderLine(" #define __yo_free mi_free"),e.emitter.emitHeaderLine(" #define __yo_aligned_alloc mi_aligned_alloc"),e.emitter.emitHeaderLine(" #else"),e.emitter.emitHeaderLine(" #define __yo_malloc malloc"),e.emitter.emitHeaderLine(" #define __yo_calloc calloc"),e.emitter.emitHeaderLine(" #define __yo_realloc realloc"),e.emitter.emitHeaderLine(" #define __yo_free free"),e.emitter.emitHeaderLine(" #define __yo_aligned_alloc aligned_alloc"),e.emitter.emitHeaderLine(" #endif"),e.emitter.emitHeaderLine("#else"),e.emitter.emitHeaderLine(" // Fallback for older compilers without __has_include"),e.emitter.emitHeaderLine(" #define __yo_malloc malloc"),e.emitter.emitHeaderLine(" #define __yo_calloc calloc"),e.emitter.emitHeaderLine(" #define __yo_realloc realloc"),e.emitter.emitHeaderLine(" #define __yo_free free"),e.emitter.emitHeaderLine(" #define __yo_aligned_alloc aligned_alloc"),e.emitter.emitHeaderLine("#endif")):(e.emitter.emitHeaderLine("// Using libc allocator"),e.emitter.emitHeaderLine("#define __yo_malloc malloc"),e.emitter.emitHeaderLine("#define __yo_calloc calloc"),e.emitter.emitHeaderLine("#define __yo_realloc realloc"),e.emitter.emitHeaderLine("#define __yo_free free"),e.emitter.emitHeaderLine("#define __yo_aligned_alloc aligned_alloc")),e.emitter.emitHeaderLine("")}var Qn=class{constructor({characterIndex:t,message:n}){this.characterIndex=t,this.message=n}},Jt=class{constructor(t,n){this.tokenAndErrorList=[];this.tokenAndErrorList=t,this.isAssertionError=n||!1}toString(){return this.tokenAndErrorList.map(({token:n,errorMessage:r})=>`Error: ${r}
7
+ ${jl({token:n})}`).join(`
8
+
9
+ `)}};function jl({token:e}){let{position:t,modulePath:n,inputString:r}=e,{row:o,column:i}=t,s=r.split(`
10
+ `)[o];return`${n}:${o+1}:${i+1}:
11
+ ${s}
12
+ ${" ".repeat(i+Math.floor(e.value.length/2))}^`}function p({token:e,errorMessage:t,cause:n,isAssertionError:r}){let o=`${t.trim()}
13
+
14
+ ${jl({token:e})}`;return new Jt([{token:e,errorMessage:o+(n!=null&&n.message?`
15
+ `+n.message:"")}],r)}function st(e,t){if(e.length===0)throw new Error("tokenAndErrorList must not be empty");return new Jt(e,t)}var Fa;function Wl(e){Fa=e}function S({expr:e,env:t,context:n}){if(!Fa)throw new Error("Internal Error: evaluateExpression function is not set.");return Fa({expr:e,env:t,context:n})}function Hl(e,t){let n=[],r=0,o=0;for(let i=0;i<e.length;i++){let a=e[i],s=i-o,l=i,u="",d=i;if(e[d]===".")for(;e[d]===".";)u+=e[d],d=d+1;else for(;uo(e[d])&&e[d]!==".";)u+=e[d],d=d+1;if(u&&!u.startsWith("//")&&!u.startsWith("/*")){n.push({type:u==="."?".":"operator",value:u,position:{row:r,column:s,character:l},modulePath:t,inputString:e}),i=d-1;continue}switch(a){case" ":case" ":case`
16
+ `:case"\r":{let c="",f=i,m=r;for(;e[f]===" "||e[f]===" "||e[f]===`
17
+ `||e[f]==="\r";)c+=e[f],e[f]===`
18
+ `&&(r++,o=f+1),f=f+1;n.push({type:"whitespace",value:c,position:{row:m,column:s,character:l},modulePath:t,inputString:e}),i=f-1;break}case"/":if(e[i+1]==="/"){let c="",f=i;for(;e[f]!==`
19
+ `&&f<e.length;)c+=e[f],f=f+1;n.push({type:"single_line_comment",value:c,position:{row:r,column:s,character:l},modulePath:t,inputString:e}),i=f-1}else if(e[i+1]==="*"){let c=i,f="",m=r,y=1;for(f+=e[c],c++,f+=e[c],c++;y>0&&c<e.length;){if(e[c]===`
20
+ `&&(o=c+1,r++),e[c]==="/"&&e[c+1]==="*"){y++,f+="/*",c+=2;continue}if(e[c]==="*"&&e[c+1]==="/"){y--,f+="*/",c+=2;continue}f+=e[c],c++}if(y>0)throw new Qn({message:"Unterminated multi-line comment",characterIndex:e.length-1});n.push({type:"multi_line_comment",value:f,position:{row:m,column:s,character:l},modulePath:t,inputString:e}),i=c-1}else throw new Qn({message:`Unexpected character ${a}`,characterIndex:i+1});break;case"(":n.push({type:"(",value:a,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break;case")":n.push({type:")",value:a,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break;case"[":n.push({type:"[",value:a,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break;case"]":n.push({type:"]",value:a,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break;case"{":n.push({type:"{",value:a,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break;case"}":n.push({type:"}",value:a,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break;case"'":{let c="";for(let f=i+1;f<e.length;f++){if(e[f]==="\\"){c+=e[f],f=f+1,c+=e[f];continue}if(e[f]==="'"){i=f;break}c+=e[f]}if(c.length===1||c.length===2&&c[0]==="\\")n.push({type:"char",value:`'${c}'`,position:{row:r,column:s,character:l},modulePath:t,inputString:e});else throw new Qn({message:`Invalid char '${c}', expected char to have length 1.`,characterIndex:i});break}case'"':{let c="";for(let f=i+1;f<e.length;f++){if(e[f]==="\\"){c+=e[f],f=f+1,c+=e[f];continue}if(e[f]==='"'){i=f;break}c+=e[f]}n.push({type:"string",value:`"${c}"`,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break}case"`":{let c="";for(let f=i+1;f<e.length;f++){if(e[f]==="\\"){c+=e[f],f=f+1,c+=e[f];continue}if(e[f]==="`"){i=f;break}c+=e[f]}if(!ti.test(c))throw new Qn({message:`Invalid backtick identifier \`${c}\``,characterIndex:i});n.push({type:"backtick_identifier",value:`\`${c}\``,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break}case",":n.push({type:",",value:a,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break;case";":n.push({type:";",value:a,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break;default:if(/[0-9]/.test(a)){let c=i,f=a;i=i+1;let m=/[0-9_]/;for(e[i-1]==="0"&&typeof e[i]=="string"&&(e[i]==="x"||e[i]==="X"?(f+=e[i],i=i+1,m=/[0-9A-Fa-f]/):e[i]==="b"||e[i]==="B"?(f+=e[i],i=i+1,m=/[01]/):(e[i]==="o"||e[i]==="O")&&(f+=e[i],i=i+1,m=/[0-7]/));typeof e[i]=="string"&&m.test(e[i]);)f+=e[i],i=i+1;if(e[i]==="."&&e[c-1]!=="."&&(e[i+1]??"").match(/[0-9]/)){for(f+=e[i],i=i+1;typeof e[i]=="string"&&/[0-9_]/.test(e[i]);)f+=e[i],i=i+1;if((e[i]==="e"||e[i]==="E")&&typeof e[i+1]=="string"&&(e[i+1]==="+"||e[i+1]==="-"||/[0-9]/.test(e[i+1])))for(f+=e[i],i=i+1,(e[i]==="+"||e[i]==="-")&&(f+=e[i],i=i+1);typeof e[i]=="string"&&/[0-9_]/.test(e[i]);)f+=e[i],i=i+1;n.push({type:"float",value:f,position:{row:r,column:s,character:l},modulePath:t,inputString:e}),i=i-1}else{if((e[i]==="e"||e[i]==="E")&&typeof e[i+1]=="string"&&(e[i+1]==="+"||e[i+1]==="-"||/[0-9]/.test(e[i+1])))for(f+=e[i],i=i+1,(e[i]==="+"||e[i]==="-")&&(f+=e[i],i=i+1);typeof e[i]=="string"&&/[0-9_]/.test(e[i]);)f+=e[i],i=i+1;n.push({type:"integer",value:f,position:{row:r,column:s,character:l},modulePath:t,inputString:e}),i=i-1}}else if(/[_a-zA-Z\xA0-\uFFFF]/.test(a)){let c=a,f=i;for(i=i+1;typeof e[i]=="string"&&/[_a-zA-Z0-9\xA0-\uFFFF]/.test(e[i]);)c+=e[i],i=i+1;if(i=i-1,(e[i+1]==="!"||e[i+1]==="?")&&ti.test(c+e[i+1])&&(i=i+1,c+=e[i]),ti.test(c))switch(c){case"true":case"false":n.push({type:"bool",value:c,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break;default:n.push({type:"identifier",value:c,position:{row:r,column:s,character:l},modulePath:t,inputString:e});break}else throw new Qn({message:`Invalid identifier ${c}`,characterIndex:f})}else throw new Qn({message:`Unexpected character ${a}`,characterIndex:i});break}}return n}var wr=class{constructor({modulePath:t,inputString:n}){this.modulePath=t,this.inputString=n,this.tokens=Hl(n,t),this.program=[],this.parse(this.tokens)}skipWhitespace(t,n){for(;t[n]&&(t[n].type==="whitespace"||t[n].type==="single_line_comment"||t[n].type==="multi_line_comment");)n=n+1;return n}skipWhitespaceBackward(t,n){for(;t[n]&&(t[n].type==="whitespace"||t[n].type==="single_line_comment"||t[n].type==="multi_line_comment");)n=n-1;return n}isParenthesizedExpression(t,n,r){return n=this.skipWhitespace(t,n),r=this.skipWhitespaceBackward(t,r),!!t[n]&&t[n].type==="("&&!!t[r]&&t[r].type===")"&&Pl(t,n)===r}parseParenExpr({tokens:t,index:n}){var a;let r=n;if(t[n].type!=="(")throw p({token:t[n],errorMessage:"Expected left paren"});if(((a=t[n+1])==null?void 0:a.type)===")")return{expr:{tag:"FuncCall",func:{tag:"Atom",token:{type:"identifier",value:A.tuple,position:t[n].position,modulePath:this.modulePath,inputString:this.inputString}},args:[],token:t[n]},index:n+2};let o=this.parseExpression({tokens:t,index:n+1}),i=o.expr;if(n=o.index,t[n].type===")")return{expr:i,index:n+1};{let s,l=[i];for(;;){if(!t[n])throw p({token:t[n-1],errorMessage:"Expected ) or , for tuple"});if(t[n].type===","){if(!s||s===",")s=",";else throw p({token:t[n],errorMessage:'Cannot mix "," with ";" as separator in (...)'});n=n+1}else if(t[n].type===";"){if(!s||s===";")s=";";else throw p({token:t[n],errorMessage:'Cannot mix ";" with "," as separator in (...)'});n=n+1}if(n=this.skipWhitespace(t,n),t[n].type===")")break;let{expr:d,index:c}=this.parseExpression({tokens:t,index:n});l.push(d),n=c}let u=s===";"||!s;return{expr:{tag:"FuncCall",func:{tag:"Atom",token:{type:"identifier",value:u?A.Tuple[0]:A.tuple,position:t[r].position,modulePath:this.modulePath,inputString:this.inputString}},args:l,token:t[r]},index:n+1}}}parseArrayExpr({tokens:t,index:n}){let r=n;if(t[n].type!=="[")throw p({token:t[n],errorMessage:"Expected left bracket"});n=n+1;let o,i=[];for(;;){if(!t[n])throw p({token:t[n-1],errorMessage:"Expected ] or , for array"});if(t[n].type===","){if(!o||o===",")o=",";else throw p({token:t[n],errorMessage:'Cannot mix "," with ";" as separator in [...]'});n=n+1}else if(t[n].type===";"){if(!o||o===";")o=";";else throw p({token:t[n],errorMessage:'Cannot mix ";" with "," as separator in [...]'});n=n+1}if(t[n].type==="]")break;let{expr:u,index:d}=this.parseExpression({tokens:t,index:n});i.push(u),n=d}let a=o===";"||!o;if(a&&i.length>2)throw p({token:t[r],errorMessage:`Expected at 2 arguments for Array type, or 1 argument for Slice type, got ${i.length}`});let s=a&&i.length===2,l=a&&i.length===1;return{expr:{tag:"FuncCall",func:{tag:"Atom",token:{type:"identifier",value:s?A.Array[0]:l?A.Slice[0]:A.array,position:t[r].position,modulePath:this.modulePath,inputString:this.inputString}},args:i,token:t[r]},index:n+1}}parseCurlyBracketExpr({tokens:t,index:n}){let r=n;if(t[n].type!=="{")throw p({token:t[n],errorMessage:"Expected left curly bracket"});let o=[],i;for(n=n+1;;){if(n=this.skipWhitespace(t,n),!t[n])throw p({token:t[n-1],errorMessage:'Unexpected end of curly bracket. Expected "}" or "," or ";"'});if(t[n].type===","){if(!i||i===",")i=",";else throw p({token:t[n],errorMessage:'Cannot mix "," with ";" as separator in {...}'});n=n+1}else if(t[n].type===";"){if(!i||i===";")i=";";else throw p({token:t[n],errorMessage:'Cannot mix ";" with "," as separator in {...}'});n=n+1}if(n=this.skipWhitespace(t,n),t[n].type==="}"){let l=t[this.skipWhitespaceBackward(t,n-1)];if(i===";"&&l&&(l.type===";"||l.type==="{")){let u={type:"identifier",value:A.tuple,position:l.position,modulePath:this.modulePath,inputString:this.inputString};o.push({tag:"FuncCall",func:{tag:"Atom",token:u},args:[],token:u})}break}let{expr:a,index:s}=this.parseExpression({tokens:t,index:n});o.push(a),n=s}if(i===","||!i){for(let s=0;s<o.length;s++){let l=o[s];if(j(l)){let u={type:"operator",value:":",position:t[r].position,modulePath:this.modulePath,inputString:this.inputString},d={tag:"FuncCall",func:{tag:"Atom",token:u},isInfix:!0,args:[l,l],token:u};o[s]=d}}return{expr:{tag:"FuncCall",func:{tag:"Atom",token:{type:"identifier",value:"_",position:t[r].position,modulePath:this.modulePath,inputString:this.inputString}},args:o,token:t[r]},index:n+1}}else return{expr:{tag:"FuncCall",func:{tag:"Atom",token:{type:"identifier",value:A.begin[0],position:t[r].position,modulePath:this.modulePath,inputString:this.inputString}},args:o,token:t[r]},index:n+1}}parsePrimary({tokens:t,index:n}){n=this.skipWhitespace(t,n);let r=t[n];if(!r)throw p({token:ke,errorMessage:"Unexpected end of input"});let o=null;switch(r.type){case"identifier":case"operator":case"bool":case"integer":case"float":case"string":case"char":{o={expr:{tag:"Atom",token:r},index:n+1};break}case"(":{o=this.parseParenExpr({tokens:t,index:n});break}case"[":{o=this.parseArrayExpr({tokens:t,index:n});break}case"{":{o=this.parseCurlyBracketExpr({tokens:t,index:n});break}case".":{o={expr:{tag:"Atom",token:r},index:n+1};break}default:throw p({token:r,errorMessage:`Unexpected token "${r.type}"`})}return o}isOperatorAtLineStart(t,n){for(let r=t.length-1;r>=0;r--){let o=t[r];if(o.type==="whitespace"&&o.value.includes(`
21
+ `))return t.slice(r+1).every(s=>s.type==="whitespace");if(o.type!=="whitespace")return!1}return t.every(r=>r.type==="whitespace")}parseLeftAssociativeOperator({primaryExpr:t,operatorToken:n,rhs:r,tokens:o,index:i}){if(r.tag==="FuncCall"&&r.isInfix&&r.func.tag==="Atom"&&r.func.token.type!=="."){let a=r.args[0],s=r.args[1],l=r.func,u={tag:"FuncCall",func:{tag:"Atom",token:n},args:[t,a],isInfix:!0,token:n};return this.parsePrimaryEnd({primaryExpr:{tag:"FuncCall",func:l,args:[u,s],isInfix:!0,token:l.token},tokens:o,index:i})}else return this.parsePrimaryEnd({primaryExpr:{tag:"FuncCall",func:{tag:"Atom",token:n},args:[t,r],isInfix:!0,token:n},tokens:o,index:i})}getExprMinimumColumnNumber(t){return j(t)?t.token.position.column:Math.min(this.getExprMinimumColumnNumber(t.func),...t.args.map(n=>this.getExprMinimumColumnNumber(n)))}parsePrimaryEnd({primaryExpr:t,tokens:n,index:r}){var u,d,c,f,m;let o=this.skipWhitespace(n,r),i=o!==r,a=((u=n[r-1])==null?void 0:u.type)==="whitespace";r=o;let s=n[o];if(!s||s.type===";"||s.type===","||s.type===")"||s.type==="]"||s.type==="}")return{expr:t,index:r};let l=t.tag==="Atom"&&t.token.type===".";if(l||s.type==="."&&!i&&!a&&((d=n[o+1])==null?void 0:d.type)!=="whitespace"){let{expr:y,index:g}=this.parsePrimary({tokens:n,index:l?r:r+1});r=g;let h={expr:{tag:"FuncCall",func:{tag:"Atom",token:l?t.token:s},args:l?[y]:[t,y],isInfix:!l,token:l?t.token:s},index:r};for(;n[r]&&n[r].type===".";){let{expr:_,index:E}=this.parsePrimary({tokens:n,index:r+1});h={expr:{tag:"FuncCall",func:{tag:"Atom",token:s},args:[h.expr,_],isInfix:!0,token:s},index:E},r=E}return this.parsePrimaryEnd({primaryExpr:h.expr,tokens:n,index:h.index})}else if((s.type==="operator"||s.type==="."&&!i||s.type==="backtick_identifier")&&((c=n[r+1])==null?void 0:c.type)!=="("){let y=this.skipWhitespace(n,r+1),{expr:g,index:h}=this.parseExpression({tokens:n,index:y});if(g.tag==="FuncCall"&&g.isInfix&&g.func.tag==="Atom"&&g.func.token.type!=="."&&!this.isParenthesizedExpression(n,y,h-1)){let _=`Ambiguous operator precedence.
22
+ Please use parentheses to clarify:
23
+
24
+ ${T(t)} ${s.value} (${T(g)})
25
+ // or
26
+ (${T(t)} ${s.value} ${T(g.args[0])}) ${T(g.func)} ${T(g.args[1])}
27
+
28
+ Or use newline after "${s.value}" to confirm the right-associativity.
29
+ `,k=n.slice(r+1,y).some(M=>M.type==="whitespace"&&M.value.includes(`
30
+ `)),w=n.slice(0,r),$=this.isOperatorAtLineStart(w,r),b=n.slice(r+1,y),F=$&&b.length>0&&((f=b[0])==null?void 0:f.type)==="whitespace"&&((m=b[0])==null?void 0:m.value.includes(`
31
+ `));if(!(k&&!$)){if(!F){if($)return this.parseLeftAssociativeOperator({primaryExpr:t,operatorToken:s,rhs:g,tokens:n,index:h});throw p({token:s,errorMessage:_})}}}return this.parsePrimaryEnd({primaryExpr:{tag:"FuncCall",func:{tag:"Atom",token:s},args:[t,g],isInfix:!0,token:s},tokens:n,index:h})}else if(!i&&s.type==="("){let y=this.parseFunctionCall({func:t,tokens:n,index:r+1,hasWhitespace:!1});return this.parsePrimaryEnd({primaryExpr:y.expr,tokens:n,index:y.index})}else{let y=this.parseFunctionCall({func:t,tokens:n,index:r,hasWhitespace:!0});return this.parsePrimaryEnd({primaryExpr:y.expr,tokens:n,index:y.index})}}parseFunctionArguments({tokens:t,index:n,hasWhitespace:r}){var i;let o=[];if(n=this.skipWhitespace(t,n),!r&&((i=t[n])==null?void 0:i.type)===")")return{args:o,index:n+1};for(;;){let{expr:a,index:s}=this.parseExpression({tokens:t,index:n});o.push(a),n=s;let l=t[n];if((l==null?void 0:l.type)===",")n=n+1;else{if(!l||l.type===";"||l.type==="]"||l.type==="}")return{args:o,index:n};if(l.type===")")return{args:o,index:r?n:n+1};throw p({token:l,errorMessage:r?"Expected ; to end the function call":`Expected , to separate arguments
32
+ or ) to end the function call`})}}}parseFunctionCall({func:t,tokens:n,index:r,hasWhitespace:o}){let{args:i,index:a}=this.parseFunctionArguments({tokens:n,index:r,hasWhitespace:o});return r=a,{expr:{tag:"FuncCall",func:t,args:i,token:t.token},index:r}}parseExpression({tokens:t,index:n}){n=this.skipWhitespace(t,n);let{expr:r,index:o}=this.parsePrimary({tokens:t,index:n});return this.parsePrimaryEnd({primaryExpr:r,tokens:t,index:o})}programToString(){return this.program.map(n=>T(n)).join(`;
33
+ `)}parse(t){let n=0,r=[];for(;n<t.length;){switch(t[n].type){case"whitespace":case";":case"single_line_comment":case"multi_line_comment":{n=n+1;continue}}if(n>=t.length)break;try{let{expr:a,index:s}=this.parseExpression({tokens:t,index:n});r.push(a),n=s}catch(a){this.parserError=a;break}}let o=t[this.skipWhitespaceBackward(t,t.length-1)];if(o&&o.type===";"){let i={type:"identifier",value:A.tuple,position:o.position,modulePath:this.modulePath,inputString:this.inputString};r.push({tag:"FuncCall",func:{tag:"Atom",token:i},args:[],token:i})}this.program=r}getProgram(){return this.program}getParserError(){return this.parserError}getTokens(){return this.tokens}};function Gt(e){let t=new wr({modulePath:`auto-generated://
34
+ // === START auto-generated code ===
35
+ ${e}
36
+ // === END auto-generated code ===
37
+ `,inputString:e});if(t.getParserError())throw t.getParserError();let n=t.getProgram();if(n.length!==1)throw new Error(`Expected exactly one expression from parsed code, got ${n.length}: "${e}"
38
+ ${n.map(r=>T(r)).join(`
39
+ `)}
40
+ `);return n[0]}function je(e){if(!e)return"<runtime value>";switch(e.tag){case"Type":return x(e.value);case"ComptInt":case"ComptFloat":return e.value.toString();case"ComptString":return JSON.stringify(e.value);case"ComptList":return`compt_list(${e.elements.map(je).join(", ")})`;case"U8":case"I8":case"U16":case"I16":case"U32":case"I32":case"U64":case"I64":case"F32":case"F64":case"Usize":case"Isize":return e.value.toString();case"Bool":return e.value.toString();case"Array":return`[${e.elements.map(je).join(", ")}${e.elements.length===1?",":""}]`;case"Tuple":return e.fields.length===0?"()":`(${e.fields.map(je).join(", ")}${e.fields.length===1?",":""})`;case"Struct":return`${e.type.typeName??"_"}(${e.fields.map((t,n)=>{let r=e.type.fields[n].label;return Ln(r)&&(r=`(${r})`),e.type.fields[n].isCompileTimeOnly&&(r=Ln(r)?`compt${r}`:`compt(${r})`),`${r}: ${je(t)}`}).join(", ")})`;case"Enum":{if(e.fields.length===0)return`.${e.variantName}`;let t=e.type.variants.find(n=>n.name===e.variantName);return`.${e.variantName}(${e.fields.map((n,r)=>{let o=(t==null?void 0:t.fields[r].label)??"_";return Ln(o)&&(o=`(${o})`),t!=null&&t.fields[r].isCompileTimeOnly&&(o=Ln(o)?`compt${o}`:`compt(${o})`),`${o}: ${je(n)}`}).join(", ")})`}case"Function":return e.funcName?`<fn ${e.funcName}>`:e.type.typeName?`<fn ${e.type.typeName}>`:"<fn>";case"Module":return`${e.type.typeName??"_"}(${e.fields.map((t,n)=>{let r=e.type.fields[n].label;return Ln(r)&&(r=`(${r})`),`${r}: ${je(t)}`}).join(", ")})`;case"Unit":return"()";case"Expr":return`quote(${T(e.value)})`;case"Unknown":return e.variableName?e.variableName:`<compt ${x(e.type)}>`;default:throw new Error("valueToString: Unsupported value")}}function G(e){return(e==null?void 0:e.tag)==="Type"}function Zn(e){return(e==null?void 0:e.tag)==="ComptInt"}function ri(e){return(e==null?void 0:e.tag)==="ComptFloat"}function We(e){return(e==null?void 0:e.tag)==="ComptString"}function Bn(e){return(e==null?void 0:e.tag)==="ComptList"}function Kl(e){return Bn(e)&&dt(e.type.childType)}function ct(e){return(e==null?void 0:e.tag)==="ComptInt"||(e==null?void 0:e.tag)==="ComptFloat"||(e==null?void 0:e.tag)==="U8"||(e==null?void 0:e.tag)==="I8"||(e==null?void 0:e.tag)==="U16"||(e==null?void 0:e.tag)==="I16"||(e==null?void 0:e.tag)==="U32"||(e==null?void 0:e.tag)==="I32"||(e==null?void 0:e.tag)==="U64"||(e==null?void 0:e.tag)==="I64"||(e==null?void 0:e.tag)==="F32"||(e==null?void 0:e.tag)==="F64"||(e==null?void 0:e.tag)==="Usize"||(e==null?void 0:e.tag)==="Isize"}function et(e){return(e==null?void 0:e.tag)==="Bool"}function Fe(e){return(e==null?void 0:e.tag)==="Function"}function Ue(e){return(e==null?void 0:e.tag)==="Unknown"}function ln(e){return(e==null?void 0:e.tag)==="Tuple"}function tn(e){return(e==null?void 0:e.tag)==="Struct"}function lr(e){return(e==null?void 0:e.tag)==="Array"}function Nt(e){return(e==null?void 0:e.tag)==="Enum"}function Ke(e){return(e==null?void 0:e.tag)==="Module"}function Rt(e){return(e==null?void 0:e.tag)==="Expr"}function ae(e){return{tag:"Type",type:At(e),value:e}}function un(e){return{tag:"ComptString",type:Ot(),value:e}}function kn(e,t){return{tag:"ComptList",type:po(e),elements:t}}function Dt(e,t){let n;if(e==="ComptInt")n=ur();else if(e==="ComptFloat")n=xr();else if(e==="U8")n=pr();else if(e==="I8")n=Sr();else if(e==="U16")n=Lr();else if(e==="I16")n=Ar();else if(e==="U32")n=Ir();else if(e==="I32")n=cr();else if(e==="U64")n=Nr();else if(e==="I64")n=Dr();else if(e==="F32")n=Or();else if(e==="F64")n=fr();else if(e==="Usize")n=_t();else if(e==="Isize")n=Mr();else throw new Error(`createNumberValue: Unsupported tag: ${e}`);return{tag:e,type:n,value:t}}function Pn(e){return Dt("ComptInt",e)}function oi(e){return Dt("ComptFloat",e)}function it(e){return{tag:"Bool",type:Qe(),value:e}}function re(e,t,n){if(ft(e)&&e.level===0){if(!t)throw console.trace("!variableName bug found in createUnknownValue"),new Error(`createUnknownValue expects a variable name for type ${x(e)}`);let r=wn(e,t,void 0,void 0,void 0,n);return ae(r)}return{tag:"Unknown",type:e,variableName:t}}function bn(e,t){return{tag:"Struct",type:e,fields:t}}function Vr(e,t){return{tag:"Module",type:e,fields:t}}function ii(e,t){return{tag:"Tuple",type:e,fields:t}}function Jn(e,t,n){return{tag:"Enum",type:e,variantName:t,fields:n}}function zn(e,t){return{tag:"Array",type:e,elements:t}}function Fn(e){return{tag:"Expr",type:jt(),value:e}}function Lt(e,t){let n=e.value,r=t.value;if(n===r)return!0;if(!n||!r)return!1;if(n.tag==="Type"&&r.tag==="Type")return W({type:n.value,env:e.env},{type:r.value,env:t.env},!0);if(We(n)&&We(r))return n.value===r.value;if(Bn(n)&&Bn(r)){if(n.elements.length!==r.elements.length)return!1;for(let o=0;o<n.elements.length;o++)if(!Lt({value:n.elements[o],env:e.env},{value:r.elements[o],env:t.env}))return!1;return!0}else{if(ct(n)&&ct(r))return n.value===r.value;if(et(n)&&et(r))return n.value===r.value;if(lr(n)&&lr(r)){if(n.elements.length!==r.elements.length)return!1;for(let o=0;o<n.elements.length;o++)if(!Lt({value:n.elements[o],env:e.env},{value:r.elements[o],env:t.env}))return!1;return!0}else if(ln(n)&&ln(r)){if(n.fields.length!==r.fields.length)return!1;for(let o=0;o<n.fields.length;o++)if(!Lt({value:n.fields[o],env:e.env},{value:r.fields[o],env:t.env}))return!1;return!0}else if(tn(n)&&tn(r)){if(n.fields.length!==r.fields.length||!W({type:n.type,env:e.env},{type:r.type,env:t.env},!0))return!1;for(let o=0;o<n.fields.length;o++)if(!Lt({value:n.fields[o],env:e.env},{value:r.fields[o],env:t.env}))return!1;return!0}else if(Nt(n)&&Nt(r)){if(n.fields.length!==r.fields.length||!W({type:n.type,env:e.env},{type:r.type,env:t.env},!0)||n.variantName!==r.variantName)return!1;for(let o=0;o<n.fields.length;o++)if(!Lt({value:n.fields[o],env:e.env},{value:r.fields[o],env:t.env}))return!1;return!0}else if(Ke(n)&&Ke(r)){if(n.fields.length!==r.fields.length||!W({type:n.type,env:e.env},{type:r.type,env:t.env},!0))return!1;for(let o=0;o<n.fields.length;o++)if(!Lt({value:n.fields[o],env:e.env},{value:r.fields[o],env:t.env}))return!1;return!0}else{if(Rt(n)&&Rt(r))return n.value===r.value||ai(n.value,r.value);if(Ue(n)&&Ue(r)){let o,i;if(n.variableName){let a=me(e.env,n.variableName);if(a.length>0){let s=a[a.length-1];s.value&&!Ue(s.value)&&(o=s.value)}}if(r.variableName){let a=me(t.env,r.variableName);if(a.length>0){let s=a[a.length-1];s.value&&!Ue(s.value)&&(i=s.value)}}return o&&i?Lt({value:o,env:e.env},{value:i,env:t.env}):o||i?!1:W({type:n.type,env:e.env},{type:r.type,env:t.env},!0)}else if(Ue(n)&&!Ue(r)){if(n.variableName){let o=me(e.env,n.variableName);if(o.length>0){let i=o[o.length-1];if(i.value&&!Ue(i.value))return Lt({value:i.value,env:e.env},{value:r,env:t.env})}}return!1}else if(!Ue(n)&&Ue(r)){if(r.variableName){let o=me(t.env,r.variableName);if(o.length>0){let i=o[o.length-1];if(i.value&&!Ue(i.value))return Lt({value:n,env:e.env},{value:i.value,env:t.env})}}return!1}else return!1}}}function Ql(e,t){return!ft(e)||!ft(t)?!1:t.level===e.level&&(t.tag===e.tag||e.tag==="Type")}function An(e,t){return ee(t)?e===t.id:$e(t)?t.fields.some(n=>An(e,n.type)):Ve(t)?t.variants.some(n=>n.fields?n.fields.some(r=>An(e,r.type)):!1):He(t)?t.fields.some(n=>An(e,n.type)):Oe(t)||at(t)||mt(t)?An(e,t.childType):De(t)?!1:gt(t)?An(e,t.childType):ce(t)?t.parameters.some(n=>An(e,n.type))||An(e,t.return.type):Wt(t)?An(e,t.isFuture.outputType):Ut(t)?An(e,t.isFn.callType):!1}function pt(e,t,n=[]){if(n.find(r=>r.expected===e.type&&r.given===t.type))return{expectedEnv:e.env,givenEnv:t.env};if(n.push({expected:e.type,given:t.type}),ee(e.type)&&ee(t.type)){let r=fn(e.env,e.type),o=fn(t.env,t.type);if(ee(r))if(ee(o)){if(r!==o){let i=ae(t.type);{let a=me(e.env,e.type.name),s=a[a.length-1];if(s)e.env=Xe(e.env,s,{...s,value:i});else{let{env:l}=we({env:e.env,variable:{name:e.type.name,value:i,type:i.type,isCompileTimeOnly:!0,token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheGcValue:!1}});e.env=l}}{let a=me(t.env,t.type.name),s=a[a.length-1];if(s)t.env=Xe(t.env,s,{...s,value:i});else{let{env:l}=we({env:t.env,variable:{name:t.type.name,value:i,type:i.type,isCompileTimeOnly:!0,token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheGcValue:!1}});t.env=l}}}}else{let i=ae(o),a=me(e.env,e.type.name),s=a[a.length-1];if(s)e.env=Xe(e.env,s,{...s,value:i});else{let{env:l}=we({env:e.env,variable:{name:e.type.name,value:i,type:i.type,isCompileTimeOnly:!0,token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheGcValue:!1}});e.env=l}}else{let i=ae(r),a=me(t.env,t.type.name),s=a[a.length-1];if(s)t.env=Xe(t.env,s,{...s,value:i});else{let{env:l}=we({env:t.env,variable:{name:t.type.name,value:i,type:i.type,isCompileTimeOnly:!0,token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheGcValue:!1}});t.env=l}}}else if(ee(e.type)){let r=fn(e.env,e.type);if(ee(r)&&r.id===e.type.id){if(An(e.type.id,t.type))throw new Error(`Cannot unify type variable "${e.type.name}" with type "${x(t.type)}" because it would create an infinite type.`);let o=ae(t.type),i=me(e.env,e.type.name),a=i[i.length-1];if(a)a&&(e.env=Xe(e.env,a,{...a,value:o}));else{let{env:s}=we({env:e.env,variable:{name:e.type.name,value:o,type:o.type,isCompileTimeOnly:!0,token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheGcValue:!1}});e.env=s}}else if(!ee(r)){let{expectedEnv:o,givenEnv:i}=pt({type:r,env:e.env},{type:t.type,env:t.env},n);e.env=o,t.env=i}}else if(ee(t.type)){let r=fn(t.env,t.type);if(ee(r)){if(An(t.type.id,e.type))throw new Error(`Cannot unify type variable "${t.type.name}" with type "${x(e.type)}" because it would create an infinite type.`);let o=ae(e.type),i=me(t.env,t.type.name),a=i[i.length-1];if(a)a&&(t.env=Xe(t.env,a,{...a,value:o}));else{let{env:s}=we({env:t.env,variable:{name:t.type.name,value:o,type:o.type,isCompileTimeOnly:!0,token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheGcValue:!1}});t.env=s}}else{let{expectedEnv:o,givenEnv:i}=pt({type:e.type,env:e.env},{type:r,env:t.env},n);e.env=o,t.env=i}}else if(He(e.type)&&He(t.type)&&e.type.fields.length===t.type.fields.length)for(let r=0;r<e.type.fields.length;r++){let{expectedEnv:o,givenEnv:i}=pt({type:e.type.fields[r].type,env:e.env},{type:t.type.fields[r].type,env:t.env},n);e.env=o,t.env=i}else if($e(e.type)&&$e(t.type)&&(e.type.id===t.type.id||e.type.functionValue&&t.type.functionValue&&e.type.functionValue===t.type.functionValue))for(let r=0;r<e.type.fields.length;r++){let o=e.type.fields[r],i=t.type.fields[r],{expectedEnv:a,givenEnv:s}=pt({type:o.type,env:e.env},{type:i.type,env:t.env},n);if(e.env=a,t.env=s,o.assignedValue&&i.assignedValue&&G(o.assignedValue)&&G(i.assignedValue)){let{expectedEnv:l,givenEnv:u}=pt({type:o.assignedValue.value,env:e.env},{type:i.assignedValue.value,env:t.env},n);e.env=l,t.env=u}}else if(Ve(e.type)&&Ve(t.type)&&(e.type.id===t.type.id||e.type.functionValue&&t.type.functionValue&&e.type.functionValue===t.type.functionValue))for(let r=0;r<e.type.variants.length;r++){let o=e.type.variants[r],i=t.type.variants[r],a=o.fields??[],s=i.fields??[];for(let l=0;l<a.length;l++){let{expectedEnv:u,givenEnv:d}=pt({type:a[l].type,env:e.env},{type:s[l].type,env:t.env},n);e.env=u,t.env=d}}else if(Ee(e.type)&&Ee(t.type)&&e.type.functionValue&&t.type.functionValue&&e.type.functionValue===t.type.functionValue)for(let r=0;r<e.type.fields.length;r++){let o=e.type.fields[r],i=t.type.fields[r],{expectedEnv:a,givenEnv:s}=pt({type:o.type,env:e.env},{type:i.type,env:t.env},n);if(e.env=a,t.env=s,o.assignedValue&&i.assignedValue&&G(o.assignedValue)&&G(i.assignedValue)){let{expectedEnv:l,givenEnv:u}=pt({type:o.assignedValue.value,env:e.env},{type:i.assignedValue.value,env:t.env},n);e.env=l,t.env=u}}else if(De(e.type)&&De(t.type)){let{expectedEnv:r,givenEnv:o}=pt({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=o}else if(gt(e.type)&&gt(t.type)){let{expectedEnv:r,givenEnv:o}=pt({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=o}else if(Oe(e.type)&&Oe(t.type)){let{expectedEnv:r,givenEnv:o}=pt({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);if(e.env=r,t.env=o,Ue(e.type.length)&&e.type.length.variableName&&!Ue(t.type.length)){let i=e.type.length.variableName,a=t.type.length,s=me(e.env,i),l=s[s.length-1];if(l)l&&(e.env=Xe(e.env,l,{...l,value:a}));else{let{env:u}=we({env:e.env,variable:{name:i,value:a,type:t.type.length.type,isCompileTimeOnly:!0,token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheGcValue:!1}});e.env=u}}}else if(at(e.type)&&at(t.type)){let{expectedEnv:r,givenEnv:o}=pt({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=o}else if(mt(e.type)&&mt(t.type)){let{expectedEnv:r,givenEnv:o}=pt({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n);e.env=r,t.env=o}else if(Wt(e.type)&&Wt(t.type)){let{expectedEnv:r,givenEnv:o}=pt({type:e.type.isFuture.outputType,env:e.env},{type:t.type.isFuture.outputType,env:t.env},n);e.env=r,t.env=o}else if(Ut(e.type)&&Ut(t.type)){let r=e.type,o=t.type,{expectedEnv:i,givenEnv:a}=pt({type:r.isFn.callType,env:e.env},{type:o.isFn.callType,env:t.env},n);e.env=i,t.env=a}else if(ce(e.type)&&ce(t.type)&&e.type.forallParameters.length===t.type.forallParameters.length&&e.type.parameters.length===t.type.parameters.length){let r=e.type,o=t.type;for(let s=0;s<r.forallParameters.length;s++){let l=r.forallParameters[s],u=o.forallParameters[s],{expectedEnv:d,givenEnv:c}=pt({type:l.type,env:e.env},{type:u.type,env:t.env},n);e.env=d,t.env=c}for(let s=0;s<r.parameters.length;s++){let{expectedEnv:l,givenEnv:u}=pt({type:r.parameters[s].type,env:e.env},{type:o.parameters[s].type,env:t.env},n);e.env=l,t.env=u}let{expectedEnv:i,givenEnv:a}=pt({type:r.return.type,env:e.env},{type:o.return.type,env:t.env},n);e.env=i,t.env=a}else if(!(ft(e.type)&&!ft(t.type))){if(e.type.tag!==t.type.tag)throw new Error(`Cannot unify incompatible types: "${x(e.type)}" and "${x(t.type)}"`)}return{expectedEnv:e.env,givenEnv:t.env}}function Zl(e,t,n,r){let o=Gt(e),i=S({expr:o,env:n,context:{...r,SelfType:t}});if(!i.$)throw new Error(`Failed to evaluate auto-generated expression: ${T(o)}`);return{expr:i,env:i.$.env}}function Ur({label:e,functionSignature:t,SelfType:n,env:r,context:o}){let{expr:i,env:a}=Zl(t,n,r,o);if(V(i)&&i.$&&i.$.value&&G(i.$.value)&&ce(i.$.value.value)){let s=i.$.value.value,l={label:e,type:s,assignedValue:void 0,isCompileTimeOnly:!0,exprs:{expr:i,labelExpr:i.args[0],typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:void 0}};if(n.module){let u=n.module.fields.findIndex(d=>d.label===e);u>=0?n.module.fields[u]=l:n.module.fields.push(l)}}return a}function xn({label:e,functionCode:t,SelfType:n,env:r,context:o}){let{expr:i,env:a}=Zl(t,n,r,o);if(V(i)&&i.$&&i.$.value&&Fe(i.$.value)){i.$.value.funcId+=e;let s={label:e,type:i.$.type,assignedValue:i.$.value,isCompileTimeOnly:!0,exprs:{expr:i,labelExpr:i.args[0],typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:i}};if(n.module){let l=n.module.fields.findIndex(u=>u.label===e);l>=0?n.module.fields[l]=s:n.module.fields.push(s)}}return a}var wa="(fn(self : Self) -> unit)",si="(fn(self : Self) -> unit)",li="(fn(self : Self) -> Self)";function Of(e){return e.replace(/[^a-zA-Z0-9_]/g,t=>`_u${t.charCodeAt(0)}_`)}function Uf(e){return/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e)}function Va(e,t){if(e.length===0)return{destructuringExpr:"",callsExpr:""};let n=[],r=[];for(let o of e)if(Uf(o))if(o==="self"){let i="_self";n.push(`${o} : ${i}`),r.push(`(${t})(${i});`)}else n.push(o),r.push(`(${t})(${o});`);else{let i=Of(o);n.push(`(${o}) : ${i}`),r.push(`(${t})(${i});`)}return{destructuringExpr:`{ ${n.join(", ")} } := self;`,callsExpr:r.join(`
41
+ `)}}function Bf(e){let t=wa;if(!Xt(e))return{signature:t,code:`(${t} ())`};let n=e.fields.filter(s=>!s.isCompileTimeOnly&&qe(s.type)).map(s=>s.label),r=e.module.fields.some(s=>s.label===C.dispose[0]);if(!n.length&&!r)return{signature:t,code:`(${t} ())`};let{destructuringExpr:o,callsExpr:i}=Va(n,C.___drop[0]),a=n.length?`
42
+ ${o}
43
+ ${i}
44
+ `:"";return{signature:t,code:`(${t} { // ___dispose
45
+ ${r?"Self.dispose(self);":""}
46
+ ${a}
47
+ return ();
48
+ })`}}function Pf(e){let t=si,n=e.fields.filter(i=>!i.isCompileTimeOnly&&qe(i.type)).map(i=>i.label),r=Xt(e)?`
49
+ ${C.__yo_decr_rc[0]}(self);`:"",o="";if(!Xt(e)&&n.length){let{destructuringExpr:i,callsExpr:a}=Va(n,C.___drop[0]);o=`
50
+ ${i}
51
+ ${a}
52
+ `}return{signature:t,code:`(${t} { // ___drop
53
+ ${o}
54
+ ${r}
55
+ return ();
56
+ })`}}function zf(e){let t=li,n=e.fields.filter(i=>!i.isCompileTimeOnly&&qe(i.type)).map(i=>i.label),r=Xt(e)?`
57
+ ${C.__yo_incr_rc[0]}(self);`:"",o="";if(!Xt(e)&&n.length){let{destructuringExpr:i,callsExpr:a}=Va(n,C.___dup[0]);o=`
58
+ ${i}
59
+ ${a}
60
+ `}return{signature:t,code:`(${t} { // ___dup
61
+ ${o}
62
+ ${r}
63
+ return ${C.__yo_rc_own[0]}(self);
64
+ })`}}function yr({structType:e,env:t,context:n}){At(e);let r=Ye(e),{code:o}=Bf(e),{code:i}=Pf(e),{code:a}=zf(e);return xa({structType:e,env:t,context:n}),r||(t=xn({label:C.___dispose[0],functionCode:o,SelfType:e,env:t,context:n}),t=xn({label:C.___drop[0],functionCode:i,SelfType:e,env:t,context:n}),t=xn({label:C.___dup[0],functionCode:a,SelfType:e,env:t,context:n})),t}function xa({structType:e,env:t,context:n}){Ur({label:C.___dispose[0],functionSignature:wa,SelfType:e,env:t,context:n}),Ur({label:C.___drop[0],functionSignature:si,SelfType:e,env:t,context:n}),Ur({label:C.___dup[0],functionSignature:li,SelfType:e,env:t,context:n})}function Gf(e){let t=si,n=e.variants.filter(i=>i.fields&&i.fields.some(a=>qe(a.type))),r=Xt(e)?`
65
+ ${C.__yo_decr_rc[0]}(self);`:"",o=Xt(e)?"":n.length?`
66
+ match(self,
67
+ ${n.map(i=>{let a=i.fields.filter(u=>!u.isCompileTimeOnly&&qe(u.type)).map(u=>u.label),s=i.fields.map(u=>u.label).join(", "),l=a.map(u=>` (${C.___drop[0]})(${u});`).join(`
68
+ `);return`.${i.name}(${s}) => {
69
+ ${l}
70
+ }`}).join(`,
71
+ `)}${n.length===e.variants.length?"":`,
72
+ _ => ()`}
73
+ );`:"";return{signature:t,code:`(${t} { // ___drop
74
+ ${o}
75
+ ${r}
76
+ return ();
77
+ })`}}function Rf(e){let t=li,n=e.variants.filter(i=>i.fields&&i.fields.some(a=>qe(a.type))),r=Xt(e)?`
78
+ ${C.__yo_incr_rc[0]}(self);`:"",o=Xt(e)?"":n.length?`
79
+ match(self,
80
+ ${n.map(i=>{let a=i.fields.filter(u=>!u.isCompileTimeOnly&&qe(u.type)).map(u=>u.label),s=i.fields.map(u=>u.label).join(", "),l=a.map(u=>` (${C.___dup[0]})(${u});`).join(`
81
+ `);return`.${i.name}(${s}) => {
82
+ ${l}
83
+ }`}).join(`,
84
+ `)}${n.length===e.variants.length?"":`,
85
+ _ => ()`}
86
+ );`:"";return{signature:t,code:`(${t} { // ___dup
87
+ ${o}
88
+ ${r}
89
+ return ${C.__yo_rc_own[0]}(self);
90
+ })`}}function Jl({enumType:e,env:t,context:n}){At(e);let r=Ye(e),{code:o}=Gf(e),{code:i}=Rf(e);return Ma({enumType:e,env:t,context:n}),r||(t=xn({label:C.___drop[0],functionCode:o,SelfType:e,env:t,context:n}),t=xn({label:C.___dup[0],functionCode:i,SelfType:e,env:t,context:n})),t}function Ma({enumType:e,env:t,context:n}){Ur({label:C.___dispose[0],functionSignature:wa,SelfType:e,env:t,context:n}),Ur({label:C.___drop[0],functionSignature:si,SelfType:e,env:t,context:n}),Ur({label:C.___dup[0],functionSignature:li,SelfType:e,env:t,context:n})}function co({dynType:e,env:t,context:n}){let r=qf(e),o=Yf(e);return o&&(t=xn({label:C.___dup[0],functionCode:o,SelfType:e,env:t,context:n})),r&&(t=xn({label:C.___drop[0],functionCode:r,SelfType:e,env:t,context:n})),t}function qf(e){return`((fn(self : Self) -> unit) { // ___drop for ${x(e)}
91
+ ${C.__yo_dyn_drop[0]}(self);
92
+ })`}function Yf(e){return`((fn(self : Self) -> Self) { // ___dup for ${x(e)}
93
+ ${C.__yo_dyn_dup[0]}(self);
94
+ return ${C.__yo_rc_own[0]}(self);
95
+ })`}function jf(e){return`((fn(self : Self) -> unit) { // ___drop for ${x(e)}
96
+ ${C.__yo_sometype_drop[0]}(self);
97
+ })`}function Wf(e){return`((fn(self : Self) -> Self) { // ___dup for ${x(e)}
98
+ ${C.__yo_sometype_dup[0]}(self);
99
+ return ${C.__yo_rc_own[0]}(self);
100
+ })`}function Xl({someType:e,env:t,context:n}){let r=jf(e),o=Wf(e);return t=xn({label:C.___drop[0],functionCode:r,SelfType:e,env:t,context:n}),t=xn({label:C.___dup[0],functionCode:o,SelfType:e,env:t,context:n}),t}function Hf(e){return`((fn(self : Self) -> unit) { // ___dispose for Iso
101
+ ${C.__yo_iso_dispose[0]}(self);
102
+ return ();
103
+ })`}function Kf(e){return`((fn(self : Self) -> unit) { // ___drop for Iso
104
+ ${C.__yo_decr_rc_atomic[0]}(self);
105
+ return ();
106
+ })`}function Qf(e){return`((fn(self : Self) -> Self) { // ___dup for Iso
107
+ ${C.__yo_incr_rc_atomic[0]}(self);
108
+ return ${C.__yo_rc_own[0]}(self);
109
+ })`}function eu({isoType:e,env:t,context:n}){let r=Hf(e),o=Kf(e),i=Qf(e);return t=xn({label:C.___dispose[0],functionCode:r,SelfType:e,env:t,context:n}),t=xn({label:C.___drop[0],functionCode:o,SelfType:e,env:t,context:n}),t=xn({label:C.___dup[0],functionCode:i,SelfType:e,env:t,context:n}),t}function Sa(e,t,n,r){let o=`${e}()`,i=Gt(o),a=S({expr:i,env:n,context:{...r,expectedType:void 0,ReceiverType:t}});if(!a.$||!Ke(a.$.value))return n;n=a.$.env;let s=a.$.value;s.type.receiverType=t;let l={label:"",type:dn(1),isCompileTimeOnly:!0,assignedValue:s,sourceModulePath:r.currentModulePath,exprs:{expr:i}};return t.module.fields.push(l),n}function tu({structType:e,env:t,context:n}){return e.isReferenceSemantics||e.fields.filter(o=>!o.isCompileTimeOnly).every(o=>ui(o.type,t))&&(t=Sa("Send",e,t,n)),t}function nu({enumType:e,env:t,context:n}){return e.variants.every(o=>!o.fields||o.fields.length===0?!0:o.fields.every(i=>ui(i.type,t)))&&(t=Sa("Send",e,t,n)),t}function ru({unionType:e,env:t,context:n}){return e.fields.filter(o=>!o.isCompileTimeOnly).every(o=>ui(o.type,t))&&(t=Sa("Send",e,t,n)),t}var pi=null;function ur(){if(pi)return pi;let e=tt(),t=Ie(e),n={id:"compt_int",tag:"compt_int",module:t};return t.receiverType=n,pi=n,n}var ci=null;function xr(){if(ci)return ci;let e=tt(),t=Ie(e),n={id:"compt_float",tag:"compt_float",module:t};return t.receiverType=n,ci=n,n}var fi=null;function Ot(){if(fi)return fi;let e=tt(),t=Ie(e),n={id:"compt_string",tag:"compt_string",module:t};return t.receiverType=n,fi=n,n}var di=null;function jt(){if(di)return di;let e=tt(),t=Ie(e),n={id:"Expr",tag:"Expr",module:t};return t.receiverType=n,di=n,n}var mi=new Map;function po(e){if(mi.has(e))return mi.get(e);let t=tt(),n=Ie(t),o={id:`compt_list_${e.id}`,tag:"ComptList",childType:e,module:n};return n.receiverType=o,mi.set(e,o),o}function mo(){return po(jt())}var yi=null;function Qe(){if(yi)return yi;let e=tt(),t=Ie(e),n={id:"bool",tag:"bool",module:t};return t.receiverType=n,yi=n,n}var _i=null;function _t(){if(_i)return _i;let e=tt(),t=Ie(e),n={id:"usize",tag:"usize",module:t};return t.receiverType=n,_i=n,n}var gi=null;function Mr(){if(gi)return gi;let e=tt(),t=Ie(e),n={id:"isize",tag:"isize",module:t};return t.receiverType=n,gi=n,n}var hi=null;function pr(){if(hi)return hi;let e=tt(),t=Ie(e),n={id:"u8",tag:"u8",module:t};return t.receiverType=n,hi=n,n}var vi=null;function Sr(){if(vi)return vi;let e=tt(),t=Ie(e),n={id:"i8",tag:"i8",module:t};return t.receiverType=n,vi=n,n}var Ti=null;function Lr(){if(Ti)return Ti;let e=tt(),t=Ie(e),n={id:"u16",tag:"u16",module:t};return t.receiverType=n,Ti=n,n}var $i=null;function Ar(){if($i)return $i;let e=tt(),t=Ie(e),n={id:"i16",tag:"i16",module:t};return t.receiverType=n,$i=n,n}var Ei=null;function Ir(){if(Ei)return Ei;let e=tt(),t=Ie(e),n={id:"u32",tag:"u32",module:t};return t.receiverType=n,Ei=n,n}var Ci=null;function cr(){if(Ci)return Ci;let e=tt(),t=Ie(e),n={id:"i32",tag:"i32",module:t};return t.receiverType=n,Ci=n,n}var ki=null;function Nr(){if(ki)return ki;let e=tt(),t=Ie(e),n={id:"u64",tag:"u64",module:t};return t.receiverType=n,ki=n,n}var bi=null;function Dr(){if(bi)return bi;let e=tt(),t=Ie(e),n={id:"i64",tag:"i64",module:t};return t.receiverType=n,bi=n,n}var Fi=null;function Or(){if(Fi)return Fi;let e=tt(),t=Ie(e),n={id:"f32",tag:"f32",module:t};return t.receiverType=n,Fi=n,n}var wi=null;function fr(){if(wi)return wi;let e=tt(),t=Ie(e),n={id:"f64",tag:"f64",module:t};return t.receiverType=n,wi=n,n}var Vi=null;function Br(){if(Vi)return Vi;let e=tt(),t=Ie(e),n={id:"unit",tag:"unit",module:t};return t.receiverType=n,Vi=n,n}var xi=null;function zi(){if(xi)return xi;let e=tt(),t=Ie(e),n={id:"char",tag:"char",module:t};return t.receiverType=n,xi=n,n}var Mi=null;function Gi(){if(Mi)return Mi;let e=tt(),t=Ie(e),n={id:"short",tag:"short",module:t};return t.receiverType=n,Mi=n,n}var Si=null;function Ri(){if(Si)return Si;let e=tt(),t=Ie(e),n={id:"ushort",tag:"ushort",module:t};return t.receiverType=n,Si=n,n}var Li=null;function qi(){if(Li)return Li;let e=tt(),t=Ie(e),n={id:"int",tag:"int",module:t};return t.receiverType=n,Li=n,n}var Ai=null;function Yi(){if(Ai)return Ai;let e=tt(),t=Ie(e),n={id:"uint",tag:"uint",module:t};return t.receiverType=n,Ai=n,n}var Ii=null;function ji(){if(Ii)return Ii;let e=tt(),t=Ie(e),n={id:"long",tag:"long",module:t};return t.receiverType=n,Ii=n,n}var Ni=null;function Wi(){if(Ni)return Ni;let e=tt(),t=Ie(e),n={id:"ulong",tag:"ulong",module:t};return t.receiverType=n,Ni=n,n}var Di=null;function Hi(){if(Di)return Di;let e=tt(),t=Ie(e),n={id:"longlong",tag:"longlong",module:t};return t.receiverType=n,Di=n,n}var Oi=null;function Ki(){if(Oi)return Oi;let e=tt(),t=Ie(e),n={id:"ulonglong",tag:"ulonglong",module:t};return t.receiverType=n,Oi=n,n}var Ui=null;function Qi(){if(Ui)return Ui;let e=tt(),t=Ie(e),n={id:"longdouble",tag:"longdouble",module:t};return t.receiverType=n,Ui=n,n}function lt(e){return dn(0,e)}function Gn(e,t){let n=tt(),r=Ie(n),o={id:`array_${e.id+"_"+ba(je(t))}`,tag:"Array",childType:e,length:t,module:r};return r.receiverType=o,o}var Bi=new Map;function _r(e){if(Bi.has(e))return Bi.get(e);let t=tt(),n=Ie(t),r={id:`slice_${e.id}`,tag:"Slice",childType:e,module:n};return n.receiverType=r,Bi.set(e,r),r}var Pi;function iu(){if(Pi)return Pi;let e=tt(),t=Ie(e),n={id:"void",tag:"void",module:t};return t.receiverType=n,Pi=n,n}function Zi(e){let t=tt(),n=Ie(t),r={id:`tuple_${e.map(o=>o.type.id).join("_")}`,tag:"Tuple",fields:e,module:n};return n.receiverType=r,r}function gr(e,t=!1,n=!1){let r=Ie(e),o={id:`struct_${ht()}`,tag:"Struct",isReferenceSemantics:t,isNewtype:n,fields:[],module:r,env:e};return r.receiverType=o,o}function Ie(e){return{id:`module_${ht()}`,tag:"Module",fields:[],env:e,module:void 0}}function au(e){let t=Ie(e),n={id:`enum_${ht()}`,tag:"Enum",variants:[],module:t,env:e};return t.receiverType=n,n}function su(e){let t=Ie(e),n={id:`union_${ht()}`,tag:"Union",fields:[],module:t,env:e};return t.receiverType=n,n}function Pr({parameters:e,forallParameters:t,variadicParameter:n,return_:r,env:o,parametersFrame:i,SelfType:a,ParentFunctionType:s,isClosure:l}){let u=tt(),d=Ie(u),c={id:`fn_${ht()}`,tag:"Function",parameters:e,forallParameters:t,variadicParameter:n,return:r,env:o,parametersFrame:i,SelfType:a,ParentFunctionType:s,module:d,isClosure:l};return d.receiverType=c,c}var La=new Map;function hr(e){if(La.has(e))return La.get(e);let t=tt(),n=Ie(t),r={id:`ptr_${e.id}`,tag:"Ptr",childType:e,module:n};return n.receiverType=r,La.set(e,r),r}var Aa=new Map;function lu(e,t){if(Aa.has(e))return Aa.get(e);let n=Ie(t),r={id:`iso_${e.id}`,tag:"Iso",childType:e,module:n,env:t};return n.receiverType=r,Aa.set(e,r),r}function wn(e,t,n,r,o,i){if(e.level!==0)throw console.trace(),new Error(`createSomeType expects a type with level 0, got level ${e.level}`);let a=tt(),s=Ie(a),l={id:n??`sometype_${ht()}`,tag:"SomeType",name:t,parentType:e,size:void 0,requiredModules:r??[],negativeModules:o&&o.length>0?o:void 0,module:s,isExtern:e.isExtern,externName:e.externName,recursiveTypeRef:i};return s.receiverType=l,Xl({someType:l,env:a,context:{SelfType:l,stdPath:""}}),l}var fo=new Map;function dn(e,t){if(fo.has(e)){let o=fo.get(e);if(o.has(t))return o.get(t)}else fo.set(e,new Map);let n=Ie(tt()),r={id:`Type(${e})`,tag:"Type",level:e,baseType:t,module:n};return n.receiverType=r,fo.get(e).set(t,r),r}function uu({expr:e,labelExpr:t,typeExpr:n,defaultValueExpr:r,assignedValueExpr:o}){if(!t&&!n&&!r&&!o)throw new Error("At least one of labelExpr, typeExpr, defaultValueExpr or assignedValueExpr must be defined");if(!n&&!r&&!o)throw new Error("Expected either typeExpr, defaultValueExpr or assignedValueExpr to be defined");return{expr:e,labelExpr:t,typeExpr:n,defaultValueExpr:r,assignedValueExpr:o}}function pu(e,t){let n=`fn_module_${e.id}`,r=Ie(t);return r.isFn={callType:e},r.id=n,r.receiverType=void 0,r}var Zf=0;function cu(e,t){let n=`future_module_${e.id}_${Zf++}`,r=Ie(t);return r.isFuture={outputType:e},r.id=n,r.receiverType=void 0,r}function ou(e){return e.fields.map(n=>{if(n.type.tag==="Function"){let r=n.type,o=r.parameters.map(a=>`${a.label}:${x(a.type)}`).join(","),i=x(r.return.type);return`${n.label}:(${o})->${i}`}return`${n.label}:${x(n.type)}`}).join(";")}function yo(e,t,n){let r=Ie(t),o=e.map(l=>ou(l)).join("__"),i=n?n.map(l=>ou(l)).join("__"):"",s={id:`dyn_${ba(o+(i?`_neg_${i}`:""))}`,tag:"Dyn",requiredModules:[...e],negativeModules:n&&n.length>0?n:void 0,module:r,env:t};return r.receiverType=s,s}function Ia(){pi=null,ci=null,fi=null,di=null,mi.clear(),yi=null,_i=null,gi=null,hi=null,vi=null,Ti=null,$i=null,Ei=null,Ci=null,ki=null,bi=null,Fi=null,wi=null,Vi=null,xi=null,Mi=null,Si=null,Li=null,Ai=null,Ii=null,Ni=null,Di=null,Oi=null,Ui=null,Bi.clear(),Pi=void 0,fo.clear()}function Jf(e,t){let n=me(e,t);if(n.length===0)return;let r=n[n.length-1];if(r.value&&G(r.value)){let o=r.value;if(Ee(o.value))return o.value}}function _o({targetType:e,moduleType:t,env:n}){let r={...t,receiverType:e},o=e.module;if(o)for(let i of o.fields){if(!i.assignedValue||!Ke(i.assignedValue))continue;let s=i.assignedValue.type;if(W({type:r,env:n},{type:s,env:n}))return!0}return!1}function ui(e,t){if(!e)return!1;let n=Jf(t,"Send");return n?_o({targetType:e,moduleType:n,env:t}):!1}function mn(e){if(!e)return!1;if(ee(e)||Ne(e)){let t=e.requiredModules;if(t){for(let n of t)if(Ut(n))return!0}}return!1}function nn(e){if(Ut(e))return e;if(ee(e)||Ne(e)){let t=e.requiredModules;if(t){for(let n of t)if(Ut(n))return n}}}function Pe(e){if(!e)return!1;if(ee(e)||Ne(e)){let t=e.requiredModules;if(t){for(let n of t)if(Wt(n))return!0}}return!1}function Ht(e){if(Wt(e))return e;if(ee(e)||Ne(e)){let t=e.requiredModules;if(t){for(let n of t)if(Wt(n))return n}}}function hn(e){return ft(e)||Ee(e)||kt(e)||Bt(e)||Pt(e)||mt(e)||dt(e)}function er(e){return In(e)}function qe(e,t=[]){if(!e||t.includes(e))return!1;if(t.push(e),Xt(e))return!0;switch(e.tag){case"Array":return qe(e.childType,t);case"Tuple":return e.fields.some(n=>qe(n.type,t));case"Union":return e.fields.some(n=>qe(n.type,t));case"Struct":return e.fields.some(n=>qe(n.type,t));case"Enum":return e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(o=>qe(o.type,t))});case"Iso":return qe(e.childType,t);case"Module":return!1;case"Function":return!1;case"SomeType":{let n=e;return Pe(n)?!0:n.resolvedConcreteType?qe(n.resolvedConcreteType,t):!0}default:return!1}}function Ye(e,t=[]){if(!e||t.includes(e))return!1;if(t.push(e),ee(e))return e.isExtern?!1:e.resolvedConcreteType?Ye(e.resolvedConcreteType,t):!(mn(e)||Pe(e));switch(e.tag){case"Array":return Ye(e.childType,t);case"Tuple":return e.fields.some(n=>Ye(n.type,t));case"Struct":return e.fields.some(n=>Ye(n.type,t));case"Enum":return e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(o=>Ye(o.type,t))});case"Union":return e.fields.some(n=>Ye(n.type,t));case"Function":{let n=e;return n.forallParameters.length>0||n.parameters.some(r=>Ye(r.type,t))||Ye(n.return.type,t)}case"Module":return e.fields.some(n=>Ye(n.type,t));case"Ptr":return Ye(e.childType,t);default:return!1}}function Na(e){let t=new Set,n=new Set;function r(o){if(!(o&&n.has(o))){if(o&&n.add(o),ee(o)){if(t.has(o))return;o.resolvedConcreteType||t.add(o)}switch(o.tag){case"Array":r(o.childType);break;case"Tuple":o.fields.forEach(i=>r(i.type));break;case"Struct":o.fields.forEach(i=>r(i.type));break;case"Enum":o.variants.forEach(i=>{var a;(a=i.fields)==null||a.forEach(s=>r(s.type))});break;case"Union":o.fields.forEach(i=>r(i.type));break;case"Module":o.fields.forEach(i=>r(i.type));break;case"Ptr":r(o.childType);break;default:break}}}return r(e),t}function Gr(e){if(!e)return!1;switch(e.tag){case"Array":{let t=e;return Ue(t.length)||Gr(t.childType)}case"SomeType":return!0;case"Module":{let t=e;return t.isFn?Gr(t.isFn.callType):!1}default:return!1}}function fn(e,t){let n,r=new Set;do{if(r.has(t))return t;r.add(t);let o=me(e,t.name,i=>{var a;return((a=i.value)==null?void 0:a.tag)==="Type"});if(!o.length||(n=o[o.length-1].value,n.value===t))return t;if(ee(n.value))t=n.value;else break}while(ee(t));return n.value}function vt({type:e,expectedType:t,expr:n,env:r}){let o;if(kt(e))o=cr();else if(Bt(e))o=fr();else{if(Oe(e))return e.childType=vt({type:e.childType,expectedType:void 0,expr:void 0,env:r}),e;if(He(e))return e.fields=e.fields.map(i=>({...i,type:vt({type:i.type,expectedType:void 0,expr:void 0,env:r})})),e;if($e(e))return $t(e)||(e.fields=e.fields.map(i=>({...i,type:vt({type:i.type,expectedType:void 0,expr:void 0,env:r})}))),e;if(Ve(e))return e.variants=e.variants.map(i=>(i.fields&&(i.fields=i.fields.map(a=>({...a,type:vt({type:a.type,expectedType:void 0,expr:void 0,env:r})}))),i)),e;if(Pt(e))t&&(De(t)&&(nr(t.childType)||ea(t.childType))||at(t))&&(o=t),o||(o=_r(pr()));else return e}return o&&(n!=null&&n.$)&&(n.$.convertedRuntimeType=o),o??e}function fu(e,t=new Set){let n=e.label;e.isQuote?n=`quote(${n})`:e.isCompileTimeOnly&&(n=`compt(${n})`);let r=x(e.type,t),o=e.exprs.defaultValueExpr?T(e.exprs.defaultValueExpr):"";return o?`(${n} : ${r}) ?= ${o}`:`${n} : ${r}`}function zr(e,t=new Set){let n=e.label;Ln(n)&&(n=`(${n})`),e.isCompileTimeOnly&&(n=`compt(${n})`);let r=e.defaultValue?je(e.defaultValue):"",o=e.assignedValue?je(e.assignedValue):"";return r?`(${n}: ${x(e.type,t)}) ?= ${r}`:o?`(${n}: ${x(e.type,t)}) = ${o}`:`${n}: ${x(e.type,t)}`}function Xf(e,t=new Set){let n=e.label;Ln(n)&&(n=`(${n})`);let r=e.defaultValue?je(e.defaultValue):"",o=e.assignedValue?je(e.assignedValue):"";return r?`(${n} : ${x(e.type,t)}) ?= ${r}`:o?`(${n} : ${x(e.type,t)}) = ${o}`:`${n} : ${x(e.type,t)}`}function du(e,t=new Set){var d;let n=e.parameters.map(c=>fu(c,t)).join(", "),r=e.forallParameters.length>0?`forall(${e.forallParameters.map(c=>fu(c,t)).join(", ")})`:"",o="";e.variadicParameter&&(e.variadicParameter.label==="..."?o="...":e.variadicParameter.isQuote?o=`...(quote(${e.variadicParameter.label}))`:e.variadicParameter.isCompileTimeOnly?o=`...(compt(${e.variadicParameter.label}))`:o=`...(${e.variadicParameter.label})`);let i=x(e.return.type,t),a=i;e.return.isUnquote?e.return.label?a=`(unquote(${e.return.label}) : ${i})`:a=`unquote(${i})`:e.return.isCompileTimeOnly&&(e.return.label?a=`(compt(${e.return.label}) : ${i})`:a=`compt(${i})`);let s=[r,n,o].filter(c=>!!c).join(", "),l=(d=e.SelfType)==null?void 0:d.typeName;return`${l?`(${l}) `:""}fn(${s}) -> ${a}`}function x(e,t=new Set){if(e.id&&t.has(e.id))return e.typeName||`<circular:${e.tag}>`;e.id&&t.add(e.id);try{return ed(e,t)}finally{e.id&&t.delete(e.id)}}function ed(e,t){if(!e)return"unknown";switch(e.tag){case"unit":return"unit";case"bool":return"bool";case"usize":return"usize";case"isize":return"isize";case"u8":return"u8";case"i8":return"i8";case"u16":return"u16";case"i16":return"i16";case"u32":return"u32";case"i32":return"i32";case"u64":return"u64";case"i64":return"i64";case"f32":return"f32";case"f64":return"f64";case"Type":return"level"in e&&typeof e.level=="number"&&e.level>0?`Type(${e.level})`:"Type";case"Array":return`[${x(e.childType,t)}; ${je(e.length)}]`;case"Slice":return`[${x(e.childType,t)}]`;case"Tuple":return e.fields.length===0?"()":`(${e.fields.map(n=>zr(n,t)).join(", ")}${e.fields.length===1?",":""})`;case"Struct":{let n=e;return n.typeName?n.typeName:`${n.typeName?`(${n.typeName}) `:""}${n.isReferenceSemantics?"object":n.isNewtype?"newtype":"struct"}(${n.fields.map(r=>zr(r,t)).join(", ")})`}case"Enum":{let n=e;if(n.typeName){let r=n.typeName;return n.requiredVariantNames??n.selectedVariantName?`${r} (${n.requiredVariantNames?`${n.requiredVariantNames.map(o=>`.${o}`).join(" | ")} required`:`.${n.selectedVariantName} selected`})`:r}return`${n.typeName?`(${n.typeName}) `:""}enum(${n.variants.map(r=>`${r.name}${r.fields?`(${r.fields.map(o=>zr(o,t)).join(", ")})`:""}`).join(", ")})`}case"Union":{let n=e;if(n.typeName)return n.typeName;let r=n.fields;return`${n.typeName?`(${n.typeName}) `:""}${n.typeName?"union":n.id}(${r.map(o=>zr(o,t)).join(", ")})`}case"Module":{let n=e;if(Ut(n))return`Fn${du(n.isFn.callType,t).slice(2)}`;if(Wt(n))return`Future(${x(n.isFuture.outputType,t)})`;let r;return n.typeName?r=n.typeName:r=`${n.typeName?`(${n.typeName}) `:""}module(${n.fields.map(o=>Xf(o,t)).join(", ")})`,n.receiverType&&(r=`(${x(n.receiverType,t)} <: ${r})`),r}case"Function":{let n=e;return n.typeName?n.typeName:du(n,t)}case"SomeType":{let n=e;if(n.typeName)return n.typeName;if(n.functionApplication)return T(n.functionApplication);let r=[];if(n.requiredModules&&n.requiredModules.length>0)for(let o of n.requiredModules)r.push(x(o,t));if(n.negativeModules&&n.negativeModules.length>0)for(let o of n.negativeModules)r.push(`!(${x(o,t)})`);return r.length>0?`${n.name||"Impl"}(${r.join(", ")})`:n.name||"Impl()"}case"Ptr":return`*(${x(e.childType,t)})`;case"Iso":return`Iso(${x(e.childType,t)})`;case"Expr":return"Expr";case"ComptList":return`ComptList(${x(e.childType)})`;case"Dyn":{let n=e;if(n.typeName)return n.typeName;let r=[];for(let o of n.requiredModules)r.push(x(o,t));if(n.negativeModules&&n.negativeModules.length>0)for(let o of n.negativeModules)r.push(`!(${x(o,t)})`);return`Dyn(${r.join(", ")})`}default:return`${e.tag}`}}var mu=64;function Ji(){return mu}function Xi(){return mu/8}function td(e){let t=dr(e.childType);if(t===null)return null;if(t===-1)return-1;let n=e.length;if(ct(n)){let r=BigInt(n.value);if(r<0)throw new Error("Array length cannot be negative");return Number(r)*t}return null}function nd(e){let t=0;for(let n of e.fields){let r=dr(n.type);if(r===null)return null;if(r===-1)return-1;t+=r}return t}function rd(e){let t=0;for(let n of e.fields){let r=dr(n.type);if(r===null)return null;if(r===-1)return-1;t+=r}return t}function od(e){let t=0,n=0;for(let y of e.variants){let g=0;if(y.fields)for(let h of y.fields){let _=dr(h.type);if(_===null)return null;if(_===-1)return-1;g+=_;let E=Xn(h.type);if(E===null)return null;n=Math.max(n,E*8)}t=Math.max(t,g)}let r=Math.ceil(Math.ceil(Math.log2(e.variants.length))/8)*8,o=32,i=Math.max(n,8),a=Math.max(o,i),s=r/8,l=i/8,u=(l-s%l)%l*8,d=r+u+t,c=d/8,f=a/8,m=(f-c%f)%f*8;return d+m}function id(e){let t=0;for(let n of e.fields){let r=dr(n.type);if(r===null)return null;if(r===-1)return-1;t=Math.max(t,r)}return t}function Xn(e){if(ee(e))return null;if(Be(e)||ft(e)||kt(e)||Bt(e)||Pt(e)||mt(e)||Ee(e)||dt(e))return 1;if(vn(e))return 1;if(ho(e)||vo(e))return Xi();if(nr(e)||To(e))return 1;if($o(e)||Eo(e))return 2;if(Co(e)||ko(e))return 4;if(bo(e)||Fo(e))return 8;if(wo(e))return 4;if(Vo(e))return 8;if(Oe(e))return Xn(e.childType);if(He(e)){let t=1;for(let n of e.fields){let r=Xn(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else if($e(e)){if(e.isReferenceSemantics)return Xi();if(e.isNewtype)return Xn(e.fields[0].type);let t=1;for(let n of e.fields){let r=Xn(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else if(Ve(e)){let t=1;for(let n of e.variants)if(n.fields)for(let r of n.fields){let o=Xn(r.type);if(o===null)return null;t=Math.max(t,o)}return t}else if(ot(e)){let t=1;for(let n of e.fields){let r=Xn(n.type);if(r===null)return null;t=Math.max(t,r)}return t}else{if(ce(e))return Xi();if(De(e))return Xi()}return null}function dr(e){return ee(e)?null:Be(e)||ft(e)||kt(e)||Bt(e)||Pt(e)||mt(e)||Ee(e)||dt(e)?0:vn(e)?8:ho(e)||vo(e)?Ji():nr(e)||To(e)?8:$o(e)||Eo(e)?16:Co(e)||ko(e)?32:bo(e)||Fo(e)?64:wo(e)?32:Vo(e)?64:Oe(e)?td(e):He(e)?nd(e):$e(e)?e.isReferenceSemantics?Ji():e.isNewtype?dr(e.fields[0].type):rd(e):Ve(e)?od(e):ot(e)?id(e):ce(e)||De(e)?Ji():null}function tr(e,t){if(rr(e))throw st([{token:t,errorMessage:`Cannot use 'void' type here.
110
+ Please consider use 'unit' type instead.
111
+ `}])}function go(e,t=new Set){if(!$t(e))return!1;if(t.has(e.id))return!0;t.add(e.id);try{for(let n of e.fields)if(vr(n.type,e,t))return!0;return!1}finally{t.delete(e.id)}}function vr(e,t,n){if($e(e)&&e.id===t.id)return!0;if($e(e)&&e.isReferenceSemantics)return go(e,new Set(n));if(Ve(e)){for(let r of e.variants)if(r.fields){for(let o of r.fields)if(vr(o.type,t,n))return!0}}if(ee(e))return e.resolvedConcreteType?vr(e.resolvedConcreteType,t,n):!0;if(Oe(e)||at(e))return vr(e.childType,t,n);if(He(e)){for(let r of e.fields)if(vr(r.type,t,n))return!0}if(ot(e)){for(let r of e.fields)if(vr(r.type,t,n))return!0}return Ne(e)?!0:(De(e),!1)}function Rn(e,t){return t?e.id===t.id?!0:Oe(e)||at(e)||De(e)?Rn(e.childType,t):He(e)?e.fields.some(n=>Rn(n.type,t)):$e(e)?e.fields.some(n=>Rn(n.type,t)):ot(e)?e.fields.some(n=>Rn(n.type,t)):Ve(e)?e.variants.some(n=>{var r;return(r=n.fields)==null?void 0:r.some(o=>Rn(o.type,t))}):ce(e)?Rn(e.return.type,t):!1:!1}function xo(e){return e.tag==="unit"||e.tag==="bool"||e.tag==="usize"||e.tag==="isize"||e.tag==="u8"||e.tag==="i8"||e.tag==="u16"||e.tag==="i16"||e.tag==="u32"||e.tag==="i32"||e.tag==="u64"||e.tag==="i64"||e.tag==="f32"||e.tag==="f64"||e.tag==="char"||e.tag==="short"||e.tag==="ushort"||e.tag==="int"||e.tag==="uint"||e.tag==="long"||e.tag==="ulong"||e.tag==="longlong"||e.tag==="ulonglong"||e.tag==="longdouble"}function Be(e){return(e==null?void 0:e.tag)==="unit"}function kt(e){return(e==null?void 0:e.tag)==="compt_int"}function Bt(e){return(e==null?void 0:e.tag)==="compt_float"}function Pt(e){return(e==null?void 0:e.tag)==="compt_string"}function mt(e){return(e==null?void 0:e.tag)==="ComptList"}function Er(e){return mt(e)&&dt(e.childType)}function vn(e){return(e==null?void 0:e.tag)==="bool"}function ho(e){return(e==null?void 0:e.tag)==="usize"}function vo(e){return(e==null?void 0:e.tag)==="isize"}function nr(e){return(e==null?void 0:e.tag)==="u8"}function To(e){return(e==null?void 0:e.tag)==="i8"}function $o(e){return(e==null?void 0:e.tag)==="u16"}function Eo(e){return(e==null?void 0:e.tag)==="i16"}function Co(e){return(e==null?void 0:e.tag)==="u32"}function ko(e){return(e==null?void 0:e.tag)==="i32"}function bo(e){return(e==null?void 0:e.tag)==="u64"}function Fo(e){return(e==null?void 0:e.tag)==="i64"}function wo(e){return(e==null?void 0:e.tag)==="f32"}function Vo(e){return(e==null?void 0:e.tag)==="f64"}function dt(e){return(e==null?void 0:e.tag)==="Expr"}function Oe(e){return(e==null?void 0:e.tag)==="Array"}function at(e){return(e==null?void 0:e.tag)==="Slice"}function He(e){return(e==null?void 0:e.tag)==="Tuple"}function ot(e){return(e==null?void 0:e.tag)==="Union"}function Ve(e){return(e==null?void 0:e.tag)==="Enum"}function $e(e){return(e==null?void 0:e.tag)==="Struct"}function $t(e){return(e==null?void 0:e.tag)==="Struct"&&e.isReferenceSemantics}function Da(e){return(e==null?void 0:e.tag)==="Struct"&&e.isNewtype}function Ee(e){return(e==null?void 0:e.tag)==="Module"}function Ut(e){return(e==null?void 0:e.tag)==="Module"&&!!e.isFn}function ce(e){return(e==null?void 0:e.tag)==="Function"}function ta(e){return(e==null?void 0:e.tag)==="Function"&&e.return.isCompileTimeOnly}function ft(e){return(e==null?void 0:e.tag)==="Type"}function yu(e){return ft(e)&&e.tag==="Type"&&e.level===0}function ee(e){return(e==null?void 0:e.tag)==="SomeType"}function De(e){return(e==null?void 0:e.tag)==="Ptr"}function gt(e){return(e==null?void 0:e.tag)==="Iso"}function Ne(e){return(e==null?void 0:e.tag)==="Dyn"}function Xt(e){if(ee(e)){let t=e;if(Pe(t))return!0;if(t.resolvedConcreteType)return Xt(t.resolvedConcreteType)}return $t(e)||Ne(e)||gt(e)}function Tr(e){return(e==null?void 0:e.tag)==="u8"||(e==null?void 0:e.tag)==="i8"||(e==null?void 0:e.tag)==="u16"||(e==null?void 0:e.tag)==="i16"||(e==null?void 0:e.tag)==="u32"||(e==null?void 0:e.tag)==="i32"||(e==null?void 0:e.tag)==="u64"||(e==null?void 0:e.tag)==="i64"||(e==null?void 0:e.tag)==="usize"||(e==null?void 0:e.tag)==="isize"}function $r(e){return(e==null?void 0:e.tag)==="f32"||(e==null?void 0:e.tag)==="f64"}function ea(e){return(e==null?void 0:e.tag)==="char"}function rr(e){return(e==null?void 0:e.tag)==="void"}function Wt(e){return Ee(e)&&e.isFuture!==void 0}function _u(e){return Ee(e)&&e.isConcrete!==void 0}function In(e){return!!e&&(e.tag==="char"||e.tag==="short"||e.tag==="ushort"||e.tag==="int"||e.tag==="uint"||e.tag==="long"||e.tag==="ulong"||e.tag==="longlong"||e.tag==="ulonglong"||e.tag==="longdouble")}function Nn(e){var r;if(!e||(r=e.return)!=null&&r.isCompileTimeOnly)return!1;let t=e.parameters.some(o=>o.isCompileTimeOnly)||e.forallParameters.length>0,n=e.parameters.some(o=>!o.isCompileTimeOnly&&ee(o.type)&&!Pe(o.type));return t||n}function yn(e){var t;return $t(e)?e.fields.length===1&&e.fields[0].label==="*"&&!!((t=e.typeName)!=null&&t.startsWith("Box(")):!1}function W(e,t,n=!1,r=new Set){var a,s;let o=e.type.id,i=t.type.id;if(o&&i&&($e(e.type)||Ve(e.type)||ot(e.type))&&($e(t.type)||Ve(t.type)||ot(t.type))){let l=`${o}:${i}`;if(r.has(l))return!0;r.add(l)}if(xo(e.type)&&xo(t.type))return e.type.tag===t.type.tag;if((kt(e.type)||e.type.tag==="u8"||e.type.tag==="i8"||e.type.tag==="u16"||e.type.tag==="i16"||e.type.tag==="u32"||e.type.tag==="i32"||e.type.tag==="u64"||e.type.tag==="i64"||e.type.tag==="usize"||e.type.tag==="isize"||In(e.type))&&kt(t.type))return!(n&&!kt(e.type));if((Bt(e.type)||e.type.tag==="f32"||e.type.tag==="f64")&&Bt(t.type))return!(n&&!Bt(e.type));if((Pt(e.type)||at(e.type)&&nr(e.type.childType)||De(e.type)&&(nr(e.type.childType)||ea(e.type.childType)))&&Pt(t.type))return!0;if(In(e.type)&&In(t.type))return e.type.tag===t.type.tag;if(dt(e.type)&&dt(t.type))return!0;if(mt(e.type)&&mt(t.type))return W({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(Oe(e.type)&&Oe(t.type))return Lt({value:e.type.length,env:e.env},{value:t.type.length,env:t.env})&&W({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(at(e.type)&&at(t.type))return W({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(He(e.type)&&He(t.type)){if(e.type.fields.length!==t.type.fields.length)return!1;for(let l=0;l<e.type.fields.length;l++){let u=e.type.fields[l],d=t.type.fields[l];if(!W({type:u.type,env:e.env},{type:d.type,env:t.env},n,r))return!1}return!0}if($e(e.type)&&$e(t.type)){if(e.type.fields.length!==t.type.fields.length||e.type.id!==t.type.id&&!Ye(e.type)&&!Ye(t.type))return!1;if(e.type.id===t.type.id)return!0;for(let l=0;l<e.type.fields.length;l++){let u=e.type.fields[l],d=t.type.fields[l];if(u.label!==d.label||!W({type:u.type,env:e.env},{type:d.type,env:t.env},n,r))return!1}return!0}if(Ve(e.type)&&Ve(t.type)){if(e.type.id===t.type.id)return!0;if(e.type.variants.length!==t.type.variants.length)return!1;for(let l=0;l<e.type.variants.length;l++){let u=e.type.variants[l],d=t.type.variants[l];if(u.name!==d.name||((a=u.fields)==null?void 0:a.length)!==((s=d.fields)==null?void 0:s.length))return!1;if(u.fields)for(let c=0;c<u.fields.length;c++){let f=u.fields[c],m=d.fields[c];if(f.label!==m.label||!W({type:f.type,env:e.env},{type:m.type,env:t.env},n,r))return!1}}return e.type.requiredVariantNames&&(t.type.selectedVariantName&&!e.type.requiredVariantNames.includes(t.type.selectedVariantName)||!t.type.selectedVariantName)?!1:!e.type.selectedVariantName}if(ot(e.type)&&ot(t.type)){if(e.type.fields.length!==t.type.fields.length||e.type.id!==t.type.id&&!Ye(e.type)&&!Ye(t.type))return!1;if(e.type.id===t.type.id)return!0;for(let l=0;l<e.type.fields.length;l++){let u=e.type.fields[l],d=t.type.fields[l];if(u.label!==d.label||!W({type:u.type,env:e.env},{type:d.type,env:t.env},n,r))return!1}return!0}if(Ee(e.type))return Ee(t.type)?Ut(e.type)?!(!Ut(t.type)||!gu({type:e.type.isFn.callType,env:e.env},{type:t.type.isFn.callType,env:t.env},n)):Wt(e.type)?!(!Wt(t.type)||!W({type:e.type.isFuture.outputType,env:e.env},{type:t.type.isFuture.outputType,env:t.env},n,r)):e.type.id===t.type.id:ft(t.type)&&t.type.baseType&&t.type.baseType.module&&Ee(e.type)?W({type:e.type,env:e.env},{type:t.type.baseType.module,env:t.env},n,r):!1;if(ce(e.type)&&ce(t.type))return gu({type:e.type,env:e.env},{type:t.type,env:t.env},n);if(ft(e.type)&&ft(t.type))return Ql(e.type,t.type);if(De(e.type)&&De(t.type))return W({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(gt(e.type)&&gt(t.type))return W({type:e.type.childType,env:e.env},{type:t.type.childType,env:t.env},n,r);if(e.type.tag==="void"&&t.type.tag==="void")return!0;if(Ne(e.type)&&Ne(t.type)){for(let l of e.type.requiredModules)if(!t.type.requiredModules.find(d=>W({type:l,env:e.env},{type:d,env:t.env},n,r)))return!1;if(e.type.negativeModules&&e.type.negativeModules.length>0){for(let l of e.type.negativeModules)if(t.type.requiredModules.find(d=>W({type:l,env:e.env},{type:d,env:t.env},n,r)))return!1}return!0}if(ee(e.type)){if(Ne(t.type))return!0;if(ee(t.type)){if(e.type===t.type)return!0;if(e.type.id===t.type.id)return e.type.resolvedConcreteType?t.type.resolvedConcreteType?W({type:e.type.resolvedConcreteType,env:e.env},{type:t.type.resolvedConcreteType,env:t.env},n,r):!1:!0;let l=e.type.requiredModules??[],u=t.type.requiredModules??[];if(n&&l.length!==u.length)return!1;for(let d of l)if(!u.find(f=>W({type:d,env:e.env},{type:f,env:t.env},n,r)))return!1;if(e.type.negativeModules&&e.type.negativeModules.length>0){for(let d of e.type.negativeModules)if(u.find(f=>W({type:d,env:e.env},{type:f,env:t.env},n,r)))return!1}if(e.type.resolvedConcreteType&&t.type.resolvedConcreteType){if(!W({type:e.type.resolvedConcreteType,env:e.env},{type:t.type.resolvedConcreteType,env:t.env},n,r))return!1}else if(n&&(e.type.resolvedConcreteType||t.type.resolvedConcreteType))return!1;return!0}else{let l=e.type.requiredModules??[];if(l.length>0){for(let c of l)if(!_o({targetType:t.type,moduleType:c,env:e.env}))break;if(e.type.negativeModules&&e.type.negativeModules.length>0){for(let c of e.type.negativeModules)if(_o({targetType:t.type,moduleType:c,env:e.env}))return!1}let d=!0;for(let c of l)if(!_o({targetType:t.type,moduleType:c,env:e.env})){d=!1;break}if(d)return!0}let u=fn(e.env,e.type);return e.type===u?!1:W({type:u,env:e.env},t,n,r)}}else if(ee(t.type)){if(t.type.resolvedConcreteType&&W(e,{type:t.type.resolvedConcreteType,env:t.env},n,r))return!0;let l=fn(t.env,t.type);return t.type===l?!1:W(e,{type:l,env:t.env},n,r)}return!1}function gu(e,t,n=!1){if(e.type===t.type)return!0;if(e.type.parameters.length!==t.type.parameters.length||e.type.forallParameters.length!==t.type.forallParameters.length)return!1;try{let{expectedEnv:o,givenEnv:i}=pt({type:e.type,env:e.env},{type:t.type,env:t.env});e.env=o,t.env=i}catch{return!1}for(let o=0;o<e.type.forallParameters.length;o++){let i=e.type.forallParameters[o],a=t.type.forallParameters[o];if(!W({type:i.type,env:e.env},{type:a.type,env:t.env},n))return!1}for(let o=0;o<e.type.parameters.length;o++){let i=e.type.parameters[o],a=t.type.parameters[o];if(i.isCompileTimeOnly!==a.isCompileTimeOnly||!W({type:i.type,env:e.env},{type:a.type,env:t.env},n))return!1}return W({type:e.type.return.type,env:e.env},{type:t.type.return.type,env:t.env},n)}function na(e,t,n){let r=!1,o=0;for(let i of t){let a=i.type;if(n.includes(i))throw p({token:n[n.length-1].exprs.expr.token,errorMessage:`Recursive type has infinite size in field "${n[n.length-1].label}"
112
+ Insert some indirection (e.g., a pointer '*' or reference '&') to break the cycle.`});if($t(a))continue;let s=[...n,i],l=At(a,s);ft(l)&&(o=Math.max(o,l.level),l.tag==="Type"&&(r=!0))}return o>0?dn(o):r?lt(e):lt(e)}function At(e,t=[]){if(Ne(e))return lt(e);if(xo(e))return lt(e);if(ft(e))return dn(e.level+1);if(kt(e)||Bt(e)||Pt(e)||mt(e))return lt(e);if(dt(e))return lt(e);if(ce(e))return lt(e);if(Ut(e))return lt(e);if(Oe(e))return At(e.childType,t);if(at(e))return lt(e);if(He(e))return na(e,e.fields.filter(n=>!n.isCompileTimeOnly),t);if($e(e))return na(e,e.fields.filter(n=>!n.isCompileTimeOnly),t);if(Ve(e)){let n=[];for(let r of e.variants)r.fields&&n.push(...r.fields.filter(o=>!o.isCompileTimeOnly));return na(e,n,t)}else{if(ot(e))return na(e,e.fields.filter(n=>!n.isCompileTimeOnly),t);if(Ee(e))return dn(1,e);if(ee(e))return e.parentType;if(De(e))return lt(e);if(gt(e))return lt(e);if(Wt(e))return lt(e);if(rr(e))return lt(e);throw new Error(`Unknown type tag: ${e.tag}`)}}function hu(e){var t,n,r;if((t=e.exprs.labelExpr)!=null&&t.token)return e.exprs.labelExpr.token;if((n=e.exprs.typeExpr)!=null&&n.token)return e.exprs.typeExpr.token;if((r=e.exprs.defaultValueExpr)!=null&&r.token)return e.exprs.defaultValueExpr.token;throw new Error("Cannot get token for function parameter")}function yt(e){switch(e.tag){case"Atom":return{...e,$:void 0};case"FuncCall":return{...e,func:yt(e.func),args:e.args.map(yt),$:void 0}}}function V(e){return(e==null?void 0:e.tag)==="FuncCall"}function j(e){return(e==null?void 0:e.tag)==="Atom"}function en(e,t){return e.tag==="Atom"&&(typeof t=="string"?e.token.value===t:t.includes(e.token.value))}function Rr(e){return e.tag==="Atom"&&e.token.type==="operator"}function v(e,t,n){if(e.tag!=="FuncCall"||e.func.tag!=="Atom")return!1;let r=e.func.token.value;return e.func.token.type==="backtick_identifier"&&(r=r.slice(1,-1)),e.tag==="FuncCall"&&e.func.tag==="Atom"&&(typeof t=="string"?r===t:t.includes(r))&&(n===void 0||e.args.length===n)}function Ce(e,t,n){if(!V(e))throw p({token:e.token,errorMessage:`Expected function call, got atom:
113
+ ${T(e)}`});if(!v(e,t))throw p({token:e.token,errorMessage:`Expected function call of ${Array.isArray(t)?t.map(r=>`"${r}"`).join(" or "):`"${t}"`}, got:
114
+ ${T(e)}`});if(n!==void 0&&e.args.length!==n)throw p({token:e.token,errorMessage:`Expected ${n} arguments, got ${e.args.length}:
115
+ ${T(e)}`})}function ai(e,t){if(e.tag!==t.tag)return!1;if(e.tag==="Atom"&&t.tag==="Atom")return e.token.value===t.token.value;if(e.tag==="FuncCall"&&t.tag==="FuncCall"){if(!ai(e.func,t.func)||e.args.length!==t.args.length)return!1;for(let n=0;n<e.args.length;n++)if(!ai(e.args[n],t.args[n]))return!1;return!0}return!1}var A={compt:["compt"],ref:["ref"],forall:["forall","\u2200"],where:["where"],quote:["quote",":"],unquote:["unquote","#"],unquote_splicing:["unquote_splicing","...#"],return:["return"],recur:["recur"],fn:["fn"],unsafe_fn:["unsafe_fn"],extern:["extern"],cond:["cond"],type:["type"],match:["match"],test:["test"],struct:["struct"],object:["object"],newtype:["newtype"],enum:["enum"],union:["union"],module:["module"],impl:["impl"],Impl:["Impl"],begin:["begin"],module_begin:["module_begin"],import:["import"],export:["export"],open:["open"],clone:["clone","%"],break:["break"],continue:["continue"],while:["while"],if:["if"],op_and:["&&"],op_or:["||"],not:["not"],gensym:["gensym"],dyn:["dyn"],Dyn:["Dyn"],Fn:["Fn"],c_include:["c_include"],undefined:["undefined"],null:["null"],true:["true"],false:["false"],unique:["unique","^"],Ptr:["*"],Iso:["Iso"],Tuple:["Tuple"],Array:["Array"],Slice:["Slice"],Future:["Future"],Concrete:["Concrete"],Type:["Type"],Module:["Module"],ComptList:["ComptList"],tuple:"tuple",array:"array",compt_list:"compt_list"},C={compt_expect_error:["compt_expect_error"],compt_assert:["compt_assert"],compt_print:["compt_print"],va_start:["va_start"],typeof:["typeof"],sizeof:["sizeof"],alignof:["alignof"],consume:["consume"],macro_expand:["macro_expand"],as:["as"],the:["the"],do:["do"],rc:"rc",async:["async"],await:["await"],__yo_thread_set_maximum_threads:["__yo_thread_set_maximum_threads"],__yo_ptr_add:["__yo_ptr_add"],__yo_ptr_sub:["__yo_ptr_sub"],__yo_ptr_diff:["__yo_ptr_diff"],__yo_ptr_eq:["__yo_ptr_eq"],__yo_ptr_neq:["__yo_ptr_neq"],__yo_ptr_lt:["__yo_ptr_lt"],__yo_ptr_lte:["__yo_ptr_lte"],__yo_ptr_gt:["__yo_ptr_gt"],__yo_ptr_gte:["__yo_ptr_gte"],__yo_address_of:["&"],__yo_ptr_deref:["__yo_ptr_deref"],__yo_ptr_set:["__yo_ptr_set"],__yo_slice_len:["__yo_slice_len"],__yo_as:["__yo_as"],__yo_expr_is_atom:["__yo_expr_is_atom"],__yo_expr_is_fn_call:["__yo_expr_is_fn_call"],__yo_expr_get_callee:["__yo_expr_get_callee"],__yo_expr_get_args:["__yo_expr_get_args"],__yo_expr_to_string:["__yo_expr_to_string"],__yo_expr_eq:["__yo_expr_eq"],__yo_compt_list_car:["__yo_compt_list_car"],__yo_compt_list_cdr:["__yo_compt_list_cdr"],__yo_compt_list_cons:["__yo_compt_list_cons"],__yo_compt_list_append:["__yo_compt_list_append"],__yo_compt_list_length:["__yo_compt_list_length"],__yo_compt_list_element_type:["__yo_compt_list_element_type"],__yo_compt_int_add:["__yo_compt_int_add"],__yo_compt_int_sub:["__yo_compt_int_sub"],__yo_compt_int_mul:["__yo_compt_int_mul"],__yo_compt_int_div:["__yo_compt_int_div"],__yo_compt_int_mod:["__yo_compt_int_mod"],__yo_compt_int_eq:["__yo_compt_int_eq"],__yo_compt_int_neq:["__yo_compt_int_neq"],__yo_compt_int_lt:["__yo_compt_int_lt"],__yo_compt_int_lte:["__yo_compt_int_lte"],__yo_compt_int_gt:["__yo_compt_int_gt"],__yo_compt_int_gte:["__yo_compt_int_gte"],__yo_compt_int_as:["__yo_compt_int_as"],__yo_compt_int_neg:["__yo_compt_int_neg"],__yo_compt_int_to_float:["__yo_compt_int_to_float"],__yo_compt_int_to_string:["__yo_compt_int_to_string"],__yo_compt_float_add:["__yo_compt_float_add"],__yo_compt_float_sub:["__yo_compt_float_sub"],__yo_compt_float_mul:["__yo_compt_float_mul"],__yo_compt_float_div:["__yo_compt_float_div"],__yo_compt_float_eq:["__yo_compt_float_eq"],__yo_compt_float_neq:["__yo_compt_float_neq"],__yo_compt_float_lt:["__yo_compt_float_lt"],__yo_compt_float_lte:["__yo_compt_float_lte"],__yo_compt_float_gt:["__yo_compt_float_gt"],__yo_compt_float_gte:["__yo_compt_float_gte"],__yo_compt_float_as:["__yo_compt_float_as"],__yo_compt_float_neg:["__yo_compt_float_neg"],__yo_compt_float_to_int:["__yo_compt_float_to_int"],__yo_compt_float_to_string:["__yo_compt_float_to_string"],__yo_u8_add:["__yo_u8_add"],__yo_u8_sub:["__yo_u8_sub"],__yo_u8_mul:["__yo_u8_mul"],__yo_u8_div:["__yo_u8_div"],__yo_u8_mod:["__yo_u8_mod"],__yo_u8_eq:["__yo_u8_eq"],__yo_u8_neq:["__yo_u8_neq"],__yo_u8_lt:["__yo_u8_lt"],__yo_u8_lte:["__yo_u8_lte"],__yo_u8_gt:["__yo_u8_gt"],__yo_u8_gte:["__yo_u8_gte"],__yo_u8_neg:["__yo_u8_neg"],__yo_u8_to_string:["__yo_u8_to_string"],__yo_u8_as:["__yo_u8_as"],__yo_i8_add:["__yo_i8_add"],__yo_i8_sub:["__yo_i8_sub"],__yo_i8_mul:["__yo_i8_mul"],__yo_i8_div:["__yo_i8_div"],__yo_i8_mod:["__yo_i8_mod"],__yo_i8_eq:["__yo_i8_eq"],__yo_i8_neq:["__yo_i8_neq"],__yo_i8_lt:["__yo_i8_lt"],__yo_i8_lte:["__yo_i8_lte"],__yo_i8_gt:["__yo_i8_gt"],__yo_i8_gte:["__yo_i8_gte"],__yo_i8_neg:["__yo_i8_neg"],__yo_i8_to_string:["__yo_i8_to_string"],__yo_i8_as:["__yo_i8_as"],__yo_u16_add:["__yo_u16_add"],__yo_u16_sub:["__yo_u16_sub"],__yo_u16_mul:["__yo_u16_mul"],__yo_u16_div:["__yo_u16_div"],__yo_u16_mod:["__yo_u16_mod"],__yo_u16_eq:["__yo_u16_eq"],__yo_u16_neq:["__yo_u16_neq"],__yo_u16_lt:["__yo_u16_lt"],__yo_u16_lte:["__yo_u16_lte"],__yo_u16_gt:["__yo_u16_gt"],__yo_u16_gte:["__yo_u16_gte"],__yo_u16_neg:["__yo_u16_neg"],__yo_u16_to_string:["__yo_u16_to_string"],__yo_u16_as:["__yo_u16_as"],__yo_i16_add:["__yo_i16_add"],__yo_i16_sub:["__yo_i16_sub"],__yo_i16_mul:["__yo_i16_mul"],__yo_i16_div:["__yo_i16_div"],__yo_i16_mod:["__yo_i16_mod"],__yo_i16_eq:["__yo_i16_eq"],__yo_i16_neq:["__yo_i16_neq"],__yo_i16_lt:["__yo_i16_lt"],__yo_i16_lte:["__yo_i16_lte"],__yo_i16_gt:["__yo_i16_gt"],__yo_i16_gte:["__yo_i16_gte"],__yo_i16_neg:["__yo_i16_neg"],__yo_i16_to_string:["__yo_i16_to_string"],__yo_i16_as:["__yo_i16_as"],__yo_u32_add:["__yo_u32_add"],__yo_u32_sub:["__yo_u32_sub"],__yo_u32_mul:["__yo_u32_mul"],__yo_u32_div:["__yo_u32_div"],__yo_u32_mod:["__yo_u32_mod"],__yo_u32_eq:["__yo_u32_eq"],__yo_u32_neq:["__yo_u32_neq"],__yo_u32_lt:["__yo_u32_lt"],__yo_u32_lte:["__yo_u32_lte"],__yo_u32_gt:["__yo_u32_gt"],__yo_u32_gte:["__yo_u32_gte"],__yo_u32_neg:["__yo_u32_neg"],__yo_u32_to_string:["__yo_u32_to_string"],__yo_u32_as:["__yo_u32_as"],__yo_i32_add:["__yo_i32_add"],__yo_i32_sub:["__yo_i32_sub"],__yo_i32_mul:["__yo_i32_mul"],__yo_i32_div:["__yo_i32_div"],__yo_i32_mod:["__yo_i32_mod"],__yo_i32_eq:["__yo_i32_eq"],__yo_i32_neq:["__yo_i32_neq"],__yo_i32_lt:["__yo_i32_lt"],__yo_i32_lte:["__yo_i32_lte"],__yo_i32_gt:["__yo_i32_gt"],__yo_i32_gte:["__yo_i32_gte"],__yo_i32_neg:["__yo_i32_neg"],__yo_i32_to_string:["__yo_i32_to_string"],__yo_i32_as:["__yo_i32_as"],__yo_u64_add:["__yo_u64_add"],__yo_u64_sub:["__yo_u64_sub"],__yo_u64_mul:["__yo_u64_mul"],__yo_u64_div:["__yo_u64_div"],__yo_u64_mod:["__yo_u64_mod"],__yo_u64_eq:["__yo_u64_eq"],__yo_u64_neq:["__yo_u64_neq"],__yo_u64_lt:["__yo_u64_lt"],__yo_u64_lte:["__yo_u64_lte"],__yo_u64_gt:["__yo_u64_gt"],__yo_u64_gte:["__yo_u64_gte"],__yo_u64_neg:["__yo_u64_neg"],__yo_u64_to_string:["__yo_u64_to_string"],__yo_u64_as:["__yo_u64_as"],__yo_i64_add:["__yo_i64_add"],__yo_i64_sub:["__yo_i64_sub"],__yo_i64_mul:["__yo_i64_mul"],__yo_i64_div:["__yo_i64_div"],__yo_i64_mod:["__yo_i64_mod"],__yo_i64_eq:["__yo_i64_eq"],__yo_i64_neq:["__yo_i64_neq"],__yo_i64_lt:["__yo_i64_lt"],__yo_i64_lte:["__yo_i64_lte"],__yo_i64_gt:["__yo_i64_gt"],__yo_i64_gte:["__yo_i64_gte"],__yo_i64_neg:["__yo_i64_neg"],__yo_i64_to_string:["__yo_i64_to_string"],__yo_i64_as:["__yo_i64_as"],__yo_usize_add:["__yo_usize_add"],__yo_usize_sub:["__yo_usize_sub"],__yo_usize_mul:["__yo_usize_mul"],__yo_usize_div:["__yo_usize_div"],__yo_usize_mod:["__yo_usize_mod"],__yo_usize_eq:["__yo_usize_eq"],__yo_usize_neq:["__yo_usize_neq"],__yo_usize_lt:["__yo_usize_lt"],__yo_usize_lte:["__yo_usize_lte"],__yo_usize_gt:["__yo_usize_gt"],__yo_usize_gte:["__yo_usize_gte"],__yo_usize_neg:["__yo_usize_neg"],__yo_usize_to_string:["__yo_usize_to_string"],__yo_usize_as:["__yo_usize_as"],__yo_isize_add:["__yo_isize_add"],__yo_isize_sub:["__yo_isize_sub"],__yo_isize_mul:["__yo_isize_mul"],__yo_isize_div:["__yo_isize_div"],__yo_isize_mod:["__yo_isize_mod"],__yo_isize_eq:["__yo_isize_eq"],__yo_isize_neq:["__yo_isize_neq"],__yo_isize_lt:["__yo_isize_lt"],__yo_isize_lte:["__yo_isize_lte"],__yo_isize_gt:["__yo_isize_gt"],__yo_isize_gte:["__yo_isize_gte"],__yo_isize_neg:["__yo_isize_neg"],__yo_isize_to_string:["__yo_isize_to_string"],__yo_isize_as:["__yo_isize_as"],__yo_f32_add:["__yo_f32_add"],__yo_f32_sub:["__yo_f32_sub"],__yo_f32_mul:["__yo_f32_mul"],__yo_f32_div:["__yo_f32_div"],__yo_f32_eq:["__yo_f32_eq"],__yo_f32_neq:["__yo_f32_neq"],__yo_f32_lt:["__yo_f32_lt"],__yo_f32_lte:["__yo_f32_lte"],__yo_f32_gt:["__yo_f32_gt"],__yo_f32_gte:["__yo_f32_gte"],__yo_f32_neg:["__yo_f32_neg"],__yo_f32_to_string:["__yo_f32_to_string"],__yo_f32_as:["__yo_f32_as"],__yo_f64_add:["__yo_f64_add"],__yo_f64_sub:["__yo_f64_sub"],__yo_f64_mul:["__yo_f64_mul"],__yo_f64_div:["__yo_f64_div"],__yo_f64_eq:["__yo_f64_eq"],__yo_f64_neq:["__yo_f64_neq"],__yo_f64_lt:["__yo_f64_lt"],__yo_f64_lte:["__yo_f64_lte"],__yo_f64_gt:["__yo_f64_gt"],__yo_f64_gte:["__yo_f64_gte"],__yo_f64_neg:["__yo_f64_neg"],__yo_f64_to_string:["__yo_f64_to_string"],__yo_f64_as:["__yo_f64_as"],__yo_compt_boolean_and:["__yo_compt_boolean_and"],__yo_compt_boolean_or:["__yo_compt_boolean_or"],__yo_compt_boolean_eq:["__yo_compt_boolean_eq"],__yo_compt_boolean_neq:["__yo_compt_boolean_neq"],__yo_compt_boolean_not:["__yo_compt_boolean_not"],__yo_compt_boolean_to_string:["__yo_compt_boolean_to_string"],__yo_compt_string_concat:["__yo_compt_string_concat"],__yo_compt_string_eq:["__yo_compt_string_eq"],__yo_compt_string_neq:["__yo_compt_string_neq"],__yo_compt_string_lt:["__yo_compt_string_lt"],__yo_compt_string_lte:["__yo_compt_string_lte"],__yo_compt_string_gt:["__yo_compt_string_gt"],__yo_compt_string_gte:["__yo_compt_string_gte"],__yo_compt_string_length:["__yo_compt_string_length"],__yo_compt_string_to_upper:["__yo_compt_string_to_upper"],__yo_compt_string_to_lower:["__yo_compt_string_to_lower"],__yo_compt_string_slice:["__yo_compt_string_slice"],__yo_type_to_string:["__yo_type_to_string"],__yo_type_contains_gc_type:["__yo_type_contains_gc_type"],__yo_type_can_form_gc_cycle:["__yo_type_can_form_gc_cycle"],__yo_are_types_compatible:["__yo_are_types_compatible"],__yo_type_impls:["__yo_type_impls"],__yo_var_print_info:["__yo_var_print_info"],__yo_var_is_owning_the_gc_value:["__yo_var_is_owning_the_gc_value"],__yo_var_has_other_aliases:["__yo_var_has_other_aliases"],__yo_op_add:["__yo_op_add"],__yo_op_sub:["__yo_op_sub"],__yo_op_mul:["__yo_op_mul"],__yo_op_div:["__yo_op_div"],__yo_op_mod:["__yo_op_mod"],__yo_op_neg:["__yo_op_neg"],__yo_op_eq:["__yo_op_eq"],__yo_op_neq:["__yo_op_neq"],__yo_op_lt:["__yo_op_lt"],__yo_op_lte:["__yo_op_lte"],__yo_op_gt:["__yo_op_gt"],__yo_op_gte:["__yo_op_gte"],__yo_op_not:["__yo_op_not"],__yo_op_bit_and:["__yo_op_bit_and"],__yo_op_bit_or:["__yo_op_bit_or"],__yo_op_bit_xor:["__yo_op_bit_xor"],__yo_op_bit_complement:["__yo_op_bit_complement"],__yo_op_bit_left_shift:["__yo_op_bit_left_shift"],__yo_op_bit_right_shift:["__yo_op_bit_right_shift"],c_include:["c_include"],panic:["panic"],__yo_decr_rc:["__yo_decr_rc"],__yo_incr_rc:["__yo_incr_rc"],__yo_decr_rc_atomic:["__yo_decr_rc_atomic"],__yo_incr_rc_atomic:["__yo_incr_rc_atomic"],__yo_rc_own:["__yo_rc_own"],__yo_iso_extract:["__yo_iso_extract"],__yo_iso_dispose:["__yo_iso_dispose"],__yo_gc_collect:["__yo_gc_collect"],__yo_dyn_drop:["__yo_dyn_drop"],__yo_dyn_dup:["__yo_dyn_dup"],__yo_sometype_drop:["__yo_sometype_drop"],__yo_sometype_dup:["__yo_sometype_dup"],___drop:["___drop"],___dispose:["___dispose"],___dup:["___dup"],dispose:["dispose"],__yo_noop:["__yo_noop"],__yo_return_self:["__yo_return_self"],__yo_ms_sleep:["__yo_ms_sleep"]};function qr(e){return!!(e.tag==="FuncCall"&&e.isInfix&&e.func.tag==="Atom"&&(e.func.token.type==="operator"||e.func.token.type==="backtick_identifier")&&e.args.length===2)}function T(e,t){let r={...{prettyPrint:!1,indentSize:2,maxLineLength:80,indentLevel:0},...t};return r.prettyPrint?pn(e,r):qn(e)}function qn(e){let t="";switch(e.tag){case"Atom":{t=e.token.value;break}case"FuncCall":{if(e.func.tag==="Atom"&&(e.func.token.type==="operator"||e.func.token.type==="."||e.func.token.type==="backtick_identifier")){if(e.args.length===1){e.func.token.value==="."?t=`${e.func.token.value}${qn(e.args[0])}`:t=`${e.func.token.value}(${qn(e.args[0])})`;break}else if(e.args.length===2&&e.isInfix){let o=qn(e.args[0]),i=qn(e.args[1]);o=qr(e.args[0])||Rr(e.args[0])?`(${o})`:o,i=qr(e.args[1])||Rr(e.args[1])?`(${i})`:i,e.func.token.value==="."?t=`(${o}.${i})`:t=`${o} ${e.func.token.value} ${i}`;break}}if(e.func.tag==="Atom"&&e.func.token.type==="identifier"&&e.func.token.value===A.tuple){e.args.length===1?t=`(${qn(e.args[0])},)`:t=`(${e.args.map(o=>qn(o)).join(", ").trim()})`;break}let n=qn(e.func);n=qr(e.func)||Rr(e.func)?`(${n})`:n;let r=e.args.map(o=>qn(o)).join(", ").trim();t=`${n}(${r})`;break}}return t}function pn(e,t){let n=" ".repeat(t.indentLevel*t.indentSize),r={...t,indentLevel:t.indentLevel+1},o=" ".repeat(r.indentLevel*t.indentSize);switch(e.tag){case"Atom":return e.token.value;case"FuncCall":{if(e.func.tag==="Atom"&&(e.func.token.type==="operator"||e.func.token.type==="."||e.func.token.type==="backtick_identifier")){if(e.args.length===1){if(e.func.token.value===".")return`${e.func.token.value}${pn(e.args[0],t)}`;{let u=pn(e.args[0],t);return`${e.func.token.value}(${u})`}}else if(e.args.length===2&&e.isInfix){let u=pn(e.args[0],t),d=pn(e.args[1],t);return u=qr(e.args[0])||Rr(e.args[0])?`(${u})`:u,d=qr(e.args[1])||Rr(e.args[1])?`(${d})`:d,e.func.token.value==="."?`(${u}.${d})`:`${u} ${e.func.token.value} ${d}`}}if(e.func.tag==="Atom"&&e.func.token.type==="identifier"&&e.func.token.value===A.tuple){if(e.args.length===0)return"()";if(e.args.length===1)return`(${pn(e.args[0],t)},)`;{let u=e.args.map(c=>pn(c,t)),d=`(${u.join(", ")})`;return d.length<=t.maxLineLength?d:`(
116
+ ${o}${u.join(`,
117
+ ${o}`)}
118
+ ${n})`}}let i=e.func.tag==="Atom"?e.func.token.value:null,a=i&&[...A.begin,...A.cond,...A.match,...A.fn,...A.if,...A.while].includes(i),s=pn(e.func,t);if(s=qr(e.func)||Rr(e.func)?`(${s})`:s,e.args.length===0)return`${s}()`;if(!a){let u=e.args.map(c=>pn(c,t)),d=`${s}(${u.join(", ")})`;if(d.length<=t.maxLineLength)return d}if(a){if(i===A.begin[0]){if(e.args.length===1){let d=pn(e.args[0],t);if(d.length<=t.maxLineLength&&!d.includes(`
119
+ `))return`${s}(${d})`}let u=e.args.map(d=>pn(d,r));return`${s}(
120
+ ${o}${u.join(`,
121
+ ${o}`)}
122
+ ${n})`}else if(i===A.cond[0]){let u=e.args.map(d=>{if(V(d)&&d.isInfix&&v(d,"=>")){let c=d.args[0],f=pn(d.args[1],r),m=pn(c,t);if(V(c)&&c.isInfix&&!v(c,"=>")&&(m=`(${m})`),f.includes(`
123
+ `)){let g=f.split(`
124
+ `).map((h,_)=>_===0?h:`${o}${h}`).join(`
125
+ `);return`${m} => ${g}`}else return`${m} => ${f}`}return pn(d,r)});return`${s}(
126
+ ${o}${u.join(`,
127
+ ${o}`)}
128
+ ${n})`}}let l=e.args.map(u=>pn(u,r));return`${s}(
129
+ ${o}${l.join(`,
130
+ ${o}`)}
131
+ ${n})`}}return qn(e)}function ze(e,t,n){if(!e.$)throw new Error(`Expected expression to be evaluated, but it is not:
132
+ ${T(e)}`);let{env:r,type:o,value:i,originType:a}=e.$,s=r.modulePath,l=t&&qe(o);if(e.$.variableName){let c=me(r,e.$.variableName);if(c.length>0){let m=c[c.length-1],y=m.isOwningTheGcValue?l:!1,g={...m,type:o,value:y?void 0:i,isCompileTimeOnly:y?!1:!!i,isOwningTheGcValue:y,isOwningTheSameGcValueAs:n};e.$.env=Xe(r,m,g),a||(e.$.originType=o);return}let{env:f}=we({env:r,variable:{name:e.$.variableName,type:o,value:l?void 0:i,isCompileTimeOnly:l?!1:!!i,initializedAtToken:e.token,isOwningTheGcValue:l,isOwningTheSameGcValueAs:n,consumedAtToken:void 0,token:e.token},addToBeginBlockFrame:!0});a||(e.$.originType=o),e.$.env=f;return}let u=Rl(s),{env:d}=we({env:r,variable:{name:u,type:o,value:l?void 0:i,isCompileTimeOnly:l?!1:!!i,initializedAtToken:e.token,isOwningTheGcValue:l,isOwningTheSameGcValueAs:n,consumedAtToken:void 0,token:e.token},addToBeginBlockFrame:!0});e.$.variableName=u,a||(e.$.originType=o),e.$.env=d}function Mo(e,t){let n=e.frames.length-1,r=[];for(let o=0;o<t.length;o++){let i=t[o];if(!i.$)throw st([{token:i.token,errorMessage:"Expected the body of the case to be evaluated, but it is not."}]);let a=i.$.env;r.push(a)}for(let o=0;o<r.length;o++)if(r[o].frames.length-1!==n)throw st([{token:t[o].token,errorMessage:"Frame level is different for different cases."}]);for(let o=0;o<=n;o++){let i=o,s=[...e.frames[o].variables],l=[[]];s.forEach(c=>{l[0].push({consumedAtToken:c.consumedAtToken,initializedAtToken:c.initializedAtToken,type:c.type,isOwningTheGcValue:c.isOwningTheGcValue??!1})});for(let c=0;c<r.length;c++){let y=r[c].frames[o].variables;if(o!==n&&s.length!==y.length)throw st([{token:t[c].token,errorMessage:`Frame level ${o} has different number of values for different cases.`}]);for(let g=0;g<s.length;g++){let h=s[g],_=y[g];if(h.name!==_.name)throw st([{token:t[c].token,errorMessage:`Frame level ${o} has different variable names for different cases.`}])}l.push([]),y.forEach(g=>{l[l.length-1].push({consumedAtToken:g.consumedAtToken,initializedAtToken:g.initializedAtToken,type:g.type,isOwningTheGcValue:g.isOwningTheGcValue??!1})})}let u=l.length,d=l[0].length;for(let c=0;c<d;c++){let f=s[c].name,m=[],y=[],g=[],h=[];for(let $=1;$<u;$++){let F=r[$-1].frames[i].variables;m.push(l[$][c].initializedAtToken),y.push(l[$][c].isOwningTheGcValue?F[c].token:void 0),g.push(l[$][c].consumedAtToken),h.push(l[$][c].type)}let _=m.map(($,b)=>({token:$,index:b})).filter(({token:$})=>!!$);if(_.length>1){let $=h[_[0].index],b=r[_[0].index];for(let F=1;F<_.length;F++){let M=h[_[F].index],L=r[_[F].index];if(ee($)&&ee(M)){let O=$.resolvedConcreteType,B=M.resolvedConcreteType;if(O&&B&&!W({type:O,env:b},{type:B,env:L}))throw st([{token:t[_[0].index].token,errorMessage:`Variable "${f}" has type Impl(...) but different concrete types across branches.
133
+ Impl(...) uses static dispatch and requires the same concrete type in all branches.
134
+ Consider using Dyn(...) for dynamic dispatch if different concrete types are needed.`},{token:m[_[0].index],errorMessage:`First branch has concrete type: ${x(O)}`},{token:m[_[F].index],errorMessage:`Conflicting branch has concrete type: ${x(B)}`}])}if($!==M&&!W({type:$,env:b},{type:M,env:L}))throw st([{token:t[_[0].index].token,errorMessage:`Variable "${f}" has incompatible types across different cases:`},{token:m[_[0].index],errorMessage:`First initialization: ${x($)}`},{token:m[_[F].index],errorMessage:`Conflicting initialization: ${x(M)}`}])}}if(m.length===1){if(m[0]&&!s[c].initializedAtToken)throw st([{token:s[c].token,errorMessage:`Variable "${s[c].name}" might not be initialized in all cases.`},{token:m[0],errorMessage:"Might be initialized here:"}])}else if(!s[c].initializedAtToken&&m.every($=>$)){let $={...s[c],initializedAtToken:m[0]};e=Xe(e,s[c],$),s[c]=$}else{let $=m.filter(F=>!!F),b=m.filter(F=>!F);if($.length>0&&b.length>0)throw st(m.map((F,M)=>({errorMessage:(M===0?`Variable "${f}" might be initialized in some cases but not initialized in other cases:
135
+ `:"")+(F?"Might be initialized here:":"Not initialized here:"),token:F??t[M].token})))}if(g.length===1){if(g[0]&&!s[c].consumedAtToken){let $={...s[c],consumedAtToken:g[0]};e=Xe(e,s[c],$),s[c]=$}}else if(!s[c].consumedAtToken&&g.every($=>$)){let $={...s[c],consumedAtToken:g[0]};e=Xe(e,s[c],$),s[c]=$}else{let $=g.filter(F=>!!F),b=g.filter(F=>!F);if($.length>0&&b.length>0)throw st(g.map((F,M)=>({errorMessage:(M===0?`Variable "${f}" is consumed in some cases but not in other cases:
136
+ `:"")+(F?"Consumed here:":"Not consumed here:"),token:F??t[M].token})))}if(!s[c].isOwningTheGcValue&&y.every($=>$)){let $={...s[c],isOwningTheGcValue:!0,isOwningTheSameGcValueAs:void 0};e=Xe(e,s[c],$),s[c]=$}else{let $=y.filter(F=>!!F),b=y.filter(F=>!F);if($.length>0&&b.length>0)throw st(y.map((F,M)=>({errorMessage:(M===0?`Variable "${f}" might be holding the Gc value in some cases but not holding the Gc value in other cases:
137
+ `:"")+(F?"Might be owning the Gc value here:":"Might be not owning the Gc value here:"),token:F??t[M].token})))}let E=s[c].id,k=[];for(let $=1;$<u;$++){let M=r[$-1].frames[i].variables[c];k.push(M.id)}if(k.some($=>$!==E)){let $=mr(e.modulePath,f),b={...s[c],id:$,isOwningTheSameGcValueAs:void 0};e=Xe(e,s[c],b),s[c]=b}}}return e}function Yn(e,t){e.$=t.$,e.args=t.args,e.func=t.func,e.isInfix=t.isInfix,e.tag=t.tag,e.token=t.token}function ra(e,t){V(e)||(e.tag=t.tag),Yn(e,t)}function Mn(e,t,n=!1){var a,s,l;if((a=e.$)!=null&&a.value&&G((s=e.$)==null?void 0:s.value))return t;let r=(l=e.$)==null?void 0:l.variableName;if(!r)return t;let o=me(t,r);if(o.length===0)throw st([{token:e.token,errorMessage:`Variable "${r}" is not defined.`}]);let i=o[o.length-1];if(i.consumedAtToken&&!n){let u=`use of moved value: \`${r}\``;throw st([{token:e.token,errorMessage:u},{token:i.consumedAtToken,errorMessage:"value moved here"}])}else t=Xe(t,i,{...i,consumedAtToken:e.token});return t}function xt(e,t){var r;if(!e.$||e.$.value||!e.$.variableName)return;let n=e.$.variableName;if(!n)throw p({token:e.token,errorMessage:`Expression does not have a variable name to call ${C.___dup} on:
138
+ ${T(e)}`});if(qe(e.$.type)){if(St(e.$.env.modulePath,n)&&!(j(e)&&e.token.value!==n)){let a=me(e.$.env,n);if(a.length>0){let s=a[a.length-1];if(s.isOwningTheGcValue){s.consumedAtToken||(e.$.env=Xe(e.$.env,s,{...s,consumedAtToken:e.token}));return}}}let o=Gt(`${C.___dup[0]}(${n})`),i=S({expr:o,env:e.$.env,context:{...t,expectedType:void 0}});if((r=i.$)!=null&&r.variableName){let a=me(i.$.env,i.$.variableName);if(a.length>0){let s=a[a.length-1];s.consumedAtToken||(i.$.env=Xe(i.$.env,s,{...s,consumedAtToken:i.token}))}}e.$.deferredDupExpressions=[i],e.$.env=i.$.env}}function Cr(e,t){var i;let n=(i=e.$)==null?void 0:i.variableName;if(!n)return;let r=me(t,n);if(r.length===0)throw st([{token:e.token,errorMessage:`Variable "${n}" is not defined.`}]);let o=r[r.length-1];if(o.consumedAtToken){let a=`use of moved value: \`${n}\``;throw st([{token:e.token,errorMessage:a},{token:o.consumedAtToken,errorMessage:"value moved here"}])}}var J={tag:"Unit",type:Br()};var Oa=!0;function ad({variablesToDrop:e,env:t,context:n}){let r=[],o=t;for(let i of e){let a=Gt(`${C.___drop[0]}(${i.name})`),s=S({expr:a,env:o,context:{...n,expectedType:{env:o,type:J.type}}});r.push(s),s.$&&s.$.env&&(o=s.$.env)}return{deferredDropExpressions:r.length>0?r:void 0,env:o}}function So(e,t){var r,o;if((r=e.$)!=null&&r.deferredDupExpressions)for(let i of e.$.deferredDupExpressions)So(i,t);if(V(e)&&V(e.func)&&v(e.func,".",2)&&j(e.func.args[0])&&j(e.func.args[1])&&e.func.args[1].token.value===C.___dup[0]&&e.args.length===0&&((o=e.$)!=null&&o.env)){let i=e.func.args[0].token.value,a=me(e.$.env,i);if(a.length>0){let s=a[a.length-1];t.has(s.id)||t.set(s.id,[]),t.get(s.id).push(e)}return}if(V(e)&&v(e,A.while))return;function n(i,a){let s=[];for(let l=a;l<i.args.length;l++){let u=i.args[l];if(V(u)&&v(u,"=>",2)){let d=u.args[1],c=vu(d);s.push(c)}}if(s.length>0){let l=s[0];for(let[u,d]of l)if(s.every(f=>f.has(u))){let f=[];for(let m of s)f.push(...m.get(u));t.set(u,f)}}}if(V(e)&&v(e,A.cond)){n(e,0);return}if(V(e)&&v(e,A.match)){e.args[0]&&So(e.args[0],t),n(e,1);return}if(V(e)){So(e.func,t);for(let i of e.args)So(i,t)}}function vu(e){let t=new Map;return So(e,t),t}function Ua(e){return V(e)&&v(e,A.tuple,0)}function sd(e){let t=e;for(;t.isOwningTheSameGcValueAs;)t=t.isOwningTheSameGcValueAs;return t.id}function Ba(e,t){var n;if((n=e.$)!=null&&n.deferredDupExpressions&&(e.$.deferredDupExpressions=e.$.deferredDupExpressions.filter(r=>!t.has(r)),e.$.deferredDupExpressions.length===0&&(e.$.deferredDupExpressions=void 0)),V(e)){Ba(e.func,t);for(let r of e.args)Ba(r,t)}}function Et({expr:e,env:t,context:n,variablesToAdd:r=[],isEvaluatingFunctionBodyBeginBlock:o=!1}){var _,E,k,w,$,b,F,M;if(!V(e)||!v(e,A.begin)){let L={tag:"FuncCall",func:{tag:"Atom",token:{...e.token,value:A.begin[0]}},args:[yt(e)],token:{...e.token,value:A.begin[0]}};Yn(e,L),e=e}let i=e.args,a=n.expectedType;if(i.length===0)return e.$={env:t,type:J.type,value:J,pathCollection:[]},e;t=ut(t,void 0,!0);for(let L=0;L<r.length;L++){let O=r[L],{env:B}=we({env:t,variable:O});t=B}let s=i[i.length-1],l;for(let L=0;L<i.length;L++){let O=i[L];if(j(O)&&en(O,A.return)||V(O)&&v(O,A.return)){if(L!==i.length-1&&!(L===i.length-2&&Ua(i[i.length-1])))throw p({token:O.token,errorMessage:'The "return" keyword can only be used as the last expression.'});if(V(O)&&Ce(O,A.return,1),!n.isEvaluatingFunctionBodyOrAsyncBlock)throw p({token:O.token,errorMessage:'The "return" keyword can only be used inside a function body or async block.'});if(l=O,j(O)){O.$={env:t,type:J.type,value:J,pathCollection:[],controlFlow:"return"},s=O;break}else{Ce(O,A.return,1);let B=O.args[0],P=S({expr:B,env:t,context:{...n,expectedType:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?{type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t}:n.expectedType}});if(!P.$)throw p({token:B.token,errorMessage:`Return expression is not evaluated correctly:
139
+ ${T(B)}`});if(((_=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:_.kind)==="function-body"&&ee(n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type)&&n.functionReturnImplConcreteType){let q=P.$.type;if(n.functionReturnImplConcreteType.length>0){let ne=n.functionReturnImplConcreteType[0];if(!W({type:ne.concreteType,env:ne.env},{type:q,env:t}))throw st([{token:O.token,errorMessage:`All return statements must return the same concrete type for Impl(...).
140
+ Impl(...) uses static dispatch and requires the same concrete type across all returns.
141
+ Consider using Dyn(...) for dynamic dispatch if different concrete types are needed.`},{token:ne.token,errorMessage:`First return has concrete type: ${x(ne.concreteType)}`},{token:O.token,errorMessage:`Conflicting return has concrete type: ${x(q)}`}])}else n.functionReturnImplConcreteType.push({concreteType:q,env:t,token:O.token})}ze(P,!0),t=P.$.env,O.$={env:t,type:P.$.type,value:P.$.value,pathCollection:P.$.pathCollection,variableName:P.$.variableName,controlFlow:"return"},s=O;break}}else if(j(O)&&en(O,A.break)){if(L!==i.length-1&&!(L===i.length-2&&Ua(i[i.length-1])))throw p({token:O.token,errorMessage:'The "break" keyword can only be used as the last expression.'});if(!n.isEvaluatingLoopBody)throw p({token:O.token,errorMessage:'The "break" keyword can only be used inside a loop.'});O.$={env:t,type:J.type,value:J,pathCollection:[],controlFlow:"break"},s=O;break}else if(j(O)&&en(O,A.continue)){if(L!==i.length-1&&!(L===i.length-2&&Ua(i[i.length-1])))throw p({token:O.token,errorMessage:'The "continue" keyword can only be used as the last expression.'});if(!n.isEvaluatingLoopBody)throw p({token:O.token,errorMessage:'The "continue" keyword can only be used inside a loop.'});O.$={env:t,type:J.type,value:J,pathCollection:[],controlFlow:"continue"},s=O;break}else{let B=S({expr:O,env:t,context:{...n,expectedType:L===i.length-1?a:void 0}});if((E=B.$)!=null&&E.env&&(t=(k=B.$)==null?void 0:k.env),(w=B.$)!=null&&w.controlFlow){s=B;break}}}if(!s.$)throw p({token:s.token,errorMessage:`Last expression in "begin" is not evaluated correctly:
142
+ ${T(s)}`});let u=s.$.type;if(s.$.controlFlow==="return"){if((($=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:$.kind)==="function-body")try{pt({type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t},{type:u,env:t})}catch{if(!W({type:n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type,env:t},{type:u,env:t}))throw p({token:s.token,errorMessage:`Return type mismatch. Expected type "${x(n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type)}", but got "${x(u)}".`})}else if(((b=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:b.kind)==="async-block"&&n.expectedType)try{pt({type:n.expectedType.type,env:n.expectedType.env},{type:u,env:t})}catch{if(!W({type:n.expectedType.type,env:n.expectedType.env},{type:u,env:t}))throw p({token:s.token,errorMessage:`Return type mismatch. Expected type "${x(n.expectedType.type)}", but got "${x(u)}".`})}}let d,c=s;V(s)&&v(s,A.return,1)&&(c=s.args[0]);let f=c?(F=c.$)==null?void 0:F.variableName:void 0;if(f){let L=me(t,f);L.length&&(d=L[L.length-1])}d!=null&&d.isOwningTheGcValue&&d.frameLevel===t.frames.length-1&&!d.consumedAtToken?t=Xe(t,d,{...d,consumedAtToken:s.token}):d&&c&&(xt(c,n),t=c.$.env);let m=Yr(t),y=[];if(Oa){if(o&&t.frames.length>=2){let B={...t,frames:t.frames.slice(0,-1)},P=Yr(B);m=[...m,...P]}let L=new Map;if(V(e))for(let B of e.args){let P=vu(B);for(let[q,ne]of P)L.has(q)||L.set(q,[]),L.get(q).push(...ne)}let O=new Set;for(let B of m){let P=sd(B),q=L.get(P);if(q&&q.length>0){let ne=q[0];O.add(ne),q.shift(),t=Xe(t,B,{...B,consumedAtToken:s.token})}else y.push(B)}if(V(e))for(let B of e.args)Ba(B,O)}let g;if((Oa?y:m).length>0){let L=ad({variablesToDrop:Oa?y:m,env:t,context:{...n,expectedType:void 0}});g=L.deferredDropExpressions,t=L.env}l&&l.$&&(l.$.deferredDropExpressions=g);let h=t.frames[t.frames.length-1];return t=Ct(t),e.$={env:t,type:s.$.type,value:s.$.value,pathCollection:[],controlFlow:s.$.controlFlow,deferredDropExpressions:g,poppedEnvFrame:h},d&&((M=c==null?void 0:c.$)!=null&&M.deferredDupExpressions)&&c.$.deferredDupExpressions.length>0?ze(e,!0,d):d!=null&&d.consumedAtToken?ze(e,!0,d):ze(e,!0),e}function jn({targetType:e,moduleType:t,env:n}){let r={...t,receiverType:e},o=e.module;if(o)for(let a of o.fields){if(!a.assignedValue||!Ke(a.assignedValue))continue;let l=a.assignedValue.type;if(W({type:r,env:n},{type:l,env:n}))return!0}return!!oa({concreteType:e,moduleType:t,env:n})}function Pa({targetType:e,moduleType:t,env:n,errorToken:r}){if(t.selfConstraints&&t.selfConstraints.length>0){for(let o of t.selfConstraints)if(!jn({targetType:e,moduleType:o,env:n}))throw p({token:r,errorMessage:`Type "${x(e)}" does not implement required constraint "${o.typeName??x(o)}" from module "${t.typeName??x(t)}"'s where clause.`})}if(t.negativeSelfConstraints&&t.negativeSelfConstraints.length>0){for(let o of t.negativeSelfConstraints)if(jn({targetType:e,moduleType:o,env:n}))throw p({token:r,errorMessage:`Type "${x(e)}" implements "${o.typeName??x(o)}" but the module "${t.typeName??x(t)}"'s where clause requires it to NOT implement this module.`})}}function Tu({expr:e,env:t,context:n}){Ce(e,"<:",2);let r=e.args[0],o=e.args[1],i=S({expr:r,env:t,context:{...n}});if(!i.$||!i.$.value||!G(i.$.value))throw p({token:r.token,errorMessage:"Expected type for left-hand side expression."});t=i.$.env;let a=i.$.value;if(n.isInsideWhereClause&&!ee(a.value))throw p({token:r.token,errorMessage:`In a where clause, the left-hand side of <: must be a type parameter (SomeType), got: ${T(r)} of type ${x(a.value)}`});let s=[];if(V(o)&&v(o,A.tuple))for(let m of o.args)V(m)&&v(m,"!")&&m.args.length===1?s.push({expr:m.args[0],isNegated:!0}):s.push({expr:m,isNegated:!1});else V(o)&&v(o,"!")&&o.args.length===1?s.push({expr:o.args[0],isNegated:!0}):s.push({expr:o,isNegated:!1});let l=[];for(let{expr:m,isNegated:y}of s){let g=S({expr:m,env:t,context:{...n}});if(!g.$||!g.$.value||!G(g.$.value)||!Ee(g.$.value.value))throw p({token:m.token,errorMessage:"Expected module type for right-hand side expression."});t=g.$.env;let h=g.$.value.value;if(h.receiverType)throw p({token:m.token,errorMessage:"Expected module type already has a receiver type assigned."});if(y&&!n.isInsideWhereClause)throw p({token:m.token,errorMessage:"Negated module constraints !(Module) are only allowed in where clauses."});l.push({moduleType:h,expr:m,isNegated:y})}if(n.isInsideWhereClause&&ee(a.value)){let m=a.value;for(let{moduleType:y,expr:g,isNegated:h}of l){let _={...y,receiverType:m};if(h){let E={..._,isNegatedConstraint:!0},w={label:"",type:dn(1),isCompileTimeOnly:!0,assignedValue:ae(E),exprs:{expr:g}};m.module.fields.push(w)}else{let k={label:"",type:dn(1),isCompileTimeOnly:!0,assignedValue:ae(_),exprs:{expr:g}};m.module.fields.push(k)}}return e.$={env:t,value:a,type:a.type,pathCollection:[]},e}if(l.length>1)throw p({token:o.token,errorMessage:"Multiple module constraints (tuple form) are only allowed in where clauses."});let{moduleType:u}=l[0],d=a.value;if(!ee(d)&&!jn({targetType:d,moduleType:u,env:t}))throw p({token:e.token,errorMessage:`Type "${x(d)}" does not implement module "${u.typeName??x(u)}".`});let c={...u,receiverType:a.value},f=ae(c);return e.$={env:t,value:f,type:f.type,pathCollection:[]},e}function nt(e){return j(e)&&e.token.type==="identifier"||e.token.type==="operator"}function Lo(e,t,n){var a;if(!((a=e.$)!=null&&a.variableName))return;let r=me(t,e.$.variableName);if(!r.length)return;let o=r[r.length-1],i=new Set;for(;o&&o.isOwningTheSameGcValueAs;){if(i.has(o.id))return;i.add(o.id),o=o.isOwningTheSameGcValueAs}if(o&&o.isOwningTheGcValue)return o}function jr({beginExprs:e,env:t,context:n,allowPartialModule:r=!1,receiverType:o}){var u,d;let i=Ie(t),a=[],s;t=ut(t);for(let c=0;c<e.length;c++){let f=e[c];try{if(V(f)&&v(f,A.export)){let m=f.args;for(let y=0;y<m.length;y++){let g=m[y];if(V(g)&&v(g,"...")){let h=g.args[0],_=g.args[1],E=S({expr:h,env:t,context:{...n,SelfType:o}});if(!E.$)throw p({token:h.token,errorMessage:`Failed to evaluate the extended struct expression:
143
+ ${T(h)}`});let k=E.$.type;if(!Ee(k))throw p({token:h.token,errorMessage:`Expected struct type for export, got:
144
+ ${x(k)}`});let w=E.$.value,$=new Set;if(_)if(V(_)&&v(_,":",2)&&en(_.args[0],"exclude")&&(_=_.args[1]),j(_)){let b=_.token.value,F=k.fields.find(M=>M.label===b);if(!F)throw p({token:_.token,errorMessage:`Label "${b}" is not found in the extended module type.`});$.add(b),_.$={env:t,type:F.type,value:F.assignedValue,pathCollection:[]}}else if(V(_)&&v(_,A.tuple))for(let b of _.args){if(!j(b))throw p({token:b.token,errorMessage:`Expected identifier for excluded label, got:
145
+ ${T(b)}`});let F=b.token.value,M=k.fields.find(L=>L.label===F);if(!M)throw p({token:b.token,errorMessage:`Label "${F}" is not found in the extended module type.`});$.add(F),b.$={env:t,type:M.type,value:M.assignedValue,pathCollection:[]}}else throw p({token:_.token,errorMessage:`Expected identifier or tuple for excluded labels, got:
146
+ ${T(_)}`});for(let b=0;b<k.fields.length;b++){let F=k.fields[b];if($.has(F.label))continue;if(i.fields.findIndex(L=>L.label===F.label)>=0)throw p({token:g.token,errorMessage:`Element "${F.label}" is already exported in the module.`});i.fields.push({label:F.label,type:F.type,isCompileTimeOnly:F.isCompileTimeOnly,assignedValue:F.isCompileTimeOnly?F.assignedValue:void 0,defaultValue:F.defaultValue,exprs:{expr:g,labelExpr:void 0,typeExpr:void 0,assignedValueExpr:void 0,defaultValueExpr:void 0}}),w?a.push(w.fields[b]):a.push(void 0),g.$={env:t,type:F.type,value:w?w.fields[b]:void 0,pathCollection:[]}}}else{let h="",_="";if(j(g)){if(!nt(g))throw p({token:g.token,errorMessage:`Expected identifier for export, got:
147
+ ${T(g)}`});h=g.token.value,_=h}else if(V(g)&&v(g,":",2)){let $=g.args[0],b=g.args[1];if(!j($))throw p({token:$.token,errorMessage:`Expected identifier for export, got:
148
+ ${T($)}`});if(!nt($))throw p({token:$.token,errorMessage:`Expected identifier for export, got:
149
+ ${T($)}`});if(h=$.token.value,!j(b))throw p({token:b.token,errorMessage:`Expected identifier for export, got:
150
+ ${T(b)}`});if(!nt(b))throw p({token:b.token,errorMessage:`Expected identifier for export, got:
151
+ ${T(b)}`});_=b.token.value}let E=me(t,_);if(E.length===0)throw p({token:g.token,errorMessage:`Variable "${_}" is not defined in the module.`});let k=E[E.length-1];if(i.fields.findIndex($=>$.label===_)>=0)throw p({token:g.token,errorMessage:`Variable "${_}" is already exported in the module.`});if(!k.isCompileTimeOnly)throw p({token:g.token,errorMessage:`Variable "${_}" is not a compile-time variable and cannot be exported.`});i.fields.push({label:h,type:k.type,isCompileTimeOnly:k.isCompileTimeOnly,assignedValue:k.isCompileTimeOnly?k.value:void 0,defaultValue:void 0,exprs:{expr:g,labelExpr:void 0,typeExpr:void 0,assignedValueExpr:void 0,defaultValueExpr:void 0}}),a.push(k.value),g.$={env:t,type:k.type,value:k.value,pathCollection:[]}}}}else{let m=S({expr:f,env:t,context:{...n,expectedType:void 0,SelfType:o}});(u=m.$)!=null&&u.env&&(t=(d=m.$)==null?void 0:d.env)}}catch(m){if(r){s=m;break}else throw m}}try{s||(t=Ct(t))}catch(c){if(r)s=c;else throw c}return{moduleValue:Vr({...i,receiverType:o},a),moduleType:i,env:t,partialModuleError:s}}var Ao=new Map,or=new Map,ia=new Map;function Ga(e){for(let[t,n]of or.entries()){let r=n.filter(o=>o.sourceModulePath!==e);r.length===0?or.delete(t):or.set(t,r)}}function aa(){Ao.clear(),or.clear(),ia.clear()}function ld(e,t){let n=or.get(e);n||(n=[],or.set(e,n)),n.push(t)}function ud({receiverType:e,moduleType:t,currentModulePath:n,expr:r}){let o=e.id,a=(ia.get(o)||[]).find(s=>s.moduleTypeId===t.id);if(a)throw p({token:r.token,errorMessage:`Module "${t.typeName??t.id}" is already implemented for type "${x(e)}".
152
+ First implementation was in: ${a.modulePath||"unknown"}`})}function pd({receiverType:e,moduleType:t,currentModulePath:n,expr:r}){let o=e.id,i=ia.get(o);i||(i=[],ia.set(o,i)),i.push({moduleTypeId:t.id,moduleTypeName:t.typeName,modulePath:n||"unknown",expr:r})}function cd({receiverType:e,moduleType:t,currentModulePath:n,expr:r}){if(!n)return;let o=t.definedInModulePath===n,i=e.definedInModulePath===n;if(!(n.includes("prelude.yo")||n.includes("std/"))&&!o&&!i)throw p({token:r.token,errorMessage:`Orphan impl: Cannot implement foreign module "${t.typeName??t.id}" for foreign type "${x(e)}".
153
+ At least one of the module or the type must be defined in this module.
154
+ Module defined in: ${t.definedInModulePath||"unknown"}
155
+ Type defined in: ${e.definedInModulePath||"unknown"}
156
+ Current module: ${n}`})}function oa({concreteType:e,moduleType:t,env:n}){let r=t.typeName||t.id,o=or.get(r);if(!(!o||o.length===0)){for(let i of o)if(qa({concreteType:e,impl:i,env:n}).matched)return i}}function Wr({concreteType:e,methodName:t,env:n}){var o;let r=[];for(let[i,a]of or.entries())for(let s of a){let l=qa({concreteType:e,impl:s,env:n});if(!l.matched)continue;let u=s.moduleType,d=s.moduleValue,c=u.fields.findIndex(f=>f.label===t&&ce(f.type));if(c>=0){let f=u.fields[c];if(ce(f.type)){let m=d.fields[c],y=Ra(f.type,l.substitutions,l.valueSubstitutions),g=m;if(Fe(m)&&(l.valueSubstitutions.size>0||l.substitutions.size>0)){let h=yt(m.body),_=s.definitionEnv,E=ut(_,y.parametersFrame);for(let[b,F]of l.valueSubstitutions){let{env:M}=we({env:E,variable:{name:b,type:F.type,isCompileTimeOnly:!0,value:F,token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheGcValue:!1}});E=M}for(let[b,F]of l.substitutions)if(b!=="Self"){let{env:M}=we({env:E,variable:{name:b,type:lt(),isCompileTimeOnly:!0,value:ae(F),token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheGcValue:!1}});E=M}let k=Et({expr:h,env:E,context:{isEvaluatingGenericImplSpecialization:!0,expectedType:{type:y.return.type,env:E},stdPath:"",isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:y,value:m,evaluationEnv:E},functionReturnImplConcreteType:[]},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),w=y;(o=k.$)!=null&&o.type&&(w={...y,return:{...y.return,type:k.$.type}}),g={...m,specializedType:w,body:k,funcId:`${m.funcId}_specialized_${[...l.substitutions.entries()].map(([b,F])=>`${b}_${x(F)}`).join("_")}_${[...l.valueSubstitutions.entries()].map(([b,F])=>`${b}_${je(F)}`).join("_")}`,funcName:m.funcName?`${m.funcName}_specialized`:void 0},r.push({type:w,value:g})}else Fe(m)?(g={...m,specializedType:y},r.push({type:y,value:g})):r.push({type:y,value:g})}}}return r}function Cu({concreteType:e,moduleType:t,methodName:n,env:r}){var a;let o=t.typeName||t.id,i=or.get(o);if(!(!i||i.length===0))for(let s of i){let l=qa({concreteType:e,impl:s,env:r});if(!l.matched)continue;let u=s.moduleType,d=s.moduleValue,c=u.fields.findIndex(f=>f.label===n&&ce(f.type));if(c>=0){let f=u.fields[c];if(ce(f.type)){let m=d.fields[c],y=Ra(f.type,l.substitutions,l.valueSubstitutions),g=m;if(Fe(m)&&(l.valueSubstitutions.size>0||l.substitutions.size>0)){let h=yt(m.body),_=s.definitionEnv,E=ut(_,y.parametersFrame);for(let[b,F]of l.valueSubstitutions){let{env:M}=we({env:E,variable:{name:b,type:F.type,isCompileTimeOnly:!0,value:F,token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheGcValue:!1}});E=M}for(let[b,F]of l.substitutions)if(b!=="Self"){let{env:M}=we({env:E,variable:{name:b,type:lt(),isCompileTimeOnly:!0,value:ae(F),token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheGcValue:!1}});E=M}let k=Et({expr:h,env:E,context:{isEvaluatingGenericImplSpecialization:!0,expectedType:{type:y.return.type,env:E},stdPath:"",isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:y,value:m,evaluationEnv:E},functionReturnImplConcreteType:[]},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0}),w=y;return(a=k.$)!=null&&a.type&&(w={...y,return:{...y.return,type:k.$.type}}),g={...m,specializedType:w,body:k,funcId:`${m.funcId}_specialized_${[...l.substitutions.entries()].map(([b,F])=>`${b}_${x(F)}`).join("_")}_${[...l.valueSubstitutions.entries()].map(([b,F])=>`${b}_${je(F)}`).join("_")}`,funcName:m.funcName?`${m.funcName}_specialized`:void 0},{type:w,value:g}}else return Fe(m)?(g={...m,specializedType:y},{type:y,value:g}):{type:y,value:g}}}}}function _n(e,t,n=new Map){if(ee(e)){let r=t.get(e.name);return r||e}if(De(e)){let r=_n(e.childType,t,n);return r===e.childType?e:{...e,childType:r}}if(Oe(e)){let r=_n(e.childType,t,n),o=e.length;if(Ue(e.length)&&e.length.variableName){let i=n.get(e.length.variableName);i&&(o=i)}return r===e.childType&&o===e.length?e:{...e,childType:r,length:o}}if(at(e)){let r=_n(e.childType,t,n);return r===e.childType?e:{...e,childType:r}}if(mt(e)){let r=_n(e.childType,t,n);return r===e.childType?e:{...e,childType:r}}if(He(e)){let r=!1,o=e.fields.map(i=>{let a=_n(i.type,t,n);return a!==i.type?(r=!0,{...i,type:a}):i});return r?{...e,fields:o}:e}if($e(e)){let r=!1,o=e.fields.map(i=>{let a=_n(i.type,t,n);return a!==i.type?(r=!0,{...i,type:a}):i});return r?{...e,fields:o}:e}if(Ve(e)){let r=!1,o=e.variants.map(i=>{if(!i.fields)return i;let a=i.fields.map(s=>{let l=_n(s.type,t,n);return l!==s.type?(r=!0,{...s,type:l}):s});return a!==i.fields?{...i,fields:a}:i});return r?{...e,variants:o}:e}if(ot(e)){let r=!1,o=e.fields.map(i=>{let a=_n(i.type,t,n);return a!==i.type?(r=!0,{...i,type:a}):i});return r?{...e,fields:o}:e}if(Wt(e)){let r=_n(e.isFuture.outputType,t,n);return r===e.isFuture.outputType?e:{...e,isFuture:{childType:r}}}if(gt(e)){let r=_n(e.childType,t,n);return r===e.childType?e:{...e,childType:r}}return ce(e)?Ra(e,t,n):e}function Ra(e,t,n=new Map){let r=!1,o=e.parameters.map(u=>{let d=_n(u.type,t,n);return d!==u.type?(r=!0,{...u,type:d}):u}),i=_n(e.return.type,t,n),a=i!==e.return.type,s=e.SelfType;if(e.SelfType&&(s=_n(e.SelfType,t,n),s!==e.SelfType&&(r=!0)),!r&&!a)return e;let l={...e.parametersFrame,variables:e.parametersFrame.variables.map(u=>{let d=_n(u.type,t,n);return d!==u.type?{...u,type:d}:u})};return{...e,forallParameters:[],parameters:o,parametersFrame:l,return:a?{...e.return,type:i,expr:void 0}:e.return,SelfType:s}}function qa({concreteType:e,impl:t,env:n}){let r={matched:!1,substitutions:new Map,valueSubstitutions:new Map},o=ut(n);for(let i of t.forallParameters)if(i.kind==="type"){let{env:a}=we({env:o,variable:{name:i.name,type:lt(),isCompileTimeOnly:!0,value:ae(i.someType),token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheGcValue:!1}});o=a}else{let{env:a}=we({env:o,variable:{name:i.name,type:i.type,isCompileTimeOnly:!0,value:i.unknownValue,token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheGcValue:!1}});o=a}try{let{expectedEnv:i}=pt({type:t.receiverTypePattern,env:o},{type:e,env:n});for(let{someType:l,moduleType:u}of t.whereConstraints){let d=$u(i,l);if(!d)return r;if(u.isNegatedConstraint){if(ee(d)){if(!dd(d,u))return r;continue}if(jn({targetType:d,moduleType:u,env:n}))return r;continue}if(ee(d)){if(!fd(d,u))return r;continue}if(!jn({targetType:d,moduleType:u,env:n}))return r}let a=new Map,s=new Map;for(let l of t.forallParameters)if(l.kind==="type"){let u=$u(i,l.someType);u&&!ee(u)&&a.set(l.name,u)}else{let u=me(i,l.name),d=u[u.length-1];d&&d.value&&!Ue(d.value)&&s.set(l.name,d.value)}return a.set("Self",e),{matched:!0,substitutions:a,valueSubstitutions:s}}catch{return r}}function fd(e,t){let n=t.typeName;if(!n)return!1;for(let r of e.module.fields)if(r.assignedValue&&G(r.assignedValue)&&Ee(r.assignedValue.value)){let o=r.assignedValue.value;if(o.typeName===n&&!o.isNegatedConstraint)return!0}return!1}function dd(e,t){let n=t.typeName;if(!n)return!1;for(let r of e.module.fields)if(r.assignedValue&&G(r.assignedValue)&&Ee(r.assignedValue.value)){let o=r.assignedValue.value;if(o.typeName===n&&o.isNegatedConstraint)return!0}return!1}function md({receiverTypePattern:e,moduleType:t,whereConstraints:n,env:r,errorToken:o}){if(t.selfConstraints&&t.selfConstraints.length>0)for(let i of t.selfConstraints){if(jn({targetType:e,moduleType:i,env:r}))continue;let a=new Set;for(let s of n)s.moduleType.typeName===i.typeName&&!s.moduleType.isNegatedConstraint&&a.add(s.someType.name);throw p({token:o,errorMessage:`Generic impl receiver type "${x(e)}" does not satisfy constraint "${i.typeName??x(i)}" required by module "${t.typeName??x(t)}".
157
+ Consider adding "where(T <: ${i.typeName??x(i)})" to the impl.`})}if(t.negativeSelfConstraints&&t.negativeSelfConstraints.length>0){for(let i of t.negativeSelfConstraints)if(jn({targetType:e,moduleType:i,env:r}))throw p({token:o,errorMessage:`Generic impl receiver type "${x(e)}" implements "${i.typeName??x(i)}" but module "${t.typeName??x(t)}" requires it to NOT implement this module.
158
+ Consider adding "where(T <: !(${i.typeName??x(i)}))" to the impl.`})}}function $u(e,t){for(let n=e.frames.length-1;n>=0;n--){let r=e.frames[n];for(let o of r.variables)if(o.name===t.name&&o.value&&G(o.value))return o.value.value}return t}function Ya(e){let t=Ao.get(e);if(t){for(let n of t)n.fields=n.fields.filter(r=>r.sourceModulePath!==e);Ao.delete(e)}}function yd(e,t){let n=Ao.get(e);n||(n=new Set,Ao.set(e,n)),n.add(t)}function Eu(e,t,n){let r=e.type.receiverType;if(!(!r||!r.module))if(e.type.typeName&&(cd({receiverType:r,moduleType:e.type,currentModulePath:n,expr:t}),ud({receiverType:r,moduleType:e.type,currentModulePath:n,expr:t}),pd({receiverType:r,moduleType:e.type,currentModulePath:n,expr:t})),n&&yd(n,r.module),e.type.typeName){let o={label:"",type:dn(1),isCompileTimeOnly:!0,assignedValue:e,sourceModulePath:n,exprs:{expr:t}};r.module.fields.push(o)}else for(let o=0;o<e.type.fields.length;o++){let i=e.type.fields[o],a=e.fields[o],s={label:i.label,type:i.type,isCompileTimeOnly:i.isCompileTimeOnly,assignedValue:a,sourceModulePath:n,exprs:{expr:t}};r.module.fields.push(s)}}function ku({expr:e,env:t,context:n}){var r,o;if(!v(e,A.impl))throw p({token:e.token,errorMessage:`Expected "impl", got:
159
+ ${T(e)}`});if(e.args.length===1&&V(e.args[0])&&v(e.args[0],A.begin)){let i=e.args[0].args,{moduleType:a,moduleValue:s,env:l}=jr({beginExprs:i,env:t,context:{...n,expectedType:void 0,SelfType:void 0}});return t=l,e.$={env:t,type:a,value:s,pathCollection:[]},e}else if(e.args.length===2){let i=e.args[0],a=e.args[1],s=S({expr:i,env:t,context:{...n}});if(!s.$||!s.$.value||!G(s.$.value))throw p({token:i.token,errorMessage:"Expected type for receiver type argument."});t=s.$.env;let l=s.$.value.value;if(V(e.args[1])&&v(e.args[1],A.begin)){if(!za())throw p({token:e.token,errorMessage:"impl a receiver type with anonymous module (begin block) is only allowed in prelude.yo"});let u=e.args[1].args,{moduleType:d,moduleValue:c,env:f}=jr({beginExprs:u,env:t,context:{...n,expectedType:void 0,SelfType:void 0},receiverType:l});return t=f,Pa({targetType:l,moduleType:c.type,env:t,errorToken:e.token}),Eu(c,e,n.currentModulePath),e.$={env:t,type:d,value:c,pathCollection:[]},e}else{let u=S({expr:a,env:t,context:{...n,expectedType:void 0,ReceiverType:l}});if(!u.$||!Ke(u.$.value))throw p({token:a.token,errorMessage:"Expected module value for module call argument."});t=u.$.env;let d=u.$.value;return Pa({targetType:l,moduleType:d.type,env:t,errorToken:e.token}),Eu(d,e,n.currentModulePath),e.$={env:t,type:u.$.type,value:d,pathCollection:[]},e}}else if(e.args.length===3||e.args.length===4){let i=e.args[0];if(!V(i)||!v(i,A.forall))throw p({token:i.token,errorMessage:`Expected forall(...) as first argument in generic impl, got: ${T(i)}`});let a=!1,s,l,u;if(e.args.length===4){let k=e.args[1];if(!V(k)||!v(k,A.where))throw p({token:k.token,errorMessage:`Expected where(...) as second argument in 4-argument generic impl, got: ${T(k)}`});a=!0,s=k,l=e.args[2],u=e.args[3]}else{let k=e.args[1];if(V(k)&&v(k,A.where))throw p({token:k.token,errorMessage:"impl with where clause requires 4 arguments: impl(forall(...), where(...), ReceiverType, Module(...))"});l=k,u=e.args[2]}let d=i.args,c=[];t=ut(t);for(let k of d){let w,$;if(V(k)&&v(k,":",2)){let B=k.args[0];if(!j(B))throw p({token:B.token,errorMessage:`Expected identifier for forall parameter name, got: ${T(B)}`});w=B.token.value,$=k.args[1]}else if(j(k))w=k.token.value;else throw p({token:k.token,errorMessage:`Expected parameter name or "name : Type" for forall parameter, got: ${T(k)}`});let b;if($){let B=S({expr:$,env:t,context:{...n}});if((r=B.$)!=null&&r.env&&(t=B.$.env),!B.$||!B.$.value||!G(B.$.value))throw p({token:$.token,errorMessage:`Expected type for forall parameter type, got: ${T($)}`});b=B.$.value.value}let F=!b||yu(b),M=b||lt(),L=re(M,w),{env:O}=we({env:t,variable:{name:w,type:M,isCompileTimeOnly:!0,value:L,token:k.token,initializedAtToken:k.token,consumedAtToken:void 0,isOwningTheGcValue:!1}});if(t=O,F){let B=L.value;c.push({kind:"type",name:w,someType:B})}else c.push({kind:"value",name:w,type:M,unknownValue:L})}if(a&&s)for(let k of s.args){if(!V(k)||!v(k,"<:",2))throw p({token:k.token,errorMessage:`Expected constraint in the form "T <: Module", got: ${T(k)}`});let w=S({expr:k,env:t,context:{...n,isInsideWhereClause:!0}});(o=w.$)!=null&&o.env&&(t=w.$.env)}let f=[];for(let k of c){if(k.kind!=="type")continue;let{someType:w}=k;for(let $ of w.module.fields)$.assignedValue&&G($.assignedValue)&&Ee($.assignedValue.value)&&f.push({someType:w,moduleType:$.assignedValue.value})}let m=S({expr:l,env:t,context:{...n}});if(!m.$||!m.$.value||!G(m.$.value))throw p({token:l.token,errorMessage:"Expected type for receiver type pattern."});t=m.$.env;let y=m.$.value.value,g,h;if(V(u)&&v(u,A.begin)){if(!za())throw p({token:e.token,errorMessage:"impl a receiver type with anonymous module (begin block) is only allowed in prelude.yo"});let k=u.args,w=jr({beginExprs:k,env:t,context:{...n,expectedType:void 0,SelfType:void 0},receiverType:y});t=w.env,h=w.moduleType,g=w.moduleValue}else{let k=S({expr:u,env:t,context:{...n,expectedType:void 0,ReceiverType:y}});if(!k.$||!Ke(k.$.value))throw p({token:u.token,errorMessage:"Expected module value for module call argument."});t=k.$.env,g=k.$.value,h=g.type}md({receiverTypePattern:y,moduleType:h,whereConstraints:f,env:t,errorToken:e.token}),t=Ct(t);let _=h.typeName||h.id,E={forallParameters:c,whereConstraints:f,receiverTypePattern:y,moduleType:h,moduleValue:g,expr:e,sourceModulePath:n.currentModulePath,definitionEnv:t};return ld(_,E),e.$={env:t,type:h,value:g,pathCollection:[]},e}else throw p({token:e.token,errorMessage:`Invalid module implementation, expected a "begin" block, got:
160
+ ${T(e)}`})}function ja({modulePath:e,inputString:t}){return{functionDeclarationFrameLevel:-1,frames:[],freeVariables:[],modulePath:e,inputString:t}}function tt(){let e=ja({modulePath:"",inputString:""});return ut(e)}var Wa=null;function bu(e){Wa=e}function Ha(){Wa=null}function za(){return Wa===null}function we({env:e,variable:t,deltaFrame:n,variableId:r,skipCheckingFunctionOverloading:o,addToBeginBlockFrame:i}){let a=e.frames.length-1+(n??0);if(i){let m=hd(e);m>=0&&(a=m)}if(!o&&ce(t.type)){let m=me(e,t.name,y=>ce(y.type)&&y.frameLevel===a);if(m.length>0)throw st([{token:t.token,errorMessage:`Failed to define function "${t.name}" as overloading is not allowed:`},{token:m[0].token,errorMessage:`Function "${m[0].name}" is already defined here:`}])}let s=e.frames[a];if(!s)throw console.trace(`Frame at level ${a} does not exist in the environment.`),new Error(`Frame at level ${a} does not exist in the environment.`);let l=St(e.modulePath,t.name)?t.name:r??mr(e.modulePath,t.name),u={...t,frameLevel:a,id:l},d=_d({frame:s,variable:u}),c=e.frames.slice();return c[a]=d,{env:{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,freeVariables:e.freeVariables,frames:c,modulePath:e.modulePath,inputString:e.inputString},variable:u}}function _d({frame:e,variable:t}){if(e.variables.some(r=>r.name===t.name))throw st([{token:t.token,errorMessage:`Failed to define variable "${t.name}":`},{token:e.variables.find(r=>r.name===t.name).token,errorMessage:`Variable "${t.name}" is already defined here in the same scope:`}]);let n=e.variables.findIndex(r=>r.name===t.name&&!r.initializedAtToken);if(n>-1){let r=e.variables.slice();return r[n]=t,{id:e.id,variables:r,isBeginBlockFrame:e.isBeginBlockFrame}}return{id:e.id,variables:[...e.variables,t],isBeginBlockFrame:e.isBeginBlockFrame}}function gd(e,t,n){let r=e.variables.filter(o=>o.name===t);return n?r.filter(n):r}function me(e,t,n){let r=[];for(let o=0;o<e.frames.length;o++){let i=e.frames[o],a=gd(i,t,n);r.push(...a)}return n?r.filter(n):r}function sa(e,t){let n=[];for(let r=0;r<e.frames.length;r++){let i=e.frames[r].variables.filter(t);n.push(...i)}return n}function ut(e,t={id:mr(e.modulePath,"frame"),variables:[],isBeginBlockFrame:!1},n){let r=n?{...t,isBeginBlockFrame:!0}:t;return{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,freeVariables:e.freeVariables,frames:[...e.frames,r],modulePath:e.modulePath,inputString:e.inputString}}function Ct(e,t=!1){if(!t){let n=e.frames[e.frames.length-1],r=Yr(e),o=n.variables.filter(i=>!i.initializedAtToken);if(r.length>0)throw st(r.map(i=>({token:i.token,errorMessage:`Variable "${i.name}" was not consumed. It is supposed to be consumed before going out of scope.
161
+ Typeof "${i.name}": ${x(i.type)}`})));if(o.length>0)throw st(o.map(i=>({token:i.token,errorMessage:`Variable "${i.name}" is undefined.`})))}return{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,freeVariables:e.freeVariables,frames:e.frames.slice(0,-1),modulePath:e.modulePath,inputString:e.inputString}}function Xe(e,t,n){let r=e.frames.map(o=>{let i=o.variables.map(a=>a.id===t.id?n:a);return{...o,variables:i}});return{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,freeVariables:e.freeVariables,frames:r,modulePath:e.modulePath,inputString:e.inputString}}function Fu(e){var t;return{id:e.id,name:e.name,type:x(e.type),typeId:e.type.id,value:je(e.value),isCompileTimeOnly:e.isCompileTimeOnly,isUndefined:!e.initializedAtToken,isOwningTheGcValue:!!e.isOwningTheGcValue,isOwningTheSameGcValueAs:(t=e.isOwningTheSameGcValueAs)==null?void 0:t.name,isReassignable:!!e.isReassignable,isConsumed:!!e.consumedAtToken}}function Ka(e,t,n,r=!1,o){var f;let i=[],a=n;for(;De(a);)a=a.childType;function s(m,y){let g=m.fields.find(h=>h.label===t&&(ce(h.type)||Ee(h.type)));if(g){let h;if(ce(g.type)){if(Ue(y))h=re(g.type,g.label);else if(Ke(y)){let _=m.fields.findIndex(E=>E.label===g.label);h=y.fields[_]}i.push({type:g.type,value:h})}else if(Ee(g.type)){let _=g.assignedValue;Ke(_)&&l(_)}}if(!g)for(let h of m.fields)Ee(h.type)&&h.assignedValue&&s(h.type,h.assignedValue)}function l(m){let y=m.type.fields.findIndex(g=>g.label==="Call");if(y>=0){let g=m.type.fields[y];if(g.assignedValue){let h=g.assignedValue;ln(h)?h.fields.forEach(_=>{i.push({type:_.type,value:_})}):i.push({type:h.type,value:h})}}}function u(m){return m.filter(g=>{if(ce(g.type)){if(g.type.parameters.length===0)return!1;let h=g.type.parameters[0].type;if(!r&&De(h)){let E=h.childType;if(W({type:E,env:g.type.env},{type:n,env:e},!0))return g.needsPointerConversion=!0,!0}if(Ye(h)||Ye(h)&&!Ye(n)||ee(n)&&n.resolvedConcreteType&&!Pe(n)&&!Ye(h)&&W({type:h,env:g.type.env},{type:n.resolvedConcreteType,env:e},!0))return!0;if(!Ye(h)&&Ye(n))return!1;if(kt(n)||Bt(n)||Pt(n)){let E=vt({type:n,expectedType:void 0,expr:void 0,env:e});if(W({type:h,env:g.type.env},{type:E,env:e},!0))return!0}if(Ne(n)&&g.value===void 0){if(g.type.parameters.length>0&&g.type.SelfType){let k=g.type.parameters[0];if(k){let w=k.type;if(!$t(w)&&!Ne(w)&&!De(w))return!1}}let E=g.type.return.type;if(Rn(E,g.type.SelfType))return!1}return W({type:h,env:g.type.env},{type:n,env:e},!0)}return!0})}function d(m,y,g=new Set){if(g.has(m.id))return;g.add(m.id);let h=m.fields.find(_=>_.label===y&&ce(_.type));if(h&&ce(h.type)){let _=h.assignedValue;Ue(_)&&(_=re(h.type,h.label)),i.push({type:h.type,value:_});return}for(let _ of m.fields)Ee(_.type)&&_.assignedValue&&s(_.type,_.assignedValue)}if(n!==a&&n.module){let m=n.module.fields.find(y=>y.label===t&&ce(y.type));if(m&&ce(m.type)){let y=m.assignedValue;Ue(y)&&(y=re(m.type,m.label)),i.push({type:m.type,value:y})}else d(n.module,t)}if(i.length===0&&n!==a){let m=Wr({concreteType:n,methodName:t,env:e});i.push(...m)}let c=ee(a)&&a.resolvedConcreteType&&!Pe(a);if(a.module&&!Ne(a)&&!c){let m=a.module.fields.find(y=>y.label===t&&ce(y.type));if(m&&ce(m.type)){let y=m.assignedValue;Ue(y)&&(y=re(m.type,m.label)),i.push({type:m.type,value:y})}else d(a.module,t);if(i.length===0){for(let y of a.module.fields)if(y.label===""&&y.assignedValue&&Ke(y.assignedValue)){let g=y.assignedValue,h=g.type,_=h.fields.findIndex(E=>E.label===t&&ce(E.type));if(_>=0){let E=h.fields[_];if(ce(E.type)){let k=g.fields[_],w=E.type;Fe(k)&&k.specializedType&&(w=k.specializedType),i.push({type:w,value:k})}}}}if(i.length===0){let y=Wr({concreteType:a,methodName:t,env:e});i.push(...y)}}if(i.length===0&&(kt(a)||Bt(a)||Pt(a))){let m=vt({type:a,expectedType:void 0,expr:void 0,env:e});if(m.module){for(let y of m.module.fields)if(y.label===""&&y.assignedValue&&Ke(y.assignedValue)){let g=y.assignedValue,h=g.type,_=h.fields.findIndex(E=>E.label===t&&ce(E.type));if(_>=0){let E=h.fields[_];if(ce(E.type)){let k=g.fields[_],w=E.type;Fe(k)&&k.specializedType&&(w=k.specializedType),i.push({type:w,value:k})}}}}}if(ee(a)){if((f=a.resolvedConcreteType)!=null&&f.module&&!Pe(a)){let m=a.resolvedConcreteType,y=m.module,g=y==null?void 0:y.fields.find(h=>h.label===t&&ce(h.type));if(g&&ce(g.type)){let h=g.assignedValue||re(g.type,g.label);i.push({type:g.type,value:h})}if(i.length===0){for(let h of(y==null?void 0:y.fields)??[])if(h.label===""&&h.assignedValue&&Ke(h.assignedValue)){let _=h.assignedValue,E=_.type,k=E.fields.findIndex(w=>w.label===t&&ce(w.type));if(k>=0){let w=E.fields[k];if(ce(w.type)){let $=_.fields[k],b=w.type;Fe($)&&$.specializedType&&(b=$.specializedType),i.push({type:b,value:$});break}}}}if(i.length===0){let h=Wr({concreteType:m,methodName:t,env:e});i.push(...h)}}if(i.length===0&&a.requiredModules)for(let m of a.requiredModules){let y=m.fields.find(g=>g.label===t&&ce(g.type));if(y&&ce(y.type)){let g={...y.type,SelfType:a},h=re(g,y.label);i.push({type:g,value:h})}}if(i.length===0){let m=g=>{if(!(g!=null&&g.whereClauseConstraints))return;let h=g.whereClauseConstraints.get(a);if(!h&&ee(a)){for(let[_,E]of g.whereClauseConstraints)if(ee(_)&&W({type:_,env:e},{type:a,env:e},!1)){h=E;break}}return h},y=o;for(;y&&i.length===0;){let g=m(y);if(g)for(let h of g.requiredModules){let _=h.fields.find(E=>E.label===t&&ce(E.type));if(_&&ce(_.type)){let E={..._.type,SelfType:a},k=re(E,_.label);i.push({type:E,value:k})}}y=y.ParentFunctionType}}if(i.length===0){for(let m of a.module.fields)if(m.label===""&&m.assignedValue&&G(m.assignedValue)&&Ee(m.assignedValue.value)){let g=m.assignedValue.value.fields.find(h=>h.label===t&&ce(h.type));if(g&&ce(g.type)){let h=re(g.type,g.label);i.push({type:g.type,value:h})}}}}if(Ne(a)){let m=a.module.fields.find(g=>g.label===t&&(ce(g.type)||Ee(g.type)));if(m&&ce(m.type)){let g=m.assignedValue||re(m.type,m.label);i.push({type:m.type,value:g})}let y=a.requiredModules;for(let g of y){let h=g.fields.find(_=>_.label===t&&(ce(_.type)||Ee(_.type)));h&&ce(h.type)&&h.type.parameters.length>0&&(Ye(h.type.parameters[0].type)||Ye(n)||W({type:h.type.parameters[0].type,env:h.type.env},{type:n,env:e},!0))&&i.push({type:h.type,value:void 0})}}return i.length>0,u(i)}function wu(e){let t=e.frames.map((n,r)=>{if(r===0)return n;let o=n.variables.filter(i=>!!i.isCompileTimeOnly);return{...n,variables:o}});return{functionDeclarationFrameLevel:e.functionDeclarationFrameLevel,freeVariables:e.freeVariables,frames:t,modulePath:e.modulePath,inputString:e.inputString}}function Yr(e){return e.frames.length===0?[]:e.frames[e.frames.length-1].variables.filter(r=>!r.consumedAtToken&&r.isOwningTheGcValue&&qe(r.type)).reverse()}function hd(e){var t;for(let n=e.frames.length-1;n>=0;n--)if((t=e.frames[n])!=null&&t.isBeginBlockFrame)return n;return-1}var Hr=[...C.__yo_op_add,...C.__yo_op_sub,...C.__yo_op_mul,...C.__yo_op_div,...C.__yo_op_mod,...C.__yo_op_neg,...C.__yo_op_eq,...C.__yo_op_neq,...C.__yo_op_lt,...C.__yo_op_lte,...C.__yo_op_gt,...C.__yo_op_gte,...C.__yo_op_not,...C.__yo_op_bit_and,...C.__yo_op_bit_or,...C.__yo_op_bit_xor,...C.__yo_op_bit_complement,...C.__yo_op_bit_left_shift,...C.__yo_op_bit_right_shift,...C.__yo_ptr_add,...C.__yo_ptr_sub,...C.__yo_ptr_diff,...C.__yo_ptr_eq,...C.__yo_ptr_neq,...C.__yo_ptr_lt,...C.__yo_ptr_lte,...C.__yo_ptr_gt,...C.__yo_ptr_gte,...C.__yo_slice_len,...C.__yo_as,...C.__yo_noop,...C.__yo_return_self,...C.__yo_ms_sleep],Vu=new Set(["bool","usize","isize","u8","i8","u16","i16","u32","i32","u64","i64","f32","f64","char","short","ushort","int","uint","long","ulong","longlong","ulonglong","longdouble"]);function Q(e){let t=new Set(["auto","break","case","char","const","continue","default","do","double","else","enum","extern","float","for","goto","if","inline","int","long","register","restrict","return","short","signed","sizeof","static","struct","switch","typedef","union","unsigned","void","volatile","while","_Alignas","_Alignof","_Atomic","_Bool","_Complex","_Generic","_Imaginary","_Noreturn","_Static_assert","_Thread_local","errno","stdin","stdout","stderr","NULL","true","false"]),n=e.replace(/[^a-zA-Z0-9_]/g,r=>`_u${r.charCodeAt(0)}_`);return t.has(n)&&(n="__yo_c_reserved_"+n),n}function H(e,t){var n,r,o,i,a;if(!e)return"int32_t";if(e.isExtern&&e.externName)return e.externName;switch(e.tag){case"unit":return"void";case"void":return"void";case"bool":return"bool";case"usize":return"size_t";case"isize":return"intptr_t";case"u8":return"uint8_t";case"i8":return"int8_t";case"u16":return"uint16_t";case"i16":return"int16_t";case"u32":return"uint32_t";case"i32":return"int32_t";case"u64":return"uint64_t";case"i64":return"int64_t";case"f32":return"float";case"f64":return"double";case"compt_int":return"int64_t";case"compt_float":return"double";case"compt_string":return"uint8_t*";case"char":return"char";case"short":return"short";case"ushort":return"unsigned short";case"int":return"int";case"uint":return"unsigned int";case"long":return"long";case"ulong":return"unsigned long";case"longlong":return"long long";case"ulonglong":return"unsigned long long";case"longdouble":return"long double";case"Tuple":case"Struct":case"Union":case"Enum":{if(e.tag==="Enum"){let u=rn(e);if(u)return H(u,t)}let s;switch(e.tag){case"Tuple":s="tuple";break;case"Struct":s="struct";break;case"Union":s="union";break;case"Enum":s="enum";break;default:throw new Error("Unreachable")}let l=(n=t.types[e.id])==null?void 0:n.cName;if(!l)throw new Error(`No C type name found for ${s} ${x(e)}`);return(e.tag==="Struct"||e.tag==="Enum")&&$e(e)&&e.isReferenceSemantics?`${l}*`:l}case"Function":return"void*";case"Dyn":{let s=(r=t.types[e.id])==null?void 0:r.cName;if(!s)throw new Error(`No C type name found for dynamic dispatch type ${x(e)}`);return s}case"Array":{let s=e,l=s.childType,u=s.length;if(ct(u)){let d=H(l,t),c=`Array_${Q(d)}_${u.value}`;return t.arrayStructTypes.has(c)||t.arrayStructTypes.set(c,{childType:d,length:u.value}),c}break}case"Slice":{let s=e,u=`Slice_${Q(H(s.childType,t))}`;return t.sliceStructTypes.has(u)||t.sliceStructTypes.set(u,{childType:H(s.childType,t)}),u}case"SomeType":{let s=e;if(Pe(s)){if((o=s.resolvedConcreteType)!=null&&o.isExtern)return`${H(s.resolvedConcreteType,t)}*`;let l=(i=t.types[s.id])==null?void 0:i.cName;if(l)return`${l}*`;let u=Ht(s);if(u){let d=(a=t.types[u.id])==null?void 0:a.cName;if(d)return`${d}*`}if(s.resolvedConcreteType&&$e(s.resolvedConcreteType)){let d=s.resolvedConcreteType.id;for(let[c,f]of Object.entries(t.types))if(ee(f.type)&&Pe(f.type)&&f.type.resolvedConcreteType&&$e(f.type.resolvedConcreteType)&&f.type.resolvedConcreteType.id===d)return`${f.cName}*`}throw new Error(`Impl(Future) type has no registered concrete type. SomeType ID: ${s.id}, FutureModule: ${(u==null?void 0:u.id)??"none"}. Ensure async blocks are properly analyzed and their state machine types are registered.`)}return mn(s)&&s.resolvedConcreteType||s.resolvedConcreteType?H(s.resolvedConcreteType,t):"void*"}case"Ptr":{let l=e.childType;if(at(l)){let c=H(l.childType,t),f=`Slice_${Q(c)}`;return t.sliceStructTypes.has(f)||t.sliceStructTypes.set(f,{childType:c}),f}let u=H(l,t);return $t(l)?`${u}*`:Ve(l)&&rn(l)?u:`${u}*`}case"Iso":{let s=e,l=s.childType,u=H(l,t),d=u.replace(/\*/g,"").trim(),c=`Iso_${Q(d)}`;return t.isoTypes||(t.isoTypes=new Map),t.isoTypes.has(c)||t.isoTypes.set(c,{childTypeCName:u,isoType:s}),c}}return`// Unknown type: ${x(e)}`}function bt(e,t,n){let r=Q(t);return`${H(e,n)} ${r}`}function Tn(e,t,n){var o;let r=(o=n.types[e.id])==null?void 0:o.cName;if(!r)throw new Error(`No C type name found for enum ${e.typeName} (${x(e)})`);return`${r.toUpperCase()}_${t.toUpperCase()}`}function Io(e){return Nn(e.type)}function No(e){return e.type.return.isCompileTimeOnly}function Do(e){let t=e.body,n=null;return V(t)&&v(t,"begin")&&t.args.length===1&&V(t.args[0])&&v(t.args[0],Hr)?n=t.args[0].func.token.value:V(t)&&v(t,Hr)&&(n=t.func.token.value),n&&C.__yo_as.includes(n)?null:n}function rn(e){if(e.variants.length!==2)return null;let t=null,n=null;for(let r of e.variants)if(!r.fields||r.fields.length===0){if(t)return null;t=r}else if(r.fields.length===1){let o=r.fields[0].type;if(De(o)){if(n)return null;n=r}else return null}else return null;return t&&n&&n.fields?n.fields[0].type:null}function ir(e){for(let t of e.variants)if(t.fields&&t.fields.length>0)return!1;return e.variants.length>0}function xu(e){var a,s,l;if(!V(e.func)||!v(e.func,".",2))return!1;let t=e.func,n=t.args[0],r=t.args[1];if(!j(r)||r.token.value!=="fill"||!n)return!1;let o=(a=n.$)==null?void 0:a.value;if(G(o)){let u=o.value;if(Oe(u))return!0}let i=(s=n.$)==null?void 0:s.type;if(Oe(i))return!0;if(V(n)){let u=(l=n.$)==null?void 0:l.type;return Oe(u)}return!1}function Mu(e,t,n){var m,y,g;let r=n.emitter,i=e.func.args[0],a=e.args[0];if(!a)return"/* ERROR: Array.fill requires a fill value argument */";let s=(m=i.$)==null?void 0:m.value,l;if(G(s)&&Oe(s.value))l=s.value;else{let h=(y=i.$)==null?void 0:y.type;if(Oe(h))l=h;else return"/* ERROR: Array.fill receiver is not an array type */"}let u=l.length;if(!ct(u))return"/* ERROR: Array.fill requires compile-time known array length */";let d=H(l,n),c=z(a,t,n),f=((g=e.$)==null?void 0:g.variableName)||`temp_array_${Date.now()}`;return r.emitLine(`${t}${d} ${f};`),r.emitLine(`${t}for (int i = 0; i < ${u.value}; i++) {`),r.emitLine(`${t} ${f}.data[i] = ${c};`),r.emitLine(`${t}}`),f}function Su(e,t){let n=[];if(e.tag!=="FuncCall"||!v(e,"begin"))return t.length===0?[{stateNumber:0,expressions:[e],awaitPoint:null}]:[{stateNumber:0,expressions:[e],awaitPoint:t[0]??null}];let r=e.args,o=[],i=[];for(let a of r){let s=vd(a,t),l=v(a,"return");if(s!==-1)i.push(a),o.push(i),i=[];else if(l){i.push(a),o.push(i),i=[];break}else i.push(a)}i.length>0&&o.push(i);for(let a=0;a<o.length;a++){let s=o[a],l=a<t.length?t[a]:null;n.push({stateNumber:a,expressions:s,awaitPoint:l})}return n}function vd(e,t){for(let n=0;n<t.length;n++)if(ua(e,t[n].expr))return n;return-1}function ua(e,t){if(e===t)return!0;switch(e.tag){case"FuncCall":if(ua(e.func,t))return!0;for(let n of e.args)if(ua(n,t))return!0;break}return!1}function Lu(e,t,n,r=!1){let o=n.emitter;for(let i=0;i<e.expressions.length;i++){let a=e.expressions[i],s=i===e.expressions.length-1,l=e.awaitPoint&&ua(a,e.awaitPoint.expr),u=e.awaitPoint&&a.tag==="FuncCall"&&(v(a,A.while)||v(a,A.cond))&&pa(a);if((l||u)&&e.awaitPoint)Td(a,e.awaitPoint,e.stateNumber,t,n);else if(s&&r){let d=z(a,t,n);d&&(o.emitLine(`${t}// Store final expression result`),o.emitLine(`${t}sm->result = ${d};`))}else{let d=z(a,t,n);!d||!a.$||St(a.$.env.modulePath,d)||o.emitLine(`${t}${d};`)}}}function Td(e,t,n,r,o){var a,s;let i=o.emitter;if(e.tag==="FuncCall"&&v(e,C.await)){let l=e.args[0];if(!l){i.emitLine(`${r}// Error: await without argument`);return}if(t.futureVariableId===void 0){let u=z(l,r,o);i.emitLine(`${r}// Store pattern-matched Future for await ${t.index}`),i.emitLine(`${r}sm->await_future_${t.index} = ${u};`)}else i.emitLine(`${r}// Prepare for await (future already stored in state machine variable)`);return}if(e.tag==="FuncCall"&&v(e,":=")){let l=e.args[0],u=e.args[1];if(!l||!u){i.emitLine(`${r}// Error: Invalid assignment expression`);return}if(u.tag==="FuncCall"&&v(u,C.await)){let d=u.args[0];if(!d){i.emitLine(`${r}// Error: await without argument`);return}let c=(a=l.token)==null?void 0:a.value;if(!c||!l.$){i.emitLine(`${r}// Error: Invalid variable name`);return}if(t.futureVariableId===void 0){let f=z(d,r,o);i.emitLine(`${r}// Store Future for await (variable: ${c})`),i.emitLine(`${r}sm->await_future_${t.index} = ${f};`)}else i.emitLine(`${r}// Store Future for await (variable: ${c}) - future already in state machine`);return}if(u.tag==="FuncCall"&&v(u,A.cond)){let d;if(l.tag==="Atom"&&l.token.type==="identifier"&&l.$){let c=l.token.value,f=me(l.$.env,c);f.length>0&&(d=f[f.length-1].id)}Qa(u,t,r,o,d);return}}if(e.tag==="FuncCall"&&v(e,A.cond)){Qa(e,t,r,o);return}if(e.tag==="FuncCall"&&v(e,A.match)){Za(e,t,r,o);return}if(e.tag==="FuncCall"&&v(e,A.while)){$d(e,t,r,o);return}i.emitLine(`${r}// ERROR: Unsupported pattern for await expression`),i.emitLine(`${r}// Expression type: ${e.tag}, function: ${e.tag==="FuncCall"?e.func.tag==="Atom"?(s=e.func.token)==null?void 0:s.value:e.func.tag:"N/A"}`)}function Qa(e,t,n,r,o){var l,u,d;let i=r.emitter;if(e.tag!=="FuncCall"||!v(e,A.cond)){i.emitLine(`${n}// Error: Expected cond expression`);return}let a=e.args;if(a.length===0){i.emitLine(`${n}// Error: cond must have at least one branch`);return}let s=[];for(let c=0;c<a.length;c++){let f=a[c];if(f.tag!=="FuncCall"||!v(f,"=>")){i.emitLine(`${n}// Error: Expected => pair in cond`);continue}let m=f.args[0],y=f.args[1];if(!m||!y){i.emitLine(`${n}// Error: Invalid pair in cond`);continue}let g=c===a.length-1&&m.tag==="Atom"&&((l=m.token)==null?void 0:l.value)==="true"?null:z(m,n,r);if(g?i.emitLine(`${n}${c===0?"if":"else if"} (${g}) {`):i.emitLine(`${n}${c===0?"{":"else {"}`),Oo(y)){i.emitLine(`${n} sm->cond_branch_${t.index} = ${c};`);let _=la(y,t,`${n} `,r);s.push({index:c,value:y,hasAwait:!0,remainingExprs:_,deferredDropExpressions:(u=y.$)==null?void 0:u.deferredDropExpressions})}else{if(V(y)&&v(y,A.begin)){let _=y.args;for(let E=0;E<_.length;E++){let k=_[E],w=z(k,`${n} `,r);if(w==="break"&&t.isInsideWhile)i.emitLine(`${n} sm->while_loop_${t.index}_active = false;`),i.emitLine(`${n} goto while_loop_${t.index}_end;`);else{let $=w==="break"||w==="continue"||(w==null?void 0:w.includes("return"));w&&($||k.$&&!St(k.$.env.modulePath,w))&&i.emitLine(`${n} ${w};`)}}if((d=y.$)!=null&&d.deferredDropExpressions)for(let E of y.$.deferredDropExpressions){let k=z(E,`${n} `,r);k&&i.emitLine(`${n} ${k};`)}}else{let _=z(y,`${n} `,r);if(_==="break"&&t.isInsideWhile)i.emitLine(`${n} sm->while_loop_${t.index}_active = false;`),i.emitLine(`${n} goto while_loop_${t.index}_end;`);else{let E=_==="break"||_==="continue"||(_==null?void 0:_.includes("return"));_&&(E||y.$&&!St(y.$.env.modulePath,_))&&i.emitLine(`${n} ${_};`)}}s.push({index:c,value:y,hasAwait:!1})}i.emitLine(`${n}}`)}r.condBranchInfo||(r.condBranchInfo=new Map),r.condBranchInfo.set(t.index,{branches:s,targetVariableId:o})}function Oo(e){if(e.tag==="FuncCall"&&v(e,C.await))return!0;if(e.tag==="FuncCall"){for(let t of e.args)if(Oo(t))return!0}return!1}function Za(e,t,n,r){var f,m,y,g,h;let o=r.emitter;if(e.tag!=="FuncCall"||!v(e,A.match)){o.emitLine(`${n}// Error: Expected match expression`);return}let i=e.args[0],a=e.args.slice(1);if(!i||a.length===0){o.emitLine(`${n}// Error: match must have a value and at least one case`);return}let s=z(i,n,r),l=(f=i.$)==null?void 0:f.type;if(!l||!Ve(l)){o.emitLine(`${n}// Error: match requires an enum type`);return}let u=l,d=(m=r.types[u.id])==null?void 0:m.cName;if(!d){o.emitLine(`${n}// Error: enum type has no C name`);return}let c=rn(u);if(c){let _=-1,E=-1,k;for(let w=0;w<a.length;w++){let $=a[w];if(V($)&&v($,"=>",2)){let b=$.args[0];if(b&&V(b)&&v(b,"."))_=w;else if(b&&V(b)){let F=b.func;F&&V(F)&&v(F,".")&&(E=w,b.args.length>0&&j(b.args[0])&&(k=b.args[0].token.value))}}}if(o.emitLine(`${n}if (${s} != NULL) {`),E>=0){let w=a[E];if(!V(w))o.emitLine(`${n} // Error: Expected => in case`);else{let $=w.args[1];if(k){let F=r,M=!1,L;if(F.stateMachineVariables){for(let[O,B]of F.stateMachineVariables)if(B.name===k){M=!0,L=O;break}}M&&L?o.emitLine(`${n} sm->var_${L} = ${s};`):o.emitLine(`${n} ${H(c,r)} ${k} = ${s};`)}o.emitLine(`${n} sm->cond_branch_${t.index} = ${E};`);let b=la($,t,n+" ",r);if(b.length>0){let F=r;F.condBranchInfo||(F.condBranchInfo=new Map);let M=F.condBranchInfo.get(t.index)||{branches:[]};M.branches.push({index:E,value:$,hasAwait:!0,remainingExprs:b,deferredDropExpressions:(y=$.$)==null?void 0:y.deferredDropExpressions}),F.condBranchInfo.set(t.index,M)}}}if(o.emitLine(`${n}} else {`),_>=0){let w=a[_];if(!V(w))o.emitLine(`${n} // Error: Expected => in case`);else{let $=w.args[1];if(o.emitLine(`${n} sm->cond_branch_${t.index} = ${_};`),Oo($)){let b=la($,t,n+" ",r);if(b.length>0){let F=r;F.condBranchInfo||(F.condBranchInfo=new Map);let M=F.condBranchInfo.get(t.index)||{branches:[]};M.branches.push({index:_,value:$,hasAwait:!0,remainingExprs:b,deferredDropExpressions:(g=$.$)==null?void 0:g.deferredDropExpressions}),F.condBranchInfo.set(t.index,M)}}else{let b=z($,n+" ",r);b&&$.$&&!St($.$.env.modulePath,b)&&o.emitLine(`${n} ${b};`)}}}o.emitLine(`${n}}`)}else{o.emitLine(`${n}switch (${s}.tag) {`);for(let _=0;_<a.length;_++){let E=a[_];if(!V(E)||!v(E,"=>",2))continue;let k=E.args[0],w=E.args[1],$;if(V(k)&&v(k,".",1))$=k.args[0].token.value;else if(V(k)){let F=k.func;F&&V(F)&&v(F,".",1)&&($=F.args[0].token.value)}if(!$){o.emitLine(`${n} // Error: Could not extract variant name`);continue}let b=`${d.toUpperCase()}_${$.toUpperCase()}`;if(o.emitLine(`${n} case ${b}: {`),o.emitLine(`${n} sm->cond_branch_${t.index} = ${_};`),V(k)&&k.args.length>=1){let F=k.func;if(F&&V(F)&&v(F,".")){let M=u.variants.find(L=>L.name===$);if(M&&M.fields)for(let L=0;L<Math.min(k.args.length,M.fields.length);L++){let O=k.args[L],B=M.fields[L];if(j(O)&&B){let P=O.token.value,q=r,ne=!1,pe;if(q.stateMachineVariables){for(let[ye,ge]of q.stateMachineVariables)if(ge.name===P){ne=!0,pe=ye;break}}let ue=Q(B.label),oe=`${s}.data.${$}.${ue}`;if(ne&&pe)o.emitLine(`${n} sm->var_${pe} = ${oe};`);else{let ye=H(B.type,r);o.emitLine(`${n} ${ye} ${P} = ${oe};`)}}}}}if(Oo(w)){let F=la(w,t,n+" ",r);if(F.length>0){let M=r;M.condBranchInfo||(M.condBranchInfo=new Map);let L=M.condBranchInfo.get(t.index)||{branches:[]};L.branches.push({index:_,value:w,hasAwait:!0,remainingExprs:F,deferredDropExpressions:(h=w.$)==null?void 0:h.deferredDropExpressions}),M.condBranchInfo.set(t.index,L)}}else{let F=z(w,n+" ",r);F&&w.$&&!St(w.$.env.modulePath,F)&&o.emitLine(`${n} ${F};`)}o.emitLine(`${n} break;`),o.emitLine(`${n} }`)}o.emitLine(`${n} default: break;`),o.emitLine(`${n}}`)}}function la(e,t,n,r){let o=r.emitter,i=[];if(e.tag!=="FuncCall"||!v(e,"begin"))return o.emitLine(`${n}// Error: Expected begin block in cond branch with await`),i;let a=e.args,s=!1;for(let l of a){if(s){i.push(l);continue}if(Oo(l))if(s=!0,l.tag==="FuncCall"&&v(l,":=")){let u=l.args[1];if(u&&u.tag==="FuncCall"&&v(u,C.await)){let d=u.args[0];if(d){let c=z(d,n,r);o.emitLine(`${n}// Store Future for await ${t.index} (cond branch)`),o.emitLine(`${n}sm->await_future_${t.index} = ${c};`)}}}else if(l.tag==="FuncCall"&&v(l,C.await)){let u=l.args[0];if(u)if(t.futureVariableId===void 0){let d=z(u,n,r);o.emitLine(`${n}// Store Future for await ${t.index} (cond branch)`),o.emitLine(`${n}sm->await_future_${t.index} = ${d};`)}else o.emitLine(`${n}// Await will use Future from sm->var_${t.futureVariableId}`)}else l.tag==="FuncCall"&&v(l,A.match)&&Za(l,t,n,r);else{let u=z(l,n,r);u&&l.$&&!St(l.$.env.modulePath,u)&&o.emitLine(`${n}${u};`)}}return i}function $d(e,t,n,r){let o=r.emitter;if(e.tag!=="FuncCall"||!v(e,"while")){o.emitLine(`${n}// Error: Expected while expression`);return}let i=e.args;if(i.length!==2){o.emitLine(`${n}// Error: while must have exactly 2 arguments (condition, body)`);return}let a=i[0],s=i[1];o.emitLine(`${n}sm->while_loop_${t.index}_active = true;`),o.emitLine(`${n}while_loop_${t.index}_start:`);let l=z(a,n,r);o.emitLine(`${n}if (!(${l})) {`),o.emitLine(`${n} sm->while_loop_${t.index}_active = false;`),o.emitLine(`${n} goto while_loop_${t.index}_end;`),o.emitLine(`${n}}`);let u=Ed(s,t,n,r);o.emitLine(`${n}while_loop_${t.index}_end:`),r.whileLoopInfo||(r.whileLoopInfo=new Map),r.whileLoopInfo.set(t.index,{conditionExpr:a,bodyExpr:s,bodyExprsAfterAwait:u})}function Ed(e,t,n,r){let o=r.emitter,i=[],a=[];e.tag==="FuncCall"&&v(e,"begin")?a=e.args:a=[e];let s=-1;for(let u=0;u<a.length;u++){let d=a[u];if(pa(d)){s=u;break}}if(s===-1)return o.emitLine(`${n}// Error: Expected await in while loop body but none found`),i;for(let u=0;u<s;u++){let d=a[u],c=z(d,n,r);c&&d.$&&!St(d.$.env.modulePath,c)&&o.emitLine(`${n}${c};`)}let l=a[s];if(V(l)&&v(l,":=")){let u=l.args[1];if(u&&u.tag==="FuncCall"&&v(u,C.await)){let d=u.args[0];if(d){let c=z(d,n,r);o.emitLine(`${n}// Store Future for await ${t.index} (while loop body)`),o.emitLine(`${n}sm->await_future_${t.index} = ${c};`)}}}else if(l.tag==="FuncCall"&&v(l,C.await)){let u=l.args[0];if(u){let d=z(u,n,r);o.emitLine(`${n}// Store Future for await ${t.index} (while loop body)`),o.emitLine(`${n}sm->await_future_${t.index} = ${d};`)}}else{if(V(l)&&v(l,A.cond))return Qa(l,t,n,r,void 0),i;if(V(l)&&v(l,A.match))return Za(l,t,n,r),i}for(let u=s+1;u<a.length;u++)i.push(a[u]);return i}function pa(e){if(e.tag==="FuncCall"&&v(e,C.await))return!0;if(e.tag==="FuncCall"){if(pa(e.func))return!0;for(let t of e.args)if(pa(t))return!0}return!1}function Au(e,t){if(e.futureVariableId){let n=t.capturedVariables.find(r=>r.id===e.futureVariableId);if(n)return n.kind==="outer"?n.name:`var_${n.id}`}return`await_future_${e.index}`}function ca(e,t){return t==="outer"?`__capture.${Q(e)}`:Q(`var_${e}`)}function Iu(e,t,n,r,o,i,a,s){var m,y,g,h,_,E;let l=s.emitter,d=Ht(i).isFuture.outputType,c=Be(d);s.condBranchInfo=new Map;let f=Su(e,o.awaitPoints);l.emitLine(`// Resume function for async block ${t}`),l.emitLine(`void ${r}(${n}* sm) {`),l.emitLine(` ASYNC_DEBUG("${t}_resume: state=%d\\n", sm->state);`),l.emitLine(" switch (sm->state) {");for(let k=0;k<f.length;k++){let w=f[k];if(!w)continue;let $=w.stateNumber,b=k===f.length-1;if(l.emitLine(`
162
+ state_${$}:`),l.emitLine(` case ${$}: { // State ${$}`),l.emitLine(` ASYNC_DEBUG("${t}: Entering state ${$}\\n");`),$>0&&o.awaitPoints[$-1]){let P=o.awaitPoints[$-1],q=Au(P,o);if(P&&!Be(P.resultType)){if(l.emitLine(` // Extract result from await ${$-1}`),l.emitLine(` int state_before_read = atomic_load_explicit(&sm->${q}->state, memory_order_acquire);`),l.emitLine(` ASYNC_DEBUG("${t}: Reading result from await ${$-1}, state=%d\\n", state_before_read);`),qe(P.resultType)){let pe=Nu(P.resultType,s);pe?l.emitLine(` sm->await_result_${$-1} = ${pe}(sm->${q}->result);`):(l.emitLine(" /* Warning: No ___dup function found for result type, shallow copy may cause use-after-free */"),l.emitLine(` sm->await_result_${$-1} = sm->${q}->result;`))}else l.emitLine(` sm->await_result_${$-1} = sm->${q}->result;`);if(P.targetVariableId){let pe=ca(P.targetVariableId,"local");l.emitLine(` sm->${pe} = sm->await_result_${$-1};`)}l.emitLine("")}if(!P.futureVariableId){let pe=P.expr;if(pe.tag==="FuncCall"){let ue=pe.args[0],oe=(m=ue==null?void 0:ue.$)==null?void 0:m.type;oe&&(ee(oe)||Ne(oe))&&(l.emitLine(` if (sm->${q} != NULL) { __yo_decr_rc((void*)sm->${q}); sm->${q} = NULL; }`),l.emitLine(""))}}let ne=s;if(P){let pe=(y=ne.condBranchInfo)==null?void 0:y.get(P.index);if(pe&&pe.branches.some(oe=>oe.hasAwait)){l.emitLine(" // Execute remaining code from chosen cond branch"),l.emitLine(` switch (sm->cond_branch_${P.index}) {`);for(let oe of pe.branches)if(oe.hasAwait){if(l.emitLine(` case ${oe.index}: {`),l.emitLine(` ASYNC_DEBUG("${t}: Executing remaining code from branch ${oe.index}\\n");`),oe.remainingExprs&&oe.remainingExprs.length>0){let ye=s.inStateMachine,ge=s.stateMachineVariables;s.inStateMachine={futureType:i};let Me=new Map;for(let Se of o.capturedVariables)Me.set(Se.id,Se);if(a)for(let Se of a.fields)Me.set(Se.label,{id:Se.label,name:Se.label,type:Se.type,kind:"outer",isOwningTheSameGcValueAs:void 0});s.stateMachineVariables=Me;for(let Se of oe.remainingExprs){let Re=z(Se," ",s);!Re||!Se.$||St(Se.$.env.modulePath,Re)||l.emitLine(` ${Re};`)}if(oe.deferredDropExpressions)for(let Se of oe.deferredDropExpressions){let Re=z(Se," ",s);Re&&Re.includes("sm->")&&l.emitLine(` ${Re};`)}s.inStateMachine=ye,s.stateMachineVariables=ge}l.emitLine(" break;"),l.emitLine(" }")}if(l.emitLine(" }"),pe.targetVariableId){let oe=ca(pe.targetVariableId,"local");l.emitLine(" // Assign cond result to target variable"),l.emitLine(` sm->${oe} = sm->await_result_${P.index};`)}l.emitLine("")}let ue=(g=ne.whileLoopInfo)==null?void 0:g.get(P.index);if(ue){if(l.emitLine(" // Execute remaining code from while loop body and continue loop"),l.emitLine(` if (sm->while_loop_${P.index}_active) {`),ue.bodyExprsAfterAwait&&ue.bodyExprsAfterAwait.length>0){let Re=s.inStateMachine,Te=s.stateMachineVariables;s.inStateMachine={futureType:i};let be=new Map;for(let I of o.capturedVariables)be.set(I.id,I);if(a)for(let I of a.fields)be.set(I.label,{id:I.label,name:I.label,type:I.type,kind:"outer",isOwningTheSameGcValueAs:void 0});s.stateMachineVariables=be;for(let I of ue.bodyExprsAfterAwait){let U=z(I," ",s);!U||!I.$||St(I.$.env.modulePath,U)||l.emitLine(` ${U};`)}s.inStateMachine=Re,s.stateMachineVariables=Te}l.emitLine(` ASYNC_DEBUG("${t}: Re-evaluating while loop condition\\n");`);let oe=s.inStateMachine,ye=s.stateMachineVariables;s.inStateMachine={futureType:i};let ge=new Map;for(let Re of o.capturedVariables)ge.set(Re.id,Re);if(a)for(let Re of a.fields)ge.set(Re.label,{id:Re.label,name:Re.label,type:Re.type,kind:"outer",isOwningTheSameGcValueAs:void 0});s.stateMachineVariables=ge;let Me=z(ue.conditionExpr," ",s);s.inStateMachine=oe,s.stateMachineVariables=ye,l.emitLine(` if (!(${Me})) {`),l.emitLine(` sm->while_loop_${P.index}_active = false;`),l.emitLine(` ASYNC_DEBUG("${t}: While loop condition false, exiting loop\\n");`),l.emitLine(" } else {"),l.emitLine(` ASYNC_DEBUG("${t}: While loop condition true, continuing iteration\\n");`);let Se=P.index;l.emitLine(" // Loop back by transitioning to while loop state"),l.emitLine(` sm->state = ${Se};`),l.emitLine(` goto while_loop_${Se}_start;`),l.emitLine(" }"),l.emitLine(" }"),l.emitLine(""),l.emitLine(` after_while_loop_${P.index}:`)}}}let F=s.inStateMachine,M=s.stateMachineVariables;s.inStateMachine={futureType:i};let L=new Map;for(let P of o.capturedVariables)L.set(P.id,P);if(a)for(let P of a.fields)L.set(P.label,{id:P.label,name:P.label,type:P.type,kind:"outer",isOwningTheSameGcValueAs:void 0});s.stateMachineVariables=L;let O=s.pendingDeferredDrops;s.pendingDeferredDrops=(h=e.$)==null?void 0:h.deferredDropExpressions;let B=b&&!c&&w.expressions.length>0;if(Lu(w," ",s,B),s.pendingDeferredDrops=O,l.emitLine(""),w.awaitPoint){s.inStateMachine=F,s.stateMachineVariables=M;let P=$+1,q=Au(w.awaitPoint,o),ne=(_=w.awaitPoint)==null?void 0:_.isInsideWhile;if(ne){let pe=w.awaitPoint.index;l.emitLine(" // Only await if while loop is still active (not broken)"),l.emitLine(` if (sm->while_loop_${pe}_active) {`)}if(l.emitLine(" // Transition to next state after await"),l.emitLine(` sm->state = ${P};`),l.emitLine(""),l.emitLine(" // Check if future is ready"),l.emitLine(` int future_state = atomic_load_explicit(&sm->${q}->state, memory_order_acquire);`),l.emitLine(" if (future_state == -1) { // -1 = completed"),l.emitLine(" // Yield once even when ready (microtask semantics), then resume in next tick"),l.emitLine(` yo_async_spawn_task((void (*)(void*))${r}, (void*)sm);`),l.emitLine(" return;"),l.emitLine(" } else {"),l.emitLine(" // Register continuation to be called when future completes"),l.emitLine(` atomic_store_explicit(&sm->${q}->continuation_fn, (void (*)(void*))${r}, memory_order_release);`),l.emitLine(` atomic_store_explicit(&sm->${q}->continuation_sm, (void*)sm, memory_order_release);`),l.emitLine(" return;"),l.emitLine(" }"),ne){let pe=w.awaitPoint.index;l.emitLine(" } else {"),l.emitLine(" // While loop was broken, jump to code after loop"),l.emitLine(` goto after_while_loop_${pe};`),l.emitLine(" }")}}else if(b){if(!w.expressions.some(q=>v(q,"return"))){if((E=e.$)!=null&&E.deferredDropExpressions){l.emitLine(" // Drop local variables before completion");for(let q of e.$.deferredDropExpressions){let ne=z(q," ",s);ne&&l.emitLine(` ${ne};`)}l.emitLine("")}l.emitLine(" // Final state - complete the Future"),l.emitLine(" atomic_store_explicit(&sm->state, -1, memory_order_release); // -1 = completed"),l.emitLine(""),l.emitLine(" // Check if there's a continuation to invoke"),l.emitLine(" void (*continuation_fn)(void*) = (void (*)(void*))atomic_load_explicit(&sm->continuation_fn, memory_order_acquire);"),l.emitLine(" void* continuation_sm = atomic_load_explicit(&sm->continuation_sm, memory_order_acquire);"),l.emitLine(""),l.emitLine(" if (continuation_fn != NULL) {"),l.emitLine(' ASYNC_DEBUG("Future %p completed, spawning continuation: resume_fn=%p, sm=%p\\n", (void*)sm, (void*)continuation_fn, continuation_sm);'),l.emitLine(""),l.emitLine(" // Clear the continuation (prevent double-spawn)"),l.emitLine(" atomic_store_explicit(&sm->continuation_fn, NULL, memory_order_relaxed);"),l.emitLine(" atomic_store_explicit(&sm->continuation_sm, NULL, memory_order_relaxed);"),l.emitLine(""),l.emitLine(" // Spawn the continuation as a new task"),l.emitLine(" yo_async_spawn_task(continuation_fn, continuation_sm);"),l.emitLine(" }"),l.emitLine(""),l.emitLine(" // Release event loop's reference now that task is complete"),l.emitLine(" // This balances the __yo_incr_rc in yo_async_spawn_task"),l.emitLine(" __yo_decr_rc((void*)sm);"),l.emitLine(""),l.emitLine(" // Stay in terminal state (-1)"),l.emitLine(" return;")}s.inStateMachine=F,s.stateMachineVariables=M}else s.inStateMachine=F,s.stateMachineVariables=M;l.emitLine(" }")}l.emitLine(" }"),l.emitLine("}"),l.emitLine("")}function Kr(e,t,n){let r=me(t,e);return r.length===0?!1:r[r.length-1].frameLevel<=n}function Du(e,t){if(!t)return Q(e);let n=me(t,e);if(n.length>0){let r=n[n.length-1];if(r.parameterAlias)return Q(r.parameterAlias)}return Q(e)}function Uu(e){if(!V(e)||e.args.length<1)return;let t=e.args[0];if(!(!t||!j(t)))return t.token.value}function Cd(e,t,n,r,o,i=!1){var m;let a=Object.values(o.types).find(y=>y.type===e);if(!a)return o.emitter.emitLine(`${r}/* Error: Capture type not found for closure */`),null;let s=a.cName,l=new Map;if((m=n.$)!=null&&m.deferredDupExpressions)for(let y of n.$.deferredDupExpressions){let g=Uu(y);g&&l.set(g,y)}let u=e.fields.map(y=>{var E,k;let g,h=y.exprs.expr;if((k=(E=h.$)==null?void 0:E.deferredDupExpressions)!=null&&k.length&&(g=h.$.deferredDupExpressions[0]),!g){let w=[y.label];j(h)&&w.push(h.token.value);for(let $ of w){let b=l.get($);if(b){g=b;break}}}if(g)return z(g,r,o);let _={tag:"Atom",token:y.exprs.expr.token,$:y.exprs.expr.$};return fa(_,o)}),d=`(${s}){ ${u.map((y,g)=>{let h=e.fields[g];return h?`.${Q(h.label)} = ${y}`:`/* Error: missing field at index ${g} */`}).join(", ")} }`,c=n.token.position.row!==void 0?`${Date.now()}_${n.token.position.row}`:`${Date.now()}_${Math.random().toString(36).substr(2,9)}`,f=`__capture_${t}_${c}`;return i?o.emitter.emitLine(`${r}${s} ${f} = ${d};`):(o.emitter.emitLine(`${r}${s}* ${f} = (${s}*)__yo_malloc(sizeof(${s}));`),o.emitter.emitLine(`${r}*${f} = ${d};`)),{captureTempVar:f,captureCName:s}}function z(e,t,n){let r;switch(e.tag){case"FuncCall":r=Bo(e,t,n);break;case"Atom":r=fa(e,n);break}return r}function Bo(e,t,n){var i,a,s,l,u,d,c,f,m,y,g,h,_,E,k,w,$,b,F,M,L,O,B,P,q,ne,pe,ue,oe,ye,ge,Me,Se,Re,Te,be,I,U,te,se,ve,xe,Ze,Je,rt,Cn,qt,an,Xo,ss,ls,us,ps,cs,fs,ds,ms,ys,_s,gs,hs,vs,Ts,$s,Es,Cs,ks,bs,Fs,ws,Vs,xs,Ms,Ss,Ls,As,Is,Ns,Ds,Os,Us,Bs,Ps,zs,Gs,Rs,qs,Ys,js,Ws,Hs,Ks,Qs,Zs,Js,Xs,el,tl,nl,rl,ol,il,al,sl,ll,ul,pl,cl,fl,dl,ml,yl,_l,gl,hl,vl,Tl,$l,El,Cl,kl,bl,Fl,wl,Vl,xl,Ml,Sl,Ll,Al,Il,Nl,Dl,Ol;let r=n.emitter;if((i=e.$)!=null&&i.macroExpansion)return z(e.$.macroExpansion,t,n);if(V(e.func)&&v(e.func,".",2)&&e.func.args[1]&&j(e.func.args[1])){let D=e.func.args[1].token.value,N=e.func.args[0],Y=(a=N==null?void 0:N.$)==null?void 0:a.type;if(Y&&ee(Y)&&Pe(Y)){if(D===C.___drop[0]){let Z=z(N,t,n);return`if (${Z} != NULL) { __yo_decr_rc((void*)${Z}); }`}if(D===C.___dup[0])return`__yo_incr_rc((void*)${z(N,t,n)})`}}if((s=e.$)!=null&&s.closureFunctionValue&&((l=e.$)!=null&&l.type)&&mn(e.$.type)){let D=nn(e.$.type),N=D.isFn.callType,Y=e.$.closureFunctionValue,Z=e.$.captureType,ie=(u=n.functions[Y.funcId])==null?void 0:u.cName;if(!ie)return"// Error: Closure implementation function not found in context";let X=Ne(e.$.type),R;if(X){let de=n.types[e.$.type.id];if(!de)return"// Error: Dyn closure type not found in context";R=de.cName}let K=Z&&$e(Z)&&Z.fields.length>0,le=H(N.return.type,n),he=N.parameters.map(de=>H(de.type,n)).join(", "),_e=`(${le} (*)(void*${he?", "+he:""}))${ie}`;if(K&&Z&&$e(Z)){let de=!X,fe=Cd(Z,N.id,e,t,n,de);if(!fe)return"// Error: Failed to allocate closure capture";let{captureTempVar:Le}=fe;if(X){let Ge=`__yo_create_${R}`,Tt=`__yo_dispose_${R}`;return`${Ge}(${Le}, ${Tt}, ${_e})`}else return n.implClosureCallMap.set(Z.id,{functionCName:ie,callTypeId:D.isFn.callType.id}),Le}else if(X){let de=`__yo_create_${R}`,fe=`__yo_dispose_${R}`;return`${de}(NULL, ${fe}, ${_e})`}else{if(e.$.type&&e.$.type.tag==="SomeType"){let de=e.$.type;if(de.resolvedConcreteType)return n.implClosureCallMap.set(de.resolvedConcreteType.id,{functionCName:ie,callTypeId:D.isFn.callType.id}),`(${H(de.resolvedConcreteType,n)}){}`}return"// Error: Impl(Fn(...)) without captures missing resolvedConcreteType"}}if(v(e,C.__yo_decr_rc)){let D=e.args[0];return D?`__yo_decr_rc(${z(D,t,n)})`:"// Error: __yo_decr_rc requires exactly 1 argument"}if(v(e,C.__yo_incr_rc)){let D=e.args[0];return D?`__yo_incr_rc(${z(D,t,n)})`:"// Error: __yo_incr_rc requires exactly 1 argument"}if(v(e,C.__yo_rc_own)){let D=e.args[0];return D?z(D,t,n):"// Error: __yo_rc_own requires exactly 1 argument"}if(v(e,C.___dup)){let D=e.args[0];if(!D)return"// Error: ___dup requires exactly 1 argument";let N=z(D,t,n),Y=((d=D.$)==null?void 0:d.type)??((c=e.$)==null?void 0:c.type);return Y?Ne(Y)?`((${H(Y,n)}){ .data = __yo_incr_rc((void*)(${N}).data), .vtable = (${N}).vtable })`:$t(Y)?`((${H(Y,n)})__yo_incr_rc((void*)(${N})))`:gt(Y)?`((${H(Y,n)})__yo_incr_rc_atomic((void*)(${N})))`:N:N}if(v(e,C.___drop)){let D=e.args[0];if(!D)return"// Error: ___drop requires exactly 1 argument";let N=z(D,t,n),Y=((f=D.$)==null?void 0:f.type)??((m=e.$)==null?void 0:m.type);if(!Y)return"";if(Ne(Y))return`__yo_decr_rc((void*)(${N}).data)`;if($t(Y))return`__yo_decr_rc((void*)(${N}))`;if(gt(Y))return`__yo_decr_rc_atomic((void*)(${N}))`;if(ee(Y)&&Y.resolvedConcreteType){let ie=(y=Y.resolvedConcreteType.module)==null?void 0:y.fields.find(X=>X.label===C.___drop[0]);if(ie&&ie.assignedValue&&Fe(ie.assignedValue)){let X=(g=n.functions[ie.assignedValue.funcId])==null?void 0:g.cName;if(X)return`${X}(${N})`}}return""}if(v(e,C.__yo_dyn_drop)){let D=e.args[0];return D?`__yo_decr_rc((void*)(${z(D,t,n)}).data)`:"// Error: __yo_dyn_drop requires exactly 1 argument"}if(v(e,C.__yo_dyn_dup)){let D=e.args[0];return D?`__yo_incr_rc((void*)(${z(D,t,n)}).data)`:"// Error: __yo_dyn_dup requires exactly 1 argument"}if(v(e,C.__yo_incr_rc_atomic)){let D=e.args[0];return D?`__yo_incr_rc_atomic(${z(D,t,n)})`:"// Error: __yo_incr_rc_atomic requires exactly 1 argument"}if(v(e,C.__yo_decr_rc_atomic)){let D=e.args[0];return D?`__yo_decr_rc_atomic(${z(D,t,n)})`:"// Error: __yo_decr_rc_atomic requires exactly 1 argument"}if(v(e,C.__yo_iso_extract)){let D=e.args[0];if(!D)return"// Error: __yo_iso_extract requires exactly 1 argument";let N=z(D,t,n),Y=(h=D.$)==null?void 0:h.type;if(!Y||!gt(Y))return"// Error: __yo_iso_extract requires an Iso type";let Z=H(Y,n),ie=(_=e.$)==null?void 0:_.type;if(ie&&((E=n.isoTypes)!=null&&E.has(Z))){let K=n.isoTypes.get(Z);K.optionTypeCName||(K.optionTypeCName=H(ie,n))}let X=`__yo_iso_extract_${Z}(${N})`,R=(k=e.$)==null?void 0:k.variableName;return R&&ie?(n.emitter.emitLine(`${t}${H(ie,n)} ${R} = ${X};`),R):X}if(v(e,C.__yo_iso_dispose)){let D=e.args[0];if(!D)return"// Error: __yo_iso_dispose requires exactly 1 argument";let N=z(D,t,n),Y=(w=D.$)==null?void 0:w.type;return!Y||!gt(Y)?"// Error: __yo_iso_dispose requires an Iso type":`__yo_iso_dispose_${H(Y,n)}(${N})`}let o=($=e.func.$)==null?void 0:$.value;if(G(o)&&gt(o.value)&&e.args.length===1){let D=o.value,N=D.childType,Y=e.args[0],Z=z(Y,t,n),ie=H(D,n),X=H(N,n);return n.isoTypes||(n.isoTypes=new Map),n.isoTypes.has(ie)||n.isoTypes.set(ie,{childTypeCName:X,isoType:D}),`__yo_create_iso_${ie}(${Z})`}if(v(e,C.__yo_sometype_drop)){let D=e.args[0];if(!D)return"// Error: __yo_sometype_drop requires exactly 1 argument";let N=(b=D.$)==null?void 0:b.type;if(N&&ee(N)&&Pe(N)){let Y=z(D,t,n);return`if (${Y} != NULL) { __yo_decr_rc((void*)${Y}); }`}if(N&&ee(N)&&N.resolvedConcreteType){let Z=(F=N.resolvedConcreteType.module)==null?void 0:F.fields.find(ie=>ie.label===C.___drop[0]);if(Z&&Z.assignedValue&&Fe(Z.assignedValue)){let ie=(M=n.functions[Z.assignedValue.funcId])==null?void 0:M.cName;if(ie){let X=z(D,t,n);return`${ie}(${X})`}}}return"/* __yo_sometype_drop: no-op */"}if(v(e,C.__yo_sometype_dup)){let D=e.args[0];if(!D)return"// Error: __yo_sometype_dup requires exactly 1 argument";let N=(L=D.$)==null?void 0:L.type;if(N&&ee(N)&&Pe(N))return`__yo_incr_rc((void*)${z(D,t,n)})`;if(N&&ee(N)&&N.resolvedConcreteType){let Z=(O=N.resolvedConcreteType.module)==null?void 0:O.fields.find(ie=>ie.label===C.___dup[0]);if(Z&&Z.assignedValue&&Fe(Z.assignedValue)){let ie=(B=n.functions[Z.assignedValue.funcId])==null?void 0:B.cName;if(ie){let X=z(D,t,n);return`${ie}(${X})`}}}return"/* __yo_sometype_dup: no-op */"}if(v(e,C.__yo_gc_collect))return e.args.length!==0?"// Error: __yo_gc_collect requires exactly 0 arguments":"__yo_gc_collect()";if(v(e,C.rc)){if(e.args.length!==1)return"// Error: rc requires exactly 1 argument";let D=e.args[0],N=(P=D.$)==null?void 0:P.type;if(!N)return"// Error: rc argument missing type information";let Y=z(D,t,n);return Xt(N)?`((yo_ref_header_t*)(${Y}))->ref_count`:"1"}if(v(e,C.panic)){let D=(q=e.$)==null?void 0:q.type;if(!D)return"// Error: panic() missing type information";if(e.args.length===0)r.emitLine(`${t}abort();`);else if(e.args.length===1){let Y=e.args[0];if((ne=Y.$)!=null&&ne.value&&We(Y.$.value)){let Z=Y.$.value.value;r.emitLine(`${t}fprintf(stderr, "%s\\n", ${JSON.stringify(Z)});`),r.emitLine(`${t}abort();`)}else{let Z=z(Y,t,n);r.emitLine(`${t}fprintf(stderr, "%s\\n", ${Z});`),r.emitLine(`${t}abort();`)}}else return`// Error: panic accepts 0 or 1 arguments, got ${e.args.length}`;return`(*((${H(D,n)}*)NULL))`}if(v(e,A.test))return"/* test declaration skipped */";if(v(e,C.__yo_thread_set_maximum_threads)){let D=e.args[0];return D?`__yo_thread_set_maximum_threads(${z(D,t,n)})`:"// Error: __yo_thread_set_maximum_threads requires exactly 1 argument"}if(v(e,A.op_and))return e.args.length===0?"true":e.args.length===1?z(e.args[0],t,n):`(${e.args.map(N=>z(N,t,n)).join(" && ")})`;if(v(e,A.op_or))return e.args.length===0?"false":e.args.length===1?z(e.args[0],t,n):`(${e.args.map(N=>z(N,t,n)).join(" || ")})`;if(v(e,C.async))return bd(e,t,n);if(v(e,A.dyn))return Ld(e,t,n);if(v(e,C.await)){let D=e.args[0];if(!D)return"// Error: await requires exactly 1 argument";let N=(pe=D.$)==null?void 0:pe.type;return!N||!Pe(N)?"// Error: await argument must be a Future type":Ht(N)?n.inStateMachine?"":"// Error: await should only be used inside async blocks":"// Error: could not extract Future module from type"}if(v(e,A.return)){let D=e.args[0];if(D){if(!e.$)throw new Error("Internal error: return expression missing metadata");if(!e.$.variableName&&!Be(e.$.type))return"// Error: return expression missing temporary variable name";let N=n,Y,Z=!1;if(N.inStateMachine&&((ue=D.$)!=null&&ue.variableName)){let le=D.$.variableName;D.$.variableName=void 0,Y=z(D,t,n),D.$.variableName=le,Z=!0}else if((oe=D.$)!=null&&oe.variableName&&((ye=D.$)!=null&&ye.deferredDupExpressions)&&D.$.deferredDupExpressions.length>0){let le=D.$.variableName;D.$.variableName=void 0;let he=z(D,t,n);D.$.variableName=le;let _e=H(D.$.type,n),de=Q(le);de!==he&&n.emitter.emitLine(`${t}${_e} ${de} = ${he};`),Y=de}else Y=z(D,t,n);let ie=!1;if((ge=D.$)!=null&&ge.deferredDupExpressions&&D.$.deferredDupExpressions.length>0){Ft(D,t,N);let le=D.$.deferredDupExpressions[0];V(le)&&((Me=le.$)!=null&&Me.variableName)&&(Y=Q(le.$.variableName),ie=!0)}let X=H(e.$.type,n),R=e.$.variableName?Q(e.$.variableName):void 0;if(!ie&&!Be(e.$.type)&&R&&R!==Y&&n.emitter.emitLine(`${t}${X} ${R} = ${Y};`),e.$.deferredDropExpressions&&Kt(e,t,n),N.inStateMachine){let le=N.inStateMachine.futureType,_e=Ht(le).isFuture.outputType,de=Be(_e);if(N.pendingDeferredDrops&&(!e.$.deferredDropExpressions||e.$.deferredDropExpressions.length===0)){n.emitter.emitLine(`${t}// Drop local variables before early completion`);for(let fe of N.pendingDeferredDrops){let Le=z(fe,t,n);Le&&n.emitter.emitLine(`${t}${Le};`)}}if(n.emitter.emitLine(`${t}// Final state - complete the result Future`),n.emitter.emitLine(`${t}ASYNC_DEBUG("${n.currentFunctionName}: Completing async function\\n");`),!de){let fe=e.$.variableName&&Z?e.$.variableName:e.$.variableName||Y;n.emitter.emitLine(`${t}sm->result = ${fe};`)}return n.emitter.emitLine(`${t}ASYNC_DEBUG("${n.currentFunctionName}: Setting state to COMPLETED\\n");`),n.emitter.emitLine(`${t}atomic_store_explicit(&sm->state, -1, memory_order_release); // -1 = completed`),n.emitter.emitLine(""),n.emitter.emitLine(`${t}// Check if there's a continuation waiting for this Future to complete`),n.emitter.emitLine(`${t}void (*continuation_fn)(void*) = atomic_load_explicit(&sm->continuation_fn, memory_order_acquire);`),n.emitter.emitLine(`${t}void* continuation_sm = atomic_load_explicit(&sm->continuation_sm, memory_order_acquire);`),n.emitter.emitLine(`${t}if (continuation_fn != NULL) {`),n.emitter.emitLine(`${t} ASYNC_DEBUG("${n.currentFunctionName}: Spawning continuation: resume_fn=%p, sm=%p\\n", (void*)continuation_fn, continuation_sm);`),n.emitter.emitLine(`${t} yo_async_spawn_task(continuation_fn, continuation_sm);`),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}sm->state = ${Number.MAX_SAFE_INTEGER}; // Terminal state`),n.emitter.emitLine(""),n.emitter.emitLine(`${t}// Release the "running task" reference now that task is complete`),n.emitter.emitLine(`${t}// This balances the __yo_incr_rc in the constructor`),n.emitter.emitLine(`${t}__yo_decr_rc((void*)sm);`),n.emitter.emitLine(""),n.emitter.emitLine(`${t}return;`),""}return Be(e.$.type)?"return":`return ${ie?Y:R??Y}`}else return(Se=e.$)!=null&&Se.deferredDropExpressions&&Kt(e,t,n),"return"}if(xu(e))return Mu(e,t,n);if(v(e,"::",2))return"";if(v(e,":",2)){let D=e.args[0];if(V(D)&&v(D,A.compt,1))return"";if(!((Re=D.$)!=null&&Re.type))return`// Error: No type information for left-hand side ${T(D)}
163
+ `;let N=D.token.value,Y=bt(D.$.type,N,n);return n.emitter.emitLine(`${t}${Y};`),""}else if(v(e,":=",2)){let D=e.args[0],N=e.args[1],Y=n;if(V(D)&&v(D,A.compt,1))return"";if(Y.inStateMachine&&j(D)&&j(N)){let Z=D.token.value,ie=N.token.value,X=Y.stateMachineVariables&&Array.from(Y.stateMachineVariables.values()).some(K=>K.name===Z),R=Y.stateMachineVariables&&Array.from(Y.stateMachineVariables.values()).some(K=>K.name===ie);if(Z===ie&&(X||R))return""}if((Te=e.$)!=null&&Te.runtimeDestructurings){let Z=e.$.runtimeDestructurings,ie=z(N,t,n),X=(be=N.$)==null?void 0:be.type;return Z.forEach(({label:R,type:K,variableName:le})=>{let he=Q(le),_e=bt(K,he,n);if(X&&$e(X)&&X.isNewtype&&X.fields.length===1){let Le=X.fields[0];if(Le&&Le.label===R){n.emitter.emitLine(`${t}${_e} = ${ie}; // Destructuring ${R} (newtype)`);return}}let de=R.match(/^\d+$/)?`_${R}`:Q(R);if(X&&He(X)&&!R.match(/^\d+$/)){let Le=X.fields.findIndex(Ge=>Ge.label===R);de=Le>=0?`_${Le}`:de}let fe=X&&$t(X)?"->":".";n.emitter.emitLine(`${t}${_e} = ${ie}${fe}${de}; // Destructuring ${R}`)}),""}if(j(D)){let Z=D.token.value;if(!((I=D.$)!=null&&I.type))return`// Error: No type information for variable ${Z}
164
+ `;let ie=n,X=!1,R;if(ie.inStateMachine&&ie.stateMachineVariables&&((U=D.$)!=null&&U.env)){let K=me(D.$.env,Z);if(K.length>0){let le=K[K.length-1],he=le.isOwningTheSameGcValueAs?le.isOwningTheSameGcValueAs.id:le.id;ie.stateMachineVariables.has(he)&&(X=!0,R=he)}}if(Oe(D.$.type))if(V(N)&&v(N,A.array)){let K=z(N,t,n);if(X&&R)n.emitter.emitLine(`${t}sm->var_${R} = ${K};`);else{let le=bt(D.$.type,Z,n);n.emitter.emitLine(`${t}${le} = ${K};`)}}else{let K;if((te=N.$)!=null&&te.variableName){let le=Q(N.$.variableName),he=z(N,t,n);if(!X){let _e=bt(N.$.type,le,n);le!==he&&n.emitter.emitLine(`${t}${_e} = ${he};`)}K=le}else K=z(N,t,n);if(X&&R)n.emitter.emitLine(`${t}sm->var_${R} = ${K};`);else{let le=bt(D.$.type,Z,n);n.emitter.emitLine(`${t}${le} = ${K};`)}}else{let K,le=V(N)&&((se=N.$)==null?void 0:se.closureFunctionValue)&&((ve=N.$)==null?void 0:ve.type)&&mn(N.$.type);if((xe=N.$)!=null&&xe.variableName){let he=Q(N.$.variableName),_e=Q(Z);if(he===_e){if(K=z(N,t,n),!le&&((Ze=N.$)!=null&&Ze.deferredDupExpressions)&&N.$.deferredDupExpressions.length>0){Ft(N,t,ie);let de=N.$.deferredDupExpressions[0];V(de)&&((Je=de.$)!=null&&Je.variableName)&&(K=Q(de.$.variableName))}}else if(j(N)&&he===Q(N.token.value)){if(K=z(N,t,n),!le&&((rt=N.$)!=null&&rt.deferredDupExpressions)&&N.$.deferredDupExpressions.length>0){Ft(N,t,ie);let de=N.$.deferredDupExpressions[0];V(de)&&((Cn=de.$)!=null&&Cn.variableName)&&(K=Q(de.$.variableName))}}else{let de=n;if(j(N)&&de.currentClosureCaptures&&de.currentClosureCaptures.includes(N.token.value)&&((qt=N.$)!=null&&qt.env)&&de.currentClosureCaptureFrameLevel!==void 0&&Kr(N.token.value,N.$.env,de.currentClosureCaptureFrameLevel)){let fe=de.currentClosureType;if(fe&&fe.isClosure){let Le=Object.values(de.types).find(Ge=>Ge.type===fe);Le?K=`((${`${Le.cName}_capture`}*)closure_context->data)->${Q(N.token.value)}`:K=`closure_context->${Q(N.token.value)}`}else K=`closure_context->${Q(N.token.value)}`}else{let fe=z(N,t,n);if(fe.trim()!==he){let Le=bt(N.$.type,he,n);n.emitter.emitLine(`${t}${Le} = ${fe};`)}if(!le&&((an=N.$)!=null&&an.deferredDupExpressions)&&N.$.deferredDupExpressions.length>0){Ft(N,t,de);let Le=N.$.deferredDupExpressions[0];V(Le)&&((Xo=Le.$)!=null&&Xo.variableName)?K=Q(Le.$.variableName):K=he}else K=he}}}else if(K=z(N,t,n),!le&&((ss=N.$)!=null&&ss.deferredDupExpressions)&&N.$.deferredDupExpressions.length>0){Ft(N,t,n);let _e=N.$.deferredDupExpressions[0];V(_e)&&((ls=_e.$)!=null&&ls.variableName)&&(K=Q(_e.$.variableName))}if(at(D.$.type)){let he=D.$.type;if(X&&R)n.emitter.emitLine(`${t}sm->var_${R} = ${K};`);else{let _e=bt(he,Z,n);n.emitter.emitLine(`${t}${_e} = ${K};`)}}else if(X&&R)n.emitter.emitLine(`${t}sm->var_${R} = ${K};`);else{let he=St(N.$.env.modulePath,K.trim()),_e;if(he&&n.tempVarAsyncStructNames){let de=n.tempVarAsyncStructNames.get(K.trim());de?_e=`${de}*`:_e=H(D.$.type,n)}else _e=H(D.$.type,n);n.emitter.emitLine(`${t}${_e} ${Q(Z)} = ${K};`)}}return""}}else if(v(e,"=",2)){let D=e.args[0],N=e.args[1],Y=!1;if(V(D)&&v(D,":",2)&&(Y=!0,D=D.args[0]),V(D)&&v(D,A.compt))return"";if(!((us=D.$)!=null&&us.type))return`// Error: No type information for left-hand side ${T(D)}
165
+ `;let Z=z(D,t,n);if((ps=e.$)!=null&&ps.variableName){let ie=e.$.variableName;if(!(n.inStateMachine&&Z.startsWith("sm->"))){let K=bt(D.$.type,ie,n);Oe(D.$.type)?n.emitter.emitLine(`${t}${K} = ${Z}; // Save old value for later use`):Be(D.$.type)||n.emitter.emitLine(`${t}${K} = ${Z}; // Save old value for later use`)}}if(Oe(D.$.type)){let ie=z(N,t,n),X=V(N)&&((cs=N.$)==null?void 0:cs.closureFunctionValue)&&((fs=N.$)==null?void 0:fs.type)&&mn(N.$.type),R=n,K=ie;if(!X&&((ds=N.$)!=null&&ds.deferredDupExpressions)&&N.$.deferredDupExpressions.length>0){if((ms=N.$)!=null&&ms.variableName&&((ys=N.$)!=null&&ys.type)){let he=Q(N.$.variableName);if(he!==ie.trim()){let _e=H(N.$.type,n);n.emitter.emitLine(`${t}${_e} ${he} = ${ie};`)}}Ft(N,t,R);let le=N.$.deferredDupExpressions[0];V(le)&&((_s=le.$)!=null&&_s.variableName)&&(K=Q(le.$.variableName))}if(Y){let le=bt(D.$.type,z(D,t,n),n);n.emitter.emitLine(`${t}${le} = ${K};`)}else n.emitter.emitLine(`${t}${Z} = ${K};`)}else{let ie=z(N,t,n),X=V(N)&&((gs=N.$)==null?void 0:gs.closureFunctionValue)&&((hs=N.$)==null?void 0:hs.type)&&mn(N.$.type),R=n,K=ie;if(!X&&((vs=N.$)!=null&&vs.deferredDupExpressions)&&N.$.deferredDupExpressions.length>0){if((Ts=N.$)!=null&&Ts.variableName&&(($s=N.$)!=null&&$s.type)){let he=Q(N.$.variableName);if(he!==ie.trim()){let _e=H(N.$.type,n);n.emitter.emitLine(`${t}${_e} ${he} = ${ie};`)}}Ft(N,t,R);let le=N.$.deferredDupExpressions[0];V(le)&&((Es=le.$)!=null&&Es.variableName)&&(K=Q(le.$.variableName))}if(!Be(D.$.type)){let le=D.$.type,he=(Cs=N.$)==null?void 0:Cs.type,_e,de=St(N.$.env.modulePath,K.trim());de&&n.tempVarAsyncStructNames&&(_e=n.tempVarAsyncStructNames.get(K.trim()));let fe=Y&&he&&Pe(le)&&Pe(he),Le;de&&fe?_e?Le=`${_e}*`:Le=H(he,n):fe&&_e?Le=`${_e}*`:Le=H(fe?he:le,n),n.emitter.emitLine(`${t}${Y?Le+" ":""}${Z} = ${K};`)}}return((ks=e.$)==null?void 0:ks.variableName)??""}else if((bs=e.$)!=null&&bs.value&&!Ue((Fs=e.$)==null?void 0:Fs.value)&&!Be(e.$.type)){let D=e.$.value;return Wn(D,n,e)}else{if(v(e,".",2))return Ad(e,t,n);if(v(e,A.begin)){let D=(ws=e.$)==null?void 0:ws.variableName,N=(Vs=e.$)==null?void 0:Vs.type;if(D&&N){!Be(N)&&!((xs=e.$)!=null&&xs.controlFlow)&&n.emitter.emitLine(`${t}${H(N,n)} ${D};`),n.emitter.emitLine(`${t}{ // begin block`);let Y=[],Z=!Be(N)&&!((Ms=e.$)!=null&&Ms.controlFlow);for(let ie=0;ie<e.args.length;ie++){let X=e.args[ie],R=z(X,t+" ",n);Y.push(R);let K=ie===e.args.length-1;R&&!(K&&Z)&&(X.$&&St(X.$.env.modulePath,R)||n.emitter.emitLine(`${t} ${R};`))}if(Z&&n.emitter.emitLine(`${t} ${D} = ${Y[Y.length-1]};`),(Ss=e.$)!=null&&Ss.deferredDropExpressions)for(let ie of e.$.deferredDropExpressions){let X=z(ie,t+" ",n);X&&n.emitter.emitLine(`${t} ${X};`)}return n.emitter.emitLine(`${t}} // end begin block`),Be(N)||(Ls=e.$)!=null&&Ls.controlFlow?"":D}else{if(n.emitter.emitLine(`${t}{ // begin block`),e.args.map(Z=>z(Z,t+" ",n)).forEach(Z=>{Z&&n.emitter.emitLine(`${t} ${Z};`)}),(As=e.$)!=null&&As.deferredDropExpressions)for(let Z of e.$.deferredDropExpressions){let ie=z(Z,t+" ",n);ie&&n.emitter.emitLine(`${t} ${ie};`)}return n.emitter.emitLine(`${t}} // end begin block`),""}}else{if(v(e,A.cond))return Id(e,t,n);if(v(e,A.match))return Nd(e,t,n);if(v(e,C.__yo_address_of,1)){if(!((Is=e.$)==null?void 0:Is.type))return`// Error: No type information for pointer/reference expression ${T(e)}
166
+ `;let N=e.args[0];if(V(N)){let Z=(Ns=N.func.$)==null?void 0:Ns.type;if(Z&&Oe(Z)){let ie=N.args[0];if(ie&&V(ie)&&v(ie,":")){let X=z(N.func,t,n),R=z(ie.args[0],t,n),K=z(ie.args[1],t,n),le=`Slice_${Q(H(Z.childType,n))}`;return n.sliceStructTypes.has(le)||n.sliceStructTypes.set(le,{childType:H(Z.childType,n)}),`(${le}){ .data = &${X}.data[${R}], .length = ${K} - ${R} }`}else if(ie&&j(ie)&&ie.token.value===":"){let X=z(N.func,t,n),R=Z,K=R.childType,le=`Slice_${Q(H(K,n))}`;return n.sliceStructTypes.has(le)||n.sliceStructTypes.set(le,{childType:H(K,n)}),ct(R.length)?`(${le}){ .data = &${X}.data[0], .length = ${R.length.value} }`:"/* Error: Cannot slice array with non-compile-time length */"}}else if(Z&&(at(Z)||De(Z)&&at(Z.childType))){let ie=at(Z)?Z:Z.childType,X=N.args[0];if(X&&V(X)&&v(X,":")){let R=z(N.func,t,n),K=z(X.args[0],t,n),le=z(X.args[1],t,n),he=`Slice_${Q(H(ie.childType,n))}`;return n.sliceStructTypes.has(he)||n.sliceStructTypes.set(he,{childType:H(ie.childType,n)}),`(${he}){ .data = &${R}.data[${K}], .length = ${le} - ${K} }`}else if(X&&j(X)&&X.token.value===":"){let R=z(N.func,t,n),K=`Slice_${Q(H(ie.childType,n))}`;return n.sliceStructTypes.has(K)||n.sliceStructTypes.set(K,{childType:H(ie.childType,n)}),`(${K}){ .data = ${R}.data, .length = ${R}.length }`}}}return`(&${z(N,t,n)})`}else if(v(e,A.tuple)){let D=(Ds=e.$)==null?void 0:Ds.runtimeArgExprsInOrder,N=(Bs=n.types[((Us=(Os=e.$)==null?void 0:Os.type)==null?void 0:Us.id)??""])==null?void 0:Bs.cName,Y=(Ps=e.$)==null?void 0:Ps.variableName;if(D&&N){let Z=n,ie=D.map(X=>{var K,le;let R=z(X,t,n);if((K=X.$)!=null&&K.deferredDupExpressions&&X.$.deferredDupExpressions.length>0){Ft(X,t,Z);let he=X.$.deferredDupExpressions[0];if(V(he)&&((le=he.$)!=null&&le.variableName))return Q(he.$.variableName)}return R}).join(", ");if(Y&&((zs=e.$)!=null&&zs.type)){let X=`(${N}){ ${ie} }`,R=bt(e.$.type,Y,n);return n.emitter.emitLine(`${t}${R} = ${X};`),Y}else return`(${N}){ ${ie} }`}else if(e.args.length===0)return""}else if(v(e,A.array)){let D=(Gs=e.$)==null?void 0:Gs.runtimeArgExprsInOrder,N=(Rs=e.$)==null?void 0:Rs.type,Y=(qs=e.$)==null?void 0:qs.variableName;if(Oe(N)&&D){let Z=n,ie=D.map(R=>{var le,he;let K=z(R,t,n);if((le=R.$)!=null&&le.deferredDupExpressions&&R.$.deferredDupExpressions.length>0){Ft(R,t,Z);let _e=R.$.deferredDupExpressions[0];if(V(_e)&&((he=_e.$)!=null&&he.variableName))return Q(_e.$.variableName)}return K}).join(", "),X=H(N,n);if(Y&&((Ys=e.$)!=null&&Ys.type)){let R=`(${X}){ .data = { ${ie} } }`,K=bt(e.$.type,Y,n);return n.emitter.emitLine(`${t}${K} = ${R};`),Y}else return`(${X}){ .data = { ${ie} } }`}}else if(v(e,A.recur)){let D=(js=e.$)==null?void 0:js.runtimeArgExprsInOrder;if(D){let N=n,Y=D.map(Z=>{var X,R;let ie=z(Z,t,n);if((X=Z.$)!=null&&X.deferredDupExpressions&&Z.$.deferredDupExpressions.length>0){Ft(Z,t,N);let K=Z.$.deferredDupExpressions[0];if(V(K)&&((R=K.$)!=null&&R.variableName))return Q(K.$.variableName)}return ie}).join(", ");return`${n.currentFunctionName}(${Y})`}else return`// Error: No arguments for recur call ${T(e)}
167
+ `}else if(v(e,C.sizeof,1)){let D=e.args[0];return`sizeof(${z(D,t,n)})`}else if(v(e,C.__yo_decr_rc)){let D=e.args[0];return`__yo_decr_rc(${z(D,t,n)})`}else if(v(e,Hr)){let D=((Ws=e.$)==null?void 0:Ws.runtimeArgExprsInOrder)||e.args;if(D){let N=n,Y=D.map(Z=>{var X,R;let ie=z(Z,t,n);if((X=Z.$)!=null&&X.deferredDupExpressions&&Z.$.deferredDupExpressions.length>0){Ft(Z,t,N);let K=Z.$.deferredDupExpressions[0];if(V(K)&&((R=K.$)!=null&&R.variableName))return Q(K.$.variableName)}return ie});return Ja(e.func.token.value,Y,e,n)}}else{if(v(e,A.while))return Od(e,t,n);if(v(e,"->",2)&&V(e.args[0])&&v(e.args[0],A.fn)){let D=(Hs=e.$)==null?void 0:Hs.value;return Fe(D)?Wn(D,n):"// Error: Anonymous function missing function value"}else{if(v(e,C.consume))return z(e.args[0],t,n);if(v(e,C.compt_expect_error)||v(e,C.__yo_var_print_info)||v(e,C.__yo_var_is_owning_the_gc_value)||v(e,C.__yo_var_has_other_aliases))return"";{let D=(Ks=e.func.$)==null?void 0:Ks.type,N=(Qs=e.func.$)==null?void 0:Qs.value;if(ce(D)){let Y=(Zs=e.$)==null?void 0:Zs.runtimeArgExprsInOrder;if(Y){let Z=!1;if(V(e.func)&&v(e.func,".",2)){let R=e.func.args[0],K=(Js=R==null?void 0:R.$)==null?void 0:Js.type;K&&Ne(K)&&(Z=!0)}let ie=Y.map((R,K)=>{var le,he,_e,de,fe,Le,Ge,Tt,Vt;if((le=R.$)!=null&&le.variableName&&((he=R.$)!=null&&he.type)){let wt=n,Yt=wt.currentClosureCaptures&&wt.currentClosureCaptures.includes(R.$.variableName)&&j(R)&&R.$.env&&wt.currentClosureCaptureFrameLevel!==void 0&&Kr(R.token.value,R.$.env,wt.currentClosureCaptureFrameLevel),Mt=z(R,t,n),sn=wt.inStateMachine&&Mt.startsWith("sm->");if(Mt&&Mt!==R.$.variableName&&!Yt&&!sn){let Zt=Q(R.$.variableName);if(Mt!==Zt){let Sn=bt(R.$.type,R.$.variableName,n);n.emitter.emitLine(`${t}${Sn} = ${Mt};`)}}let Qt=R.$.variableName;if((_e=R.$)!=null&&_e.deferredDupExpressions&&R.$.deferredDupExpressions.length>0){let Zt=new Set;(de=R.$)!=null&&de.variableName&&Zt.add(Q(R.$.variableName)),Mt&&Zt.add(Mt),j(R)&&Zt.add(Q(R.token.value));let Sn=R.$.deferredDupExpressions.find(Fr=>{let lo=Uu(Fr);return lo?Zt.has(Q(lo)):!1});Sn&&(Ft(R,t,wt),V(Sn)&&((fe=Sn.$)!=null&&fe.variableName)&&(Qt=Q(Sn.$.variableName)))}if(Z&&K===0){if(V(e.func)&&v(e.func,".",2)){let Sn=e.func.args[0],Fr=(Le=Sn==null?void 0:Sn.$)==null?void 0:Le.type,lo=e.func.args[1];if(j(lo)&&Ne(Fr)){let Ff=lo.token.value;if(Fr.module.fields.find(wf=>wf.label===Ff))return Q(Qt)}}let Zt=(Ge=R.$)==null?void 0:Ge.type;return Zt&&De(Zt)?`${Q(Qt)}->data`:`(${Q(Qt)}).data`}else return Yt||sn?Mt:Q(Qt)}else if(Z&&K===0){let wt=z(R,t,n);if(V(e.func)&&v(e.func,".",2)){let Mt=e.func.args[0],sn=(Tt=Mt==null?void 0:Mt.$)==null?void 0:Tt.type,Qt=e.func.args[1];if(j(Qt)&&Ne(sn)){let Zt=Qt.token.value;if(sn.module.fields.find(Fr=>Fr.label===Zt))return wt}}let Yt=(Vt=R.$)==null?void 0:Vt.type;return Yt&&De(Yt)?`(${wt})->data`:`(${wt}).data`}else return z(R,t,n)}),X=ie.join(", ");if(D.isExtern==="yo"&&D.externName){let R=D.externName;return Hr.includes(R)?Ja(R,ie,e,n):R==="__yo_thread_spawn"?Md(e,t,n):R==="__yo_worker_spawn"?Sd(e,t,n):Be(D.return.type)?(n.emitter.emitLine(`${t}${R}(${X});`),(Xs=e.$)!=null&&Xs.deferredDropExpressions&&Kt(e,t,n),""):`${R}(${X})`}if(Fe(N)){let R=Do(N);if(R)return Ja(R,ie,e,n);let K=N.specializedType??N.type,le=(el=n.functions[N.funcId])==null?void 0:el.cName;if(le){if(Be(K.return.type))return n.emitter.emitLine(`${t}${le}(${X});`),(tl=e.$)!=null&&tl.deferredDropExpressions&&Kt(e,t,n),"";{let he=(nl=e.$)==null?void 0:nl.variableName;if(he){let _e=((rl=N.specializedType)==null?void 0:rl.return.type)??K.return.type,de=(ol=e.$)==null?void 0:ol.type,fe=de&&Pe(de),Le=_e&&Pe(_e),Ge;if(fe&&Le){let Tt=N.body;if(Tt&&v(Tt,"begin")){let Vt=Tt.args;if(Vt.length>0){let wt=Vt[Vt.length-1];v(wt,C.async)&&(Tt=wt)}}if(Tt&&v(Tt,C.async)&&((il=Tt.$)!=null&&il.asyncStateMachineStructName)){let Vt=Tt.$.asyncStateMachineStructName;Ge=`${Vt}*`,n.tempVarAsyncStructNames||(n.tempVarAsyncStructNames=new Map),n.tempVarAsyncStructNames.set(he,Vt)}else Ge=H(_e,n)}else Ge=H(de??_e,n);return n.emitter.emitLine(`${t}${Ge} ${he} = ${le}(${X});`),(al=e.$)!=null&&al.deferredDropExpressions&&Kt(e,t,n),he}else return`// Error: Regular function call returns ${H(((sl=N.specializedType)==null?void 0:sl.return.type)??K.return.type,n)} but no temp variable assigned`}}}else{let R=n.externFunctions[D.id];if(R){let K=R.cName;return(ll=e.$)!=null&&ll.deferredDropExpressions&&Kt(e,t,n),`${K}(${X})`}else{let K=z(e.func,t,n);if(Be(D.return.type))return n.emitter.emitLine(`${t}${K}(${X});`),(ul=e.$)!=null&&ul.deferredDropExpressions&&Kt(e,t,n),"";{let le=(pl=e.$)==null?void 0:pl.variableName;if(le){let he=D.return.type,_e=(cl=e.$)==null?void 0:cl.type,de=_e&&he&&Pe(_e)&&Pe(he)?he:_e??he;return n.emitter.emitLine(`${t}${H(de,n)} ${le} = ${K}(${X});`),(fl=e.$)!=null&&fl.deferredDropExpressions&&Kt(e,t,n),le}else return`// Error: Function parameter call returns ${H(D.return.type,n)} but no temp variable assigned`}}}}}else if(D&&mn(D)){let Y=D,Z=nn(Y),ie=Ne(Y);{let X=Z.isFn.callType,R=(dl=e.$)==null?void 0:dl.runtimeArgExprsInOrder;if(R){let K=n;for(let fe of R)if((ml=fe.$)!=null&&ml.variableName&&((yl=fe.$)!=null&&yl.type)){let Le=K.currentClosureCaptures&&K.currentClosureCaptures.includes(fe.$.variableName)&&j(fe)&&fe.$.env&&K.currentClosureCaptureFrameLevel!==void 0&&Kr(fe.token.value,fe.$.env,K.currentClosureCaptureFrameLevel),Ge=z(fe,t,n),Tt=K.inStateMachine&&Ge.startsWith("sm->");if(Ge&&Ge!==fe.$.variableName&&!Le&&!Tt){let Vt=bt(fe.$.type,fe.$.variableName,n);n.emitter.emitLine(`${t}${Vt} = ${Ge};`)}}let le=z(e.func,t,n),he=R.map(fe=>{var Le,Ge,Tt,Vt;if((Le=fe.$)!=null&&Le.variableName&&((Ge=fe.$)!=null&&Ge.type)){if(K.currentClosureCaptures&&K.currentClosureCaptures.includes(fe.$.variableName)&&j(fe)&&fe.$.env&&K.currentClosureCaptureFrameLevel!==void 0&&Kr(fe.token.value,fe.$.env,K.currentClosureCaptureFrameLevel))return z(fe,t,n);{let Yt=z(fe,t,n),Mt=K.inStateMachine&&Yt.startsWith("sm->"),sn=fe.$.variableName;if((Tt=fe.$)!=null&&Tt.deferredDupExpressions&&fe.$.deferredDupExpressions.length>0){Ft(fe,t,K);let Qt=fe.$.deferredDupExpressions[0];V(Qt)&&((Vt=Qt.$)!=null&&Vt.variableName)&&(sn=Q(Qt.$.variableName))}return Mt?Yt:sn}}else return z(fe,t,n)}),_e;if(ie){let fe=[`(${le}).data`,...he];_e=`(${le}).vtable->call(${fe.join(", ")})`}else{let fe;if(Y.tag==="SomeType"){let Ge=Y;Ge.resolvedConcreteType&&(fe=Ge.resolvedConcreteType.id)}let Le=fe?n.implClosureCallMap.get(fe):void 0;if(Le){let Ge=[`&(${le})`,...he];_e=`${Le.functionCName}(${Ge.join(", ")})`}else{let Ge=[`(${le}).data`,...he];_e=`(${le}).call(${Ge.join(", ")})`}}let de=X.return.type;if(Be(de))return n.emitter.emitLine(`${t}${_e};`),(_l=e.$)!=null&&_l.deferredDropExpressions&&Kt(e,t,n),"";{let fe=(gl=e.$)==null?void 0:gl.variableName;return fe?(n.emitter.emitLine(`${t}${H(de,n)} ${fe} = ${_e};`),(hl=e.$)!=null&&hl.deferredDropExpressions&&Kt(e,t,n),fe):`// Error: Closure call returns ${H(de,n)} but no temp variable assigned`}}else return"// Error: No runtime args found for closure call"}}else if(G(N))if($e(N.value)){let Y=N.value,Z=(vl=e.$)==null?void 0:vl.runtimeArgExprsInOrder,ie=(Tl=n.types[Y.id])==null?void 0:Tl.cName,X=Y.fields.map(K=>K.label),R=($l=e.$)==null?void 0:$l.variableName;if(Z&&ie&&X.length===Z.length){if(Y.isNewtype&&Y.fields.length===1){let K=z(Z[0],t,n),le=`((${ie})(${K}))`;if(R&&((El=e.$)!=null&&El.type)){let he=bt(e.$.type,R,n);return n.emitter.emitLine(`${t}${he} = ${le};`),R}else return le}if(Y.isReferenceSemantics){let K=n,le=Z.map(de=>{var Le,Ge,Tt,Vt;let fe=z(de,t,n);if((Le=de.$)!=null&&Le.deferredDupExpressions&&de.$.deferredDupExpressions.length>0){if((Ge=de.$)!=null&&Ge.variableName&&((Tt=de.$)!=null&&Tt.type)){let Yt=Q(de.$.variableName);if(fe!==Yt){let Mt=de.$.type,sn=H(Mt,n);n.emitter.emitLine(`${t}${sn} ${Yt} = ${fe};`)}}Ft(de,t,K);let wt=de.$.deferredDupExpressions[0];if(V(wt)&&((Vt=wt.$)!=null&&Vt.variableName))return Q(wt.$.variableName)}return fe}).join(", "),_e=`${`__yo_new_${ie}`}(${le})`;if(R&&((Cl=e.$)!=null&&Cl.type)){let de=bt(e.$.type,R,n);return n.emitter.emitLine(`${t}${de} = ${_e};`),R}else return _e}else{let K=n,le=Z.map((_e,de)=>{var Tt,Vt,wt,Yt;let fe=z(_e,t,n),Le=Q(X[de]),Ge=fe;if((Tt=_e.$)!=null&&Tt.deferredDupExpressions&&_e.$.deferredDupExpressions.length>0){if((Vt=_e.$)!=null&&Vt.variableName&&((wt=_e.$)!=null&&wt.type)){let sn=Q(_e.$.variableName),Qt=_e.$.type,Zt=H(Qt,n);fe!==sn&&n.emitter.emitLine(`${t}${Zt} ${sn} = ${fe};`)}Ft(_e,t,K);let Mt=_e.$.deferredDupExpressions[0];V(Mt)&&((Yt=Mt.$)!=null&&Yt.variableName)&&(Ge=Q(Mt.$.variableName))}return`.${Le} = `+Ge}).join(", "),he=`(${ie}){ ${le} }`;if(R&&((kl=e.$)!=null&&kl.type)){let _e=bt(e.$.type,R,n);return n.emitter.emitLine(`${t}${_e} = ${he};`),R}else return he}}}else{if(mn(N.value))return"// Error: Closure construction should have been handled by closureFunctionValue check at top of generateFuncCall";if(ot(N.value)){let Y=(bl=e.$)==null?void 0:bl.variableName,Z=e.args[0];if(Z&&V(Z)&&v(Z,":",2)){let ie=Z.args[0],X=Z.args[1],R=(Fl=n.types[N.value.id])==null?void 0:Fl.cName;if(R&&j(ie)&&X){let K=n,le=ie.token.value,he=Q(le),de=z(X,t,n);if((wl=X.$)!=null&&wl.deferredDupExpressions&&X.$.deferredDupExpressions.length>0){Ft(X,t,K);let Le=X.$.deferredDupExpressions[0];V(Le)&&((Vl=Le.$)!=null&&Vl.variableName)&&(de=Q(Le.$.variableName))}let fe=`(${R}){ .${he} = ${de} }`;if(Y&&((xl=e.$)!=null&&xl.type)){let Le=bt(e.$.type,Y,n);return n.emitter.emitLine(`${t}${Le} = ${fe};`),Y}else return fe}}}else if(Ve(N.value)){let Y=N.value,Z=(Ml=e.$)==null?void 0:Ml.runtimeArgExprsInOrder,ie=(Sl=n.types[Y.id])==null?void 0:Sl.cName,X=(Ll=e.$)==null?void 0:Ll.variableName;if(Y.selectedVariantName&&Z&&ie){if(rn(Y)){let _e=Y.selectedVariantName,de=Y.variants.find(fe=>fe.name===_e);if(de){if(!de.fields||de.fields.length===0){let fe="NULL";if(X&&((Al=e.$)!=null&&Al.type)){let Le=bt(e.$.type,X,n);return n.emitter.emitLine(`${t}${Le} = ${fe};`),X}else return fe}else if(de.fields.length===1){let fe=z(Z[0],t,n);if(X&&((Il=e.$)!=null&&Il.type)){let Le=bt(e.$.type,X,n);return n.emitter.emitLine(`${t}${Le} = ${fe};`),X}else return fe}}}if(ir(Y)){let _e=Y.selectedVariantName,de=Tn(Y,_e,n);if(X&&((Nl=e.$)!=null&&Nl.type)){let fe=bt(e.$.type,X,n);return n.emitter.emitLine(`${t}${fe} = ${de};`),X}else return de}let le=Y.selectedVariantName,he=Y.variants.find(_e=>_e.name===le);if(he){let _e=((Dl=he.fields)==null?void 0:Dl.filter(Ge=>!Be(Ge.type)))||[],de=n,fe=Z.map((Ge,Tt)=>{var Vt,wt;if(he.fields){let Yt=he.fields[Tt];if(Yt&&!Be(Yt.type)){let Mt=z(Ge,t,n),sn=Q(Yt.label),Qt=Mt;if((Vt=Ge.$)!=null&&Vt.deferredDupExpressions&&Ge.$.deferredDupExpressions.length>0){Ft(Ge,t,de);let Zt=Ge.$.deferredDupExpressions[0];V(Zt)&&((wt=Zt.$)!=null&&wt.variableName)&&(Qt=Q(Zt.$.variableName))}return`.${sn} = `+Qt}return""}else return""}).filter(Ge=>Ge).join(", "),Le=_e.length>0?`(${ie}){ .tag = ${Tn(Y,le,n)}, .data = { .${le} = { ${fe} } } }`:`(${ie}){ .tag = ${Tn(Y,le,n)} }`;if(X&&((Ol=e.$)!=null&&Ol.type)){let Ge=bt(e.$.type,X,n);return n.emitter.emitLine(`${t}${Ge} = ${Le};`),X}else return Le}}}}else if(Oe(D)){let Y=e.args[0];if(Y&&V(Y)&&v(Y,":")){let X=z(e.func,t,n),R=z(Y.args[0],t,n),K=z(Y.args[1],t,n),le=`Slice_${Q(H(D.childType,n))}`;return n.sliceStructTypes.has(le)||n.sliceStructTypes.set(le,{childType:H(D.childType,n)}),`(${le}){ .data = &${X}.data[${R}], .length = (${K}) - (${R}) }`}else if(Y&&j(Y)&&Y.token.value===":"){let X=z(e.func,t,n),R=D,K=R.childType,le=`Slice_${Q(H(K,n))}`;return n.sliceStructTypes.has(le)||n.sliceStructTypes.set(le,{childType:H(K,n)}),ct(R.length)?`(${le}){ .data = &${X}.data[0], .length = ${R.length.value} }`:"/* Error: Cannot slice array with non-compile-time length */"}let Z=z(e.func,t,n),ie=z(Y,t,n);return`${Z}.data[${ie}]`}else if(at(D)){let Y=e.args[0];if(Y&&V(Y)&&v(Y,":")){let X=z(e.func,t,n),R=z(Y.args[0],t,n),K=z(Y.args[1],t,n),le=`Slice_${Q(H(D.childType,n))}`;return n.sliceStructTypes.has(le)||n.sliceStructTypes.set(le,{childType:H(D.childType,n)}),`(${le}){ .data = &${X}.data[${R}], .length = (${K}) - (${R}) }`}else if(Y&&j(Y)&&Y.token.value===":"){let X=z(e.func,t,n),R=`Slice_${Q(H(D.childType,n))}`;return n.sliceStructTypes.has(R)||n.sliceStructTypes.set(R,{childType:H(D.childType,n)}),`(${R}){ .data = ${X}.data, .length = ${X}.length }`}let Z=z(e.func,t,n),ie=z(Y,t,n);return`${Z}.data[${ie}]`}else if(D&&De(D)&&at(D.childType)){let Y=z(e.func,t,n),Z=z(e.args[0],t,n);return`${Y}.data[${Z}]`}}}}}}if(V(e))throw new Error(`Unhandled function call: ${T(e)}`);return`// Failed to transpile ${T(e)}`}function kd(e,t){var n;if($e(e)||Ve(e)||Ne(e)||ee(e)||gt(e)){let r=e.module.fields.find(o=>o.label===C.___drop[0]);if(r&&r.assignedValue&&Fe(r.assignedValue))return(n=t.functions[r.assignedValue.funcId])==null?void 0:n.cName}}function Nu(e,t){var n;if($e(e)||Ve(e)||Ne(e)||ee(e)||gt(e)){let r=e.module.fields.find(o=>o.label===C.___dup[0]);if(r&&r.assignedValue&&Fe(r.assignedValue))return(n=t.functions[r.assignedValue.funcId])==null?void 0:n.cName}}function bd(e,t,n){var h,_,E,k,w,$,b,F,M,L;let r=e.args[0];if(!r)return"/* Error: async requires exactly 1 argument */";let o=(h=e.$)==null?void 0:h.type;if(!o||!Pe(o))return"/* Error: async block must have Future type */";let i=Ht(o);if(!i)return"/* Error: Could not extract Future module type */";let a=((_=e.$)==null?void 0:_.variableName)||`async_block_${Date.now()}`,s=`${a}_state_t`,l=`${a}_resume`,u=`__yo_new_${a}`,d=`${a}_state_dispose`;n.types[o.id]={type:o,cName:s};let c=(E=e.$)==null?void 0:E.awaitAnalysis;if(!c)throw new Error("Missing await analysis for async block. This should have been computed during evaluation.");let f=i.isFuture.outputType,m=H(f,n),y=n.emitter;if(y.emitDeclarationLine(`void ${d}(void* sm_ptr); // Dispose function for state machine`),y.emitDeclarationLine(""),y.emitDeclarationLine(`void ${l}(${s}* sm);`),y.emitDeclarationLine(""),(k=e.$)!=null&&k.captureType){let O=e.$.captureType,B=Object.values(n.types).find(q=>q.type===O),P=B?B.cName:`async_capture_${O.id}`;y.emitDeclarationLine(`${s}* ${u}(${P} __capture);`)}else y.emitDeclarationLine(`${s}* ${u}();`);y.emitDeclarationLine(""),n.deferredAsyncBlocks||(n.deferredAsyncBlocks=[]),n.deferredAsyncBlocks.push({bodyExpr:r,asyncBlockId:a,structName:s,resumeFunctionName:l,constructorName:u,disposeFunctionName:d,futureType:o,futureModuleType:i,resultType:f,resultTypeCName:m,captureType:(w=e.$)==null?void 0:w.captureType,analysis:c});let g=($=e.$)==null?void 0:$.captureType;if(g){let O=Object.values(n.types).find(ye=>ye.type===g),B=O?O.cName:`async_capture_${g.id}`,P=n,q=P.currentClosureCaptures!==void 0||P.inStateMachine!==void 0,ne=g.fields.map(ye=>{var Se,Re;let ge;if(!q&&((Se=e.$)!=null&&Se.deferredDupExpressions))for(let Te of e.$.deferredDupExpressions){let be;if(V(Te)&&(Te.args.length>0&&j(Te.args[0])?be=Te.args[0].token.value:Te.args.length===0&&V(Te.func)&&v(Te.func,".")&&Te.func.args.length>=2&&j(Te.func.args[0])&&(be=Te.func.args[0].token.value)),be===ye.label){ge=Te;break}}if(ge)return(Re=ge.$)!=null&&Re.variableName?(z(ge,t,n),`.${ye.label} = ${ge.$.variableName}`):`.${ye.label} = ${z(ge,t,n)}`;let Me={tag:"Atom",token:ye.exprs.expr.token,$:ye.exprs.expr.$};return`.${ye.label} = ${fa(Me,n)}`}).join(", "),pe=`(${B}){${ne}}`,ue=((b=e.$)==null?void 0:b.variableName)||"async_result",oe=`${u}(${pe})`;if(ue&&((F=e.$)!=null&&F.type)){let ye=bt(e.$.type,ue,n);return n.emitter.emitLine(`${t}${ye} = ${oe};`),ue}else return oe}else{let O=((M=e.$)==null?void 0:M.variableName)||"async_result",B=`${u}()`;if(O&&((L=e.$)!=null&&L.type)){let P=bt(e.$.type,O,n);return n.emitter.emitLine(`${t}${P} = ${B};`),O}else return B}}function Fd(e,t){var c;let n=t.emitter,{asyncBlockId:r,structName:o,resultType:i,resultTypeCName:a,captureType:s,analysis:l}=e;if(n.emitDeclarationLine(`// State machine for async block ${r} - implements Future(${x(i)})`),n.emitDeclarationLine(`struct ${o}_struct {`),n.emitDeclarationLine(" yo_ref_header_t header; // Reference counting header (must be first)"),n.emitDeclarationLine(` _Atomic int state; // Current state (0 = initial, ${l.awaitPoints.length+1} = done, -1 = completed)`),Be(i)?n.emitDeclarationLine(" uint8_t result; // Dummy result for unit type"):n.emitDeclarationLine(` ${a} result; // The result value of type ${x(i)}`),n.emitDeclarationLine(" _Atomic(void (*)(void*)) continuation_fn; // Resume function of awaiting task"),n.emitDeclarationLine(" _Atomic(void*) continuation_sm; // State machine of awaiting task"),n.emitDeclarationLine(""),s){let f=Object.values(t.types).find(y=>y.type===s),m=f?f.cName:`async_capture_${s.id}`;n.emitDeclarationLine(" // Captured variables from outer scope"),n.emitDeclarationLine(` ${m} __capture;`),n.emitDeclarationLine("")}if(l.capturedVariables.length>0){n.emitDeclarationLine(" // Local variables");for(let f of l.capturedVariables){let m=H(f.type,t),y=ca(f.id,"local");n.emitDeclarationLine(` ${m} ${y}; // ${f.name}`)}n.emitDeclarationLine("")}if(l.awaitPoints.length>0){n.emitDeclarationLine(" // Await result temporaries");for(let f of l.awaitPoints)if(!Be(f.resultType)){let m=f.resultType;if(f.futureType){let g=Ht(f.futureType);g&&(m=g.isFuture.outputType)}let y=H(m,t);n.emitDeclarationLine(` ${y} await_result_${f.index};`)}n.emitDeclarationLine("")}if(l.awaitPoints.length>0){let f=l.awaitPoints.filter(m=>m.futureVariableId===void 0);if(f.length>0){n.emitDeclarationLine(" // Future references for awaits");for(let m of f){let y=m.expr;if(y.tag!=="FuncCall")continue;let g=y.args[0],h=(c=g==null?void 0:g.$)==null?void 0:c.type;if(!h)throw new Error(`Internal error: await expression missing type info for future argument in async block ${r}`);let _=H(h,t);n.emitDeclarationLine(` ${_} await_future_${m.index};`)}n.emitDeclarationLine("")}}let u=l.awaitPoints.filter(f=>f.isInsideCond);if(u.length>0){n.emitDeclarationLine(" // Branch tracking for cond expressions with await");for(let f of u)n.emitDeclarationLine(` int cond_branch_${f.index}; // Which branch was taken in cond with await ${f.index}`);n.emitDeclarationLine("")}let d=l.awaitPoints.filter(f=>f.isInsideWhile);if(d.length>0){n.emitDeclarationLine(" // Loop state tracking for while loops with await");for(let f of d)n.emitDeclarationLine(` _Bool while_loop_${f.index}_active; // Whether while loop ${f.index} should continue`);n.emitDeclarationLine("")}n.emitDeclarationLine("};"),n.emitDeclarationLine("")}function wd(e){var l;if(!e.deferredAsyncBlocks||e.deferredAsyncBlocks.length===0)return;let t=e.deferredAsyncBlocks,n=new Map;for(let u of t)n.set(u.structName,u);let r=new Map,o=new Map;for(let u of t)r.set(u.structName,new Set),o.set(u.structName,0);for(let u of t){let d=c=>{let f=r.get(c);f.has(u.structName)||(f.add(u.structName),o.set(u.structName,(o.get(u.structName)??0)+1))};for(let c of u.analysis.capturedVariables){let f;try{f=H(c.type,e)}catch{continue}let m=n.get(f);m&&m.structName!==u.structName&&d(m.structName)}for(let c of u.analysis.awaitPoints){if(c.futureVariableId!==void 0)continue;let f=c.expr;if(f.tag!=="FuncCall")continue;let m=f.args[0],y=(l=m==null?void 0:m.$)==null?void 0:l.type;if(!y)continue;let g;try{g=H(y,e)}catch{continue}let h=n.get(g);h&&h.structName!==u.structName&&d(h.structName)}}let i=[];for(let[u,d]of o.entries())d===0&&i.push(u);let a=[];for(;i.length>0;){let u=i.shift();a.push(u);let d=r.get(u);if(d)for(let c of d){let f=(o.get(c)??0)-1;o.set(c,f),f===0&&i.push(c)}}let s=a.length===t.length?a.map(u=>n.get(u)).filter(Boolean):t;for(let u of s)Fd({asyncBlockId:u.asyncBlockId,structName:u.structName,resultType:u.resultType,resultTypeCName:u.resultTypeCName,captureType:u.captureType,analysis:u.analysis},e)}function Vd(e,t,n,r,o,i,a){var l;let s=a.emitter;if(s.emitLine(`// Dispose function for async block ${e} state machine`),s.emitLine("// Called by __yo_decr_rc when refcount hits 0 - do NOT call __yo_free here"),s.emitLine(`void ${n}(void* sm_ptr) {`),s.emitLine(` ${t}* sm = (${t}*)sm_ptr;`),s.emitLine(` ASYNC_DEBUG("${n}: Disposing state machine\\n");`),s.emitLine(""),o&&qe(o)){let u=Object.values(a.types).find(d=>d.type===o);if(!u)s.emitLine(" /* Error: capture struct type not found in context */");else{let d=u.cName,c=o.module.fields.find(f=>f.label===C.___drop[0]);if(c&&c.assignedValue&&Fe(c.assignedValue)){let f=(l=a.functions[c.assignedValue.funcId])==null?void 0:l.cName;f&&(s.emitLine(' ASYNC_DEBUG(" Dropping capture struct\\n");'),s.emitLine(` ${f}(sm->__capture);`))}else s.emitLine(` /* Warning: ___drop function not found for capture struct ${d} */`)}}if(s.emitLine(""),!Be(r)&&qe(r)){let u=H(r,a);s.emitLine(" // Drop result field if it was set (state == -1 means completed)"),s.emitLine(" int final_state = atomic_load_explicit(&sm->state, memory_order_acquire);"),s.emitLine(" if (final_state == -1) {"),s.emitLine(' ASYNC_DEBUG(" Dropping result field\\n");');let d=kd(r,a);d?s.emitLine(` ${d}(sm->result);`):s.emitLine(` /* Warning: No ___drop function found for result type ${u} */`),s.emitLine(" }")}s.emitLine(""),s.emitLine(" // Memory freed by __yo_decr_rc after this function returns"),s.emitLine("}")}function xd(e,t,n,r,o,i,a,s,l,u){let d=u.emitter;if(l){let c=Object.values(u.types).find(m=>m.type===l),f=c?c.cName:`async_capture_${l.id}`;d.emitLine(`${t}* ${r}(${f} __capture) {`)}else d.emitLine(`${t}* ${r}() {`);d.emitLine(" // Allocate async block state machine (heap-backed, ref-counted)"),d.emitLine(` ${t}* sm = (${t}*)__yo_malloc(sizeof(${t}));`),d.emitLine(` memset(sm, 0, sizeof(${t}));`),d.emitLine(""),d.emitLine(" // Initialize reference counting header"),d.emitLine(" sm->header.ref_count = 1; // Caller owns initial reference"),d.emitLine(` GC_DEBUG("AsyncBlock ${t}: Created ptr=%p RC=1\\n", (void*)sm);`),d.emitLine(" sm->header.gc_flags = 0;"),d.emitLine(" sm->header.gc_mark = YO_GC_UNMARKED;"),d.emitLine(" sm->header.gc_next = NULL;"),d.emitLine(" sm->header.gc_prev = NULL;"),d.emitLine(` sm->header.dispose_fn = (void(*)(void*))${o};`),d.emitLine(" sm->header.traverse_fn = NULL; // TODO: Add traverse for cycle detection if needed"),d.emitLine(""),d.emitLine(" atomic_init(&sm->state, 0);"),d.emitLine(" atomic_init(&sm->continuation_fn, NULL);"),d.emitLine(" atomic_init(&sm->continuation_sm, NULL);"),d.emitLine(""),l&&(d.emitLine(" // Initialize captured variables"),d.emitLine(" sm->__capture = __capture;"),d.emitLine("")),d.emitLine(" // Initialize result (will be set when async block completes)"),Be(a)?d.emitLine(" // Result is unit type, no initialization needed"):d.emitLine(` memset(&sm->result, 0, sizeof(${s}));`),d.emitLine(""),d.emitLine(" // Eager execution: start running immediately (C#/C++ style)"),d.emitLine(' // Before running, increment refcount for the "running task" reference'),d.emitLine(" // This ensures the task stays alive until completion, even if user drops early"),d.emitLine(" __yo_incr_rc((void*)sm); // refcount: 1 -> 2"),d.emitLine(` GC_DEBUG("AsyncBlock ${t}: Eager increment ptr=%p RC=2\\n", (void*)sm);`),d.emitLine(` ${n}(sm);`),d.emitLine(""),d.emitLine(" return sm;"),d.emitLine("}"),d.emitLine("")}function Md(e,t,n){var g,h,_,E;let r=(g=e.$)==null?void 0:g.runtimeArgExprsInOrder;if(!r||r.length!==1)return"/* Error: __yo_thread_spawn requires exactly 1 argument */";let o=r[0],i=(h=o.$)==null?void 0:h.type;if(!i)return"/* Error: __yo_thread_spawn argument has no type */";let a,s;if(ee(i)){let k=i;k.resolvedConcreteType&&(a=k.resolvedConcreteType.id,s=k.resolvedConcreteType)}else $e(i)&&(a=i.id,s=i);if(!a||!s)return"/* Error: __yo_thread_spawn could not determine concrete closure type */";let l=n.implClosureCallMap.get(a);if(!l)return`/* Error: __yo_thread_spawn could not find closure function for type ${a} */`;let u=l.functionCName,d=H(s,n),c=z(o,t,n),f=(_=o.$)!=null&&_.variableName?Q(o.$.variableName):c,m=`_thread_closure_data_${ht()}`;n.emitter.emitLine(`${t}${d}* ${m} = (${d}*)__yo_malloc(sizeof(${d}));`),n.emitter.emitLine(`${t}*${m} = ${f};`);let y=(E=e.$)==null?void 0:E.variableName;return y?(n.emitter.emitLine(`${t}__yo_thread_t ${y} = __yo_thread_spawn(${u}, ${m});`),y):`__yo_thread_spawn(${u}, ${m})`}function Sd(e,t,n){var y,g,h;let r=(y=e.$)==null?void 0:y.runtimeArgExprsInOrder;if(!r||r.length!==1)return"/* Error: __yo_worker_spawn requires exactly 1 argument */";let o=r[0],i=(g=o.$)==null?void 0:g.type;if(!i)return"/* Error: __yo_worker_spawn argument has no type */";let a,s;if(ee(i)){let _=i;_.resolvedConcreteType&&(a=_.resolvedConcreteType.id,s=_.resolvedConcreteType)}else $e(i)&&(a=i.id,s=i);if(!a||!s)return"/* Error: __yo_worker_spawn could not determine concrete closure type */";let l=n.implClosureCallMap.get(a);if(!l)return`/* Error: __yo_worker_spawn could not find closure function for type ${a} */`;let u=l.functionCName,d=H(s,n),c=z(o,t,n),f=(h=o.$)!=null&&h.variableName?Q(o.$.variableName):c,m=`_worker_closure_data_${ht()}`;return n.emitter.emitLine(`${t}${d}* ${m} = (${d}*)__yo_malloc(sizeof(${d}));`),n.emitter.emitLine(`${t}*${m} = ${f};`),n.emitter.emitLine(`${t}__yo_worker_spawn(${u}, ${m});`),""}function Ld(e,t,n){var g,h,_,E,k,w,$;if(!((g=e.$)!=null&&g.dynCallModuleValues)||e.$.dynCallModuleValues.length===0)return"/* Error: dyn() call missing module values */";let r=((_=(h=e.$)==null?void 0:h.runtimeArgExprsInOrder)==null?void 0:_[0])??e.args[0];if(!r)return"/* Error: dyn() requires a value argument */";let o=e.$.type;if(!Ne(o))return"/* Error: dyn() result type is not DynType */";let i=(E=r.$)==null?void 0:E.type;if(!i)return"/* Error: dyn() value has no type */";let a=e.$.dynCallModuleValues;if(!a||a.length===0)return"/* Error: dyn() call missing module values */";let s=a[0];if(!s)return"/* Error: Invalid module value */";if(!$t(i)&&!yn(i))return"/* Error: dyn() requires an object type (use box() for value types) */";let l=yn(i)?i.fields[0].type:i,u=((k=n.types[o.id])==null?void 0:k.cName)||`yo_dyn_${o.id}`,c=`${(()=>{var L,O;let b=(L=n.types[l.id])==null?void 0:L.cName;if(b)return b;let F=nn(l);return(F?(O=n.types[F.id])==null?void 0:O.cName:void 0)||`unknown_${l.id}`})()}_${u}`;n.dynImpls.set(c,{dynType:o,concreteType:l,dataType:i,moduleValue:s});let f=z(r,t,n);if((w=r.$)!=null&&w.variableName&&f!==r.$.variableName){let b=bt(r.$.type,r.$.variableName,n);n.emitter.emitLine(`${t}${b} = ${f};`),f=r.$.variableName}let m=($=e.$)==null?void 0:$.variableName;if(!m)return"/* Error: dyn() expression missing temp variable name */";let y=`yo_vtable_${c}`;return n.emitter.emitLine(`${t}${u} ${m} = {`),n.emitter.emitLine(`${t} .data = ${f},`),n.emitter.emitLine(`${t} .vtable = &${y}`),n.emitter.emitLine(`${t}};`),m}function fa(e,t){var i,a,s,l,u,d,c,f,m,y,g,h,_,E;let n=t;if(e.token.value==="continue")return"continue";if(e.token.value==="break")return"break";if(e.token.value==="return")return"return";if((i=e.$)!=null&&i.type&&Be(e.$.type))return"";if(n.inStateMachine&&n.stateMachineVariables){let k=e.token.value;if((a=n.localShadowedVariables)!=null&&a.has(k))return k;let w=!1;if((s=e.$)!=null&&s.env){let $=me(e.$.env,k);if($.length>0){let b=$[$.length-1],F=b.isOwningTheSameGcValueAs?b.isOwningTheSameGcValueAs.id:b.id,M=n.stateMachineVariables.get(F);if(M){let L=M.kind==="outer"?`__capture.${k}`:`var_${F}`;return w=!0,`sm->${L}`}}}if(!w){for(let[$,b]of n.stateMachineVariables)if(b.name===k){let F=b.kind==="outer"?`__capture.${k}`:`var_${$}`;return w=!0,`sm->${F}`}}if((l=e.$)!=null&&l.env){let $=me(e.$.env,k);if($.length>0){let b=$[$.length-1];if(b.isOwningTheSameGcValueAs){let F=b.isOwningTheSameGcValueAs.name,M=b.isOwningTheSameGcValueAs.id;for(let[L,O]of n.stateMachineVariables)if(O.name===F||L===M)return`sm->${O.kind==="outer"?`__capture.${F}`:`var_${L}`}`}}}if((u=e.$)!=null&&u.variableName)return Q(e.$.variableName)}if((d=e.$)!=null&&d.variableName){if((c=e.$)!=null&&c.env&&((f=e.$)!=null&&f.value)&&!Ue(e.$.value)){let k=me(e.$.env,e.$.variableName);if(k.length>0&&k[k.length-1].isCompileTimeOnly)return Wn(e.$.value,t,e)}if(!(n.currentClosureCaptures&&n.currentClosureCaptures.includes(e.token.value)&&((m=e.$)!=null&&m.env)&&n.currentClosureCaptureFrameLevel!==void 0&&Kr(e.token.value,e.$.env,n.currentClosureCaptureFrameLevel))){let k=Du(e.$.variableName,(y=e.$)==null?void 0:y.env);return Q(k)}}if((g=e.$)!=null&&g.value){if(Ue(e.$.value))throw new Error(`Cannot generate code for unknown compile-time value of atom: ${T(e)}`);return Wn(e.$.value,t,e)}let r=(h=e.$)!=null&&h.env&&n.currentClosureCaptureFrameLevel!==void 0?Kr(e.token.value,e.$.env,n.currentClosureCaptureFrameLevel):!1;if(n.currentClosureCaptures&&n.currentClosureCaptures.includes(e.token.value)&&n.currentClosureCaptureFrameLevel!==void 0&&(!((_=e.$)!=null&&_.env)||r)){let k=n.currentClosureCaptureTypeCName;return k?`((${k}*)closure_context)->${Q(e.token.value)}`:`closure_context->${Q(e.token.value)}`}if(n.currentFunctionName&&!n.currentClosureCaptures){let k=Object.values(n.functions).find(w=>w.cName===n.currentFunctionName);if(k&&k.value.type.isClosure){let w=Object.values(n.types).find($=>ce($.type)&&$.type.isClosure&&$.type===k.value.type);if(w)return`((${`${w.cName}_capture`}*)closure_context->data)->${Q(e.token.value)}`}}let o=Du(e.token.value,(E=e.$)==null?void 0:E.env);return Q(o)}function Wn(e,t,n){var r,o,i,a,s;if(ct(e))return je(e);if(et(e))return e.value?"true":"false";if(We(e)){let l=((r=n==null?void 0:n.$)==null?void 0:r.convertedRuntimeType)||((o=n==null?void 0:n.$)==null?void 0:o.type);if(l&&at(l)){let u=H(l,t),d=JSON.stringify(e.value),c=Buffer.byteLength(e.value,"utf8");return`(${u}){ .data = (uint8_t*)${d}, .length = ${c} }`}return JSON.stringify(e.value)}else if(Nt(e)){let l=e.type;if(rn(l)){let m=l.variants.find(y=>y.name===e.variantName);if(!m)return`// Error: Variant ${e.variantName} not found in enum`;if(!m.fields||m.fields.length===0)return"NULL";if(m.fields.length===1&&e.fields.length===1)return Wn(e.fields[0],t)}if(ir(l))return Tn(l,e.variantName,t);let c=(i=t.types[l.id])==null?void 0:i.cName;if(!c)return`// Error: No C type name found for enum ${x(l)}`;let f=Tn(l,e.variantName,t);if(!e.fields||e.fields.length===0)return`(${c}){ .tag = ${f} }`;{let m=l.variants.find(g=>g.name===e.variantName);if(!m||!m.fields)return`// Error: Variant ${e.variantName} not found or has no fields`;let y=e.fields.map((g,h)=>{let _=m.fields[h];if(_&&!Be(_.type)){let E=Q(_.label),k=Wn(g,t);return`.${E} = ${k}`}return null}).filter(g=>g!==null);return y.length===0?`(${c}){ .tag = ${f} }`:`(${c}){ .tag = ${f}, .data = { .${e.variantName} = { ${y.join(", ")} } } }`}}else if(tn(e)){let l=e.type;if(l&&$e(l)){let u=(a=t.types[l.id])==null?void 0:a.cName;if(!u)return`// Error: No C type name found for struct ${x(l)}
168
+ `;if(l.isNewtype&&l.fields.length===1&&e.fields.length===1){let d=Wn(e.fields[0],t);return`((${u})(${d}))`}if(l.isReferenceSemantics){let d=e.fields.map(f=>Wn(f,t));return`${`__yo_new_${u}`}(${d.join(", ")})`}else{let d=e.fields.map((c,f)=>{let m=c,y=Q(l.fields[f].label),g=Wn(m,t);return`.${y} = ${g}`});return`(${u}){ ${d.join(", ")} }`}}}else if(lr(e)){let l=e.type,u=H(l,t),d=e.elements.map(c=>Wn(c,t));return`(${u}){ .data = { ${d.join(", ")} } }`}else if(Fe(e)){let l=(s=t.functions[e.funcId])==null?void 0:s.cName;return l||`// Error: No C function name found for function value with ID ${e.funcId}
169
+ `}else if(G(e)){let l=e.value;if(l)return t.types[l.id]?t.types[l.id].cName:`/* Error: No C type name found for type ${x(l)} */`}return""}function Ad(e,t,n){var l,u,d,c,f,m,y;if(e.args.length!==2)return"/* ERROR: field access requires exactly 2 arguments */";let r=e.args[0],o=e.args[1];if(!r||!o)return"/* ERROR: invalid field access arguments */";let i=z(r,t,n),a=(l=r.$)==null?void 0:l.type,s=(u=r.$)==null?void 0:u.value;if(j(o)){let g=o.token.value;if((d=e.$)!=null&&d.value&&Fe(e.$.value)){let h=e.$.value;return((c=n.functions[h.funcId])==null?void 0:c.cName)||h.funcId}if(!((f=e.$)!=null&&f.value)&&(C.___dispose.includes(g)||C.___drop.includes(g)||C.___dup.includes(g))&&a){let h=null;if(($e(a)||Ve(a))&&(h=a.module),h){let _=h.fields.find(E=>E.label===g&&E.assignedValue&&Fe(E.assignedValue));if(_&&Fe(_.assignedValue)){let E=_.assignedValue;return((m=n.functions[E.funcId])==null?void 0:m.cName)||E.funcId}else return`/* ERROR: Gc method ${g} not found in type module */`}else return`/* ERROR: No module found for Gc method ${g} */`}if(Da(a)&&a.fields.length===1){let h=a.fields[0];if(h&&h.label===g)return i}if(Ve(a)){let h=a;if(rn(h))return i;for(let E of h.variants)if(E.fields){for(let k of E.fields)if(k.label===g){let w=E.name;return`${i}.data.${w}.${Q(g)}`}}return`/* ERROR: field ${g} not found in enum ${h.typeName} */`}else if(G(s)&&Ve(s.value)){let h=s.value,_=h.variants.find(k=>k.name===g),E=(y=n.types[h.id])==null?void 0:y.cName;if(_&&!_.fields&&E){let k=Tn(h,_.name,n);return`(${E}){ .tag = ${k}, .data = { } }`}}else{if(De(a)&&at(a.childType))return`${i}.${Q(g)}`;if(De(a)){if(g==="*")return`(*${i})`;{let h=0,_=a;for(;De(_);)h++,_=_.childType;if(h>0&&$e(_)&&_.isReferenceSemantics&&h++,Da(_)&&_.fields.length===1){let E=_.fields[0];if(E&&E.label===g)return h===1?`(*${i})`:`${"*".repeat(h)}(${i})`}return h>0?h===1?`${i}->${Q(g)}`:`${`(${"*".repeat(h-1)}${i})`}->${Q(g)}`:`${i}.${Q(g)}`}}else if(He(a)){if(g.match(/^\d+$/))return`${i}._${g}`;{let h=a.fields.findIndex(_=>_.label===g);return`${i}._${h}`}}else return Ne(a)?`${i}.vtable->${Q(g)}`:$t(a)?`${i}->${Q(g)}`:`${i}.${Q(g)}`}}return"/* ERROR: field name must be an identifier */"}function Id(e,t,n){var r,o,i,a,s,l,u,d,c;if(e.$){let f=e.$.variableName,m=e.$.type,y=m&&Be(m);if(!y&&f){let w=H(m,n);n.emitter.emitLine(`${t}${w} ${f};`)}let g=-1;for(let w=0;w<e.args.length;w++){let $=e.args[w];if(V($)&&v($,"=>",2)){let b=$.args[0];if(b&&!(et((r=b.$)==null?void 0:r.value)&&b.$.value.value===!1)){g=w;break}}}let h=!1;if(g>=0){let w=e.args[g];if(w&&V(w)&&v(w,"=>",2)){let $=w.args[0];$&&et((o=$.$)==null?void 0:o.value)&&$.$.value.value===!0&&(h=!0)}}if(h&&g>=0){let w=e.args[g];if(w&&V(w)&&v(w,"=>",2)){let $=w.args[1];if($){let b=z($,t,n);f&&!y&&b&&b!==""&&b!=="continue"&&b!=="break"&&!b.includes("return")&&n.emitter.emitLine(`${t}${f} = ${b};`)}}return y?"":f??""}let _=t,E=0,k=!1;for(let w=0;w<e.args.length;w++){let $=e.args[w];if(V($)&&v($,"=>",2)){let b=$.args[0],F=$.args[1];if(b&&F){if(et((i=b.$)==null?void 0:i.value)&&b.$.value.value===!1)continue;if(k){if(n.emitter.emitLine(`${_}else {`),E++,_+=" ",!(et((s=b.$)==null?void 0:s.value)&&b.$.value.value===!0)){let P=z(b,_,n);n.emitter.emitLine(`${_}if (${P}) {`)}}else{if(et((a=b.$)==null?void 0:a.value)&&b.$.value.value===!0)n.emitter.emitLine(`${_}{`);else{let B=z(b,_,n);n.emitter.emitLine(`${_}if (${B}) {`)}k=!0}let M=et((l=b.$)==null?void 0:l.value)&&b.$.value.value===!0,L=k&&M?_:_+" ";if(V(F)&&v(F,A.begin)){let B=F.args;for(let P=0;P<B.length-1;P++){let q=B[P],ne=z(q,L,n);ne&&q.$&&!St(q.$.env.modulePath,ne)&&n.emitter.emitLine(`${L}${ne};`)}if(B.length>0){let P=B[B.length-1];(u=P.$)!=null&&u.deferredDupExpressions&&Ft(P,L,n);let q=z(P,L,n);q&&(q==="continue"||q==="break"||V(P)&&v(P,A.return)||q.includes("return")?n.emitter.emitLine(`${L}${q};`):f&&!y&&n.emitter.emitLine(`${L}${f} = ${q};`))}(d=F.$)!=null&&d.deferredDropExpressions&&Kt(F,L,n)}else{(c=F.$)!=null&&c.deferredDupExpressions&&Ft(F,L,n);let B=z(F,L,n);B==="continue"||B==="break"||V(F)&&v(F,A.return)||B.includes("return")?n.emitter.emitLine(`${L}${B};`):B===""||!B||f&&(y||n.emitter.emitLine(`${L}${f} = ${B};`))}!(k&&M)&&n.emitter.emitLine(`${_}}`)}}}for(let w=0;w<E;w++)_=_.slice(0,-2),n.emitter.emitLine(`${_}}`);return y?"":f??""}return'/* "cond" expression is not evaluated */'}function Nd(e,t,n){var y,g,h,_,E,k,w,$,b,F,M;if(!e.$)return'/* "match" expression is not evaluated */';let r=e.$.variableName,o=e.$.type,i=o&&Be(o);if(!i&&r){let L=H(o,n);n.emitter.emitLine(`${t}${L} ${r};`)}let a=z(e.args[0],t,n),s=(y=e.args[0].$)==null?void 0:y.type;if(!s)return'// Error: "match" expression requires an enum type';let l,u;if(De(s)?(u=s.childType,l=s.tag):$t(s)?(u=s,l="ref_semantics"):u=s,!Ve(u))return'// Error: "match" expression requires an enum type';if(!((g=n.types[u.id])==null?void 0:g.cName))return`// Error: "match" expression enum type ${u.typeName} has no C name`;let c=rn(u);if(c){let L=e.args.slice(1),O=null,B=null;for(let P of L)if(V(P)&&v(P,"=>",2)){let q=P.args[0],ne=P.args[1];if(q&&ne&&V(q)&&v(q,"."))O={caseBody:ne};else{let pe=q.func;if(pe&&V(pe)&&v(pe,".")){let ue=pe.args[0];if(ue&&j(ue)){let oe=ue.token.value;B={caseBody:ne,variantName:oe,casePattern:q}}}}}if(n.emitter.emitLine(`${t}if (${l&&l!=="ref_semantics"?"*":""}${a} != NULL) {`),B){let P;if(V(B.casePattern)&&B.casePattern.args.length>0){let ue=B.casePattern.args[0];if(ue&&j(ue)){P=ue.token.value;let oe=c;n.emitter.emitLine(`${t} ${H(oe,n)} ${P} = ${a};`)}}let q=n;P&&q.inStateMachine&&(q.localShadowedVariables||(q.localShadowedVariables=new Set),q.localShadowedVariables.add(P));let ne=Uo(B.caseBody,t+" ",n);P&&q.localShadowedVariables&&q.localShadowedVariables.delete(P);let pe=ne===""||ne==="break"||ne==="continue"||ne.includes("return");if(!i&&r&&!pe){let ue=ne||a;n.emitter.emitLine(`${t} ${r} = ${ue};`)}else ne&&ne!==""&&n.emitter.emitLine(`${t} ${ne};`)}if(n.emitter.emitLine(`${t}} else {`),O){let P=Uo(O.caseBody,t+" ",n),q=P===""||P==="break"||P==="continue"||P.includes("return");!i&&r&&!q?n.emitter.emitLine(`${t} ${r} = ${P};`):P&&P!==""&&n.emitter.emitLine(`${t} ${P};`)}return n.emitter.emitLine(`${t}}`),i?"":r??""}if(ir(u)){n.emitter.emitLine(`${t}switch (${l&&l!=="ref_semantics"?"*":""}${a}) {`);let L=e.args.slice(1);for(let O=0;O<L.length;O++){let B=L[O];if(V(B)&&v(B,"=>",2)){let P=B.args[0],q=B.args[1];if(P&&q&&V(P)&&v(P,".",1)){let ne=P.args[0].token.value,pe=Tn(u,ne,n);n.emitter.emitLine(`${t}case ${pe}:`);let ue=Uo(q,t+" ",n);!i&&r&&ue?n.emitter.emitLine(`${t} ${r} = ${ue};`):ue&&n.emitter.emitLine(`${t} ${ue};`),n.currentLoopLabel&&((h=q.$)==null?void 0:h.controlFlow)==="break"?n.emitter.emitLine(`${t} goto ${n.currentLoopLabel};`):n.currentLoopLabel&&((_=q.$)==null?void 0:_.controlFlow)==="continue"?n.emitter.emitLine(`${t} break;`):n.emitter.emitLine(`${t} break;`)}}}return n.emitter.emitLine(`${t}}`),i?"":r??""}n.emitter.emitLine(`${t}switch (${l==="ref_semantics"||l?a+"->tag":"("+a+").tag"}) {`);let m=e.args.slice(1);for(let L=0;L<m.length;L++){let O=m[L];if(V(O)&&v(O,"=>",2)){let B=O.args[0],P=O.args[1];if(B&&P&&V(B)&&B.func.tag==="Atom"&&B.func.token.value==="."&&B.args.length>=1){let q=B.args[0].token.value,ne=Tn(u,q,n);if(n.emitter.emitLine(`${t}case ${ne}:`),B.args.length>1){let ue=u.variants.find(oe=>oe.name===q);if(ue&&ue.fields)for(let oe=0;oe<Math.min(B.args.length-1,ue.fields.length);oe++){let ye=B.args[oe+1],ge=ue.fields[oe];if(ye.tag==="Atom"&&ge){if(Be(ge.type))continue;let Me=ye.token.value,Se=Q(ge.label),Re=H(ge.type,n),Te=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} /* MARKER: Generating destructured variable ${Me} */`),n.emitter.emitLine(`${t} ${Re} ${Me} = ${a}${Te}data.${q}.${Se};`);let be=n;if(be!=null&&be.inStateMachine&&be.stateMachineVariables){let I;if((E=ye.$)!=null&&E.env){let U=me(ye.$.env,Me);U.length>0&&(I=U[U.length-1].id)}I&&be.stateMachineVariables.has(I)&&n.emitter.emitLine(`${t} sm->var_${I} = ${Me};`)}}}}if(V(P)&&v(P,"=>",2)){let ue=P.args[0];n.emitter.emitLine(`${t} ${H(s,n)} ${ue.token.value} = ${a};`),P=P.args[1]}let pe=Uo(P,t+" ",n);!i&&r&&pe?n.emitter.emitLine(`${t} ${r} = ${pe};`):pe&&n.emitter.emitLine(`${t} ${pe};`),n.currentLoopLabel&&((k=P.$)==null?void 0:k.controlFlow)==="break"?n.emitter.emitLine(`${t} goto ${n.currentLoopLabel};`):n.currentLoopLabel&&((w=P.$)==null?void 0:w.controlFlow)==="continue"?n.emitter.emitLine(`${t} break;`):n.emitter.emitLine(`${t} break;`)}else if(B&&P&&V(B)&&V(B.func)&&B.func.func.tag==="Atom"&&B.func.func.token.value==="."&&B.func.args.length===1){let q=B.func.args[0].token.value,ne=Tn(u,q,n),pe=B.args;n.emitter.emitLine(`${t}case ${ne}:`);let ue=u.variants.find(ye=>ye.name===q);if(ue&&ue.fields&&pe.length>0)for(let ye=0;ye<Math.min(pe.length,ue.fields.length);ye++){let ge=pe[ye],Me=ue.fields[ye];if(ge.tag==="Atom"&&Me){let Se=ge.token.value;if(Se!=="_")if(Be(Me.type))n.emitter.emitLine(`${t} // ${Se} is unit type (no value)`);else{let Re=Q(Me.label),Te=H(Me.type,n),be=l==="ref_semantics"||l?"->":".";n.emitter.emitLine(`${t} ${Te} ${Se} = ${a}${be}data.${q}.${Re};`);let I=n;if(I!=null&&I.inStateMachine&&I.stateMachineVariables){let U;if(($=ge.$)!=null&&$.env){let te=me(ge.$.env,Se);te.length>0&&(U=te[te.length-1].id)}U&&I.stateMachineVariables.has(U)&&n.emitter.emitLine(`${t} sm->var_${U} = ${Se};`)}}}}if(V(P)&&v(P,"=>",2)){let ye=P.args[0];n.emitter.emitLine(`${t} ${H(s,n)} ${ye.token.value} = ${a};`),P=P.args[1]}let oe=Uo(P,t+" ",n);!i&&r&&oe?n.emitter.emitLine(`${t} ${r} = ${oe};`):oe&&n.emitter.emitLine(`${t} ${oe};`),n.currentLoopLabel&&((b=P.$)==null?void 0:b.controlFlow)==="break"?n.emitter.emitLine(`${t} goto ${n.currentLoopLabel};`):n.currentLoopLabel&&((F=P.$)==null?void 0:F.controlFlow)==="continue"?n.emitter.emitLine(`${t} break;`):n.emitter.emitLine(`${t} break;`)}}}return n.emitter.emitLine(`${t}}`),(M=e.$)!=null&&M.deferredDropExpressions&&Kt(e,t,n),i?"":r??""}function Bu(e,t,n){var r,o,i,a,s;switch(e.tag){case"Atom":{let l=fa(e,n);if((r=e.$)!=null&&r.deferredDupExpressions&&e.$.deferredDupExpressions.length>0){Ft(e,t,n);let u=e.$.deferredDupExpressions[0];V(u)&&((o=u.$)!=null&&o.variableName)&&(l=Q(u.$.variableName))}n.emitter.emitLine(`${t}return ${l};`);break}case"FuncCall":{if((i=e.$)!=null&&i.deferredDupExpressions&&e.$.deferredDupExpressions.length>0){if((a=e.$)!=null&&a.variableName){let u=e.$.variableName;e.$.variableName=void 0;let d=Bo(e,t,n);e.$.variableName=u;let c=H(e.$.type,n),f=Q(u);f!==d&&n.emitter.emitLine(`${t}${c} ${f} = ${d};`)}else{let u=Bo(e,t,n);n.emitter.emitLine(`${t}${u};`)}Ft(e,t,n);let l=e.$.deferredDupExpressions[0];if(V(l)&&((s=l.$)!=null&&s.variableName)){let u=Q(l.$.variableName);n.emitter.emitLine(`${t}return ${u};`)}else{let u=Bo(e,t,n);n.emitter.emitLine(`${t}return ${u};`)}}else{let l=Bo(e,t,n);v(e,A.return)?n.emitter.emitLine(`${t}${l};`):n.emitter.emitLine(`${t}return ${l};`)}break}}}function Ja(e,t,n,r){var o;return C.__yo_op_add.includes(e)?`((${t[0]}) + (${t[1]}))`:C.__yo_op_sub.includes(e)?`((${t[0]}) - (${t[1]}))`:C.__yo_op_mul.includes(e)?`((${t[0]}) * (${t[1]}))`:C.__yo_op_div.includes(e)?`((${t[0]}) / (${t[1]}))`:C.__yo_op_mod.includes(e)?`((${t[0]}) % (${t[1]}))`:C.__yo_op_neg.includes(e)?`(-(${t[0]}))`:C.__yo_op_eq.includes(e)?`((${t[0]}) == (${t[1]}))`:C.__yo_op_neq.includes(e)?`((${t[0]}) != (${t[1]}))`:C.__yo_op_lt.includes(e)?`((${t[0]}) < (${t[1]}))`:C.__yo_op_lte.includes(e)?`((${t[0]}) <= (${t[1]}))`:C.__yo_op_gt.includes(e)?`((${t[0]}) > (${t[1]}))`:C.__yo_op_gte.includes(e)?`((${t[0]}) >= (${t[1]}))`:C.__yo_op_not.includes(e)?`(!(${t[0]}))`:C.__yo_op_bit_and.includes(e)?`((${t[0]}) & (${t[1]}))`:C.__yo_op_bit_or.includes(e)?`((${t[0]}) | (${t[1]}))`:C.__yo_op_bit_xor.includes(e)?`((${t[0]}) ^ (${t[1]}))`:C.__yo_op_bit_complement.includes(e)?`(~(${t[0]}))`:C.__yo_op_bit_left_shift.includes(e)?`((${t[0]}) << (${t[1]}))`:C.__yo_op_bit_right_shift.includes(e)?`((${t[0]}) >> (${t[1]}))`:C.__yo_noop.includes(e)?"":C.__yo_return_self.includes(e)?`(*${t[0]})`:C.__yo_ms_sleep.includes(e)?`(
170
+ #ifdef _WIN32
171
+ Sleep(${t[0]})
172
+ #else
173
+ usleep((${t[0]}) * 1000)
174
+ #endif
175
+ )`:C.__yo_decr_rc.includes(e)?`__yo_decr_rc((void*)(${t[0]}))`:C.__yo_as.includes(e)&&((o=n.$)!=null&&o.type)?`((${H(n.$.type,r)})(${t[0]}))`:C.__yo_ptr_add.includes(e)?`(${t[0]} + ${t[1]})`:C.__yo_ptr_sub.includes(e)?`(${t[0]} - ${t[1]})`:C.__yo_ptr_diff.includes(e)?`(${t[0]} - ${t[1]})`:C.__yo_ptr_eq.includes(e)?`(${t[0]} == ${t[1]})`:C.__yo_ptr_neq.includes(e)?`(${t[0]} != ${t[1]})`:C.__yo_ptr_lt.includes(e)?`(${t[0]} < ${t[1]})`:C.__yo_ptr_lte.includes(e)?`(${t[0]} <= ${t[1]})`:C.__yo_ptr_gt.includes(e)?`(${t[0]} > ${t[1]})`:C.__yo_ptr_gte.includes(e)?`(${t[0]} >= ${t[1]})`:C.__yo_slice_len.includes(e)?`(${t[0]}.length)`:`/* Unhandled operator ${e} */`}function Dd(e,t){if(V(e)&&v(e,A.begin)){let n=[];for(let r of e.args)if(V(r)&&v(r,"=",2)){let o=r.args[0],i=r.args[1],a=z(o,"",t),s=z(i,"",t);n.push(`${a} = ${s}`)}return n.join(", ")}else if(V(e)&&v(e,"=",2)){let n=e.args[0],r=e.args[1],o=z(n,"",t),i=z(r,"",t);return`${o} = ${i}`}return z(e,"",t)}function Ou(e,t,n){var r;if(V(e)&&v(e,A.begin)){for(let o of e.args){let i=z(o,t,n);i&&n.emitter.emitLine(`${t}${i};`)}if((r=e.$)!=null&&r.deferredDropExpressions)for(let o of e.$.deferredDropExpressions){let i=z(o,t,n);i&&n.emitter.emitLine(`${t}${i};`)}}else{let o=z(e,t,n);o&&n.emitter.emitLine(`${t}${o};`)}}function Uo(e,t,n){var r,o,i,a;if(V(e)&&v(e,A.begin)){let s=e.args;for(let u=0;u<s.length-1;u++){let d=s[u],c=z(d,t,n);c&&n.emitter.emitLine(`${t}${c};`)}let l="";if(s.length>0){let u=s[s.length-1];if((r=u.$)!=null&&r.deferredDupExpressions&&u.$.deferredDupExpressions.length>0){Ft(u,t,n);let d=u.$.deferredDupExpressions[0];V(d)&&((o=d.$)!=null&&o.variableName)?l=Q(d.$.variableName):l=z(u,t,n)}else l=z(u,t,n)}return(i=e.$)!=null&&i.deferredDropExpressions&&Kt(e,t,n),l}else return(a=e.$)!=null&&a.deferredDupExpressions&&Ft(e,t,n),z(e,t,n)}function Od(e,t,n){let r=e.args;if(r.length===2){let o=r[0],i=r[1],a=n.currentLoopLabel,s=`loop_${Math.random().toString(36).substr(2,9)}`;n.currentLoopLabel=s,n.emitter.emitLine(`${t}while (true) {`);let l=z(o,t+" ",n);return n.emitter.emitLine(`${t} if (!(${l})) {`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t} }`),Ou(i,t+" ",n),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}${s}:;`),n.currentLoopLabel=a,""}else if(r.length===3){let o=r[0],i=r[1],a=r[2],s=n.currentLoopLabel,l=`loop_${Math.random().toString(36).substr(2,9)}`;n.currentLoopLabel=l,n.emitter.emitLine(`${t}while (true) {`);let u=z(o,t+" ",n);n.emitter.emitLine(`${t} if (!(${u})) {`),n.emitter.emitLine(`${t} break;`),n.emitter.emitLine(`${t} }`),Ou(a,t+" ",n);let d=Dd(i,n);return n.emitter.emitLine(`${t} ${d};`),n.emitter.emitLine(`${t}}`),n.emitter.emitLine(`${t}${l}:;`),n.currentLoopLabel=s,""}else return n.emitter.emitLine(`${t}/* Error: while loop expects 2 or 3 arguments, got ${r.length} */`),""}function Kt(e,t,n){var o;let r=n.emitter;if((o=e.$)!=null&&o.deferredDropExpressions)for(let i of e.$.deferredDropExpressions){let a=z(i,t,n);a&&r.emitLine(`${t}${a};`)}}function Ft(e,t,n){var o;let r=n.emitter;if((o=e.$)!=null&&o.deferredDupExpressions){for(let i of e.$.deferredDupExpressions)if(V(i)){let a=z(i,t,n);a&&r.emitLine(`${t}${a};`)}}}function Pu(e){for(let t in e.functions){let{value:n}=e.functions[t];n.body&&zu(n.body,e)}}function zu(e,t){var n,r;if(e&&V(e)){let o=e;if(v(e,C.async)){let i=(n=e.$)==null?void 0:n.type;if(i&&Pe(i)&&Ht(i)){let l=`${((r=e.$)==null?void 0:r.variableName)||`async_block_${Date.now()}`}_state_t`;e.$&&(e.$.asyncStateMachineStructName=l),t.types[i.id]={type:i,cName:l},t.emitter.emitDeclarationLine(`typedef struct ${l}_struct ${l}; // Forward declaration for async state machine`)}}for(let i of o.args)zu(i,t)}}function Gu(e){if(!e.deferredAsyncBlocks||e.deferredAsyncBlocks.length===0)return;let t=e.emitter;wd(e),t.emitLine("// Deferred async block implementations");for(let n of e.deferredAsyncBlocks){let{bodyExpr:r,asyncBlockId:o,structName:i,resumeFunctionName:a,constructorName:s,disposeFunctionName:l,futureType:u,resultType:d,resultTypeCName:c,captureType:f,analysis:m}=n;Vd(o,i,l,d,f,m,e),t.emitLine(""),Iu(r,o,i,a,m,u,f,e),t.emitLine(""),xd(o,i,a,s,l,u,d,c,f,e),t.emitLine("")}}function Ru(e,t){e.emitLine(`
176
+ // ============================================================================
177
+ // Async/Await Runtime - Single-Threaded Cooperative Scheduler
178
+ // ============================================================================
179
+ // This implements a cooperative async runtime for single-threaded concurrency.
180
+ // All async tasks run on the SAME thread - no parallelism, just interleaving.
181
+ // Uses non-atomic reference counting (everything is thread-local).
182
+ //
183
+ // LIFETIME MODEL: Event loop holds references to running tasks
184
+ // - When a task is spawned/queued, the event loop increments its refcount
185
+ // - When a task completes, the event loop decrements its refcount
186
+ // - Tasks stay alive as long as they're running, even if user code drops them
187
+ // - Standard RC drop semantics: freed when refcount hits 0
188
+
189
+ // Continuation - represents a suspended async task waiting to be resumed
190
+ typedef struct yo_continuation_t {
191
+ void (*resume_fn)(void* state_machine); // Function to call to resume
192
+ void* state_machine; // State machine to resume
193
+ struct yo_continuation_t* next; // Next in linked list
194
+ } yo_continuation_t;
195
+
196
+ // Per-thread async task queue (thread-local for future spawn support)
197
+ typedef struct {
198
+ yo_continuation_t* head; // Head of continuation queue
199
+ yo_continuation_t* tail; // Tail of continuation queue
200
+ size_t count; // Number of pending continuations
201
+ } yo_async_task_queue_t;
202
+
203
+ // Thread-local async runtime state
204
+ #if defined(_WIN32)
205
+ static __declspec(thread) yo_async_task_queue_t yo_thread_async_queue = {NULL, NULL, 0};
206
+ #else
207
+ static __thread yo_async_task_queue_t yo_thread_async_queue = {NULL, NULL, 0};
208
+ #endif
209
+
210
+ // Async scheduler initialized flag
211
+ static bool yo_async_scheduler_initialized = false;
212
+
213
+ // Forward declarations for I/O functions (defined later, may be stubs if liburing unavailable)
214
+ #if defined(__linux__)
215
+ static void __yo_io_init(void);
216
+ static void __yo_io_cleanup(void);
217
+ static bool __yo_has_pending_io(void);
218
+ static int __yo_io_poll(void);
219
+ static int __yo_io_wait(void);
220
+ #endif
221
+
222
+ // Initialize async scheduler (lightweight - just sets flag)
223
+ static void __yo_async_scheduler_init(void) {
224
+ if (yo_async_scheduler_initialized) {
225
+ return;
226
+ }
227
+ yo_async_scheduler_initialized = true;
228
+ ASYNC_DEBUG("[ASYNC] Scheduler initialized\\n");
229
+ }
230
+
231
+ // Enqueue a continuation to be executed on the current thread's event loop
232
+ // NOTE: This is a low-level function that does NOT manage refcounts.
233
+ // Use yo_async_spawn_task for spawning tasks with proper lifetime management.
234
+ static void yo_async_enqueue_continuation(void (*resume_fn)(void*), void* state_machine) {
235
+ ASYNC_DEBUG("[ASYNC] Enqueueing continuation: resume_fn=%p, sm=%p\\n", (void*)resume_fn, state_machine);
236
+
237
+ yo_continuation_t* cont = (yo_continuation_t*)__yo_malloc(sizeof(yo_continuation_t));
238
+ cont->resume_fn = resume_fn;
239
+ cont->state_machine = state_machine;
240
+ cont->next = NULL;
241
+
242
+ if (yo_thread_async_queue.tail) {
243
+ yo_thread_async_queue.tail->next = cont;
244
+ yo_thread_async_queue.tail = cont;
245
+ } else {
246
+ yo_thread_async_queue.head = cont;
247
+ yo_thread_async_queue.tail = cont;
248
+ }
249
+
250
+ yo_thread_async_queue.count++;
251
+ ASYNC_DEBUG("[ASYNC] Queue count: %zu\\n", yo_thread_async_queue.count);
252
+ }
253
+
254
+ // Spawn an async task by enqueueing it to the current thread's event loop
255
+ // This is for EAGER execution - task starts running immediately until first await
256
+ // NOTE: This does NOT increment refcount. The task lifetime is managed by:
257
+ // - Constructor: starts with refcount = 2 (user ref + running task ref)
258
+ // - Completion: decrements refcount (releases running task ref)
259
+ // - User drop: decrements refcount (releases user ref)
260
+ void yo_async_spawn_task(void (*resume_fn)(void*), void* state_machine) {
261
+ ASYNC_DEBUG("[ASYNC] Spawning task: resume_fn=%p, sm=%p\\n", (void*)resume_fn, state_machine);
262
+ yo_async_enqueue_continuation(resume_fn, state_machine);
263
+ }
264
+
265
+ // Run event loop until a specific Future completes (for async main)
266
+ // The Future must have an '_Atomic int state' field at offset 0
267
+ // State -1 means completed
268
+ void __yo_async_run_until_complete(void* future_ptr) {
269
+ if (!yo_async_scheduler_initialized) {
270
+ __yo_async_scheduler_init();
271
+ }
272
+
273
+ #if defined(__linux__)
274
+ __yo_io_init(); // Initialize io_uring on Linux
275
+ #endif
276
+
277
+ ASYNC_DEBUG("[ASYNC] Starting event loop for future=%p\\n", future_ptr);
278
+
279
+ // future_ptr points to a heap-backed Future/state-machine struct.
280
+ // It must have _Atomic int state at offset 0.
281
+ typedef struct { _Atomic int state; } generic_future_t;
282
+ generic_future_t* future = (generic_future_t*)future_ptr;
283
+
284
+ // Run the event loop until the future completes
285
+ while (atomic_load(&future->state) != -1) {
286
+ // 1. Process ready tasks (up to 100 per iteration)
287
+ int tasks_run = 0;
288
+ while (tasks_run < 100) {
289
+ yo_continuation_t* cont = yo_thread_async_queue.head;
290
+ if (!cont) break;
291
+
292
+ // Dequeue
293
+ yo_thread_async_queue.head = cont->next;
294
+ if (!yo_thread_async_queue.head) {
295
+ yo_thread_async_queue.tail = NULL;
296
+ }
297
+ yo_thread_async_queue.count--;
298
+
299
+ ASYNC_DEBUG("[ASYNC] Executing continuation: resume_fn=%p, sm=%p (queue_count=%zu)\\n",
300
+ (void*)cont->resume_fn, cont->state_machine, yo_thread_async_queue.count);
301
+
302
+ // Execute the continuation
303
+ cont->resume_fn(cont->state_machine);
304
+
305
+ // Free the continuation
306
+ __yo_free(cont);
307
+ tasks_run++;
308
+ }
309
+
310
+ #if defined(__linux__)
311
+ // 2. Poll io_uring completions (non-blocking)
312
+ __yo_io_poll();
313
+
314
+ // 3. If no ready tasks but pending I/O, block until completion
315
+ if (!yo_thread_async_queue.head && __yo_has_pending_io()) {
316
+ ASYNC_DEBUG("[ASYNC] No ready tasks, waiting for I/O...\\n");
317
+ __yo_io_wait();
318
+ continue;
319
+ }
320
+ #endif
321
+
322
+ // 4. If no tasks and no I/O, check if future is complete
323
+ if (!yo_thread_async_queue.head) {
324
+ #if defined(__linux__)
325
+ if (!__yo_has_pending_io()) {
326
+ // No tasks, no I/O - future must be waiting on something else or complete
327
+ ASYNC_DEBUG("[ASYNC] No tasks or I/O, future state=%d\\n",
328
+ atomic_load(&future->state));
329
+ if (atomic_load(&future->state) != -1) {
330
+ // Future not complete but nothing to do - this shouldn't happen
331
+ ASYNC_DEBUG("[ASYNC] WARNING: No tasks/IO but future not complete\\n");
332
+ break;
333
+ }
334
+ }
335
+ #else
336
+ // No async I/O support on this platform
337
+ ASYNC_DEBUG("[ASYNC] WARNING: Queue empty but future not complete (state=%d)\\n",
338
+ atomic_load(&future->state));
339
+ break;
340
+ #endif
341
+ }
342
+ }
343
+
344
+ #if defined(__linux__)
345
+ __yo_io_cleanup();
346
+ #endif
347
+
348
+ ASYNC_DEBUG("[ASYNC] Event loop finished, future completed (state=%d)\\n", atomic_load(&future->state));
349
+ }
350
+
351
+ // Wait for all async tasks to complete (drains the queue)
352
+ void __yo_async_wait_all(void) {
353
+ if (!yo_async_scheduler_initialized) {
354
+ return;
355
+ }
356
+
357
+ ASYNC_DEBUG("[ASYNC] Waiting for all tasks to complete (queue_count=%zu)\\n", yo_thread_async_queue.count);
358
+
359
+ #if defined(__linux__)
360
+ __yo_io_init(); // Ensure io_uring is initialized
361
+ #endif
362
+
363
+ // Process all tasks in the queue and poll for I/O events until both are empty
364
+ while (true) {
365
+ // 1. Process ready tasks
366
+ bool tasks_processed = false;
367
+ while (yo_thread_async_queue.head) {
368
+ yo_continuation_t* cont = yo_thread_async_queue.head;
369
+ yo_thread_async_queue.head = cont->next;
370
+ if (!yo_thread_async_queue.head) {
371
+ yo_thread_async_queue.tail = NULL;
372
+ }
373
+ yo_thread_async_queue.count--;
374
+
375
+ ASYNC_DEBUG("[ASYNC] Executing continuation: resume_fn=%p, sm=%p\\n",
376
+ (void*)cont->resume_fn, cont->state_machine);
377
+
378
+ cont->resume_fn(cont->state_machine);
379
+ __yo_free(cont);
380
+ tasks_processed = true;
381
+ }
382
+
383
+ #if defined(__linux__)
384
+ // 2. Poll for I/O completions (non-blocking)
385
+ __yo_io_poll();
386
+
387
+ // 3. If no tasks were processed, no new tasks after polling, and there's pending I/O, wait for completion
388
+ if (!tasks_processed && !yo_thread_async_queue.head && __yo_has_pending_io()) {
389
+ ASYNC_DEBUG("[ASYNC] No ready tasks, waiting for I/O...\\n");
390
+ __yo_io_wait();
391
+ continue;
392
+ }
393
+
394
+ // 4. If no tasks and no pending I/O, we're done
395
+ if (!yo_thread_async_queue.head && !__yo_has_pending_io()) {
396
+ break;
397
+ }
398
+ #else
399
+ // No async I/O support - if no tasks, we're done
400
+ if (!yo_thread_async_queue.head) {
401
+ break;
402
+ }
403
+ #endif
404
+ }
405
+
406
+ ASYNC_DEBUG("[ASYNC] All tasks completed\\n");
407
+ }
408
+
409
+ // NOTE: yo_async_register_continuation has been removed.
410
+ // Continuation registration is now done inline at each await site
411
+ // with direct field access to the specific future type.
412
+ // This avoids the generic pointer casting issues with variable-sized result fields.
413
+
414
+ // ============================================================================
415
+ // Concurrency Helper Functions (from std/concurrency.yo)
416
+ // ============================================================================
417
+ // These are helper functions for querying system info and thread control.
418
+ // Note: These are for future parallelism support (spawn), not for async/await.
419
+
420
+ // Get the number of hardware threads (CPU cores)
421
+ size_t __yo_thread_get_hardware_threads(void) {
422
+ #ifdef _WIN32
423
+ SYSTEM_INFO sysinfo;
424
+ GetSystemInfo(&sysinfo);
425
+ return (size_t)sysinfo.dwNumberOfProcessors;
426
+ #elif defined(__APPLE__)
427
+ int count;
428
+ size_t size = sizeof(count);
429
+ if (sysctlbyname("hw.ncpu", &count, &size, NULL, 0) == 0) {
430
+ return (size_t)count;
431
+ }
432
+ return 1;
433
+ #else
434
+ long count = sysconf(_SC_NPROCESSORS_ONLN);
435
+ return count > 0 ? (size_t)count : 1;
436
+ #endif
437
+ }
438
+
439
+ // Set maximum threads (placeholder for future spawn support)
440
+ // Currently a no-op since async/await is single-threaded
441
+ void __yo_thread_set_maximum_threads(size_t num) {
442
+ ASYNC_DEBUG("[CONCURRENCY] set_maximum_threads(%zu) - currently no-op for async/await\\n", num);
443
+ (void)num; // Unused for now
444
+ }
445
+
446
+ // Get current thread ID (useful for debugging)
447
+ size_t __yo_get_thread_id(void) {
448
+ #ifdef _WIN32
449
+ return (size_t)GetCurrentThreadId();
450
+ #elif defined(__APPLE__)
451
+ uint64_t tid;
452
+ pthread_threadid_np(NULL, &tid);
453
+ return (size_t)tid;
454
+ #else
455
+ return (size_t)syscall(SYS_gettid);
456
+ #endif
457
+ }
458
+
459
+ // Yield execution (allows other tasks to run)
460
+ void __yo_thread_yield(void) {
461
+ #ifdef _WIN32
462
+ SwitchToThread();
463
+ #else
464
+ sched_yield();
465
+ #endif
466
+ }
467
+
468
+ // Async yield - creates an immediately-ready Future for cooperative yielding
469
+ // This allows the current async task to suspend and give other tasks a chance to run
470
+ // Usage: await Concurrency.yield();
471
+ typedef struct __yo_yield_future_t {
472
+ _Atomic int state; // Future state (0 = running, -1 = completed)
473
+ _Atomic(void (*)(void*)) continuation_fn; // Continuation (if awaited)
474
+ _Atomic(void*) continuation_sm; // Continuation state machine
475
+ } __yo_yield_future_t;
476
+
477
+ __yo_yield_future_t __yo_async_yield(void) {
478
+ __yo_yield_future_t future;
479
+ // Initialize as completed (state = -1) so await will not actually suspend
480
+ // The suspension happens because await checks the queue and processes other tasks
481
+ atomic_init(&future.state, -1);
482
+ atomic_init(&future.continuation_fn, NULL);
483
+ atomic_init(&future.continuation_sm, NULL);
484
+ return future;
485
+ }
486
+
487
+ // ============================================================================
488
+ // Async I/O Runtime (Linux - io_uring via liburing)
489
+ // ============================================================================
490
+
491
+ #if defined(__linux__)
492
+ // Try to include liburing.h - if not available, disable I/O features
493
+ #if __has_include(<liburing.h>)
494
+ #define YO_HAS_LIBURING 1
495
+ #include <liburing.h>
496
+ #include <fcntl.h>
497
+ #include <unistd.h>
498
+ #include <sys/stat.h>
499
+ #include <errno.h>
500
+
501
+ static struct io_uring __yo_io_ring;
502
+ static bool __yo_io_initialized = false;
503
+ static size_t __yo_pending_io_count = 0;
504
+
505
+ // I/O Future types - yo_io_future_t is defined in types/generation.ts
506
+ // It has the same layout as async state machines (state, result, continuation_fn, continuation_sm)
507
+ // so the await codegen can access ->state and ->result uniformly.
508
+ // We store the future pointer directly in the SQE user data.
509
+
510
+ // Initialize io_uring (called once at event loop start)
511
+ static void __yo_io_init(void) {
512
+ if (__yo_io_initialized) return;
513
+
514
+ int ret = io_uring_queue_init(256, &__yo_io_ring, 0);
515
+ if (ret < 0) {
516
+ fprintf(stderr, "[Yo] io_uring_queue_init failed: %s\\n", strerror(-ret));
517
+ exit(1);
518
+ }
519
+ __yo_io_initialized = true;
520
+ ASYNC_DEBUG("[IO] io_uring initialized with 256 entries\\n");
521
+ }
522
+
523
+ // Cleanup io_uring
524
+ static void __yo_io_cleanup(void) {
525
+ if (!__yo_io_initialized) return;
526
+ io_uring_queue_exit(&__yo_io_ring);
527
+ __yo_io_initialized = false;
528
+ ASYNC_DEBUG("[IO] io_uring cleaned up\\n");
529
+ }
530
+
531
+ // Check if there are pending I/O operations
532
+ static inline bool __yo_has_pending_io(void) {
533
+ return __yo_pending_io_count > 0;
534
+ }
535
+
536
+ // Process completions from CQ
537
+ // The future pointer is stored directly in the SQE user data
538
+ static void __yo_io_process_cqe(struct io_uring_cqe* cqe) {
539
+ yo_io_future_t* future = (yo_io_future_t*)io_uring_cqe_get_data(cqe);
540
+ __yo_pending_io_count--;
541
+
542
+ // Set the result
543
+ future->result = cqe->res;
544
+
545
+ ASYNC_DEBUG("[IO] Completed I/O: result=%d (pending=%zu)\\n",
546
+ future->result, __yo_pending_io_count);
547
+
548
+ // Mark as completed (state -1 = done)
549
+ atomic_store_explicit(&future->state, -1, memory_order_release);
550
+
551
+ // Wake continuation if registered
552
+ void (*cont_fn)(void*) = atomic_load_explicit(&future->continuation_fn, memory_order_acquire);
553
+ void* cont_sm = atomic_load_explicit(&future->continuation_sm, memory_order_acquire);
554
+
555
+ ASYNC_DEBUG("[IO] Continuation check: cont_fn=%p, cont_sm=%p\\n", (void*)cont_fn, cont_sm);
556
+
557
+ if (cont_fn && cont_sm) {
558
+ ASYNC_DEBUG("[IO] Spawning continuation for I/O completion\\n");
559
+ yo_async_spawn_task(cont_fn, cont_sm);
560
+ }
561
+
562
+ io_uring_cqe_seen(&__yo_io_ring, cqe);
563
+ }
564
+
565
+ // Poll for I/O completions (non-blocking)
566
+ static int __yo_io_poll(void) {
567
+ struct io_uring_cqe* cqe;
568
+ int count = 0;
569
+
570
+ while (io_uring_peek_cqe(&__yo_io_ring, &cqe) == 0) {
571
+ __yo_io_process_cqe(cqe);
572
+ count++;
573
+ }
574
+
575
+ if (count > 0) {
576
+ ASYNC_DEBUG("[IO] Polled %d completions\\n", count);
577
+ }
578
+ return count;
579
+ }
580
+
581
+ // Wait for at least one I/O completion (blocking)
582
+ static int __yo_io_wait(void) {
583
+ struct io_uring_cqe* cqe;
584
+ int ret = io_uring_wait_cqe(&__yo_io_ring, &cqe);
585
+ if (ret < 0) {
586
+ ASYNC_DEBUG("[IO] WARNING: io_uring_wait_cqe failed: %d\\n", ret);
587
+ return 0;
588
+ }
589
+
590
+ ASYNC_DEBUG("[IO] Waiting for I/O completion...\\n");
591
+ __yo_io_process_cqe(cqe);
592
+ return 1 + __yo_io_poll(); // Process any additional completions
593
+ }
594
+
595
+ // Create and start an async read operation
596
+ // Returns a yo_io_future_t* that completes when the read finishes
597
+ static yo_io_future_t* __yo_async_read_start(int32_t fd, void* buffer, uint32_t size, uint64_t offset) {
598
+ // Ensure io_uring is initialized (lazy initialization for eager async execution)
599
+ __yo_io_init();
600
+
601
+ yo_io_future_t* future = (yo_io_future_t*)__yo_malloc(sizeof(yo_io_future_t));
602
+ memset(future, 0, sizeof(yo_io_future_t)); // Zero-initialize to ensure dispose_fn etc. are NULL
603
+
604
+ // Initialize ref counting
605
+ future->header.ref_count = 1;
606
+
607
+ // Initialize future state
608
+ atomic_init(&future->state, 0); // 0 = pending
609
+ future->result = 0;
610
+ atomic_init(&future->continuation_fn, NULL);
611
+ atomic_init(&future->continuation_sm, NULL);
612
+
613
+ // Submit to io_uring
614
+ struct io_uring_sqe* sqe = io_uring_get_sqe(&__yo_io_ring);
615
+ if (!sqe) {
616
+ // Queue full
617
+ future->result = -EAGAIN;
618
+ atomic_store(&future->state, -1); // Mark as completed
619
+ ASYNC_DEBUG("[IO] WARNING: io_uring SQ full, returning EAGAIN\\n");
620
+ return future;
621
+ }
622
+
623
+ io_uring_prep_read(sqe, fd, buffer, (unsigned)size, (int64_t)offset);
624
+ io_uring_sqe_set_data(sqe, future); // Store future pointer directly
625
+ io_uring_submit(&__yo_io_ring);
626
+ __yo_pending_io_count++;
627
+
628
+ ASYNC_DEBUG("[IO] Started async read: fd=%d buffer=%p size=%u offset=%llu (pending=%zu)\\n",
629
+ fd, buffer, size, (unsigned long long)offset, __yo_pending_io_count);
630
+
631
+ return future;
632
+ }
633
+
634
+ // Create and start an async write operation
635
+ // Returns a yo_io_future_t* that completes when the write finishes
636
+ static yo_io_future_t* __yo_async_write_start(int32_t fd, const void* buffer, uint32_t size, uint64_t offset) {
637
+ // Ensure io_uring is initialized (lazy initialization for eager async execution)
638
+ __yo_io_init();
639
+
640
+ yo_io_future_t* future = (yo_io_future_t*)__yo_malloc(sizeof(yo_io_future_t));
641
+ memset(future, 0, sizeof(yo_io_future_t)); // Zero-initialize to ensure dispose_fn etc. are NULL
642
+
643
+ // Initialize ref counting
644
+ future->header.ref_count = 1;
645
+
646
+ // Initialize future state
647
+ atomic_init(&future->state, 0); // 0 = pending
648
+ future->result = 0;
649
+ atomic_init(&future->continuation_fn, NULL);
650
+ atomic_init(&future->continuation_sm, NULL);
651
+
652
+ // Submit to io_uring
653
+ struct io_uring_sqe* sqe = io_uring_get_sqe(&__yo_io_ring);
654
+ if (!sqe) {
655
+ // Queue full
656
+ future->result = -EAGAIN;
657
+ atomic_store(&future->state, -1); // Mark as completed
658
+ ASYNC_DEBUG("[IO] WARNING: io_uring SQ full, returning EAGAIN\\n");
659
+ return future;
660
+ }
661
+
662
+ io_uring_prep_write(sqe, fd, buffer, (unsigned)size, (int64_t)offset);
663
+ io_uring_sqe_set_data(sqe, future); // Store future pointer directly
664
+ io_uring_submit(&__yo_io_ring);
665
+ __yo_pending_io_count++;
666
+
667
+ ASYNC_DEBUG("[IO] Started async write: fd=%d buffer=%p size=%u offset=%llu (pending=%zu)\\n",
668
+ fd, (void*)buffer, size, (unsigned long long)offset, __yo_pending_io_count);
669
+
670
+ return future;
671
+ }
672
+
673
+ // Synchronous file operations
674
+ static int32_t __yo_file_open(const char* path, int32_t flags, int32_t mode) {
675
+ int fd = open(path, flags, mode);
676
+ int result = fd >= 0 ? fd : -errno;
677
+ ASYNC_DEBUG("[IO] open(%s, 0x%x, 0%o) = %d\\n", path, flags, mode, result);
678
+ return result;
679
+ }
680
+
681
+ static void __yo_file_close(int32_t fd) {
682
+ ASYNC_DEBUG("[IO] close(%d)\\n", fd);
683
+ close(fd);
684
+ }
685
+
686
+ static int64_t __yo_file_size(int32_t fd) {
687
+ struct stat st;
688
+ if (fstat(fd, &st) < 0) {
689
+ int result = -errno;
690
+ ASYNC_DEBUG("[IO] fstat(%d) failed: %d\\n", fd, result);
691
+ return result;
692
+ }
693
+ ASYNC_DEBUG("[IO] fstat(%d) = %lld bytes\\n", fd, (long long)st.st_size);
694
+ return st.st_size;
695
+ }
696
+
697
+ #else // !YO_HAS_LIBURING
698
+
699
+ // Stub functions when liburing is not available
700
+ static inline void __yo_io_init(void) {
701
+ fprintf(stderr, "[Yo] Warning: liburing not available, async I/O disabled\\n");
702
+ }
703
+
704
+ static inline void __yo_io_cleanup(void) {}
705
+
706
+ static inline bool __yo_has_pending_io(void) {
707
+ return false;
708
+ }
709
+
710
+ static inline void __yo_io_poll(void) {}
711
+
712
+ static inline void __yo_io_wait(void) {}
713
+
714
+ static inline void* __yo_async_read_start(int32_t fd, void* buffer, uint32_t size, uint64_t offset) {
715
+ fprintf(stderr, "[Yo] Error: async read not supported without liburing\\n");
716
+ abort();
717
+ return NULL;
718
+ }
719
+
720
+ static inline void* __yo_async_write_start(int32_t fd, const void* buffer, uint32_t size, uint64_t offset) {
721
+ fprintf(stderr, "[Yo] Error: async write not supported without liburing\\n");
722
+ abort();
723
+ return NULL;
724
+ }
725
+
726
+ static inline void __yo_async_read_submit(void* io_state, int32_t fd, void* buffer, uint32_t size, uint64_t offset) {
727
+ fprintf(stderr, "[Yo] Error: async read not supported without liburing\\n");
728
+ abort();
729
+ }
730
+
731
+ static inline void __yo_async_write_submit(void* io_state, int32_t fd, const void* buffer, uint32_t size, uint64_t offset) {
732
+ fprintf(stderr, "[Yo] Error: async write not supported without liburing\\n");
733
+ abort();
734
+ }
735
+
736
+ static int32_t __yo_file_open(const char* path, int32_t flags, int32_t mode) {
737
+ fprintf(stderr, "[Yo] Error: file operations not supported without liburing\\n");
738
+ return -1;
739
+ }
740
+
741
+ static void __yo_file_close(int32_t fd) {
742
+ fprintf(stderr, "[Yo] Error: file operations not supported without liburing\\n");
743
+ }
744
+
745
+ static int64_t __yo_file_size(int32_t fd) {
746
+ fprintf(stderr, "[Yo] Error: file operations not supported without liburing\\n");
747
+ return -1;
748
+ }
749
+
750
+ #endif // YO_HAS_LIBURING
751
+
752
+ #endif // __linux__
753
+ `)}function qu(e,t){e.emitLine(`
754
+ // ============================================================================
755
+ // Parallelism Runtime - Thread and Worker
756
+ // ============================================================================
757
+
758
+ // ============================================================================
759
+ // Thread - Dedicated OS Thread
760
+ // ============================================================================
761
+ // Simple wrapper around pthread. Each Thread runs on its own OS thread.
762
+ // - spawn: create new OS thread with closure (returns by value)
763
+ // - join: wait for thread to complete
764
+ //
765
+ // Note: __yo_thread_t and __yo_thread_fn are defined in the GC runtime types section
766
+ // to ensure they're available before user struct types that depend on them.
767
+
768
+ // Thread entry point wrapper
769
+ typedef struct __yo_thread_entry_args_t {
770
+ __yo_thread_fn fn; // User's function
771
+ void* closure; // User's closure data
772
+ } __yo_thread_entry_args_t;
773
+
774
+ // Thread entry point
775
+ static void* __yo_thread_entry(void* arg) {
776
+ __yo_thread_entry_args_t* args = (__yo_thread_entry_args_t*)arg;
777
+
778
+ PARALLELISM_DEBUG("[THREAD] Thread started (tid=%zu)\\n", (size_t)__yo_get_thread_id());
779
+
780
+ // Initialize thread-local GC for this thread
781
+ __yo_gc_init_thread();
782
+
783
+ // Call user's function with closure
784
+ args->fn(args->closure);
785
+
786
+ PARALLELISM_DEBUG("[THREAD] Thread completed (tid=%zu)\\n", (size_t)__yo_get_thread_id());
787
+
788
+ // Cleanup thread-local GC
789
+ __yo_gc_collect();
790
+
791
+ // Free the closure data (heap-allocated by codegen)
792
+ if (args->closure) {
793
+ __yo_free(args->closure);
794
+ }
795
+
796
+ // Free args
797
+ __yo_free(args);
798
+
799
+ return NULL;
800
+ }
801
+
802
+ // Spawn a new OS thread (returns by value)
803
+ // The codegen will handle extracting the closure function pointer and data
804
+ __yo_thread_t __yo_thread_spawn(__yo_thread_fn fn, void* closure) {
805
+ PARALLELISM_DEBUG("[THREAD] Spawning new thread\\n");
806
+
807
+ __yo_thread_t thread;
808
+
809
+ // Allocate entry args
810
+ __yo_thread_entry_args_t* args = (__yo_thread_entry_args_t*)__yo_malloc(sizeof(__yo_thread_entry_args_t));
811
+ args->fn = fn;
812
+ args->closure = closure;
813
+
814
+ // Create OS thread
815
+ int ret = yo_thread_create(&thread.handle, __yo_thread_entry, args);
816
+ if (ret != 0) {
817
+ PARALLELISM_DEBUG("[THREAD] Failed to create thread (ret=%d)\\n", ret);
818
+ __yo_free(args);
819
+ // Return invalid thread handle (handle will be 0/NULL)
820
+ thread.handle = (YO_THREAD_TYPE){0};
821
+ }
822
+
823
+ PARALLELISM_DEBUG("[THREAD] Spawned thread\\n");
824
+ return thread;
825
+ }
826
+
827
+ // Wait for thread to complete
828
+ void __yo_thread_join(__yo_thread_t thread) {
829
+ PARALLELISM_DEBUG("[THREAD] Joining thread\\n");
830
+ yo_thread_join(thread.handle);
831
+ PARALLELISM_DEBUG("[THREAD] Thread joined\\n");
832
+ }
833
+
834
+ // ============================================================================
835
+ // Worker - Thread Pool with Thread Affinity
836
+ // ============================================================================
837
+ // Worker spawns tasks on a thread pool. Each task has thread affinity:
838
+ // tasks are distributed round-robin to worker threads and stay on their
839
+ // assigned thread (no work stealing).
840
+ //
841
+ // Thread-per-core: By default, one worker thread per CPU core.
842
+ // Thread affinity: Each task runs on a specific worker thread.
843
+ // Thread-local GC: Each worker thread has its own GC heap.
844
+
845
+ // Task node for per-thread task queue
846
+ typedef struct __yo_worker_task_t {
847
+ __yo_thread_fn fn; // Task function
848
+ void* closure; // Task closure data
849
+ struct __yo_worker_task_t* next; // Next task in queue
850
+ } __yo_worker_task_t;
851
+
852
+ // Per-worker-thread state
853
+ typedef struct __yo_worker_thread_t {
854
+ YO_THREAD_TYPE handle; // OS thread handle
855
+ YO_THREAD_SYNC_TYPE mutex; // Mutex for task queue
856
+ YO_COND_TYPE cond; // Condition variable for task availability
857
+ __yo_worker_task_t* queue_head; // Head of task queue
858
+ __yo_worker_task_t* queue_tail; // Tail of task queue
859
+ volatile int shutdown; // Shutdown flag
860
+ volatile int running; // Thread running flag
861
+ } __yo_worker_thread_t;
862
+
863
+ // Global worker pool state
864
+ static __yo_worker_thread_t* __yo_worker_threads = NULL; // Array of worker threads
865
+ static size_t __yo_worker_num_threads = 0; // Number of worker threads
866
+ static size_t __yo_worker_next_thread = 0; // Round-robin counter for task distribution
867
+ static YO_THREAD_SYNC_TYPE __yo_worker_pool_mutex = YO_THREAD_SYNC_INIT; // Pool-level mutex
868
+ static volatile int __yo_worker_pool_initialized = 0; // Pool initialization flag
869
+
870
+ // Worker thread entry point
871
+ static void* __yo_worker_thread_entry(void* arg) {
872
+ __yo_worker_thread_t* worker = (__yo_worker_thread_t*)arg;
873
+
874
+ PARALLELISM_DEBUG("[WORKER] Worker thread started (tid=%zu)\\n", (size_t)__yo_get_thread_id());
875
+
876
+ // Initialize thread-local GC for this worker thread
877
+ __yo_gc_init_thread();
878
+
879
+ while (1) {
880
+ __yo_worker_task_t* task = NULL;
881
+
882
+ // Wait for a task
883
+ yo_mutex_lock(&worker->mutex);
884
+ while (worker->queue_head == NULL && !worker->shutdown) {
885
+ yo_cond_wait(&worker->cond, &worker->mutex);
886
+ }
887
+
888
+ // Check for shutdown
889
+ if (worker->shutdown && worker->queue_head == NULL) {
890
+ yo_mutex_unlock(&worker->mutex);
891
+ break;
892
+ }
893
+
894
+ // Dequeue task
895
+ task = worker->queue_head;
896
+ if (task != NULL) {
897
+ worker->queue_head = task->next;
898
+ if (worker->queue_head == NULL) {
899
+ worker->queue_tail = NULL;
900
+ }
901
+ }
902
+ yo_mutex_unlock(&worker->mutex);
903
+
904
+ // Execute task
905
+ if (task != NULL) {
906
+ PARALLELISM_DEBUG("[WORKER] Executing task (tid=%zu)\\n", (size_t)__yo_get_thread_id());
907
+ task->fn(task->closure);
908
+
909
+ // Free task closure and task node
910
+ if (task->closure) {
911
+ __yo_free(task->closure);
912
+ }
913
+ __yo_free(task);
914
+
915
+ // Run GC after task completion to clean up any cycles
916
+ __yo_gc_collect();
917
+ }
918
+ }
919
+
920
+ PARALLELISM_DEBUG("[WORKER] Worker thread exiting (tid=%zu)\\n", (size_t)__yo_get_thread_id());
921
+
922
+ // Final GC cleanup
923
+ __yo_gc_collect();
924
+
925
+ return NULL;
926
+ }
927
+
928
+ // Initialize the worker pool with the specified number of threads
929
+ static void __yo_worker_pool_init(size_t num_threads) {
930
+ if (__yo_worker_pool_initialized) {
931
+ return;
932
+ }
933
+
934
+ PARALLELISM_DEBUG("[WORKER] Initializing worker pool with %zu threads\\n", num_threads);
935
+
936
+ __yo_worker_threads = (__yo_worker_thread_t*)__yo_malloc(sizeof(__yo_worker_thread_t) * num_threads);
937
+ __yo_worker_num_threads = num_threads;
938
+ __yo_worker_next_thread = 0;
939
+
940
+ for (size_t i = 0; i < num_threads; i++) {
941
+ __yo_worker_thread_t* worker = &__yo_worker_threads[i];
942
+ yo_mutex_init(&worker->mutex);
943
+ yo_cond_init(&worker->cond);
944
+ worker->queue_head = NULL;
945
+ worker->queue_tail = NULL;
946
+ worker->shutdown = 0;
947
+ worker->running = 1;
948
+
949
+ int ret = yo_thread_create(&worker->handle, __yo_worker_thread_entry, worker);
950
+ if (ret != 0) {
951
+ PARALLELISM_DEBUG("[WORKER] Failed to create worker thread %zu (ret=%d)\\n", i, ret);
952
+ worker->running = 0;
953
+ }
954
+ }
955
+
956
+ __yo_worker_pool_initialized = 1;
957
+ PARALLELISM_DEBUG("[WORKER] Worker pool initialized\\n");
958
+ }
959
+
960
+ // Shutdown the worker pool
961
+ __attribute__((destructor))
962
+ static void __yo_worker_pool_shutdown(void) {
963
+ if (!__yo_worker_pool_initialized) {
964
+ return;
965
+ }
966
+
967
+ PARALLELISM_DEBUG("[WORKER] Shutting down worker pool\\n");
968
+
969
+ // Signal all workers to shutdown
970
+ for (size_t i = 0; i < __yo_worker_num_threads; i++) {
971
+ __yo_worker_thread_t* worker = &__yo_worker_threads[i];
972
+ yo_mutex_lock(&worker->mutex);
973
+ worker->shutdown = 1;
974
+ yo_cond_signal(&worker->cond);
975
+ yo_mutex_unlock(&worker->mutex);
976
+ }
977
+
978
+ // Wait for all workers to finish
979
+ for (size_t i = 0; i < __yo_worker_num_threads; i++) {
980
+ __yo_worker_thread_t* worker = &__yo_worker_threads[i];
981
+ if (worker->running) {
982
+ yo_thread_join(worker->handle);
983
+ }
984
+ yo_mutex_destroy(&worker->mutex);
985
+ yo_cond_destroy(&worker->cond);
986
+
987
+ // Free any remaining tasks in queue (shouldn't happen normally)
988
+ __yo_worker_task_t* task = worker->queue_head;
989
+ while (task != NULL) {
990
+ __yo_worker_task_t* next = task->next;
991
+ if (task->closure) {
992
+ __yo_free(task->closure);
993
+ }
994
+ __yo_free(task);
995
+ task = next;
996
+ }
997
+ }
998
+
999
+ __yo_free(__yo_worker_threads);
1000
+ __yo_worker_threads = NULL;
1001
+ __yo_worker_num_threads = 0;
1002
+ __yo_worker_pool_initialized = 0;
1003
+
1004
+ PARALLELISM_DEBUG("[WORKER] Worker pool shutdown complete\\n");
1005
+ }
1006
+
1007
+ // Get number of hardware threads (CPU cores)
1008
+ static size_t __yo_get_hardware_threads(void) {
1009
+ #ifdef _WIN32
1010
+ SYSTEM_INFO sysinfo;
1011
+ GetSystemInfo(&sysinfo);
1012
+ return (size_t)sysinfo.dwNumberOfProcessors;
1013
+ #elif defined(__APPLE__)
1014
+ int count;
1015
+ size_t size = sizeof(count);
1016
+ if (sysctlbyname("hw.ncpu", &count, &size, NULL, 0) == 0) {
1017
+ return (size_t)count;
1018
+ }
1019
+ return 1;
1020
+ #else
1021
+ long count = sysconf(_SC_NPROCESSORS_ONLN);
1022
+ return count > 0 ? (size_t)count : 1;
1023
+ #endif
1024
+ }
1025
+
1026
+ // Get CPU ID that the current thread is running on
1027
+ // Returns -1 if CPU affinity information is not available
1028
+ int __yo_get_cpu_id(void) {
1029
+ #if defined(__linux__)
1030
+ // On Linux, use sched_getcpu() to get the current CPU
1031
+ int cpu = sched_getcpu();
1032
+ return cpu;
1033
+ #elif defined(__APPLE__)
1034
+ // On macOS, there's no direct equivalent to sched_getcpu()
1035
+ // We could use thread_info but it's more complex
1036
+ // For now, return -1 to indicate "not available"
1037
+ return -1;
1038
+ #elif defined(_WIN32)
1039
+ // On Windows, use GetCurrentProcessorNumber()
1040
+ return (int)GetCurrentProcessorNumber();
1041
+ #else
1042
+ // Unknown platform
1043
+ return -1;
1044
+ #endif
1045
+ }
1046
+
1047
+ // Set the number of worker threads (must be called before first spawn)
1048
+ void __yo_worker_set_num_threads(size_t num) {
1049
+ YO_THREAD_SYNC_LOCK(&__yo_worker_pool_mutex);
1050
+ if (!__yo_worker_pool_initialized) {
1051
+ // Pool not initialized yet, just set for later
1052
+ __yo_worker_num_threads = num;
1053
+ PARALLELISM_DEBUG("[WORKER] Set num_threads to %zu (pool not yet initialized)\\n", num);
1054
+ } else {
1055
+ PARALLELISM_DEBUG("[WORKER] Warning: Cannot change num_threads after pool is initialized\\n");
1056
+ }
1057
+ YO_THREAD_SYNC_UNLOCK(&__yo_worker_pool_mutex);
1058
+ }
1059
+
1060
+ // Get the number of worker threads
1061
+ size_t __yo_worker_get_num_threads(void) {
1062
+ YO_THREAD_SYNC_LOCK(&__yo_worker_pool_mutex);
1063
+ size_t num = __yo_worker_num_threads;
1064
+ if (num == 0) {
1065
+ num = __yo_get_hardware_threads();
1066
+ }
1067
+ YO_THREAD_SYNC_UNLOCK(&__yo_worker_pool_mutex);
1068
+ return num;
1069
+ }
1070
+
1071
+ // Spawn a task on the worker pool
1072
+ // Uses round-robin distribution for thread affinity
1073
+ void __yo_worker_spawn(__yo_thread_fn fn, void* closure) {
1074
+ YO_THREAD_SYNC_LOCK(&__yo_worker_pool_mutex);
1075
+
1076
+ // Initialize pool on first spawn if not already done
1077
+ if (!__yo_worker_pool_initialized) {
1078
+ size_t num = __yo_worker_num_threads;
1079
+ if (num == 0) {
1080
+ num = __yo_get_hardware_threads();
1081
+ }
1082
+ __yo_worker_pool_init(num);
1083
+ }
1084
+
1085
+ // Select worker thread (round-robin for thread affinity)
1086
+ size_t thread_idx = __yo_worker_next_thread % __yo_worker_num_threads;
1087
+ __yo_worker_next_thread++;
1088
+
1089
+ YO_THREAD_SYNC_UNLOCK(&__yo_worker_pool_mutex);
1090
+
1091
+ PARALLELISM_DEBUG("[WORKER] Spawning task on worker thread %zu\\n", thread_idx);
1092
+
1093
+ // Create task node
1094
+ __yo_worker_task_t* task = (__yo_worker_task_t*)__yo_malloc(sizeof(__yo_worker_task_t));
1095
+ task->fn = fn;
1096
+ task->closure = closure;
1097
+ task->next = NULL;
1098
+
1099
+ // Enqueue task to the selected worker's queue
1100
+ __yo_worker_thread_t* worker = &__yo_worker_threads[thread_idx];
1101
+ yo_mutex_lock(&worker->mutex);
1102
+ if (worker->queue_tail == NULL) {
1103
+ worker->queue_head = task;
1104
+ worker->queue_tail = task;
1105
+ } else {
1106
+ worker->queue_tail->next = task;
1107
+ worker->queue_tail = task;
1108
+ }
1109
+ yo_cond_signal(&worker->cond);
1110
+ yo_mutex_unlock(&worker->mutex);
1111
+ }
1112
+ `)}function ju(e){let t=e.emitter;t.emitDeclarationLine("// Function declarations"),t.emitDeclarationLine("/// Extern functions");for(let n in e.externFunctions){let{cName:r,type:o}=e.externFunctions[n];o.isExtern!=="yo"&&(o.isExtern==="c"&&o.cInclude||r.startsWith("__atomic_")||r.startsWith("__sync_")||Yu(o,r,!0,e))}t.emitDeclarationLine(""),t.emitDeclarationLine("/// Async runtime functions"),t.emitDeclarationLine("void yo_async_spawn_task(void (*resume_fn)(void*), void* state_machine);"),t.emitDeclarationLine("void yo_future_dispose(void* ptr);"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Object constructors"),Bd(e),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Closure constructors"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Capture dispose functions"),Pd(e),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Dyn type constructors"),t.emitDeclarationLine(""),t.emitDeclarationLine("/// Regular functions");for(let n in e.functions){let{cName:r,value:o}=e.functions[n];if(Io(o)||No(o)||Do(o))continue;let i=o.specializedType??o.type,a=i.parameters.some(u=>Ye(u.type))||i.forallParameters.length>0,s=Ye(i.return.type),l=ee(i.return.type)&&i.return.type.requiredModules.length>0;a||s&&!l||Yu(i,r,!1,e,o.body)}t.emitDeclarationLine("/// Closure vtable instances"),t.emitDeclarationLine("")}function Qr(e,t,n,r){let o=r||H(e.return.type,n),i=e.parameters.filter(u=>!u.isCompileTimeOnly),a=[];e.isClosure&&a.push("void* closure_context");let s=i.map((u,d)=>{let c=Q(u.label||`param${d}`);if(ce(u.type))return Qr(u.type,"(*)",n).replace(" (*)(",` (*${c})(`);{let f;if(ee(u.type)&&Pe(u.type)){if(!u.type.resolvedConcreteType)throw new Error(`Impl(Future) parameter '${u.label}' has no resolvedConcreteType. Function: ${t}. SomeType ID: ${u.type.id}. This indicates the function wasn't properly specialized - generic Impl(Future) functions should not reach codegen.`);f=H(u.type.resolvedConcreteType,n)+"*"}else f=H(u.type,n);return`${f} ${c}`}});a.push(...s);let l=a.join(", ");return`${o} ${t}(${l})`}function Xa(e){if(e){if(v(e,C.async))return e;if(V(e)){let t=e;for(let n of t.args){let r=Xa(n);if(r)return r}}}}function Yu(e,t,n,r,o){var l,u,d;let i;if(o&&Pe(e.return.type)){let c=Xa(o);(l=c==null?void 0:c.$)!=null&&l.asyncStateMachineStructName&&(i=`${c.$.asyncStateMachineStructName}*`)}if(o&&ee(e.return.type)&&!Pe(e.return.type)&&(u=o.$)!=null&&u.type&&(i=H(o.$.type,r)),!i&&o&&((d=o.$)!=null&&d.type)&&!Pe(e.return.type)){let c=H(e.return.type,r),f=H(o.$.type,r);c!==f&&(i=f)}let a=i?Qr(e,t,r,i):Qr(e,t,r),s=x(e);r.emitter.emitDeclarationLine(`${n?"extern ":""}${a}; // ${s}`)}function Wu(e){e.emitter.emitLine("// Function implementations"),Ru(e.emitter,e.debugAsyncAwait),qu(e.emitter,e.debugParallelism),zd(e),Rd(e);for(let t in e.functions){let{value:n,cName:r}=e.functions[t];if(Io(n)||No(n)||Do(n))continue;let o=n.specializedType??n.type,i=o.parameters.some(l=>Ye(l.type))||o.forallParameters.length>0,a=Ye(o.return.type),s=ee(o.return.type)&&o.return.type.requiredModules.length>0;i||a&&!s||Qu(n,r,e)}es(e)}function Hu(e){var r;let t=e.emitter;if(e.dynImpls.size===0)return;t.emitLine(""),t.emitLine("// === Dyn Dup/Drop Functions ==="),t.emitLine("");let n=new Set;for(let[,o]of e.dynImpls){let i=((r=e.types[o.dynType.id])==null?void 0:r.cName)||`yo_dyn_${o.dynType.id}`;n.has(i)||(n.add(i),t.emitLine(`${i} __yo_dup_${i}(${i} dyn) {`),t.emitLine(" if (dyn.data) {"),t.emitLine(" __yo_incr_rc(dyn.data);"),t.emitLine(" }"),t.emitLine(" return dyn;"),t.emitLine("}"),t.emitLine(""),t.emitLine(`void __yo_drop_${i}(${i} dyn) {`),t.emitLine(" if (dyn.data) {"),t.emitLine(" __yo_decr_rc(dyn.data);"),t.emitLine(" }"),t.emitLine("}"),t.emitLine(""))}}function Ku(e){let t=e.emitter,n=!1,r=null;for(let a in e.functions){let{cName:s,value:l}=e.functions[a];if(s==="__yo_user_main"){n=!0,r=l;break}}if(!n||!r)return;let o=r.type.return.type;if(!Be(o))throw new Error(`main function must return unit , but it returns ${x(o)}. Use 'main :: (fn() -> unit)' instead. For exit codes, use 'exit(code)' from std/libc/stdlib.yo`);t.emitLine(`
1113
+ // Main wrapper - calls __yo_user_main directly
1114
+ int main(void) {
1115
+ // Initialize async runtime (in case async blocks are used)
1116
+ __yo_async_scheduler_init();
1117
+
1118
+ // Call sync main
1119
+ __yo_user_main();
1120
+
1121
+ // Wait for all async tasks to complete
1122
+ // This ensures any async blocks spawned in main finish before exit
1123
+ __yo_async_wait_all();
1124
+
1125
+ return 0;
1126
+ }
1127
+ `)}function Qu(e,t,n){var y,g,h,_;let r=n.emitter,o=t,i=e.specializedType??e.type,a;if(e.body&&Pe(i.return.type)){let E=Xa(e.body);(y=E==null?void 0:E.$)!=null&&y.asyncStateMachineStructName&&(a=`${E.$.asyncStateMachineStructName}*`)}if(e.body&&ee(i.return.type)&&!Pe(i.return.type)&&(g=e.body.$)!=null&&g.type&&(a=H(e.body.$.type,n)),!a&&e.body&&((h=e.body.$)!=null&&h.type)&&e.specializedType){let E=H(i.return.type,n),k=H(e.body.$.type,n);E!==k&&(a=k)}let s=a?Qr(i,t,n,a):Qr(i,t,n);r.emitLine(`${s} {`);let l=n.currentFunctionName,u=n.currentFunctionType;n.currentFunctionName=o,n.currentFunctionType=i;let d=n.currentClosureCaptures,c=n.currentClosureCaptureFrameLevel,f=n.currentClosureType,m=n.currentClosureCaptureTypeCName;if(i.isClosure){let E=e.closureInfo;if(E){let k=E.closureType.isFn,w=E.captureType;if(n.currentClosureType=k.callType,w&&$e(w)&&w.fields.length>0){let $=w.fields.map(F=>F.label);n.currentClosureCaptures=$,n.currentClosureCaptureFrameLevel=e.frameLevel;let b=(_=n.types[w.id])==null?void 0:_.cName;b&&(n.currentClosureCaptureTypeCName=b)}}}Ud(e.body,i," ",n),n.currentFunctionName=l,n.currentFunctionType=u,n.currentClosureCaptures=d,n.currentClosureCaptureFrameLevel=c,n.currentClosureType=f,n.currentClosureCaptureTypeCName=m,r.emitLine("}")}function Ud(e,t,n,r){var i,a,s,l,u,d,c,f;let o=r.emitter;if(V(e)&&v(e,A.begin)){let m=e.args,y=!1;for(let g=0;g<m.length-1;g++){let h=m[g];v(h,A.return)&&(y=!0);let _=z(h,n,r);if(_&&(!h.$||!St(h.$.env.modulePath,_))&&o.emitLine(`${n}${_};`),y)break}if(!y&&m.length>0){let g=m[m.length-1];if(Pe(t.return.type)&&g){let _=v(g,C.async),E=(i=g.$)==null?void 0:i.type,k=E&&Pe(E);if(_||k){let w=z(g,n,r);o.emitLine(`${n}return ${w};`);return}}else if(g&&Be(t.return.type)){let _=z(g,n,r);_&&o.emitLine(`${n}${_};`),Kt(e,n,r)}else if(g){let _=(a=g.$)==null?void 0:a.controlFlow,E=Be((s=g.$)==null?void 0:s.type)||V(g)&&v(g,A.tuple)&&g.args.length===0,k=m.length>1?m[m.length-2]:null,w=(l=k==null?void 0:k.$)==null?void 0:l.controlFlow;if(!(E&&w))if(_){let $=z(g,n,r);$&&o.emitLine(`${n}${$};`)}else{if((u=g.$)!=null&&u.deferredDupExpressions&&g.$.deferredDupExpressions.length>0){if((d=g.$)!=null&&d.variableName){let F=H(g.$.type,r),M=Q(g.$.variableName),L=z(g,n,r);M!==L&&o.emitLine(`${n}${F} ${M} = ${L};`)}Ft(g,n,r);let b=g.$.deferredDupExpressions[0];if(V(b)&&((c=b.$)!=null&&c.variableName)){let F=Q(b.$.variableName);Kt(e,n,r),o.emitLine(`${n}return ${F};`);return}}let $=z(g,n,r);Kt(e,n,r),$&&o.emitLine(`${n}return ${$};`)}}}else if(y&&m.length>0){let g=m[m.length-1];g&&Be((f=g.$)==null?void 0:f.type)}}else if(Kt(e,n,r),Be(t.return.type)){let m=z(e,n,r);m&&o.emitLine(`${n}${m};`)}else Bu(e,n,r)}function Zu(e){let t=new Set;for(let n in e.functions){let{value:r,cName:o}=e.functions[n],i=r.specializedType;No(r)||!i||!Io(r)||Nn(i)||t.has(n)||(t.add(n),e.emitter.emitDeclarationLine(`${Qr(i,o,e)}; // specialized function: ${x(r.type)}`))}}function Ju(e){for(let t in e.functions){let{value:n,cName:r}=e.functions[t];No(n)||!n.specializedType||!Io(n)||Nn(n.specializedType)||Qu(n,r,e)}}function Bd(e){let t=e.emitter;t.emitDeclarationLine("void __yo_decr_rc(void* ptr); // Decrement reference count"),t.emitDeclarationLine("void* __yo_incr_rc(void* ptr); // Increment reference count"),t.emitDeclarationLine("void __yo_gc_register(void* ptr); // Register object for cycle detection"),t.emitDeclarationLine("void __yo_gc_unregister(void* ptr); // Unregister object from cycle detection"),t.emitDeclarationLine("void __yo_gc_collect(); // Trigger garbage collection"),t.emitDeclarationLine("void __yo_gc_init_thread(); // Initialize thread-local GC state (for worker threads)"),t.emitDeclarationLine("void __yo_cleanup_thread_gc(); // Clean up thread-local GC state"),t.emitDeclarationLine("static void yo_init_process_cleanup(void); // Initialize process cleanup");for(let n in e.types){let{type:r,cName:o}=e.types[n];if($e(r)&&r.isReferenceSemantics){if(r.fields.some(l=>Ye(l.type)))continue;let a=`__yo_new_${o}`,s=r.fields.map(l=>{let u=H(l.type,e),d=Q(l.label);return`${u} ${d}`}).join(", ");t.emitDeclarationLine(`${o}* ${a}(${s}); // Constructor`)}}}function Pd(e){let t=e.emitter;if(e.closureCaptureMap&&e.closureCaptureMap.size>0)for(let[n]of e.closureCaptureMap){let r=`__yo_dispose_closure_${n}`;t.emitDeclarationLine(`void ${r}(void* closure_ptr);`)}}function zd(e){let t=e.emitter;t.emitLine(`// Non-atomic reference counting functions (thread-local)
1128
+ void __yo_decr_rc(void* ptr) {
1129
+ yo_ref_header_t* header = (yo_ref_header_t*)ptr;
1130
+
1131
+ GC_DEBUG("Decr: ptr=%p RC=%zu->%zu\\n", ptr, header->ref_count, header->ref_count - 1);
1132
+
1133
+ if (header->ref_count == 1) {
1134
+ // Last reference - deallocate immediately without decrementing
1135
+ GC_DEBUG("Decr: Deallocating ptr=%p (last ref)\\n", ptr);
1136
+ __yo_gc_unregister(ptr);
1137
+ if (header->dispose_fn) {
1138
+ header->dispose_fn(ptr);
1139
+ }
1140
+ __yo_free(ptr);
1141
+ } else {
1142
+ // More than one reference - just decrement
1143
+ header->ref_count--;
1144
+ }
1145
+ }
1146
+
1147
+ void* __yo_incr_rc(void* ptr) {
1148
+ yo_ref_header_t* header = (yo_ref_header_t*)ptr;
1149
+ header->ref_count++;
1150
+ GC_DEBUG("Incr: ptr=%p RC=%zu\\n", ptr, header->ref_count);
1151
+ return ptr;
1152
+ }`),t.emitLine(`
1153
+ // Atomic reference counting functions for Iso types (thread-safe)
1154
+ void* __yo_incr_rc_atomic(void* ptr) {
1155
+ yo_ref_header_t* header = (yo_ref_header_t*)ptr;
1156
+ atomic_fetch_add(((_Atomic size_t*)&header->ref_count), 1);
1157
+ return ptr;
1158
+ }
1159
+
1160
+ void __yo_decr_rc_atomic(void* ptr) {
1161
+ yo_ref_header_t* header = (yo_ref_header_t*)ptr;
1162
+ size_t old_count = atomic_fetch_sub(((_Atomic size_t*)&header->ref_count), 1);
1163
+
1164
+ if (old_count == 1) {
1165
+ // Last reference - deallocate
1166
+ // Note: No GC tracking needed for Iso types (they don't participate in cycles)
1167
+ if (header->dispose_fn) {
1168
+ header->dispose_fn(ptr);
1169
+ }
1170
+ __yo_free(ptr);
1171
+ }
1172
+ }`),t.emitLine(`// Per-thread GC tracking state for cycle collection
1173
+ static _Thread_local yo_thread_gc_state_t* yo_current_thread_gc = NULL; // Current thread's GC state
1174
+ static yo_thread_gc_state_t* yo_all_thread_gcs = NULL; // Global list of all thread GC states (for cleanup)
1175
+ #if defined(_WIN32)
1176
+ static YO_THREAD_SYNC_TYPE yo_thread_list_mutex;
1177
+ #elif defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
1178
+ static YO_THREAD_SYNC_TYPE yo_thread_list_mutex = YO_THREAD_SYNC_INIT;
1179
+ #endif
1180
+ static size_t yo_gc_min_threshold = 256; // Minimum threshold for adaptive scaling
1181
+ static size_t yo_gc_collect_threshold = 256; // Adaptive: starts at min, grows to 2x live objects after each GC
1182
+
1183
+ // Thread cleanup infrastructure
1184
+ #if defined(_WIN32)
1185
+ static tss_t yo_thread_cleanup_key;
1186
+ static once_flag yo_thread_cleanup_once = ONCE_FLAG_INIT;
1187
+
1188
+ static void yo_thread_cleanup_destructor(void* value) {
1189
+ if (value != NULL) {
1190
+ __yo_cleanup_thread_gc();
1191
+ }
1192
+ }
1193
+
1194
+ static void yo_init_thread_cleanup_key(void) {
1195
+ tss_create(&yo_thread_cleanup_key, yo_thread_cleanup_destructor);
1196
+ }
1197
+ #elif defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
1198
+ static pthread_key_t yo_thread_cleanup_key = (pthread_key_t)(-1);
1199
+ static pthread_once_t yo_thread_cleanup_once = PTHREAD_ONCE_INIT;
1200
+
1201
+ static void yo_pthread_cleanup(void* value) {
1202
+ if (value != NULL) {
1203
+ __yo_cleanup_thread_gc();
1204
+ }
1205
+ }
1206
+
1207
+ static void yo_init_thread_cleanup_key(void) {
1208
+ pthread_key_create(&yo_thread_cleanup_key, yo_pthread_cleanup);
1209
+ }
1210
+ #endif
1211
+
1212
+ // Initialize thread-local GC state
1213
+ static void yo_init_thread_gc() {
1214
+ if (yo_current_thread_gc != NULL) return;
1215
+
1216
+ #if defined(_WIN32)
1217
+ call_once(&yo_thread_cleanup_once, yo_init_thread_cleanup_key);
1218
+ tss_set(yo_thread_cleanup_key, (void*)1);
1219
+ #elif defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
1220
+ pthread_once(&yo_thread_cleanup_once, yo_init_thread_cleanup_key);
1221
+ if (yo_thread_cleanup_key != (pthread_key_t)(-1)) {
1222
+ pthread_setspecific(yo_thread_cleanup_key, (void*)1);
1223
+ }
1224
+ #endif
1225
+
1226
+ yo_init_process_cleanup();
1227
+
1228
+ yo_current_thread_gc = (yo_thread_gc_state_t*)__yo_malloc(sizeof(yo_thread_gc_state_t));
1229
+ yo_current_thread_gc->tracked_objects = NULL;
1230
+ yo_current_thread_gc->tracked_count = 0;
1231
+ yo_current_thread_gc->thread_id = yo_thread_self();
1232
+ yo_current_thread_gc->alloc_count = 0;
1233
+
1234
+ // Add to global thread list (for cleanup coordination)
1235
+ yo_mutex_lock(&yo_thread_list_mutex);
1236
+ yo_current_thread_gc->next = yo_all_thread_gcs;
1237
+ yo_current_thread_gc->prev = NULL;
1238
+ if (yo_all_thread_gcs != NULL) {
1239
+ yo_all_thread_gcs->prev = yo_current_thread_gc;
1240
+ }
1241
+ yo_all_thread_gcs = yo_current_thread_gc;
1242
+ yo_mutex_unlock(&yo_thread_list_mutex);
1243
+ }
1244
+
1245
+ // Public function to initialize thread-local GC (for worker threads)
1246
+ void __yo_gc_init_thread() {
1247
+ yo_init_thread_gc();
1248
+ }`),t.emitLine(`void __yo_gc_register(void* ptr) {
1249
+ yo_ref_header_t* header = (yo_ref_header_t*)ptr;
1250
+
1251
+ if (yo_current_thread_gc == NULL) {
1252
+ yo_init_thread_gc();
1253
+ }
1254
+
1255
+ GC_DEBUG("GC Register: ptr=%p\\n", ptr);
1256
+
1257
+ // Check if already tracked
1258
+ if (header->gc_flags & YO_GC_TRACKED) {
1259
+ return;
1260
+ }
1261
+
1262
+ header->gc_flags |= YO_GC_TRACKED;
1263
+ header->gc_mark = YO_GC_UNMARKED;
1264
+
1265
+ // Add to thread-local tracking list
1266
+ header->gc_next = yo_current_thread_gc->tracked_objects;
1267
+ header->gc_prev = NULL;
1268
+ if (yo_current_thread_gc->tracked_objects != NULL) {
1269
+ yo_current_thread_gc->tracked_objects->gc_prev = header;
1270
+ }
1271
+ yo_current_thread_gc->tracked_objects = header;
1272
+ yo_current_thread_gc->tracked_count++;
1273
+
1274
+ // Check if we should trigger GC
1275
+ if (yo_current_thread_gc->tracked_count >= yo_gc_collect_threshold) {
1276
+ __yo_gc_collect();
1277
+ }
1278
+ }
1279
+
1280
+ void __yo_gc_unregister(void* ptr) {
1281
+ yo_ref_header_t* header = (yo_ref_header_t*)ptr;
1282
+
1283
+ if (yo_current_thread_gc == NULL) {
1284
+ return;
1285
+ }
1286
+
1287
+ if (!(header->gc_flags & YO_GC_TRACKED)) {
1288
+ return;
1289
+ }
1290
+
1291
+ // Remove from tracking list (O(1) with doubly-linked list)
1292
+ if (header->gc_prev != NULL) {
1293
+ header->gc_prev->gc_next = header->gc_next;
1294
+ } else {
1295
+ yo_current_thread_gc->tracked_objects = header->gc_next;
1296
+ }
1297
+
1298
+ if (header->gc_next != NULL) {
1299
+ header->gc_next->gc_prev = header->gc_prev;
1300
+ }
1301
+
1302
+ yo_current_thread_gc->tracked_count--;
1303
+ header->gc_flags &= ~YO_GC_TRACKED;
1304
+ }`),t.emitLine(`// QuickJS-style trial deletion for cycle collection
1305
+ // Phase 1: Trial deletion - decrement ref counts for internal references
1306
+ static void yo_gc_trial_delete_visitor(void* ptr) {
1307
+ if (ptr == NULL) return;
1308
+ yo_ref_header_t* header = (yo_ref_header_t*)ptr;
1309
+
1310
+ // Only process tracked objects
1311
+ if (!(header->gc_flags & YO_GC_TRACKED)) return;
1312
+
1313
+ // Trial decrement
1314
+ if (header->ref_count > 0) {
1315
+ header->ref_count--;
1316
+ GC_DEBUG("TrialDelete: ptr=%p, ref_count->%zu\\n", ptr, header->ref_count);
1317
+ }
1318
+ }
1319
+
1320
+ // Phase 2: Restore ref counts for live objects
1321
+ static void yo_gc_restore_visitor(void* ptr) {
1322
+ if (ptr == NULL) return;
1323
+ yo_ref_header_t* header = (yo_ref_header_t*)ptr;
1324
+
1325
+ // Only restore for objects that were trial-deleted
1326
+ if (header->gc_mark == YO_GC_LIVE) {
1327
+ header->ref_count++;
1328
+ GC_DEBUG("Restore: ptr=%p, ref_count->%zu\\n", ptr, header->ref_count);
1329
+ }
1330
+ }
1331
+
1332
+ void __yo_gc_collect() {
1333
+ if (yo_current_thread_gc == NULL) return;
1334
+
1335
+ yo_ref_header_t* head = yo_current_thread_gc->tracked_objects;
1336
+ if (head == NULL) return;
1337
+
1338
+ GC_DEBUG("GC: Starting collection, tracked_count=%zu\\n", yo_current_thread_gc->tracked_count);
1339
+
1340
+ size_t collected = 0;
1341
+
1342
+ // Phase 1: Mark all as candidates and trial-delete
1343
+ yo_ref_header_t* obj = head;
1344
+ while (obj != NULL) {
1345
+ obj->gc_mark = YO_GC_CANDIDATE;
1346
+ obj = obj->gc_next;
1347
+ }
1348
+
1349
+ // Trial deletion: decrement RC for all internal references
1350
+ obj = head;
1351
+ while (obj != NULL) {
1352
+ if (obj->traverse_fn) {
1353
+ obj->traverse_fn(obj, yo_gc_trial_delete_visitor);
1354
+ }
1355
+ obj = obj->gc_next;
1356
+ }
1357
+
1358
+ // Phase 2: Identify garbage (RC == 0) and live objects (RC > 0)
1359
+ obj = head;
1360
+ while (obj != NULL) {
1361
+ if (obj->ref_count == 0) {
1362
+ obj->gc_mark = YO_GC_GARBAGE;
1363
+ GC_DEBUG("GC: Marked as garbage: ptr=%p\\n", obj);
1364
+ } else {
1365
+ obj->gc_mark = YO_GC_LIVE;
1366
+ GC_DEBUG("GC: Marked as live: ptr=%p (ref_count=%zu)\\n", obj, obj->ref_count);
1367
+ }
1368
+ obj = obj->gc_next;
1369
+ }
1370
+
1371
+ // Phase 3: Restore ref counts for live objects
1372
+ obj = head;
1373
+ while (obj != NULL) {
1374
+ if (obj->gc_mark == YO_GC_LIVE && obj->traverse_fn) {
1375
+ obj->traverse_fn(obj, yo_gc_restore_visitor);
1376
+ }
1377
+ obj = obj->gc_next;
1378
+ }
1379
+
1380
+ // Phase 4: Sweep - collect garbage objects
1381
+ yo_ref_header_t* current = head;
1382
+ yo_ref_header_t* prev = NULL;
1383
+
1384
+ while (current != NULL) {
1385
+ yo_ref_header_t* next = current->gc_next;
1386
+
1387
+ if (current->gc_mark == YO_GC_GARBAGE) {
1388
+ GC_DEBUG("GC: Collecting garbage: ptr=%p\\n", current);
1389
+
1390
+ // Remove from tracking list
1391
+ if (prev == NULL) {
1392
+ yo_current_thread_gc->tracked_objects = next;
1393
+ } else {
1394
+ prev->gc_next = next;
1395
+ }
1396
+ if (next != NULL) {
1397
+ next->gc_prev = prev;
1398
+ }
1399
+
1400
+ yo_current_thread_gc->tracked_count--;
1401
+ collected++;
1402
+
1403
+ // Call dispose and free
1404
+ if (current->dispose_fn) {
1405
+ current->dispose_fn(current);
1406
+ }
1407
+ __yo_free(current);
1408
+
1409
+ current = next;
1410
+ } else {
1411
+ // Reset mark for next collection
1412
+ current->gc_mark = YO_GC_UNMARKED;
1413
+ prev = current;
1414
+ current = next;
1415
+ }
1416
+ }
1417
+
1418
+ // Adaptive threshold: set to max(min_threshold, 2 * remaining_objects)
1419
+ size_t new_threshold = yo_current_thread_gc->tracked_count * 2;
1420
+ if (new_threshold < yo_gc_min_threshold) {
1421
+ new_threshold = yo_gc_min_threshold;
1422
+ }
1423
+ yo_gc_collect_threshold = new_threshold;
1424
+
1425
+ GC_DEBUG("GC: Collection complete, collected=%zu, remaining=%zu, next_threshold=%zu\\n", collected, yo_current_thread_gc->tracked_count, yo_gc_collect_threshold);
1426
+ }
1427
+
1428
+ size_t __yo_gc_tracked_count() {
1429
+ if (yo_current_thread_gc == NULL) return 0;
1430
+ return yo_current_thread_gc->tracked_count;
1431
+ }`),t.emitLine(`// Clean up thread-local GC state
1432
+ void __yo_cleanup_thread_gc() {
1433
+ yo_mutex_lock(&yo_thread_list_mutex);
1434
+
1435
+ yo_thread_gc_state_t* my_gc_state = yo_current_thread_gc;
1436
+
1437
+ if (my_gc_state == NULL) {
1438
+ yo_mutex_unlock(&yo_thread_list_mutex);
1439
+ return;
1440
+ }
1441
+
1442
+ GC_DEBUG("CleanupThread: tracked_count=%zu\\n", my_gc_state->tracked_count);
1443
+
1444
+ // Force dispose all remaining tracked objects
1445
+ yo_ref_header_t* current = my_gc_state->tracked_objects;
1446
+ while (current != NULL) {
1447
+ yo_ref_header_t* next = current->gc_next;
1448
+
1449
+ GC_DEBUG("CleanupThread: Disposing object ptr=%p\\n", current);
1450
+ if (current->dispose_fn) {
1451
+ current->dispose_fn(current);
1452
+ }
1453
+ __yo_free(current);
1454
+
1455
+ current = next;
1456
+ }
1457
+
1458
+ // Remove from global list
1459
+ if (my_gc_state->prev != NULL) {
1460
+ my_gc_state->prev->next = my_gc_state->next;
1461
+ } else {
1462
+ yo_all_thread_gcs = my_gc_state->next;
1463
+ }
1464
+
1465
+ if (my_gc_state->next != NULL) {
1466
+ my_gc_state->next->prev = my_gc_state->prev;
1467
+ }
1468
+
1469
+ yo_mutex_unlock(&yo_thread_list_mutex);
1470
+
1471
+ __yo_free(my_gc_state);
1472
+ yo_current_thread_gc = NULL;
1473
+ }
1474
+
1475
+ // Process cleanup
1476
+ static void yo_process_cleanup(void) {
1477
+ GC_DEBUG("ProcessCleanup: Called\\n");
1478
+
1479
+ if (yo_current_thread_gc != NULL) {
1480
+ __yo_gc_collect();
1481
+ __yo_cleanup_thread_gc();
1482
+ }
1483
+
1484
+ #if defined(_WIN32)
1485
+ tss_delete(yo_thread_cleanup_key);
1486
+ #elif defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
1487
+ if (yo_thread_cleanup_key != (pthread_key_t)(-1)) {
1488
+ pthread_key_delete(yo_thread_cleanup_key);
1489
+ }
1490
+ #endif
1491
+ }
1492
+
1493
+ static void yo_init_process_cleanup(void) {
1494
+ static bool cleanup_initialized = false;
1495
+ if (cleanup_initialized) return;
1496
+ cleanup_initialized = true;
1497
+
1498
+ #if defined(_WIN32)
1499
+ mtx_init(&yo_thread_list_mutex, mtx_plain);
1500
+ #endif
1501
+
1502
+ atexit(yo_process_cleanup);
1503
+ }`)}function Gd(e){var n;let t=e.emitter;for(let r in e.types){let{type:o,cName:i}=e.types[r];if($e(o)&&o.isReferenceSemantics){if(o.fields.some(l=>Ye(l.type)))continue;let s=`__yo_traverse_${i}`;t.emitLine(`void ${s}(void* ptr, void (*visit)(void*)) {`),t.emitLine(` ${i}* obj = (${i}*)ptr;`);for(let l of o.fields){let u=Q(l.label),d=l.type;if($e(d)&&d.isReferenceSemantics)t.emitLine(` if (obj->${u}) {`),t.emitLine(` visit(obj->${u});`),t.emitLine(" }");else if(Ve(d)){let c=d;if(!rn(c)){t.emitLine(` switch (obj->${u}.tag) {`);for(let m of c.variants||[])if(m.fields&&m.fields.length>0){for(let y of m.fields)if($e(y.type)&&y.type.isReferenceSemantics){let g=`YO_${(n=c.id)==null?void 0:n.toUpperCase()}_${m.name.toUpperCase()}`;t.emitLine(` case ${g}:`),t.emitLine(` if (obj->${u}.data.${m.name}.${Q(y.label)}) {`),t.emitLine(` visit(obj->${u}.data.${m.name}.${Q(y.label)});`),t.emitLine(" }"),t.emitLine(" break;");break}}t.emitLine(" }")}}}t.emitLine("}"),t.emitLine("")}}}function Rd(e){var n;let t=e.emitter;Gd(e);for(let r in e.types){let{type:o,cName:i}=e.types[r];if($e(o)&&o.isReferenceSemantics){if(o.fields.some(c=>Ye(c.type)))continue;let s=`__yo_new_${i}`,l=o.fields.map(c=>{let f=H(c.type,e),m=Q(c.label);return`${f} ${m}`}).join(", ");t.emitLine(`${i}* ${s}(${l}) {`),t.emitLine(` ${i}* obj = (${i}*)__yo_malloc(sizeof(${i}));`),t.emitLine(" obj->header.ref_count = 1; // Start with one reference"),t.emitLine(" obj->header.gc_flags = 0;"),t.emitLine(" obj->header.gc_mark = YO_GC_UNMARKED;"),t.emitLine(" obj->header.gc_next = NULL;"),t.emitLine(" obj->header.gc_prev = NULL;");let u=o.module.fields.find(c=>c.label===C.___dispose[0]&&c.assignedValue&&Fe(c.assignedValue));if(u&&Fe(u.assignedValue)){let c=u.assignedValue,f=((n=e.functions[c.funcId])==null?void 0:n.cName)||c.funcId;t.emitLine(` obj->header.dispose_fn = (void(*)(void*))${f};`)}else t.emitLine(" obj->header.dispose_fn = NULL;");let d=`__yo_traverse_${i}`;t.emitLine(` obj->header.traverse_fn = ${d};`),o.fields.forEach(c=>{let f=Q(c.label);t.emitLine(` obj->${f} = ${f};`)}),go(o)&&t.emitLine(" __yo_gc_register(obj);"),t.emitLine(" return obj;"),t.emitLine("}"),t.emitLine("")}}}function Xu(e){var n;let t=e.emitter;if(!(!e.closureCaptureMap||e.closureCaptureMap.size===0)){t.emitLine("// Closure dispose functions - one per closure instance (closure type + capture type)"),t.emitLine("");for(let[r]of e.closureCaptureMap){let o=`__yo_dispose_closure_${r}`;t.emitDeclarationLine(`void ${o}(void* closure_ptr);`)}for(let[r,{closureCName:o,captureType:i,captureCName:a}]of e.closureCaptureMap){let s=`__yo_dispose_closure_${r}`,l=i.module.fields.find(c=>c.label===C.___drop[0]);if(!l||!l.assignedValue||!Fe(l.assignedValue))continue;let u=l.assignedValue,d=(n=e.functions[u.funcId])==null?void 0:n.cName;d&&(t.emitLine(`void ${s}(void* closure_ptr) { // Dispose for ${o} with ${a} (Impl closure - value type)`),t.emitLine(" if (closure_ptr) {"),t.emitLine(` ${o}* closure = (${o}*)closure_ptr;`),t.emitLine(" if (closure->data) {"),t.emitLine(` ${d}(*(${a}*)closure->data); // Drop the capture struct (dereference pointer to pass by value)`),t.emitLine(" // Note: capture data is stack-allocated for Impl closures, no __yo_free needed"),t.emitLine(" }"),t.emitLine(" }"),t.emitLine("}"),t.emitLine(""))}}}function ep(e){var r,o,i;let t=e.emitter;if(e.dynImpls.size===0)return;t.emitLine(""),t.emitLine("// === Dyn Box Functions ==="),t.emitLine("// Constructor and dispose functions for dyn boxes"),t.emitLine("");let n=new Set;for(let[,a]of e.dynImpls){let l=`yo_dyn_box_${((r=e.types[a.concreteType.id])==null?void 0:r.cName)||`unknown_${a.concreteType.id}`}`;if(n.has(l))continue;n.add(l);let u=H(a.concreteType,e);t.emitLine(`${l}* __yo_new_${l}(${u} value) {`),t.emitLine(` ${l}* box = (${l}*)__yo_malloc(sizeof(${l}));`),t.emitLine(" box->header.ref_count = 1;"),t.emitLine(" box->header.gc_flags = 0;"),t.emitLine(" box->header.gc_mark = YO_GC_UNMARKED;"),t.emitLine(" box->header.gc_next = NULL;"),t.emitLine(" box->header.gc_prev = NULL;"),t.emitLine(` box->header.dispose_fn = __yo_dispose_${l};`),t.emitLine(" box->header.traverse_fn = NULL; // TODO: Set if value contains GC types"),t.emitLine(" box->value = value;"),t.emitLine(" return box;"),t.emitLine("}"),t.emitLine(""),t.emitLine(`void __yo_dispose_${l}(void* ptr) {`),t.emitLine(` ${l}* box = (${l}*)ptr;`);let c=(o=(ee(a.concreteType)&&a.concreteType.resolvedConcreteType?a.concreteType.resolvedConcreteType:a.concreteType).module)==null?void 0:o.fields.find(f=>f.label===C.___drop[0]);if(c&&c.assignedValue&&Fe(c.assignedValue)){let f=(i=e.functions[c.assignedValue.funcId])==null?void 0:i.cName;f&&t.emitLine(` ${f}(box->value);`)}t.emitLine("}"),t.emitLine("")}}function tp(e){var n,r,o,i;let t=e.emitter;if(e.dynImpls.size!==0){t.emitDeclarationLine(""),t.emitDeclarationLine("// === Dyn Wrapper Functions ==="),t.emitDeclarationLine("// Wrappers that unwrap boxed values and call impl methods"),t.emitDeclarationLine("");for(let[a,s]of e.dynImpls){let l=s.dataType,u=new Set([C.___dup[0],C.___drop[0],C.___dispose[0],C.dispose[0]]);for(let f of s.dynType.requiredModules){if(!Ut(f))continue;let m=f.isFn.callType,y=H(m.return.type,e),g=`yo_wrap_${a}_call`,h=["void* self_ptr"];for(let _=0;_<m.parameters.length;_++){let E=m.parameters[_],k=H(E.type,e);h.push(`${k} arg${_+1}`)}if(t.emitDeclarationLine(`static ${y} ${g}(${h.join(", ")}) {`),yn(l)){let _=((n=e.types[l.id])==null?void 0:n.cName)||`unknown_${l.id}`,E=Q(l.fields[0].label);t.emitDeclarationLine(` ${_}* box = (${_}*)self_ptr;`);let k=l.fields[0].type,w=ee(k)&&k.resolvedConcreteType?k.resolvedConcreteType:k,$=e.implClosureCallMap.get(w.id),b=(()=>{var M;if($)return $.functionCName;for(let[,L]of Object.entries(e.functions)){let B=L.value.closureInfo;if(((M=B==null?void 0:B.captureType)==null?void 0:M.id)===w.id)return L.cName}})(),F=[];if(b){F.push(`(void*)&box->${E}`);for(let M=0;M<m.parameters.length;M++)F.push(`arg${M+1}`);rr(m.return.type)?t.emitDeclarationLine(` ${b}(${F.join(", ")});`):t.emitDeclarationLine(` return ${b}(${F.join(", ")});`)}else{F.push(`box->${E}.data`);for(let M=0;M<m.parameters.length;M++)F.push(`arg${M+1}`);rr(m.return.type)?t.emitDeclarationLine(` box->${E}.call(${F.join(", ")});`):t.emitDeclarationLine(` return box->${E}.call(${F.join(", ")});`)}}else{t.emitDeclarationLine(" (void)self_ptr; /* Dyn(Fn): expected Box(...) data */");for(let _=0;_<m.parameters.length;_++)t.emitDeclarationLine(` (void)arg${_+1};`);rr(m.return.type)?t.emitDeclarationLine(" return;"):(t.emitDeclarationLine(` ${y} zero = (${y})0;`),t.emitDeclarationLine(" return zero;"))}t.emitDeclarationLine("}"),t.emitDeclarationLine("")}let c=s.moduleValue.type.fields;for(let f=0;f<c.length;f++){let m=c[f];if(m.label==="Self"||u.has(m.label))continue;let y=s.moduleValue.fields[f];if(!y||!Fe(y)){t.emitDeclarationLine(`/* Warning: Module field ${m.label} is not a function value */`);continue}let g=m.type;if(!ce(g)){t.emitDeclarationLine(`/* Warning: Module field ${m.label} is not a function type */`);continue}let h=y.funcId,_=(r=e.functions[h])==null?void 0:r.cName;if(!_){t.emitDeclarationLine(`/* Warning: Impl function for ${m.label} not found */`);continue}let E=`yo_wrap_${a}_${m.label}`,k=H(g.return.type,e),w=["void* self_ptr"];for(let M=1;M<g.parameters.length;M++){let L=g.parameters[M],O=H(L.type,e);w.push(`${O} arg${M}`)}t.emitDeclarationLine(`static ${k} ${E}(${w.join(", ")}) {`);let $=(o=g.parameters[0])==null?void 0:o.type,b;if(yn(l)){let M=((i=e.types[l.id])==null?void 0:i.cName)||`unknown_${l.id}`,L=Q(l.fields[0].label);t.emitDeclarationLine(` ${M}* box = (${M}*)self_ptr;`),$&&De($)?b=`&box->${L}`:b=`box->${L}`}else{let M=H(s.concreteType,e);t.emitDeclarationLine(` ${M} concrete_value = (${M})self_ptr;`),$&&De($)?b="&concrete_value":b="concrete_value"}let F=[b];for(let M=1;M<g.parameters.length;M++)F.push(`arg${M}`);rr(g.return.type)?t.emitDeclarationLine(` ${_}(${F.join(", ")});`):t.emitDeclarationLine(` return ${_}(${F.join(", ")});`),t.emitDeclarationLine("}"),t.emitDeclarationLine("")}}}}function np(e){var n,r;let t=e.emitter;if(e.dynImpls.size!==0){t.emitDeclarationLine(""),t.emitDeclarationLine("// === Dyn Static Vtables ==="),t.emitDeclarationLine("// Static vtables for dynamic dispatch"),t.emitDeclarationLine("");for(let[o,i]of e.dynImpls){let a=((n=e.types[i.dynType.id])==null?void 0:n.cName)||`yo_dyn_${i.dynType.id}`,s=((r=e.types[i.concreteType.id])==null?void 0:r.cName)||`unknown_${i.concreteType.id}`,l=`yo_vtable_${o}`,u=`${a}_vtable`;t.emitDeclarationLine(`// Vtable for impl(${s}, ${i.dynType.requiredModules.map(f=>f.typeName||"?").join(" + ")})`),t.emitDeclarationLine(`static const ${u} ${l} = {`);let d=new Set,c=new Set([C.___dup[0],C.___drop[0],C.___dispose[0],C.dispose[0]]);for(let f of i.dynType.requiredModules){if(Ut(f)){let m=`yo_wrap_${o}_call`;t.emitDeclarationLine(` .call = ${m},`),d.add("call");continue}for(let m of f.fields)if(m.label!=="Self"&&!c.has(m.label)&&!d.has(m.label)&&(d.add(m.label),ce(m.type))){let y=m.type;if(y.parameters.length>0){let g=y.parameters[0];if(g&&g.label==="self"){let h=`yo_wrap_${o}_${m.label}`;t.emitDeclarationLine(` .${Q(m.label)} = ${h},`)}}}}t.emitDeclarationLine("};"),t.emitDeclarationLine("")}}}function rp(e,t){for(let n=0;n<e.fields.length;n++){let r=e.fields[n];Fe(r)&&(Jr(r.type,t),Zr(r.body,t))}for(let n in t.functions){let r=t.functions[n];Jr(r.value.type,t),r.value.specializedType&&Jr(r.value.specializedType,t),Zr(r.value.body,t)}}function Jr(e,t){for(let n of e.parameters)It(n.type,t);for(let n of e.forallParameters)It(n.type,t);It(e.return.type,t)}function Zr(e,t){var n;if(e.$&&e.$.type&&It(e.$.type,t),e.$&&e.$.value&&Fe(e.$.value)){let r=e.$.value;t.functions[r.funcId]||r.type.parameters.map(a=>a.type).some(a=>ee(a)&&Pe(a)&&!a.resolvedConcreteType)||(t.functions[r.funcId]={value:r,cName:r.funcId},Jr(r.type,t),$n(r.body,t))}if(e.$&&e.$.deferredDropExpressions&&e.$.deferredDropExpressions.length>0)for(let r of e.$.deferredDropExpressions)Zr(r,t);if(e.$&&e.$.macroExpansion&&Zr(e.$.macroExpansion,t),e.$&&e.$.captureType&&$e(e.$.captureType)){let r=e.$.captureType;if(!t.types[r.id]){t.types[r.id]={type:r,cName:`yo_${r.id}`};for(let o of r.fields)It(o.type,t);for(let o of r.module.fields)if(o.assignedValue&&Fe(o.assignedValue)){let i=o.assignedValue;t.functions[i.funcId]||(t.functions[i.funcId]={value:i,cName:i.funcId},Jr(i.type,t),$n(i.body,t))}}}switch(e.tag){case"FuncCall":if(v(e,A.test))break;Zr(e.func,t);for(let r of e.args)Zr(r,t);break;case"Atom":(n=e.$)!=null&&n.value&&G(e.$.value)&&It(e.$.value.value,t);break}}function It(e,t){if(!t.types[e.id]){if(ee(e)&&mn(e)){if(e.resolvedConcreteType){It(e.resolvedConcreteType,t);return}let n=nn(e);n&&It(n,t);return}if(ee(e)&&Pe(e)){let n=Ht(e);n&&It(n.isFuture.outputType,t);return}if(!Ye(e)){if($e(e)||ot(e)||Ve(e)||He(e)||Ne(e)||Ee(e)||at(e)||gt(e)){let n=at(e)?H(e,t):`yo_${e.id}`;if(t.types[e.id]={type:e,cName:n},$e(e))for(let r of e.fields)It(r.type,t);if(Ve(e)){for(let r of e.variants)if(r.fields)for(let o of r.fields)It(o.type,t)}if(ot(e))for(let r of e.fields)It(r.type,t);if(Ne(e)){let r=e;for(let o of r.requiredModules)It(o,t)}if(gt(e)){let r=e;It(r.childType,t),H(r,t)}if(at(e)&&It(e.childType,t),Ee(e)){for(let r of e.fields)It(r.type,t);for(let r of e.fields)if(r.assignedValue&&Fe(r.assignedValue)){let o=r.assignedValue;t.functions[o.funcId]||(t.functions[o.funcId]={value:o,cName:Q(o.funcId)},Jr(o.type,t),$n(o.body,t))}else if(r.assignedValue&&Ke(r.assignedValue)){let o=r.assignedValue;Po(o,t)}}}else if(Oe(e)){let n=e,r=n.childType,o=n.length;if(ct(o)){It(r,t);let i=H(r,t),a=`Array_${Q(i)}_${o.value}`;t.arrayStructTypes.has(a)||t.arrayStructTypes.set(a,{childType:i,length:o.value}),t.types[e.id]={type:e,cName:a}}}else if(De(e)){if(It(e.childType,t),at(e.childType)){let r=e.childType.childType;It(r,t);let o=H(r,t),i=`Slice_${Q(o)}`;t.sliceStructTypes.has(i)||t.sliceStructTypes.set(i,{childType:o})}t.types[e.id]={type:e,cName:H(e,t)}}else Vu.has(e.tag)&&(t.types[e.id]={type:e,cName:H(e,t)});e.module&&It(e.module,t)}}}function op(e){let t=e.debugGc?"#define YO_DEBUG_GC 1":"// #define YO_DEBUG_GC 1",n=e.debugParallelism?"#define YO_DEBUG_PARALLELISM 1":"// #define YO_DEBUG_PARALLELISM 1",r=e.debugAsyncAwait?"#define YO_DEBUG_ASYNC_AWAIT 1":"// #define YO_DEBUG_ASYNC_AWAIT 1";e.emitter.emitDeclarationLine(`// Non-atomic Reference Counting with Thread-Local Cycle Collection
1504
+ // Based on QuickJS trial deletion algorithm
1505
+ // See CYCLE_COLLECTION.md for design details
1506
+
1507
+ // Debug flag for GC operations - use --debug-gc flag to enable
1508
+ ${t}
1509
+
1510
+ #ifdef YO_DEBUG_GC
1511
+ #define GC_DEBUG(...) fprintf(stderr, "GC: " __VA_ARGS__)
1512
+ #else
1513
+ #define GC_DEBUG(...)
1514
+ #endif
1515
+
1516
+ // Debug flag for parallelism operations - use --debug-parallelism flag to enable
1517
+ ${n}
1518
+
1519
+ #ifdef YO_DEBUG_PARALLELISM
1520
+ #define PARALLELISM_DEBUG(...) fprintf(stderr, __VA_ARGS__)
1521
+ #else
1522
+ #define PARALLELISM_DEBUG(...)
1523
+ #endif
1524
+
1525
+ // Debug flag for async/await operations - use --debug-async-await flag to enable
1526
+ ${r}
1527
+
1528
+ #ifdef YO_DEBUG_ASYNC_AWAIT
1529
+ #define ASYNC_DEBUG(...) fprintf(stderr, "ASYNC: " __VA_ARGS__)
1530
+ #else
1531
+ #define ASYNC_DEBUG(...)
1532
+ #endif
1533
+
1534
+ // GC mark states for QuickJS-style trial deletion cycle collection
1535
+ typedef enum {
1536
+ YO_GC_UNMARKED = 0, // Object not yet processed
1537
+ YO_GC_CANDIDATE = 1, // Object is a candidate for cycle collection
1538
+ YO_GC_TRIAL_DELETED = 2, // Object has been trial-deleted (RC decremented)
1539
+ YO_GC_LIVE = 3, // Object is reachable (RC > 0 after trial deletion)
1540
+ YO_GC_GARBAGE = 4 // Object is garbage (RC = 0 after trial deletion)
1541
+ } yo_gc_mark_t;
1542
+
1543
+ // GC flags
1544
+ #define YO_GC_TRACKED 0x01 // Object is tracked by GC (might participate in cycles)
1545
+
1546
+ // Thread synchronization for stop-the-world GC
1547
+ #ifndef YO_THREAD_SYNC_TYPE
1548
+ #if defined(_WIN32)
1549
+ // Windows: Use native Windows APIs for better compatibility
1550
+ #include <windows.h>
1551
+ #include <process.h>
1552
+ typedef CRITICAL_SECTION YO_THREAD_SYNC_TYPE;
1553
+ typedef CONDITION_VARIABLE YO_COND_TYPE;
1554
+ typedef HANDLE YO_THREAD_TYPE;
1555
+ #define YO_THREAD_SYNC_INIT {0}
1556
+ #define YO_THREAD_SYNC_LOCK(m) EnterCriticalSection(m)
1557
+ #define YO_THREAD_SYNC_UNLOCK(m) LeaveCriticalSection(m)
1558
+ #define YO_COND_INIT CONDITION_VARIABLE_INIT
1559
+ #define yo_mutex_init(m) InitializeCriticalSection(m)
1560
+ #define yo_mutex_destroy(m) DeleteCriticalSection(m)
1561
+ #define yo_mutex_lock(m) EnterCriticalSection(m)
1562
+ #define yo_mutex_unlock(m) LeaveCriticalSection(m)
1563
+ #define yo_cond_init(c) InitializeConditionVariable(c)
1564
+ #define yo_cond_destroy(c) ((void)0)
1565
+ #define yo_cond_wait(c, m) SleepConditionVariableCS(c, m, INFINITE)
1566
+ #define yo_cond_signal(c) WakeConditionVariable(c)
1567
+ #define yo_cond_broadcast(c) WakeAllConditionVariable(c)
1568
+ #define yo_thread_create(t, func, arg) (*(t) = (HANDLE)_beginthreadex(NULL, 0, (unsigned (__stdcall*)(void*))func, arg, 0, NULL), *(t) != NULL ? 0 : -1)
1569
+ #define yo_thread_join(t) (WaitForSingleObject(t, INFINITE), CloseHandle(t), 0)
1570
+ #define yo_thread_self() ((uintptr_t)GetCurrentThreadId())
1571
+ #elif defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
1572
+ // Unix-like systems: Use pthreads (more reliable, especially on macOS)
1573
+ #include <pthread.h>
1574
+ #include <unistd.h>
1575
+ #include <sys/syscall.h>
1576
+ typedef pthread_mutex_t YO_THREAD_SYNC_TYPE;
1577
+ typedef pthread_cond_t YO_COND_TYPE;
1578
+ typedef pthread_t YO_THREAD_TYPE;
1579
+ #define YO_THREAD_SYNC_INIT PTHREAD_MUTEX_INITIALIZER
1580
+ #define YO_THREAD_SYNC_LOCK(m) pthread_mutex_lock(m)
1581
+ #define YO_THREAD_SYNC_UNLOCK(m) pthread_mutex_unlock(m)
1582
+ #define YO_COND_INIT PTHREAD_COND_INITIALIZER
1583
+ #define yo_mutex_init(m) pthread_mutex_init(m, NULL)
1584
+ #define yo_mutex_destroy(m) pthread_mutex_destroy(m)
1585
+ #define yo_mutex_lock(m) pthread_mutex_lock(m)
1586
+ #define yo_mutex_unlock(m) pthread_mutex_unlock(m)
1587
+ #define yo_cond_init(c) pthread_cond_init(c, NULL)
1588
+ #define yo_cond_destroy(c) pthread_cond_destroy(c)
1589
+ #define yo_cond_wait(c, m) pthread_cond_wait(c, m)
1590
+ #define yo_cond_signal(c) pthread_cond_signal(c)
1591
+ #define yo_cond_broadcast(c) pthread_cond_broadcast(c)
1592
+ #define yo_thread_create(t, func, arg) pthread_create(t, NULL, func, arg)
1593
+ #define yo_thread_join(t) pthread_join(t, NULL)
1594
+ #define yo_thread_self() ((uintptr_t)pthread_self())
1595
+ #else
1596
+ #error "Unsupported platform for threading"
1597
+ #endif
1598
+ #endif
1599
+
1600
+ // Thread handle type for parallelism - value type, stack allocated
1601
+ // Contains the OS thread handle (pthread_t or HANDLE)
1602
+ typedef struct __yo_thread_t {
1603
+ YO_THREAD_TYPE handle;
1604
+ } __yo_thread_t;
1605
+
1606
+ // Thread callback type for spawn
1607
+ typedef void (*__yo_thread_fn)(void* closure);
1608
+
1609
+ YO_THREAD_SYNC_TYPE yo_mutex_create(void);
1610
+ YO_COND_TYPE yo_cond_create(void);
1611
+ /**
1612
+ * Create and initialize a mutex (stack-allocated value)
1613
+ * Returns an initialized mutex that can be used with yo_mutex_lock/unlock
1614
+ */
1615
+ YO_THREAD_SYNC_TYPE yo_mutex_create(void) {
1616
+ YO_THREAD_SYNC_TYPE mutex;
1617
+ yo_mutex_init(&mutex);
1618
+ return mutex;
1619
+ }
1620
+
1621
+ /**
1622
+ * Create and initialize a condition variable (stack-allocated value)
1623
+ * Returns an initialized condition variable that can be used with yo_cond_wait/signal/broadcast
1624
+ */
1625
+ YO_COND_TYPE yo_cond_create(void) {
1626
+ YO_COND_TYPE cond;
1627
+ yo_cond_init(&cond);
1628
+ return cond;
1629
+ }
1630
+
1631
+ // Forward declare yo_thread_gc_state_t for use in yo_ref_header_t
1632
+ typedef struct yo_thread_gc_state yo_thread_gc_state_t;
1633
+
1634
+ // Reference counting header - simple non-atomic RC with cycle collection support
1635
+ // Thread-local: each object is owned by the thread that created it
1636
+ typedef struct yo_ref_header_t {
1637
+ // Simple reference count (non-atomic, thread-local)
1638
+ size_t ref_count;
1639
+
1640
+ // GC cycle collection fields
1641
+ uint8_t gc_flags; // GC tracking flags
1642
+ yo_gc_mark_t gc_mark; // GC mark state for trial deletion
1643
+
1644
+ // GC object management fields (doubly-linked list for O(1) deletion)
1645
+ struct yo_ref_header_t* gc_next; // Next object in thread-local GC tracking list
1646
+ struct yo_ref_header_t* gc_prev; // Previous object in thread-local GC tracking list
1647
+ void (*dispose_fn)(void*); // Dispose function for this object type (immutable after construction)
1648
+ void (*traverse_fn)(void*, void (*visit)(void*)); // Traversal function for GC marking (immutable after construction)
1649
+ } yo_ref_header_t;
1650
+
1651
+ // Per-thread GC state - defined after yo_ref_header_t so it can use complete type
1652
+ struct yo_thread_gc_state {
1653
+ yo_ref_header_t* tracked_objects; // Head of this thread's tracked objects list
1654
+ size_t tracked_count; // Number of objects tracked by this thread
1655
+ size_t thread_id; // Thread identifier (for debugging)
1656
+ size_t alloc_count; // Allocations since last collection
1657
+ yo_thread_gc_state_t* next; // Next thread in global thread list
1658
+ yo_thread_gc_state_t* prev; // Previous thread in global thread list (for O(1) removal)
1659
+ };
1660
+
1661
+ // Generic Future type - used by async runtime for type-agnostic operations
1662
+ // All concrete Future types share this same layout for common fields
1663
+ typedef struct {
1664
+ yo_ref_header_t header;
1665
+ _Atomic(yo_future_state_t) state;
1666
+ void* state_machine;
1667
+ void (*state_machine_dispose_fn)(void*);
1668
+ void (*resume_fn)(void*);
1669
+ _Atomic(void*) continuation_fn;
1670
+ _Atomic(void*) continuation_sm;
1671
+ _Atomic(bool) detached;
1672
+ // Note: concrete Future types may have additional fields (e.g., result) after this
1673
+ } yo_future_generic_t;
1674
+
1675
+ // Generic I/O Future type for extern "Yo" functions returning Impl Future(T)
1676
+ // This has the same layout as async state machines (state, result, continuation_fn, continuation_sm)
1677
+ // so the await codegen can access ->state and ->result uniformly
1678
+ typedef struct yo_io_future_t {
1679
+ yo_ref_header_t header; // Reference counting (must be first)
1680
+ _Atomic int state; // Future state (0 = pending, -1 = completed)
1681
+ int32_t result; // The result value (bytes read/written or -errno)
1682
+ _Atomic(void (*)(void*)) continuation_fn; // Continuation function
1683
+ _Atomic(void*) continuation_sm; // Continuation state machine
1684
+ } yo_io_future_t;
1685
+
1686
+ // Forward declarations will be added here if needed
1687
+ `);for(let c in e.types){let{type:f,cName:m}=e.types[c];if(!Ye(f)){if(Wt(f))e.emitter.emitDeclarationLine(`typedef struct ${m}_struct ${m}; // Forward declaration`);else if($e(f)){if(f.isNewtype&&f.fields.length===1)continue;e.emitter.emitDeclarationLine(`typedef struct ${m}_struct ${m}; // Forward declaration`)}else if(Ve(f)){let y=rn(f),g=ir(f);!y&&!g&&e.emitter.emitDeclarationLine(`typedef struct ${m}_struct ${m}; // Forward declaration`)}}}e.emitter.emitDeclarationLine(""),qd(e),Yd(e),es(e);for(let c in e.types){let{type:f,cName:m}=e.types[c];Ye(f)||Ve(f)&&ir(f)&&ts(f,m,e)}let o=[];for(let c in e.types){let{type:f,cName:m}=e.types[c];Ye(f)||($e(f)?o.push({typeId:c,type:f,cName:m,kind:"struct"}):Ve(f)&&!ir(f)&&!rn(f)&&o.push({typeId:c,type:f,cName:m,kind:"enum"}))}let i=new Map,a=new Map(o.map(c=>[c.typeId,c])),s=new Map(o.map(c=>[c.cName,c.typeId]));for(let{typeId:c,type:f,kind:m}of o)if(i.set(c,new Set),m==="struct"&&$e(f)){for(let y of f.fields)if(Ve(y.type)){let g=H(y.type,e),h=s.get(g);h&&h!==c&&a.has(h)&&i.get(c).add(h)}else if($e(y.type)&&!y.type.isReferenceSemantics&&!y.type.isNewtype){let g=H(y.type,e),h=s.get(g);h&&h!==c&&a.has(h)&&i.get(c).add(h)}}else if(m==="enum"&&Ve(f)){for(let y of f.variants)if(y.fields){for(let g of y.fields)if(Ve(g.type)){let h=H(g.type,e),_=s.get(h);_&&_!==c&&a.has(_)&&i.get(c).add(_)}else if($e(g.type)&&g.type.isNewtype){let h=H(g.type,e),_=s.get(h);_&&_!==c&&a.has(_)&&i.get(c).add(_)}}}let l=new Map;for(let[c,f]of i)l.set(c,f.size);let u=[];for(let[c,f]of l)f===0&&u.push(c);let d=[];for(;u.length>0;){let c=u.shift(),f=a.get(c);d.push({type:f.type,cName:f.cName,kind:f.kind});for(let[m,y]of i)if(y.has(c)){let g=(l.get(m)||1)-1;l.set(m,g),g===0&&u.push(m)}}if(d.length<o.length)for(let c of o)d.find(f=>f.cName===c.cName)||d.push({type:c.type,cName:c.cName,kind:c.kind});for(let{type:c,cName:f,kind:m}of d)m==="struct"&&$e(c)?jd(c,f,e):m==="enum"&&Ve(c)&&ts(c,f,e);for(let c in e.types){let{type:f,cName:m}=e.types[c];Ye(f)||Ve(f)&&rn(f)&&ts(f,m,e)}for(let c in e.types){let{type:f,cName:m}=e.types[c];Ye(f)||(Ne(f)?Kd(f,m,e):ot(f)?Hd(f,m,e):He(f)&&Wd(f,m,e))}}function qd(e){let t=e.emitter;for(let[n,{childType:r,length:o}]of e.arrayStructTypes)t.emitDeclarationLine("typedef struct { // Array wrapper struct"),t.emitDeclarationLine(` ${r} data[${o}];`),t.emitDeclarationLine(`} ${n};`),t.emitDeclarationLine("")}function Yd(e){let t=e.emitter;for(let[n,{childType:r}]of e.sliceStructTypes)t.emitDeclarationLine("typedef struct { // Slice wrapper struct"),t.emitDeclarationLine(` ${r}* data;`),t.emitDeclarationLine(" size_t length;"),t.emitDeclarationLine(`} ${n};`),t.emitDeclarationLine("")}function es(e){var n;let t=e.emitter;if(e.isoTypes){for(let[r,o]of e.isoTypes){let{childTypeCName:i,structGenerated:a}=o;a||(t.emitDeclarationLine("typedef struct { // Iso wrapper struct"),t.emitDeclarationLine(" yo_ref_header_t header; // Atomic RC header"),t.emitDeclarationLine(" _Atomic bool extracted; // Extraction flag"),t.emitDeclarationLine(` ${i} value; // Inner value`),t.emitDeclarationLine(`} ${r}_struct;`),t.emitDeclarationLine(`typedef ${r}_struct* ${r};`),t.emitDeclarationLine(""),t.emitDeclarationLine(`${r} __yo_create_iso_${r}(${i} value);`),t.emitDeclarationLine(""),o.structGenerated=!0)}for(let[r,o]of e.isoTypes){let{optionTypeCName:i,extractGenerated:a}=o;a||!i||t.emitDeclarationLine(`${i} __yo_iso_extract_${r}(${r} iso);`)}for(let[r,o]of e.isoTypes){let{structGenerated:i}=o;i&&(t.emitDeclarationLine(`void __yo_iso_dispose_${r}(${r} iso);`),t.emitDeclarationLine(`static void __yo_dispose_iso_${r}(void* ptr);`))}for(let[r,o]of e.isoTypes){let{childTypeCName:i,createGenerated:a}=o;a||(t.emitLine(`
1688
+ ${r} __yo_create_iso_${r}(${i} value) {
1689
+ ${r} iso = (${r})__yo_malloc(sizeof(${r}_struct));
1690
+ iso->header.ref_count = 1;
1691
+ iso->header.gc_mark = YO_GC_UNMARKED;
1692
+ iso->header.gc_flags = 0;
1693
+ iso->header.dispose_fn = __yo_dispose_iso_${r};
1694
+ atomic_store(&iso->extracted, false);
1695
+ iso->value = value;
1696
+ return iso;
1697
+ }`),o.createGenerated=!0)}for(let[r,o]of e.isoTypes){let{isoType:i,createGenerated:a,disposeGenerated:s}=o;if(!a||!i||s)continue;let l=i.childType,u,d=(n=l.module)==null?void 0:n.fields.find(c=>c.label===C.___drop[0]);if(d!=null&&d.assignedValue&&e.functions){let c=d.assignedValue.funcId,f=e.functions[c];f!=null&&f.cName?u=`${f.cName}(iso->value);`:u="__yo_decr_rc((void*)iso->value);"}else u="__yo_decr_rc((void*)iso->value);";t.emitLine(`
1698
+ void __yo_iso_dispose_${r}(${r} iso) {
1699
+ // Only drop inner value if it wasn't extracted
1700
+ if (!atomic_load(&iso->extracted)) {
1701
+ ${u}
1702
+ }
1703
+ }`),t.emitLine(`
1704
+ static void __yo_dispose_iso_${r}(void* ptr) {
1705
+ __yo_iso_dispose_${r}((${r})ptr);
1706
+ }`),o.disposeGenerated=!0}for(let[r,o]of e.isoTypes){let{optionTypeCName:i,isoType:a,extractGenerated:s}=o;if(s||!i||!a)continue;let l=Object.values(e.types).find(u=>u.cName===i);if(l&&Ve(l.type)){let u=l.type,d=u.variants.find(f=>f.name==="Some"),c=u.variants.find(f=>f.name==="None");if(d&&c){let f=`${i.toUpperCase()}_SOME`,m=`${i.toUpperCase()}_NONE`;t.emitLine(`
1707
+ ${i} __yo_iso_extract_${r}(${r} iso) {
1708
+ // Atomically check and set extracted flag
1709
+ bool was_extracted = atomic_exchange(&iso->extracted, true);
1710
+ ${i} result;
1711
+ if (was_extracted) {
1712
+ // Already extracted, return None
1713
+ result.tag = ${m};
1714
+ } else {
1715
+ // First extraction, return Some(value)
1716
+ result.tag = ${f};
1717
+ result.data.Some.value = iso->value;
1718
+ }
1719
+ return result;
1720
+ }`)}o.extractGenerated=!0}}}}function jd(e,t,n){let r=n.emitter;if(e.isNewtype&&e.fields.length===1){let o=e.fields[0].type,i=H(o,n);r.emitDeclarationLine(`typedef ${i} ${t}; // ${e.typeName} : ${x(e)} (newtype - zero-cost abstraction)`),r.emitDeclarationLine("");return}if(e.isReferenceSemantics){r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${x(e)} (reference counted)`),r.emitDeclarationLine(" yo_ref_header_t header; // Reference count header");for(let o of e.fields){let i=H(o.type,n),a=Q(o.label);r.emitDeclarationLine(` ${i} ${a};`)}r.emitDeclarationLine("};")}else{r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${x(e)}`);for(let o of e.fields){let i=H(o.type,n),a=Q(o.label);r.emitDeclarationLine(` ${i} ${a};`)}r.emitDeclarationLine("};")}r.emitDeclarationLine("")}function Wd(e,t,n){let r=n.emitter;r.emitDeclarationLine(`typedef struct { // ${e.typeName} : ${x(e)}`);for(let o of e.fields){let i=H(o.type,n),a=o.label.match(/^\d+$/)?`_${o.label}`:Q(o.label);r.emitDeclarationLine(` ${i} ${a};`)}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("")}function Hd(e,t,n){let r=n.emitter;r.emitDeclarationLine(`typedef union { // ${e.typeName} : ${x(e)}`);for(let o of e.fields){let i=H(o.type,n),a=Q(o.label);r.emitDeclarationLine(` ${i} ${a};`)}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("")}function ts(e,t,n){let r=n.emitter,o=rn(e);if(o){let l=H(o,n);r.emitDeclarationLine(`typedef ${l} ${t}; // ${e.typeName} : ${x(e)} (optimized as nullable pointer)`),r.emitDeclarationLine("");return}if(ir(e)){r.emitDeclarationLine(`typedef enum { // ${e.typeName} : ${x(e)} (optimized as simple enum)`);for(let l=0;l<e.variants.length;l++){let u=e.variants[l];if(u){let d=Tn(e,u.name,n),c=l<e.variants.length-1?",":"";r.emitDeclarationLine(` ${d} = ${l}${c}`)}}r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("");return}let a=`${t}_tag`;r.emitDeclarationLine("typedef enum {");for(let l=0;l<e.variants.length;l++){let u=e.variants[l];if(u){let d=Tn(e,u.name,n),c=l<e.variants.length-1?",":"";r.emitDeclarationLine(` ${d} = ${l}${c}`)}}r.emitDeclarationLine(`} ${a};`),r.emitDeclarationLine("");let s=`${t}_data`;r.emitDeclarationLine("typedef union {");for(let l of e.variants)if(l.fields&&l.fields.length>0){let u=l.fields.filter(d=>!Be(d.type));if(u.length>0){let d=l.name;r.emitDeclarationLine(" struct {");for(let c of u){let f=H(c.type,n),m=Q(c.label);r.emitDeclarationLine(` ${f} ${m};`)}r.emitDeclarationLine(` } ${d};`)}}r.emitDeclarationLine(`} ${s};`),r.emitDeclarationLine(""),r.emitDeclarationLine(`struct ${t}_struct { // ${e.typeName} : ${x(e)}`),r.emitDeclarationLine(` ${a} tag;`),r.emitDeclarationLine(` ${s} data;`),r.emitDeclarationLine("};"),r.emitDeclarationLine("")}function Kd(e,t,n){let r=n.emitter,o=`${t}_vtable`;r.emitDeclarationLine(`typedef struct { // Vtable for ${x(e)}`);let i=new Set,a=new Set([C.___dup[0],C.___drop[0],C.___dispose[0],C.dispose[0]]);for(let s of e.requiredModules){if(Ut(s)){let l=s.isFn.callType,u=H(l.return.type,n),d=l.parameters.map(c=>{let f=H(c.type,n),m=Q(c.label);return`${f} ${m}`}).join(", ");r.emitDeclarationLine(` ${u} (*call)(void* self${d?", "+d:""}); // Call function pointer`),i.add("call");continue}for(let l of s.fields){if(l.label==="Self"||a.has(l.label)||i.has(l.label))continue;i.add(l.label);let u=Q(l.label);if(ce(l.type)){let d=l.type;if(d.parameters.length>0){let c=d.parameters[0];if(c&&c.label==="self"){let f=H(d.return.type,n),m=d.parameters.map((y,g)=>{if(g===0)return"void* self";{let h=H(y.type,n),_=Q(y.label);return`${h} ${_}`}}).join(", ");r.emitDeclarationLine(` ${f} (*${u})(${m}); // Method pointer for ${l.label}`)}}}else{let d=H(l.type,n);r.emitDeclarationLine(` ${d} ${u}; // Non-function member ${l.label}`)}}}r.emitDeclarationLine(`} ${o};`),r.emitDeclarationLine(""),r.emitDeclarationLine(`typedef struct { // ${e.typeName||"Dyn"} : ${x(e)} (value type - fat pointer)`),r.emitDeclarationLine(" void* data; // Pointer to boxed data (with yo_ref_header_t)"),r.emitDeclarationLine(` const ${o}* vtable; // Pointer to static vtable (no allocation needed)`),r.emitDeclarationLine(`} ${t};`),r.emitDeclarationLine("")}function ip(e){var r;let t=e.emitter;if(e.dynImpls.size===0)return;t.emitDeclarationLine(""),t.emitDeclarationLine("// === Dyn Box Types ==="),t.emitDeclarationLine("// These structs wrap concrete types for dynamic dispatch"),t.emitDeclarationLine("");let n=new Set;for(let[,o]of e.dynImpls){let a=`yo_dyn_box_${((r=e.types[o.concreteType.id])==null?void 0:r.cName)||`unknown_${o.concreteType.id}`}`;if(n.has(a))continue;n.add(a);let s=H(o.concreteType,e);t.emitDeclarationLine("typedef struct {"),t.emitDeclarationLine(" yo_ref_header_t header;"),t.emitDeclarationLine(` ${s} value;`),t.emitDeclarationLine(`} ${a};`),t.emitDeclarationLine(""),t.emitDeclarationLine(`${a}* __yo_new_${a}(${s} value);`),t.emitDeclarationLine(`void __yo_dispose_${a}(void* ptr);`),t.emitDeclarationLine("")}}function kr(e){var t,n,r;if(e.$&&e.$.value&&Ue(e.$.value)&&!(ce(e.$.type)&&e.$.type.isExtern)){if(!Be(e.$.type))return!0}if(V(e)){if(kr(e.func))return!0;for(let o of e.args)if(!((t=o.$)!=null&&t.type&&Be(o.$.type))&&kr(o))return!0}if(e.$&&e.$.macroExpansion){if(e.$.type&&Be(e.$.type))return!1;if(kr(e.$.macroExpansion))return!0}if((n=e.$)!=null&&n.deferredDupExpressions){for(let o of e.$.deferredDupExpressions)if(kr(o))return!0}if((r=e.$)!=null&&r.deferredDropExpressions){for(let o of e.$.deferredDropExpressions)if(kr(o))return!0}return!1}function Po(e,t){for(let n=0;n<e.fields.length;n++){let r=e.fields[n],o=e.type.fields[n];Fe(r)&&(o.label==="main"?t.functions[r.funcId]={value:r,cName:"__yo_user_main"}:t.functions[r.funcId]={value:r,cName:Q(r.funcId)},$n(r.body,t))}}function $n(e,t){var o,i,a,s,l,u,d,c,f;if(V(e)&&v(e,A.test))return;if(e.$&&e.$.macroExpansion&&$n(e.$.macroExpansion,t),e.$&&e.$.closureFunctionValue){let m=e.$.closureFunctionValue;t.functions[m.funcId]||(t.functions[m.funcId]={value:m,cName:Q(m.funcId)},$n(m.body,t))}if(V(e)&&e.$&&e.$.dynCallModuleValues&&e.$.dynCallModuleValues.length>0){let m=e.$.type,y=e.args[0];if(Ne(m)&&y&&((o=y.$)!=null&&o.type)){let g=y.$.type,h=e.$.dynCallModuleValues[0];if(h&&($t(g)||yn(g))){let _=yn(g)?g.fields[0].type:g,E=`${_.id}_${m.id}`;t.dynImpls.set(E,{dynType:m,concreteType:_,dataType:g,moduleValue:h})}}}if(V(e)){let m=(i=e.func.$)==null?void 0:i.type,y=(a=e.func.$)==null?void 0:a.value;if(e.func.token.value==="?=")return;if(ce(m))if(Fe(y)){if(Nn(y.type)&&!y.specializedType||y.specializedType&&Nn(y.specializedType))return;if(!t.functions[y.funcId]){if(kr(y.body)||y.type.parameters.map(_=>_.type).some(_=>ee(_)&&Pe(_)&&!_.resolvedConcreteType))return;t.functions[y.funcId]={value:y,cName:Q(y.funcId)},$n(y.body,t)}}else m.isExtern==="c"&&(t.externFunctions[m.id]={type:m,cName:j(e.func)?e.func.token.value:m.id});$n(e.func,t);for(let g of e.args)$n(g,t)}let n=(s=e.$)==null?void 0:s.type,r=(l=e.$)==null?void 0:l.value;if(ce(n)&&Fe(r)){if(Nn(r.type)&&!r.specializedFunctionCaches||t.functions[r.funcId])return;if(kr(r.body))return;t.functions[r.funcId]={value:r,cName:Q(r.funcId)},$n(r.body,t)}if(G((u=e.$)==null?void 0:u.value)&&It(e.$.value.value,t),(d=e.$)!=null&&d.deferredDupExpressions)for(let m of e.$.deferredDupExpressions)$n(m,t);if((c=e.$)!=null&&c.deferredDropExpressions)for(let m of e.$.deferredDropExpressions)$n(m,t);if((f=e.$)!=null&&f.dynCallModuleValues)for(let m of e.$.dynCallModuleValues)Po(m,t)}function ap(e){var n;let t=new Map;for(let[,r]of e.dynImpls){let o=((n=e.types[r.dynType.id])==null?void 0:n.cName)||`yo_dyn_${r.dynType.id}`,a=`${(()=>{var d,c;let s=(d=e.types[r.concreteType.id])==null?void 0:d.cName;if(s)return s;let l=nn(r.concreteType);return(l?(c=e.types[l.id])==null?void 0:c.cName:void 0)||`unknown_${r.concreteType.id}`})()}_${o}`;t.set(a,r)}e.dynImpls=t}var da=class{constructor(){this.emitter=new ei}compileModule(t,n,r={}){this.emitter.emitDeclarationLine(`
1721
+ // Module ${t}`),this.emitter.emitDeclarationLine(`// Module ID: ${ni(t)}`);let o={functions:{},externFunctions:{},types:{},arrayStructTypes:new Map,sliceStructTypes:new Map,spawnedFunctionSignatures:new Map,spawnedClosureSignatures:new Map,closureCaptureMap:new Map,implClosureCallMap:new Map,dynImpls:new Map,currentFunctionName:"",emitter:this.emitter,cIncludes:new Set(["<stdbool.h>","<stdint.h>","<stddef.h>","<stdarg.h>","<stdatomic.h>","<stdlib.h>","<stdio.h>","<string.h>","<fcntl.h>","<unistd.h>","<sys/stat.h>"]),debugGc:r.debugGc??!1,debugParallelism:r.debugParallelism??!1,debugAsyncAwait:r.debugAsyncAwait??!1,deferredAsyncBlocks:[],allocator:r.allocator??"mimalloc"};Po(n,o),rp(n,o),ql(o),Yl(o),this.emitter.emitDeclarationLine(`
1722
+ // Future state enum - shared by all Future types
1723
+ typedef enum {
1724
+ YO_FUTURE_RUNNING = 0, // Task is in progress (queued or executing)
1725
+ YO_FUTURE_COMPLETED = 1, // Task completed successfully
1726
+ YO_FUTURE_ERROR = 2 // Task failed with error
1727
+ } yo_future_state_t;
1728
+ `),op(o),ap(o),ip(o),Pu(o),ju(o),Wu(o),ep(o),tp(o),np(o),Hu(o),Gu(o),Ku(o),Xu(o),Zu(o),Ju(o)}print(){return this.emitter.print()}};function sp({expr:e,env:t,context:n}){Ce(e,C.alignof,1);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:"Failed to evaluate expression."});t=o.$.env;let i;o.$.value&&G(o.$.value)?i=o.$.value.value:i=o.$.type;let a=Xn(i),s;return a===null?s=re(_t()):s=Dt("Usize",a),e.$={env:t,type:_t(),value:s,pathCollection:[]},e}function lp({expr:e,env:t,context:n}){let r=v(e,A.op_and)?"and":"or",o=e.args;if(o.length===0){let u=it(r==="and");return e.$={env:t,type:Qe(),value:u,pathCollection:[],isAccessingProperty:!1},e}let i=t,a,s=!1,l=!1;for(let u=0;u<o.length;u++){let d=o[u],c=S({expr:d,env:i,context:{...n}});if(!c.$||!vn(c.$.type))throw p({token:d.token,errorMessage:`Expected bool type for "${r}" argument, got:
1729
+ ${T(d)}`});i=c.$.env;let f=c.$.value;if(Ue(f)){s=!0;continue}if(et(f)){let m=f.value;if(r==="and"){if(!m){a=it(!1);break}!s&&!l&&(a=it(!0))}else{if(m){a=it(!0);break}!s&&!l&&(a=it(!1))}}else l=!0}return et(a)||(l||s)&&(l?a=void 0:a=re(Qe())),e.$={env:i,type:Qe(),value:a,pathCollection:[],isAccessingProperty:!1},e}function Xr({functionCalleeExpr:e,functionType:t,functionValue:n,argValues:r,callerEnv:o,calleeEnv:i,context:a}){let s=[...r.forallArgs.map(_=>_.value),...r.args.map(_=>_.value)];if(s.some(_=>!_))throw p({token:(e==null?void 0:e.token)??ke,errorMessage:"Failed to call the function for compile-time. Some arguments are not compile-time evaluated correctly."});let l=s,u=n.funcId,c=n.calledComptFunctionCaches.find(_=>_.argValues.length===l.length&&_.argValues.every((E,k)=>{let w=l[k];return G(E)&&G(w)?ee(E.value)&&!ee(w.value)?!1:W({type:E.value,env:_.env},{type:w.value,env:o},!0):Lt({value:E,env:_.env},{value:w,env:o})}));if(c)return{callerEnv:o,calleeEnv:i,value:c.value};let f=n.body,m={funcId:u,argValues:l,value:re(t.return.type,t.return.label,{functionValue:n,argValues:l}),env:i,body:yt(f)};n.calledComptFunctionCaches.push(m);let y=n.calledComptFunctionCaches.length-1,g=Et({expr:m.body,env:i,context:{...a,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:t,value:n,evaluationEnv:i},capturedVariables:a.capturedVariables?a.capturedVariables:void 0,isExecuting:!a.isValidatingFunctionDefinition,functionReturnImplConcreteType:[]},variablesToAdd:[]});if(!g.$)throw p({token:n.body.token,errorMessage:"Function body is not evaluated correctly"});let h=g.$.value;if(!h)throw p({token:n.body.token,errorMessage:"Function body is not evaluated correctly. Expected to return a compile-time known value."});if(i=g.$.env,G(h)){let _=h.value;!_.typeName&&n.funcName&&(_.typeName=n.funcName+`(${l.map(E=>je(E)).join(", ")})`),($e(_)||Ve(_)||ot(_)||Ee(_))&&(_.functionValue||(_.functionValue=n))}return n.calledComptFunctionCaches[y]={funcId:u,argValues:l,value:h,env:g.$.env,body:g},{value:h,callerEnv:o,calleeEnv:i}}function Qd(e,t,n){let o=me(t,"Option").find(m=>m.value&&Fe(m.value)&&ce(m.type));if(!o||!o.value||!Fe(o.value))throw new Error("Cannot find Option type constructor in environment");let i=o.value,a=i.type,s=a.parameters[0],l=ae(e),u=ut(a.env),{env:d}=we({env:u,variable:{name:s.label,token:ke,type:l.type,isCompileTimeOnly:!0,initializedAtToken:ke,consumedAtToken:void 0,value:l,isOwningTheGcValue:!1}}),{value:c,callerEnv:f}=Xr({functionCalleeExpr:void 0,functionType:a,functionValue:i,argValues:{forallArgs:[],args:[{value:l,parameterType:s.type,argType:lt()}],variadicArgs:[]},callerEnv:t,calleeEnv:d,context:n});if(!G(c))throw new Error("Option type constructor did not return a type value");return{optionType:c.value,env:f}}function up({expr:e,env:t,context:n}){Ce(e,[C.__yo_decr_rc[0]],1);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.__yo_decr_rc[0]}":
1730
+ ${T(r)}`});return t=o.$.env,e.$={env:t,type:J.type,value:J,pathCollection:[]},e}function pp({expr:e,env:t,context:n}){Ce(e,[C.__yo_incr_rc[0]]);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.__yo_incr_rc[0]}":
1731
+ ${T(r)}`});return t=o.$.env,e.$={env:t,type:J.type,value:J,pathCollection:[]},e}function cp({expr:e,env:t,context:n}){Ce(e,[C.__yo_incr_rc_atomic[0]]);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.__yo_incr_rc_atomic[0]}":
1732
+ ${T(r)}`});return t=o.$.env,e.$={env:t,type:J.type,value:J,pathCollection:[]},e}function fp({expr:e,env:t,context:n}){Ce(e,[C.__yo_decr_rc_atomic[0]]);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.__yo_decr_rc_atomic[0]}":
1733
+ ${T(r)}`});return t=o.$.env,e.$={env:t,type:J.type,value:J,pathCollection:[]},e}function dp({expr:e,env:t,context:n}){Ce(e,[C.__yo_rc_own[0]]);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.__yo_incr_rc[0]}":
1734
+ ${T(r)}`});return t=o.$.env,e.$={env:t,type:o.$.type,value:void 0,pathCollection:[]},e}function mp({expr:e,env:t,context:n}){Ce(e,[C.__yo_dyn_drop[0]]);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.__yo_dyn_drop[0]}":
1735
+ ${T(r)}`});return t=o.$.env,e.$={env:t,type:J.type,value:J,pathCollection:[]},e}function yp({expr:e,env:t,context:n}){Ce(e,[C.__yo_dyn_dup[0]]);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.__yo_dyn_dup[0]}":
1736
+ ${T(r)}`});return t=o.$.env,e.$={env:t,type:J.type,value:J,pathCollection:[]},e}function _p({expr:e,env:t,context:n}){Ce(e,[C.__yo_sometype_drop[0]]);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.__yo_sometype_drop[0]}":
1737
+ ${T(r)}`});return t=o.$.env,e.$={env:t,type:J.type,value:J,pathCollection:[]},e}function gp({expr:e,env:t,context:n}){Ce(e,[C.__yo_sometype_dup[0]]);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.__yo_sometype_dup[0]}":
1738
+ ${T(r)}`});return t=o.$.env,e.$={env:t,type:J.type,value:J,pathCollection:[]},e}function hp({expr:e,env:t,context:n}){Ce(e,[C.__yo_iso_extract[0]],1);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.__yo_iso_extract[0]}":
1739
+ ${T(r)}`});t=o.$.env;let i=o.$.type;if(!gt(i))throw p({token:r.token,errorMessage:`${C.__yo_iso_extract[0]} expects an Iso type, but got: ${x(i)}`});let a=i.childType,{optionType:s,env:l}=Qd(a,t,n);return t=l,e.$={env:t,type:s,value:void 0,pathCollection:o.$.pathCollection||[]},ze(e,!0),e}function vp({expr:e,env:t,context:n}){Ce(e,[C.__yo_iso_dispose[0]]);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.__yo_iso_dispose[0]}":
1740
+ ${T(r)}`});return t=o.$.env,e.$={env:t,type:J.type,value:J,pathCollection:[]},e}function Tp(e){var r;let t=[],n=new Map;if(Hn(e,t,n),(r=e.$)!=null&&r.deferredDropExpressions)for(let o of e.$.deferredDropExpressions)Hn(o,t,n);return t.length===0&&n.clear(),{awaitPoints:t,capturedVariables:Array.from(n.values()),hasAwaits:t.length>0}}function Hn(e,t,n,r){var o;switch(e.tag){case"Atom":if(e.$&&e.token.type==="identifier"){let i=e.token.value,a=e.$.type,s=me(e.$.env,i);if(s.length>0){let l=s[s.length-1];if(l&&!n.has(l.id)&&!l.isCompileTimeOnly)if(l.isOwningTheSameGcValueAs){let u=l.isOwningTheSameGcValueAs;if(!n.has(u.id)){let d={id:u.id,name:u.name,type:u.type,kind:"local",isOwningTheSameGcValueAs:void 0};n.set(u.id,d)}}else n.set(l.id,{id:l.id,name:i,type:a,kind:"local",isOwningTheSameGcValueAs:void 0})}}break;case"FuncCall":{if(v(e,A.while)){let i=t.length;Hn(e.func,t,n,e);for(let s of e.args)Hn(s,t,n,e);let a=t.length;if(a>i)for(let s=i;s<a;s++)t[s].isInsideWhile=!0;break}if(v(e,A.cond)){let i=t.length;Hn(e.func,t,n,e);for(let s of e.args)Hn(s,t,n,e);let a=t.length;if(a>i){for(let s=i;s<a;s++)t[s].isInsideCond=!0;if(a>i+1){let s=i;for(let l=i+1;l<a;l++)t[l].index=s;t.splice(i+1,a-i-1)}}break}if(v(e,A.match)){let i=t.length;Hn(e.func,t,n,e);for(let s of e.args)Hn(s,t,n,e);let a=t.length;if(a>i){for(let s=i;s<a;s++)t[s].isInsideCond=!0;if(a>i+1){let s=i;for(let l=i+1;l<a;l++)t[l].index=s;t.splice(i+1,a-i-1)}}break}if(Zd(e)){let i=e.args[0];if(!i)break;let a=(o=i.$)==null?void 0:o.type;if(a&&Pe(a)){let s=Ht(a);if(!s)break;let l=s.isFuture.outputType,u;if(i.tag==="Atom"&&i.token.type==="identifier"&&i.$){let c=i.token.value,f=me(i.$.env,c);if(f.length>0){let m=f[f.length-1];m.isOwningTheSameGcValueAs?u=m.isOwningTheSameGcValueAs.id:u=m.id}}let d;if(r&&r.tag==="FuncCall"&&v(r,":=")){let c=r.args[0];if(c&&c.tag==="Atom"&&c.token.type==="identifier"){let f=c.token.value;if(c.$){let m=me(c.$.env,f);m.length>0&&(d=m[m.length-1].id)}}}t.push({index:t.length,expr:e,resultType:l,futureType:s,targetVariableId:d,futureVariableId:u})}}Hn(e.func,t,n,e);for(let i of e.args)Hn(i,t,n,e);break}}}function Zd(e){return v(e,C.await)}function $p({capturedVariables:e,env:t,closureToken:n}){let r=t;for(let[o,i]of e.entries())if(i.frameLevel<t.frames.length&&i.usageType==="own"){let a=me(r,o);if(a.length>0){let s=a[a.length-1];s.consumedAtToken||(r=Xe(r,s,{...s,consumedAtToken:n}))}}return r}function eo(e){let t=[];for(let[n]of e.entries())t.push([n]);return t}function to({expectedCaptureType:e,capturedVariablesWithValues:t,env:n,closureToken:r,context:o}){let i=e,a;if(i===void 0)if(t&&t.size>0){let s=gr(n),l=Array.from(t.entries()).map(([d,c])=>({label:d,type:c.type,isCompileTimeOnly:!1,assignedValue:void 0,exprs:{expr:{tag:"Atom",token:c.token},labelExpr:void 0,typeExpr:void 0,defaultValueExpr:void 0}}));s.fields=l,i=s,n=yr({structType:s,env:n,context:{...o}});let u=Array.from(t.values()).map(d=>d.value);u.every(d=>d!==void 0)?a=bn(s,u):a=void 0}else{let s=gr(n);s.fields=[],n=yr({structType:s,env:n,context:{...o}}),i=s,a=bn(s,[])}else if(t&&t.size>0){let s=i,l=Array.from(t.keys()),u=s.fields.map(c=>c.label);for(let c of l)if(!u.includes(c))throw p({token:r,errorMessage:`Captured variable "${c}" does not exist in expected capture struct "${x(s)}"`});for(let c of s.fields)if(!l.includes(c.label))throw p({token:r,errorMessage:`Expected capture struct field "${c.label}" is not captured by this closure`});for(let[c,f]of t.entries()){let m=s.fields.find(y=>y.label===c);if(m&&!W({type:m.type,env:n},{type:f.type,env:n}))throw p({token:f.token,errorMessage:`Captured variable "${c}" has type "${x(f.type)}" but expected struct field has type "${x(m.type)}"`})}let d=Array.from(t.values()).map(c=>c.value);d.every(c=>c!==void 0)?a=bn(i,d):a=void 0}else a=bn(i,[]);return{captureType:i,captureValue:a}}function no({capturedVariables:e,env:t}){let n=new Map;for(let[r,o]of e.entries())if(o.frameLevel<t.frames.length){let a=t.frames[o.frameLevel].variables.find(s=>s.name===r);a&&!a.isCompileTimeOnly&&n.set(r,{...o,value:a.value,type:a.type})}return n}function ro({capturedVariablesWithValues:e,env:t,context:n}){let r=[],o=t;if(e&&e.size>0){for(let[i,a]of e.entries())if(qe(a.type)){let s=Gt(`${C.___dup[0]}(${i})`),l=S({expr:s,env:o,context:{...n}});r.push(l),l.$&&l.$.env&&(o=l.$.env)}}return{capturedVariableDupExpressions:r.length>0?r:void 0,env:o}}function Ep({expr:e,env:t,context:n}){if(e.args.length!==1)throw p({token:e.token,errorMessage:`async expects exactly 1 argument, got ${e.args.length}.`});if(!n.isEvaluatingFunctionBodyOrAsyncBlock)throw p({token:e.token,errorMessage:"async block must be evaluated within a function or another async block."});let r=e.args[0],o,i;if(n.expectedType){let E=n.expectedType.type,k=Ht(E);k&&(o=k.isFuture.outputType,i=k)}let a=new Map,s=t,l=S({expr:r,env:t,context:{...n,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"async-block",evaluationEnv:s},isEvaluatingFunctionType:void 0,isEvaluatingLoopBody:void 0,capturedVariables:a,expectedType:o?{type:o,env:t}:void 0}});if(!l.$)throw p({token:r.token,errorMessage:"Failed to evaluate async block body."});t=l.$.env;let u=vt({type:l.$.type,expectedType:void 0,expr:l,env:t}),d;i&&W({type:u,env:t},{type:i.isFuture.outputType,env:n.expectedType.env},!0)?d=i:d=cu(u,t);let c=a.size>0?no({capturedVariables:a,env:s}):void 0,{captureType:f,captureValue:m}=to({expectedCaptureType:void 0,capturedVariablesWithValues:c,env:t,closureToken:e.token,context:{...n}}),{capturedVariableDupExpressions:y,env:g}=ro({capturedVariablesWithValues:c,env:t,context:{...n}});t=g;let h=Tp(l);if(f){let E=new Set(f.fields.map(k=>k.label));h.capturedVariables=h.capturedVariables.filter(k=>!E.has(k.name))}let _=wn(lt(),"",void 0,[d],void 0);return _.resolvedConcreteType=f,e.$={env:t,type:_,value:void 0,pathCollection:[],captureType:f,deferredDupExpressions:y&&y.length>0?y:void 0,awaitAnalysis:h},ze(e,!0),e}function Cp({expr:e,env:t,context:n}){var s;if(n.isValidatingFunctionDefinition||!n.isExecuting)return e.$={env:t,type:J.type,value:J,pathCollection:[]},e;let r=e.args[0],o=e.args[1],i=S({expr:r,env:t,context:{...n}});if(!i.$||!et(i.$.value))throw p({token:r.token,errorMessage:`Expected bool value for "compt_assert", got:
1741
+ ${T(r)}`,isAssertionError:!0});if(i.$.value.value)return e.$={env:t,type:J.type,value:J,pathCollection:[]},e;if(o){let l=S({expr:o,env:t,context:{...n}});if((s=l.$)!=null&&s.value)throw p({token:e.token,errorMessage:We(l.$.value)?l.$.value.value:je(l.$.value),isAssertionError:!0})}throw p({token:e.token,errorMessage:`Assertion failed for "compt_assert":
1742
+ ${T(r)}`,isAssertionError:!0})}function kp({expr:e,env:t,context:n}){if(v(e,C.__yo_compt_boolean_not)||v(e,C.__yo_compt_boolean_to_string)){let r=S({expr:e.args[0],env:t,context:{...n}});if(!r.$||!vn(r.$.type)||!r.$.value)throw p({token:r.token,errorMessage:`Expected bool type for "${e.func.token.value}" argument, got:
1743
+ ${T(r)}`});t=r.$.env;let o;if(v(e,C.__yo_compt_boolean_not))et(r.$.value)?o=it(!r.$.value.value):o=re(Qe());else if(v(e,C.__yo_compt_boolean_to_string))et(r.$.value)?o=un(r.$.value.value.toString()):o=re(Ot());else throw p({token:e.token,errorMessage:`Unexpected function call for "${e.func.token.value}", expected "__yo_compt_boolean_not" or "__yo_compt_boolean_to_string" function`});e.$={env:t,type:o.type,value:o,pathCollection:[]}}else{let r=S({expr:e.args[0],env:t,context:{...n}});if(!r.$||!vn(r.$.type)||!r.$.value)throw p({token:r.token,errorMessage:`Expected bool type for "${e.func.token.value}" first argument, got:
1744
+ ${T(r)}`});t=r.$.env;let o=S({expr:e.args[1],env:t,context:{...n}});if(!o.$||!vn(o.$.type)||!o.$.value)throw p({token:o.token,errorMessage:`Expected bool type for "${e.func.token.value}" second argument, got:
1745
+ ${T(o)}`});t=o.$.env;let i=r.$.value,a=o.$.value,s;if(v(e,C.__yo_compt_boolean_and))et(i)&&et(a)?s=it(i.value&&a.value):s=re(Qe());else if(v(e,C.__yo_compt_boolean_or))et(i)&&et(a)?s=it(i.value||a.value):s=re(Qe());else if(v(e,C.__yo_compt_boolean_eq))et(i)&&et(a)?s=it(i.value===a.value):s=re(Qe());else if(v(e,C.__yo_compt_boolean_neq))et(i)&&et(a)?s=it(i.value!==a.value):s=re(Qe());else throw p({token:e.token,errorMessage:`Unexpected function call for compt_boolean operations: ${T(e)}`});e.$={env:t,type:s.type,value:s,pathCollection:[]}}return e}function bp({expr:e,env:t,context:n}){var i;let r=e.args[0],o=e.args[1];try{S({expr:r,env:t,context:{...n}})}catch{return e.$={env:t,type:J.type,value:J,pathCollection:[]},e}if(o){let a=S({expr:o,env:t,context:{...n}});if((i=a.$)!=null&&i.value)throw p({token:e.token,errorMessage:We(a.$.value)?a.$.value.value:je(a.$.value)})}throw p({token:e.token,errorMessage:`Expected compile error, but the expression was evaluated successfully:
1746
+ ${T(r)}`})}function Fp({expr:e,env:t,context:n}){Ce(e,C.__yo_compt_list_car,1);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
1747
+ ${T(r)}`});if(!mt(o.$.type))throw p({token:r.token,errorMessage:`Expected ComptList type for "${e.func.token.value}" argument, got:
1748
+ ${T(r)}`});let i=o.$.type,a=o.$.value;if(!a)throw p({token:r.token,errorMessage:`Expected ComptList value for "${e.func.token.value}" argument, got:
1749
+ ${T(r)}`});if(e.$={env:o.$.env,type:i.childType,value:re(i.childType),pathCollection:[],isAccessingProperty:!1},Bn(a)){let s=a.elements;if(s.length>0)e.$.value=s[0];else throw p({token:r.token,errorMessage:`Unexpected empty ComptList for "${e.func.token.value}" argument`})}return e}function wp({expr:e,env:t,context:n}){Ce(e,C.__yo_compt_list_cdr,1);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
1750
+ ${T(r)}`});if(!mt(o.$.type))throw p({token:r.token,errorMessage:`Expected ComptList type for "${e.func.token.value}" argument, got:
1751
+ ${T(r)}`});let i=o.$.type,a=o.$.value;if(!a)throw p({token:r.token,errorMessage:`Expected ComptList value for "${e.func.token.value}" argument, got:
1752
+ ${T(r)}`});if(e.$={env:o.$.env,type:i,value:re(i),pathCollection:[],isAccessingProperty:!1},Bn(a)){let s=a.elements;if(s.length>0)e.$.value=kn(i.childType,[...s.slice(1)]);else throw p({token:r.token,errorMessage:`Unexpected empty ComptList for "${e.func.token.value}" argument`})}return e}function Vp({expr:e,env:t,context:n}){Ce(e,C.__yo_compt_list_cons,2);let r=S({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw p({token:r.token,errorMessage:`Failed to evaluate the first argument expression for "${e.func.token.value}":
1753
+ ${T(r)}`});t=r.$.env;let o=r.$.value;if(!o)throw p({token:r.token,errorMessage:`Expected Expr value for "${e.func.token.value}" first argument, got:
1754
+ ${T(r)}`});let i=S({expr:e.args[1],env:t,context:{...n}});if(!i.$)throw p({token:i.token,errorMessage:`Failed to evaluate the second argument expression for "${e.func.token.value}":
1755
+ ${T(i)}`});if(t=i.$.env,!mt(i.$.type))throw p({token:i.token,errorMessage:`Expected ComptList type for "${e.func.token.value}" second argument, got:
1756
+ ${T(i)}`});let a=i.$.value;if(!a)throw p({token:i.token,errorMessage:`Expected ComptList value for "${e.func.token.value}" second argument, got:
1757
+ ${T(i)}`});let s=i.$.type,l=r.$.type;if(!W({type:l,env:t},{type:s.childType,env:t}))throw p({token:r.token,errorMessage:`Type mismatch: cannot cons value of type "${x(l)}" to ComptList of base type "${x(s.childType)}" in "${e.func.token.value}"`});if(e.$={env:t,type:s,value:re(s),pathCollection:[],isAccessingProperty:!1},Bn(a)){let u=[o,...a.elements];e.$.value=kn(s.childType,u)}return e}function xp({expr:e,env:t,context:n}){Ce(e,C.__yo_compt_list_append,2);let r=S({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw p({token:r.token,errorMessage:`Failed to evaluate the first argument expression for "${e.func.token.value}":
1758
+ ${T(r)}`});if(t=r.$.env,!mt(r.$.type))throw p({token:r.token,errorMessage:`Expected ComptList type for "${e.func.token.value}" first argument, got:
1759
+ ${T(r)}`});let o=r.$.value;if(!o)throw p({token:r.token,errorMessage:`Expected Expr value for "${e.func.token.value}" first argument, got:
1760
+ ${T(r)}`});let i=S({expr:e.args[1],env:t,context:{...n}});if(!i.$)throw p({token:i.token,errorMessage:`Failed to evaluate the second argument expression for "${e.func.token.value}":
1761
+ ${T(i)}`});if(t=i.$.env,!mt(i.$.type))throw p({token:i.token,errorMessage:`Expected ComptList type for "${e.func.token.value}" second argument, got:
1762
+ ${T(i)}`});let a=i.$.value;if(!a)throw p({token:i.token,errorMessage:`Expected ComptList value for "${e.func.token.value}" second argument, got:
1763
+ ${T(i)}`});let s=r.$.type,l=i.$.type;if(!W({type:s,env:t},{type:l,env:t}))throw p({token:e.token,errorMessage:`Type mismatch: cannot append ComptList of base type "${x(l.childType)}" to ComptList of base type "${x(s.childType)}" in "${e.func.token.value}"`});if(e.$={env:t,type:s,value:re(s),pathCollection:[],isAccessingProperty:!1},Bn(o)&&Bn(a)){let u=[...o.elements,...a.elements];e.$.value=kn(s.childType,u)}return e}function Mp({expr:e,env:t,context:n}){Ce(e,C.__yo_compt_list_length,1);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
1764
+ ${T(r)}`});if(!mt(o.$.type))throw p({token:r.token,errorMessage:`Expected ComptList type for "${e.func.token.value}" argument, got:
1765
+ ${T(r)}`});let i=o.$.value;if(!i)throw p({token:r.token,errorMessage:`Expected ComptList value for "${e.func.token.value}" argument, got:
1766
+ ${T(r)}`});if(e.$={env:o.$.env,type:_t(),value:re(_t()),pathCollection:[],isAccessingProperty:!1},Bn(i)){let a=i.elements.length,s=Dt("Usize",a);e.$.value=s}return e}function Sp({expr:e,env:t,context:n}){var s;Ce(e,C.__yo_compt_list_element_type,1);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
1767
+ ${T(r)}`});if(!G((s=o.$)==null?void 0:s.value))throw p({token:r.token,errorMessage:`Expected ComptList type for "${e.func.token.value}" argument, got:
1768
+ ${T(r)}`});let i=o.$.value.value;if(!mt(i))throw p({token:r.token,errorMessage:`Expected ComptList type for "${e.func.token.value}" argument, got:
1769
+ ${x(i)}`});let a=ae(i.childType);return e.$={env:o.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function Lp({expr:e,env:t,context:n}){if(e.args.length===0)throw p({token:e.token,errorMessage:'Expected at least 1 argument for "compt_print", got 0'});let r=[];for(let o of e.args){let i=S({expr:o,env:t,context:{...n}});if(!i.$)throw p({token:o.token,errorMessage:`Failed to evaluate argument for "compt_print": ${T(o)}`});t=i.$.env,We(i.$.value)?r.push(i.$.value.value):r.push(je(i.$.value))}return!n.isValidatingFunctionDefinition&&n.isExecuting&&console.log(...r),e.$={env:t,type:J.type,value:J,pathCollection:[]},e}function Ap({expr:e,env:t,context:n}){if(v(e,C.__yo_compt_string_length)||v(e,C.__yo_compt_string_to_upper)||v(e,C.__yo_compt_string_to_lower)){let r=S({expr:e.args[0],env:t,context:{...n}});if(!r.$||!Pt(r.$.type)||!r.$.value)throw p({token:r.token,errorMessage:`Expected compt_string type for "${e.func.token.value}" argument, got:
1770
+ ${T(r)}`});t=r.$.env;let o;if(v(e,C.__yo_compt_string_length))We(r.$.value)?o=Pn(r.$.value.value.length):o=re(ur());else if(v(e,C.__yo_compt_string_to_upper))We(r.$.value)?o=un(r.$.value.value.toUpperCase()):o=re(Ot());else if(v(e,C.__yo_compt_string_to_lower))We(r.$.value)?o=un(r.$.value.value.toLowerCase()):o=re(Ot());else throw p({token:e.token,errorMessage:`Unexpected function call for "${e.func.token.value}", expected string unary function`});e.$={env:t,type:o.type,value:o,pathCollection:[]}}else if(v(e,C.__yo_compt_string_slice)){if(e.args.length<2||e.args.length>3)throw p({token:e.token,errorMessage:`"${e.func.token.value}" expects 2 or 3 arguments (string, start, end?), got ${e.args.length}`});let r=S({expr:e.args[0],env:t,context:{...n}});if(!r.$||!Pt(r.$.type)||!r.$.value)throw p({token:r.token,errorMessage:`Expected compt_string type for "${e.func.token.value}" string argument, got:
1771
+ ${T(r)}`});t=r.$.env;let o=S({expr:e.args[1],env:t,context:{...n}});if(!o.$||!kt(o.$.type)||!o.$.value)throw p({token:o.token,errorMessage:`Expected compt_int type for "${e.func.token.value}" start argument, got:
1772
+ ${T(o)}`});t=o.$.env;let i;if(e.args.length===3){if(i=S({expr:e.args[2],env:t,context:{...n}}),!i.$||!kt(i.$.type)||!i.$.value)throw p({token:i.token,errorMessage:`Expected compt_int type for "${e.func.token.value}" end argument, got:
1773
+ ${T(i)}`});t=i.$.env}let a;if(We(r.$.value)&&Zn(o.$.value)){let s=r.$.value.value,l=o.$.value.value,u=s.length;i&&i.$&&i.$.value&&Zn(i.$.value)&&(u=i.$.value.value),a=un(s.slice(l,u))}else a=re(Ot());e.$={env:t,type:a.type,value:a,pathCollection:[]}}else{let r=S({expr:e.args[0],env:t,context:{...n}});if(!r.$||!Pt(r.$.type)||!r.$.value)throw p({token:r.token,errorMessage:`Expected compt_string type for "${e.func.token.value}" first argument, got:
1774
+ ${T(r)}`});t=r.$.env;let o=S({expr:e.args[1],env:t,context:{...n}});if(!o.$||!Pt(o.$.type)||!o.$.value)throw p({token:o.token,errorMessage:`Expected compt_string type for "${e.func.token.value}" second argument, got:
1775
+ ${T(o)}`});t=o.$.env;let i=r.$.value,a=o.$.value,s;if(v(e,C.__yo_compt_string_concat))We(i)&&We(a)?s=un(i.value+a.value):s=re(Ot());else if(v(e,C.__yo_compt_string_eq))We(i)&&We(a)?s=it(i.value===a.value):s=re(Qe());else if(v(e,C.__yo_compt_string_neq))We(i)&&We(a)?s=it(i.value!==a.value):s=re(Qe());else if(v(e,C.__yo_compt_string_lt))We(i)&&We(a)?s=it(i.value<a.value):s=re(Qe());else if(v(e,C.__yo_compt_string_lte))We(i)&&We(a)?s=it(i.value<=a.value):s=re(Qe());else if(v(e,C.__yo_compt_string_gt))We(i)&&We(a)?s=it(i.value>a.value):s=re(Qe());else if(v(e,C.__yo_compt_string_gte))We(i)&&We(a)?s=it(i.value>=a.value):s=re(Qe());else throw p({token:e.token,errorMessage:`Unexpected function call for compt_string operations: ${T(e)}`});e.$={env:t,type:s.type,value:s,pathCollection:[]}}return e}function Ip({expr:e,env:t,context:n}){Ce(e,C.consume,1);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:"Failed to evaluate expression."});return t=o.$.env,t=Mn(o,t),e.$={env:t,type:J.type,value:J,pathCollection:[]},e}function Np(e){if(e.result.kind!=="function")throw new Error("Expected function call result");return e.result.result}function zo(e){if(e.result.kind!=="type")throw new Error("Expected type call result");return e.result.result}function Dp(e){if(e.result.kind!=="module-type")throw new Error("Expected module type call result");return e.result.result}function Op(e){if(e.result.kind!=="array")throw new Error("Expected array call result");return e.result.result}function oo(e,t,n,r,o){var d;if(!o.isEvaluatingFunctionBodyOrAsyncBlock)return;let i;if(o.isEvaluatingFunctionBodyOrAsyncBlock&&(i=o.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv),!i||t>=i.frames.length)return;let a,s=-1;for(let c=0;c<i.frames.length;c++){let f=(d=i.frames[c])==null?void 0:d.variables.find(m=>m.name===e);if(f){a=f,s=c;break}}if(!a||s<0||a.isCompileTimeOnly)return;o.capturedVariables||(o.capturedVariables=new Map);let l=o.capturedVariables.get(e),u=l&&(l.usageType==="own"||l.usageType==="write"&&n==="read")?l.usageType:n;o.capturedVariables.set(e,{frameLevel:s,usageType:u,token:r})}function Up({expr:e,arrayType:t,fillValueArg:n,env:r,context:o}){var f,m,y;let i=S({expr:n,env:r,context:{...o,expectedType:{type:t.childType,env:r}}});(f=i.$)!=null&&f.env&&(r=i.$.env);let a=(m=i.$)==null?void 0:m.type,s=(y=i.$)==null?void 0:y.value;if(!a)throw p({token:n.token,errorMessage:"Failed to evaluate fill value"});if(!W({type:t.childType,env:r},{type:a,env:r}))throw p({token:n.token,errorMessage:`Fill value type ${x(a)} is not compatible with array element type ${x(t.childType)}`});let l=t.length;if(Ue(l)){let g=re(t);return e.$={env:r,type:t,value:g,pathCollection:[]},ze(e,!0),{expr:e,env:r}}let u;if(ct(l)){if(u=l.value,!Number.isInteger(u)||u<0)throw p({token:n.token,errorMessage:`Array length must be a non-negative integer, got ${u}`})}else throw p({token:n.token,errorMessage:`Array length must be a compile-time known integer, got ${je(l)}`});let d=[];if(!s||Ue(s)){let g=re(t);return e.$={env:r,type:t,value:g,pathCollection:[]},ze(e,!0),{expr:e,env:r}}for(let g=0;g<u;g++)d.push(s);let c=zn(t,d);return e.$={env:r,type:t,value:c,pathCollection:[]},ze(e,!0),{expr:e,env:r}}function Bp(e,t){var n;return G((n=e.$)==null?void 0:n.value)&&Oe(e.$.value.value)&&j(t)&&t.token.value==="fill"}function Dn({expr:e,tupleFieldIndex:t,env:n,context:r,forType:o}){var E,k,w,$,b,F;let i,a=e,s,l,u,d,c,f,m=!1,y;if(V(e)&&v(e,"?=",2)&&(u=e.args[1],a=e.args[0]),V(a)&&(v(a,"=",2)||v(a,"::",2))){if(v(a,"::",2)){if(m=!0,s=a.args[0],!nt(s))throw p({token:s.token,errorMessage:`Expected identifier for element label, got ${T(s)}`});i=s.token.value}c=a.args[1],a=a.args[0]}if(u&&c)throw p({token:e.token,errorMessage:"Cannot have both default value and required value for element."});if(V(a)&&v(a,":",2)){if(s=a.args[0],l=a.args[1],V(s)&&v(s,A.compt,1)){if(m)throw p({token:s.token,errorMessage:'Cannot combine the use of "compt" with ::'});m=!0,s=s.args[0]}if(!j(s)||!nt(s))throw p({token:s.token,errorMessage:`Expected identifier for element label, got ${T(s)}`});i=s.token.value}else if(V(a)&&v(a,A.compt,1)){if(m)throw p({token:a.token,errorMessage:'Cannot combine the use of "compt" with "::"'});if(m=!0,s=a.args[0],!j(s)||!nt(s))throw p({token:s.token,errorMessage:`Expected identifier for element label, got ${T(s)}`});i=s.token.value}else!u&&!c&&(l=a);let g=(E=r.expectedType)==null?void 0:E.type,h;if(g&&(He(g)||$e(g)||Ee(g))){let M=g.fields[t];if(!M)throw p({token:e.token,errorMessage:`Failed to get the field at index ${t}`});h=M.type}if(l){let M=S({expr:l,env:n,context:{...r,expectedType:h?{type:h,env:n}:void 0}});(k=M.$)!=null&&k.env&&(n=(w=M.$)==null?void 0:w.env);let L=($=M.$)==null?void 0:$.value;if(!G(L))throw p({token:l.token,errorMessage:`(1) Expected type for element, got ${T(l)}`});y=L.value}if(c){if(!m)throw p({token:c.token,errorMessage:`Assigned value expression is only allowed for compile-time only.
1776
+ Please consider adding "compt" modifier to the field label.`});let M=y?{type:y,env:n}:h?{type:h,env:n}:void 0,L=S({expr:c,env:n,context:{...r,expectedType:M}});if(!L.$)throw p({token:c.token,errorMessage:`Failed to evaluate required value expression: ${T(c)}`});if(n=(b=L.$)==null?void 0:b.env,f=L.$.value,!f)throw p({token:c.token,errorMessage:`Expected compile-time known value for required value, got ${T(c)}`});let O=L.$.type;if(M){if(!W({type:M.type,env:n},{type:O,env:n}))throw p({token:c.token,errorMessage:`Assigned value type mismatch:
1777
+ Expected type: ${x(M.type)}
1778
+ Given type: ${x(O)}`});y=M.type}else y=O}if(u){let M=y?{type:y,env:n}:h?{type:h,env:n}:void 0,L=S({expr:u,env:n,context:{...r,expectedType:M}});if(!L.$)throw p({token:u.token,errorMessage:`Failed to evaluate default value expression: ${T(u)}`});if(n=L.$.env,d=(F=L.$)==null?void 0:F.value,!d)throw p({token:u.token,errorMessage:`Expected compile-time known value for default value, got ${T(u)}`});let O=L.$.type;if(M){if(!W({type:M.type,env:n},{type:O,env:n}))throw p({token:u.token,errorMessage:`Default value type mismatch:
1779
+ Expected type: ${x(M.type)}
1780
+ Given type: ${x(O)}`});y=M.type}else y=O}if(!y)throw p({token:e.token,errorMessage:"Failed to infer the element type"});if(hn(y)&&!m)throw p({token:(s==null?void 0:s.token)??e.token,errorMessage:'Expected "compt" modifier for compile-time known value binding.'});if(m&&er(y))throw p({token:(s==null?void 0:s.token)??e.token,errorMessage:`Unexpected "compt" modifier for ${x(y)} which can only be used at runtime.`});if(o!=="tuple"&&!s)throw p({token:e.token,errorMessage:`Expected label for ${o} field, got ${T(a)}`});s&&(s.$={env:n,type:y,value:f??d??void 0,pathCollection:[]}),e!==l&&(e.$={env:n,value:J,type:J.type,pathCollection:[]}),tr(y,e.token);let _={label:i??`${t}`,type:y,exprs:{expr:e,labelExpr:s,typeExpr:l,defaultValueExpr:u,assignedValueExpr:c},isCompileTimeOnly:m,defaultValue:d,assignedValue:f};return _.isCompileTimeOnly&&_.assignedValue&&(G(_.assignedValue)&&!_.assignedValue.value.typeName&&_.assignedValue.value!==r.SelfType?_.assignedValue.value.typeName=_.label:Fe(_.assignedValue)&&!_.assignedValue.funcName?(_.assignedValue.funcName=_.label,_.assignedValue.funcId+=`_${_.label}`):Ke(_.assignedValue)&&!_.assignedValue.type.typeName&&_.assignedValue.type!==r.SelfType&&(_.assignedValue.type.typeName=_.label)),{field:_,env:n}}function Pp({expr:e,env:t,context:n}){var m,y;let r=e.func,o=e.args;if(!j(r)||r.token.value!=="_")throw p({token:r.token,errorMessage:`Expected "_" for anonymous struct, got:
1781
+ ${T(r)}`});let i=gr(t),a=i.fields,s=i.module.fields,l=[],u=[];for(let g=0;g<o.length;g++){let h=o[g],_,E=h,k;if(V(h)&&(v(h,"::",2)||v(h,"=",2)||v(h,"?=",2))){let{field:w,env:$}=Dn({expr:h,env:t,tupleFieldIndex:g,context:{...n,SelfType:i},forType:"struct"});if(s.find(F=>F.label===w.label))throw p({token:h.token,errorMessage:`Duplicate label "${w.label}" in anonymous struct`});if(!w.isCompileTimeOnly)throw p({token:h.token,errorMessage:`Expected compile-time only field for anonymous struct, got:
1782
+ ${T(h)}`});if(w.defaultValue)throw p({token:((m=w.exprs.defaultValueExpr)==null?void 0:m.token)??w.exprs.expr.token,errorMessage:"Anonymous struct module field cannot have default value for its fields."});if(!w.assignedValue)throw p({token:w.exprs.assignedValueExpr?w.exprs.assignedValueExpr.token:w.exprs.expr.token,errorMessage:"Anonymous struct module field must have assigned value."});s.push(w),t=$;continue}if(V(h)&&v(h,":",2)){if(_=h.args[0],E=h.args[1],!nt(_))throw p({token:_.token,errorMessage:`Expected identifier for anonymous struct field label, got:
1783
+ ${T(_)}`});k=_.token.value}{let w=S({expr:E,env:t,context:{...n,SelfType:i}});if(xt(w,n),!w.$)throw p({token:E.token,errorMessage:`Failed to evaluate the anonymous struct field expression: ${T(E)}`});t=w.$.env;let $=w.$.type,b={exprs:{expr:E,labelExpr:void 0,typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:E},type:$,label:k??`$field_${ht()}`,isCompileTimeOnly:!1};a.push(b),u.push(w),w.$.value?l.push((y=w.$)==null?void 0:y.value):l.push(void 0),_&&(_.$=w.$)}}t=yr({structType:i,env:t,context:n});let d;d=l.some(g=>!g)?void 0:bn(i,l);let c=ae(i);r.$={env:t,type:c.type,value:c,pathCollection:[]};let{env:f}=we({env:t,variable:{name:i.id,type:c.type,value:c,initializedAtToken:e.token,token:e.token,isCompileTimeOnly:!0,consumedAtToken:void 0,isOwningTheGcValue:!1}});return t=f,e.$={env:t,type:i,value:d,pathCollection:[],runtimeArgExprsInOrder:u},ze(e,!0),e}function zp({expr:e,arrayType:t,arrayValue:n,argExprs:r,callerEnv:o,context:i}){if(r.length!==1)throw p({token:e.func.token,errorMessage:`Expect 1 argument for accessing array element, got ${r.length}.`});if(j(e.args[0])&&en(e.args[0],":")||V(e.args[0])&&v(e.args[0],":")){if(j(e.args[0]))return{value:void 0,type:_r(t.childType),callerEnv:o};{let a=e.args[0].args[0],s=e.args[0].args[1],l=S({expr:a,env:o,context:{...i}});if(!l.$)throw p({token:a.token,errorMessage:`Failed to evaluate start expression:
1784
+ ${T(a)}`});o=l.$.env;let u=l.$.type;if(!W({type:_t(),env:o},{type:u,env:o}))throw p({token:a.token,errorMessage:`Expected usize for array start index, got:
1785
+ ${x(u)}`});let d=S({expr:s,env:o,context:{...i}});if(!d.$)throw p({token:s.token,errorMessage:`Failed to evaluate end expression:
1786
+ ${T(s)}`});o=d.$.env;let c=d.$.type;if(!W({type:_t(),env:o},{type:c,env:o}))throw p({token:s.token,errorMessage:`Expected usize for array end index, got:
1787
+ ${x(c)}`});return{value:void 0,type:_r(t.childType),callerEnv:o}}}else{let a=r[0],s=S({expr:a,env:o,context:{...i}});if(!s.$)throw p({token:a.token,errorMessage:`Failed to evaluate argument expression:
1788
+ ${T(a)}`});o=s.$.env;let l=s.$.type;if(!W({type:_t(),env:o},{type:l,env:o}))throw p({token:a.token,errorMessage:`Expected usize for array index, got:
1789
+ ${x(l)}`});let u=t.childType;if(n)if(s.$.value)if(ct(s.$.value)){let d=s.$.value.value;if(d<0||d>=n.elements.length)throw p({token:a.token,errorMessage:`Array index out of bounds: ${d}. Expected index in range [0, ${n.elements.length-1}].`});return{value:n.elements[d],index:d,type:u,callerEnv:o}}else return{value:re(u),type:u,callerEnv:o};else throw p({token:a.token,errorMessage:"Expected compile-time known value for array index, got runtime value."});else return{value:void 0,type:u,callerEnv:o}}}function Gp({expr:e,arrayType:t,argExprs:n,callerEnv:r,context:o}){let i=t.length,a=t,s;if(ct(i)){if(s=Number(i.value),n.length!==s)throw p({token:e.func.token,errorMessage:`Array constructor expects ${s} elements, got ${n.length}.`})}else if(Ue(i)){s=n.length;let f=Pn(s);a=Gn(t.childType,f)}else throw p({token:e.func.token,errorMessage:`Array length must be a known number value or unknown (_), got ${i}.`});let l=[],u=r,d=a.childType;for(let f=0;f<n.length;f++){let m=n[f],y=S({expr:m,env:u,context:{...o,expectedType:{type:d,env:u}}});if(!y.$)throw p({token:m.token,errorMessage:`Failed to evaluate array element at index ${f}.`});if(xt(y,o),u=y.$.env,f===0&&Oe(d)&&Ue(d.length)&&Oe(y.$.type)&&(d=y.$.type,a=Gn(d,a.length)),!W({type:d,env:u},{type:y.$.type,env:u}))throw p({token:m.token,errorMessage:`Array element at index ${f} has incompatible type:
1790
+ - Expected: ${x(d)}
1791
+ - Given : ${x(y.$.type)}`});y.$.value!==void 0?l.push(y.$.value):l.push(re(d))}let c=zn(a,l);return e.$={env:u,value:c,type:a,pathCollection:[]},e}function Go(e,t,n,r){let o={kind:"function-body",type:t,value:n,evaluationEnv:r},i=e.capturedVariables?e.capturedVariables:new Map;return{evaluationContext:{...e,isExecuting:!1,isValidatingFunctionDefinition:!0,isEvaluatingFunctionBodyOrAsyncBlock:o,isEvaluatingFunctionType:!1,capturedVariables:i,expectedType:{type:t.return.type,env:r},functionReturnImplConcreteType:[]},functionBodyContext:o}}function Rp({expr:e,functionType:t,callerEnv:n,context:r}){var k,w,$;let o=e.func,i=e.args;if(i.length!==1)throw p({token:o.token,errorMessage:`Failed to implement the function. Expected 1 argument for the function body, got ${i.length}.`});let a=i[0],s=!!r.capturedVariables,l=(k=r.expectedType)==null?void 0:k.type,u=l&&ce(l)&&l.parameters.length===t.parameters.length&&l.parameters.some((b,F)=>b.label!==t.parameters[F].label),d=ut(s?n:wu(n));if(u&&l&&ce(l)){for(let b of t.forallParameters){let{env:F}=we({env:d,variable:{name:b.label,type:b.type,isCompileTimeOnly:!0,value:re(b.type,b.label),token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheGcValue:!1},skipCheckingFunctionOverloading:!0});d=F}for(let b=0;b<t.parameters.length;b++){let F=t.parameters[b],M=l.parameters[b],L=F.label,O=M.label,{env:B}=we({env:d,variable:{name:L,type:F.type,isCompileTimeOnly:F.isCompileTimeOnly,value:F.isCompileTimeOnly?re(F.type,O):void 0,token:ke,initializedAtToken:ke,consumedAtToken:void 0,isOwningTheGcValue:F.isOwningTheGcValue,parameterAlias:L!==O?O:void 0},skipCheckingFunctionOverloading:!0});d=B}}else d=ut(d,t.parametersFrame);let c=d.frames[d.frames.length-1],f=u&&l&&ce(l)?{...t,parameters:l.parameters.map((b,F)=>({...t.parameters[F],label:b.label})),parametersFrame:c,env:t.env}:{...t,parametersFrame:c,env:t.env},m={tag:"Function",type:f,body:a,frameLevel:d.frames.length-1,funcName:void 0,funcId:`fn_${ht()}`,calledComptFunctionCaches:[],specializedFunctionCaches:[]},{evaluationContext:y}=Go(r,f,m,d),g=Et({expr:a,env:d,context:y,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(!g.$)throw p({token:a.token,errorMessage:"Failed to evaluate the function body."});d=g.$.env;let h=y.capturedVariables,_=g.$.type;if(!W({type:f.return.type,env:d},{type:_,env:d}))throw p({token:((w=f.return.expr)==null?void 0:w.token)??ke,errorMessage:`Incompatible function return type for:
1792
+ - Expected: ${x(f.return.type)}
1793
+ - Given : ${x(_)}`});if(f.return.isCompileTimeOnly&&!g.$.value)throw p({token:(($=f.return.expr)==null?void 0:$.token)??ke,errorMessage:"Expected to return a compile-time value, but got runtime value."});d=Ct(d,!0);let E=n;return s&&h&&h.size>0&&(E=$p({capturedVariables:h,env:n,closureToken:e.token})),e.$={env:E,value:m,type:f,pathCollection:h&&h.size>0?eo(h):[]},e}function qp({expr:e,fnModuleType:t,wrapperType:n,callerEnv:r,context:o}){var w,$;let i=e.func,a=e.args;if(a.length!==1)throw p({token:i.token,errorMessage:`Fn module type expects exactly 1 argument (the closure body), got ${a.length}`});let s=a[0],l=ut(r,t.isFn.callType.parametersFrame),u={tag:"Function",type:t.isFn.callType,body:s,frameLevel:l.frames.length-1,funcName:void 0,funcId:`closure_${ht()}`,calledComptFunctionCaches:[],specializedFunctionCaches:[]},{evaluationContext:d}=Go(o,t.isFn.callType,u,l),c=Et({expr:s,env:l,context:d,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(!c.$)throw p({token:s.token,errorMessage:"Failed to evaluate the closure body."});l=c.$.env;let f=d.capturedVariables,m=c.$.type;if(!W({type:t.isFn.callType.return.type,env:l},{type:m,env:l}))throw p({token:((w=t.isFn.callType.return.expr)==null?void 0:w.token)??ke,errorMessage:`Incompatible closure return type:
1794
+ - Expected: ${x(t.isFn.callType.return.type)}
1795
+ - Given : ${x(m)}`});if(t.isFn.callType.return.isCompileTimeOnly&&!c.$.value)throw p({token:(($=t.isFn.callType.return.expr)==null?void 0:$.token)??ke,errorMessage:"Expected to return a compile-time value, but got runtime value."});l=Ct(l,!0);let y=f&&f.size>0?no({capturedVariables:f,env:r}):void 0,g=r,{capturedVariableDupExpressions:h,env:_}=ro({capturedVariablesWithValues:y,env:r,context:o});g=_;let{captureType:E}=to({expectedCaptureType:void 0,capturedVariablesWithValues:y,env:g,closureToken:e.token,context:{...o}});u.closureInfo={closureType:t,captureType:E};let k;return ee(n)?(n.resolvedConcreteType=E,k={...n,resolvedConcreteType:E}):Ne(n)?k=n:k=t,e.$={env:g,value:void 0,type:k,pathCollection:f&&f.size>0?eo(f):[],deferredDupExpressions:h&&h.length>0?h:void 0,captureType:E,closureFunctionValue:u},Ne(n)&&ze(e,!0),e}function Yp({expr:e,comptListType:t,argExprs:n,callerEnv:r,context:o}){let i=[],a=r,s=t.childType;for(let u=0;u<n.length;u++){let d=n[u],c=S({expr:d,env:a,context:{...o,expectedType:{type:s,env:a}}});if(!c.$)throw p({token:d.token,errorMessage:`Failed to evaluate ComptList element at index ${u}.`});if(xt(c,o),a=c.$.env,!W({type:s,env:a},{type:c.$.type,env:a}))throw p({token:d.token,errorMessage:`ComptList element at index ${u} has incompatible type:
1796
+ - Expected: ${x(s)}
1797
+ - Given : ${x(c.$.type)}`});if(c.$.value!==void 0)i.push(c.$.value);else throw p({token:d.token,errorMessage:`Expected compile-time known value for ComptList element at index ${u}, got ${x(c.$.type)}`})}let l=kn(t.childType,i);return e.$={env:a,value:l,type:t,pathCollection:[]},e}function jp({expr:e,env:t,context:n,isParameterComptByDefault:r}){var w,$,b;let o,i=r,a=!1,s=!1,l,u,d,c,f,m=e,y,g,h,_;if(V(m)&&v(m,"=")){let F=m.args[0];if(F&&V(F)&&v(F,":",2))l=F,u=m.args[1],_=u,m=l;else throw p({token:m.func.token,errorMessage:'Please use "?=" for default parameter value, not "=".'})}if(V(m)&&v(m,":=",2)&&(l=m.args[0],u=m.args[1],_=u,m=l),V(m)&&v(m,"?=",2)&&(u=m.args[1],l=m.args[0],h=u,m=l),V(m)&&v(m,":",2)?(u=m.args[1],l=m.args[0],y=u):_?l=m:h?(y=void 0,l=m):y=m,l){if(V(l)&&v(l,A.compt)){if(r)throw p({token:l.token,errorMessage:'"forall"/"using" parameters are "compt" by default. Not needed to use "compt" modifier.'});if(i=!0,l.args.length!==1)throw p({token:l.token,errorMessage:`Expected one argument for "compt" , got ${l.args.length}`});l=l.args[0]}if(V(l)&&v(l,"own")){if(s=!0,l.args.length!==1)throw p({token:l.token,errorMessage:`Expected one argument for "own", got ${l.args.length}`});l=l.args[0]}if(V(l)&&v(l,A.quote)){if(a=!0,l.args.length!==1)throw p({token:l.token,errorMessage:`Expected one argument for "quote" (or ":"), got ${l.args.length}`});if(i)throw p({token:l.token,errorMessage:'Cannot use "compt" with "quote" (or ":"). "quote" parameters means compile-time only, so "compt" is redundant.'});i=!0,l=l.args[0]}if(!j(l)||!nt(l))throw p({token:l.token,errorMessage:`Expected identifier for parameter label, got ${T(l)}`});o=l.token.value,g=l}if(!o)throw p({token:e.token,errorMessage:`Expected a label for function parameter, got ${T(e)}`});if(o==="Self")throw p({token:(g==null?void 0:g.token)??e.token,errorMessage:"Not allowed to use 'Self' as the label."});{if(_){let F=S({expr:_,env:t,context:{...n}});if(!F.$)throw p({token:_.token,errorMessage:`Failed to evaluate assigned value expression: ${T(_)}`});t=F.$.env;let M=F.$.value;if(!G(M))throw p({token:_.token,errorMessage:`Expected type value for := assignment, got ${je(M)}`});if(d=lt(),f=M,!i)throw p({token:_.token,errorMessage:`Assigned value (:= or =) is only allowed for compile-time parameters. Use "compt(${o})" or put this in "forall(...)".`})}if(y){let F=S({expr:y,env:t,context:{...n}});if(!F.$)throw p({token:y.token,errorMessage:`(3) Failed to evaluate type expression: ${T(y)}`});t=F.$.env;let M=F.$.value;if(G(M))d=M.value;else throw p({token:y.token,errorMessage:`Expected type for function parameter, got ${je(M)}`})}if(h){let F=S({expr:h,env:t,context:{...n}});if((w=F.$)!=null&&w.env&&(t=($=F.$)==null?void 0:$.env),c=(b=F.$)==null?void 0:b.value,!c)throw p({token:h.token,errorMessage:`Expected a compile-time known value for default parameter, got ${T(h)}`});if(!d)d=c.type;else if(!W({type:d,env:t},{type:c.type,env:t}))throw p({token:h.token,errorMessage:`Incompatible default value type:
1798
+ - Expected: ${x(d)}
1799
+ - Got : ${x(c.type)}`})}if(!d)throw p({token:e.token,errorMessage:"Expected type for function parameter}"});if(hn(d)&&!i&&(d=vt({type:d,expectedType:void 0,expr:void 0,env:t}),hn(d)))throw p({token:(l==null?void 0:l.token)??e.token,errorMessage:`Expected a "compt" for parameter to be compile-time only. Given type:
1800
+ ${x(d)}`});if(i&&er(d))throw p({token:(l==null?void 0:l.token)??e.token,errorMessage:`Unexpected "compt" for parameter of type ${x(d)} which can only be used at runtime.`})}if(a&&!dt(d)&&!Er(d))throw p({token:(l==null?void 0:l.token)??e.token,errorMessage:`Expected Expr or ExprList type for "quote" (or ":") parameter, got ${x(d)}`});let E=i?re(d,o):void 0;if(n.isUnsafeFunctionType||tr(d,(y==null?void 0:y.token)??e.token),Ee(d)&&!d.receiverType)throw p({token:(y==null?void 0:y.token)??e.token,errorMessage:`Module type without receiver type set cannot be used as function parameter type.
1801
+
1802
+ Please consider using "<:" to specify the receiver type for a module type, for example:
1803
+
1804
+ Id :: module
1805
+ id : (fn(self : Self) -> Self)
1806
+ ;
1807
+
1808
+ use_id :: (fn(forall(T : Type),
1809
+ val : T,
1810
+ using(IdModule) : (T <: Id)
1811
+ ) -> T) {
1812
+ return IdModule.id(val);
1813
+ }
1814
+ `});let{env:k}=we({env:t,variable:{name:o,type:d,isCompileTimeOnly:i,value:f??(i?re(d,o):void 0),token:(l==null?void 0:l.token)??e.token,initializedAtToken:(l==null?void 0:l.token)??e.token,consumedAtToken:void 0,isOwningTheGcValue:s,isOwningTheSameGcValueAs:void 0,isReassignable:!1},skipCheckingFunctionOverloading:!0});return t=k,l&&(l.$={env:t,type:d,value:E,pathCollection:[]}),l!==e&&y!==e&&(e.$={env:t,type:J.type,value:J,pathCollection:[]}),Ut(d),{parameter:{label:o,type:d,exprs:uu({expr:e,labelExpr:g,typeExpr:y,defaultValueExpr:h,assignedValueExpr:_}),isCompileTimeOnly:i,isQuote:a,isOwningTheGcValue:s,assignedValue:f},env:t}}function Jd({constraintExprs:e,env:t,context:n}){let r=new Map;for(let o of e){if(!V(o)||!v(o,"<:",2))throw p({token:o.token,errorMessage:`Expected constraint in the form "T <: Module" or "T <: (Module1, Module2)", got: ${T(o)}`});let i=o.args[0],a=o.args[1],s=S({expr:i,env:t,context:{...n}});if(!s.$||!s.$.value||!G(s.$.value))throw p({token:i.token,errorMessage:"Expected type for left-hand side of where clause constraint."});t=s.$.env;let l=s.$.value;if(!ee(l.value)){let y=l.value,g=[];if(V(a)&&v(a,A.tuple))for(let h of a.args)V(h)&&v(h,"!")&&h.args.length===1?g.push({expr:h.args[0],isNegated:!0}):g.push({expr:h,isNegated:!1});else V(a)&&v(a,"!")&&a.args.length===1?g.push({expr:a.args[0],isNegated:!0}):g.push({expr:a,isNegated:!1});for(let{expr:h,isNegated:_}of g){let E=S({expr:h,env:t,context:{...n}});if(!E.$||!E.$.value||!G(E.$.value))throw p({token:h.token,errorMessage:"Expected module type for right-hand side of where clause constraint."});t=E.$.env;let k=E.$.value;if(!Ee(k.value))throw p({token:h.token,errorMessage:`Expected module type for right-hand side of where clause constraint, got: ${x(k.value)}`});let w=k.value,$=jn({targetType:y,moduleType:w,env:t});if(_){if($)throw p({token:o.token,errorMessage:`Type ${x(y)} must NOT implement ${x(w)}, but it does.`})}else if(!$)throw p({token:o.token,errorMessage:`Type ${x(y)} does not implement required module ${x(w)}.`})}continue}let u=l.value,d=[];if(V(a)&&v(a,A.tuple))for(let y of a.args)V(y)&&v(y,"!")&&y.args.length===1?d.push({expr:y.args[0],isNegated:!0}):d.push({expr:y,isNegated:!1});else V(a)&&v(a,"!")&&a.args.length===1?d.push({expr:a.args[0],isNegated:!0}):d.push({expr:a,isNegated:!1});let c=[],f=[];for(let{expr:y,isNegated:g}of d){let h=S({expr:y,env:t,context:{...n}});if(!h.$||!h.$.value||!G(h.$.value))throw p({token:y.token,errorMessage:"Expected module type for right-hand side of where clause constraint."});t=h.$.env;let _=h.$.value;if(!Ee(_.value))throw p({token:y.token,errorMessage:`Expected module type for right-hand side of where clause constraint, got: ${x(_.value)}`});let E=_.value;if(E.receiverType)throw p({token:y.token,errorMessage:"Module type in where clause already has a receiver type assigned."});g?f.push(E):c.push(E)}let m=r.get(u);m?(m.requiredModules.push(...c),m.negativeModules.push(...f)):r.set(u,{requiredModules:c,negativeModules:f})}return{whereClauseConstraints:r,env:t}}function ns({parameterExprs:e,env:t,context:n}){var l;t=ut(t);let r=[],o=[],i,a,s=!1;for(let u=0;u<e.length;u++){let d=e[u];if(V(d)&&v(d,A.forall)){if(u!==0)throw p({token:d.token,errorMessage:`Expected type parameters to be the first argument, got ${u+1}`});let c=d.args;for(let f=0;f<c.length;f++){let m=c[f],{parameter:y,env:g}=jp({expr:m,env:t,context:{...n},isParameterComptByDefault:!0});if(o.find(_=>_.label===y.label))throw p({token:m.token,errorMessage:`Duplicate label "${y.label}" in type parameter`});o.push(y),t=g}}else if(V(d)&&v(d,A.where)){if(u!==e.length-1)throw p({token:d.token,errorMessage:"The where clause must be the last parameter in the function signature."});let c=d.args;if(c.length===0)throw p({token:d.token,errorMessage:"The where clause must have at least one constraint."});let f=Jd({constraintExprs:c,env:t,context:n});t=f.env,a=f.whereClauseConstraints}else if(j(d)&&en(d,"...")||V(d)&&v(d,"...")){s=!0;let c=!1,f=!1,m="...",y=d,g=J.type;if(V(d)){let h=d.args[0];if(h){if(V(h)&&v(h,A.compt))throw c=!0,h.args.length!==1?p({token:h.token,errorMessage:`Expected one argument for "compt" , got ${h.args.length}`}):(y=h.args[0],m=h.args[0].token.value,g=J.type,p({token:h.token,errorMessage:"...(compt(param_name)) is not supported yet."}));if(V(h)&&v(h,A.quote)){if(c=!0,f=!0,h.args.length!==1)throw p({token:h.token,errorMessage:`Expected one argument for "quote" (or ":"), got ${h.args.length}`});y=h.args[0],m=h.args[0].token.value,g=mo()}else throw nt(h)?(y=h,m=h.token.value,g=J.type,p({token:h.token,errorMessage:"...(param_name) is not supported yet."})):p({token:h.token,errorMessage:`Expected a valid variable name for variadic parameter, got ${T(h)}`})}else throw p({token:d.token,errorMessage:`Expected a name for variadic parameter, got ${T(d)}`})}else g=J.type;if(i={exprs:{expr:d,labelExpr:y},isCompileTimeOnly:c,isQuote:f,label:m,type:g,isOwningTheGcValue:!1},m!=="..."){let{env:h}=we({env:t,variable:{name:m,type:g,isCompileTimeOnly:i.isCompileTimeOnly,value:c?re(g,m):void 0,token:y.token,initializedAtToken:y.token,consumedAtToken:void 0,isOwningTheGcValue:i.isOwningTheGcValue,isOwningTheSameGcValueAs:void 0,isReassignable:!1}});t=h,y.$={env:t,type:g,value:c?re(g,m):void 0,pathCollection:[]}}}else{if(s)throw p({token:d.token,errorMessage:"Expected variadic parameter to be the last parameter before the normal parameters."});let{parameter:c,env:f}=jp({expr:d,env:t,context:{...n},isParameterComptByDefault:!1});if(r.find(y=>y.label===c.label))throw p({token:V(d)?((l=d.args[0])==null?void 0:l.token)??d.token:d.token,errorMessage:`Duplicate label "${c.label}" in function parameter`});r.push(c),t=f}}return r.forEach((u,d)=>{if(u.isQuote&&Er(u.type)&&d!==r.length-1)throw p({token:u.exprs.expr.token,errorMessage:"Expected ExprList type to be the last parameter."})}),{parameters:r,forallParameters:o,variadicParameter:i,env:t,whereClauseConstraints:a}}function ma({expr:e,env:t,context:n}){var k,w;if(!v(e,"->",2))throw p({token:e.token,errorMessage:`Expected -> for function type, got:
1815
+ ${T(e)}
1816
+
1817
+ Note: For closures, use Impl(Fn(...) -> ...) syntax.`});let r=e.args[0],o=e.args[1],i=[];if(V(r)&&(v(r,A.fn)||v(r,A.unsafe_fn)))i=r.args;else throw p({token:r.token,errorMessage:`Expected a "fn" call for parameter list, got:
1818
+ ${T(r)}`});let{parameters:a,forallParameters:s,variadicParameter:l,env:u,whereClauseConstraints:d}=ns({parameterExprs:i,env:t,context:{...n,isEvaluatingFunctionType:!0}});t=u;let c,f=!1,m=!1,y=o;if(V(o)&&v(o,":",2)){let $=o.args[0];if(y=o.args[1],V($)&&v($,A.compt)){if(f=!0,$.args.length!==1)throw p({token:$.token,errorMessage:`Expected one argument for "compt" , got ${$.args.length}`});$=$.args[0]}if(V($)&&v($,A.unquote)){if(m=!0,$.args.length!==1)throw p({token:$.token,errorMessage:`Expected one argument for "unquote", got ${$.args.length}`});if(f)throw p({token:$.token,errorMessage:'Cannot use "compt" with "unquote". "unquote" return type means compile-time only, so "compt" is redundant.'});f=!0,$=$.args[0]}if(V($)&&v($,A.quote))throw p({token:$.token,errorMessage:'To define a macro function, please use "unquote" for the return type, not "quote".'});if(!nt($))throw p({token:$.token,errorMessage:`Expected a valid variable name for return label, got ${T($)}`});c=$.token.value}else{if(V(y)&&v(y,A.compt)){if(f=!0,y.args.length!==1)throw p({token:y.token,errorMessage:`Expected one argument for "compt" , got ${y.args.length}`});y=y.args[0]}if(V(y)&&v(y,A.unquote)){if(m=!0,y.args.length!==1)throw p({token:y.token,errorMessage:`Expected one argument for "unquote", got ${y.args.length}`});if(f)throw p({token:y.token,errorMessage:'Cannot use "compt" with "unquote". "unquote" return type means compile-time only, so "compt" is redundant.'});f=!0,y=y.args[0]}if(V(y)&&v(y,A.quote))throw p({token:y.token,errorMessage:'To define a macro function, please use "unquote" for the return type, not "quote".'})}let g=S({expr:y,env:t,context:{...n,isEvaluatingFunctionType:!0}}),h,_=(k=g.$)==null?void 0:k.value;if(G(_))h=_.value;else throw p({token:y.token,errorMessage:`Expected a type for function return type, got:
1819
+ ${T(y)}`});if(hn(h)&&!f&&(h=vt({type:h,expectedType:void 0,expr:void 0,env:t}),hn(h)))throw p({token:y.token,errorMessage:`Expected a "compt" for return type, like:
1820
+
1821
+ compt(${T(y)})
1822
+
1823
+ Given type:
1824
+ ${x(h)}`});if(n.isUnsafeFunctionType||tr(h,y.token),f&&er(h))throw p({token:y.token,errorMessage:`Unexpected "compt" for return type of ${x(h)} which can only be used at runtime.`});if(f){for(let $ of a)if(!$.isCompileTimeOnly)throw p({token:hu($),errorMessage:"Expected all parameters to be compile time only given the return type is compile time only."})}if(m&&!dt(h))throw p({token:y.token,errorMessage:`Expected Expr type for "unquote" return type, got ${x(h)}`});let E=Pr({parameters:a,forallParameters:s,variadicParameter:l,return_:{type:h,expr:y,isCompileTimeOnly:f,isUnquote:m,label:c??`fn_return_${ht()}`},env:Ct(t,!0),parametersFrame:t.frames[t.frames.length-1],SelfType:n.SelfType,ParentFunctionType:((w=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:w.kind)==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0});return d&&(E.whereClauseConstraints=d),t=Ct(t,!0),e.$={env:t,value:ae(E),type:At(E),pathCollection:[]},e}function ya({parameter:e,calleeEnv:t,context:n,functionType:r}){var a,s,l,u,d;let o=e.exprs.typeExpr,i=e.exprs.defaultValueExpr;if(o){let c=S({expr:yt(o),env:t,context:{...n,expectedType:void 0,SelfType:r.SelfType,isEvaluatingFunctionBodyOrAsyncBlock:r.ParentFunctionType?{kind:"function-body",type:r.ParentFunctionType,evaluationEnv:t}:void 0}});if(!G((a=c.$)==null?void 0:a.value))throw p({token:o.token,errorMessage:`Expected type for parameter, got:
1825
+ ${T(c)}`});return(s=c.$)!=null&&s.env&&(t=(l=c.$)==null?void 0:l.env),{parameterType:(u=c.$)==null?void 0:u.value.value,calleeEnv:t}}else if(i){let c=S({expr:yt(i),env:t,context:{...n,expectedType:void 0,SelfType:r.SelfType}});if(!c.$)throw p({token:i.token,errorMessage:`Failed to evaluate default value expression:
1826
+ ${T(i)}`});return t=(d=c.$)==null?void 0:d.env,{parameterType:c.$.type,calleeEnv:t}}else return{parameterType:e.type,calleeEnv:t}}function Ro({functionType:e,calleeEnv:t,context:n,functionCalleeExpr:r}){var l,u;let o=e.return;if(!o.expr)return{returnType:o.type,calleeEnv:t};let i=S({expr:yt(o.expr),env:t,context:{...n,SelfType:e.SelfType}}),a,s=(l=i.$)==null?void 0:l.value;if(G(s))a=s.value;else throw p({token:(r==null?void 0:r.token)??ke,errorMessage:"Function body is not evaluated correctly. Expected to return a type."});return ee(a)&&(a=fn(t,a)),{returnType:a,calleeEnv:((u=i.$)==null?void 0:u.env)??t}}function Xd({variablesToDrop:e,env:t,context:n}){var i;let r=[],o=t;for(let a of e){let s=Gt(`${C.___drop[0]}(${a.name})`),l=S({expr:s,env:o,context:{...n,expectedType:void 0}});if(r.push(l),(i=l.$)!=null&&i.env)o=l.$.env;else throw p({token:s.token,errorMessage:`Failed to evaluate "___drop" expression for variable "${a.name}":
1827
+ ${T(s)}`})}return{deferredDropExpressions:r.length>0?r:void 0,env:o}}function em({functionType:e,parameter:t,argExprs:n,argIndex:r,calleeEnv:o,callerEnv:i,context:a,isMethodCall:s,runtimeArgExprsInOrder:l}){var k,w,$,b,F,M,L;let u=n[r],d;if(u&&V(u)&&v(u,":",2)){if(d=u.args[0],u=u.args[1],!j(d))throw p({token:d.token,errorMessage:`Expected identifier for label, got:
1828
+ ${T(d)}`});let O=d.token.value;if(t.label!==O)throw p({token:d.token,errorMessage:`Named argument is not supported. Label is only used for readibility.
1829
+ Expected ${t?`label "${t.label}"`:"no label"} at the argument position, but got "${O}".`})}let{parameterType:c,calleeEnv:f}=ya({functionType:e,parameter:t,calleeEnv:o,context:{...a,isEvaluatingFunctionType:!0}});o=f;let m;if(!u||j(u)&&en(u,A.undefined))if(t.exprs.defaultValueExpr)m=S({expr:yt(t.exprs.defaultValueExpr),env:o,context:{...a}}),(k=m.$)!=null&&k.env&&(o=(w=m.$)==null?void 0:w.env),u&&(u.$=m.$),t.isCompileTimeOnly||l.push(m);else throw p({token:(u==null?void 0:u.token)??ke,errorMessage:`Expected default value for parameter "${t.label}"`});else if(t.isQuote)if(dt(c))m=yt(u),m.$={type:jt(),value:Fn(u),env:i,pathCollection:[]};else throw p({token:u.token,errorMessage:`Expected "Expr" type for "quote" parameter "${t.label}", got:
1830
+ ${x(c)}`});else m=S({expr:u,env:i,context:{...a,expectedType:{type:c,env:o}}}),($=m.$)!=null&&$.env&&(i=(b=m.$)==null?void 0:b.env),t.isCompileTimeOnly||l.push(m),Cr(m,i),t.isOwningTheGcValue&&!t.isCompileTimeOnly&&(xt(m,a),(F=m.$)!=null&&F.env&&(i=(M=m.$)==null?void 0:M.env),i=Mn(m,i));if(!m.$)throw p({token:(u==null?void 0:u.token)??ke,errorMessage:"Failed to evaluate argument expression."});let y=m.$.type;if(!((L=m.$)!=null&&L.value)&&t.isCompileTimeOnly)throw p({token:(u==null?void 0:u.token)??ke,errorMessage:`Cannot assign runtime argument to compile-time parameter:
1831
+ ${u?T(u):""}`});let g=m.$.value;if(!t.isCompileTimeOnly&&(g=void 0,y=vt({type:y,expectedType:c,expr:m,env:m.$.env}),hn(y)))throw p({token:(u==null?void 0:u.token)??ke,errorMessage:`Cannot convert compile-time type to runtime type for argument:
1832
+ ${T(m)}`});let{env:h}=we({env:o,variable:{name:t.label,type:y,isCompileTimeOnly:t.isCompileTimeOnly,value:g,token:(u==null?void 0:u.token)??ke,initializedAtToken:(u==null?void 0:u.token)??ke,consumedAtToken:void 0,isOwningTheGcValue:t.isOwningTheGcValue}});o=h;try{let{expectedEnv:O}=pt({type:c,env:o},{type:y,env:i});o=O}catch(O){throw p({token:(u==null?void 0:u.token)??ke,errorMessage:`Failed to synthesize types for parameter "${t.label}":
1833
+ ${O.message}`})}let{parameterType:_,calleeEnv:E}=ya({functionType:e,parameter:t,calleeEnv:o,context:{...a,isEvaluatingFunctionType:!0}});if(o=E,!W({type:_,env:o},{type:y,env:i},r===0&&s))throw p({token:(u==null?void 0:u.token)??ke,errorMessage:`Type mismatch for parameter "${t.label}":
1834
+ Expected: ${x(_)}
1835
+ Got: ${x(y)}`});return{calleeEnv:o,callerEnv:i,context:{...a},argValue:g,argType:y,parameterType:_}}function qo(e){if(e&&Fe(e))return e}function Yo({expr:e,functionValue:t,functionType:n,functionCalleeExpr:r,argExprs:o,callerEnv:i,context:a,isMethodCall:s,skipSpecialization:l}){var ne,pe,ue,oe,ye,ge,Me,Se,Re;t&&(n=t.specializedType??t.type);let u,d=[],c=[],f=[],m=0;o.length>0&&V(o[0])&&v(o[0],A.forall)&&(u=o[0],m=1);let y=n.parameters.length,g=o.slice(m,m+y),h=o.slice(m+y);o=g,i=ut(i);let _=ut(n.env);if(n.SelfType){let Te=ae(n.SelfType),{env:be}=we({env:_,variable:{name:"Self",token:ke,type:Te.type,isCompileTimeOnly:!0,initializedAtToken:ke,consumedAtToken:void 0,value:Te,isOwningTheGcValue:!1}});_=be}for(let Te=0;Te<n.forallParameters.length;Te++){let be=n.forallParameters[Te],I;if(be.exprs.labelExpr&&be.label){let{env:U,variable:te}=we({env:_,variable:{name:be.label,type:be.type,isCompileTimeOnly:!0,value:re(be.type,be.label),token:be.exprs.labelExpr.token,initializedAtToken:be.exprs.labelExpr.token,consumedAtToken:void 0,isOwningTheGcValue:!1}});_=U,I=te}if(u){let U=u.args[Te],te;if(V(U)&&v(U,":",2)){if(te=U.args[0],U=U.args[1],!j(te))throw p({token:te.token,errorMessage:`Expected identifier for type parameter label, got:
1836
+ ${T(te)}`});if(be.label!==te.token.value)throw p({token:te.token,errorMessage:`Expected type parameter label "${be.label}", got "${te.token.value}".`})}let se;if(j(U)&&U.token.value==="_")continue;if(!U||j(U)&&en(U,A.undefined))if(be.exprs.defaultValueExpr){let rt=S({expr:yt(be.exprs.defaultValueExpr),env:_,context:{...a}});if((ne=rt.$)!=null&&ne.env&&(i=rt.$.env),U&&(U.$=rt.$),!G((pe=rt.$)==null?void 0:pe.value))throw p({token:(U==null?void 0:U.token)??(r==null?void 0:r.token)??ke,errorMessage:U?`Expected type for default value, got:
1837
+ ${T(U)}`:"Expected type for default value."});se=(ue=rt.$)==null?void 0:ue.value}else throw p({token:(U==null?void 0:U.token)??(r==null?void 0:r.token)??ke,errorMessage:"Type parameter does not have default value."});else{let rt=S({expr:U,env:i,context:{...a,expectedType:{type:be.type,env:_}}});if((oe=rt.$)!=null&&oe.env&&(i=rt.$.env),!G((ye=rt.$)==null?void 0:ye.value))throw p({token:U.token,errorMessage:`Expected type for argument, got:
1838
+ ${T(U)}`});se=(ge=rt.$)==null?void 0:ge.value}te&&(te.$={env:_,type:se.type,value:se,pathCollection:[]});let{parameterType:ve,calleeEnv:xe}=ya({parameter:be,calleeEnv:_,context:{...a,isEvaluatingFunctionType:!0},functionType:n});_=xe;let{expectedEnv:Ze,givenEnv:Je}=pt({type:ve,env:_},{type:se.type,env:i});if(_=Ze,i=Je,!W({type:ve,env:_},{type:se.type,env:i}))throw p({token:(U==null?void 0:U.token)??(r==null?void 0:r.token)??ke,errorMessage:`Type mismatch for type parameter "${be.label}":
1839
+ Expected: ${x(ve)}
1840
+ Got: ${x(se.type)}`});if(be.label)if(I)_=Xe(_,I,{...I,value:se});else{let rt=(U==null?void 0:U.token)??(r==null?void 0:r.token)??ke,{env:Cn}=we({env:_,variable:{name:be.label,type:se.type,isCompileTimeOnly:!0,value:se,token:rt,initializedAtToken:rt,consumedAtToken:void 0,isOwningTheGcValue:!1}});_=Cn}d.push({value:se,argType:se.type,parameterType:ve})}}let E=n.parameters.length;if(!n.variadicParameter&&o.length>E){let Te=n.parameters.at(-1);if(!(Te&&Te.isQuote&&Er(Te.type)))throw p({token:(r==null?void 0:r.token)??ke,errorMessage:`Too many arguments for function call:
1841
+ Expected: ${E} arguments
1842
+ Got: ${o.length} arguments`})}if(a.expectedType&&!u&&n.forallParameters.length>0&&!n.return.isUnquote)try{let{returnType:Te,calleeEnv:be}=Ro({functionType:n,calleeEnv:_,context:{...a,isEvaluatingFunctionType:!0},functionCalleeExpr:r}),{expectedEnv:I}=pt({type:Te,env:be},{type:a.expectedType.type,env:a.expectedType.env});_=I}catch{}let k=n.parameters.length;for(let Te=0;Te<k;Te++){let be=n.parameters[Te],{calleeEnv:I,callerEnv:U,context:te,argValue:se,argType:ve,parameterType:xe}=em({functionType:n,parameter:be,argExprs:o,argIndex:Te,callerEnv:i,calleeEnv:_,context:a,isMethodCall:s,runtimeArgExprsInOrder:f});_=I,i=U,a=te,c.push({value:se,parameterType:xe,argType:ve})}if(!u&&n.forallParameters.length>0){for(let Te of n.forallParameters)if(Te.label){let I=me(_,Te.label).at(-1);I!=null&&I.value&&G(I.value)&&d.push({value:I.value,argType:I.value.type,parameterType:Te.type})}}let{returnType:w,calleeEnv:$}=Ro({functionType:n,calleeEnv:_,context:{...a,isEvaluatingFunctionType:!0},functionCalleeExpr:r});if(_=$,a.expectedType&&!n.return.isUnquote){let{expectedEnv:Te}=pt({type:w,env:_},{type:a.expectedType.type,env:a.expectedType.env});_=Te;let be=Ro({functionType:n,calleeEnv:_,context:{...a,isEvaluatingFunctionType:!0},functionCalleeExpr:r});w=be.returnType,_=be.calleeEnv,W({type:a.expectedType.type,env:a.expectedType.env},{type:w,env:_})&&(w=a.expectedType.type)}let b=[];if(n.variadicParameter){for(let Te=0;Te<h.length;Te++){let be=h[Te],I;if(n.variadicParameter.isQuote)I=yt(be),I.$={type:jt(),value:Fn(be),env:i,pathCollection:[]},b.push({value:I.$.value,argType:I.$.type});else{if(I=S({expr:be,env:i,context:{...a}}),!((Me=I.$)!=null&&Me.env))throw p({token:be.token,errorMessage:`Failed to evaluate the expression:
1843
+ ${T(be)}`});i=I.$.env,b.push({value:I.$.value,argType:I.$.type}),n.variadicParameter.isCompileTimeOnly||f.push(be)}}if(n.variadicParameter.label!=="..."){if(n.variadicParameter.isQuote){let Te=kn(jt(),b.map(I=>I.value)),{env:be}=we({env:_,variable:{name:n.variadicParameter.label,type:Te.type,isCompileTimeOnly:n.variadicParameter.isCompileTimeOnly,value:Te,token:n.variadicParameter.exprs.expr.token,initializedAtToken:n.variadicParameter.exprs.expr.token,consumedAtToken:void 0,isOwningTheGcValue:!1}});_=be}}}let F=[],M={args:c,forallArgs:d,variadicArgs:b},L;if(n.return.isCompileTimeOnly)if(Fe(t)){let{value:Te,callerEnv:be,calleeEnv:I}=Xr({functionCalleeExpr:r,functionType:n,functionValue:t,argValues:M,callerEnv:i,calleeEnv:_,context:{...a}});L=Te,w=Te.type,i=be,_=I}else{let Te=ft(w)&&w.level===0,be=`${n.id}_return_sometype`;if(Te)if((Se=a.expectedType)!=null&&Se.type)L=ae(a.expectedType.type);else if(a.isEvaluatingFunctionType){let I=wn(w,n.return.label,be);I.functionApplication=e;let U=fn(_,I);L=ae(U)}else throw p({token:(e==null?void 0:e.token)??(r==null?void 0:r.token)??ke,errorMessage:"Cannot infer compt return type. Please provide the expected type."});else L=re(w,n.return.label)}nm({returnType:w,env:i,expr:e,context:a});let O,B=((Re=a.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:Re.kind)==="function-body"&&a.isEvaluatingFunctionBodyOrAsyncBlock.value&&Fe(a.isEvaluatingFunctionBodyOrAsyncBlock.value)&&t&&Fe(t)&&a.isEvaluatingFunctionBodyOrAsyncBlock.value.funcId===t.funcId;!l&&t&&Fe(t)&&Nn(n)&&!B&&(O=tm({originalFunction:t,argValues:M,calleeEnv:_,callerEnv:i,context:a}));let P=Yr(i),q;if(P.length>0){let Te=Xd({variablesToDrop:P,env:i,context:a});q=Te.deferredDropExpressions,i=Te.env}return{returnType:w,calleeEnv:_,callerEnv:i,pathCollection:F,argValues:M,returnValue:L,specializedFunctionValue:O,runtimeArgExprsInOrder:f,deferredDropExpressions:q}}function tm({originalFunction:e,argValues:t,calleeEnv:n,callerEnv:r,context:o}){let i=e.type,a=[],s=[];t.forallArgs&&a.push(...t.forallArgs.map($=>$.value)),i.parameters.forEach(($,b)=>{let F=t.args[b];if($.isCompileTimeOnly)F.value&&a.push(F.value);else{let L=ee(F.argType)&&F.argType.resolvedConcreteType&&!Pe(F.argType)?F.argType.resolvedConcreteType:F.argType;s.push({...$,type:L})}});let l=s.map($=>$.type),u=e.specializedFunctionCaches.find($=>$.compileTimeArgValues.length===a.length&&$.compileTimeArgValues.every((M,L)=>{let O=a[L];return Lt({value:M,env:$.env},{value:O,env:r})})?$.runtimeParameterTypes.length===l.length&&$.runtimeParameterTypes.every((M,L)=>{let O=l[L];return W({type:M,env:$.env},{type:O,env:r},!0)}):!1);if(u)return u.specializedFunction;let d=n,c=yt(e.body),{returnType:f,calleeEnv:m}=Ro({functionType:i,calleeEnv:d,context:{...o,isEvaluatingFunctionType:!0},functionCalleeExpr:void 0});d=m;let y=Et({expr:c,env:d,context:{...o,expectedType:{type:f,env:d},isEvaluatingFunctionBodyOrAsyncBlock:{kind:"function-body",type:i,value:e,evaluationEnv:d},capturedVariables:o.capturedVariables?o.capturedVariables:void 0,functionReturnImplConcreteType:[]},variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(!y.$)throw p({token:e.body.token,errorMessage:"Failed to evaluate function body for specialization."});let g=[],h=$=>{if(G($)){let b=$.value;if(!b.typeName&&b.id)return`${je($)}_id${b.id}`}return je($)};i.forallParameters.forEach(($,b)=>{var F;if(b<t.forallArgs.length){let M=t.forallArgs[b];g.push(Q(h(M.value)))}else{let M=$.label,L=me(n,M);L.length>0&&((F=L[L.length-1])!=null&&F.value)?g.push(Q(h(L[L.length-1].value))):g.push("unknown")}}),i.parameters.forEach(($,b)=>{if($.isCompileTimeOnly&&b<t.args.length){let F=t.args[b];F?g.push(Q(h(F.value))):g.push("unknown")}}),s.forEach(($,b)=>{let F=$.type;(!F.typeName&&F.id||Ye(F))&&g.push(`rtparam${b}_${Q(x(F))}_id${F.id}`)});let _=g.join("_"),E=Pr({forallParameters:[],parameters:s,variadicParameter:void 0,return_:{...i.return,type:f},parametersFrame:d.frames[d.frames.length-1],env:i.env,SelfType:i.SelfType}),k={...e,specializedType:E,body:y,funcId:`${e.funcId}_${_}`,funcName:`${e.funcName}_${_}`,calledComptFunctionCaches:[],specializedFunctionCaches:[]},w={funcId:e.funcId,compileTimeArgValues:a,runtimeParameterTypes:l,specializedFunction:k,env:y.$.env};return e.specializedFunctionCaches=[...e.specializedFunctionCaches,w],k}function nm({returnType:e,expr:t,env:n,context:r}){if(r.isEvaluatingFunctionType||r.expectedType)return;let o=Na(e);for(let i of o){if(Pe(i)||mn(i)||i.resolvedConcreteType||i.requiredModules&&i.requiredModules.length>0)continue;if(!me(n,i.name).length){let s=sa(n,()=>!0),l=!1;for(let u of s)if(G(u.value)){let d=u.value.value,c=Na(d);for(let f of c)if(f.name===i.name){l=!0;break}if(l)break}if(l)continue;throw p({token:(t==null?void 0:t.token)??ke,errorMessage:`Failed to infer the function call return type.
1844
+ Please consider providing the expected type.`})}}}function Wp({expr:e,env:t,context:n}){let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for Iso:
1845
+ ${T(r)}`});if(t=o.$.env,!G(o.$.value))throw p({token:r.token,errorMessage:`Iso expects a type as argument, but got:
1846
+ ${T(r)}`});let a=o.$.value.value,s=lu(a,t);t=eu({isoType:s,env:t,context:n});let l=ae(s);return e.$={env:t,type:l.type,value:l,pathCollection:[]},e}function Hp({expr:e,env:t,context:n,isoType:r}){var s;let o=e.args[0],i=S({expr:o,env:t,context:{...n,expectedType:{type:r.childType,env:t}}});if(!i.$)throw p({token:o.token,errorMessage:`Failed to evaluate the argument expression for Iso value constructor:
1847
+ ${T(o)}`});t=i.$.env;let a=(s=i.$)==null?void 0:s.variableName;if(a){let l=me(t,a);if(l.length>0){let u=l[l.length-1],c=t.frames.flatMap(f=>f.variables).filter(f=>{var m;return((m=f.isOwningTheSameGcValueAs)==null?void 0:m.id)===u.id&&f.id!==u.id});if(c.length>0){let f=c.map(m=>m.name).join(", ");throw p({token:o.token,errorMessage:`Cannot isolate ${a}, also owned by: ${f}
1848
+ Iso requires unique ownership (no aliases). Drop other aliases first.`})}}}return t=Mn(i,t),e.$={env:t,type:r,value:void 0,pathCollection:i.$.pathCollection||[]},ze(e,!0),e}function Kp({moduleExpr:e,moduleType:t,argExprs:n,callerEnv:r,context:o}){var c,f,m,y,g;if(n.length>t.fields.length)throw p({token:e.token,errorMessage:"Failed to implement the module. Too many fields provided."});let i=Array(t.fields.length).fill(void 0),a={...t,fields:t.fields.map((h,_)=>({...h,assignedValue:i[_]}))},s=o.ReceiverType,l=o.ReceiverType??a;if(!s)throw p({token:e.token,errorMessage:`Receiver type is undefined when implementing module.
1849
+ Please consider using "impl" to specify the receiver type explicitly, like:
1850
+
1851
+ // impl receiverType, moduleImplementation
1852
+ impl Point, Id(Point)(
1853
+ id : ((p) -> p)
1854
+ );
1855
+ `});let u=s.module;s.module?s.module={...s.module,fields:[...a.fields,...s.module.fields]}:s.module=a;for(let h=0;h<t.fields.length;h++){let _=t.fields[h],E=!1,k;for(let w=0;w<n.length;w++){let $=n[w],b;if(V($)&&v($,":",2)){if(b=$.args[0],$=$.args[1],!j(b))throw p({token:b.token,errorMessage:`Expected identifier for label, got:
1856
+ ${T(b)}`});k=b.token.value}else throw p({token:$.token,errorMessage:`Expected member label, but got:
1857
+ ${T($)}`});if(!t.fields.find(F=>F.label===k))throw p({token:b.token,errorMessage:`Module member with label "${k}" does not exist in the module type.`});if(_.label===k){if(E=!0,_.assignedValue)throw p({token:$.token,errorMessage:`Module member "${_.label}" already has a assigned value:
1858
+ ${je(_.assignedValue)}`});let F,M=_.exprs.typeExpr,L=_.exprs.defaultValueExpr;if(M){let ne=(c=S({expr:yt(M),env:ut(t.env,r.frames[r.frames.length-1]),context:{...o,expectedType:void 0,ReceiverType:void 0,SelfType:l}}).$)==null?void 0:c.value;if(!G(ne))throw p({token:$.token,errorMessage:`Failed to evaluate the module member "${k}"`});F=ne.value}else if(L){let ne=(f=S({expr:yt(L),env:ut(t.env,r.frames[r.frames.length-1]),context:{...o,expectedType:void 0,ReceiverType:void 0,SelfType:l}}).$)==null?void 0:f.value;if(!ne)throw p({token:$.token,errorMessage:`Failed to evaluate the module member "${k}"`});F=ne.type}else throw p({token:$.token,errorMessage:`Module member "${k}" has no type or default value or assigned value.`});let O=S({expr:$,env:r,context:{...o,expectedType:{type:F,env:r},ReceiverType:void 0,SelfType:l}}),B=(m=O.$)==null?void 0:m.type;if(!B)throw p({token:$.token,errorMessage:`Failed to evaluate the module member "${k}"`});if((y=O.$)!=null&&y.env&&(r=O.$.env),!W({type:F,env:r},{type:B,env:r}))throw p({token:$.token,errorMessage:`Type mismatch for the module member "${k}":
1859
+ Expected: ${x(F)}
1860
+ Got: ${x(B)}`});let P=(g=O.$)==null?void 0:g.value;Fe(P)&&(P.funcId+=`_${_.label}`,!P.specializedType&&F.tag==="Function"&&(P.specializedType=F)),i[h]=P,a.fields[h].assignedValue=P,s&&s.module&&(s.module.fields[h].assignedValue=P),$.$={env:r,type:B,value:P,pathCollection:[]},b&&(b.$=$.$);break}}if(!E){let w=_.defaultValue,$=_.assignedValue,b=$;if(!$&&w&&(b=w),!b)throw p({token:e.token,errorMessage:`Module member "${_.label}" is not provided and has no required/default value.`});i[h]=b,a.fields[h].assignedValue=b}}return s&&u&&(s.module=u),{moduleValue:Vr({...t,receiverType:s},i),callerEnv:r}}function rm(e){switch(e.tag){case"u8":return{min:0,max:255};case"i8":return{min:-128,max:127};case"u16":return{min:0,max:65535};case"i16":return{min:-32768,max:32767};case"u32":return{min:0,max:4294967295};case"i32":return{min:-2147483648,max:2147483647};case"u64":return{min:0,max:Number.MAX_SAFE_INTEGER};case"i64":return{min:Number.MIN_SAFE_INTEGER,max:Number.MAX_SAFE_INTEGER};case"usize":return{min:0,max:Number.MAX_SAFE_INTEGER};case"isize":return{min:Number.MIN_SAFE_INTEGER,max:Number.MAX_SAFE_INTEGER};case"f32":case"f64":return;default:return}}function Qp(e){switch(e.tag){case"u8":return"U8";case"i8":return"I8";case"u16":return"U16";case"i16":return"I16";case"u32":return"U32";case"i32":return"I32";case"u64":return"U64";case"i64":return"I64";case"usize":return"Usize";case"isize":return"Isize";case"f32":return"F32";case"f64":return"F64";default:return}}function om(e){return Tr(e)||$r(e)||kt(e)||Bt(e)}function jo(e){return Tr(e)||$r(e)||kt(e)||Bt(e)||In(e)}function im(e){if(e&&ct(e))return e.value}function am(e){return Zn(e)||ri(e)||ct(e)}function Zp(e,t,n){let r=rm(t);if(r&&(e<r.min||e>r.max))throw p({token:n,errorMessage:`Value ${e} is out of range for type ${x(t)} (${r.min} to ${r.max})`});if(kt(t))return Pn(Math.floor(e));if(Bt(t))return oi(e);if($r(t)){let o=Qp(t);if(o)return Dt(o,e)}if(Tr(t)){let o=Qp(t);if(o)return Dt(o,Math.floor(e))}throw p({token:n,errorMessage:`Cannot create compile-time value for type ${x(t)}`})}function Jp({targetType:e,argExpr:t,expr:n,callerEnv:r,context:o}){if(!jo(e))return;let i=S({expr:t,env:r,context:{...o,expectedType:void 0}});if(!i.$)throw p({token:t.token,errorMessage:`Failed to evaluate argument: ${T(t)}`});let a=i.$.env,s=i.$.value,l=i.$.type;if(!jo(l)&&!kt(l)&&!Bt(l))throw p({token:t.token,errorMessage:`Cannot convert ${x(l)} to ${x(e)}. Expected a numeric type.`});let u=im(s);if(u!==void 0&&om(e)){let d=Zp(u,e,n.token);return n.$={env:a,type:e,value:d,pathCollection:[]},{expr:n,env:a}}if((kt(e)||Bt(e))&&u===void 0)throw p({token:t.token,errorMessage:`Cannot convert runtime value to ${x(e)}. Only compile-time values can be converted to ${x(e)}.`});if(In(e)||!am(s)){let d={tag:"FuncCall",func:{tag:"Atom",token:{...n.token,value:C.__yo_as[0],type:"identifier"},$:void 0},args:[i,n.func],token:n.token,$:{env:a,type:e,value:void 0,pathCollection:i.$.pathCollection}};return ra(n,d),{expr:n,env:a}}if(u!==void 0){let d=Zp(u,e,n.token);return n.$={env:a,type:e,value:d,pathCollection:[]},{expr:n,env:a}}throw p({token:n.token,errorMessage:"Unexpected case in numeric type conversion"})}function Xp({targetType:e,argExpr:t,expr:n,callerEnv:r,context:o}){if(!De(e))return;let i=S({expr:t,env:r,context:{...o,expectedType:void 0}});if(!i.$)throw p({token:t.token,errorMessage:`Failed to evaluate argument: ${T(t)}`});let a=i.$.env,s=i.$.type;if(!De(s))throw p({token:t.token,errorMessage:`Cannot cast ${x(s)} to ${x(e)}. Expected a pointer type.`});let l={tag:"FuncCall",func:{tag:"Atom",token:{...n.token,value:C.__yo_as[0],type:"identifier"},$:void 0},args:[i,n.func],token:n.token,$:{env:a,type:e,value:re(e),pathCollection:i.$.pathCollection,runtimeArgExprsInOrder:[i]}};return ra(n,l),{expr:n,env:a}}function _a({typeFields:e,functionCalleeExpr:t,argExprs:n,callerEnv:r,context:o,isUnionType:i}){var d;if(n.length>e.length)throw p({token:t.token,errorMessage:`Failed to call the type. Too many members provided. Expected ${e.length} arguments, got ${n.length}.`});if(i&&n.length!==1)throw p({token:t.token,errorMessage:`Failed to call the union type. Expected exactly one argument, got ${n.length}.`});let a=new Set,s=Array(e.length).fill(void 0),l=[];for(let c=0;c<e.length;c++){let f=e[c],m=n[c];if(!m)break;let y;if(V(m)&&v(m,":",2)&&(y=m.args[0],m=m.args[1],!j(y)))throw p({token:y.token,errorMessage:`Expected identifier for label, got:
1861
+ ${T(y)}`});if(y){let E=y.token.value,k=e.find(w=>w.label===E);if(k){if(k.assignedValue)throw p({token:m.token,errorMessage:`Cannot use label "${E}" for already assigned value:
1862
+ ${zr(k)}`});f=k}else throw p({token:m.token,errorMessage:`Failed to find "${E}" in the type.`})}if(a.has(f))throw p({token:m.token,errorMessage:`Type member "${f.label}" is already implemented.`});let g=e.indexOf(f),h=S({expr:m,env:r,context:{...o,expectedType:{type:f.type,env:r}}});if(!h.$)throw p({token:m.token,errorMessage:`Failed to evaluate argument expression:
1863
+ ${T(m)}`});xt(h,o),r=h.$.env;let _=h.$.type;if(y&&(y.$=h.$),!W({type:f.type,env:r},{type:_,env:r}))throw p({token:m.token,errorMessage:`Type mismatch for type member "${f.label}":
1864
+ Expected: ${x(f.type)}
1865
+ Got: ${x(_)}`});s[g]=(d=h.$)==null?void 0:d.value,l[g]=h,a.add(f)}if(!i)for(let c=0;c<e.length;c++){let f=e[c];if(!a.has(f)){if(!f.defaultValue&&!f.assignedValue)throw p({token:t.token,errorMessage:`Type member "${f.label}" is not provided and has no default value or assigned value.`});s[c]=f.defaultValue??f.assignedValue,l[c]=f.exprs.defaultValueExpr??f.exprs.assignedValueExpr}}return{values:s,pathCollection:[],callerEnv:r,runtimeArgExprsInOrder:l}}function sm(e,t,n){if(!e.recursiveTypeRef)return;let{functionValue:r,argValues:o}=e.recursiveTypeRef,i=r.calledComptFunctionCaches.find(s=>s.argValues.length===o.length&&s.argValues.every((l,u)=>{let d=o[u];return G(l)&&G(d)?W({type:l.value,env:s.env},{type:d.value,env:t},!0):Lt({value:l,env:s.env},{value:d,env:t})}));if(i&&G(i.value)&&!(ee(i.value.value)&&i.value.value.recursiveTypeRef))return i.value.value;if(n!=null&&n.SelfType&&$t(n.SelfType)||n!=null&&n.SelfType&&$e(n.SelfType))return n.SelfType;let a=r.calledComptFunctionCaches.find(s=>!(!G(s.value)||ee(s.value.value)&&s.value.value.recursiveTypeRef));if(a&&G(a.value))return a.value.value}function En({expr:e,env:t,context:n,givenFunc:r,forMacroExpansion:o}){var m,y,g,h,_,E,k,w,$,b,F,M,L,O,B,P,q,ne,pe,ue,oe,ye,ge,Me,Se,Re,Te,be;let i=e.func,a=e.args,s,l=[];if(r)l=[r];else if(V(i)){let I=S({expr:i,env:t,context:{...n}});if(i=I,(m=I.$)!=null&&m.type)l=[{type:I.$.type,value:I.$.value}];else if(V(I)&&v(I,".",2)){let U=I.args[0];s=I.args[1];let te=(y=U.$)==null?void 0:y.type;if(!te)throw p({token:U.token,errorMessage:"Expected to be evaluated."});if(Bp(U,s)){let se=U.$.value;if(a.length!==1)throw p({token:e.token,errorMessage:`Array.fill expects exactly 1 argument (fill value), got ${a.length}`});return Up({expr:e,arrayType:se.value,fillValueArg:a[0],env:t,context:n}).expr}if(j(s)){let se=s.token.value,ve=((g=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:g.kind)==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0;l=Ka(t,se,te,!1,ve).map(Ze=>{let Je;if(Ze.needsPointerConversion){let rt={tag:"Atom",token:U.token,$:void 0};rt.token={...U.token,value:"&",type:"identifier"},Je=[{tag:"FuncCall",func:rt,args:[U],token:U.token,$:void 0},...a]}else Je=[U,...a];return{type:Ze.type,value:Ze.value,needsPointerConversion:Ze.needsPointerConversion,args:Je}})}else{let se=S({expr:s,env:t,context:{...n}});(h=se.$)!=null&&h.env&&(t=(_=se.$)==null?void 0:_.env),s=se;let ve=(E=s.$)==null?void 0:E.type,xe=(k=s.$)==null?void 0:k.value;if(!ve)throw p({token:s.token,errorMessage:"Expected to be a function."});l=[{type:ve,value:xe}],a=[U,...a]}}else throw p({token:i.token,errorMessage:`Expected type for function call, got ${T(I)}`})}else{let I=i.token.type==="backtick_identifier"?i.token.value.slice(1,-1):i.token.value;if(I==="_"){let U=n.expectedType;if(!U||ee(U.type))return Pp({expr:e,env:t,context:n});l=[{type:At(U.type),value:ae(U.type)}],i.$={env:t,type:l[0].type,value:l[0].value,pathCollection:[]}}else if(Ln(I)&&e.isInfix){let U=a[0];if(!U)throw p({token:i.token,errorMessage:`Expected first argument for operator, got:
1866
+ ${T(i)}`});let se=(w=S({expr:U,env:t,context:{...n,expectedType:void 0}}).$)==null?void 0:w.type;if(!se)throw p({token:U.token,errorMessage:"Expected to be evaluated."});let ve=I;s=i;let xe=(($=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:$.kind)==="function-body"?n.isEvaluatingFunctionBodyOrAsyncBlock.type:void 0;l=Ka(t,ve,se,!0,xe).map(Je=>({type:Je.type,value:Je.value,needsPointerConversion:Je.needsPointerConversion}))}else if(I==="Call"&&n.SelfType){let U=ae(n.SelfType);l=[{type:U.type,value:U}]}else{let U=S({expr:i,env:t,context:{...n}});if(i=U,!U.$)throw p({token:i.token,errorMessage:"Failed to evaluate the callee:"});if(Ee(U.$.type)){let te=U.$.type,se=te.fields.findIndex(xe=>xe.label==="Call");if(se<0)throw p({token:i.token,errorMessage:'Calling a module value which does not have "Call" element is not allowed.'});let ve=te.fields[se];if(ve.assignedValue){let xe=ve.assignedValue;ln(xe)?l=xe.fields.map(Ze=>({type:Ze.type,value:Ze})):l=[{type:xe.type,value:xe}]}else throw p({token:i.token,errorMessage:`Calling a module value whose "Call" element doesn't have assigned value is not allowed.`})}else l=[{type:U.$.type,value:U.$.value}]}}let u=l.map(I=>{let U=I.args??a;if(ce(I.type))try{let te=Yo({functionValue:qo(I.value),functionType:I.type,expr:yt(e),functionCalleeExpr:i,argExprs:U.map(se=>yt(se)),callerEnv:t,context:n,isMethodCall:!!s,skipSpecialization:!0});return{...I,result:{kind:"function",result:te}}}catch(te){return{...I,result:{kind:"error",error:te}}}else if((ee(I.type)||Ne(I.type))&&nn(I.type)){let te=nn(I.type);try{let se=Yo({functionValue:qo(I.value),functionType:te.isFn.callType,expr:yt(e),functionCalleeExpr:i,argExprs:U.map(ve=>yt(ve)),callerEnv:t,context:n,isMethodCall:!!s,skipSpecialization:!0});return{...I,result:{kind:"function",result:se}}}catch(se){return{...I,result:{kind:"error",error:se}}}}else{let te=I.value;if(G(te)&&ee(te.value)&&te.value.recursiveTypeRef){let se=sm(te.value,t,n);se&&(te=ae(se),I.value=te,I.type=te.type)}if(G(te)&&$e(te.value))try{let se=_a({typeFields:te.value.fields,functionCalleeExpr:i,argExprs:U,callerEnv:t,context:{...n}});return{...I,result:{kind:"type",result:se}}}catch(se){return{...I,result:{kind:"error",error:se}}}else if(G(te)&&Ve(te.value)){let se=te.value,ve=se.variants.find(xe=>xe.name===se.selectedVariantName);if(ve)try{let xe=_a({typeFields:ve.fields||[],functionCalleeExpr:i,argExprs:U,callerEnv:t,context:{...n}});return{...I,result:{kind:"type",result:xe}}}catch(xe){return{...I,result:{kind:"error",error:xe}}}else return{...I,result:{kind:"error",error:p({token:e.token,errorMessage:"Enum variant not selected for enum type"})}}}else if(G(te)&&ot(te.value))try{let se=_a({typeFields:te.value.fields,functionCalleeExpr:i,argExprs:U,callerEnv:t,context:{...n},isUnionType:!0});return{...I,result:{kind:"type",result:se}}}catch(se){return{...I,result:{kind:"error",error:se}}}else if(G(te)&&Ee(te.value)){let se=te.value;try{let ve=Kp({moduleExpr:i,moduleType:se,argExprs:U,callerEnv:t,context:{...n}});return{...I,result:{kind:"module-type",result:ve}}}catch(ve){return{...I,result:{kind:"error",error:ve}}}}else if(G(te)&&ce(te.value)){let se=te.value;try{return Rp({expr:e,functionType:se,callerEnv:t,context:{...n}}),{...I,result:{kind:"function-type"}}}catch(ve){return{...I,result:{kind:"error",error:ve}}}}else if(G(te)&&Oe(te.value)){let se=te.value;try{return Gp({expr:e,arrayType:se,argExprs:U,callerEnv:t,context:{...n}}),{...I,result:{kind:"array-type"}}}catch(ve){return{...I,result:{kind:"error",error:ve}}}}else if(G(te)&&mt(te.value)){let se=te.value;try{return Yp({expr:e,comptListType:se,argExprs:U,callerEnv:t,context:{...n}}),{...I,result:{kind:"array-type"}}}catch(ve){return{...I,result:{kind:"error",error:ve}}}}else if(G(te)&&(ee(te.value)||Ne(te.value))){let se=te.value,ve=nn(se);if(ve)try{return qp({expr:e,fnModuleType:ve,wrapperType:se,callerEnv:t,context:{...n}}),{...I,result:{kind:"closure-type"}}}catch(xe){return{...I,result:{kind:"error",error:xe}}}else if(ee(se)&&se.recursiveTypeRef)try{let xe=[];for(let Ze of U){let Je=S({expr:Ze,env:t,context:{...n}});if(!Je.$)throw p({token:Ze.token,errorMessage:"Failed to evaluate argument"});t=Je.$.env,xe.push(Je)}return{...I,result:{kind:"type",result:{values:xe.map(Ze=>Ze.$.value),pathCollection:[],runtimeArgExprsInOrder:xe,callerEnv:t}}}}catch(xe){return{...I,result:{kind:"error",error:xe}}}else return{...I,result:{kind:"error",error:p({token:i.token,errorMessage:`Invalid function call on type:
1867
+ ${G(te)?x(te.value):x(I.type)}`})}}}else if(Oe(I.type)||at(I.type))try{let se=zp({expr:e,arrayType:I.type,arrayValue:I.value,argExprs:U,callerEnv:t,context:{...n}});return{...I,result:{kind:"array",result:se}}}catch(se){return{...I,result:{kind:"error",error:se}}}else if(G(te)&&jo(te.value)){let se=te.value;if(U.length!==1)return{...I,result:{kind:"error",error:p({token:i.token,errorMessage:`Numeric type conversion expects exactly 1 argument, got ${U.length}`})}};try{let ve=Jp({targetType:se,argExpr:U[0],expr:e,callerEnv:t,context:{...n}});return ve?{...I,result:{kind:"numeric-type",result:ve}}:{...I,result:{kind:"error",error:p({token:i.token,errorMessage:`Failed to convert to numeric type ${x(se)}`})}}}catch(ve){return{...I,result:{kind:"error",error:ve}}}}else if(G(te)&&De(te.value)){let se=te.value;if(U.length!==1)return{...I,result:{kind:"error",error:p({token:i.token,errorMessage:`Pointer type casting expects exactly 1 argument, got ${U.length}`})}};try{let ve=Xp({targetType:se,argExpr:U[0],expr:e,callerEnv:t,context:{...n}});return ve?{...I,result:{kind:"pointer-type",result:ve}}:{...I,result:{kind:"error",error:p({token:i.token,errorMessage:`Failed to cast to pointer type ${x(se)}`})}}}catch(ve){return{...I,result:{kind:"error",error:ve}}}}else if(G(te)&&gt(te.value)){let se=te.value;if(U.length!==1)return{...I,result:{kind:"error",error:p({token:i.token,errorMessage:`Iso value constructor expects exactly 1 argument, got ${U.length}`})}};try{let ve=Hp({expr:e,env:t,context:{...n},isoType:se});return{...I,result:{kind:"iso-value",result:ve}}}catch(ve){return{...I,result:{kind:"error",error:ve}}}}else return{...I,result:{kind:"error",error:p({token:i.token,errorMessage:`Invalid function call on type:
1868
+ ${G(te)?x(te.value):x(I.type)}`})}}}}),d=u.filter(I=>I.result.kind!=="error"),c=d.filter(I=>ce(I.type)&&I.type.return.isCompileTimeOnly);if(c.length===1&&(d=c),d.length===0){if(u.length===1&&u[0].result.kind==="error"){let I=u[0].result.error;throw I instanceof Jt?st([{token:e.token,errorMessage:`Failed to call the function:
1869
+
1870
+ ${I.tokenAndErrorList.filter(({token:U})=>U.modulePath!==e.token.modulePath).map(({errorMessage:U})=>`- ${U}`).join(`
1871
+ `)}`},...I.tokenAndErrorList.filter(({token:U})=>U.modulePath===e.token.modulePath)],I.isAssertionError):st([{token:e.token,errorMessage:`Failed to call the function:
1872
+ `},{token:e.token,errorMessage:I instanceof Error?I.message:String(I)}])}throw st([{token:i.token,errorMessage:`No matching call found with arguments:
1873
+ ${T(e)}
1874
+
1875
+ ${u.length?`Available functions:
1876
+ `:""}`},...u.map(I=>{let U=I.result.kind==="error"?I.result.error:void 0;return U?U instanceof Jt?[{token:i.token,errorMessage:`- ${x(I.type)}
1877
+ `},...U.tokenAndErrorList]:{token:i.token,errorMessage:`- ${x(I.type)}
1878
+ ${U instanceof Error?U.message:String(U)}`}:{token:i.token,errorMessage:`${x(I.type)}`}}).flat()])}if(d.length>1)throw p({token:i.token,errorMessage:`Ambiguous call with arguments:
1879
+ ${T(e)}
1880
+
1881
+ Found ${d.length} matching calls:
1882
+ ${d.map(I=>`${x(I.type)}`).join(`
1883
+ `)}
1884
+ `});let f=d[0];if(o)if(ce(f.type)&&f.type.return.isUnquote){let{returnValue:I,callerEnv:U,pathCollection:te,deferredDropExpressions:se}=Yo({functionValue:qo(f.value),functionType:f.type,expr:e,functionCalleeExpr:i,argExprs:f.args??a,callerEnv:t,context:n,isMethodCall:!!s});return t=Ct(U),e.$={env:t,type:jt(),value:I,originType:jt(),pathCollection:te,deferredDropExpressions:se},e}else throw p({token:i.token,errorMessage:"Expected macro function call for macro_expand."});if(ce(f.type)){let I=f.type;{let{returnType:U,returnValue:te,callerEnv:se,pathCollection:ve,specializedFunctionValue:xe,runtimeArgExprsInOrder:Ze,deferredDropExpressions:Je}=Yo({functionValue:qo(f.value),functionType:f.type,expr:e,functionCalleeExpr:i,argExprs:f.args??a,callerEnv:t,context:n,isMethodCall:!!s});if(t=Ct(se),I.return.isUnquote)if(Rt(te)){let qt=S({expr:te.value,env:t,context:{...n}});return e.$={env:((b=qt.$)==null?void 0:b.env)||t,type:((F=qt.$)==null?void 0:F.type)||U,value:(M=qt.$)==null?void 0:M.value,originType:((L=qt.$)==null?void 0:L.originType)||((O=qt.$)==null?void 0:O.type)||U,pathCollection:((B=qt.$)==null?void 0:B.pathCollection)||[],macroExpansion:qt,variableName:(P=qt.$)==null?void 0:P.variableName},e}else throw p({token:e.token,errorMessage:`Expected macro function to return an Expr value, got:
1885
+ ${je(te)}`});let rt=(q=e.$)==null?void 0:q.variableName,Cn=U;if(ee(U)&&f.value&&Fe(f.value)){let qt=f.value.body;if((ne=qt.$)!=null&&ne.type){let an=qt.$.type;ee(an)&&an.resolvedConcreteType&&(an=an.resolvedConcreteType),Cn={...U,resolvedConcreteType:an}}}e.$={env:t,type:Cn,value:te,originType:Cn,pathCollection:ve,runtimeArgExprsInOrder:Ze,deferredDropExpressions:Je,variableName:rt},ze(e,!0),i.$={env:t,type:f.type,value:xe||f.value,pathCollection:[]},s&&(s.$={env:t,type:f.type,value:xe||f.value,pathCollection:[]})}return e}else if((ee(f.type)||Ne(f.type))&&nn(f.type)){let I=nn(f.type),{returnType:U,returnValue:te,callerEnv:se,pathCollection:ve,specializedFunctionValue:xe,runtimeArgExprsInOrder:Ze,deferredDropExpressions:Je}=Np(f);if(t=Ct(se),I.isFn.callType.return.isUnquote)if(Rt(te)){let rt=S({expr:te.value,env:t,context:{...n}});return e.$={env:((pe=rt.$)==null?void 0:pe.env)||t,type:((ue=rt.$)==null?void 0:ue.type)||U,value:(oe=rt.$)==null?void 0:oe.value,originType:((ye=rt.$)==null?void 0:ye.originType)||((ge=rt.$)==null?void 0:ge.type)||U,pathCollection:((Me=rt.$)==null?void 0:Me.pathCollection)||[],macroExpansion:rt},e}else throw p({token:e.token,errorMessage:`Expected macro closure to return an Expr value, got:
1886
+ ${je(te)}`});return e.$={env:t,type:U,value:te,originType:U,pathCollection:ve,runtimeArgExprsInOrder:Ze,deferredDropExpressions:Je},ze(e,!0),i.$={env:t,type:f.type,value:xe||f.value,pathCollection:[]},s&&(s.$={env:t,type:f.type,value:xe||f.value,pathCollection:[]}),e}else{let I=f.value;if(G(I)&&$e(I.value)){let U=I.value;e.$={env:t,type:U,originType:U,pathCollection:[]};let{values:te,pathCollection:se,callerEnv:ve,runtimeArgExprsInOrder:xe}=zo(f);if(t=ve,!te)throw p({token:i.token,errorMessage:"Error evaluating struct call."});let Ze=te.some(Je=>!Je)?void 0:bn(U,te);return e.$.value=$t(U)?void 0:Ze,e.$.pathCollection=se,e.$.env=t,e.$.runtimeArgExprsInOrder=xe,ze(e,!0),i.$={env:t,type:I.type,value:I,pathCollection:[]},e}else if(G(I)&&Ve(I.value)){let U=I.value;e.$={env:t,type:U,originType:U,pathCollection:[]};let te=U.variants.find(Je=>Je.name===U.selectedVariantName);if(!te)throw p({token:e.token,errorMessage:"Enum variant not selected for enum type"});let{values:se,pathCollection:ve,callerEnv:xe,runtimeArgExprsInOrder:Ze}=zo(f);if(t=xe,se.every(Je=>!!Je)){let Je=Jn(U,te.name,se);e.$.value=Je}return e.$.pathCollection=ve,e.$.env=t,e.$.runtimeArgExprsInOrder=Ze,ze(e,!0),i.$={env:t,type:I.type,value:I,pathCollection:[]},e}else if(G(I)&&ot(I.value)){let U=I.value;e.$={env:t,type:U,originType:U,pathCollection:[]};let{pathCollection:te,callerEnv:se,runtimeArgExprsInOrder:ve}=zo(f);return t=se,e.$.value=void 0,e.$.pathCollection=te,e.$.env=t,e.$.runtimeArgExprsInOrder=ve,ze(e,!0),i.$={env:t,type:I.type,value:I,pathCollection:[]},e}else if(G(I)&&Ee(I.value)){let{moduleValue:U,callerEnv:te}=Dp(f);return t=te,e.$={env:t,type:U.type,value:U,originType:U.type,pathCollection:[]},i.$={env:t,type:I.type,value:I,pathCollection:[]},e}else{if(G(I)&&ce(I.value))return e;if(G(I)&&Oe(I.value))return e;if(G(I)&&mt(I.value))return e;if(G(I)&&(ee(I.value)||Ne(I.value))){if(f.result.kind==="type"&&ee(I.value)&&I.value.recursiveTypeRef){let U=I.value;e.$={env:t,type:U,originType:U,pathCollection:[]};let{pathCollection:te,callerEnv:se,runtimeArgExprsInOrder:ve}=zo(f);return t=se,e.$.value=void 0,e.$.pathCollection=te,e.$.env=t,e.$.runtimeArgExprsInOrder=ve,ze(e,!0),i.$={env:t,type:I.type,value:I,pathCollection:[]},e}return e}else{if(G(I)&&jo(I.value))return e;if(G(I)&&De(I.value))return e;if(G(I)&&gt(I.value))return e;if(Oe(f.type)||at(f.type)){let{value:U,index:te,type:se,callerEnv:ve}=Op(f),xe=((Se=i.$)==null?void 0:Se.pathCollection)??[];return a.length===1&&typeof te=="number"&&(xe.length>0?xe=xe.map(Ze=>[...Ze,te.toString()]):(Re=i.$)!=null&&Re.variableName&&(xe=[[i.$.variableName,te.toString()]])),e.$={env:ve,type:se,value:U,originType:((Te=i.$)==null?void 0:Te.originType)??f.type,pathCollection:xe,isAccessingProperty:!0},i.$={env:t,type:f.type,value:f.value,pathCollection:((be=i.$)==null?void 0:be.pathCollection)??[],isAccessingProperty:!0},ze(e,!1),e}}}}throw p({token:e.token,errorMessage:`Function call is not implemented yet:
1887
+ ${T(e)}`})}function lm(e){var o;if(!((o=e.$)!=null&&o.type)||!He(e.$.type))throw p({token:e.token,errorMessage:`Expected tuple type for drop generation:
1888
+ ${T(e)}`});if(!e.$.variableName)throw p({token:e.token,errorMessage:`Expected variable name for drop generation:
1889
+ ${T(e)}`});let n=e.$.type.fields.map((i,a)=>({index:a,element:i,needsDrop:qe(ee(i.type)&&i.type.resolvedConcreteType?i.type.resolvedConcreteType:i.type)})).filter(({needsDrop:i})=>i);return n.length===0?"":`begin(
1890
+ ${n.map(({index:i})=>`${C.___drop[0]}(${e.$.variableName}.${i})`).join(`,
1891
+ `)}
1892
+ )`}function um(e){var s;if(!((s=e.$)!=null&&s.type)||!Oe(e.$.type))throw p({token:e.token,errorMessage:`Expected array type for drop generation:
1893
+ ${T(e)}`});if(!e.$.variableName)throw p({token:e.token,errorMessage:`Expected variable name for drop generation:
1894
+ ${T(e)}`});let t=e.$.type,n=t.childType,r=ee(n)&&n.resolvedConcreteType?n.resolvedConcreteType:n;if(!qe(r))return"";let o=t.length;if(!ct(o))return"";let i=o.value,a=[];for(let l=0;l<i;l++)a.push(`${C.___drop[0]}(${e.$.variableName}(${l}))`);return`begin(
1895
+ ${a.join(`,
1896
+ `)}
1897
+ )`}function ec({expr:e,env:t,context:n}){var u,d;Ce(e,C.___drop,1);let r=e.args[0];if(!j(r))throw p({token:r.token,errorMessage:`Expected variable name as argument to "${C.___drop[0]}":
1898
+ ${T(r)}`});let o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.___drop[0]}":
1899
+ ${T(r)}`});t=o.$.env;let i=(u=o.$)==null?void 0:u.variableName;if(!i)throw p({token:r.token,errorMessage:`Expected variable name as argument to "${C.___drop[0]}":
1900
+ ${T(r)}`});let a=o.$.type,l=ee(a)&&a.resolvedConcreteType&&!Pe(a)?a.resolvedConcreteType:a;if(qe(l))if(He(l)){let c=lm(o);if(c){let f=Gt(c);t=Mn(o,t,!0);let m=S({expr:f,env:t,context:{...n}});return V(m)?(Yn(e,m),e):m}else return t=Mn(o,t,!0),e.$={env:t,type:J.type,value:J,pathCollection:[]},e}else if(Oe(l)){let c=um(o);if(c){let f=Gt(c);t=Mn(o,t,!0);let m=S({expr:f,env:t,context:{...n}});return V(m)?(Yn(e,m),e):m}else return t=Mn(o,t,!0),e.$={env:t,type:J.type,value:J,pathCollection:[]},e}else{let c=Gt(`(${T(o)}).___drop()`),f=En({env:t,context:{...n},expr:c});if(!((d=f.$)!=null&&d.env))throw p({token:e.token,errorMessage:`Failed to get updated environment after evaluating "${C.___drop[0]}" method call:
1901
+ ${T(c)}`});let y=me(f.$.env,i).at(-1);if(!y)throw p({token:e.token,errorMessage:`Variable "${i}" not found in environment after evaluating "${C.___drop[0]}" method call:
1902
+ ${T(c)}`});let g=Xe(f.$.env,y,{...y,consumedAtToken:e.token});return f.$.env=g,f}else return t=Mn(o,t,!0),e.$={env:t,type:J.type,value:J,pathCollection:[]},e}function pm(e){var o;if(!((o=e.$)!=null&&o.type)||!He(e.$.type))throw new Error("Expected tuple type for dup generation");if(!e.$.variableName)throw p({token:e.token,errorMessage:`Expected variable name for drop generation:
1903
+ ${T(e)}`});let n=e.$.type.fields.map((i,a)=>({index:a,element:i,needsDup:qe(i.type)}));return n.every(({needsDup:i})=>!i)?"":`begin(
1904
+ ${n.map(({index:i,needsDup:a})=>{var s;return a?`${C.___dup[0]}(${(s=e.$)==null?void 0:s.variableName}.${i})`:""}).filter(i=>i.length>0).join(`,
1905
+ `)}
1906
+ )`}function cm(e){var r;if(!((r=e.$)!=null&&r.type)||!Oe(e.$.type))throw new Error("Expected array type for dup generation");if(!e.$.variableName)throw p({token:e.token,errorMessage:`Expected variable name for dup generation:
1907
+ ${T(e)}`});let t=e.$.type,n=t.childType;if(!qe(n))return"";if(ct(t.length)){let o=t.length.value;return`begin(
1908
+ ${Array.from({length:Number(o)},(i,a)=>{var s;return`${C.___dup[0]}(${(s=e.$)==null?void 0:s.variableName}(${a}))`}).join(", ")}
1909
+ )`}else return""}function tc({expr:e,env:t,context:n}){var s;Ce(e,C.___dup,1);let r=e.args[0];if(!j(r))throw p({token:r.token,errorMessage:`Expected variable name as argument to "${C.___dup[0]}":
1910
+ ${T(r)}`});let o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${C.___dup[0]}":
1911
+ ${T(r)}`});t=o.$.env;let i=o.$.type,a=ee(i)&&i.resolvedConcreteType?i.resolvedConcreteType:i;if(qe(a))if(He(a)){let l=pm(o);if(l){let u=Gt(l),d=S({expr:u,env:t,context:{...n}});return V(d)?(Yn(e,d),e):d}else return e.$={env:t,type:o.$.type,value:void 0,pathCollection:[]},e}else if(Oe(a)){let l=cm(o);if(l){let u=Gt(l),d=S({expr:u,env:t,context:{...n}});return V(d)?(Yn(e,d),e):d}else return e.$={env:t,type:o.$.type,value:void 0,pathCollection:[]},e}else{let l=Gt(`(${T(o)}).___dup()`),u=En({env:t,context:{...n},expr:l}),d=(s=u.$)==null?void 0:s.variableName;if(!d||!u.$)throw p({token:e.token,errorMessage:`Failed to evaluate the "${C.___dup[0]}" method call:
1912
+ ${T(l)}`});let c=me(u.$.env,d);if(c.length){let f=c[c.length-1];if(f.isOwningTheGcValue){let m=Xe(u.$.env,f,{...f,isOwningTheGcValue:!1});u.$.env=m}}return u}return e.$={env:t,type:o.$.type,value:void 0,pathCollection:[]},e}function nc({expr:e,env:t,context:n}){Ce(e,C.__yo_expr_is_atom,1);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
1913
+ ${T(r)}`});if(!dt(o.$.type))throw p({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
1914
+ ${T(r)}`});let i=o.$.value;if(!i)throw p({token:r.token,errorMessage:`Expected expression value for "${e.func.token.value}" argument, got:
1915
+ ${T(r)}`});let a=Rt(i)?it(j(i.value)):re(Qe());return e.$={env:o.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function rc({expr:e,env:t,context:n}){Ce(e,C.__yo_expr_is_fn_call,1);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
1916
+ ${T(r)}`});if(!dt(o.$.type))throw p({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
1917
+ ${T(r)}`});let i=o.$.value;if(!i)throw p({token:r.token,errorMessage:`Expected expression value for "${e.func.token.value}" argument, got:
1918
+ ${T(r)}`});let a=Rt(i)?it(V(i.value)):re(Qe());return e.$={env:o.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function oc({expr:e,env:t,context:n}){Ce(e,C.__yo_expr_get_callee,1);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
1919
+ ${T(r)}`});if(!dt(o.$.type))throw p({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
1920
+ ${T(r)}`});let i=o.$.value;if(!i)throw p({token:r.token,errorMessage:`Expected expression value for "${e.func.token.value}" argument, got:
1921
+ ${T(r)}`});if(e.$={env:o.$.env,type:jt(),value:re(jt()),pathCollection:[],isAccessingProperty:!1},Rt(i))if(V(i.value)){let a=i.value.func,s=Fn(a);e.$.value=s}else throw p({token:r.token,errorMessage:`Expected function call expression for argument, got:
1922
+ ${T(e)}`});return e}function ic({expr:e,env:t,context:n}){Ce(e,C.__yo_expr_get_args,1);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
1923
+ ${T(r)}`});if(!dt(o.$.type))throw p({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
1924
+ ${T(r)}`});let i=o.$.value;if(!i)throw p({token:r.token,errorMessage:`Expected expression value for "${e.func.token.value}" argument, got:
1925
+ ${T(r)}`});if(e.$={env:o.$.env,type:mo(),value:re(mo()),pathCollection:[],isAccessingProperty:!1},Rt(i))if(V(i.value)){let a=i.value.args,s=kn(jt(),a.map(l=>Fn(l)));e.$.value=s}else throw p({token:r.token,errorMessage:`Expected function call expression for argument, got:
1926
+ ${T(e)}`});return e}function ac({expr:e,env:t,context:n}){Ce(e,C.__yo_expr_to_string,1);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
1927
+ ${T(r)}`});if(!dt(o.$.type))throw p({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" argument, got:
1928
+ ${T(r)}`});let i=o.$.value;if(!i)throw p({token:r.token,errorMessage:`Expected expression value for "${e.func.token.value}" argument, got:
1929
+ ${T(r)}`});return e.$={env:o.$.env,type:Ot(),value:re(Ot()),pathCollection:[],isAccessingProperty:!1},Rt(i)&&(e.$.value=un(T(i.value))),e}function sc({expr:e,env:t,context:n}){Ce(e,C.__yo_expr_eq,2);let r=e.args[0],o=e.args[1],i=S({expr:r,env:t,context:{...n}});if(!i.$)throw p({token:r.token,errorMessage:`Failed to evaluate the first argument expression for "${e.func.token.value}":
1930
+ ${T(r)}`});if(!dt(i.$.type))throw p({token:r.token,errorMessage:`Expected expression type for "${e.func.token.value}" first argument, got:
1931
+ ${T(r)}`});let a=i.$.value;if(!a)throw p({token:r.token,errorMessage:`Expected expression value for "${e.func.token.value}" first argument, got:
1932
+ ${T(r)}`});t=i.$.env;let s=S({expr:o,env:t,context:{...n}});if(!s.$)throw p({token:o.token,errorMessage:`Failed to evaluate the second argument expression for "${e.func.token.value}":
1933
+ ${T(o)}`});if(!dt(s.$.type))throw p({token:o.token,errorMessage:`Expected expression type for "${e.func.token.value}" second argument, got:
1934
+ ${T(o)}`});let l=s.$.value;if(!l)throw p({token:o.token,errorMessage:`Expected expression value for "${e.func.token.value}" second argument, got:
1935
+ ${T(o)}`});t=s.$.env;let u;return Rt(a)&&Rt(l)?u=it(Lt({value:a,env:t},{value:l,env:t})):u=re(Qe()),e.$={env:t,type:u.type,value:u,pathCollection:[],isAccessingProperty:!1},e}function lc({expr:e,env:t,context:n}){var l;if(e.args.length!==1)throw p({token:e.token,errorMessage:`await expects exactly 1 argument, got ${e.args.length}.`});if(((l=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:l.kind)!=="async-block")throw p({token:e.token,errorMessage:'"await" can only be used inside an "async" block.'});let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:"Failed to evaluate await argument expression."});t=o.$.env;let i=o.$.type,a=Ht(i);if(!a)throw p({token:r.token,errorMessage:`await expects type that implements Future(T), but got: ${x(i)}`});let s=a.isFuture.outputType;return e.$={env:t,type:s,value:void 0,pathCollection:[]},e}function uc({expr:e,env:t}){return Ce(e,C.__yo_gc_collect,0),e.$={env:t,type:J.type,value:J,pathCollection:[]},e}function pc({expr:e,env:t,context:n}){let r=e.args[0],o="";if(r){if(e.args.length>1)throw p({token:e.args[1].token,errorMessage:`Expected "gensym" with 0 or 1 argument, got: ${e.args.length}`});let l=S({expr:r,env:t,context:{...n}});if(!l.$)throw p({token:r.token,errorMessage:`Failed to evaluate the prefix argument for "gensym":
1936
+ ${T(r)}`});if(!We(l.$.value))throw p({token:r.token,errorMessage:`Expected compt_string for prefix argument, got:
1937
+ ${T(r)}`});o=l.$.value.value}let i=o+ht(),a={tag:"Atom",token:{modulePath:t.modulePath,inputString:t.inputString,type:"identifier",position:e.func.token.position,value:i}},s=Fn(a);return e.$={env:t,pathCollection:[],type:s.type,value:s},e}function cc({expr:e,env:t,context:n}){if(!v(e,A.Impl))throw p({token:e.token,errorMessage:`Expected "Impl", got:
1938
+ ${T(e)}`});if(e.args.length===0)throw p({token:e.token,errorMessage:"Impl requires at least one module argument."});let r=[],o=[],i;for(let l of e.args){let u=V(l)&&v(l,"!")&&l.args.length===1,d=u?l.args[0]:l,c=S({expr:d,env:t,context:{...n}});if(!c.$)throw p({token:d.token,errorMessage:"Failed to evaluate Impl argument."});if(t=c.$.env,!c.$.value||!G(c.$.value)||!Ee(c.$.value.value))throw p({token:d.token,errorMessage:`Impl argument must be a module type, got: ${T(d)}`});let f=c.$.value.value;if(_u(f)){if(i!==void 0)throw p({token:d.token,errorMessage:"Impl can only have one Concrete(T) specifier"});i=f.isConcrete.concreteType;continue}u?o.push(f):r.push(f)}let a=wn(lt(),"Impl",void 0,r,o);i!==void 0&&(a.resolvedConcreteType=i);let s=ae(a);return e.$={env:t,type:s.type,value:s,pathCollection:[]},e}function Wo({expr:e,env:t,context:n}){if(j(e))return e;{let r=e.func,o=e.args;if(j(r)&&en(r,A.unquote)&&o.length===1){let i=o[0],a=S({expr:i,env:t,context:{...n}});if(!a.$||!dt(a.$.type)||!a.$.value)throw p({token:i.token,errorMessage:`Expected expression type for "unquote" argument, got:
1939
+ ${T(i)}`});let s=a.$.value;if(Ue(s))return e;if(Rt(s))return s.value;throw p({token:i.token,errorMessage:`Expected expression value for "unquote" argument, got:
1940
+ ${je(s)}`})}else{let i=Wo({expr:r,env:t,context:{...n}}),a=[];for(let l=0;l<o.length;l++){let u=o[l];if(V(u)&&v(u,A.unquote_splicing)){let d;if(u.args.length!==1)throw p({token:u.token,errorMessage:`Expected exactly one argument for "unquote_splicing", got ${u.args.length}`});let c=u.args[0],f=S({expr:c,env:t,context:{...n}});if(!f.$||!Er(f.$.type)||!f.$.value)throw p({token:c.token,errorMessage:`Expected ExprList for "unquote_splicing" argument, got:
1941
+ ${T(c)}`});let m=f.$.value;Kl(m)&&m.elements.every(y=>Rt(y))&&(d=m.elements.map(y=>y.value)),d?d.forEach(y=>{a.push(y)}):a.push(u)}else a.push(Wo({expr:u,env:t,context:{...n}}))}return{...e,func:i,args:a}}}}function fc({expr:e,env:t,context:n}){Ce(e,A.quote,1);let r=Wo({expr:e.args[0],env:t,context:{...n}}),o=Fn(r);return e.$={env:t,type:o.type,value:o,pathCollection:[]},e}function dc({expr:e,env:t,context:n}){if(e.args.length!==1&&e.args.length!==2)throw p({token:e.token,errorMessage:`"macro_expand" expects 1 or 2 arguments, but got ${e.args.length}`});let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "macro_expand":
1942
+ ${r.toString()}`});if(t=o.$.env,!dt(o.$.type))throw p({token:r.token,errorMessage:`The argument expression for "macro_expand" must be an Expr value, but got: ${x(o.$.type)}`});let i=null;if(e.args.length===2){let s=e.args[1],l=S({expr:s,env:t,context:{...n}});if(!l.$)throw p({token:s.token,errorMessage:`Failed to evaluate the level argument expression for "macro_expand":
1943
+ ${s.toString()}`});if(!kt(l.$.type))throw p({token:s.token,errorMessage:`The level argument for "macro_expand" must be a compt_int value, but got: ${x(l.$.type)}`});if(!Zn(l.$.value))throw p({token:s.token,errorMessage:'The level argument for "macro_expand" must be a compt_int value'});if(i=l.$.value.value,i<0)throw p({token:s.token,errorMessage:`The level argument for "macro_expand" must be non-negative, but got: ${i}`})}let a=o.$.value;if(Rt(a)){let s=a.value,l=t,u=0;for(;V(s)&&(i===null||u<i);)try{let d=En({expr:s,env:l,context:{...n},forMacroExpansion:!0});if(!d.$)break;if(l=d.$.env,Rt(d.$.value)){let c=d.$.value.value;if(T(c)===T(s))break;s=c,u++}else break}catch(d){if(d instanceof Jt&&d.isAssertionError)throw d;break}s=Wo({expr:s,env:l,context:{...n}}),e.$={env:l,type:jt(),value:Fn(s),pathCollection:o.$.pathCollection}}else e.$={env:t,type:o.$.type,value:o.$.value,pathCollection:o.$.pathCollection};return e}function ar(e){return e&&(Zn(e)||ri(e)||ct(e))?e.value:null}function rs(e,t){if(t.tag==="compt_int")return Pn(e);if(t.tag==="compt_float")return oi(e);if(In(t))return re(t);let n=fm(t),r=dm(e,t);return Dt(n,r)}function fm(e){switch(e.tag){case"u8":return"U8";case"i8":return"I8";case"u16":return"U16";case"i16":return"I16";case"u32":return"U32";case"i32":return"I32";case"u64":return"U64";case"i64":return"I64";case"usize":return"Usize";case"isize":return"Isize";case"f32":return"F32";case"f64":return"F64";default:throw new Error(`Unsupported numeric type: ${e.tag}`)}}function dm(e,t){switch(t.tag){case"u8":return Math.floor(Math.abs(e))%256;case"i8":return Math.max(-128,Math.min(127,Math.floor(e)));case"u16":return Math.floor(Math.abs(e))%65536;case"i16":return Math.max(-32768,Math.min(32767,Math.floor(e)));case"u32":return Math.floor(Math.abs(e))%4294967296;case"i32":return Math.max(-2147483648,Math.min(2147483647,Math.floor(e)));case"u64":return Math.max(0,Math.floor(e));case"i64":return Math.floor(e);case"usize":return Math.max(0,Math.floor(e));case"isize":return Math.floor(e);case"f32":case"f64":return e;default:return e}}function Ho(e,t,n,r){let o=ar(e),i=ar(t);return o===null||i===null?re(n):rs(r(o,i),n)??re(n)}function io(e,t,n){let r=ar(e),o=ar(t);return r===null||o===null?re(Qe()):it(n(r,o))}function mm(e,t,n){let r=ar(e);return r===null?re(t):rs(n(r),t)??re(t)}function mc({expr:e,env:t,context:n}){let r=e.func.token.value,o=/^__yo_(u8|i8|u16|i16|u32|i32|u64|i64|usize|isize|f32|f64|compt_int|compt_float|char|short|ushort|int|uint|long|ulong|longlong|ulonglong|longdouble)_(add|sub|mul|div|mod|eq|neq|lt|lte|gt|gte|neg|to_string|as)$/,i=r.match(o);if(!i)throw p({token:e.token,errorMessage:`Expected numeric function, got: ${r}`});let[,a,s]=i,u=(()=>{switch(a){case"u8":return pr();case"i8":return Sr();case"u16":return Lr();case"i16":return Ar();case"u32":return Ir();case"i32":return cr();case"u64":return Nr();case"i64":return Dr();case"usize":return _t();case"isize":return Mr();case"f32":return Or();case"f64":return fr();case"char":return zi();case"short":return Gi();case"ushort":return Ri();case"int":return qi();case"uint":return Yi();case"long":return ji();case"ulong":return Wi();case"longlong":return Hi();case"ulonglong":return Ki();case"longdouble":return Qi();case"compt_int":return ur();case"compt_float":return xr();default:throw new Error(`Unknown numeric type: ${a}`)}})();if(s==="neg"||s==="to_string"){let h=S({expr:e.args[0],env:t,context:{...n}});if(!h.$||!h.$.value)throw p({token:h.token,errorMessage:`Expected ${a} type for "${r}" argument, got:
1944
+ ${T(h)}`});t=h.$.env;let _;if(s==="neg")ct(h.$.value)?_=mm(h.$.value,u,E=>-E):_=re(u);else if(s==="to_string")if(ct(h.$.value)){let E=ar(h.$.value);E!==null?_=un(E.toString()):_=re(Ot())}else _=re(Ot());else throw p({token:e.token,errorMessage:`Unexpected unary operation: ${s}`});return e.$={env:t,type:s==="to_string"?Ot():u,value:_,pathCollection:[]},e}if(s==="as"){let h=S({expr:e.args[0],env:t,context:{...n}});if(!h.$)throw p({token:h.token,errorMessage:`Expected numeric value for "${r}" first argument, got:
1945
+ ${T(h)}`});t=h.$.env;let _=e.args[1],E=S({expr:_,env:t,context:{...n}});if(!E.$)throw p({token:E.token,errorMessage:`Failed to evaluate the argument ${T(E)}`});if(t=E.$.env,!E.$.value)throw p({token:E.token,errorMessage:`Expected type for "${r}" second argument, got:
1946
+ ${T(E)}`});if(!ft(E.$.type))throw p({token:E.token,errorMessage:`Expected type for "${r}" second argument, got:
1947
+ ${T(E)}`});let k=E.$.value;if(!G(k))throw p({token:E.token,errorMessage:`Expected type value for "${r}" second argument, got:
1948
+ ${T(E)}`});let w=k.value,$=ar(h.$.value),b,F;return $!==null?(b=rs($,w),F=w):(b=re(w),F=w),e.$={env:t,type:F,value:b,pathCollection:[]},e}let d=S({expr:e.args[0],env:t,context:{...n}});if(!d.$||!d.$.value)throw p({token:d.token,errorMessage:`Expected ${a} type for "${r}" left argument, got:
1949
+ ${T(d)}`});t=d.$.env;let c=S({expr:e.args[1],env:t,context:{...n}});if(!c.$||!c.$.value)throw p({token:c.token,errorMessage:`Expected ${a} type for "${r}" right argument, got:
1950
+ ${T(c)}`});t=c.$.env;let f=d.$.value,m=c.$.value,y,g;switch(s){case"add":y=Ho(f,m,u,(h,_)=>h+_),g=u;break;case"sub":y=Ho(f,m,u,(h,_)=>h-_),g=u;break;case"mul":y=Ho(f,m,u,(h,_)=>h*_),g=u;break;case"div":{if(ar(m)===0)throw p({token:c.token,errorMessage:`Division by zero in "${r}" operation`});y=Ho(f,m,u,(_,E)=>Tr(u)||u.tag==="compt_int"?Math.trunc(_/E):_/E),g=u;break}case"mod":{if($r(u))throw p({token:e.token,errorMessage:`Modulo operation not supported for floating point types: ${a}`});if(ar(m)===0)throw p({token:c.token,errorMessage:`Modulo by zero in "${r}" operation`});y=Ho(f,m,u,(_,E)=>_%E),g=u;break}case"eq":y=io(f,m,(h,_)=>h===_),g=Qe();break;case"neq":y=io(f,m,(h,_)=>h!==_),g=Qe();break;case"lt":y=io(f,m,(h,_)=>h<_),g=Qe();break;case"lte":y=io(f,m,(h,_)=>h<=_),g=Qe();break;case"gt":y=io(f,m,(h,_)=>h>_),g=Qe();break;case"gte":y=io(f,m,(h,_)=>h>=_),g=Qe();break;default:throw p({token:e.token,errorMessage:`Unexpected binary operation: ${s}`})}return e.$={env:t,type:g,value:y,pathCollection:[]},e}function yc({expr:e,env:t,context:n}){var o;if(((o=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:o.kind)!=="function-body")throw p({token:e.token,errorMessage:"panic() can only be called inside a function body"});let r=n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type;if(e.args.length>0){let i=e.args[0],a=S({expr:i,env:t,context:{...n}});if(!a.$)throw p({token:i.token,errorMessage:"Failed to evaluate panic message"});if(!a.$.value||!We(a.$.value)&&!(Ue(a.$.value)&&Pt(a.$.value.type)))throw p({token:i.token,errorMessage:"panic message must be a compt_string"})}return e.$={env:t,type:r,value:void 0,pathCollection:[]},e}function _c({expr:e,env:t,context:n}){Ce(e,C.__yo_address_of,1);let r=e.args[0],o=n.expectedType;o&&De(o.type)&&(o={...o,type:o.type.childType});let i=S({expr:r,env:t,context:{...n,expectedType:o}});if(!i.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for reference:
1951
+ ${T(r)}`});if(t=i.$.env,G(i.$.value))throw p({token:r.token,errorMessage:`Cannot create a pointer to a type. Did you mean to use "*"?
1952
+ ${T(r)}`});{let a=i.$.type,s=hr(a);return e.$={env:t,type:s,value:void 0,pathCollection:i.$.pathCollection},ze(e,!1),e}}function gc({expr:e,env:t,context:n}){Ce(e,C.rc,1);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:"Failed to evaluate expression."});return t=o.$.env,Xt(o.$.type)?e.$={env:t,type:_t(),value:void 0,pathCollection:[]}:e.$={env:t,type:_t(),value:Dt("Usize",1),pathCollection:[]},e}function hc({expr:e,env:t,context:n}){Ce(e,C.sizeof,1);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:"Failed to evaluate expression."});t=o.$.env;let i;o.$.value&&G(o.$.value)?i=o.$.value.value:i=o.$.type;let a=dr(i),s;return a===null?s=re(_t()):s=Dt("Usize",Math.ceil(a/8)),e.$={env:t,type:_t(),value:s,pathCollection:[]},e}function sr({expr:e,type:t,env:n,context:r}){var o,i,a,s,l,u,d,c,f,m;if(He(t)&&V(e)&&v(e,A.tuple)){if(t.fields.length!==e.args.length)throw p({token:e.token,errorMessage:`Tuple size mismatch: expected ${t.fields.length} fields, got ${e.args.length}`});for(let y=0;y<t.fields.length;y++){let g=t.fields[y].type,h=e.args[y],{env:_}=sr({expr:h,type:g,env:n,context:{...r}});n=_}return e.$={env:n,type:t,pathCollection:[]},{expr:e,type:t,env:n}}else if(V(e)&&v(e,"_"))if($e(t)||ot(t)||Ee(t)){let y=En({expr:e,env:n,givenFunc:{type:At(t),value:ae(t)},context:{...r}});if(!((o=y.$)!=null&&o.type)||!((i=y.$)!=null&&i.env))throw p({token:e.token,errorMessage:`Failed to evaluate expr and type for struct:
1953
+ ${T(e)}`});return{expr:y,type:(a=y.$)==null?void 0:a.type,env:(s=y.$)==null?void 0:s.env}}else throw p({token:e.token,errorMessage:`Cannot use _ with type ${x(t)}. Only supported with struct types.`});else if(V(e)&&v(e,".",1))if(Ve(t)){let y=e.args[0];if(!j(y))throw p({token:e.token,errorMessage:`Expected identifier for enum variant, got ${T(y)}`});let g=y.token.value;if(!t.variants.find(E=>E.name===g))throw p({token:e.token,errorMessage:`Enum variant "${g}" not found in ${x(t)}`});let _={...t,selectedVariantName:g};return e.$={type:_,env:n,pathCollection:[]},{expr:e,type:_,env:n}}else throw p({token:e.token,errorMessage:`Cannot use . with type ${x(t)}. Only supported with enum types.`});else if(V(e)&&V(e.func)&&v(e.func,".",1))if(Ve(t)){let y=e.func,g=y.args[0];if(!j(g))throw p({token:y.token,errorMessage:`Expected identifier for enum variant, got ${T(g)}`});let h=g.token.value;if(!t.variants.find(w=>w.name===h))throw p({token:e.token,errorMessage:`Enum variant "${h}" not found in ${x(t)}`});let E={...t,selectedVariantName:h},k=En({expr:e,env:n,givenFunc:{type:At(E),value:ae(E)},context:{...r}});if(!((l=k.$)!=null&&l.type)||!((u=k.$)!=null&&u.env))throw p({token:e.token,errorMessage:`Failed to evaluate expr and type for enum variant:
1954
+ ${T(e)}`});return{expr:k,type:(d=k.$)==null?void 0:d.type,env:(c=k.$)==null?void 0:c.env}}else throw p({token:e.token,errorMessage:`Cannot use . with type ${x(t)}. Only supported with enum types.`});else if((f=e.$)!=null&&f.type&&t)try{let{expectedEnv:y}=pt({type:t,env:n},{type:e.$.type,env:n});return{expr:e,type:t,env:y}}catch{return{expr:e,type:(m=e.$)==null?void 0:m.type,env:n}}else throw p({token:e.token,errorMessage:`Failed to synthesize the type and expr: ${T(e)}`})}function vc({expr:e,env:t,context:n}){var l,u;Ce(e,C.the,2);let r=e.args[0],o=e.args[1],i=S({expr:r,env:t,context:{...n}});if(!i.$)throw p({token:r.token,errorMessage:"Failed to evaluate type expression."});if(t=i.$.env,!i.$.value||!G(i.$.value))throw p({token:r.token,errorMessage:`First argument to 'the' must be a type, got ${i.$.type}`});let a=i.$.value.value,s=S({expr:o,env:t,context:{...n,expectedType:{type:a,env:t}}});if(!s.$)throw p({token:o.token,errorMessage:"Failed to evaluate value expression."});if(t=s.$.env,!W({type:a,env:t},{type:s.$.type,env:t})){if(Gr(a))try{let{expr:d,type:c,env:f}=sr({expr:o,type:a,env:t,context:{...n}});if(W({type:a,env:f},{type:c,env:f}))return e.$={env:f,type:a,value:(l=d.$)==null?void 0:l.value,pathCollection:((u=d.$)==null?void 0:u.pathCollection)||[]},e}catch{}throw p({token:o.token,errorMessage:`Type mismatch: expected '${x(a)}', got '${x(s.$.type)}'`})}return e.$={env:t,type:a,value:s.$.value,pathCollection:s.$.pathCollection},e}function Tc({expr:e,env:t,context:n}){Ce(e,C.__yo_type_to_string,1);let r=S({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
1955
+ ${T(r)}`});if(!ft(r.$.type))throw p({token:r.token,errorMessage:`Expected TypeHierarchy type for "${e.func.token.value}" argument, got:
1956
+ ${T(r)}`});let o=r.$.value;if(!o)throw p({token:r.token,errorMessage:`Expected type value for "${e.func.token.value}" argument, got:
1957
+ ${T(r)}`});return e.$={env:r.$.env,type:Ot(),value:re(Ot()),pathCollection:[],isAccessingProperty:!1},G(o)&&(e.$.value=un(x(o.value))),e}function $c({expr:e,env:t,context:n}){var f,m;let r=e.args,o=r[0],i=r[1],a=S({expr:o,env:t,context:{...n,expectedType:void 0,SelfType:void 0}});if(!G((f=a.$)==null?void 0:f.value))throw p({token:o.token,errorMessage:`Expected type, got:
1958
+ ${T(o)}`});let s=a.$.value.value;t=a.$.env;let l=S({expr:i,env:t,context:{...n,expectedType:void 0,SelfType:void 0}});if(!G((m=l.$)==null?void 0:m.value))throw p({token:i.token,errorMessage:`Expected type, got:
1959
+ ${T(i)}`});let u=l.$.value.value;t=l.$.env;let d=W({type:s,env:t},{type:u,env:t}),c=it(d);return e.$={env:t,type:c.type,value:c,pathCollection:[]},e}function Ec({expr:e,env:t,context:n}){Ce(e,C.__yo_type_contains_gc_type,1);let r=S({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
1960
+ ${T(r)}`});if(!ft(r.$.type))throw p({token:r.token,errorMessage:`Expected TypeHierarchy type for "${e.func.token.value}" argument, got:
1961
+ ${T(r)}`});let o=r.$.value;if(!o||!G(o))throw p({token:r.token,errorMessage:`Expected type value for "${e.func.token.value}" argument, got:
1962
+ ${T(r)}`});let i=qe(o.value),a=it(i);return e.$={env:r.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function Cc({expr:e,env:t,context:n}){Ce(e,C.__yo_type_can_form_gc_cycle,1);let r=S({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for "${e.func.token.value}":
1963
+ ${T(r)}`});if(!ft(r.$.type))throw p({token:r.token,errorMessage:`Expected TypeHierarchy type for "${e.func.token.value}" argument, got:
1964
+ ${T(r)}`});let o=r.$.value;if(!o||!G(o))throw p({token:r.token,errorMessage:`Expected type value for "${e.func.token.value}" argument, got:
1965
+ ${T(r)}`});let i=go(o.value),a=it(i);return e.$={env:r.$.env,type:a.type,value:a,pathCollection:[],isAccessingProperty:!1},e}function kc({expr:e,env:t,context:n}){Ce(e,C.__yo_type_impls,2);let r=S({expr:e.args[0],env:t,context:{...n}});if(!r.$)throw p({token:r.token,errorMessage:`Failed to evaluate the type argument for "${e.func.token.value}":
1966
+ ${T(r)}`});if(!ft(r.$.type))throw p({token:r.token,errorMessage:`Expected Type for first argument of "${e.func.token.value}", got:
1967
+ ${T(r)}`});let o=r.$.value;if(!o||!G(o))throw p({token:r.token,errorMessage:`Expected type value for first argument of "${e.func.token.value}", got:
1968
+ ${T(r)}`});t=r.$.env;let i=o.value,a=S({expr:e.args[1],env:t,context:{...n}});if(!a.$)throw p({token:a.token,errorMessage:`Failed to evaluate the module argument for "${e.func.token.value}":
1969
+ ${T(a)}`});let s;if(G(a.$.value)){let f=a.$.value;if(!Ee(f.value))throw p({token:a.token,errorMessage:`Expected module type for second argument of "${e.func.token.value}", got a non-module type`});s=f.value}else if(Ee(a.$.type))s=a.$.type;else{if(ft(a.$.type))return e.$={env:a.$.env,type:Qe(),value:re(Qe()),pathCollection:[],isAccessingProperty:!1},e;throw p({token:a.token,errorMessage:`Expected module type for second argument of "${e.func.token.value}", got:
1970
+ ${T(a)}`})}t=a.$.env;let l={...s,receiverType:i},u=!1,d=i.module;if(d)for(let f of d.fields){if(!f.assignedValue||!Ke(f.assignedValue))continue;let y=f.assignedValue.type;if(W({type:l,env:t},{type:y,env:t})){u=!0;break}}u||oa({concreteType:i,moduleType:s,env:t})&&(u=!0);let c=it(u);return e.$={env:t,type:c.type,value:c,pathCollection:[],isAccessingProperty:!1},e}function bc({expr:e,env:t}){Ce(e,C.va_start);for(let n=0;n<e.args.length;n++){let r=e.args[n];if(!j(r)||!nt(r))throw p({token:r.token,errorMessage:`Invalid argument for va_start. Expected identifier, got:
1971
+ ${T(r)}`});if(n===0){let o=r.token.value,i=me(t,o);if(i.length===0)throw p({token:r.token,errorMessage:`Variable '${o}' not found in the environment.`});let a=i[i.length-1];t=Xe(t,a,{...a,initializedAtToken:r.token})}if(n===1){let o=r.token.value;if(me(t,o).length===0)throw p({token:r.token,errorMessage:`Variable '${o}' not found in the environment.`})}}return e.$={type:J.type,value:J,env:t,pathCollection:[]},e}function Fc({expr:e,env:t,context:n}){var a;Ce(e,C.__yo_var_print_info,1);let r=e.args[0],o=S({expr:r,env:t,context:n});o.$&&(t=o.$.env);let i=(a=o.$)==null?void 0:a.variableName;if(i){let s=me(t,i);if(s.length>0){let l=s.at(-1);console.log(Fu(l))}}return e.$={env:t,type:J.type,value:J,pathCollection:[]},e}function wc({expr:e,env:t,context:n}){var s;Ce(e,C.__yo_var_is_owning_the_gc_value,1);let r=e.args[0],o=S({expr:r,env:t,context:n});o.$&&(t=o.$.env);let i=(s=o.$)==null?void 0:s.variableName,a=!1;if(i){let l=me(t,i);l.length>0&&(a=l.at(-1).isOwningTheGcValue)}return e.$={env:t,type:Qe(),value:it(a),pathCollection:[]},e}function Vc({expr:e,env:t,context:n}){var s;Ce(e,C.__yo_var_has_other_aliases,1);let r=e.args[0],o=S({expr:r,env:t,context:n});o.$&&(t=o.$.env);let i=(s=o.$)==null?void 0:s.variableName,a=!1;if(i){let l=me(t,i);if(l.length>0){let u=l.at(-1);if(u.isOwningTheSameGcValueAs)a=!0;else{let c=u.id;for(let f=t.frames.length-1;f>=0;f--){let m=t.frames[f];for(let y=0;y<m.variables.length;y++){let g=m.variables[y];if(g.isOwningTheSameGcValueAs&&g.isOwningTheSameGcValueAs.id===c){a=!0;break}}}}}}return e.$={env:t,type:Qe(),value:it(a),pathCollection:[]},e}function xc({expr:e,env:t,context:n}){let r=e.args[0],o=n.expectedType;o&&De(o.type)&&(o={...o,type:o.type.childType});let i=S({expr:r,env:t,context:{...n,expectedType:o}});if(!i.$)throw p({token:r.token,errorMessage:`Failed to evaluate the argument expression for pointer:
1972
+ ${T(r)}`});if(t=i.$.env,G(i.$.value)){let s=i.$.value.value,l=hr(s),u=ae(l);return e.$={env:t,type:u.type,value:u,pathCollection:[]},e}else throw p({token:r.token,errorMessage:`Cannot create a pointer to a value. Use "&" to create a pointer to a value:
1973
+ ${T(r)}`})}function Mc({expr:e,env:t,context:n}){if(!v(e,A.Array,2))throw p({token:e.token,errorMessage:`Expected "Array(compt(Type), compt(usize))" with 2 arguments, like "Array(i32, 10)"
1974
+ Got:
1975
+ ${T(e)}`});let r=e.args[0],o=e.args[1],i=j(o)&&o.token.value==="_",a=S({expr:r,env:t,context:{...n}});if(!a.$)throw p({token:r.token,errorMessage:`Failed to evaluate the element type expression:
1976
+ ${T(r)}`});if(!G(a.$.value))throw p({token:r.token,errorMessage:`Expected type for element type, got:
1977
+ ${T(r)}
1978
+
1979
+ If you are creating an array value with 1 element, please consider adding a "," in the end, like [1,]`});let s=a.$.value.value;if(i){let f=`_array_length_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,m=re(_t(),f),{env:y}=we({env:a.$.env,variable:{name:f,value:m,type:_t(),isCompileTimeOnly:!0,token:o.token,initializedAtToken:o.token,consumedAtToken:void 0,isOwningTheGcValue:!1}}),g=Gn(s,m),h=ae(g);return e.$={env:y,type:h.type,value:h,pathCollection:[]},e}let l=S({expr:o,env:t,context:{...n,expectedType:{type:_t(),env:t}}});if(!l.$)throw p({token:o.token,errorMessage:`Failed to evaluate the length expression:
1980
+ ${T(o)}`});if(!W({type:_t(),env:t},{type:l.$.type,env:t}))throw p({token:o.token,errorMessage:`Expected usize for length, got:
1981
+ ${T(o)}`});let u=l.$.value;if(!u)throw p({token:o.token,errorMessage:`Expected compile-time known value for length, got:
1982
+ ${T(o)}`});Ue(u)&&(u.type=_t());let d=Gn(s,u),c=ae(d);return e.$={env:l.$.env,type:c.type,value:c,pathCollection:[]},e}function Sc({expr:e,env:t,context:n}){return ma({expr:e,env:t,context:n})}function Lc({expr:e,env:t,context:n}){Ce(e,A.ComptList,1);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the element type expression:
1983
+ ${T(r)}`});if(!G(o.$.value))throw p({token:r.token,errorMessage:`Expected type for element type, got:
1984
+ ${T(r)}`});let i=o.$.value.value,a=po(i),s=ae(a);return e.$={env:o.$.env,type:s.type,value:s,pathCollection:[]},e}function Ac({expr:e,env:t,context:n}){if(e.args.length!==1)throw p({token:e.token,errorMessage:`Concrete type constructor expects exactly 1 argument, got ${e.args.length}. Usage: Concrete(T)`});let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the concrete type expression for Concrete:
1985
+ ${T(r)}`});if(t=o.$.env,!G(o.$.value))throw p({token:r.token,errorMessage:`Concrete type constructor expects a type as its argument, but got:
1986
+ ${T(r)}`});let i=o.$.value.value,a=Ie(t);return a.isConcrete={concreteType:i},a.id=`concrete_module_${i.id}`,e.$={env:t,type:At(a),value:ae(a),pathCollection:[]},e}function Ic({expr:e,env:t,context:n}){Ce(e,A.Dyn);let r=e.args,o=[],i=[];for(let u=0;u<r.length;u++){let d=r[u],c=V(d)&&v(d,"!")&&d.args.length===1,f=c?d.args[0]:d,m=S({expr:f,env:t,context:{...n}});if(!m.$||!m.$.value||!G(m.$.value)||!Ee(m.$.value.value))throw new Error(`Expected a module type for argument ${u+1} of 'dyn' expression.`);t=m.$.env;let y=m.$.value.value;if(c){if(i.some(g=>g.id===y.id))throw p({token:f.token,errorMessage:`Module type ${x(y)} is already included in negative constraints of '${A.Dyn}' expression.`});i.push(y)}else{if(o.some(g=>g.id===y.id))throw p({token:f.token,errorMessage:`Module type ${x(y)} is already included in '${A.Dyn}' expression.`});o.push(y)}}for(let u=0;u<o.length;u++){let d=o[u];for(let c=u+1;c<o.length;c++){let f=o[c];for(let m of d.fields)throw p({token:e.token,errorMessage:`Module types ${x(d)} and ${x(f)} have conflicting function name '${m.label}' in 'dyn' expression.`})}}let a=[C.___dup[0],C.___drop[0],C.___dispose[0],C.dispose[0]];for(let u of o)for(let d of u.fields)if(a.includes(d.label)&&ce(d.type))throw p({token:e.token,errorMessage:`Module type ${x(u)} cannot have function '${d.label}' as it is reserved in 'dyn' expression.`});let s=yo(o,t,i);t=co({dynType:s,env:t,context:n});let l=ae(s);return e.$={env:t,value:l,type:l.type,pathCollection:[]},e}function Nc({expr:e,env:t,context:n}){var s,l,u,d;if(!v(e,A.enum))throw p({token:e.token,errorMessage:`Expected "enum", got:
1987
+ ${T(e)}`});let r=au(t);Ma({enumType:r,env:t,context:n}),n.currentModulePath&&(r.definedInModulePath=n.currentModulePath,r.module.definedInModulePath=n.currentModulePath);let o=r.variants,i=r.module.fields;for(let c=0;c<e.args.length;c++){let f=e.args[c];if(V(f)&&(v(f,"::",2)||v(f,"=",2)||v(f,"?=",2))){let m=f,{field:y,env:g}=Dn({expr:m,env:t,tupleFieldIndex:c,context:{...n,SelfType:r},forType:"enum"});if(i.find(_=>_.label===y.label))throw p({token:m.token,errorMessage:`Duplicate label "${y.label}" in enum`});if(o.some(_=>_.name===y.label))throw p({token:m.token,errorMessage:`Duplicate label "${y.label}" in enum variants`});if(!y.isCompileTimeOnly)throw p({token:m.token,errorMessage:`Expected compile-time only field, got:
1988
+ ${T(y.exprs.expr)}`});if(y.defaultValue)throw p({token:((s=y.exprs.defaultValueExpr)==null?void 0:s.token)??y.exprs.expr.token,errorMessage:"Enum module field cannot have default value."});if(!y.assignedValue)throw p({token:((l=y.exprs.assignedValueExpr)==null?void 0:l.token)??y.exprs.expr.token,errorMessage:"Enum module field must have assigned value."});i.push(y),t=g}else if(j(f)){let m=f.token.value;if(!nt(f))throw p({token:f.token,errorMessage:`Expected identifier for enum variant, got:
1989
+ ${T(f)}`});o.push({name:m})}else{if(v(f,":"))throw p({token:f.token,errorMessage:"Enum variant with : is not implemented yet"});if(!nt(f.func))throw p({token:f.func.token,errorMessage:`Expected identifier for enum variant, got:
1990
+ ${T(f.func)}`});let m=f.func.token.value,y=[];for(let g=0;g<f.args.length;g++){let h=f.args[g],{field:_,env:E}=Dn({expr:h,env:t,tupleFieldIndex:g,context:{...n,SelfType:r},forType:"enum"});if(y.find(w=>w.label===_.label))throw p({token:V(h)?((u=h.args[0])==null?void 0:u.token)??h.token:h.token,errorMessage:`Duplicate field label "${_.label}" in enum variant`});if(_.assignedValue)throw p({token:((d=_.exprs.assignedValueExpr)==null?void 0:d.token)??_.exprs.expr.token,errorMessage:"Enum variant field cannot have compile-time assigned value."});y.push(_),t=E}o.push({name:m,fields:y})}}t=nu({enumType:r,env:t,context:n}),t=Jl({enumType:r,env:t,context:n});let a=ae(r);return e.$={env:t,value:a,type:a.type,pathCollection:[]},e.func.$=e.$,e}function Dc({expr:e,env:t,context:n}){if(!v(e,"->",2))throw p({token:e.token,errorMessage:`Expected -> operator for Fn module type, got:
1991
+ ${T(e)}`});let r=e.args[0],o=e.args[1];if(!V(r)||!v(r,A.Fn))throw p({token:r.token,errorMessage:`Expected Fn(...) for function trait, got:
1992
+ ${T(r)}`});let i=r.args,{parameters:a,forallParameters:s,variadicParameter:l,env:u}=ns({parameterExprs:i,env:t,context:{...n,isEvaluatingFunctionType:!0}}),d=S({expr:o,env:u,context:{...n,isEvaluatingFunctionType:!0}});if(!d.$)throw p({token:o.token,errorMessage:"Failed to evaluate return type for Fn module."});let c=d.$.value,f;if(G(c))f=c.value;else throw p({token:o.token,errorMessage:`Expected a type for Fn return type, got:
1993
+ ${T(o)}`});let m=Pr({parameters:a,forallParameters:s,variadicParameter:l,return_:{type:f,expr:o,isCompileTimeOnly:!1,isUnquote:!1,label:`fn_return_${ht()}`},env:Ct(u,!0),parametersFrame:u.frames[u.frames.length-1],isClosure:!0}),y=Ie(Ct(u,!0));return y.isFn={callType:m},t=Ct(u,!0),e.$={env:t,type:At(y),value:ae(y),pathCollection:[]},e}function Oc({expr:e,env:t,context:n}){if(e.args.length!==1)throw p({token:e.token,errorMessage:`Future type constructor expects exactly 1 argument, got ${e.args.length}. Usage: Future(T)`});let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the element type expression for Future:
1994
+ ${T(r)}`});if(t=o.$.env,!G(o.$.value))throw p({token:r.token,errorMessage:`Future type constructor expects a type as its first argument, but got:
1995
+ ${T(r)}`});let i=o.$.value.value,a=Ie(t);return a.isFuture={outputType:i},a.id=`future_module_${i.id}`,e.$={env:t,type:At(a),value:ae(a),pathCollection:[]},e}function Ko({expr:e,moduleFieldIndex:t,env:n,context:r,isForEvaluatingModuleType:o}){var h,_,E,k,w,$;let i,a=e,s,l,u,d,c,f,m;if(V(e)&&v(e,"?=",2)&&(u=e.args[1],a=e.args[0]),V(a)&&(v(a,"=",2)||v(a,"::",2)||v(a,":=",2))){if(v(a,"::",2))throw p({token:a.token,errorMessage:`Cannot use "::" for module field. Use ":=" instead.
1996
+ All module fields are compile-time only by default.`});c=a.args[1],a=a.args[0]}if(u&&c)throw p({token:e.token,errorMessage:"Cannot have both default value and required value for module field."});if(V(a)&&v(a,":",2)){if(s=a.args[0],l=a.args[1],V(s)&&v(s,A.compt,1))throw p({token:s.token,errorMessage:'No need to use "compt" modifier. All module fields are compile-time only by default.'});if(!j(s)&&!nt(s))throw p({token:s.token,errorMessage:`Expected identifier for tuple field label, got ${T(s)}`});i=s.token.value}else{if(V(a)&&v(a,A.compt,1))throw p({token:a.token,errorMessage:'No need to use "compt" modifier. All module fields are compile-time only by default.'});if(!u&&!c)throw p({token:e.token,errorMessage:`Expected label for module field, got ${T(a)}`});if(s=a,!nt(s))throw p({token:s.token,errorMessage:`Expected identifier for module field label, got ${T(s)}`});if(!j(s)&&!nt(s))throw p({token:s.token,errorMessage:`Expected identifier for module field label, got ${T(s)}`});i=s.token.value}let y=(h=r.expectedType)==null?void 0:h.type,g;if(y&&Ee(y)){let b=y.fields[t];if(!b)throw p({token:e.token,errorMessage:`Failed to get the field at index ${t}`});g=b.type}if(l){let b=S({expr:l,env:n,context:{...r,expectedType:g?{type:g,env:n}:void 0}});(_=b.$)!=null&&_.env&&(n=(E=b.$)==null?void 0:E.env);let F=(k=b.$)==null?void 0:k.value;if(!G(F))throw p({token:l.token,errorMessage:`(1) Expected type for module field, got ${T(l)}`});m=F.value}if(c){let b=m?{type:m,env:n}:g?{type:g,env:n}:void 0,F=S({expr:c,env:n,context:{...r,expectedType:b}});if(!F.$)throw p({token:c.token,errorMessage:`Failed to evaluate required value expression: ${T(c)}`});if(n=(w=F.$)==null?void 0:w.env,f=F.$.value,!f)throw p({token:c.token,errorMessage:`Expected compile-time known value for required value, got ${T(c)}`});let M=F.$.type;if(b){if(!W({type:b.type,env:n},{type:M,env:n}))throw p({token:c.token,errorMessage:`Assigned value type mismatch:
1997
+ Expected type: ${x(b.type)}
1998
+ Given type: ${x(M)}`});m=b.type}else m=M}if(u){let b=m?{type:m,env:n}:g?{type:g,env:n}:void 0,F=S({expr:u,env:n,context:{...r,expectedType:b}});if(!F.$)throw p({token:u.token,errorMessage:`Failed to evaluate default value expression: ${T(u)}`});if(n=F.$.env,d=($=F.$)==null?void 0:$.value,!d)throw p({token:u.token,errorMessage:`Expected compile-time known value for default value, got ${T(u)}`});let M=F.$.type;if(b){if(!W({type:b.type,env:n},{type:M,env:n}))throw p({token:u.token,errorMessage:`Default value type mismatch:
1999
+ Expected type: ${x(b.type)}
2000
+ Given type: ${x(M)}`});m=b.type}else m=M}if(!m)throw p({token:e.token,errorMessage:"Failed to infer the field type"});if(o&&u&&!ce(m))throw p({token:u.token,errorMessage:`Default values (?=) are only allowed for function type module elemen
2001
+ ts (excluding closures).
2002
+ Module field "${i??"unnamed"}" has type: ${x(m)}
2003
+
2004
+ To avoid circular dependency issues, please explicitly provide the value for this field.`});return s&&(s.$={env:n,type:m,value:f??re(m,i),pathCollection:[]}),e!==l&&(e.$={env:n,value:J,type:J.type,pathCollection:[]}),{field:{label:i??`$field_${ht()}`,type:m,exprs:{expr:e,labelExpr:s,typeExpr:l,defaultValueExpr:u,assignedValueExpr:c},isCompileTimeOnly:!0,defaultValue:d,assignedValue:f},env:n}}function Uc({expr:e,env:t,context:n}){var l,u,d,c;if(!v(e,A.module))throw p({token:e.token,errorMessage:`Expected "module", got:
2005
+ ${T(e)}`});let r=Ie(t),o=[];r.fields=o,n.currentModulePath&&(r.definedInModulePath=n.currentModulePath);let i=e.args,a=wn(lt(),"Self");a.module=r;for(let f=0;f<i.length;f++){let m=i[f];if(V(m)&&v(m,"...",1)){let y=m.args[0],g=S({expr:y,env:t,context:{...n,SelfType:a}});if(!g.$)throw p({token:y.token,errorMessage:`Failed to evaluate the extended struct expression: ${T(y)}`});let h=g.$.value;if(G(h)&&Ee(h.value)||Ue(h)&&Ee(h.type)){let _;G(h)&&Ee(h.value)?_=h.value:_=h.type;for(let E of _.fields){let k=o.findIndex(w=>w.label===E.label);if(k>=0){if(o[k].assignedValue&&E.assignedValue&&Lt({value:o[k].assignedValue,env:t},{value:E.assignedValue,env:t})||!o[k].assignedValue&&!E.assignedValue&&W({type:o[k].type,env:t},{type:E.type,env:t}))continue;throw console.log(!!o[k].assignedValue,!!E.assignedValue),console.log(x(o[k].type),`
2006
+ `,x(E.type),`
2007
+ `,W({type:o[k].type,env:t},{type:E.type,env:t})),p({token:y.token,errorMessage:`Duplicate label 1 "${E.label}" in module`})}else o.push(E)}}else if(Ke(h)){let _=h;for(let E=0;E<_.fields.length;E++){let k=_.fields[E],w=_.type.fields[E],$=o.findIndex(b=>b.label===w.label);if($>=0){if(o[$].assignedValue&&w.assignedValue&&Lt({value:o[$].assignedValue,env:t},{value:w.assignedValue,env:t})||!o[$].assignedValue&&!w.assignedValue&&W({type:o[$].type,env:t},{type:w.type,env:t}))continue;throw p({token:y.token,errorMessage:`Duplicate label 2 "${w.label}" in module`})}else o.push({..._.type.fields[E],assignedValue:k})}}else throw p({token:y.token,errorMessage:`Expected a Module type or value for extending, got ${T(y)}`})}else if(V(m)&&v(m,A.where)){if(f!==0)throw p({token:m.token,errorMessage:"The where clause must be the first argument in a module definition."});let y=m.args;if(y.length===0)throw p({token:m.token,errorMessage:"The where clause must have at least one constraint."});r.selfConstraints||(r.selfConstraints=[]);for(let g of y){if(!V(g)||!v(g,"<:",2))throw p({token:g.token,errorMessage:`Expected constraint in the form "Self <: Module" or "Self <: (Module1, Module2)", got: ${T(g)}`});let h=g.args[0];if(!j(h)||h.token.value!=="Self")throw p({token:h.token,errorMessage:`In a module's where clause, the left-hand side of <: must be "Self", got: ${T(h)}`});let _=g.args[1],E=[];if(V(_)&&v(_,A.tuple))for(let w of _.args)V(w)&&v(w,"!")&&w.args.length===1?E.push({expr:w.args[0],isNegated:!0}):E.push({expr:w,isNegated:!1});else V(_)&&v(_,"!")&&_.args.length===1?E.push({expr:_.args[0],isNegated:!0}):E.push({expr:_,isNegated:!1});r.negativeSelfConstraints||(r.negativeSelfConstraints=[]);for(let{expr:w,isNegated:$}of E){let b=S({expr:w,env:t,context:{...n,SelfType:a}});(l=b.$)!=null&&l.env&&(t=b.$.env),(u=b.$)!=null&&u.value&&G(b.$.value)&&Ee(b.$.value.value)&&($?r.negativeSelfConstraints.push(b.$.value.value):r.selfConstraints.push(b.$.value.value))}let k=S({expr:g,env:t,context:{...n,SelfType:a,isInsideWhereClause:!0}});(d=k.$)!=null&&d.env&&(t=k.$.env)}}else{let{field:y,env:g}=Ko({expr:m,env:t,moduleFieldIndex:f,context:{...n,SelfType:a},isForEvaluatingModuleType:!0});if(o.find(_=>_.label===y.label))throw p({token:V(m)?((c=m.args[0])==null?void 0:c.token)??m.token:m.token,errorMessage:`Duplicate label 3 "${y.label}" in module`});if(o.push(y),t=g,!y.isCompileTimeOnly)throw p({token:m.token,errorMessage:`Expected compile-time only field for extern module, got ${T(m)}`})}}let s=ae(r);return e.$={env:t,value:s,type:s.type,pathCollection:[]},e.func.$=e.$,e}function Bc(e,t){if(e.label===C.dispose[0])if(ce(e.type)){let n=e.type;if(n.parameters.length!==1||n.forallParameters.length!==0)throw p({token:t,errorMessage:'The "dispose" function must have exactly one parameter of type "Self".'});if(!Be(n.return.type))throw p({token:t,errorMessage:'The "dispose" function must return "unit".'})}else throw p({token:t,errorMessage:'The "dispose" must be a function.'})}function ao({expr:e,env:t,context:n}){var c,f,m,y;let r=v(e,A.object),o=v(e,A.struct),i=v(e,A.newtype);if(!o&&!r&&!i)throw p({token:e.token,errorMessage:`Expected "struct" or "object" or "newtype", got:
2008
+ ${T(e)}`});let a=r,s=i,l=gr(t,a,s);xa({structType:l,env:t,context:n}),n.currentModulePath&&(l.definedInModulePath=n.currentModulePath,l.module.definedInModulePath=n.currentModulePath);let u=l.fields;for(let g=0;g<e.args.length;g++){let h=e.args[g];{let{field:_,env:E}=Dn({expr:h,env:t,tupleFieldIndex:g,context:{...n,SelfType:l},forType:"struct"});if(u.find(w=>w.label===_.label))throw p({token:V(h)?((c=h.args[0])==null?void 0:c.token)??h.token:h.token,errorMessage:`Duplicate label "${_.label}" in struct`});if(_.isCompileTimeOnly){if(_.label===C.___drop[0])throw p({token:V(h)?((f=h.args[0])==null?void 0:f.token)??h.token:h.token,errorMessage:`The label "${C.___drop[0]}()" is reserved for the auto-generated function. You cannot define it as a compile-time-only field.`});if(_.label===C.___dup[0])throw p({token:V(h)?((m=h.args[0])==null?void 0:m.token)??h.token:h.token,errorMessage:`The label "${C.___dup[0]}()" is reserved for the auto-generated function. You cannot define it as a compile-time-only field.`})}_.isCompileTimeOnly&&_.assignedValue?(_.label===C.dispose[0]&&Bc(_,V(h)?((y=h.args[0])==null?void 0:y.token)??h.token:h.token),l.module.fields.push(_)):u.push(_),t=E}}if(s&&u.length!==1)throw p({token:e.token,errorMessage:`Newtype struct must have exactly one field, but got ${u.length} fields.`});t=tu({structType:l,env:t,context:n}),t=yr({structType:l,env:t,context:n});let d=ae(l);return e.$={env:t,type:d.type,value:d,pathCollection:[]},e.func.$=e.$,e}function Pc({expr:e,env:t,context:n}){return Ce(e,A.newtype),ao({expr:e,env:t,context:n})}function zc({expr:e,env:t,context:n}){if(!v(e,A.object))throw p({token:e.token,errorMessage:`Expected "object", got:
2009
+ ${T(e)}`});return ao({expr:e,env:t,context:n})}function Gc({expr:e,env:t,context:n}){Ce(e,A.Slice,1);let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:r.token,errorMessage:`Failed to evaluate the element type expression:
2010
+ ${T(r)}`});if(!G(o.$.value))throw p({token:r.token,errorMessage:`Expected type for element type, got:
2011
+ ${T(r)}
2012
+
2013
+ If you are creating an array value with 1 element, please consider adding a "," in the end, like [1,]`});let i=o.$.value.value,a=_r(i),s=ae(a);return e.$={env:o.$.env,type:s.type,value:s,pathCollection:[]},e}function ym({args:e,env:t,context:n,forType:r}){var a,s;let o=[];for(let l=0;l<e.length;l++){let u=e[l],{field:d,env:c}=Dn({expr:u,env:t,tupleFieldIndex:l,context:{...n},forType:r});if(d.label&&o.find(m=>m.label===d.label))throw p({token:V(u)?((a=u.args[0])==null?void 0:a.token)??u.token:u.token,errorMessage:`Duplicate label "${d.label}" in tuple`});if(d.isCompileTimeOnly&&d.assignedValue)throw p({token:V(u)?((s=u.args[0])==null?void 0:s.token)??u.token:u.token,errorMessage:"Tuple cannot have module fields."});o.push(d),t=c}return{type:Zi(o),env:t}}function Rc({expr:e,env:t,context:n}){if(e.args.length===0){let i=ae(Br());return e.$={env:t,value:i,type:i.type,pathCollection:[]},e}let{type:r,env:o}=ym({args:e.args,env:t,context:{...n},forType:"tuple"});return t=o,r.fields.forEach(i=>{if(i.exprs.defaultValueExpr)throw p({token:i.exprs.defaultValueExpr.token,errorMessage:"Tuple type cannot have default value."})}),e.$={env:t,value:ae(r),type:At(r),pathCollection:[]},e}function qc({expr:e,env:t,context:n}){var s,l;if(!v(e,A.union))throw p({token:e.token,errorMessage:`Expected "union", got:
2014
+ ${T(e)}`});let r=su(t);n.currentModulePath&&(r.definedInModulePath=n.currentModulePath,r.module.definedInModulePath=n.currentModulePath);let o=[];r.fields=o;let i=e.args;for(let u=0;u<i.length;u++){let d=i[u],{field:c,env:f}=Dn({expr:d,env:t,tupleFieldIndex:u,context:{...n,SelfType:r},forType:"union"});if(o.find(y=>y.label===c.label))throw p({token:V(d)?((s=d.args[0])==null?void 0:s.token)??d.token:d.token,errorMessage:`Duplicate label "${c.label}" in union field.`});if(c.defaultValue)throw p({token:((l=c.exprs.defaultValueExpr)==null?void 0:l.token)??c.exprs.expr.token,errorMessage:"Union type cannot have default value for its fields."});if(qe(c.type))throw p({token:c.exprs.expr.token,errorMessage:"Union type cannot have field with garbage-collected type."});if(c.isCompileTimeOnly){if(!c.assignedValue)throw p({token:c.exprs.expr.token,errorMessage:"Module field in union type must have assigned value."});r.module.fields.push(c)}else o.push(c);t=f}t=ru({unionType:r,env:t,context:n});let a=ae(r);return e.$={env:t,value:a,type:a.type,pathCollection:[]},e.func.$=e.$,e}function ga({expr:e,env:t,context:n}){var q,ne,pe,ue;let r=(q=n.expectedType)==null?void 0:q.type;if(!r)throw p({token:e.token,errorMessage:`Expected a function type, got:
2015
+ ${T(e)}`});let o,i=!1,a,s;if(ce(r))o=r;else if(ee(r)){let oe=nn(r);if(oe)a=oe,o=oe.isFn.callType,i=!0,s=r;else throw p({token:e.token,errorMessage:`Expected a function type or Impl(Fn(...)), got:
2016
+ ${x(r)}`})}else throw p({token:e.token,errorMessage:`Expected a function type or Impl(Fn(...)), got:
2017
+ ${x(r)}${Ne(r)?`
2018
+ Use 'dyn((x) => expr)' for dynamic dispatch`:""}`});let l=i?"=>":"->",u=i?"closure":"function";if(!v(e,l,2))throw p({token:e.token,errorMessage:`Expected ${l} for anonymous ${u}, got:
2019
+ ${T(e)}`});let d=e.args[0],c=e.args[1],f=[];V(d)&&v(d,A.tuple)?f=d.args:f=[d];let m=[],y=[];for(let oe=0;oe<f.length;oe++){let ye=f[oe];if(V(ye)&&v(ye,A.forall)){if(oe!==0)throw p({token:ye.token,errorMessage:"forall(...) must be the first parameter expression"});m=ye.args}else y.push(ye)}if(y.length!==o.parameters.length)throw p({token:e.token,errorMessage:`Expected ${o.parameters.length} regular parameters, got ${y.length}`});let g=t;t=ut(t);for(let oe=0;oe<m.length;oe++){let ye=m[oe],ge=o.forallParameters[oe];if(!j(ye))throw p({token:ye.token,errorMessage:`Expected parameter name for forall parameter, got ${T(ye)}`});let Me=ye.token.value;if(Me!==ge.label)throw p({token:ye.token,errorMessage:`Forall parameter name must match expected name.
2020
+ Expected: "${ge.label}"
2021
+ Got: "${Me}"`})}for(let oe=0;oe<o.forallParameters.length;oe++){let ye=m[oe],ge=o.forallParameters[oe],{env:Me}=we({env:t,variable:{name:ge.label,type:ge.type,isCompileTimeOnly:ge.isCompileTimeOnly,value:re(ge.type,ge.label),token:(ye==null?void 0:ye.token)??ke,initializedAtToken:(ye==null?void 0:ye.token)??ke,consumedAtToken:void 0,isOwningTheGcValue:!1},skipCheckingFunctionOverloading:!0});t=Me,ye&&(ye.$={env:t,type:ge.type,value:re(ge.type,ge.label),pathCollection:[]})}for(let oe=0;oe<y.length;oe++){let ye=y[oe],ge=o.parameters[oe];if(ge.isCompileTimeOnly){if(!j(ye))throw p({token:ye.token,errorMessage:`Expected parameter name for compile-time parameter, got ${T(ye)}`});let Te=ye.token.value;if(Te!==ge.label)throw p({token:ye.token,errorMessage:`Compile-time parameter name must match expected name.
2022
+ Expected: "${ge.label}"
2023
+ Got: "${Te}"`})}let Me=ye.token.value,Se=ge.label,{env:Re}=we({env:t,variable:{name:Me,type:ge.type,isCompileTimeOnly:ge.isCompileTimeOnly,value:ge.isCompileTimeOnly?re(ge.type,ge.label):void 0,token:ye.token,initializedAtToken:ye.token,consumedAtToken:void 0,isOwningTheGcValue:ge.isOwningTheGcValue,parameterAlias:Me!==Se?Se:void 0},skipCheckingFunctionOverloading:!0});t=Re,ye.$={env:t,type:ge.type,value:ge.isCompileTimeOnly?re(ge.type,ge.label):void 0,pathCollection:[]}}let h=t.frames[t.frames.length-1],_={...o,forallParameters:o.forallParameters,parameters:o.parameters.map((oe,ye)=>{if(oe.isCompileTimeOnly)return oe;{let ge=y[ye];return{...oe,label:j(ge)?ge.token.value:oe.label,exprs:{...oe.exprs,expr:ge,labelExpr:ge,typeExpr:void 0,defaultValueExpr:void 0}}}}),return:{...o.return,expr:void 0},parametersFrame:h,env:g},E={tag:"Function",type:_,body:c,frameLevel:t.frames.length-1,funcId:`fn_${ht()}`,calledComptFunctionCaches:[],specializedFunctionCaches:[]},k=!!a,{evaluationContext:w}=Go({...n,isExecuting:!1,isValidatingFunctionDefinition:!1},o,E,t),$=Et({expr:c,env:t,context:w,variablesToAdd:[],isEvaluatingFunctionBodyBeginBlock:!0});if(!$.$)throw p({token:c.token,errorMessage:"Failed to evaluate the function body."});t=$.$.env;let b=w.capturedVariables,F=(ne=$.$)==null?void 0:ne.type;if(F&&!W({type:o.return.type,env:t},{type:F,env:t}))throw p({token:c.token,errorMessage:`Incompatible return type:
2024
+ - Expected: ${x(o.return.type)}
2025
+ - Got : ${x(F)}`});(pe=$.$)!=null&&pe.env&&(t=(ue=$.$)==null?void 0:ue.env),t=Ct(t,!0);let M;k&&b&&b.size>0&&(M=no({capturedVariables:b,env:t}));let L,O,B,P;if(i&&a&&s){P=to({expectedCaptureType:void 0,capturedVariablesWithValues:M,env:t,closureToken:e.token,context:{...n}}).captureType;let ye=pu(_,t),{capturedVariableDupExpressions:ge,env:Me}=ro({capturedVariablesWithValues:M,env:t,context:n});B=ge,t=Me,E.funcId=`closure_${ht()}`,E.closureInfo={closureType:ye,captureType:P},s.resolvedConcreteType=P,L={...s,resolvedConcreteType:P},O=void 0}else L=_,O=E;return e.$={env:t,type:L,value:O,pathCollection:k&&b?eo(b):[],deferredDupExpressions:i&&B?B:void 0,captureType:i?P:void 0,closureFunctionValue:i?E:void 0},k&&ze(e,!0),e}function Yc({expr:e,env:t,context:n}){let r=e.args;if(r.length===0)throw p({token:e.token,errorMessage:`Expected at least one element in array, got ${r.length}`});let o=r.length,i,a;n.expectedType&&Oe(n.expectedType.type)&&(a=n.expectedType.type.childType);let s=[],l=[];for(let c=0;c<r.length;c++){let f=r[c],m=S({expr:f,env:t,context:{...n,expectedType:a?{type:a,env:t}:void 0}});if(xt(m,n),!m.$)throw p({token:f.token,errorMessage:`Failed to evaluate array element: ${T(f)}`});if(t=m.$.env,s.push(m.$.value),!i)i=a||m.$.type;else if(!W({type:i,env:t},{type:m.$.type,env:t}))if(W({type:vt({type:i,expectedType:void 0,expr:void 0,env:t}),env:t},{type:m.$.type,env:t}))i=m.$.type;else throw p({token:f.token,errorMessage:`Array element type mismatch:
2026
+ Expected type: ${x(i)}
2027
+ Given type: ${x(m.$.type)}`});l.push(m)}let u=Gn(i,Dt("Usize",o)),d=s.every(c=>!!c)?zn(u,s):void 0;return e.$={env:t,type:u,value:d,pathCollection:[],runtimeArgExprsInOrder:l},ze(e,!0),e}function jc(e,t){if(e.token.type==="bool"){let n=e.token.value==="true",r=it(n);return e.$={env:t,value:r,type:r.type,pathCollection:[]},e}else throw p({token:e.token,errorMessage:`Expected bool literal, got ${e.tag}`})}function Wc(e,t){if(e.token.type==="char"){let n=_m(e.token.value),r=Pn(n);return e.$={env:t,value:r,type:r.type,pathCollection:[]},e}else throw p({token:e.token,errorMessage:`Expected char literal, got ${e.tag}`})}function _m(e){let t=e.slice(1,-1);if(t.length===1)return t.charCodeAt(0);if(t.length===2&&t[0]==="\\"){let n=t[1];switch(n){case"n":return 10;case"t":return 9;case"r":return 13;case"\\":return 92;case"'":return 39;case'"':return 34;case"0":return 0;case"a":return 7;case"b":return 8;case"f":return 12;case"v":return 11;default:throw new Error(`Unknown escape sequence: \\${n}`)}}else throw new Error(`Invalid char literal: ${e}`)}function Hc({expr:e,env:t,context:n}){let r=[],o=e.args;if(o.length===0)throw p({token:e.token,errorMessage:`Expected at least one element in compt_list, got ${o.length}`});let i;n.expectedType&&mt(n.expectedType.type)&&(i=n.expectedType.type.childType);for(let s=0;s<o.length;s++){let l=o[s],u=S({expr:l,env:t,context:{...n}});if(!u.$||!u.$.value)throw p({token:l.token,errorMessage:`Failed to evaluate expr_list element. Expected compile-time known value:
2028
+ ${T(l)}`});t=u.$.env;let d=u.$.value;if(r.push(d),!i)i=u.$.type;else if(!W({type:i,env:t},{type:u.$.type,env:t}))throw p({token:l.token,errorMessage:`Mismatched element types in compt_list. Expected element of type ${x(i)}, got ${x(u.$.type)}`})}let a=kn(i,r);return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}function Kc(e,t,n){let o=me(t,"Box").find(m=>m.value&&Fe(m.value)&&ce(m.type));if(!o||!o.value||!Fe(o.value))throw new Error("Cannot find Box type constructor in environment");let i=o.value,a=i.type,s=a.parameters[0],l=ae(e),u=ut(a.env),{env:d}=we({env:u,variable:{name:s.label,token:ke,type:l.type,isCompileTimeOnly:!0,initializedAtToken:ke,consumedAtToken:void 0,value:l,isOwningTheGcValue:!1}}),{value:c,callerEnv:f}=Xr({functionCalleeExpr:void 0,functionType:a,functionValue:i,argValues:{forallArgs:[],args:[{value:l,parameterType:s.type,argType:lt()}],variadicArgs:[]},callerEnv:t,calleeEnv:d,context:n});if(!G(c)||!$t(c.value))throw new Error("Box type constructor did not return a type value");return{boxType:c.value,env:f}}function gm(e,t,n){var r;try{let o=S({expr:e,env:t,context:n});if(!o.$)return!1;let i=o.$.value;if(Fe(i))return!!me(t,"box").find(l=>l.value&&Fe(l.value)&&l.value===i);if(G(i)){let s=i.value;return!!((r=s==null?void 0:s.typeName)!=null&&r.startsWith("Box("))}else return!1}catch{return!1}}function Qc({expr:e,env:t,context:n}){Ce(e,A.dyn,1);let r=e.args[0],o=n.expectedType,i;if(n.expectedType&&Ne(n.expectedType.type)){let g=n.expectedType.type;if(i=wn(lt(),"",void 0,g.requiredModules,g.negativeModules),V(r)&&gm(r.func,t,{...n})&&v(r.args[0],"=>")){let{boxType:h,env:_}=Kc(i,t,n);t=_,o={type:h,env:t}}else o={type:i,env:n.expectedType.env}}else o=void 0;let a=S({expr:r,env:t,context:{...n,expectedType:o}});if(!a.$)throw p({token:r.token,errorMessage:`Failed to evaluate the value expression for 'dyn':
2029
+ ${T(r)}`});let s=a.$.type,l=a;if(!$t(s)&&!(ee(s)&&Pe(s))){let{boxType:g,env:h}=Kc(s,t,{...n});t=h;let _={tag:"Atom",token:{...r.token,value:"box",type:"identifier"},$:void 0},E={tag:"FuncCall",func:_,args:[a],token:r.token,$:void 0},k=S({expr:E,env:t,context:{...n,expectedType:{type:g,env:t}}});if(!k.$)throw p({token:r.token,errorMessage:`Failed to auto-box value for 'dyn':
2030
+ ${T(r)}`});t=k.$.env,s=k.$.type,l=k,e.args[0]=k}else t=a.$.env;xt(l,n),t=l.$.env;let u=[],d=[],c=new Set,f;if(n.expectedType&&Ne(n.expectedType.type))f=n.expectedType.type;else if(yn(s)){let g=s.fields[0].type;if(g.module){let h=[];for(let _ of g.module.fields)_.assignedValue&&Ke(_.assignedValue)&&h.push(_.assignedValue.type);f=yo(h,t,[]),t=co({dynType:f,env:t,context:n})}else throw p({token:e.token,errorMessage:`'${A.dyn}' with Box(T) requires T to have a module. Got boxed type: ${x(g)}`})}else if(s.module){let g=[];for(let h of s.module.fields)h.assignedValue&&Ke(h.assignedValue)&&g.push(h.assignedValue.type);f=yo(g,t,[]),t=co({dynType:f,env:t,context:n})}else throw p({token:e.token,errorMessage:`'${A.dyn}' requires either an expected Dyn type context, a SomeType (Impl) value, or a type with a module. Got value type: ${x(s)}`});let m=[];if(yn(s)){let g=s.fields[0].type;(ee(g)||Ne(g))&&m.push(...g.negativeModules??[])}for(let g of f.requiredModules)for(let h of m)if(W({type:g,env:t},{type:h,env:t}))throw p({token:e.token,errorMessage:`Required module ${x(g)} is in the negative modules list and cannot be used.`});for(let g of f.requiredModules)if(!c.has(g))if(yn(s)&&(ee(s.fields[0].type)||Ne(s.fields[0].type))){let h=s.fields[0].type,_=!1;for(let E of h.requiredModules)if(W({type:g,env:t},{type:E,env:t})){let k=[];for(let $=0;$<g.fields.length;$++){let b=g.fields[$],F=E.fields.findIndex(M=>M.label===b.label);F===-1?k.push(void 0):k.push(E.fields[F].assignedValue)}let w=Vr(g,k);d.push(w),u.push(w.type),c.add(g),_=!0;break}if(!_)throw p({token:e.token,errorMessage:`Required module ${x(g)} not found in SomeType's requiredModules.`})}else{let h=yn(s)?s.fields[0].type:s;if(h.module){let _=!1;for(let E of h.module.fields)if(E.assignedValue&&Ke(E.assignedValue)&&W({type:g,env:t},{type:E.assignedValue.type,env:t})){d.push(E.assignedValue),u.push(E.assignedValue.type),c.add(g),_=!0;break}if(!_)throw p({token:e.token,errorMessage:`Required module ${x(g)} is not implemented by type ${x(s)}.`})}else throw p({token:e.token,errorMessage:`Cannot find module ${x(g)} for value type ${x(s)}.`})}let y=[];for(let g of f.requiredModules){let h=u.findIndex(_=>W({type:g,env:t},{type:_,env:t}));if(h===-1)throw p({token:e.token,errorMessage:`No module value found for expected module type ${x(g)}.`});y.push(d[h])}return e.$={env:t,value:void 0,type:f,pathCollection:a.$.pathCollection,dynCallModuleValues:y},ze(e,!0),e}function Zc(e,t,n){if(e.token.type==="float"){let r=parseFloat(e.token.value),o="ComptFloat";if(n.expectedType){let a=n.expectedType.type;wo(a)?o="F32":Vo(a)&&(o="F64")}let i=Dt(o,r);return e.$={env:t,value:i,type:i.type,pathCollection:[]},e}else throw p({token:e.token,errorMessage:`Expected float literal, got ${e.tag}`})}function Jc(e,t,n){if(e.token.type==="integer"){let r=e.token.value.replace(/_/g,""),o=10;r.match(/^0x/i)?(o=16,r=r.slice(2)):r.match(/^0b/i)?(o=2,r=r.slice(2)):r.match(/^0o/i)&&(o=8,r=r.slice(2));let i="ComptInt";if(n.expectedType){let l=n.expectedType.type;ho(l)?i="Usize":vo(l)?i="Isize":nr(l)?i="U8":To(l)?i="I8":$o(l)?i="U16":Eo(l)?i="I16":Co(l)?i="U32":ko(l)?i="I32":bo(l)?i="U64":Fo(l)&&(i="I64")}let a=parseInt(r,o),s=Dt(i,a);return e.$={env:t,value:s,type:s.type,pathCollection:[]},e}else throw p({token:e.token,errorMessage:`Expected integer literal, got ${e.tag}`})}function Xc(e,t){if(e.token.type==="string"){let n=un(JSON.parse(e.token.value));return e.$={env:t,value:n,type:n.type,pathCollection:[]},e}else throw p({token:e.token,errorMessage:`Expected string literal, got ${e.tag}`})}function hm({expr:e,tupleFieldIndex:t,env:n,context:r,elementIndex:o,runtimeArgExprsInOrder:i}){var m;let a=e,s=e,l;if(V(a)&&v(a,":",2)){let y=a.args[0];throw p({token:y.token,errorMessage:"Labelled field is not allowed in tuple value."})}let u=(m=r.expectedType)==null?void 0:m.type,d;if(u){if(!He(u))throw p({token:e.token,errorMessage:`(2) Failed to evaluate the tuple fields. Expected type to be:
2031
+ ${x(u)}`});let y=u.fields[t];if(!y)throw p({token:e.token,errorMessage:`Failed to get the tuple field at index ${t}`});d=y.type}let c=S({expr:s,env:n,context:{...r,expectedType:d?{type:d,env:n}:void 0}});if(xt(c,r),!c.$)throw p({token:s.token,errorMessage:`Failed to evaluate the tuple field: ${T(s)}`});n=c.$.env;let f=c.$.value;if(f&&G(c.$.value))throw p({token:s.token,errorMessage:`Cannot store a type value in tuple, please use module instead:
2032
+ ${T(s)}`});return l=vt({type:c.$.type,expectedType:void 0,expr:void 0,env:n}),i.push(c),e!==s&&(e.$={env:n,type:l,value:f,pathCollection:[]}),{type:{exprs:{expr:e,labelExpr:void 0,typeExpr:void 0,defaultValueExpr:void 0,assignedValueExpr:void 0},isCompileTimeOnly:!1,type:l,label:o.toString()},value:f,env:n}}function vm({args:e,env:t,context:n}){let r=[],o=[],i=[];for(let l=0;l<e.length;l++){let u=e[l],{type:d,value:c,env:f}=hm({expr:u,env:t,tupleFieldIndex:l,context:{...n},elementIndex:l,runtimeArgExprsInOrder:i});r.push(d),o.push(c),t=f}let a=Zi(r),s=o.some(l=>!l)?void 0:ii(a,o);return{type:a,value:s,env:t,runtimeArgExprsInOrder:i}}function ef({expr:e,env:t,context:n}){if(!v(e,A.tuple))throw p({token:e.token,errorMessage:`Expected tuple, got ${e.tag}`});if(e.args.length===0)return e.$={env:t,value:J,type:J.type,pathCollection:[]},e;let{type:r,value:o,env:i,runtimeArgExprsInOrder:a}=vm({args:e.args,env:t,context:n});return t=i,r.fields.forEach(s=>{if(s.exprs.defaultValueExpr)throw p({token:s.exprs.defaultValueExpr.token,errorMessage:"Tuple value field cannot have default value."});if(s.exprs.labelExpr)throw p({token:s.exprs.labelExpr.token,errorMessage:"Tuple value field cannot have labels."})}),e.$={env:t,value:o,type:r,pathCollection:[],runtimeArgExprsInOrder:a},ze(e,!0),e}function ha({expr:e,env:t,context:n}){var c,f;if(!v(e,":",2))throw p({token:e.token,errorMessage:'Expected ":" for variable binding.'});let r=e.args[0],o=e.args[1],i=S({expr:o,env:t,context:{...n}});if(!i.$)throw p({token:o.token,errorMessage:`Failed to evaluate rhs expression:
2033
+ ${T(o)}`});t=i.$.env;let a=i.$.value;if(!G(a))throw p({token:o.token,errorMessage:`Expected type for rhs, got ${T(o)}`});let s=a.value;tr(s,i.token);let l=!1;if(V(r)&&v(r,A.compt)){if(l=!0,r.args.length!==1)throw p({token:r.token,errorMessage:`Expected one argument for "compt" , got ${r.args.length}`});r=r.args[0]}if(!l&&((c=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:c.kind)==="function-body"&&((f=n.isEvaluatingFunctionBodyOrAsyncBlock)!=null&&f.type.return.isCompileTimeOnly))throw p({token:r.token,errorMessage:"Unexpected runtime variable binding in a compile-time only function body."});if(!nt(r))throw p({token:r.token,errorMessage:`Invalid binding to "${r.token.value}", expected identifier or operator`});if(hn(s)&&!l)throw p({token:r.token,errorMessage:`Expected "compt" for compile-time known value binding:
2034
+ ${x(s)}`});if(er(s)&&l)throw p({token:r.token,errorMessage:`Unexpected "compt" for ${x(s)} which can only be used at runtime.`});let u=r.token.value,{env:d}=we({env:t,variable:{name:u,type:s,isCompileTimeOnly:l,value:l?re(s,u):void 0,token:r.token,initializedAtToken:void 0,consumedAtToken:void 0,isReassignable:!0,isOwningTheGcValue:qe(s)}});return t=d,r.$={env:t,type:s,pathCollection:[[u]]},e.$={env:t,type:J.type,value:J,pathCollection:[]},{expr:e,variableExpr:r,variableName:u}}function va({expr:e,env:t,context:n,throwErrorOnUndefined:r}){var i;let o=e.token.type==="backtick_identifier"?e.token.value.slice(1,-1):e.token.value;if(o==="Type"){let a=ae(lt());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="Module"){let a=ae(dn(1));return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="unit"){let a=ae(Br());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="compt_int"){let a=ae(ur());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="compt_float"){let a=ae(xr());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="compt_string"){let a=ae(Ot());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="bool"){let a=ae(Qe());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="usize"){let a=ae(_t());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="isize"){let a=ae(Mr());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="u8"){let a=ae(pr());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="i8"){let a=ae(Sr());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="u16"){let a=ae(Lr());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="i16"){let a=ae(Ar());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="u32"){let a=ae(Ir());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="i32"){let a=ae(cr());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="u64"){let a=ae(Nr());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="i64"){let a=ae(Dr());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="f32"){let a=ae(Or());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="f64"){let a=ae(fr());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="char"){let a=ae(zi());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="short"){let a=ae(Gi());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="ushort"){let a=ae(Ri());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="int"){let a=ae(qi());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="uint"){let a=ae(Yi());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="long"){let a=ae(ji());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="ulong"){let a=ae(Wi());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="longlong"){let a=ae(Hi());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="ulonglong"){let a=ae(Ki());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="longdouble"){let a=ae(Qi());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="void"){let a=ae(iu());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="Expr"){let a=ae(jt());return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else if(o==="Self"&&n.SelfType){let a=ae(n.SelfType);return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}else{let a=me(t,o);if(a.length){let s=a[a.length-1];if(!s.initializedAtToken&&r&&!ce(s.type)&&!G(s.value))throw p({token:e.token,errorMessage:`Variable "${o}" is not initialized`});if(e.$={env:t,type:s.type,value:s.value,originType:s.type,variableName:s.name,pathCollection:[[s.name]]},n.isEvaluatingFunctionBodyOrAsyncBlock&&n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&n.capturedVariables&&n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv){let l=n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv.frames.length;s.frameLevel<l&&oo(s.name,s.frameLevel,"own",e.token,n)}if(((i=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:i.kind)==="async-block"){let l=n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv.frames.length;s.frameLevel<l&&oo(s.name,s.frameLevel,"own",e.token,n)}return e}else throw p({token:e.token,errorMessage:`Variable "${o}" not found.`})}}function os(e,t){let n=`Right-hand side contains "${t}" from function.`;throw V(e)&&v(e,A.cond)?n=`Cannot assign "cond" expression to variable when all cases contain "${t}" statements. Consider using the "cond" result directly without assignment, or ensure at least one case doesn't return.`:V(e)&&v(e,A.match)?n=`Cannot assign "match" expression to variable when all cases contain "${t}" statements. Consider using the "match" result directly without assignment, or ensure at least one case doesn't return.`:V(e)&&v(e,A.begin)&&(n=`Cannot assign "begin" expression to variable when it contains "${t}" statement.`),p({token:e.token,errorMessage:n})}function Tm(e,t){if(Oe(e)&&Ue(e.length)){let n=e.length;if(n.variableName){let r=me(t,n.variableName);if(r.length>0){let o=r[r.length-1];if(o.value&&!Ue(o.value))return Gn(e.childType,o.value)}}}return e}function tf({expr:e,env:t,context:n}){var i,a,s,l,u,d,c,f,m,y,g,h;if(!v(e,"=",2))throw p({token:e.token,errorMessage:'Expected "=" for assignment.'});let r=e.args[0],o=e.args[1];if(j(r)||V(r)&&v(r,":",2)){let _;if(j(r)){let q=va({expr:r,env:t,context:{...n},throwErrorOnUndefined:!1});if(!q.$)throw p({token:r.token,errorMessage:`Failed to evaluate left-hand side of assignment: ${T(r)}`});t=q.$.env,r=q,_=r.token.value}else{let{expr:q,variableExpr:ne,variableName:pe}=ha({expr:r,env:t,context:{...n}});(i=q.$)!=null&&i.env&&(t=(a=q.$)==null?void 0:a.env),r=ne,_=pe}let E=me(t,_);if(!E.length)throw p({token:r.token,errorMessage:`Variable ${_} not found in the environment`});let k=E[E.length-1];if(!k.isReassignable)throw p({token:r.token,errorMessage:`Cannot reassign "${_}".
2035
+ You can mutate fields (e.g., ${_}.field = value) but cannot reassign itself.`});if(o=S({expr:o,env:t,context:{...n,expectedType:{type:k.type,env:t}}}),!o.$)throw p({token:o.token,errorMessage:`Failed to evaluate right-hand side of assignment: ${T(o)}`});t=o.$.env,Cr(o,t),xt(o,n),t=o.$.env,(s=o.$)!=null&&s.controlFlow&&os(o,o.$.controlFlow);let w=(l=o.$)==null?void 0:l.type;if(!w)try{let{expr:q,type:ne,env:pe}=sr({expr:o,type:k.type,env:t,context:{...n}});o=q,w=ne,t=pe}catch(q){throw p({token:o.token,errorMessage:`(evaluateAssignment) Failed to synthesize type for expression: ${T(o)}
2036
+ ${q}`})}if(k.isCompileTimeOnly||(w=vt({type:w,expectedType:k.type,expr:o,env:t})),!W({type:k.type,env:t},{type:w,env:t}))if(Gr(k.type))try{let{expr:q,type:ne,env:pe}=sr({expr:o,type:k.type,env:t,context:{...n}});if(W({type:k.type,env:pe},{type:ne,env:pe})){o=q,w=ne,t=pe;let ue=Tm(k.type,t);t=Xe(t,k,{...k,type:ue})}else throw p({token:r.token,errorMessage:`Incompatible types:
2037
+ - Expected: ${x(k.type)}
2038
+ - Given : ${x(w)}`})}catch{throw p({token:r.token,errorMessage:`Incompatible types:
2039
+ - Expected: ${x(k.type)}
2040
+ - Given : ${x(w)}`})}else throw p({token:r.token,errorMessage:`Incompatible types:
2041
+ - Expected: ${x(k.type)}
2042
+ - Given : ${x(w)}`});let $=me(t,_),b=$[$.length-1],F=(u=o.$)==null?void 0:u.value;G(F)&&!F.value.typeName?(F.value!==n.SelfType&&(F.value.typeName=_),ft(b.type)&&!b.type.baseType&&(b.type.baseType=F.value)):Fe(F)&&!F.funcName?(F.funcName=_,F.funcId+=`_${r.token.value}`):Ke(F)&&!F.type.typeName&&F.type!==n.SelfType&&(F.type.typeName=_);let M=b.type;Ve(M)&&Ve(w)&&M.selectedVariantName!==w.selectedVariantName&&(M={...M,selectedVariantName:w.selectedVariantName}),ee(M)&&ee(w)&&w.resolvedConcreteType&&(M={...M,resolvedConcreteType:w.resolvedConcreteType});let L=!1,O=k.isOwningTheSameGcValueAs;if(k.initializedAtToken){if(ee(M))throw st([{token:r.token,errorMessage:`Cannot reassign variable "${_}" of type Impl(...).
2043
+ Impl(...) uses static dispatch and the concrete type is fixed at first assignment.
2044
+ Consider using Dyn(...) for dynamic dispatch if you need to reassign to different implementations.`},{token:k.initializedAtToken??k.token,errorMessage:"First assigned here:"}]);if(((c=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:c.kind)==="function-body"&&n.capturedVariables&&n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv){let oe=n.isEvaluatingFunctionBodyOrAsyncBlock.evaluationEnv.frames.length;k.frameLevel<oe&&oo(k.name,k.frameLevel,"own",r.token,n)}let q=k.isCompileTimeOnly?F:void 0;if(q&&lr(q)){let oe=k.type;q=zn(oe,[...q.elements])}else if(q&&Nt(q)){let oe=k.type;q=Jn(oe,q.variantName,[...q.fields])}let ne=mr(t.modulePath,_),pe=Lo(o,t,t.modulePath),ue=pe;pe!=null&&pe.consumedAtToken&&(ue=void 0),t=Xe(t,k,{...k,id:ne,value:q,type:M,isOwningTheGcValue:qe(M),isOwningTheSameGcValueAs:ue}),L=!0}else{if(n.isEvaluatingLoopBody&&k.frameLevel<n.isEvaluatingLoopBody.env.frames.length)throw st([{token:r.token,errorMessage:"Cannot initialize a variable that is defined outside the while loop."},{token:k.token,errorMessage:"Defined here:"}]);if(((d=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:d.kind)==="function-body"&&k.frameLevel<n.isEvaluatingFunctionBodyOrAsyncBlock.type.env.frames.length)throw st([{token:r.token,errorMessage:"Cannot initialize a variable that is defined outside the function body."},{token:k.token,errorMessage:"Defined here:"}]);let q=k.isCompileTimeOnly?F:void 0;if(q&&lr(q)){let ue=k.type;q=zn(ue,[...q.elements])}else if(q&&Nt(q)){let ue=k.type;q=Jn(ue,q.variantName,[...q.fields])}let ne=Lo(o,t,t.modulePath),pe=ne;ne!=null&&ne.consumedAtToken&&(pe=void 0),t=Xe(t,k,{...k,initializedAtToken:r.token,value:q,type:M,isOwningTheGcValue:qe(M),isOwningTheSameGcValueAs:pe})}let B=me(t,_),P=B[B.length-1];return r.$={env:t,type:P.type,value:P.isCompileTimeOnly?F:void 0,pathCollection:[[_]]},L?(e.$={env:t,value:k.value,type:k.type,pathCollection:[]},ze(e,!0,(O==null?void 0:O.frameLevel)===t.frames.length-1?O:void 0)):e.$={env:t,value:J,type:J.type,pathCollection:[]},e}else{let _=S({expr:r,env:t,context:{...n,expectedType:void 0,isLhsOfAssignment:!0}});if(!_.$)throw p({token:r.token,errorMessage:`Failed to evaluate left-hand side of assignment: ${T(r)}`});if(((f=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:f.kind)==="function-body"&&_.$.pathCollection){for(let w of _.$.pathCollection)if(w.length>0){let $=w[0];if(typeof $=="string"){let b=me(t,$);if(b.length>0){let F=b[b.length-1];oo($,F.frameLevel,"write",r.token,n)}}}}let E=_.$.type;if(o=S({expr:o,env:t,context:{...n,expectedType:{type:E,env:t}}}),!o.$)throw p({token:o.token,errorMessage:`Failed to evaluate right-hand side of assignment: ${T(o)}`});t=o.$.env,Cr(o,t),xt(o,n),t=o.$.env;let k=(m=o.$)==null?void 0:m.type;if(!k)try{let{expr:w,type:$,env:b}=sr({expr:o,type:E,env:t,context:{...n}});o=w,k=$,t=b}catch(w){throw p({token:o.token,errorMessage:`(evaluateAssignment) Failed to synthesize type for expression: ${T(o)}
2045
+ ${w}`})}if(!W({type:E,env:t},{type:k,env:t}))throw p({token:r.token,errorMessage:`Incompatible types:
2046
+ - Expected: ${x(E)}
2047
+ - Given : ${x(k)}`});if(_.$.pathCollection&&_.$.pathCollection.length>0){let w=_.$.pathCollection[0];if(w&&w.length>=2){let $=w[0],b=w[1],F=me(t,$);if(F.length>0){let M=F[F.length-1];if(M.isCompileTimeOnly&&M.value){let L=M.value;if(tn(L)||ln(L)){let O=M.type,B=O.fields.findIndex(P=>P.label===b);if(B>=0&&((y=o.$)!=null&&y.value))if($e(M.type)&&M.type.isReferenceSemantics){let P=[...L.fields];P[B]=o.$.value;let q=bn(M.type,P),ne=sa(t,pe=>pe.isCompileTimeOnly&&pe.value===L);for(let pe of ne)t=Xe(t,pe,{...pe,value:q})}else{let P=[...L.fields];P[B]=o.$.value;let q;tn(L)?q=bn(O,P):q=ii(O,P),t=Xe(t,M,{...M,value:q})}}else if(lr(L)){let O=parseInt(b,10);if(!isNaN(O)&&O>=0&&O<L.elements.length&&((g=o.$)!=null&&g.value)){let B=[...L.elements];B[O]=o.$.value;let P=M.type,q=zn(P,B);t=Xe(t,M,{...M,value:q})}}else if(Nt(L)){let O=M.type,B=O.variants.find(P=>P.name===L.variantName);if(B){let P=(B.fields??[]).findIndex(q=>q.label===b);if(P>=0&&((h=o.$)!=null&&h.value)){let q=[...L.fields];q[P]=o.$.value;let ne=Jn(O,L.variantName,q);t=Xe(t,M,{...M,value:ne})}}}}}}}return e.$={env:t,value:_.$.value,type:_.$.type,pathCollection:[]},ze(e,!0),e}}function nf({expr:e,env:t,context:n}){var a;if(!v(e,A.c_include))throw p({token:e.token,errorMessage:`Expected c_include, got ${e.tag}`});let r,o=e.args;if(e.args[0]&&j(e.args[0])){let s=e.args[0];o=e.args.slice(1);let l=S({expr:s,env:t,context:{...n}});if(!l.$||!l.$.value)throw p({token:s.token,errorMessage:`Failed to evaluate C header file argument: ${T(s)}`});t=l.$.env;let u=l.$.value;if(!We(u))throw p({token:s.token,errorMessage:`Expected string for C header file argument, got ${T(s)}`});r=u.value}if(!r)throw p({token:e.token,errorMessage:`Expected C header file as first argument to c_include, such as:
2048
+
2049
+ c_include "<stdio.h>" ...;`});let i=[];for(let s=0;s<o.length;s++){let l=o[s],{field:u,env:d}=Ko({expr:l,env:t,moduleFieldIndex:s,context:{...n,SelfType:void 0},isForEvaluatingModuleType:!1});if(i.find(m=>m.label===u.label))throw p({token:V(l)?((a=l.args[0])==null?void 0:a.token)??l.token:l.token,errorMessage:`Duplicate label "${u.label}" in module`});if(u.type={...u.type,isExtern:"c",cInclude:r},!u.isCompileTimeOnly)throw p({token:l.token,errorMessage:`Expected compile-time only field for extern module, got ${T(l)}`});i.push(u),t=d;let{env:f}=we({env:t,variable:{name:u.label,type:u.type,value:u.assignedValue??re(u.type,u.label),isCompileTimeOnly:u.isCompileTimeOnly,token:u.exprs.expr.token,initializedAtToken:u.exprs.expr.token,consumedAtToken:void 0,isOwningTheGcValue:!1}});t=f}return e.$={env:t,value:J,type:J.type,pathCollection:[]},e.func.$={env:t,value:J,type:J.type,pathCollection:[]},e}function rf({expr:e,env:t,context:n}){var d,c,f,m,y,g,h;if(!v(e,A.cond))throw p({token:e.token,errorMessage:`Expected "cond", got ${e.tag}`});let r=e.args;if(r.length===0)throw p({token:e.token,errorMessage:`Expected at least one statement in "cond", got ${r.length}`});let o=[];for(let _=0;_<r.length;_++){let E=r[_];if(!V(E)||!v(E,"=>",2))throw p({token:E.token,errorMessage:`Expected => for cond statement, got ${E.tag}`});let k=E.args[0],w=E.args[1],$=t;o.push({condExpr:k,caseBodyExpr:w,caseEnv:$})}let i=[];for(let _=0;_<o.length;_++){let{condExpr:E,caseBodyExpr:k,caseEnv:w}=o[_],$=Et({expr:E,env:w,context:{...n,expectedType:{type:Qe(),env:w}},variablesToAdd:[]});if(!$.$)throw p({token:$.token,errorMessage:`Failed to evaluate condition expression: ${T($)}`});if(!vn($.$.type))throw p({token:$.token,errorMessage:`Expected bool for cond statement, got ${T($)}`});let b=$.$.value,F=$.$.env;if(_===o.length-1&&!(et(b)&&b.value===!0))throw p({token:$.token,errorMessage:'Expect the last condition to be compile-time known "true".'});if(i.push({condExpr:$,caseBodyExpr:k,caseEnv:F,condValue:b}),et(b)&&b.value===!0)break}let a=-1;for(let _=0;_<i.length;_++){let{condValue:E}=i[_];if(et(E)&&E.value===!0&&i.slice(0,_).every(({condValue:k})=>et(k)&&k.value===!1)){a=_;break}}let s=[],l=[],u;if(a!==-1){let{caseBodyExpr:_,caseEnv:E,condExpr:k}=i[a];k.$&&(k.$.caseExecuted=!0);let w=Et({expr:_,env:E,context:{...n},variablesToAdd:[]});if((d=w.$)!=null&&d.controlFlow)return e.$={env:w.$.env,type:((c=n.expectedType)==null?void 0:c.type)??w.$.type,value:w.$.value,pathCollection:w.$.pathCollection,controlFlow:w.$.controlFlow},e;{if(!((f=w.$)!=null&&f.type))throw p({token:w.token,errorMessage:`Expected type for cond statement, got ${T(w)}`});s.push(w),l.push(w.$.value),u={type:w.$.type,env:w.$.env},t=Mo(t,s.filter(b=>b.$&&b.$.controlFlow!=="return"));let $;return $=l[0],e.$={env:t,type:((m=n.expectedType)==null?void 0:m.type)??u.type,value:$,pathCollection:[]},ze(e,!0),e}}else{let _=!1,E=[],k=[];for(let{condExpr:$,condValue:b,caseBodyExpr:F,caseEnv:M}of i){if(et(b)&&b.value===!1)continue;$.$&&($.$.caseExecuted=!0);let L=Et({expr:F,env:M,context:{...n,isExecuting:!1},variablesToAdd:[]});if((y=L.$)!=null&&y.controlFlow){E.push(L.$.controlFlow),L.$.controlFlow==="return"&&k.push(L);continue}else _=!0;if(!((g=L.$)!=null&&g.type))throw p({token:L.token,errorMessage:`Expected type for cond statement, got ${T(L)}`});if(s.push(L),l.push(L.$.value),n.expectedType&&!W(n.expectedType,{type:L.$.type,env:L.$.env}))throw p({token:L.token,errorMessage:`Incompatible type with expected type:
2050
+ - Expected: ${x(n.expectedType.type)}
2051
+ - Actual : ${x(L.$.type)}`});if(!L.$.controlFlow){if(!u)u={type:L.$.type,env:L.$.env};else if(!W({type:u.type,env:u.env},{type:L.$.type,env:L.$.env}))if(W({type:vt({type:u.type,expectedType:void 0,expr:void 0,env:u.env}),env:u.env},{type:L.$.type,env:L.$.env}))u={type:L.$.type,env:L.$.env};else throw p({token:L.token,errorMessage:`Incompatible types:
2052
+ - Previous: ${x(u.type)}
2053
+ - Current : ${x(L.$.type)}`})}}let w;if(E.every($=>$==="return")?w="return":E.every($=>$==="break")?w="break":E.every($=>$==="continue")?w="continue":n.isEvaluatingLoopBody?E.find($=>$==="continue")?w="continue":E.find($=>$==="break")?w="break":E.find($=>$==="return")&&(w="return"):w=void 0,_||!w){if(_&&!u)throw p({token:e.token,errorMessage:"Failed to determine the type of value from the cond."});u||(u={type:J.type,env:t}),t=Mo(t,s.filter(b=>b.$&&b.$.controlFlow!=="return"));let $;return l.some(b=>b===void 0)?$=void 0:$=re(u.type),e.$={env:t,type:((h=n.expectedType)==null?void 0:h.type)??u.type,value:$,pathCollection:[]},ze(e,!0),e}else{if(E.length===0)throw p({token:e.token,errorMessage:"No control flows found but expected some."});if(w==="return"){if(!n.isEvaluatingFunctionBodyOrAsyncBlock)throw p({token:e.token,errorMessage:"All cases in cond are returning from function, but not evaluating in function body."});let $;if(n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?$=n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:n.expectedType&&($=n.expectedType.type),!$)throw p({token:e.token,errorMessage:"Failed to determine the return type for cond statement."});e.$={env:t,type:$,value:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&ta(n.isEvaluatingFunctionBodyOrAsyncBlock.type)?re($):void 0,pathCollection:[],controlFlow:"return"}}else if(w==="break"){if(!n.isEvaluatingLoopBody)throw p({token:e.token,errorMessage:"All cases in cond are breaking from loop, but not inside a loop."});e.$={env:t,type:J.type,value:J,pathCollection:[],controlFlow:"break"}}else if(w==="continue"){if(!n.isEvaluatingLoopBody)throw p({token:e.token,errorMessage:"All cases in cond are continuing loop, but not inside a loop."});e.$={env:t,type:J.type,value:J,pathCollection:[],controlFlow:"continue"}}return e}}}function of({expr:e,env:t,context:n}){var a;if(!v(e,A.extern))throw p({token:e.token,errorMessage:`Expected extern, got ${e.tag}`});let r="yo",o=e.args;if(e.args[0]&&j(e.args[0])){let s=e.args[0];o=e.args.slice(1);let l=S({expr:s,env:t,context:{...n}});if(!l.$||!l.$.value)throw p({token:s.token,errorMessage:`Failed to evaluate language argument: ${T(s)}`});t=l.$.env;let u=l.$.value;if(!We(u))throw p({token:s.token,errorMessage:`Expected string for language argument, got ${T(s)}`});if(u.value.toLocaleLowerCase()==="yo")r="yo";else if(u.value.toLocaleLowerCase()==="c")r="c";else throw p({token:s.token,errorMessage:`Unsupported language "${u.value}" for extern, expected "c" or "yo"`})}let i=[];for(let s=0;s<o.length;s++){let l=o[s],{field:u,env:d}=Ko({expr:l,env:t,moduleFieldIndex:s,context:{...n,SelfType:void 0},isForEvaluatingModuleType:!1});if(i.find(m=>m.label===u.label))throw p({token:V(l)?((a=l.args[0])==null?void 0:a.token)??l.token:l.token,errorMessage:`Duplicate label "${u.label}" in module`});if(u.type={...u.type,isExtern:r,externName:u.label},!u.isCompileTimeOnly)throw p({token:l.token,errorMessage:`Expected compile-time only field for extern module, got ${T(l)}`});i.push(u),t=d;let{env:f}=we({env:t,variable:{name:u.label,type:u.type,value:u.assignedValue??re(u.type,u.label),isCompileTimeOnly:u.isCompileTimeOnly,token:u.exprs.expr.token,initializedAtToken:u.exprs.expr.token,consumedAtToken:void 0,isOwningTheGcValue:!1}});t=f}return e.$={env:t,value:J,type:J.type,pathCollection:[]},e.func.$={env:t,value:J,type:J.type,pathCollection:[]},e}var is=require("fs"),On=Kn(require("path"));function af({expr:e,env:t,context:n,stdPath:r}){var d;if(!v(e,A.import,1))throw p({token:e.token,errorMessage:`Expected "import" with 1 argument, got:
2054
+ ${T(e)}`});let o=e.args[0],a=(d=S({expr:o,env:t,context:{...n}}).$)==null?void 0:d.value;if(!We(a))throw p({token:o.token,errorMessage:`Expected compt_string for module path, got:
2055
+ ${T(o)}`});let s=a.value;if(s.startsWith("std/")?s=On.default.relative(On.default.dirname(t.modulePath.replace(/^file:\/\//,"")),On.default.resolve(r,s.replace("std/","./"))):s==="std"&&(s=On.default.relative(On.default.dirname(t.modulePath.replace(/^file:\/\//,"")),On.default.resolve(r,"./index.yo"))),!s.startsWith("."))throw p({token:o.token,errorMessage:`Only local relative path is supported for now:
2056
+ ${T(e)}
2057
+ ${s}`});let l="file://"+On.default.resolve(On.default.dirname(t.modulePath.replace(/^file:\/\//,"")),s);if(!On.default.extname(l)&&(l=l+".yo",!(0,is.existsSync)(l.replace(/^file:\/\//,"")))){let c=On.default.join(l.replace(/^file:\/\//,"").replace(/\.yo$/,""),"index.yo");if((0,is.existsSync)(c))l="file://"+c;else throw p({token:o.token,errorMessage:`Module not found: tried "${l}" and "${c}"`})}if(!n.loadModule)throw p({token:o.token,errorMessage:"Module loader is not provided in the context."});try{let{moduleValue:c}=n.loadModule(l);return e.$={env:t,type:c.type,value:c,pathCollection:[]},e}catch(c){throw p({token:o.token,errorMessage:`Failed to import module "${s}":
2058
+ ${c instanceof Jt?c.toString():c instanceof Error?c.message:String(c)}`})}}function as({lhsFunc:e,lhsFields:t,rhsFields:n,rhsValue:r,rhsType:o,lhs:i,env:a,isCompileTimeOnly:s,isDestructuringAtomVariable:l}){let u=!He(o),d=e.token.value;if(u&&d!=="_")throw p({token:e.token,errorMessage:`Expected "_" for non-tuple destructuring, got "${d}"`});if(ot(o)&&t.length!==1)throw p({token:i.token,errorMessage:`Destructuring union type requires a single field, got ${t.length}`});if(t.length>n.length)throw p({token:i.token,errorMessage:`Too many fields in destructuring pattern. Expected at most ${n.length}, got ${t.length}`});let c={};for(let m=0;m<t.length;m++){let y=t[m],g=m,h,_=n[g],E,k,w,$;if(V(y)&&v(y,":",2)&&y.args[0].token.value==="..."&&y.args[1].token.value==="..."||j(y)&&y.token.value==="..."){if(ot(o))throw p({token:y.token,errorMessage:`Cannot destructure union type with _, got ${x(o)}`});for(let b=0;b<n.length;b++){let F=n[b];if(c[F.label])continue;c[F.label]={label:F.label,variableName:F.label,type:F.type};let M=ln(r)||tn(r)||Ke(r)||Nt(r)?r.fields[b]:void 0;if(!M&&s)throw p({token:y.token,errorMessage:`Destructuring field "${F.label}" is not defined in compile-time only context.`});let{env:L}=we({env:a,variable:{name:F.label,value:M,type:F.type,isCompileTimeOnly:s,token:y.token,initializedAtToken:y.token,consumedAtToken:void 0,isCreatedFromDestructuringAtomVariable:l,isReassignable:!1,isOwningTheGcValue:!1}});a=L}y.$={env:a,type:o,value:r,pathCollection:[]};continue}else if(V(y)&&v(y,":",2)){let b=y.args[0],F=y.args[1];if(!j(b)||!nt(b))throw p({token:b.token,errorMessage:`Expected identifier for label in destructuring pattern, got ${T(b)}`});w=b;let M=w.token.value,L=n.findIndex(B=>B.label===M);if(L===-1)throw p({token:y.token,errorMessage:`Label "${M}" being destructured not found.`});g=L,_=n[g];let O;if((ln(r)||tn(r)||Ke(r)||Nt(r))&&(O=r.fields[g]),h=O,j(F)&&nt(F))$=F,E=F.token.value,k=F.token;else throw p({token:F.token,errorMessage:`Nested destructuring is not supported:
2059
+
2060
+ ${T(F)}`});if(c[_.label])throw p({token:y.token,errorMessage:`Label "${M}" being destructured already exists.`});c[_.label]={label:_.label,variableName:E,type:_.type}}else{if(V(y))throw p({token:y.token,errorMessage:`Nested destructuring is not supported:
2061
+
2062
+ ${T(y)}`});if(j(y)&&nt(y)){if(ot(o))throw p({token:y.token,errorMessage:`Cannot destructure union type with positional destructuring, got ${x(o)}`});if(c[_.label])throw p({token:y.token,errorMessage:`Label "${_.label}" being destructured already exists.`});c[_.label]={label:_.label,variableName:y.token.value,type:_.type},(ln(r)||tn(r)||Nt(r)||Ke(r))&&(h=r.fields[g]),E=y.token.value,k=y.token}else throw p({token:y.token,errorMessage:`Unsupported destructuring pattern for: ${T(y)}`})}if(E&&k){if(!h&&s)throw p({token:y.token,errorMessage:`Destructuring field "${E}" is not defined in compile-time only context.`});let{env:b}=we({env:a,variable:{name:E,type:_.type,isCompileTimeOnly:s,value:h,token:k,initializedAtToken:k,consumedAtToken:void 0,isCreatedFromDestructuringAtomVariable:l,isReassignable:!1,isOwningTheGcValue:!1}});a=b,y.$={env:a,type:_.type,value:h,pathCollection:[]},w&&(w.$={env:a,type:_.type,value:h,pathCollection:[]}),$&&($.$={env:a,type:_.type,value:h,pathCollection:[]})}}let f=[];for(let m in c){let y=c[m];f.push({label:y.label,type:y.type,variableName:y.variableName})}return{env:a,runtimeDestructurings:f}}function sf({lhs:e,rhs:t,env:n,isCompileTimeOnly:r,context:o}){var s;if(!((s=t.$)!=null&&s.type))throw p({token:t.token,errorMessage:`(1) Expected type for right-hand side, got ${T(t)}`});let i=t.$.type,a=t.$.value;if(($e(i)||ot(i)||Ee(i))&&V(e))return as({lhsFunc:e.func,lhsFields:e.args,rhsFields:i.fields,rhsValue:a,rhsType:i,lhs:e,env:n,context:{...o},isCompileTimeOnly:r,isDestructuringAtomVariable:j(t)});if(He(i)&&V(e)&&v(e,A.tuple))return as({lhsFunc:e.func,lhsFields:e.args,rhsFields:i.fields,rhsValue:a,rhsType:i,lhs:e,env:n,context:{...o},isCompileTimeOnly:r,isDestructuringAtomVariable:j(t)});if(Ve(i)&&V(e)){let l=i.selectedVariantName;if(!l)throw p({token:t.token,errorMessage:`Expected enum variant name to be determined, got ${x(i)}`});let u=i.variants.find(d=>d.name===l);if(!u)throw p({token:t.token,errorMessage:`Expected enum variant "${l}" to be defined, got ${x(i)}`});if(!u.fields)throw p({token:t.token,errorMessage:`Cannot destructure enum variant "${l}" without fields, got ${x(i)}`});return as({lhsFunc:e.func,lhsFields:e.args,rhsFields:u.fields,rhsValue:a,rhsType:i,lhs:e,env:n,context:{...o},isCompileTimeOnly:r,isDestructuringAtomVariable:j(t)})}throw He(i)||$e(i)||ot(i)||Ee(i)?p({token:e.token,errorMessage:`Destructuring assignment not supported for the left-hand pattern:
2063
+
2064
+ ${T(e)}`}):p({token:t.token,errorMessage:`Destructuring assignment not supported for the right-hand type:
2065
+
2066
+ ${x(i)}`})}function lf({expr:e,env:t,context:n}){var a,s,l,u,d,c,f,m,y,g,h;if(!v(e,":=",2)&&!v(e,"::",2))throw p({token:e.token,errorMessage:'Expected ":=" or "::" for initialization assignment.'});let r=v(e,"::");if(!r&&((a=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:a.kind)==="function-body"&&n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.isCompileTimeOnly)throw p({token:e.token,errorMessage:"Unexpected runtime variable declaration in a compile-time only function body."});let o=e.args[0],i=e.args[1];if(V(o)&&v(o,":"))throw p({token:o.token,errorMessage:`Unexpected use of ":" in type declaration with "${e.token.value}". Please consider using "=":
2067
+ (${T(o)}) = ${T(i)}`});if(i=S({expr:i,env:t,context:{...n,expectedType:void 0}}),(s=i.$)!=null&&s.env&&(t=(l=i.$)==null?void 0:l.env),(u=i.$)!=null&&u.type&&tr(i.$.type,i.token),(d=i.$)!=null&&d.controlFlow&&os(i,i.$.controlFlow),j(o)){if(Cr(i,t),xt(i,{...n}),(c=i.$)!=null&&c.env&&(t=(f=i.$)==null?void 0:f.env),!nt(o))throw p({token:o.token,errorMessage:`Invalid assignment to ${o.token.value}, expected identifier or operator`});let _=(m=i.$)==null?void 0:m.type;if((y=o.$)!=null&&y.type){try{let{expr:F,type:M,env:L}=sr({expr:i,type:(g=o.$)==null?void 0:g.type,env:t,context:{...n}});i=F,_=M,t=L}catch(F){throw p({token:i.token,errorMessage:`(evaluateInitializationAssignment) Failed to synthesize type for expression: ${T(i)}
2068
+ ${F}`})}if(!W({type:o.$.type,env:t},{type:_,env:t}))throw p({token:o.token,errorMessage:`Incompatible types:
2069
+ - Defined: ${x(o.$.type)}
2070
+ - Given : ${x(_)}`})}else{if(!_)throw p({token:i.token,errorMessage:`Failed to evaluate, got ${T(i)}`});let F=_;r||(F=vt({type:_,expectedType:void 0,expr:i,env:t})),o.$={...o.$,env:t,type:F,pathCollection:[]}}if(!r&&hn(o.$.type))throw p({token:e.token,errorMessage:`Expected "::" instead of ":=" for compile-time known value assignment:
2071
+ ${T(e)}`});if(r&&er(o.$.type))throw p({token:e.token,errorMessage:`Expected ":=" instead of "::" for value type "${x(o.$.type)}" which can only be used at the runtime:
2072
+ ${T(e)}`});let E=(h=i.$)==null?void 0:h.value;if(G(E)&&!E.value.typeName&&E.value!==n.SelfType?E.value.typeName=o.token.value:Fe(E)&&!E.funcName?(E.funcName=o.token.value,E.funcId+=`_${o.token.value}`):Ke(E)&&!E.type.typeName&&E.type!==n.SelfType&&(E.type.typeName=o.token.value),!E&&r)throw p({token:o.token,errorMessage:`Expected compile-time value for "${o.token.value}".
2073
+ Got runtime value. Please consider using ":=" instead of "::":
2074
+ ${T(i)}`});o.$={...o.$,env:t,type:o.$.type,value:r?E??re(o.$.type,o.token.value):void 0,pathCollection:[]};let k=o.$.type;ee(k)&&_&&ee(_)&&_.resolvedConcreteType&&(k={...k,resolvedConcreteType:_.resolvedConcreteType},o.$.type=k);let w=Lo(i,t,t.modulePath),$=w;w!=null&&w.consumedAtToken&&($=void 0);let{env:b}=we({env:t,variable:{name:o.token.value,type:k,isCompileTimeOnly:r,value:o.$.value,token:o.token,initializedAtToken:o.token,consumedAtToken:void 0,isOwningTheGcValue:qe(k),isOwningTheSameGcValueAs:$,isReassignable:!0}});return t=b,o.$.env=t,e.$={env:t,value:J,type:J.type,pathCollection:[]},e}else{let{env:_,runtimeDestructurings:E}=sf({lhs:o,rhs:i,env:t,isCompileTimeOnly:r,context:{...n}});return t=_,e.$={env:t,value:J,type:J.type,pathCollection:[],runtimeDestructurings:E},e}}function uf({expr:e,env:t,context:n}){var k,w,$,b,F,M,L,O,B,P,q;if(!v(e,A.match))throw p({token:e.token,errorMessage:`Expected "match", got ${e.tag}`});let r=e.args;if(r.length<2)throw p({token:e.token,errorMessage:`Expected at least 2 arguments for "match", got ${r.length}`});let o=r[0],i=Et({expr:o,env:t,context:{...n,expectedType:void 0},variablesToAdd:[]});if(!i.$)throw p({token:o.token,errorMessage:`Failed to evaluate the match scrutinee expression: ${T(o)}`});t=i.$.env;let a=i.$.type,s=i.$.value,l,u;if(De(a)?(u=a.childType,l=a.tag):u=a,!Ve(u))throw p({token:o.token,errorMessage:`Expected enum type for match expression, got ${a?x(a):"unknown type"}`});let d=r.slice(1),c=[],f,m=new Set,y=!1,g=!1,h=[],_=[];for(let ne=0;ne<d.length;ne++){let pe=d[ne],ue=t;if(!V(pe)||!v(pe,"=>",2))throw p({token:pe.token,errorMessage:`Expected ":" for match pattern, got ${T(pe)}`});let oe=pe.args[0],ye=pe.args[1];if(V(oe)&&v(oe,".",1)||en(oe,"_")){if(g)throw p({token:oe.token,errorMessage:'Wildcard pattern "_" can only be used once and must be the last match arm in a "match" expression.'});let ge;if(V(oe)){if(ge=oe.args[0],!j(ge))throw p({token:oe.token,errorMessage:`Expected identifier for enum variant, got ${T(ge)}`})}else g=!0,ge=oe;let Me=ge.token.value,Se=u.variants.find(te=>te.name===Me);if(!Se&&Me!=="_")throw p({token:oe.token,errorMessage:`Enum variant "${Me}" not found in ${x(u)}`});if(Se&&Se.fields&&Se.fields.length>0)throw p({token:oe.token,errorMessage:`Enum variant "${Me}" has ${Se.fields.length} field(s) and must be destructured. Use .${Me}(...) instead of .${Me}`});if(m.add(Me),Me!=="_"&&Nt(s)&&s.variantName!==Me)continue;let Re={...u,selectedVariantName:Me==="_"?void 0:Me};ge.$={env:ue,type:Re,value:void 0,pathCollection:[]};let Te=Re;l&&l==="Ptr"&&(Te=hr(Re));let be=ye;if(ue=ut(ue),i.$.variableName){let te=i.$.variableName;if(me(ue,te).length===0){let{env:ve}=we({env:ue,variable:{name:te,type:Te,isCompileTimeOnly:!1,value:i.$.value,token:i.token,initializedAtToken:i.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheGcValue:!1}});ue=ve}}oe.$={env:ue,type:Te,value:void 0,pathCollection:[],caseExecuted:!0};let I=Et({expr:be,env:ue,context:{...n,isExecuting:Nt(s)&&s.variantName===Me},variablesToAdd:[]});if(!((k=I.$)!=null&&k.type))throw p({token:be.token,errorMessage:`Expected type for match result expression, got ${T(be)}`});let U=Ct(I.$.env,!0);if(ue=U,I.$={...I.$,env:U},s===void 0&&I.$&&(I.$.value=void 0),I.$.controlFlow?(h.push(I.$.controlFlow),I.$.controlFlow==="return"&&_.push(I),s&&Nt(s)?e.$={env:I.$.env,type:((w=n.expectedType)==null?void 0:w.type)??I.$.type,value:I.$.value,pathCollection:I.$.pathCollection,controlFlow:I.$.controlFlow}:s===void 0&&(e.$={env:I.$.env,type:(($=n.expectedType)==null?void 0:$.type)??I.$.type,value:void 0,pathCollection:I.$.pathCollection,controlFlow:I.$.controlFlow})):y=!0,ue=I.$.env,c.push(I),n.expectedType&&!W(n.expectedType,{type:I.$.type,env:I.$.env}))throw p({token:I.token,errorMessage:`Incompatible type with expected type:
2075
+ - Expected: ${x(n.expectedType.type)}
2076
+ - Actual : ${x(I.$.type)}`});if(!I.$.controlFlow){if(!f)f={type:(b=I.$)==null?void 0:b.type,env:ue};else if(!W({type:f.type,env:ue},{type:(F=I.$)==null?void 0:F.type,env:t}))if(W({type:vt({type:f.type,expectedType:void 0,expr:void 0,env:f.env}),env:f.env},{type:I.$.type,env:ue}))f={type:I.$.type,env:ue};else throw p({token:I.token,errorMessage:`Incompatible types:
2077
+ - Previous: ${x(f.type)}
2078
+ - Current : ${x(I.$.type)}`})}}else if(V(oe)&&V(oe.func)&&v(oe.func,".",1)){if(g)throw p({token:oe.token,errorMessage:'Wildcard pattern "_" can only be used once and must be the last match arm in a "match" expression.'});let ge=oe.func.args[0];if(!j(ge))throw p({token:oe.token,errorMessage:`Expected identifier for enum variant, got ${T(ge)}`});let Me=ge.token.value,Se=u.variants.find(se=>se.name===Me);if(!Se)throw p({token:oe.token,errorMessage:`Enum variant "${Me}" not found in ${x(u)}`});if(m.add(Me),Nt(s)&&s.variantName!==Me)continue;let Re=oe.args;if(Se.fields&&Se.fields.length>0){if(!Re.some(ve=>V(ve)&&v(ve,":",2))&&Re.length!==Se.fields.length)throw p({token:oe.token,errorMessage:`Variant "${Me}" expects ${Se.fields.length} parameters, got ${Re.length}`})}else if(Re.length>0)throw p({token:oe.token,errorMessage:`Variant "${Me}" has no fields, but destructuring parameters were provided`});let Te={...u,selectedVariantName:Me};ge.$={env:ue,type:Te,value:void 0,pathCollection:[]};let be=Te;if(l&&l==="Ptr"&&(be=hr(Te)),ue=ut(ue),Se.fields&&Se.fields.length>0){let se=new Set;for(let ve=0;ve<Re.length;ve++){let xe=Re[ve];if(V(xe)&&v(xe,":",2)){let Ze=xe.args[0],Je=xe.args[1];if(!j(Ze))throw p({token:Ze.token,errorMessage:`Expected identifier for label in destructuring pattern, got ${T(Ze)}`});let rt=Ze.token.value,Cn=Se.fields.findIndex(an=>an.label===rt);if(Cn===-1)throw p({token:Ze.token,errorMessage:`Label "${rt}" not found in variant "${Me}". Available labels: ${Se.fields.map(an=>an.label).join(", ")}`});if(se.has(rt))throw p({token:Ze.token,errorMessage:`Label "${rt}" is already destructured`});se.add(rt);let qt=Se.fields[Cn];if(j(Je)){let an=Je.token.value;if(an!=="_"){let{env:Xo}=we({env:ue,variable:{name:an,type:qt.type,isCompileTimeOnly:!1,value:void 0,token:Je.token,initializedAtToken:Je.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheGcValue:!1}});ue=Xo}Je.$={env:ue,type:qt.type,value:void 0,pathCollection:[]},Ze.$={env:ue,type:qt.type,value:void 0,pathCollection:[]}}else throw p({token:Je.token,errorMessage:`Expected identifier or "_" for variable in labeled destructuring, got ${T(Je)}`})}else if(j(xe)){let Ze=xe.token.value,Je=Se.fields[ve];if(Ze!=="_"){let{env:rt}=we({env:ue,variable:{name:Ze,type:Je.type,isCompileTimeOnly:!1,value:void 0,token:xe.token,initializedAtToken:xe.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheGcValue:!1}});ue=rt}xe.$={env:ue,type:Je.type,value:void 0,pathCollection:[]}}else throw p({token:xe.token,errorMessage:`Expected identifier, "_", or labeled pattern (label: variable) for destructuring parameter, got ${T(xe)}`})}}if(i.$.variableName){let se=i.$.variableName;if(me(ue,se).length===0){let{env:xe}=we({env:ue,variable:{name:se,type:be,isCompileTimeOnly:!1,value:i.$.value,token:i.token,initializedAtToken:i.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheGcValue:!1}});ue=xe}}oe.$={env:ue,type:be,value:void 0,pathCollection:[],caseExecuted:!0};let I=ye,U=Et({expr:I,env:ue,context:{...n,isExecuting:Nt(s)&&s.variantName===Me},variablesToAdd:[]});if(!((M=U.$)!=null&&M.type))throw p({token:I.token,errorMessage:`Expected type for match result expression, got ${T(I)}`});let te=Ct(U.$.env,!0);if(ue=te,U.$={...U.$,env:te},s===void 0&&U.$&&(U.$.value=void 0),U.$.controlFlow?(h.push(U.$.controlFlow),U.$.controlFlow==="return"&&_.push(U),s&&Nt(s)?e.$={env:U.$.env,type:((L=n.expectedType)==null?void 0:L.type)??U.$.type,value:U.$.value,pathCollection:U.$.pathCollection,controlFlow:U.$.controlFlow}:s===void 0&&(e.$={env:U.$.env,type:((O=n.expectedType)==null?void 0:O.type)??U.$.type,value:void 0,pathCollection:U.$.pathCollection,controlFlow:U.$.controlFlow})):y=!0,ue=U.$.env,c.push(U),!U.$.controlFlow){if(!f)f={type:(B=U.$)==null?void 0:B.type,env:ue};else if(!W({type:f.type,env:ue},{type:(P=U.$)==null?void 0:P.type,env:t}))if(W({type:vt({type:f.type,expectedType:void 0,expr:void 0,env:f.env}),env:f.env},{type:U.$.type,env:ue}))f={type:U.$.type,env:ue};else throw p({token:U.token,errorMessage:`Incompatible types:
2079
+ - Previous: ${x(f.type)}
2080
+ - Current : ${x(U.$.type)}`})}}else throw p({token:oe.token,errorMessage:`Invalid pattern in match expression: ${T(oe)}
2081
+ Supported patterns:
2082
+ - .VariantName (for variants without fields)
2083
+ - .VariantName(param1, param2, ...) (for variants with fields)
2084
+ - _ (wildcard pattern)`})}let E;if(h.every(ne=>ne==="return")?E="return":h.every(ne=>ne==="break")?E="break":h.every(ne=>ne==="continue")?E="continue":n.isEvaluatingLoopBody?h.find(ne=>ne==="continue")?E="continue":h.find(ne=>ne==="break")?E="break":h.find(ne=>ne==="return")&&(E="return"):E=void 0,y||!E){if(y&&!f)throw p({token:e.token,errorMessage:"Failed to determine the type of value from the cond."});if(f||(f={type:J.type,env:t}),!m.has("_")){let ne=u.variants.filter(pe=>!m.has(pe.name));if(ne.length>0)throw p({token:e.token,errorMessage:`Match expression is not exhaustive. Missing cases for variants:
2085
+
2086
+ - ${ne.map(pe=>pe.name).join(`
2087
+ - `)}`})}t=Mo(t,c.filter(ne=>ne.$&&ne.$.controlFlow!=="return")),e.$={env:t,type:((q=n.expectedType)==null?void 0:q.type)??f.type,value:s===void 0?void 0:re(f.type),pathCollection:[]},ze(e,!0)}else{if(h.length===0)throw p({token:e.token,errorMessage:"No control flows found but expected some."});if(E==="return"){if(!n.isEvaluatingFunctionBodyOrAsyncBlock)throw p({token:e.token,errorMessage:"All cases in match are returning from function, but not evaluating in function body."});let ne;if(n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"?ne=n.isEvaluatingFunctionBodyOrAsyncBlock.type.return.type:n.expectedType&&(ne=n.expectedType.type),!ne)throw p({token:e.token,errorMessage:"Failed to determine the return type for match statement."});e.$={env:t,type:ne,value:n.isEvaluatingFunctionBodyOrAsyncBlock.kind==="function-body"&&ta(n.isEvaluatingFunctionBodyOrAsyncBlock.type)?re(ne):void 0,pathCollection:[],controlFlow:"return"}}else if(E==="break"){if(!n.isEvaluatingLoopBody)throw p({token:e.token,errorMessage:"All cases in match are breaking from loop, but not inside a loop."});e.$={env:t,type:J.type,value:J,pathCollection:[],controlFlow:"break"}}else if(E==="continue"){if(!n.isEvaluatingLoopBody)throw p({token:e.token,errorMessage:"All cases in match are continuing loop, but not inside a loop."});e.$={env:t,type:J.type,value:J,pathCollection:[],controlFlow:"continue"}}return e}return e}function pf({expr:e,env:t,context:n}){var l,u,d,c;let r=e.args[0];if(!r)throw p({token:e.token,errorMessage:`Expected "using" with 1 argument, got:
2088
+ ${T(e)}`});let o=S({expr:r,env:t,context:{...n}});if(!o.$)throw p({token:o.token,errorMessage:`Failed to evaluate the module argument:
2089
+ ${T(o)}`});let i=o.$.type,a=o.$.value,s;if(Ke(a)){let f=a,m=f.type;for(let y=0;y<m.fields.length;y++){let g=f.fields[y],h=m.fields[y],{env:_}=we({env:t,variable:{name:h.label,type:h.type,isCompileTimeOnly:h.isCompileTimeOnly,value:g,token:((l=h.exprs.labelExpr)==null?void 0:l.token)??h.exprs.expr.token,initializedAtToken:((u=h.exprs.labelExpr)==null?void 0:u.token)??h.exprs.expr.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheGcValue:!1}});t=_}}else if($e(i)){let f=a,m=i;s=[];for(let y=0;y<m.fields.length;y++){let g;tn(f)&&(g=f.fields[y]);let h=m.fields[y];try{let{env:_}=we({env:t,variable:{name:h.label,type:h.type,isCompileTimeOnly:h.isCompileTimeOnly,value:g,token:((d=h.exprs.labelExpr)==null?void 0:d.token)??h.exprs.expr.token,initializedAtToken:((c=h.exprs.labelExpr)==null?void 0:c.token)??h.exprs.expr.token,consumedAtToken:void 0,isReassignable:!1,isOwningTheGcValue:!1}});t=_,s.push({label:h.label,variableName:h.label,type:h.type})}catch(_){throw st([{token:r.token,errorMessage:`Failed to import struct field "${h.label}"`},..._ instanceof Jt?_.tokenAndErrorList:[{token:r.token,errorMessage:_.toString()}]])}}}else throw p({token:r.token,errorMessage:`Expected module/struct for "${A.open}", got:
2090
+ ${T(r)}`});return e.$={env:t,value:J,type:J.type,pathCollection:[],runtimeDestructurings:s},e}function cf({expr:e,env:t,context:n}){var s,l,u,d,c,f,m,y,g,h,_,E,k,w;if(!v(e,"."))throw p({token:e.token,errorMessage:`Expected "." for property access, got:
2091
+ ${T(e)}`});if(v(e,".",1)){let $=e.args[0];if(!j($)&&!nt($))throw p({token:$.token,errorMessage:`Expected identifier for enum variant access, got:
2092
+ ${T($)}`});let b=(s=n.expectedType)==null?void 0:s.type;if(!Ve(b))throw p({token:e.token,errorMessage:"Failed to infer enum variant type."});let F=$.token.value,M=b,L=M.variants.find(B=>B.name===F);if(!L)throw p({token:$.token,errorMessage:`Enum variant "${F}" not found in enum`});let O={...M,selectedVariantName:F};if(!L.fields)e.$={env:t,type:O,value:Jn(O,F,[]),pathCollection:[]},$.$={env:t,type:O,pathCollection:[]};else{let B=ae(O);e.$={env:t,value:B,type:B.type,pathCollection:[]},$.$=e.$}return e}if(!v(e,".",2))throw p({token:e.token,errorMessage:`Expected "." with 2 arguments, got:
2093
+ ${T(e)}`});let r=e.args[0],o=e.args[1];if(r=S({expr:r,env:t,context:{...n,expectedType:void 0}}),(l=r.$)!=null&&l.env&&(t=(u=r.$)==null?void 0:u.env),j(o)&&o.token.value==="*"&&De((d=r.$)==null?void 0:d.type)){let $=r.$.type,b=$.childType;return ee(b)&&(b=fn(t,b)),e.$={env:t,type:b,value:void 0,originType:$,isAccessingProperty:!0,pathCollection:[]},o.$=e.$,e}if(G((c=r.$)==null?void 0:c.value)){let $=r.$.value;if(Ve($.value)){if(!j(o))throw p({token:o.token,errorMessage:`Expected identifier for enum variant, got:
2094
+ ${T(o)}`});{let O=o.token.value,B=$.value.module.fields.find(P=>P.label===O);if(B)return e.$={env:t,type:B.type,value:B.assignedValue,pathCollection:[],isAccessingProperty:!0},o.$=e.$,e}let b=o.token.value,F=$.value,M=F.variants.find(O=>O.name===b);if(!M)throw p({token:o.token,errorMessage:`Enum variant "${b}" not found in enum`});let L={...F,selectedVariantName:b};if(!M.fields)e.$={env:t,type:L,value:Jn(L,b,[]),isAccessingProperty:!0,pathCollection:[]},o.$=e.$;else{let O=ae(L);e.$={env:t,type:O.type,value:O,isAccessingProperty:!0,pathCollection:[]},o.$=e.$}return e}else if($.value.module){if(!nt(o))throw p({token:o.token,errorMessage:`Expected identifier for type method, got:
2095
+ ${T(o)}`});let b=o.token.value,F=$.value.module.fields.findLast(M=>M.label===b);if(F){let M=((f=F.assignedValue)==null?void 0:f.type)??F.type;return e.$={env:t,type:M,value:F.assignedValue,pathCollection:[],isAccessingProperty:!0},o.$=e.$,e}else{let M=Wr({concreteType:$.value,methodName:b,env:t});if(M.length>0){let L=M[0];return e.$={env:t,type:L.type,value:L.value,pathCollection:[],isAccessingProperty:!0},o.$=e.$,e}return e.$=void 0,e}}else if(Ee($.value)){if(!nt(o))throw p({token:o.token,errorMessage:`Expected identifier for type method, got:
2096
+ ${T(o)}`});let b=o.token.value,F=$.value;if(F.receiverType&&F.receiverType.module){for(let O of F.receiverType.module.fields)if(O.label===""&&O.assignedValue&&Ke(O.assignedValue)){let B=O.assignedValue,P=B.type;if(!W({type:F,env:t},{type:P,env:t}))continue;let q=P.fields.findIndex(ne=>ne.label===b&&ce(ne.type));if(q>=0){let ne=P.fields[q];if(ce(ne.type)){let pe=B.fields[q];if(pe){let ue=ne.type;return Fe(pe)&&pe.specializedType&&(ue=pe.specializedType),e.$={env:t,type:ue,value:pe,pathCollection:[],isAccessingProperty:!0},o.$=e.$,e}}}}let L=Cu({concreteType:F.receiverType,moduleType:F,methodName:b,env:t});if(L)return e.$={env:t,type:L.type,value:L.value,pathCollection:[],isAccessingProperty:!0},o.$=e.$,e}let M=F.fields.find(L=>L.label===b);return M?(e.$={env:t,type:M.type,value:M.assignedValue??re(M.type,M.label),pathCollection:[],isAccessingProperty:!0},o.$=e.$,e):(e.$=void 0,e)}}let i=(m=r.$)==null?void 0:m.type,a=(y=r.$)==null?void 0:y.type;for(;i&&De(i);)i=i.childType;if(He(i)||$e(i)||ot(i)){let $=i.fields,b=r.$.value;if(j(o)){if(o.token.type==="integer"){if(!He((g=r.$)==null?void 0:g.type))throw p({token:o.token,errorMessage:"Accessing tuple field by index is only allowed for tuples."});let F=parseInt(o.token.value,10);if(isNaN(F))throw p({token:o.token,errorMessage:`Expected integer for tuple index, got:
2097
+ ${T(o)}`});let M=$.filter(B=>!B.isCompileTimeOnly).length;if(F<0||F>=M)throw p({token:o.token,errorMessage:`Index out of bounds: ${F} for accessing field in:
2098
+ ${x((h=r.$)==null?void 0:h.type)}`});let L=$[F],O=r.$.originType||a;if(e.$={env:t,type:L.type,originType:O,isAccessingProperty:!0,pathCollection:[[r.$.variableName??"?",o.token.value]]},o.$=e.$,b){let B=[];(ln(b)||tn(b))&&(B=b.fields),e.$.value=B==null?void 0:B[F]}return ze(e,!1),e}else if(nt(o)){let F=o.token.value;{let M=$.findIndex(B=>B.label===F);if(M<0){if(Ee((_=r.$)==null?void 0:_.type))throw p({token:o.token,errorMessage:`Module field "${F}" not found in module type`});return e.$=void 0,e}let L=$[M],O=((E=r.$)==null?void 0:E.originType)||a;if(e.$={env:t,type:L.type,originType:O,isAccessingProperty:!0,pathCollection:[[r.$.variableName??"?",o.token.value]]},o.$=e.$,b)if(Ue(b))e.$.value=re(L.type);else{let B=[];(ln(b)||tn(b))&&(B=b.fields);let P=B==null?void 0:B[M];P||(P=re(L.type)),e.$.value=P}return ze(e,!1),e}}}}else if(Ee(i)){let $=i.fields,b=r.$.value;if(j(o)){if(o.token.type==="integer")throw p({token:o.token,errorMessage:`Accessomg module field by index is not allowed, got:
2099
+ ${T(o)}`});if(nt(o)){let F=o.token.value;{let M=$.findIndex(O=>O.label===F);if(M<0){if(Ee((k=r.$)==null?void 0:k.type))throw p({token:o.token,errorMessage:`Module field "${F}" not found in module type`});return e.$=void 0,e}let L=$[M];if(e.$={env:t,type:L.type,isAccessingProperty:!0,pathCollection:[[r.$.variableName??"?",o.token.value]]},o.$=e.$,b)if(Ue(b))e.$.value=re(L.type);else{let O=[];Ke(b)&&(O=b.fields);let B=O==null?void 0:O[M];!B&&L.isCompileTimeOnly&&(B=re(L.type)),e.$.value=B}return e}}}}else if(Ve(i)&&j(o)){if(!nt(o))throw p({token:o.token,errorMessage:`Expected identifier for enum variant property, got:
2100
+ ${T(o)}`});let $=o.token.value,b=i.variants.find(F=>F.name===i.selectedVariantName);if(b){let F=(b.fields??[]).findIndex(O=>O.label===$);if(F<0)return e.$=void 0,e;let M=(b.fields??[])[F];e.$={env:t,type:M.type,value:void 0,pathCollection:[[r.$.variableName??"?",o.token.value]],isAccessingProperty:!0};let L=(w=r.$)==null?void 0:w.value;return L&&Nt(L)&&L.variantName===b.name&&(e.$.value=L.fields[F]),o.$=e.$,e}}return e.$=void 0,e}function ff({expr:e,env:t,context:n}){var i;if(((i=n.isEvaluatingFunctionBodyOrAsyncBlock)==null?void 0:i.kind)!=="function-body")throw p({token:e.token,errorMessage:`Expected a function type for recur, got:
2101
+ ${T(e)}`});let r=n.isEvaluatingFunctionBodyOrAsyncBlock.type;if(!v(e,A.recur))throw p({token:e.token,errorMessage:`Expected recur, got:
2102
+ ${T(e)}`});return En({expr:e,env:t,givenFunc:{type:r,value:n.isEvaluatingFunctionBodyOrAsyncBlock.value??void 0},context:{...n}})}function df({expr:e,env:t,context:n}){if(!v(e,A.test))throw p({token:e.token,errorMessage:`Expected test, got ${e.tag}`});if(e.args.length!==2)throw p({token:e.token,errorMessage:`test expects 2 arguments (name, body), got ${e.args.length}`});let r=e.args[0],o=e.args[1],i=S({expr:r,env:t,context:{...n}});if(!i.$||!i.$.value)throw p({token:r.token,errorMessage:`Failed to evaluate test name: ${T(r)}`});if(t=i.$.env,!We(i.$.value))throw p({token:r.token,errorMessage:`Expected string for test name, got ${T(r)}`});let a=yt(o),s=S({expr:o,env:t,context:{...n,isEvaluatingFunctionBodyOrAsyncBlock:{kind:"test-block",evaluationEnv:t}}});if(!s.$)throw p({token:o.token,errorMessage:`Failed to evaluate test body: ${T(o)}`});if(!Be(s.$.type))throw p({token:o.token,errorMessage:`Test body must have 'unit' type, got ${x(s.$.type)}`});return s.$.originalExpr=a,t=s.$.env,e.$={env:t,type:J.type,value:J,pathCollection:[]},e}function mf({expr:e,env:t,context:n}){var s,l;if(!v(e,C.typeof,1))throw p({token:e.token,errorMessage:`Expected "typeof" with 1 argument, got:
2103
+ ${T(e)}`});let r=e.args[0],o=S({expr:r,env:t,context:{...n}});if((s=o.$)!=null&&s.env&&(t=o.$.env),!((l=o.$)!=null&&l.type))throw p({token:r.token,errorMessage:`Expected type for expression, got:
2104
+ ${T(r)}`});let i=o.$.type,a=ae(i);return e.$={env:t,type:a.type,value:a,pathCollection:[]},e}function Ta({expr:e,env:t,context:n}){if(e.args.length!==2&&e.args.length!==3)throw p({token:e.token,errorMessage:`Expected 2 or 3 arguments for while loop, got ${e.args.length}`});let r=e.args[0],o,i;e.args.length===3?(o=e.args[1],i=e.args[2]):i=e.args[1];let a=Et({expr:r,env:t,context:{...n},variablesToAdd:[]});if(!a.$)throw p({token:r.token,errorMessage:`Failed to evaluate the condition expression:
2105
+ ${T(r)}`});if(!vn(a.$.type))throw p({token:r.token,errorMessage:`Expected bool type for condition expression, got:
2106
+ ${T(r)}`});let s=a.$.value,l=s!==void 0;if(et(s)&&s.value===!1)return e.$={env:t,pathCollection:[],type:J.type,value:l?J:void 0},e;{let u=Et({expr:i,env:t,context:{...n,isEvaluatingLoopBody:{kind:"while",env:t}},variablesToAdd:[]});if(!u.$)throw p({token:i.token,errorMessage:`Failed to evaluate the body expression:
2107
+ ${T(i)}`});if(u.$.controlFlow){if(u.$.controlFlow==="return")et(s)&&s.value===!0?e.$={env:u.$.env,pathCollection:u.$.pathCollection,type:u.$.type,value:u.$.value,controlFlow:u.$.controlFlow}:e.$={env:t,pathCollection:[],type:J.type,value:l?J:void 0};else if(u.$.controlFlow==="break")e.$={env:u.$.env,pathCollection:[],type:J.type,value:l?J:void 0};else if(u.$.controlFlow==="continue"){let c=u.$.env;if(o){let f=S({expr:o,env:c,context:{...n}});if(!f.$)throw p({token:o.token,errorMessage:`Failed to evaluate the step expression:
2108
+ ${T(o)}`});c=f.$.env}if(et(s))return Ta({expr:e,env:c,context:{...n}});e.$={env:c,pathCollection:[],type:J.type,value:l?J:void 0}}return e}if(!Be(u.$.type))throw p({token:i.token,errorMessage:`Expected the while loop body to return unit, but got:
2109
+ ${x(u.$.type)}`});let d=u.$.value===void 0;if(t=u.$.env,o){let c=S({expr:o,env:t,context:{...n}});if(!c.$)throw p({token:o.token,errorMessage:`Failed to evaluate the step expression:
2110
+ ${T(o)}`});t=c.$.env}return et(s)&&s.value===!0&&d?(e.$={env:t,pathCollection:[],type:J.type,value:void 0},e):et(s)&&s.value===!0?Ta({expr:e,env:t,context:{...n}}):(e.$={env:t,pathCollection:[],type:J.type,value:l?J:void 0},e)}}function yf({expr:e,env:t,context:n}){if(j(e))switch(e.token.type){case"identifier":case"operator":case"backtick_identifier":return va({expr:e,env:t,context:{...n},throwErrorOnUndefined:!0});case"integer":return Jc(e,t,{...n});case"float":return Zc(e,t,{...n});case"string":return Xc(e,t);case"char":return Wc(e,t);case"bool":return jc(e,t);default:throw p({token:e.token,errorMessage:`(1) Evaluating the expression (tag: ${e.tag}, token: ${e.token.type}) below is not implemented:
2111
+ ${T(e)}`})}else if(v(e,":",2)){let{expr:r}=ha({expr:e,env:t,context:n});return r}else return v(e,":=",2)||v(e,"::",2)?lf({expr:e,env:t,context:n}):v(e,"=",2)?tf({expr:e,env:t,context:n}):v(e,"->",2)?V(e.args[0])&&(v(e.args[0],A.fn)||v(e.args[0],A.unsafe_fn))?ma({expr:e,env:t,context:{...n,isUnsafeFunctionType:v(e.args[0],A.unsafe_fn)}}):V(e.args[0])&&v(e.args[0],A.Fn)?Dc({expr:e,env:t,context:{...n}}):ga({expr:e,env:t,context:{...n}}):v(e,"=>",2)?V(e.args[0])&&v(e.args[0],A.fn)?Sc({expr:e,env:t,context:{...n}}):ga({expr:e,env:t,context:{...n}}):v(e,"=>>",2)?ga({expr:e,env:t,context:{...n}}):v(e,A.recur)?ff({expr:e,env:t,context:{...n}}):v(e,A.extern)?of({expr:e,env:t,context:{...n}}):v(e,A.c_include)?nf({expr:e,env:t,context:{...n}}):v(e,A.test)?df({expr:e,env:t,context:{...n}}):v(e,A.cond)?rf({expr:e,env:t,context:{...n}}):v(e,A.match)?uf({expr:e,env:t,context:{...n}}):v(e,A.tuple)?ef({expr:e,env:t,context:{...n}}):v(e,A.array)?Yc({expr:e,env:t,context:{...n}}):v(e,A.compt_list)?Hc({expr:e,env:t,context:{...n}}):v(e,A.dyn)?Qc({expr:e,env:t,context:{...n}}):v(e,A.struct)?ao({expr:e,env:t,context:{...n}}):v(e,A.object)?zc({expr:e,env:t,context:{...n}}):v(e,A.newtype)?Pc({expr:e,env:t,context:{...n}}):v(e,A.enum)?Nc({expr:e,env:t,context:{...n}}):v(e,A.union)?qc({expr:e,env:t,context:{...n}}):v(e,".")?cf({expr:e,env:t,context:{...n}}):v(e,A.begin)?Et({expr:e,env:t,context:{...n},variablesToAdd:[]}):v(e,A.module)?Uc({expr:e,env:t,context:{...n}}):v(e,A.Impl)?cc({expr:e,env:t,context:{...n}}):v(e,A.impl)?ku({expr:e,env:t,context:{...n}}):v(e,C.typeof)?mf({expr:e,env:t,context:{...n}}):v(e,C.sizeof)?hc({expr:e,env:t,context:{...n}}):v(e,C.alignof)?sp({expr:e,env:t,context:{...n}}):v(e,C.rc)?gc({expr:e,env:t,context:{...n}}):v(e,"<:")?Tu({expr:e,env:t,context:{...n}}):v(e,C.the)?vc({expr:e,env:t,context:{...n}}):v(e,C.async)?Ep({expr:e,env:t,context:{...n}}):v(e,C.await)?lc({expr:e,env:t,context:{...n}}):v(e,A.import)?af({expr:e,env:t,context:{...n},stdPath:n.stdPath}):v(e,A.open)?pf({expr:e,env:t,context:{...n}}):v(e,A.Ptr,1)?xc({expr:e,env:t,context:{...n}}):v(e,A.Iso,1)?Wp({expr:e,env:t,context:{...n}}):v(e,C.__yo_address_of,1)?_c({expr:e,env:t,context:{...n}}):v(e,A.Tuple)?Rc({expr:e,env:t,context:{...n}}):v(e,A.Array)?Mc({expr:e,env:t,context:{...n}}):v(e,A.Slice)?Gc({expr:e,env:t,context:{...n}}):v(e,A.ComptList)?Lc({expr:e,env:t,context:{...n}}):v(e,A.Future)?Oc({expr:e,env:t,context:{...n}}):v(e,A.Concrete)?Ac({expr:e,env:t,context:{...n}}):v(e,A.Dyn)?Ic({expr:e,env:t,context:{...n}}):v(e,C.compt_expect_error)?bp({expr:e,env:t,context:{...n}}):v(e,C.compt_assert)?Cp({expr:e,env:t,context:{...n}}):v(e,C.compt_print)?Lp({expr:e,env:t,context:{...n}}):v(e,C.panic)?yc({expr:e,env:t,context:{...n}}):v(e,C.macro_expand)?dc({expr:e,env:t,context:{...n}}):v(e,A.op_and)||v(e,A.op_or)?lp({expr:e,env:t,context:{...n}}):v(e,C.consume)?Ip({expr:e,env:t,context:{...n}}):v(e,C.___drop)?ec({expr:e,env:t,context:{...n}}):v(e,C.___dup)?tc({expr:e,env:t,context:{...n}}):v(e,C.__yo_decr_rc)?up({expr:e,env:t,context:{...n}}):v(e,C.__yo_incr_rc)?pp({expr:e,env:t,context:{...n}}):v(e,C.__yo_decr_rc_atomic)?fp({expr:e,env:t,context:{...n}}):v(e,C.__yo_incr_rc_atomic)?cp({expr:e,env:t,context:{...n}}):v(e,C.__yo_iso_extract)?hp({expr:e,env:t,context:{...n}}):v(e,C.__yo_iso_dispose)?vp({expr:e,env:t,context:{...n}}):v(e,C.__yo_rc_own)?dp({expr:e,env:t,context:{...n}}):v(e,C.__yo_dyn_drop)?mp({expr:e,env:t,context:{...n}}):v(e,C.__yo_dyn_dup)?yp({expr:e,env:t,context:{...n}}):v(e,C.__yo_sometype_drop)?_p({expr:e,env:t,context:{...n}}):v(e,C.__yo_sometype_dup)?gp({expr:e,env:t,context:{...n}}):v(e,C.__yo_gc_collect)?uc({expr:e,env:t,context:{...n}}):v(e,A.quote)?fc({expr:e,env:t,context:{...n}}):v(e,A.gensym)?pc({expr:e,env:t,context:{...n}}):v(e,C.__yo_expr_is_atom)?nc({expr:e,env:t,context:{...n}}):v(e,C.__yo_expr_is_fn_call)?rc({expr:e,env:t,context:{...n}}):v(e,C.__yo_expr_get_callee)?oc({expr:e,env:t,context:{...n}}):v(e,C.__yo_expr_get_args)?ic({expr:e,env:t,context:{...n}}):v(e,C.__yo_expr_to_string)?ac({expr:e,env:t,context:{...n}}):v(e,C.__yo_expr_eq)?sc({expr:e,env:t,context:{...n}}):v(e,C.__yo_compt_list_car)?Fp({expr:e,env:t,context:{...n}}):v(e,C.__yo_compt_list_cdr)?wp({expr:e,env:t,context:{...n}}):v(e,C.__yo_compt_list_cons)?Vp({expr:e,env:t,context:{...n}}):v(e,C.__yo_compt_list_append)?xp({expr:e,env:t,context:{...n}}):v(e,C.__yo_compt_list_length)?Mp({expr:e,env:t,context:{...n}}):v(e,C.__yo_compt_list_element_type)?Sp({expr:e,env:t,context:{...n}}):V(e)&&e.func.tag==="Atom"&&typeof e.func.token.value=="string"&&(e.func.token.value.startsWith("__yo_u8_")||e.func.token.value.startsWith("__yo_i8_")||e.func.token.value.startsWith("__yo_u16_")||e.func.token.value.startsWith("__yo_i16_")||e.func.token.value.startsWith("__yo_u32_")||e.func.token.value.startsWith("__yo_i32_")||e.func.token.value.startsWith("__yo_u64_")||e.func.token.value.startsWith("__yo_i64_")||e.func.token.value.startsWith("__yo_usize_")||e.func.token.value.startsWith("__yo_isize_")||e.func.token.value.startsWith("__yo_f32_")||e.func.token.value.startsWith("__yo_f64_")||e.func.token.value.startsWith("__yo_compt_int_")||e.func.token.value.startsWith("__yo_compt_float_")||e.func.token.value.startsWith("__yo_char")||e.func.token.value.startsWith("__yo_short_")||e.func.token.value.startsWith("__yo_ushort_")||e.func.token.value.startsWith("__yo_int_")||e.func.token.value.startsWith("__yo_uint_")||e.func.token.value.startsWith("__yo_long_")||e.func.token.value.startsWith("__yo_ulong_")||e.func.token.value.startsWith("__yo_longlong_")||e.func.token.value.startsWith("__yo_ulonglong_")||e.func.token.value.startsWith("__yo_longdouble_"))?mc({expr:e,env:t,context:{...n}}):v(e,C.__yo_compt_boolean_and,2)||v(e,C.__yo_compt_boolean_or,2)||v(e,C.__yo_compt_boolean_eq,2)||v(e,C.__yo_compt_boolean_neq,2)||v(e,C.__yo_compt_boolean_not,1)||v(e,C.__yo_compt_boolean_to_string,1)?kp({expr:e,env:t,context:{...n}}):v(e,C.__yo_compt_string_concat,2)||v(e,C.__yo_compt_string_eq,2)||v(e,C.__yo_compt_string_neq,2)||v(e,C.__yo_compt_string_lt,2)||v(e,C.__yo_compt_string_lte,2)||v(e,C.__yo_compt_string_gt,2)||v(e,C.__yo_compt_string_gte,2)||v(e,C.__yo_compt_string_length,1)||v(e,C.__yo_compt_string_to_upper,1)||v(e,C.__yo_compt_string_to_lower,1)||v(e,C.__yo_compt_string_slice)?Ap({expr:e,env:t,context:{...n}}):v(e,C.__yo_type_to_string,1)?Tc({expr:e,env:t,context:{...n}}):v(e,C.__yo_are_types_compatible,2)?$c({expr:e,env:t,context:{...n}}):v(e,C.__yo_type_contains_gc_type,1)?Ec({expr:e,env:t,context:{...n}}):v(e,C.__yo_type_can_form_gc_cycle,1)?Cc({expr:e,env:t,context:{...n}}):v(e,C.__yo_type_impls,2)?kc({expr:e,env:t,context:{...n}}):v(e,C.__yo_var_print_info,1)?Fc({expr:e,env:t,context:{...n}}):v(e,C.__yo_var_is_owning_the_gc_value)?wc({expr:e,env:t,context:{...n}}):v(e,C.__yo_var_has_other_aliases)?Vc({expr:e,env:t,context:{...n}}):v(e,A.while)?Ta({expr:e,env:t,context:{...n}}):v(e,C.va_start)?bc({expr:e,env:t,context:{...n}}):En({expr:e,env:t,context:{...n}})}var _f=require("node:fs"),gf=Kn(require("path"));var $m=process.env.YO_SKIP_PRELUDE==="1"||process.env.YO_SKIP_PRELUDE==="true",Qo=class{constructor({modulePath:t,stdPath:n,loadModule:r,inputString:o}){if(this.modulePath=t,!this.modulePath.match(/^file:\/\//))throw new Error(`Invalid file protocol: ${this.modulePath}. Only file:// is supported for now. `);try{this.inputString=o??(0,_f.readFileSync)(t.replace(/^file:\/\//,""),"utf-8"),this.parser=new wr({modulePath:t,inputString:this.inputString}),this.program=this.parser.getProgram(),this.tokens=this.parser.getTokens(),this.evaluateProgram(n,r)}catch(i){throw new Error(`Failed to import module "${t}":
2112
+ ${i instanceof Jt?i.toString():i instanceof Error?i.message:String(i)}`)}}getProgram(){return this.program}getTokens(){return this.tokens}evaluateProgram(t,n){var u,d;let r=ja({modulePath:this.modulePath,inputString:this.inputString}),o="file://"+gf.default.join(t,"prelude.yo");if(!(this.modulePath===o)&&!$m){let{moduleValue:c,moduleError:f}=n(o);if(f)throw f;if(c&&Ee(c.type)){r=ut(r);for(let m=0;m<c.type.fields.length;m++){let y=c.type.fields[m],g=c.fields[m],{env:h}=we({env:r,variable:{name:y.label,type:y.type,value:g,isCompileTimeOnly:!0,initializedAtToken:((u=y.exprs.labelExpr)==null?void 0:u.token)??y.exprs.expr.token,consumedAtToken:void 0,token:((d=y.exprs.labelExpr)==null?void 0:d.token)??y.exprs.expr.token,isOwningTheGcValue:!1}});r=h}}bu(r)}let{moduleValue:a,env:s,partialModuleError:l}=jr({beginExprs:this.program,env:r,context:{isExecuting:!0,expectedType:void 0,SelfType:void 0,loadModule:n.bind(this),stdPath:t,currentModulePath:this.modulePath},allowPartialModule:!0});r=s,this.moduleValue=a,this.moduleError=l}getModuleValue(){if(!this.moduleValue)throw new Error("Module value is not set");return this.moduleValue}getModuleError(){return this.parser.getParserError()??this.moduleError}};var br=class{constructor(){this.modules=new Map;this.dependencies=new Map;this.dependents=new Map;this.stdPath=hf.default.join(__dirname,"../std");this.codeGenratorC=new da,Wl(yf)}addDependency(t,n){this.dependencies.has(t)||this.dependencies.set(t,new Set),this.dependencies.get(t).add(n),this.dependents.has(n)||this.dependents.set(n,new Set),this.dependents.get(n).add(t)}getDependentModules(t){let n=new Set,r=[t];for(;r.length>0;){let o=r.pop(),i=this.dependents.get(o);if(i)for(let a of i)n.has(a)||(n.add(a),r.push(a))}return n}clearDependencies(t){let n=this.dependencies.get(t);if(n)for(let r of n){let o=this.dependents.get(r);o&&o.delete(t)}this.dependencies.delete(t)}loadModule(t,n,r){if(!t.match(/^file:\/\//))throw new Error(`Invalid file protocol: ${t}. Only file:// is supported for now. `);r&&this.addDependency(r,t);let o=this.modules.get(t);if(o)return{moduleValue:o.moduleValue,moduleError:o.moduleError};let i=t,a=new Qo({modulePath:t,stdPath:this.stdPath,loadModule:u=>this.loadModule(u,void 0,i),inputString:n}),s=a.getModuleValue(),l=a.getModuleError();return this.modules.set(t,{moduleValue:s,moduleError:l,evaluator:a}),{moduleValue:s,moduleError:l}}deleteModule(t){if(!t.match(/^file:\/\//))throw new Error(`Invalid file protocol: ${t}. Only file:// is supported for now. `);let n=this.getDependentModules(t),r=[t,...n];for(let o of r)Ya(o),Ga(o),this.clearDependencies(o),this.modules.delete(o)}compileModule(t,{emitC:n,debugGc:r,debugParallelism:o,debugAsyncAwait:i,allocator:a}={}){let{moduleValue:s,moduleError:l}=this.loadModule(t);if(l)throw l;if(!this.modules.get(t))throw new Error(`Module data not found for ${t}`);this.codeGenratorC.compileModule(t,s,{debugGc:r,debugParallelism:o,debugAsyncAwait:i,allocator:a}),n&&console.log(this.codeGenratorC.print())}getGeneratedCode(){return this.codeGenratorC.print()}};var $a=class{constructor(){this.moduleManager=new br}compileModule(t,n){if(n.skipCodegen){let r=this.moduleManager.loadModule(t);if(r.moduleError)throw r.moduleError}else{this.moduleManager.compileModule(t,{emitC:n.emitC,debugGc:n.debugGc,debugParallelism:n.debugParallelism,debugAsyncAwait:n.debugAsyncAwait,allocator:n.allocator??"mimalloc"});let r=this.moduleManager.getGeneratedCode(),o=n.output,i=o+".c";if(Jo.writeFileSync(i,r),console.log(`Generated C code written to ${i}`),n.skipCCompiler)console.log("Skipping C compiler (--skip-c-compiler flag set)");else{let a=n.cCompiler,s;if(n.optimize!==void 0){let f=n.optimize;f==="0"?s=["-Wall","-Wextra","-O0"]:s=["-w",`-O${f}`]}else n.release?s=["-w","-O2"]:s=["-Wall","-Wextra","-O0"];let l=["-std=c11",...s,i,"-o",o];if(n.sanitize&&(n.sanitize==="address"?(l.splice(-2,0,"-fsanitize=address"),l.splice(-2,0,"-fno-omit-frame-pointer"),console.log("AddressSanitizer enabled (memory errors + leak detection)")):n.sanitize==="leak"&&(l.splice(-2,0,"-fsanitize=leak"),console.log("LeakSanitizer enabled (leak detection only)"))),n.extern.forEach(f=>{Jo.existsSync(f)?l.splice(-2,0,f):console.warn(`External file ${f} does not exist and will be ignored`)}),(n.allocator??"mimalloc")==="mimalloc"){let f="vendor/mimalloc/src/static.c";Jo.existsSync(f)?(l.splice(-2,0,f),l.splice(-2,0,"-Ivendor/mimalloc/include"),console.log("Using bundled mimalloc")):console.warn("Bundled mimalloc not found, falling back to standard malloc")}else console.log("Using libc allocator");if(process.platform==="linux")try{(0,Zo.execSync)("command -v pkg-config",{stdio:"ignore"}),(0,Zo.execSync)("pkg-config --exists liburing",{stdio:"ignore"}),l.splice(-2,0,"-luring"),console.log("Using system liburing for async I/O")}catch{console.warn("\u26A0\uFE0F liburing not found - async I/O will not be available. Run 'npm run postinstall' for installation instructions.")}console.log(`Compiling with: ${a} ${l.join(" ")}`);let c=(0,Zo.spawnSync)(a,l,{stdio:"inherit"});c.status===0?console.log(`Successfully compiled to ${o}`):(console.error(`Compilation failed with exit code ${c.status}`),process.exit(c.status||1))}}}};var so=require("child_process"),on=Kn(require("fs")),Tf=Kn(require("os")),Un=Kn(require("path"));var Ae={reset:"\x1B[0m",green:"\x1B[32m",red:"\x1B[31m",yellow:"\x1B[33m",cyan:"\x1B[36m",bold:"\x1B[1m",dim:"\x1B[2m"};function $f(e){let t=Un.resolve(e);if(!on.existsSync(t))return console.error(`${Ae.red}Error: Path does not exist: ${t}${Ae.reset}`),[];let n=on.statSync(t);return n.isFile()?t.endsWith(".yo")?[t]:(console.error(`${Ae.red}Error: File is not a .yo file: ${t}${Ae.reset}`),[]):n.isDirectory()?Ef(t):[]}function Ef(e){let t=[],n=on.readdirSync(e,{withFileTypes:!0});for(let r of n){let o=Un.join(e,r.name);r.isDirectory()?["node_modules","vendor",".git","vscode-extension"].includes(r.name)||t.push(...Ef(o)):r.isFile()&&r.name.endsWith(".test.yo")&&t.push(o)}return t}function Em(e){let t=[];try{aa(),Ha(),Ia();let n=new br,r=`file://${e}`,{moduleError:o}=n.loadModule(r);if(o)return console.error(`${Ae.red}Error evaluating ${e}: ${o}${Ae.reset}`),t;let i=n.modules.get(r);if(!i)return console.error(`${Ae.red}Error: Module not found after loading: ${e}${Ae.reset}`),t;let a=i.evaluator.getProgram();for(let s of a)if(V(s)&&v(s,A.test)&&s.args.length>=2){let l=s.args[0],u=s.args[1],d="unnamed_test";l.$&&We(l.$.value)?d=l.$.value.value:j(l)&&l.token.type==="string"&&(d=l.token.value),t.push({name:d,bodyExpr:u,filePath:e,lineNumber:l.token.position.row+1})}}catch(n){console.error(`${Ae.red}Error parsing ${e}: ${n}${Ae.reset}`)}return t}function Cm(e,t){var r;let n=T(((r=e.bodyExpr.$)==null?void 0:r.originalExpr)??e.bodyExpr);return`${t}
2113
+
2114
+ // Auto-generated main function for test: ${e.name}
2115
+ main :: (fn() -> unit) {
2116
+ ${n};
2117
+ };
2118
+
2119
+ export main;
2120
+ `}function vf(e,t,n){let r=Date.now(),o=e.name.replace(/[^a-zA-Z0-9_]/g,"_"),i=`${Date.now()}_${Math.random().toString(36).substring(2,8)}`,a=Un.dirname(e.filePath),s=`.yo_test_${o}_${i}`,l=Un.join(a,`${s}.yo`),u=Un.join(a,s),d=Un.join(a,`${s}.c`),c=()=>{for(let f of[l,u,d])on.existsSync(f)&&on.unlinkSync(f)};try{aa(),Ha(),Ia();let f=Cm(e,t);on.writeFileSync(l,f);let m=new br;try{m.compileModule(`file://${l}`,{emitC:!1,debugGc:!1,debugParallelism:!1,debugAsyncAwait:!1,allocator:"libc"})}catch(b){return c(),{testName:e.name,filePath:e.filePath,passed:!1,errorMessage:`Compilation error: ${b instanceof Jt?b.toString():b instanceof Error?b.message:String(b)}`,duration:Date.now()-r}}let y=m.getGeneratedCode();on.writeFileSync(d,y),on.existsSync(l)&&on.unlinkSync(l);let g=["-std=c11","-Wall","-Wextra","-O0","-fsanitize=address","-fno-omit-frame-pointer",d,"-o",u];if(process.platform==="linux")try{(0,so.execSync)("command -v pkg-config",{stdio:"ignore"}),(0,so.execSync)("pkg-config --exists liburing",{stdio:"ignore"}),g.splice(-2,0,"-luring")}catch{console.warn("\u26A0\uFE0F liburing not found - async I/O will not be available. Run 'npm run postinstall' for installation instructions.")}let h=(0,so.spawnSync)(n,g,{stdio:"pipe",encoding:"utf-8"});if(h.status!==0)return c(),{testName:e.name,filePath:e.filePath,passed:!1,errorMessage:`C compilation failed:
2121
+ ${h.stderr||h.stdout}`,duration:Date.now()-r};let _=(0,so.spawnSync)(u,[],{stdio:"pipe",encoding:"utf-8",timeout:3e4,env:{...process.env,ASAN_OPTIONS:"detect_leaks=1"}}),E=`${_.stdout||""}${_.stderr||""}`,k=E.includes("LeakSanitizer")||E.includes("detected memory leaks")||E.includes("Direct leak")||E.includes("Indirect leak"),w=_.status===0&&!k;c();let $;if(!w)if(k){let b=E.match(/=+\n([\s\S]*?SUMMARY[\s\S]*?)(\n=+|$)/);$=`Memory leak detected:
2122
+ ${b?b[1]:E}`}else $=`Test failed with exit code ${_.status}
2123
+ ${_.stdout}
2124
+ ${_.stderr}`;return{testName:e.name,filePath:e.filePath,passed:w,errorMessage:$,duration:Date.now()-r}}catch(f){return c(),{testName:e.name,filePath:e.filePath,passed:!1,errorMessage:`Error running test: ${f instanceof Error?f.message:String(f)}`,duration:Date.now()-r}}}async function km(e,t,n,r){let o=[],i=0,a=0,s=!1;if(n===1)for(let{test:l,originalContent:u}of e){if(s)break;let d=vf(l,u,t);if(o.push(d),d.passed)i++,console.log(` ${Ae.green}\u2713${Ae.reset} ${l.name} ${Ae.dim}(${d.duration}ms)${Ae.reset}`);else{if(a++,console.log(` ${Ae.red}\u2717${Ae.reset} ${l.name} ${Ae.dim}(${d.duration}ms)${Ae.reset}`),d.errorMessage&&r.verbose){let c=d.errorMessage.split(`
2125
+ `).map(f=>` ${f}`).join(`
2126
+ `);console.log(`${Ae.red}${c}${Ae.reset}`)}else if(d.errorMessage){let c=d.errorMessage.split(`
2127
+ `)[0];console.log(` ${Ae.red}${c}${Ae.reset}`)}r.bail&&(s=!0)}}else{let l=0,u=[],d=new Map,c=async()=>{for(;l<e.length&&!s;){let f=l++,{test:m,originalContent:y}=e[f],g=vf(m,y,t);d.set(f,g),g.passed?i++:(a++,r.bail&&(s=!0))}};for(let f=0;f<n&&f<e.length;f++)u.push(c());await Promise.all(u);for(let f=0;f<e.length;f++){let m=d.get(f);if(!m)break;let{test:y}=e[f];if(o.push(m),m.passed)console.log(` ${Ae.green}\u2713${Ae.reset} ${y.name} ${Ae.dim}(${m.duration}ms)${Ae.reset}`);else if(console.log(` ${Ae.red}\u2717${Ae.reset} ${y.name} ${Ae.dim}(${m.duration}ms)${Ae.reset}`),m.errorMessage&&r.verbose){let g=m.errorMessage.split(`
2128
+ `).map(h=>` ${h}`).join(`
2129
+ `);console.log(`${Ae.red}${g}${Ae.reset}`)}else if(m.errorMessage){let g=m.errorMessage.split(`
2130
+ `)[0];console.log(` ${Ae.red}${g}${Ae.reset}`)}}}return{results:o,passedTests:i,failedTests:a,bailed:s}}async function Cf(e,t={}){let n=Date.now(),r=t.cCompiler??"cc",o=Tf.cpus().length,i;t.parallel===void 0||t.parallel===0?i=o:t.parallel===1?i=1:i=Math.min(t.parallel,o);let a;if(t.testNamePattern)try{a=new RegExp(t.testNamePattern)}catch{return console.error(`${Ae.red}Error: Invalid regex pattern: ${t.testNamePattern}${Ae.reset}`),{totalTests:0,passed:0,failed:0,results:[],duration:0}}console.log(`
2131
+ ${Ae.bold}${Ae.cyan}Running Yo Tests${Ae.reset}${i>1?` ${Ae.dim}(${i} workers)${Ae.reset}`:""}
2132
+ `),a&&console.log(`${Ae.dim}Filtering tests matching: ${t.testNamePattern}${Ae.reset}
2133
+ `);let s=new Map,l=0;for(let y of e){let g=Un.relative(process.cwd(),y),h=on.readFileSync(y,"utf-8"),_=Em(y);if(a&&(_=_.filter(E=>a.test(E.name))),_.length>0){let E=_.map(k=>({test:k,originalContent:h,relativePath:g}));s.set(g,E),l+=_.length}}let u=[],d=0,c=0,f=!1;for(let[y,g]of s){if(f)break;if(console.log(`${Ae.dim}${y}${Ae.reset}`),g.length===0){console.log(` ${Ae.yellow}(no tests found)${Ae.reset}`),console.log();continue}let h=await km(g,r,i,{verbose:t.verbose,bail:t.bail});u.push(...h.results),d+=h.passedTests,c+=h.failedTests,f=h.bailed,f&&console.log(`
2134
+ ${Ae.yellow}Bailing out early due to test failure (--bail)${Ae.reset}
2135
+ `),console.log()}let m=Date.now()-n;return console.log(`${Ae.bold}Test Summary${Ae.reset}`),console.log("\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"),d>0&&console.log(`${Ae.green}${d} passed${Ae.reset}`),c>0&&console.log(`${Ae.red}${c} failed${Ae.reset}`),console.log(`${Ae.dim}${d+c} total (${m}ms)${Ae.reset}`),console.log(),{totalTests:d+c,passed:d,failed:c,results:u,duration:m}}(0,kf.default)((0,bf.hideBin)(process.argv)).wrap(null).usage(`Usage:
2136
+
2137
+ yo compile <file> [options] Compile a '.yo' file
2138
+ Example:
2139
+ $ yo compile hello.yo -o hello
2140
+ $ yo compile hello.yo -cc clang -o hello
2141
+ $ yo compile hello.yo -t wasm -o hello.wasm
2142
+
2143
+ yo test [path] [options] Run tests
2144
+ Example:
2145
+ $ yo test Run all *.test.yo files in the workspace
2146
+ $ yo test ./tests Run all *.test.yo files in ./tests directory
2147
+ $ yo test ./some-file.yo Run tests in some-file.yo
2148
+
2149
+ yo --help Show this help message
2150
+ yo --version Show version number
2151
+
2152
+ yo install Install all packages
2153
+ yo add <package> Install a package
2154
+ yo add <package>@<version> Install a specific version of a package
2155
+ yo remove <package> Uninstall a package
2156
+
2157
+ yo run <script> Run a script defined in 'yo.json'
2158
+ `).option("o",{alias:"output",describe:"Output file",type:"string",demandOption:!1,default:"a.out"}).option("cc",{alias:"c-compiler",describe:"C Compiler to use",type:"string",demandOption:!1,default:"cc"}).option("t",{alias:"target",describe:"Target language",type:"string",demandOption:!1,default:"c"}).option("emit-c",{describe:"Print C code generated.",type:"boolean",demandOption:!1,default:!1}).option("skip-codegen",{describe:"Do not compile the code.",type:"boolean",demandOption:!1,default:!1}).option("skip-c-compiler",{describe:"Generate C code but skip running the C compiler.",type:"boolean",demandOption:!1,default:!1}).option("debug-gc",{describe:"Enable debug logging for GC and reference counting operations.",type:"boolean",demandOption:!1,default:!1}).option("debug-parallelism",{describe:"Enable debug logging for parallel worker thread operations.",type:"boolean",demandOption:!1,default:!1}).option("debug-async-await",{describe:"Enable debug logging for async/await state machine operations.",type:"boolean",demandOption:!1,default:!1}).option("allocator",{describe:"Memory allocator to use: 'libc' (default) or 'mimalloc'.",type:"string",demandOption:!1,default:"libc",choices:["mimalloc","libc"]}).option("release",{describe:"Build in release mode with optimizations (-O2, no warnings).",type:"boolean",demandOption:!1,default:!1}).option("optimize",{describe:"Set optimization level (0, 1, 2, 3). Overrides --release.",type:"string",demandOption:!1,choices:["0","1","2","3"]}).option("extern",{describe:"External C files to link with. eg: --extern extern1.c extern2.c",type:"array",demandOption:!1,default:[]}).option("sanitize",{describe:"Enable AddressSanitizer for memory leak and error detection. Use 'address' for full sanitizer or 'leak' for leak detection only.",type:"string",demandOption:!1,choices:["address","leak"]}).command("compile <file>","Compile a '.yo' file",e=>{e.positional("file",{describe:"File to compile",type:"string",demandOption:!0})},e=>{let t=e.file;if(!Ea.existsSync(t)){console.log(`File ${t} does not exist`);return}let n="file://"+Ea.realpathSync(t);new $a().compileModule(n,{output:e.o,cCompiler:e.cc,target:e.t,extern:e.extern??[],emitC:e.emitC,skipCodegen:e.skipCodegen,skipCCompiler:e.skipCCompiler,debugGc:e.debugGc,debugParallelism:e.debugParallelism,debugAsyncAwait:e.debugAsyncAwait,release:e.release,optimize:e.optimize,allocator:e.allocator,sanitize:e.sanitize})}).command("test [path]","Run tests in .test.yo files",e=>{e.positional("path",{describe:"Path to test file or directory (default: current directory)",type:"string",default:"."}).option("verbose",{alias:"v",describe:"Show detailed error messages",type:"boolean",default:!1}).option("bail",{alias:"b",describe:"Stop running tests after the first failure",type:"boolean",default:!1}).option("test-name-pattern",{describe:"Only run tests with names matching this regex pattern",type:"string"}).option("parallel",{alias:"p",describe:"Number of tests to run in parallel (0 = auto/max CPUs, 1 = sequential)",type:"number",default:0})},async e=>{let t=e.path,n=$f(t);n.length===0&&(console.log("No test files found."),process.exit(0));let r=e.parallel;r<0&&(console.error("Error: --parallel value cannot be negative"),process.exit(1));let o=await Cf(n,{cCompiler:e.cc,verbose:e.verbose,bail:e.bail,testNamePattern:e.testNamePattern,parallel:r});process.exit(o.failed>0?1:0)}).demandCommand(1,"You need to specify a command (e.g., 'compile')").strict().help().version("version","Show version number",`yo ${Bl.version}`).argv;