redscript-mc 2.0.0 → 2.1.0

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 (629) hide show
  1. package/.claudeignore +21 -0
  2. package/README.md +12 -16
  3. package/README.zh.md +2 -2
  4. package/dist/cli.js +0 -0
  5. package/dist/src/__tests__/budget.test.js +261 -0
  6. package/dist/src/__tests__/diagnostics.test.js +2 -3
  7. package/dist/src/__tests__/e2e/coroutine.test.d.ts +7 -0
  8. package/dist/src/__tests__/e2e/coroutine.test.js +132 -0
  9. package/dist/{src2 → src}/__tests__/e2e/macros.test.js +1 -1
  10. package/dist/{src2 → src}/__tests__/e2e/migrate.test.js +1 -1
  11. package/dist/src/__tests__/e2e/stdlib-e2e.test.d.ts +10 -0
  12. package/dist/src/__tests__/e2e/stdlib-e2e.test.js +324 -0
  13. package/dist/src/__tests__/enum.test.d.ts +10 -0
  14. package/dist/src/__tests__/enum.test.js +389 -0
  15. package/dist/src/__tests__/generics.test.d.ts +14 -0
  16. package/dist/src/__tests__/generics.test.js +367 -0
  17. package/dist/{src2 → src}/__tests__/hir/desugar.test.js +2 -2
  18. package/dist/src/__tests__/incremental.test.d.ts +5 -0
  19. package/dist/src/__tests__/incremental.test.js +308 -0
  20. package/dist/src/__tests__/lsp.test.d.ts +7 -0
  21. package/dist/src/__tests__/lsp.test.js +245 -0
  22. package/dist/src/__tests__/mc-version.test.d.ts +10 -0
  23. package/dist/src/__tests__/mc-version.test.js +154 -0
  24. package/dist/{src2 → src}/__tests__/mir/arithmetic.test.js +2 -2
  25. package/dist/{src2 → src}/__tests__/mir/control-flow.test.js +2 -2
  26. package/dist/src/__tests__/modules.test.d.ts +7 -0
  27. package/dist/src/__tests__/modules.test.js +333 -0
  28. package/dist/src/__tests__/optimizer/coroutine.test.d.ts +12 -0
  29. package/dist/src/__tests__/optimizer/coroutine.test.js +251 -0
  30. package/dist/src/__tests__/optimizer/interprocedural.test.js +145 -0
  31. package/dist/src/__tests__/optimizer/lir/const_imm.test.js +138 -0
  32. package/dist/src/__tests__/optimizer/lir/dead_slot.test.js +141 -0
  33. package/dist/src/__tests__/optimizer/lir/peephole.test.js +126 -0
  34. package/dist/src/__tests__/optimizer/lir/pipeline.test.js +84 -0
  35. package/dist/src/__tests__/optimizer/nbt-batch.test.js +110 -0
  36. package/dist/src/__tests__/optimizer/selector-cache.test.js +103 -0
  37. package/dist/src/__tests__/optimizer/unroll.test.js +206 -0
  38. package/dist/src/__tests__/option.test.d.ts +14 -0
  39. package/dist/src/__tests__/option.test.js +275 -0
  40. package/dist/src/__tests__/schedule.test.d.ts +7 -0
  41. package/dist/src/__tests__/schedule.test.js +98 -0
  42. package/dist/src/__tests__/sourcemap.test.d.ts +7 -0
  43. package/dist/src/__tests__/sourcemap.test.js +227 -0
  44. package/dist/src/__tests__/tuple.test.d.ts +11 -0
  45. package/dist/src/__tests__/tuple.test.js +202 -0
  46. package/dist/src/__tests__/typechecker-strict.test.d.ts +10 -0
  47. package/dist/src/__tests__/typechecker-strict.test.js +197 -0
  48. package/dist/src/ast/types.d.ts +56 -2
  49. package/dist/src/cache/deps.d.ts +41 -0
  50. package/dist/src/cache/deps.js +158 -0
  51. package/dist/src/cache/incremental.d.ts +35 -0
  52. package/dist/src/cache/incremental.js +165 -0
  53. package/dist/src/cache/index.d.ts +37 -0
  54. package/dist/src/cache/index.js +152 -0
  55. package/dist/src/cli.js +76 -45
  56. package/dist/src/compile.d.ts +2 -2
  57. package/dist/src/compile.js +1 -1
  58. package/dist/src/diagnostics/index.d.ts +1 -1
  59. package/dist/src/diagnostics/index.js +8 -11
  60. package/dist/src/emit/compile.d.ts +29 -0
  61. package/dist/src/emit/compile.js +143 -0
  62. package/dist/{src2 → src}/emit/index.d.ts +9 -0
  63. package/dist/{src2 → src}/emit/index.js +59 -8
  64. package/dist/src/emit/modules.d.ts +29 -0
  65. package/dist/src/emit/modules.js +492 -0
  66. package/dist/src/emit/sourcemap.d.ts +53 -0
  67. package/dist/src/emit/sourcemap.js +73 -0
  68. package/dist/{src2 → src}/hir/lower.d.ts +1 -1
  69. package/dist/{src2 → src}/hir/lower.js +22 -1
  70. package/dist/src/hir/monomorphize.d.ts +22 -0
  71. package/dist/src/hir/monomorphize.js +379 -0
  72. package/dist/{src2 → src}/hir/types.d.ts +35 -2
  73. package/dist/src/index.d.ts +19 -2
  74. package/dist/src/index.js +36 -14
  75. package/dist/src/lexer/index.d.ts +1 -1
  76. package/dist/src/lexer/index.js +1 -0
  77. package/dist/src/lir/budget.d.ts +37 -0
  78. package/dist/src/lir/budget.js +280 -0
  79. package/dist/{src2 → src}/lir/lower.js +19 -0
  80. package/dist/{src2 → src}/lir/types.d.ts +7 -4
  81. package/dist/src/lsp/main.d.ts +8 -0
  82. package/dist/src/lsp/main.js +11 -0
  83. package/dist/src/lsp/server.d.ts +11 -0
  84. package/dist/src/lsp/server.js +352 -0
  85. package/dist/{src2 → src}/mir/lower.d.ts +1 -1
  86. package/dist/{src2 → src}/mir/lower.js +244 -10
  87. package/dist/{src2 → src}/mir/types.d.ts +10 -2
  88. package/dist/src/optimizer/coroutine.d.ts +34 -0
  89. package/dist/src/optimizer/coroutine.js +789 -0
  90. package/dist/src/optimizer/dce.d.ts +8 -34
  91. package/dist/src/optimizer/dce.js +146 -629
  92. package/dist/src/optimizer/interprocedural.d.ts +14 -0
  93. package/dist/src/optimizer/interprocedural.js +186 -0
  94. package/dist/src/optimizer/lir/const_imm.d.ts +12 -0
  95. package/dist/src/optimizer/lir/const_imm.js +139 -0
  96. package/dist/src/optimizer/lir/dead_slot.d.ts +14 -0
  97. package/dist/src/optimizer/lir/dead_slot.js +130 -0
  98. package/dist/src/optimizer/lir/peephole.d.ts +21 -0
  99. package/dist/src/optimizer/lir/peephole.js +52 -0
  100. package/dist/src/optimizer/lir/pipeline.d.ts +10 -0
  101. package/dist/src/optimizer/lir/pipeline.js +34 -0
  102. package/dist/src/optimizer/nbt-batch.d.ts +11 -0
  103. package/dist/src/optimizer/nbt-batch.js +51 -0
  104. package/dist/{src2 → src}/optimizer/pipeline.d.ts +4 -0
  105. package/dist/{src2 → src}/optimizer/pipeline.js +17 -1
  106. package/dist/src/optimizer/selector-cache.d.ts +22 -0
  107. package/dist/src/optimizer/selector-cache.js +100 -0
  108. package/dist/src/optimizer/unroll.d.ts +32 -0
  109. package/dist/src/optimizer/unroll.js +348 -0
  110. package/dist/src/parser/index.d.ts +8 -0
  111. package/dist/src/parser/index.js +204 -14
  112. package/dist/src/repl.d.ts +1 -1
  113. package/dist/src/typechecker/index.d.ts +4 -0
  114. package/dist/src/typechecker/index.js +198 -13
  115. package/dist/src/types/mc-version.d.ts +24 -0
  116. package/dist/src/types/mc-version.js +49 -0
  117. package/docs/ROADMAP.md +395 -0
  118. package/docs/compiler-pipeline-redesign.md +27 -10
  119. package/editors/vscode/out/extension.js +25176 -8000
  120. package/editors/vscode/package-lock.json +90 -6
  121. package/editors/vscode/package.json +3 -2
  122. package/editors/vscode/src/extension.ts +97 -67
  123. package/examples/showcase.mcrs +3 -3
  124. package/jest.config.js +1 -1
  125. package/package.json +9 -3
  126. package/src/__tests__/budget.test.ts +297 -0
  127. package/src/__tests__/diagnostics.test.ts +2 -3
  128. package/src/__tests__/e2e/coroutine.test.ts +142 -0
  129. package/{src2 → src}/__tests__/e2e/macros.test.ts +1 -1
  130. package/{src2 → src}/__tests__/e2e/migrate.test.ts +1 -1
  131. package/src/__tests__/e2e/stdlib-e2e.test.ts +348 -0
  132. package/src/__tests__/enum.test.ts +425 -0
  133. package/src/__tests__/generics.test.ts +390 -0
  134. package/{src2 → src}/__tests__/hir/desugar.test.ts +2 -2
  135. package/src/__tests__/incremental.test.ts +337 -0
  136. package/src/__tests__/lsp.test.ts +270 -0
  137. package/src/__tests__/mc-version.test.ts +178 -0
  138. package/{src2 → src}/__tests__/mir/arithmetic.test.ts +2 -2
  139. package/{src2 → src}/__tests__/mir/control-flow.test.ts +2 -2
  140. package/src/__tests__/modules.test.ts +365 -0
  141. package/src/__tests__/optimizer/coroutine.test.ts +312 -0
  142. package/src/__tests__/optimizer/interprocedural.test.ts +174 -0
  143. package/src/__tests__/optimizer/lir/const_imm.test.ts +151 -0
  144. package/src/__tests__/optimizer/lir/dead_slot.test.ts +156 -0
  145. package/src/__tests__/optimizer/lir/peephole.test.ts +136 -0
  146. package/src/__tests__/optimizer/lir/pipeline.test.ts +113 -0
  147. package/src/__tests__/optimizer/nbt-batch.test.ts +119 -0
  148. package/src/__tests__/optimizer/selector-cache.test.ts +112 -0
  149. package/src/__tests__/optimizer/unroll.test.ts +231 -0
  150. package/src/__tests__/option.test.ts +299 -0
  151. package/src/__tests__/schedule.test.ts +105 -0
  152. package/src/__tests__/sourcemap.test.ts +254 -0
  153. package/src/__tests__/tuple.test.ts +220 -0
  154. package/src/__tests__/typechecker-strict.test.ts +216 -0
  155. package/src/ast/types.ts +33 -2
  156. package/src/cache/deps.ts +132 -0
  157. package/src/cache/incremental.ts +173 -0
  158. package/src/cache/index.ts +135 -0
  159. package/src/cli.ts +88 -45
  160. package/src/compile.ts +2 -2
  161. package/src/diagnostics/index.ts +8 -11
  162. package/src/emit/compile.ts +177 -0
  163. package/{src2 → src}/emit/index.ts +72 -8
  164. package/src/emit/modules.ts +581 -0
  165. package/src/emit/sourcemap.ts +101 -0
  166. package/{src2 → src}/hir/lower.ts +29 -2
  167. package/src/hir/monomorphize.ts +416 -0
  168. package/{src2 → src}/hir/types.ts +15 -3
  169. package/src/index.ts +29 -10
  170. package/src/lexer/index.ts +2 -1
  171. package/src/lir/budget.ts +321 -0
  172. package/{src2 → src}/lir/lower.ts +32 -1
  173. package/{src2 → src}/lir/types.ts +7 -3
  174. package/src/lsp/main.ts +9 -0
  175. package/src/lsp/server.ts +414 -0
  176. package/{src2 → src}/mir/lower.ts +251 -8
  177. package/{src2 → src}/mir/types.ts +12 -1
  178. package/src/optimizer/coroutine.ts +996 -0
  179. package/{src2 → src}/optimizer/dce.ts +2 -1
  180. package/src/optimizer/interprocedural.ts +177 -0
  181. package/src/optimizer/lir/const_imm.ts +143 -0
  182. package/src/optimizer/lir/dead_slot.ts +123 -0
  183. package/src/optimizer/lir/peephole.ts +57 -0
  184. package/src/optimizer/lir/pipeline.ts +37 -0
  185. package/src/optimizer/nbt-batch.ts +50 -0
  186. package/{src2 → src}/optimizer/pipeline.ts +16 -1
  187. package/src/optimizer/selector-cache.ts +103 -0
  188. package/src/optimizer/unroll.ts +386 -0
  189. package/src/parser/index.ts +212 -15
  190. package/src/repl.ts +1 -1
  191. package/src/stdlib/math.mcrs +4 -4
  192. package/src/templates/quest.mcrs +4 -4
  193. package/src/typechecker/index.ts +215 -15
  194. package/src/types/mc-version.ts +46 -0
  195. package/tsconfig.json +1 -1
  196. package/.claude/commands/build-test.md +0 -10
  197. package/.claude/commands/deploy-demo.md +0 -12
  198. package/.claude/commands/stage-status.md +0 -13
  199. package/.claude/settings.json +0 -12
  200. package/CLAUDE.md +0 -231
  201. package/dist/__tests__/cli.test.js +0 -278
  202. package/dist/__tests__/codegen.test.js +0 -152
  203. package/dist/__tests__/compile-all.test.d.ts +0 -10
  204. package/dist/__tests__/compile-all.test.js +0 -108
  205. package/dist/__tests__/dce.test.js +0 -138
  206. package/dist/__tests__/diagnostics.test.d.ts +0 -4
  207. package/dist/__tests__/diagnostics.test.js +0 -149
  208. package/dist/__tests__/e2e.test.d.ts +0 -6
  209. package/dist/__tests__/e2e.test.js +0 -1847
  210. package/dist/__tests__/entity-types.test.js +0 -203
  211. package/dist/__tests__/formatter.test.js +0 -40
  212. package/dist/__tests__/lexer.test.js +0 -343
  213. package/dist/__tests__/lowering.test.js +0 -1015
  214. package/dist/__tests__/macro.test.d.ts +0 -8
  215. package/dist/__tests__/macro.test.js +0 -305
  216. package/dist/__tests__/mc-integration.test.d.ts +0 -12
  217. package/dist/__tests__/mc-integration.test.js +0 -819
  218. package/dist/__tests__/mc-syntax.test.js +0 -124
  219. package/dist/__tests__/nbt.test.js +0 -82
  220. package/dist/__tests__/optimizer-advanced.test.js +0 -124
  221. package/dist/__tests__/optimizer.test.d.ts +0 -1
  222. package/dist/__tests__/optimizer.test.js +0 -149
  223. package/dist/__tests__/parser.test.d.ts +0 -1
  224. package/dist/__tests__/parser.test.js +0 -807
  225. package/dist/__tests__/repl.test.d.ts +0 -1
  226. package/dist/__tests__/repl.test.js +0 -27
  227. package/dist/__tests__/runtime.test.d.ts +0 -1
  228. package/dist/__tests__/runtime.test.js +0 -289
  229. package/dist/__tests__/stdlib-advanced.test.d.ts +0 -4
  230. package/dist/__tests__/stdlib-advanced.test.js +0 -378
  231. package/dist/__tests__/stdlib-bigint.test.d.ts +0 -7
  232. package/dist/__tests__/stdlib-bigint.test.js +0 -428
  233. package/dist/__tests__/stdlib-math.test.d.ts +0 -7
  234. package/dist/__tests__/stdlib-math.test.js +0 -352
  235. package/dist/__tests__/stdlib-vec.test.d.ts +0 -4
  236. package/dist/__tests__/stdlib-vec.test.js +0 -264
  237. package/dist/__tests__/structure-optimizer.test.d.ts +0 -1
  238. package/dist/__tests__/structure-optimizer.test.js +0 -33
  239. package/dist/__tests__/typechecker.test.d.ts +0 -1
  240. package/dist/__tests__/typechecker.test.js +0 -552
  241. package/dist/__tests__/var-allocator.test.d.ts +0 -1
  242. package/dist/__tests__/var-allocator.test.js +0 -69
  243. package/dist/ast/types.d.ts +0 -514
  244. package/dist/ast/types.js +0 -9
  245. package/dist/builtins/metadata.d.ts +0 -36
  246. package/dist/builtins/metadata.js +0 -1014
  247. package/dist/cli.d.ts +0 -11
  248. package/dist/codegen/cmdblock/index.d.ts +0 -26
  249. package/dist/codegen/cmdblock/index.js +0 -45
  250. package/dist/codegen/mcfunction/index.d.ts +0 -40
  251. package/dist/codegen/mcfunction/index.js +0 -606
  252. package/dist/codegen/structure/index.d.ts +0 -24
  253. package/dist/codegen/structure/index.js +0 -279
  254. package/dist/codegen/var-allocator.d.ts +0 -45
  255. package/dist/codegen/var-allocator.js +0 -104
  256. package/dist/compile.d.ts +0 -68
  257. package/dist/data/arena/function/__load.mcfunction +0 -6
  258. package/dist/data/arena/function/__tick.mcfunction +0 -2
  259. package/dist/data/arena/function/announce_leaders/else_1.mcfunction +0 -3
  260. package/dist/data/arena/function/announce_leaders/foreach_0/merge_2.mcfunction +0 -1
  261. package/dist/data/arena/function/announce_leaders/foreach_0/then_0.mcfunction +0 -3
  262. package/dist/data/arena/function/announce_leaders/foreach_0.mcfunction +0 -7
  263. package/dist/data/arena/function/announce_leaders/foreach_1/merge_2.mcfunction +0 -1
  264. package/dist/data/arena/function/announce_leaders/foreach_1/then_0.mcfunction +0 -4
  265. package/dist/data/arena/function/announce_leaders/foreach_1.mcfunction +0 -6
  266. package/dist/data/arena/function/announce_leaders/merge_2.mcfunction +0 -1
  267. package/dist/data/arena/function/announce_leaders/then_0.mcfunction +0 -4
  268. package/dist/data/arena/function/announce_leaders.mcfunction +0 -6
  269. package/dist/data/arena/function/arena_tick/merge_2.mcfunction +0 -1
  270. package/dist/data/arena/function/arena_tick/then_0.mcfunction +0 -4
  271. package/dist/data/arena/function/arena_tick.mcfunction +0 -11
  272. package/dist/data/counter/function/__load.mcfunction +0 -5
  273. package/dist/data/counter/function/__tick.mcfunction +0 -2
  274. package/dist/data/counter/function/counter_tick/merge_2.mcfunction +0 -1
  275. package/dist/data/counter/function/counter_tick/then_0.mcfunction +0 -3
  276. package/dist/data/counter/function/counter_tick.mcfunction +0 -11
  277. package/dist/data/gcd2/function/__load.mcfunction +0 -3
  278. package/dist/data/gcd2/function/abs/merge_2.mcfunction +0 -3
  279. package/dist/data/gcd2/function/abs/then_0.mcfunction +0 -5
  280. package/dist/data/gcd2/function/abs.mcfunction +0 -7
  281. package/dist/data/gcd2/function/gcd/loop_body_1.mcfunction +0 -7
  282. package/dist/data/gcd2/function/gcd/loop_check_0.mcfunction +0 -5
  283. package/dist/data/gcd2/function/gcd/loop_exit_2.mcfunction +0 -3
  284. package/dist/data/gcd2/function/gcd.mcfunction +0 -14
  285. package/dist/data/gcd3/function/__load.mcfunction +0 -3
  286. package/dist/data/gcd3/function/abs/merge_2.mcfunction +0 -3
  287. package/dist/data/gcd3/function/abs/then_0.mcfunction +0 -5
  288. package/dist/data/gcd3/function/abs.mcfunction +0 -7
  289. package/dist/data/gcd3/function/gcd/loop_body_1.mcfunction +0 -7
  290. package/dist/data/gcd3/function/gcd/loop_check_0.mcfunction +0 -5
  291. package/dist/data/gcd3/function/gcd/loop_exit_2.mcfunction +0 -3
  292. package/dist/data/gcd3/function/gcd.mcfunction +0 -14
  293. package/dist/data/gcd3/function/test.mcfunction +0 -7
  294. package/dist/data/gcd3nm/function/__load.mcfunction +0 -3
  295. package/dist/data/gcd3nm/function/abs/merge_2.mcfunction +0 -3
  296. package/dist/data/gcd3nm/function/abs/then_0.mcfunction +0 -5
  297. package/dist/data/gcd3nm/function/abs.mcfunction +0 -7
  298. package/dist/data/gcd3nm/function/gcd/loop_body_1.mcfunction +0 -7
  299. package/dist/data/gcd3nm/function/gcd/loop_check_0.mcfunction +0 -5
  300. package/dist/data/gcd3nm/function/gcd/loop_exit_2.mcfunction +0 -3
  301. package/dist/data/gcd3nm/function/gcd.mcfunction +0 -14
  302. package/dist/data/gcd3nm/function/test.mcfunction +0 -7
  303. package/dist/data/gcd_test/function/__load.mcfunction +0 -3
  304. package/dist/data/gcd_test/function/abs/merge_2.mcfunction +0 -3
  305. package/dist/data/gcd_test/function/abs/then_0.mcfunction +0 -5
  306. package/dist/data/gcd_test/function/abs.mcfunction +0 -7
  307. package/dist/data/gcd_test/function/gcd/loop_body_1.mcfunction +0 -7
  308. package/dist/data/gcd_test/function/gcd/loop_check_0.mcfunction +0 -5
  309. package/dist/data/gcd_test/function/gcd/loop_exit_2.mcfunction +0 -3
  310. package/dist/data/gcd_test/function/gcd.mcfunction +0 -14
  311. package/dist/data/isqrttest/function/__load.mcfunction +0 -6
  312. package/dist/data/isqrttest/function/isqrt/loop_body_4.mcfunction +0 -12
  313. package/dist/data/isqrttest/function/isqrt/loop_check_3.mcfunction +0 -5
  314. package/dist/data/isqrttest/function/isqrt/loop_exit_5.mcfunction +0 -3
  315. package/dist/data/isqrttest/function/isqrt/merge_2.mcfunction +0 -4
  316. package/dist/data/isqrttest/function/isqrt/merge_8.mcfunction +0 -6
  317. package/dist/data/isqrttest/function/isqrt/then_0.mcfunction +0 -3
  318. package/dist/data/isqrttest/function/isqrt/then_6.mcfunction +0 -3
  319. package/dist/data/isqrttest/function/isqrt.mcfunction +0 -7
  320. package/dist/data/isqrttest/function/test.mcfunction +0 -6
  321. package/dist/data/mathtest/function/__load.mcfunction +0 -3
  322. package/dist/data/mathtest/function/abs/merge_2.mcfunction +0 -3
  323. package/dist/data/mathtest/function/abs/then_0.mcfunction +0 -5
  324. package/dist/data/mathtest/function/abs.mcfunction +0 -6
  325. package/dist/data/mathtest/function/test.mcfunction +0 -5
  326. package/dist/data/minecraft/tags/function/load.json +0 -5
  327. package/dist/data/minecraft/tags/function/tick.json +0 -5
  328. package/dist/data/mypack/function/__load.mcfunction +0 -13
  329. package/dist/data/mypack/function/_atan_init.mcfunction +0 -2
  330. package/dist/data/mypack/function/abs/merge_2.mcfunction +0 -3
  331. package/dist/data/mypack/function/abs/then_0.mcfunction +0 -5
  332. package/dist/data/mypack/function/abs.mcfunction +0 -6
  333. package/dist/data/mypack/function/atan2_fixed/__sgi_1.mcfunction +0 -2
  334. package/dist/data/mypack/function/atan2_fixed/else_34.mcfunction +0 -3
  335. package/dist/data/mypack/function/atan2_fixed/loop_body_31.mcfunction +0 -19
  336. package/dist/data/mypack/function/atan2_fixed/loop_check_30.mcfunction +0 -5
  337. package/dist/data/mypack/function/atan2_fixed/loop_exit_32.mcfunction +0 -6
  338. package/dist/data/mypack/function/atan2_fixed/merge_11.mcfunction +0 -6
  339. package/dist/data/mypack/function/atan2_fixed/merge_14.mcfunction +0 -3
  340. package/dist/data/mypack/function/atan2_fixed/merge_17.mcfunction +0 -6
  341. package/dist/data/mypack/function/atan2_fixed/merge_2.mcfunction +0 -5
  342. package/dist/data/mypack/function/atan2_fixed/merge_20.mcfunction +0 -5
  343. package/dist/data/mypack/function/atan2_fixed/merge_23.mcfunction +0 -5
  344. package/dist/data/mypack/function/atan2_fixed/merge_26.mcfunction +0 -6
  345. package/dist/data/mypack/function/atan2_fixed/merge_29.mcfunction +0 -4
  346. package/dist/data/mypack/function/atan2_fixed/merge_38.mcfunction +0 -5
  347. package/dist/data/mypack/function/atan2_fixed/merge_41.mcfunction +0 -5
  348. package/dist/data/mypack/function/atan2_fixed/merge_44.mcfunction +0 -5
  349. package/dist/data/mypack/function/atan2_fixed/merge_47.mcfunction +0 -5
  350. package/dist/data/mypack/function/atan2_fixed/merge_5.mcfunction +0 -5
  351. package/dist/data/mypack/function/atan2_fixed/merge_8.mcfunction +0 -3
  352. package/dist/data/mypack/function/atan2_fixed/then_0.mcfunction +0 -5
  353. package/dist/data/mypack/function/atan2_fixed/then_12.mcfunction +0 -3
  354. package/dist/data/mypack/function/atan2_fixed/then_15.mcfunction +0 -5
  355. package/dist/data/mypack/function/atan2_fixed/then_18.mcfunction +0 -5
  356. package/dist/data/mypack/function/atan2_fixed/then_21.mcfunction +0 -3
  357. package/dist/data/mypack/function/atan2_fixed/then_24.mcfunction +0 -3
  358. package/dist/data/mypack/function/atan2_fixed/then_27.mcfunction +0 -6
  359. package/dist/data/mypack/function/atan2_fixed/then_3.mcfunction +0 -3
  360. package/dist/data/mypack/function/atan2_fixed/then_33.mcfunction +0 -5
  361. package/dist/data/mypack/function/atan2_fixed/then_36.mcfunction +0 -5
  362. package/dist/data/mypack/function/atan2_fixed/then_39.mcfunction +0 -5
  363. package/dist/data/mypack/function/atan2_fixed/then_42.mcfunction +0 -3
  364. package/dist/data/mypack/function/atan2_fixed/then_45.mcfunction +0 -5
  365. package/dist/data/mypack/function/atan2_fixed/then_6.mcfunction +0 -3
  366. package/dist/data/mypack/function/atan2_fixed/then_9.mcfunction +0 -5
  367. package/dist/data/mypack/function/atan2_fixed.mcfunction +0 -7
  368. package/dist/data/mypack/function/my_game.mcfunction +0 -10
  369. package/dist/data/quiz/function/__load.mcfunction +0 -16
  370. package/dist/data/quiz/function/__tick.mcfunction +0 -6
  371. package/dist/data/quiz/function/__trigger_quiz_a_dispatch.mcfunction +0 -4
  372. package/dist/data/quiz/function/__trigger_quiz_b_dispatch.mcfunction +0 -4
  373. package/dist/data/quiz/function/__trigger_quiz_c_dispatch.mcfunction +0 -4
  374. package/dist/data/quiz/function/__trigger_quiz_start_dispatch.mcfunction +0 -4
  375. package/dist/data/quiz/function/answer_a.mcfunction +0 -4
  376. package/dist/data/quiz/function/answer_b.mcfunction +0 -4
  377. package/dist/data/quiz/function/answer_c.mcfunction +0 -4
  378. package/dist/data/quiz/function/ask_question/else_1.mcfunction +0 -5
  379. package/dist/data/quiz/function/ask_question/else_4.mcfunction +0 -5
  380. package/dist/data/quiz/function/ask_question/else_7.mcfunction +0 -4
  381. package/dist/data/quiz/function/ask_question/merge_2.mcfunction +0 -1
  382. package/dist/data/quiz/function/ask_question/merge_5.mcfunction +0 -2
  383. package/dist/data/quiz/function/ask_question/merge_8.mcfunction +0 -2
  384. package/dist/data/quiz/function/ask_question/then_0.mcfunction +0 -4
  385. package/dist/data/quiz/function/ask_question/then_3.mcfunction +0 -4
  386. package/dist/data/quiz/function/ask_question/then_6.mcfunction +0 -4
  387. package/dist/data/quiz/function/ask_question.mcfunction +0 -7
  388. package/dist/data/quiz/function/finish_quiz.mcfunction +0 -6
  389. package/dist/data/quiz/function/handle_answer/else_1.mcfunction +0 -5
  390. package/dist/data/quiz/function/handle_answer/else_10.mcfunction +0 -3
  391. package/dist/data/quiz/function/handle_answer/else_16.mcfunction +0 -3
  392. package/dist/data/quiz/function/handle_answer/else_4.mcfunction +0 -3
  393. package/dist/data/quiz/function/handle_answer/else_7.mcfunction +0 -5
  394. package/dist/data/quiz/function/handle_answer/merge_11.mcfunction +0 -2
  395. package/dist/data/quiz/function/handle_answer/merge_14.mcfunction +0 -2
  396. package/dist/data/quiz/function/handle_answer/merge_17.mcfunction +0 -2
  397. package/dist/data/quiz/function/handle_answer/merge_2.mcfunction +0 -8
  398. package/dist/data/quiz/function/handle_answer/merge_5.mcfunction +0 -2
  399. package/dist/data/quiz/function/handle_answer/merge_8.mcfunction +0 -2
  400. package/dist/data/quiz/function/handle_answer/then_0.mcfunction +0 -5
  401. package/dist/data/quiz/function/handle_answer/then_12.mcfunction +0 -5
  402. package/dist/data/quiz/function/handle_answer/then_15.mcfunction +0 -6
  403. package/dist/data/quiz/function/handle_answer/then_3.mcfunction +0 -6
  404. package/dist/data/quiz/function/handle_answer/then_6.mcfunction +0 -5
  405. package/dist/data/quiz/function/handle_answer/then_9.mcfunction +0 -6
  406. package/dist/data/quiz/function/handle_answer.mcfunction +0 -11
  407. package/dist/data/quiz/function/start_quiz.mcfunction +0 -5
  408. package/dist/data/reqtest/function/__load.mcfunction +0 -4
  409. package/dist/data/reqtest/function/_table_init.mcfunction +0 -2
  410. package/dist/data/reqtest/function/no_trig.mcfunction +0 -3
  411. package/dist/data/reqtest/function/use_table.mcfunction +0 -4
  412. package/dist/data/reqtest2/function/__load.mcfunction +0 -3
  413. package/dist/data/reqtest2/function/no_trig.mcfunction +0 -3
  414. package/dist/data/runtime/function/__load.mcfunction +0 -5
  415. package/dist/data/runtime/function/__tick.mcfunction +0 -2
  416. package/dist/data/runtime/function/counter_tick/then_0.mcfunction +0 -3
  417. package/dist/data/runtime/function/counter_tick.mcfunction +0 -13
  418. package/dist/data/shop/function/__load.mcfunction +0 -7
  419. package/dist/data/shop/function/__tick.mcfunction +0 -3
  420. package/dist/data/shop/function/__trigger_shop_buy_dispatch.mcfunction +0 -4
  421. package/dist/data/shop/function/complete_purchase/else_1.mcfunction +0 -5
  422. package/dist/data/shop/function/complete_purchase/else_4.mcfunction +0 -5
  423. package/dist/data/shop/function/complete_purchase/else_7.mcfunction +0 -3
  424. package/dist/data/shop/function/complete_purchase/merge_2.mcfunction +0 -2
  425. package/dist/data/shop/function/complete_purchase/merge_5.mcfunction +0 -2
  426. package/dist/data/shop/function/complete_purchase/merge_8.mcfunction +0 -2
  427. package/dist/data/shop/function/complete_purchase/then_0.mcfunction +0 -4
  428. package/dist/data/shop/function/complete_purchase/then_3.mcfunction +0 -4
  429. package/dist/data/shop/function/complete_purchase/then_6.mcfunction +0 -4
  430. package/dist/data/shop/function/complete_purchase.mcfunction +0 -7
  431. package/dist/data/shop/function/handle_shop_trigger.mcfunction +0 -3
  432. package/dist/data/swap_test/function/__load.mcfunction +0 -3
  433. package/dist/data/swap_test/function/gcd_old/loop_body_1.mcfunction +0 -7
  434. package/dist/data/swap_test/function/gcd_old/loop_check_0.mcfunction +0 -5
  435. package/dist/data/swap_test/function/gcd_old/loop_exit_2.mcfunction +0 -3
  436. package/dist/data/swap_test/function/gcd_old.mcfunction +0 -8
  437. package/dist/data/turret/function/__load.mcfunction +0 -5
  438. package/dist/data/turret/function/__tick.mcfunction +0 -4
  439. package/dist/data/turret/function/__trigger_deploy_turret_dispatch.mcfunction +0 -4
  440. package/dist/data/turret/function/deploy_turret.mcfunction +0 -8
  441. package/dist/data/turret/function/turret_tick/at_1.mcfunction +0 -2
  442. package/dist/data/turret/function/turret_tick/foreach_0.mcfunction +0 -2
  443. package/dist/data/turret/function/turret_tick/foreach_2.mcfunction +0 -2
  444. package/dist/data/turret/function/turret_tick/tick_body.mcfunction +0 -3
  445. package/dist/data/turret/function/turret_tick/tick_skip.mcfunction +0 -1
  446. package/dist/data/turret/function/turret_tick.mcfunction +0 -5
  447. package/dist/diagnostics/index.d.ts +0 -44
  448. package/dist/diagnostics/index.js +0 -140
  449. package/dist/events/types.d.ts +0 -35
  450. package/dist/events/types.js +0 -59
  451. package/dist/formatter/index.d.ts +0 -1
  452. package/dist/formatter/index.js +0 -26
  453. package/dist/gcd2.map.json +0 -15
  454. package/dist/gcd3.map.json +0 -17
  455. package/dist/gcd_test.map.json +0 -15
  456. package/dist/index.d.ts +0 -62
  457. package/dist/ir/builder.d.ts +0 -33
  458. package/dist/ir/builder.js +0 -99
  459. package/dist/ir/types.d.ts +0 -132
  460. package/dist/ir/types.js +0 -15
  461. package/dist/isqrttest.map.json +0 -15
  462. package/dist/lexer/index.d.ts +0 -37
  463. package/dist/lexer/index.js +0 -569
  464. package/dist/lowering/index.d.ts +0 -188
  465. package/dist/lowering/index.js +0 -3405
  466. package/dist/mathtest.map.json +0 -6
  467. package/dist/mc-test/client.d.ts +0 -128
  468. package/dist/mc-test/client.js +0 -174
  469. package/dist/mc-test/runner.d.ts +0 -28
  470. package/dist/mc-test/runner.js +0 -150
  471. package/dist/mc-test/setup.d.ts +0 -11
  472. package/dist/mc-test/setup.js +0 -98
  473. package/dist/mc-validator/index.d.ts +0 -17
  474. package/dist/mc-validator/index.js +0 -322
  475. package/dist/mypack.map.json +0 -27
  476. package/dist/nbt/index.d.ts +0 -86
  477. package/dist/nbt/index.js +0 -250
  478. package/dist/optimizer/commands.d.ts +0 -38
  479. package/dist/optimizer/commands.js +0 -451
  480. package/dist/optimizer/dce.d.ts +0 -34
  481. package/dist/optimizer/dce.js +0 -639
  482. package/dist/optimizer/passes.d.ts +0 -34
  483. package/dist/optimizer/passes.js +0 -243
  484. package/dist/optimizer/structure.d.ts +0 -9
  485. package/dist/optimizer/structure.js +0 -356
  486. package/dist/pack.mcmeta +0 -6
  487. package/dist/parser/index.d.ts +0 -93
  488. package/dist/parser/index.js +0 -1687
  489. package/dist/repl.d.ts +0 -16
  490. package/dist/repl.js +0 -165
  491. package/dist/reqtest.map.json +0 -4
  492. package/dist/reqtest2.map.json +0 -4
  493. package/dist/runtime/index.d.ts +0 -107
  494. package/dist/runtime/index.js +0 -1409
  495. package/dist/runtime.map.json +0 -7
  496. package/dist/src/__tests__/codegen.test.d.ts +0 -1
  497. package/dist/src/__tests__/codegen.test.js +0 -152
  498. package/dist/src/__tests__/e2e.test.d.ts +0 -6
  499. package/dist/src/__tests__/e2e.test.js +0 -1789
  500. package/dist/src/__tests__/entity-types.test.d.ts +0 -1
  501. package/dist/src/__tests__/entity-types.test.js +0 -203
  502. package/dist/src/__tests__/lowering.test.d.ts +0 -1
  503. package/dist/src/__tests__/lowering.test.js +0 -1015
  504. package/dist/src/__tests__/macro.test.d.ts +0 -8
  505. package/dist/src/__tests__/macro.test.js +0 -306
  506. package/dist/src/__tests__/nbt.test.d.ts +0 -1
  507. package/dist/src/__tests__/nbt.test.js +0 -82
  508. package/dist/src/__tests__/optimizer-advanced.test.d.ts +0 -1
  509. package/dist/src/__tests__/optimizer-advanced.test.js +0 -124
  510. package/dist/src/__tests__/optimizer.test.d.ts +0 -1
  511. package/dist/src/__tests__/optimizer.test.js +0 -149
  512. package/dist/src/__tests__/runtime.test.d.ts +0 -1
  513. package/dist/src/__tests__/runtime.test.js +0 -289
  514. package/dist/src/__tests__/stdlib-advanced.test.d.ts +0 -4
  515. package/dist/src/__tests__/stdlib-advanced.test.js +0 -374
  516. package/dist/src/__tests__/stdlib-bigint.test.d.ts +0 -7
  517. package/dist/src/__tests__/stdlib-bigint.test.js +0 -426
  518. package/dist/src/__tests__/stdlib-math.test.d.ts +0 -7
  519. package/dist/src/__tests__/stdlib-math.test.js +0 -351
  520. package/dist/src/__tests__/stdlib-vec.test.d.ts +0 -4
  521. package/dist/src/__tests__/stdlib-vec.test.js +0 -263
  522. package/dist/src/__tests__/structure-optimizer.test.d.ts +0 -1
  523. package/dist/src/__tests__/structure-optimizer.test.js +0 -33
  524. package/dist/src/__tests__/var-allocator.test.d.ts +0 -1
  525. package/dist/src/__tests__/var-allocator.test.js +0 -69
  526. package/dist/src/codegen/cmdblock/index.d.ts +0 -26
  527. package/dist/src/codegen/cmdblock/index.js +0 -45
  528. package/dist/src/codegen/mcfunction/index.d.ts +0 -40
  529. package/dist/src/codegen/mcfunction/index.js +0 -606
  530. package/dist/src/codegen/structure/index.d.ts +0 -24
  531. package/dist/src/codegen/structure/index.js +0 -279
  532. package/dist/src/codegen/var-allocator.d.ts +0 -45
  533. package/dist/src/codegen/var-allocator.js +0 -104
  534. package/dist/src/ir/builder.d.ts +0 -33
  535. package/dist/src/ir/builder.js +0 -99
  536. package/dist/src/ir/types.d.ts +0 -132
  537. package/dist/src/ir/types.js +0 -15
  538. package/dist/src/lowering/index.d.ts +0 -188
  539. package/dist/src/lowering/index.js +0 -3405
  540. package/dist/src/optimizer/commands.d.ts +0 -38
  541. package/dist/src/optimizer/commands.js +0 -451
  542. package/dist/src/optimizer/passes.d.ts +0 -34
  543. package/dist/src/optimizer/passes.js +0 -243
  544. package/dist/src/optimizer/structure.d.ts +0 -9
  545. package/dist/src/optimizer/structure.js +0 -356
  546. package/dist/src2/__tests__/optimizer/dce.test.d.ts +0 -1
  547. package/dist/src2/emit/compile.d.ts +0 -19
  548. package/dist/src2/emit/compile.js +0 -80
  549. package/dist/src2/optimizer/dce.d.ts +0 -8
  550. package/dist/src2/optimizer/dce.js +0 -155
  551. package/dist/swap_test.map.json +0 -14
  552. package/dist/tsconfig.tsbuildinfo +0 -1
  553. package/dist/typechecker/index.d.ts +0 -61
  554. package/dist/typechecker/index.js +0 -1034
  555. package/dist/types/entity-hierarchy.d.ts +0 -29
  556. package/dist/types/entity-hierarchy.js +0 -107
  557. package/src2/emit/compile.ts +0 -99
  558. /package/dist/{__tests__/cli.test.d.ts → src/__tests__/budget.test.d.ts} +0 -0
  559. /package/dist/{src2 → src}/__tests__/e2e/basic.test.d.ts +0 -0
  560. /package/dist/{src2 → src}/__tests__/e2e/basic.test.js +0 -0
  561. /package/dist/{src2 → src}/__tests__/e2e/macros.test.d.ts +0 -0
  562. /package/dist/{src2 → src}/__tests__/e2e/migrate.test.d.ts +0 -0
  563. /package/dist/{src2 → src}/__tests__/hir/desugar.test.d.ts +0 -0
  564. /package/dist/{src2 → src}/__tests__/lir/lower.test.d.ts +0 -0
  565. /package/dist/{src2 → src}/__tests__/lir/lower.test.js +0 -0
  566. /package/dist/{src2 → src}/__tests__/lir/types.test.d.ts +0 -0
  567. /package/dist/{src2 → src}/__tests__/lir/types.test.js +0 -0
  568. /package/dist/{src2 → src}/__tests__/lir/verify.test.d.ts +0 -0
  569. /package/dist/{src2 → src}/__tests__/lir/verify.test.js +0 -0
  570. /package/dist/{src2 → src}/__tests__/mir/arithmetic.test.d.ts +0 -0
  571. /package/dist/{src2 → src}/__tests__/mir/control-flow.test.d.ts +0 -0
  572. /package/dist/{src2 → src}/__tests__/mir/verify.test.d.ts +0 -0
  573. /package/dist/{src2 → src}/__tests__/mir/verify.test.js +0 -0
  574. /package/dist/{src2 → src}/__tests__/optimizer/block_merge.test.d.ts +0 -0
  575. /package/dist/{src2 → src}/__tests__/optimizer/block_merge.test.js +0 -0
  576. /package/dist/{src2 → src}/__tests__/optimizer/branch_simplify.test.d.ts +0 -0
  577. /package/dist/{src2 → src}/__tests__/optimizer/branch_simplify.test.js +0 -0
  578. /package/dist/{src2 → src}/__tests__/optimizer/constant_fold.test.d.ts +0 -0
  579. /package/dist/{src2 → src}/__tests__/optimizer/constant_fold.test.js +0 -0
  580. /package/dist/{src2 → src}/__tests__/optimizer/copy_prop.test.d.ts +0 -0
  581. /package/dist/{src2 → src}/__tests__/optimizer/copy_prop.test.js +0 -0
  582. /package/dist/{__tests__ → src/__tests__/optimizer}/dce.test.d.ts +0 -0
  583. /package/dist/{src2 → src}/__tests__/optimizer/dce.test.js +0 -0
  584. /package/dist/{__tests__/codegen.test.d.ts → src/__tests__/optimizer/interprocedural.test.d.ts} +0 -0
  585. /package/dist/{__tests__/entity-types.test.d.ts → src/__tests__/optimizer/lir/const_imm.test.d.ts} +0 -0
  586. /package/dist/{__tests__/formatter.test.d.ts → src/__tests__/optimizer/lir/dead_slot.test.d.ts} +0 -0
  587. /package/dist/{__tests__/lexer.test.d.ts → src/__tests__/optimizer/lir/peephole.test.d.ts} +0 -0
  588. /package/dist/{src2/__tests__/optimizer → src/__tests__/optimizer/lir}/pipeline.test.d.ts +0 -0
  589. /package/dist/{__tests__/lowering.test.d.ts → src/__tests__/optimizer/nbt-batch.test.d.ts} +0 -0
  590. /package/dist/{__tests__/mc-syntax.test.d.ts → src/__tests__/optimizer/pipeline.test.d.ts} +0 -0
  591. /package/dist/{src2 → src}/__tests__/optimizer/pipeline.test.js +0 -0
  592. /package/dist/{__tests__/nbt.test.d.ts → src/__tests__/optimizer/selector-cache.test.d.ts} +0 -0
  593. /package/dist/{__tests__/optimizer-advanced.test.d.ts → src/__tests__/optimizer/unroll.test.d.ts} +0 -0
  594. /package/dist/{src2 → src}/hir/types.js +0 -0
  595. /package/dist/{src2 → src}/lir/lower.d.ts +0 -0
  596. /package/dist/{src2 → src}/lir/types.js +0 -0
  597. /package/dist/{src2 → src}/lir/verify.d.ts +0 -0
  598. /package/dist/{src2 → src}/lir/verify.js +0 -0
  599. /package/dist/{src2 → src}/mir/macro.d.ts +0 -0
  600. /package/dist/{src2 → src}/mir/macro.js +0 -0
  601. /package/dist/{src2 → src}/mir/types.js +0 -0
  602. /package/dist/{src2 → src}/mir/verify.d.ts +0 -0
  603. /package/dist/{src2 → src}/mir/verify.js +0 -0
  604. /package/dist/{src2 → src}/optimizer/block_merge.d.ts +0 -0
  605. /package/dist/{src2 → src}/optimizer/block_merge.js +0 -0
  606. /package/dist/{src2 → src}/optimizer/branch_simplify.d.ts +0 -0
  607. /package/dist/{src2 → src}/optimizer/branch_simplify.js +0 -0
  608. /package/dist/{src2 → src}/optimizer/constant_fold.d.ts +0 -0
  609. /package/dist/{src2 → src}/optimizer/constant_fold.js +0 -0
  610. /package/dist/{src2 → src}/optimizer/copy_prop.d.ts +0 -0
  611. /package/dist/{src2 → src}/optimizer/copy_prop.js +0 -0
  612. /package/{src2 → src}/__tests__/e2e/basic.test.ts +0 -0
  613. /package/{src2 → src}/__tests__/lir/lower.test.ts +0 -0
  614. /package/{src2 → src}/__tests__/lir/types.test.ts +0 -0
  615. /package/{src2 → src}/__tests__/lir/verify.test.ts +0 -0
  616. /package/{src2 → src}/__tests__/mir/verify.test.ts +0 -0
  617. /package/{src2 → src}/__tests__/optimizer/block_merge.test.ts +0 -0
  618. /package/{src2 → src}/__tests__/optimizer/branch_simplify.test.ts +0 -0
  619. /package/{src2 → src}/__tests__/optimizer/constant_fold.test.ts +0 -0
  620. /package/{src2 → src}/__tests__/optimizer/copy_prop.test.ts +0 -0
  621. /package/{src2 → src}/__tests__/optimizer/dce.test.ts +0 -0
  622. /package/{src2 → src}/__tests__/optimizer/pipeline.test.ts +0 -0
  623. /package/{src2 → src}/lir/verify.ts +0 -0
  624. /package/{src2 → src}/mir/macro.ts +0 -0
  625. /package/{src2 → src}/mir/verify.ts +0 -0
  626. /package/{src2 → src}/optimizer/block_merge.ts +0 -0
  627. /package/{src2 → src}/optimizer/branch_simplify.ts +0 -0
  628. /package/{src2 → src}/optimizer/constant_fold.ts +0 -0
  629. /package/{src2 → src}/optimizer/copy_prop.ts +0 -0
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Source Map Generation — Stage 7 auxiliary output.
3
+ *
4
+ * For each generated .mcfunction file, produces a parallel sourcemap.json
5
+ * that maps output line numbers back to .mcrs source locations.
6
+ *
7
+ * Format:
8
+ * {
9
+ * "version": 1,
10
+ * "generatedFile": "data/ns/function/main.mcfunction",
11
+ * "sources": ["src/main.mcrs"],
12
+ * "mappings": [
13
+ * { "line": 1, "source": 0, "sourceLine": 5, "sourceCol": 2 },
14
+ * ...
15
+ * ]
16
+ * }
17
+ */
18
+ import type { SourceLoc } from '../lir/types';
19
+ export interface SourceMapEntry {
20
+ /** 1-based output line number in the .mcfunction file */
21
+ line: number;
22
+ /** Index into the `sources` array */
23
+ source: number;
24
+ /** 1-based line in the source .mcrs file */
25
+ sourceLine: number;
26
+ /** 1-based column in the source .mcrs file */
27
+ sourceCol: number;
28
+ }
29
+ export interface SourceMap {
30
+ version: 1;
31
+ /** Relative path to the generated .mcfunction file */
32
+ generatedFile: string;
33
+ /** List of source file paths referenced by mappings */
34
+ sources: string[];
35
+ /** One entry per mapped output line */
36
+ mappings: SourceMapEntry[];
37
+ }
38
+ export declare class SourceMapBuilder {
39
+ private readonly generatedFile;
40
+ private readonly sourceIndex;
41
+ private readonly sources;
42
+ private readonly mappings;
43
+ private lineNumber;
44
+ constructor(generatedFile: string);
45
+ /** Record the source location for the next output line. */
46
+ addLine(sourceLoc: SourceLoc | undefined): void;
47
+ /** Return the completed SourceMap, or null if there are no mappings. */
48
+ build(): SourceMap | null;
49
+ }
50
+ /** Serialize a SourceMap to JSON string (pretty-printed). */
51
+ export declare function serializeSourceMap(map: SourceMap): string;
52
+ /** Given a .mcfunction path, return the path for the sidecar sourcemap.json. */
53
+ export declare function sourceMapPath(mcfunctionPath: string): string;
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ /**
3
+ * Source Map Generation — Stage 7 auxiliary output.
4
+ *
5
+ * For each generated .mcfunction file, produces a parallel sourcemap.json
6
+ * that maps output line numbers back to .mcrs source locations.
7
+ *
8
+ * Format:
9
+ * {
10
+ * "version": 1,
11
+ * "generatedFile": "data/ns/function/main.mcfunction",
12
+ * "sources": ["src/main.mcrs"],
13
+ * "mappings": [
14
+ * { "line": 1, "source": 0, "sourceLine": 5, "sourceCol": 2 },
15
+ * ...
16
+ * ]
17
+ * }
18
+ */
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.SourceMapBuilder = void 0;
21
+ exports.serializeSourceMap = serializeSourceMap;
22
+ exports.sourceMapPath = sourceMapPath;
23
+ // ---------------------------------------------------------------------------
24
+ // Builder — accumulates mappings as lines are emitted
25
+ // ---------------------------------------------------------------------------
26
+ class SourceMapBuilder {
27
+ constructor(generatedFile) {
28
+ this.sourceIndex = new Map();
29
+ this.sources = [];
30
+ this.mappings = [];
31
+ this.lineNumber = 0;
32
+ this.generatedFile = generatedFile;
33
+ }
34
+ /** Record the source location for the next output line. */
35
+ addLine(sourceLoc) {
36
+ this.lineNumber++;
37
+ if (!sourceLoc)
38
+ return;
39
+ let idx = this.sourceIndex.get(sourceLoc.file);
40
+ if (idx === undefined) {
41
+ idx = this.sources.length;
42
+ this.sources.push(sourceLoc.file);
43
+ this.sourceIndex.set(sourceLoc.file, idx);
44
+ }
45
+ this.mappings.push({
46
+ line: this.lineNumber,
47
+ source: idx,
48
+ sourceLine: sourceLoc.line,
49
+ sourceCol: sourceLoc.col,
50
+ });
51
+ }
52
+ /** Return the completed SourceMap, or null if there are no mappings. */
53
+ build() {
54
+ if (this.mappings.length === 0)
55
+ return null;
56
+ return {
57
+ version: 1,
58
+ generatedFile: this.generatedFile,
59
+ sources: [...this.sources],
60
+ mappings: [...this.mappings],
61
+ };
62
+ }
63
+ }
64
+ exports.SourceMapBuilder = SourceMapBuilder;
65
+ /** Serialize a SourceMap to JSON string (pretty-printed). */
66
+ function serializeSourceMap(map) {
67
+ return JSON.stringify(map, null, 2) + '\n';
68
+ }
69
+ /** Given a .mcfunction path, return the path for the sidecar sourcemap.json. */
70
+ function sourceMapPath(mcfunctionPath) {
71
+ return mcfunctionPath.replace(/\.mcfunction$/, '.sourcemap.json');
72
+ }
73
+ //# sourceMappingURL=sourcemap.js.map
@@ -10,6 +10,6 @@
10
10
  * - as_block / at_block / as_at → unified execute with subcommands
11
11
  * - All other nodes pass through with field-wise recursion
12
12
  */
13
- import type { Program } from '../../src/ast/types';
13
+ import type { Program } from '../ast/types';
14
14
  import type { HIRModule } from './types';
15
15
  export declare function lowerToHIR(program: Program): HIRModule;
@@ -60,11 +60,13 @@ function lowerGlobal(g) {
60
60
  function lowerFunction(fn) {
61
61
  return {
62
62
  name: fn.name,
63
+ typeParams: fn.typeParams,
63
64
  params: fn.params.map(lowerParam),
64
65
  returnType: fn.returnType,
65
66
  decorators: fn.decorators,
66
67
  body: lowerBlock(fn.body),
67
68
  isLibraryFn: fn.isLibraryFn,
69
+ isExported: fn.isExported,
68
70
  span: fn.span,
69
71
  };
70
72
  }
@@ -96,6 +98,8 @@ function lowerStmt(stmt) {
96
98
  switch (stmt.kind) {
97
99
  case 'let':
98
100
  return { kind: 'let', name: stmt.name, type: stmt.type, init: lowerExpr(stmt.init), span: stmt.span };
101
+ case 'let_destruct':
102
+ return { kind: 'let_destruct', names: stmt.names, type: stmt.type, init: lowerExpr(stmt.init), span: stmt.span };
99
103
  case 'expr':
100
104
  return { kind: 'expr', expr: lowerExpr(stmt.expr), span: stmt.span };
101
105
  case 'return':
@@ -225,6 +229,15 @@ function lowerStmt(stmt) {
225
229
  };
226
230
  case 'raw':
227
231
  return { kind: 'raw', cmd: stmt.cmd, span: stmt.span };
232
+ case 'if_let_some':
233
+ return {
234
+ kind: 'if_let_some',
235
+ binding: stmt.binding,
236
+ init: lowerExpr(stmt.init),
237
+ then: lowerBlock(stmt.then),
238
+ else_: stmt.else_ ? lowerBlock(stmt.else_) : undefined,
239
+ span: stmt.span,
240
+ };
228
241
  default: {
229
242
  const _exhaustive = stmt;
230
243
  throw new Error(`Unknown statement kind: ${_exhaustive.kind}`);
@@ -348,7 +361,7 @@ function lowerExpr(expr) {
348
361
  case 'index':
349
362
  return { kind: 'index', obj: lowerExpr(expr.obj), index: lowerExpr(expr.index), span: expr.span };
350
363
  case 'call':
351
- return { kind: 'call', fn: expr.fn, args: expr.args.map(lowerExpr), span: expr.span };
364
+ return { kind: 'call', fn: expr.fn, args: expr.args.map(lowerExpr), typeArgs: expr.typeArgs, span: expr.span };
352
365
  case 'invoke':
353
366
  return { kind: 'invoke', callee: lowerExpr(expr.callee), args: expr.args.map(lowerExpr), span: expr.span };
354
367
  case 'static_call':
@@ -359,6 +372,14 @@ function lowerExpr(expr) {
359
372
  args: expr.args.map(lowerExpr),
360
373
  span: expr.span,
361
374
  };
375
+ case 'path_expr':
376
+ return { kind: 'path_expr', enumName: expr.enumName, variant: expr.variant, span: expr.span };
377
+ case 'tuple_lit':
378
+ return { kind: 'tuple_lit', elements: expr.elements.map(lowerExpr), span: expr.span };
379
+ case 'some_lit':
380
+ return { kind: 'some_lit', value: lowerExpr(expr.value), span: expr.span };
381
+ case 'none_lit':
382
+ return { kind: 'none_lit', span: expr.span };
362
383
  case 'lambda': {
363
384
  const body = Array.isArray(expr.body) ? lowerBlock(expr.body) : lowerExpr(expr.body);
364
385
  return {
@@ -0,0 +1,22 @@
1
+ /**
2
+ * HIR Monomorphization — Phase 2c: Generic functions
3
+ *
4
+ * For each generic function `fn foo<T>(...)`, each unique instantiation
5
+ * `foo<int>`, `foo<float>` etc. produces a concrete copy with a mangled name.
6
+ *
7
+ * Algorithm:
8
+ * 1. Walk the HIR module collecting all call sites to generic functions.
9
+ * 2. For each unique (fnName, typeArgs) pair, clone the generic HIRFunction,
10
+ * substitute all occurrences of the type params, and add to module.functions.
11
+ * 3. Rewrite every call site: `foo<int>(x, y)` → `foo_int(x, y)`.
12
+ * 4. Remove original generic function definitions from the output.
13
+ *
14
+ * Type arg → suffix mapping:
15
+ * int → "int"
16
+ * float → "float"
17
+ * bool → "bool"
18
+ * string → "string"
19
+ * (others) → use struct/enum name
20
+ */
21
+ import type { HIRModule } from './types';
22
+ export declare function monomorphize(module: HIRModule): HIRModule;
@@ -0,0 +1,379 @@
1
+ "use strict";
2
+ /**
3
+ * HIR Monomorphization — Phase 2c: Generic functions
4
+ *
5
+ * For each generic function `fn foo<T>(...)`, each unique instantiation
6
+ * `foo<int>`, `foo<float>` etc. produces a concrete copy with a mangled name.
7
+ *
8
+ * Algorithm:
9
+ * 1. Walk the HIR module collecting all call sites to generic functions.
10
+ * 2. For each unique (fnName, typeArgs) pair, clone the generic HIRFunction,
11
+ * substitute all occurrences of the type params, and add to module.functions.
12
+ * 3. Rewrite every call site: `foo<int>(x, y)` → `foo_int(x, y)`.
13
+ * 4. Remove original generic function definitions from the output.
14
+ *
15
+ * Type arg → suffix mapping:
16
+ * int → "int"
17
+ * float → "float"
18
+ * bool → "bool"
19
+ * string → "string"
20
+ * (others) → use struct/enum name
21
+ */
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.monomorphize = monomorphize;
24
+ // ---------------------------------------------------------------------------
25
+ // Public API
26
+ // ---------------------------------------------------------------------------
27
+ function monomorphize(module) {
28
+ const mono = new Monomorphizer(module);
29
+ return mono.run();
30
+ }
31
+ // ---------------------------------------------------------------------------
32
+ // Helpers
33
+ // ---------------------------------------------------------------------------
34
+ /** Return a stable string suffix for a type argument, used in mangled names. */
35
+ function typeSuffix(t) {
36
+ switch (t.kind) {
37
+ case 'named': return t.name;
38
+ case 'struct': return t.name;
39
+ case 'enum': return t.name;
40
+ case 'array': return `arr_${typeSuffix(t.elem)}`;
41
+ case 'tuple': return `tup_${t.elements.map(typeSuffix).join('_')}`;
42
+ case 'option': return `opt_${typeSuffix(t.inner)}`;
43
+ default: return 'unknown';
44
+ }
45
+ }
46
+ /** Produce the mangled name for a specialization, e.g. "max_int". */
47
+ function mangledName(fnName, typeArgs) {
48
+ return `${fnName}_${typeArgs.map(typeSuffix).join('_')}`;
49
+ }
50
+ /** Build a substitution map: type param name → concrete type. */
51
+ function buildSubst(typeParams, typeArgs) {
52
+ const subst = new Map();
53
+ for (let i = 0; i < typeParams.length; i++) {
54
+ subst.set(typeParams[i], typeArgs[i]);
55
+ }
56
+ return subst;
57
+ }
58
+ /** Apply substitution to a TypeNode (replacing struct-kind nodes whose name
59
+ * matches a type param with the concrete type). */
60
+ function substType(t, subst) {
61
+ switch (t.kind) {
62
+ case 'struct': {
63
+ const replacement = subst.get(t.name);
64
+ if (replacement)
65
+ return replacement;
66
+ return t;
67
+ }
68
+ case 'array':
69
+ return { kind: 'array', elem: substType(t.elem, subst) };
70
+ case 'tuple':
71
+ return { kind: 'tuple', elements: t.elements.map(e => substType(e, subst)) };
72
+ case 'option':
73
+ return { kind: 'option', inner: substType(t.inner, subst) };
74
+ case 'function_type':
75
+ return { kind: 'function_type', params: t.params.map(p => substType(p, subst)), return: substType(t.return, subst) };
76
+ default:
77
+ return t;
78
+ }
79
+ }
80
+ class Monomorphizer {
81
+ constructor(module) {
82
+ /** Map from function name → HIRFunction for generic functions */
83
+ this.genericFns = new Map();
84
+ /** Cache: cacheKey → specialized HIRFunction (to avoid duplicate generation) */
85
+ this.specialized = new Map();
86
+ /** Worklist for BFS specialization (to handle generic calling generic) */
87
+ this.worklist = [];
88
+ this.module = module;
89
+ }
90
+ run() {
91
+ // Collect all generic function definitions
92
+ for (const fn of this.module.functions) {
93
+ if (fn.typeParams && fn.typeParams.length > 0) {
94
+ this.genericFns.set(fn.name, fn);
95
+ }
96
+ }
97
+ if (this.genericFns.size === 0) {
98
+ // Nothing to do — fast path
99
+ return this.module;
100
+ }
101
+ // Rewrite all non-generic functions, collecting specializations needed
102
+ const newFunctions = [];
103
+ for (const fn of this.module.functions) {
104
+ if (fn.typeParams && fn.typeParams.length > 0) {
105
+ // Skip generic function templates — they'll be replaced by specializations
106
+ continue;
107
+ }
108
+ const rewritten = this.rewriteFn(fn);
109
+ newFunctions.push(rewritten);
110
+ }
111
+ // Process worklist BFS: generate specializations (which may add more to worklist)
112
+ while (this.worklist.length > 0) {
113
+ const { fn: templateFn, typeArgs } = this.worklist.shift();
114
+ const key = this.cacheKey(templateFn.name, typeArgs);
115
+ if (this.specialized.has(key))
116
+ continue;
117
+ // Mark as in-progress to prevent cycles
118
+ this.specialized.set(key, null);
119
+ const specializedFn = this.specialize(templateFn, typeArgs);
120
+ this.specialized.set(key, specializedFn);
121
+ }
122
+ // Add all specializations
123
+ for (const fn of this.specialized.values()) {
124
+ if (fn)
125
+ newFunctions.push(fn);
126
+ }
127
+ return { ...this.module, functions: newFunctions };
128
+ }
129
+ cacheKey(fnName, typeArgs) {
130
+ return `${fnName}|${typeArgs.map(typeSuffix).join(',')}`;
131
+ }
132
+ /** Specialize a generic function with concrete type args. */
133
+ specialize(templateFn, typeArgs) {
134
+ const subst = buildSubst(templateFn.typeParams, typeArgs);
135
+ const name = mangledName(templateFn.name, typeArgs);
136
+ // Build initial variable scope from parameters
137
+ const varTypes = new Map();
138
+ const params = templateFn.params.map(p => {
139
+ const concreteType = substType(p.type, subst);
140
+ varTypes.set(p.name, concreteType);
141
+ return {
142
+ name: p.name,
143
+ type: concreteType,
144
+ default: p.default ? this.rewriteExpr(p.default, { subst, varTypes }) : undefined,
145
+ };
146
+ });
147
+ const returnType = substType(templateFn.returnType, subst);
148
+ const body = this.rewriteBlock(templateFn.body, { subst, varTypes });
149
+ return {
150
+ name,
151
+ params,
152
+ returnType,
153
+ decorators: templateFn.decorators,
154
+ body,
155
+ isLibraryFn: templateFn.isLibraryFn,
156
+ isExported: templateFn.isExported,
157
+ span: templateFn.span,
158
+ // No typeParams on the specialized copy
159
+ };
160
+ }
161
+ /** Rewrite a non-generic function (substitute calls to generic functions). */
162
+ rewriteFn(fn) {
163
+ const varTypes = new Map();
164
+ // Add params to scope with their concrete types
165
+ for (const p of fn.params) {
166
+ varTypes.set(p.name, p.type);
167
+ }
168
+ return {
169
+ ...fn,
170
+ params: fn.params.map(p => ({
171
+ ...p,
172
+ default: p.default ? this.rewriteExpr(p.default, { subst: new Map(), varTypes }) : undefined,
173
+ })),
174
+ body: this.rewriteBlock(fn.body, { subst: new Map(), varTypes }),
175
+ };
176
+ }
177
+ rewriteBlock(block, ctx) {
178
+ // Clone varTypes so block-local bindings don't leak
179
+ const localCtx = { subst: ctx.subst, varTypes: new Map(ctx.varTypes) };
180
+ const result = [];
181
+ for (const stmt of block) {
182
+ result.push(this.rewriteStmt(stmt, localCtx));
183
+ }
184
+ return result;
185
+ }
186
+ rewriteStmt(stmt, ctx) {
187
+ const { subst } = ctx;
188
+ switch (stmt.kind) {
189
+ case 'let': {
190
+ const init = this.rewriteExpr(stmt.init, ctx);
191
+ const type = stmt.type ? substType(stmt.type, subst) : undefined;
192
+ // Track variable type in scope
193
+ if (type)
194
+ ctx.varTypes.set(stmt.name, type);
195
+ else {
196
+ const inferred = this.inferExprType(init, ctx);
197
+ if (inferred)
198
+ ctx.varTypes.set(stmt.name, inferred);
199
+ }
200
+ return { ...stmt, type, init };
201
+ }
202
+ case 'let_destruct':
203
+ return { ...stmt, type: stmt.type ? substType(stmt.type, subst) : undefined, init: this.rewriteExpr(stmt.init, ctx) };
204
+ case 'expr':
205
+ return { ...stmt, expr: this.rewriteExpr(stmt.expr, ctx) };
206
+ case 'return':
207
+ return { ...stmt, value: stmt.value ? this.rewriteExpr(stmt.value, ctx) : undefined };
208
+ case 'if':
209
+ return {
210
+ ...stmt,
211
+ cond: this.rewriteExpr(stmt.cond, ctx),
212
+ then: this.rewriteBlock(stmt.then, ctx),
213
+ else_: stmt.else_ ? this.rewriteBlock(stmt.else_, ctx) : undefined,
214
+ };
215
+ case 'while':
216
+ return {
217
+ ...stmt,
218
+ cond: this.rewriteExpr(stmt.cond, ctx),
219
+ body: this.rewriteBlock(stmt.body, ctx),
220
+ step: stmt.step ? this.rewriteBlock(stmt.step, ctx) : undefined,
221
+ };
222
+ case 'foreach':
223
+ return { ...stmt, iterable: this.rewriteExpr(stmt.iterable, ctx), body: this.rewriteBlock(stmt.body, ctx) };
224
+ case 'match':
225
+ return {
226
+ ...stmt,
227
+ expr: this.rewriteExpr(stmt.expr, ctx),
228
+ arms: stmt.arms.map(arm => ({
229
+ pattern: arm.pattern ? this.rewriteExpr(arm.pattern, ctx) : null,
230
+ body: this.rewriteBlock(arm.body, ctx),
231
+ })),
232
+ };
233
+ case 'execute':
234
+ return { ...stmt, body: this.rewriteBlock(stmt.body, ctx) };
235
+ case 'if_let_some':
236
+ return {
237
+ ...stmt,
238
+ init: this.rewriteExpr(stmt.init, ctx),
239
+ then: this.rewriteBlock(stmt.then, ctx),
240
+ else_: stmt.else_ ? this.rewriteBlock(stmt.else_, ctx) : undefined,
241
+ };
242
+ case 'break':
243
+ case 'continue':
244
+ case 'raw':
245
+ return stmt;
246
+ }
247
+ }
248
+ rewriteExpr(expr, ctx) {
249
+ const { subst } = ctx;
250
+ switch (expr.kind) {
251
+ case 'call': {
252
+ const args = expr.args.map(a => this.rewriteExpr(a, ctx));
253
+ // Determine concrete type args for this call
254
+ const resolvedTypeArgs = expr.typeArgs?.map(t => substType(t, subst));
255
+ const genericFn = this.genericFns.get(expr.fn);
256
+ if (genericFn && genericFn.typeParams && genericFn.typeParams.length > 0) {
257
+ // This call targets a generic function — we need to monomorphize
258
+ const concreteTypeArgs = resolvedTypeArgs ?? this.inferTypeArgs(genericFn, args, ctx);
259
+ if (concreteTypeArgs) {
260
+ const key = this.cacheKey(expr.fn, concreteTypeArgs);
261
+ if (!this.specialized.has(key)) {
262
+ // Enqueue for specialization
263
+ this.worklist.push({ fn: genericFn, typeArgs: concreteTypeArgs });
264
+ }
265
+ const name = mangledName(expr.fn, concreteTypeArgs);
266
+ return { ...expr, fn: name, args, typeArgs: undefined };
267
+ }
268
+ }
269
+ return { ...expr, args, typeArgs: resolvedTypeArgs };
270
+ }
271
+ case 'invoke':
272
+ return { ...expr, callee: this.rewriteExpr(expr.callee, ctx), args: expr.args.map(a => this.rewriteExpr(a, ctx)) };
273
+ case 'binary':
274
+ return { ...expr, left: this.rewriteExpr(expr.left, ctx), right: this.rewriteExpr(expr.right, ctx) };
275
+ case 'unary':
276
+ return { ...expr, operand: this.rewriteExpr(expr.operand, ctx) };
277
+ case 'assign':
278
+ return { ...expr, value: this.rewriteExpr(expr.value, ctx) };
279
+ case 'member_assign':
280
+ return { ...expr, obj: this.rewriteExpr(expr.obj, ctx), value: this.rewriteExpr(expr.value, ctx) };
281
+ case 'member':
282
+ return { ...expr, obj: this.rewriteExpr(expr.obj, ctx) };
283
+ case 'index':
284
+ return { ...expr, obj: this.rewriteExpr(expr.obj, ctx), index: this.rewriteExpr(expr.index, ctx) };
285
+ case 'array_lit':
286
+ return { ...expr, elements: expr.elements.map(e => this.rewriteExpr(e, ctx)) };
287
+ case 'struct_lit':
288
+ return { ...expr, fields: expr.fields.map(f => ({ name: f.name, value: this.rewriteExpr(f.value, ctx) })) };
289
+ case 'tuple_lit':
290
+ return { ...expr, elements: expr.elements.map(e => this.rewriteExpr(e, ctx)) };
291
+ case 'static_call':
292
+ return { ...expr, args: expr.args.map(a => this.rewriteExpr(a, ctx)) };
293
+ case 'lambda':
294
+ return { ...expr, body: Array.isArray(expr.body) ? this.rewriteBlock(expr.body, ctx) : this.rewriteExpr(expr.body, ctx) };
295
+ case 'is_check':
296
+ return { ...expr, expr: this.rewriteExpr(expr.expr, ctx) };
297
+ case 'str_interp':
298
+ return { ...expr, parts: expr.parts.map(p => typeof p === 'string' ? p : this.rewriteExpr(p, ctx)) };
299
+ case 'f_string':
300
+ // FStringPart uses AST Expr (not HIRExpr) — pass through without rewriting
301
+ return expr;
302
+ case 'some_lit':
303
+ return { ...expr, value: this.rewriteExpr(expr.value, ctx) };
304
+ case 'none_lit':
305
+ return expr;
306
+ // Literals / terminals — pass through unchanged
307
+ default:
308
+ return expr;
309
+ }
310
+ }
311
+ /**
312
+ * Infer type args from the actual argument expressions.
313
+ * Works by looking at the types of call arguments and matching them to
314
+ * the type parameters in the function signature.
315
+ *
316
+ * Returns null if inference fails.
317
+ */
318
+ inferTypeArgs(fn, args, ctx) {
319
+ const inferred = new Map();
320
+ const typeParams = fn.typeParams;
321
+ for (let i = 0; i < fn.params.length && i < args.length; i++) {
322
+ const paramType = fn.params[i].type;
323
+ const argType = this.inferExprType(args[i], ctx);
324
+ if (argType) {
325
+ this.matchTypes(paramType, argType, typeParams, inferred);
326
+ }
327
+ }
328
+ // Check all type params were inferred
329
+ if (typeParams.every(tp => inferred.has(tp))) {
330
+ return typeParams.map(tp => inferred.get(tp));
331
+ }
332
+ return null;
333
+ }
334
+ /** Walk a type pattern and a concrete type, binding type param names. */
335
+ matchTypes(pattern, concrete, typeParams, inferred) {
336
+ if (pattern.kind === 'struct' && typeParams.includes(pattern.name)) {
337
+ // This position is a type param — bind it
338
+ if (!inferred.has(pattern.name)) {
339
+ inferred.set(pattern.name, concrete);
340
+ }
341
+ return;
342
+ }
343
+ if (pattern.kind === 'array' && concrete.kind === 'array') {
344
+ this.matchTypes(pattern.elem, concrete.elem, typeParams, inferred);
345
+ return;
346
+ }
347
+ if (pattern.kind === 'tuple' && concrete.kind === 'tuple') {
348
+ for (let i = 0; i < pattern.elements.length && i < concrete.elements.length; i++) {
349
+ this.matchTypes(pattern.elements[i], concrete.elements[i], typeParams, inferred);
350
+ }
351
+ }
352
+ }
353
+ /** Infer the type of a HIR expression (best-effort, for type inference). */
354
+ inferExprType(expr, ctx) {
355
+ switch (expr.kind) {
356
+ case 'int_lit': return { kind: 'named', name: 'int' };
357
+ case 'float_lit': return { kind: 'named', name: 'float' };
358
+ case 'bool_lit': return { kind: 'named', name: 'bool' };
359
+ case 'str_lit': return { kind: 'named', name: 'string' };
360
+ case 'byte_lit': return { kind: 'named', name: 'byte' };
361
+ case 'short_lit': return { kind: 'named', name: 'short' };
362
+ case 'long_lit': return { kind: 'named', name: 'long' };
363
+ case 'double_lit': return { kind: 'named', name: 'double' };
364
+ case 'ident': return ctx.varTypes.get(expr.name) ?? null;
365
+ case 'unary':
366
+ // unary minus/not preserves the operand's type
367
+ return this.inferExprType(expr.operand, ctx);
368
+ case 'binary': {
369
+ // For arithmetic, use the left operand's type
370
+ const lt = this.inferExprType(expr.left, ctx);
371
+ if (lt)
372
+ return lt;
373
+ return this.inferExprType(expr.right, ctx);
374
+ }
375
+ default: return null;
376
+ }
377
+ }
378
+ }
379
+ //# sourceMappingURL=monomorphize.js.map
@@ -11,8 +11,8 @@
11
11
  *
12
12
  * All types and names are preserved from the AST.
13
13
  */
14
- import type { Span, TypeNode, EntitySelector, CoordComponent, Decorator, RangeExpr, FStringPart, SelectorFilter, EntityTypeName, LambdaParam } from '../../src/ast/types';
15
- import type { BinOp, CmpOp } from '../../src/ast/types';
14
+ import type { Span, TypeNode, EntitySelector, CoordComponent, Decorator, RangeExpr, FStringPart, SelectorFilter, EntityTypeName, LambdaParam } from '../ast/types';
15
+ import type { BinOp, CmpOp } from '../ast/types';
16
16
  export type { Span, TypeNode, EntitySelector, CoordComponent, Decorator, RangeExpr, FStringPart, SelectorFilter, EntityTypeName, LambdaParam, BinOp, CmpOp, };
17
17
  export type HIRExpr = {
18
18
  kind: 'int_lit';
@@ -138,6 +138,7 @@ export type HIRExpr = {
138
138
  kind: 'call';
139
139
  fn: string;
140
140
  args: HIRExpr[];
141
+ typeArgs?: TypeNode[];
141
142
  span?: Span;
142
143
  } | {
143
144
  kind: 'invoke';
@@ -150,12 +151,28 @@ export type HIRExpr = {
150
151
  method: string;
151
152
  args: HIRExpr[];
152
153
  span?: Span;
154
+ } | {
155
+ kind: 'path_expr';
156
+ enumName: string;
157
+ variant: string;
158
+ span?: Span;
153
159
  } | {
154
160
  kind: 'lambda';
155
161
  params: LambdaParam[];
156
162
  returnType?: TypeNode;
157
163
  body: HIRExpr | HIRBlock;
158
164
  span?: Span;
165
+ } | {
166
+ kind: 'tuple_lit';
167
+ elements: HIRExpr[];
168
+ span?: Span;
169
+ } | {
170
+ kind: 'some_lit';
171
+ value: HIRExpr;
172
+ span?: Span;
173
+ } | {
174
+ kind: 'none_lit';
175
+ span?: Span;
159
176
  };
160
177
  export type HIRExecuteSubcommand = {
161
178
  kind: 'as';
@@ -259,6 +276,12 @@ export type HIRStmt = {
259
276
  type?: TypeNode;
260
277
  init: HIRExpr;
261
278
  span?: Span;
279
+ } | {
280
+ kind: 'let_destruct';
281
+ names: string[];
282
+ type?: TypeNode;
283
+ init: HIRExpr;
284
+ span?: Span;
262
285
  } | {
263
286
  kind: 'expr';
264
287
  expr: HIRExpr;
@@ -309,6 +332,13 @@ export type HIRStmt = {
309
332
  kind: 'raw';
310
333
  cmd: string;
311
334
  span?: Span;
335
+ } | {
336
+ kind: 'if_let_some';
337
+ binding: string;
338
+ init: HIRExpr;
339
+ then: HIRBlock;
340
+ else_?: HIRBlock;
341
+ span?: Span;
312
342
  };
313
343
  export type HIRBlock = HIRStmt[];
314
344
  export interface HIRParam {
@@ -318,11 +348,14 @@ export interface HIRParam {
318
348
  }
319
349
  export interface HIRFunction {
320
350
  name: string;
351
+ /** Generic type parameter names, e.g. ['T'] for fn foo<T>(...) */
352
+ typeParams?: string[];
321
353
  params: HIRParam[];
322
354
  returnType: TypeNode;
323
355
  decorators: Decorator[];
324
356
  body: HIRBlock;
325
357
  isLibraryFn?: boolean;
358
+ isExported?: boolean;
326
359
  span?: Span;
327
360
  }
328
361
  export interface HIRStructField {