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,152 @@
1
+ "use strict";
2
+ /**
3
+ * FileCache — content-hash-based compilation cache for incremental builds.
4
+ *
5
+ * Stores per-file content hashes and optional cached HIR modules.
6
+ * Persists to `.redscript-cache/` as JSON.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.FileCache = void 0;
43
+ exports.hashFile = hashFile;
44
+ const fs = __importStar(require("fs"));
45
+ const path = __importStar(require("path"));
46
+ const crypto = __importStar(require("crypto"));
47
+ class FileCache {
48
+ constructor(cacheDir) {
49
+ this.entries = new Map();
50
+ this.cacheDir = cacheDir;
51
+ }
52
+ /** Get cached entry for a file (by absolute path). */
53
+ get(filePath) {
54
+ return this.entries.get(path.resolve(filePath));
55
+ }
56
+ /** Set cache entry for a file. */
57
+ set(filePath, entry) {
58
+ this.entries.set(path.resolve(filePath), entry);
59
+ }
60
+ /** Check if a file's content has changed since last cache. */
61
+ hasChanged(filePath) {
62
+ const absPath = path.resolve(filePath);
63
+ const cached = this.entries.get(absPath);
64
+ if (!cached)
65
+ return true;
66
+ // Quick mtime check first
67
+ try {
68
+ const stat = fs.statSync(absPath);
69
+ if (stat.mtimeMs === cached.mtime)
70
+ return false;
71
+ }
72
+ catch {
73
+ return true;
74
+ }
75
+ // mtime changed — compare content hash
76
+ const currentHash = hashFile(absPath);
77
+ return currentHash !== cached.hash;
78
+ }
79
+ /** Update the cache entry for a file from disk. Returns true if content changed. */
80
+ update(filePath, hir) {
81
+ const absPath = path.resolve(filePath);
82
+ const changed = this.hasChanged(absPath);
83
+ if (changed) {
84
+ try {
85
+ const stat = fs.statSync(absPath);
86
+ this.entries.set(absPath, {
87
+ hash: hashFile(absPath),
88
+ mtime: stat.mtimeMs,
89
+ hir,
90
+ });
91
+ }
92
+ catch {
93
+ this.entries.delete(absPath);
94
+ }
95
+ }
96
+ else if (hir) {
97
+ // Update HIR even if hash didn't change
98
+ const entry = this.entries.get(absPath);
99
+ if (entry)
100
+ entry.hir = hir;
101
+ }
102
+ return changed;
103
+ }
104
+ /** Remove a file from the cache. */
105
+ delete(filePath) {
106
+ this.entries.delete(path.resolve(filePath));
107
+ }
108
+ /** Clear all cache entries. */
109
+ clear() {
110
+ this.entries.clear();
111
+ }
112
+ /** Number of cached entries. */
113
+ get size() {
114
+ return this.entries.size;
115
+ }
116
+ /** Persist cache to disk (`.redscript-cache/cache.json`). */
117
+ save() {
118
+ fs.mkdirSync(this.cacheDir, { recursive: true });
119
+ const serialized = {
120
+ version: 1,
121
+ entries: {},
122
+ };
123
+ for (const [filePath, entry] of this.entries) {
124
+ // Don't persist HIR — it contains non-serializable references
125
+ serialized.entries[filePath] = { hash: entry.hash, mtime: entry.mtime };
126
+ }
127
+ const cachePath = path.join(this.cacheDir, 'cache.json');
128
+ fs.writeFileSync(cachePath, JSON.stringify(serialized, null, 2));
129
+ }
130
+ /** Load cache from disk. */
131
+ load() {
132
+ const cachePath = path.join(this.cacheDir, 'cache.json');
133
+ try {
134
+ const data = JSON.parse(fs.readFileSync(cachePath, 'utf-8'));
135
+ if (data.version !== 1)
136
+ return;
137
+ for (const [filePath, entry] of Object.entries(data.entries)) {
138
+ this.entries.set(filePath, { hash: entry.hash, mtime: entry.mtime });
139
+ }
140
+ }
141
+ catch {
142
+ // No cache or corrupt — start fresh
143
+ }
144
+ }
145
+ }
146
+ exports.FileCache = FileCache;
147
+ /** SHA-256 hash of a file's content. */
148
+ function hashFile(filePath) {
149
+ const content = fs.readFileSync(filePath);
150
+ return crypto.createHash('sha256').update(content).digest('hex');
151
+ }
152
+ //# sourceMappingURL=index.js.map
package/dist/src/cli.js CHANGED
@@ -45,8 +45,12 @@ var __importStar = (this && this.__importStar) || (function () {
45
45
  Object.defineProperty(exports, "__esModule", { value: true });
46
46
  const index_1 = require("./index");
47
47
  const diagnostics_1 = require("./diagnostics");
48
+ const mc_version_1 = require("./types/mc-version");
48
49
  const repl_1 = require("./repl");
49
50
  const metadata_1 = require("./builtins/metadata");
51
+ const index_2 = require("./cache/index");
52
+ const deps_1 = require("./cache/deps");
53
+ const incremental_1 = require("./cache/incremental");
50
54
  const fs = __importStar(require("fs"));
51
55
  const path = __importStar(require("path"));
52
56
  const https = __importStar(require("https"));
@@ -81,6 +85,10 @@ Options:
81
85
  --namespace <ns> Datapack namespace (default: derived from filename)
82
86
  --hot-reload <url> After each successful compile, POST to <url>/reload
83
87
  (use with redscript-testharness; e.g. http://localhost:25561)
88
+ --source-map Generate .sourcemap.json files alongside .mcfunction output
89
+ --mc-version <ver> Target Minecraft version (default: 1.21). Affects codegen features.
90
+ e.g. --mc-version 1.20.2, --mc-version 1.19
91
+ --lenient Treat type errors as warnings instead of blocking compilation
84
92
  -h, --help Show this help message
85
93
  `);
86
94
  }
@@ -190,6 +198,18 @@ function parseArgs(args) {
190
198
  result.hotReload = args[++i];
191
199
  i++;
192
200
  }
201
+ else if (arg === '--source-map') {
202
+ result.sourceMap = true;
203
+ i++;
204
+ }
205
+ else if (arg === '--mc-version') {
206
+ result.mcVersionStr = args[++i];
207
+ i++;
208
+ }
209
+ else if (arg === '--lenient') {
210
+ result.lenient = true;
211
+ i++;
212
+ }
193
213
  else if (!result.command) {
194
214
  result.command = arg;
195
215
  i++;
@@ -209,15 +229,25 @@ function deriveNamespace(filePath) {
209
229
  // Convert to valid identifier: lowercase, replace non-alphanumeric with underscore
210
230
  return basename.toLowerCase().replace(/[^a-z0-9]/g, '_');
211
231
  }
212
- function compileCommand(file, output, namespace) {
232
+ function compileCommand(file, output, namespace, sourceMap = false, mcVersionStr, lenient = false) {
213
233
  // Read source file
214
234
  if (!fs.existsSync(file)) {
215
235
  console.error(`Error: File not found: ${file}`);
216
236
  process.exit(1);
217
237
  }
238
+ let mcVersion = mc_version_1.DEFAULT_MC_VERSION;
239
+ if (mcVersionStr) {
240
+ try {
241
+ mcVersion = (0, mc_version_1.parseMcVersion)(mcVersionStr);
242
+ }
243
+ catch (e) {
244
+ console.error(`Error: ${e.message}`);
245
+ process.exit(1);
246
+ }
247
+ }
218
248
  const source = fs.readFileSync(file, 'utf-8');
219
249
  try {
220
- const result = (0, index_1.compile)(source, { namespace, filePath: file });
250
+ const result = (0, index_1.compile)(source, { namespace, filePath: file, generateSourceMap: sourceMap, mcVersion, lenient });
221
251
  for (const w of result.warnings) {
222
252
  console.error(`Warning: ${w}`);
223
253
  }
@@ -235,23 +265,27 @@ function compileCommand(file, output, namespace) {
235
265
  console.log(` Files: ${result.files.length}`);
236
266
  }
237
267
  catch (err) {
238
- console.error((0, diagnostics_1.formatError)(err, source));
268
+ console.error((0, diagnostics_1.formatError)(err, source, file));
239
269
  process.exit(1);
240
270
  }
241
271
  }
242
- function checkCommand(file) {
272
+ function checkCommand(file, namespace) {
243
273
  // Read source file
244
274
  if (!fs.existsSync(file)) {
245
275
  console.error(`Error: File not found: ${file}`);
246
276
  process.exit(1);
247
277
  }
248
278
  const source = fs.readFileSync(file, 'utf-8');
249
- const error = (0, index_1.check)(source, 'redscript', file);
250
- if (error) {
251
- console.error((0, diagnostics_1.formatError)(error, source));
279
+ const ns = namespace ?? deriveNamespace(file);
280
+ const result = (0, index_1.checkWithWarnings)(source, ns, file);
281
+ for (const w of result.warnings) {
282
+ console.error(`Warning: ${w}`);
283
+ }
284
+ if (result.error) {
285
+ console.error((0, diagnostics_1.formatError)(result.error, source, file));
252
286
  process.exit(1);
253
287
  }
254
- console.log(`✓ ${file} is valid`);
288
+ console.log(`✓ No errors found`);
255
289
  }
256
290
  async function hotReload(url) {
257
291
  try {
@@ -282,49 +316,46 @@ function watchCommand(dir, output, namespace, hotReloadUrl) {
282
316
  console.log(` Output: ${output}`);
283
317
  if (hotReloadUrl)
284
318
  console.log(` Hot reload: ${hotReloadUrl}`);
319
+ console.log(` Incremental compilation enabled`);
285
320
  console.log(` Press Ctrl+C to stop\n`);
321
+ // Set up incremental compilation infrastructure
322
+ const cacheDir = path.join(dir, '.redscript-cache');
323
+ const cache = new index_2.FileCache(cacheDir);
324
+ cache.load();
325
+ const depGraph = new deps_1.DependencyGraph();
286
326
  // Debounce timer
287
327
  let debounceTimer = null;
288
- // Compile all .mcrs files in directory
289
- async function compileAll() {
328
+ // Compile all .mcrs files in directory (incrementally)
329
+ async function compileAllIncremental() {
290
330
  const files = findRsFiles(dir);
291
331
  if (files.length === 0) {
292
332
  console.log(`⚠ No .mcrs files found in ${dir}`);
293
333
  return;
294
334
  }
295
- let hasErrors = false;
296
- for (const file of files) {
297
- let source = '';
298
- try {
299
- source = fs.readFileSync(file, 'utf-8');
300
- const ns = namespace ?? deriveNamespace(file);
301
- const result = (0, index_1.compile)(source, { namespace: ns, filePath: file });
302
- for (const w of result.warnings) {
303
- console.error(`Warning: ${w}`);
304
- }
305
- // Create output directory
306
- fs.mkdirSync(output, { recursive: true });
307
- // Write all files
308
- for (const dataFile of result.files) {
309
- const filePath = path.join(output, dataFile.path);
310
- const fileDir = path.dirname(filePath);
311
- fs.mkdirSync(fileDir, { recursive: true });
312
- fs.writeFileSync(filePath, dataFile.content);
313
- }
314
- const timestamp = new Date().toLocaleTimeString();
315
- console.log(`✓ [${timestamp}] Compiled ${file} (${result.files.length} files)`);
316
- }
317
- catch (err) {
318
- hasErrors = true;
319
- const timestamp = new Date().toLocaleTimeString();
320
- console.error(`✗ [${timestamp}] ${(0, diagnostics_1.formatError)(err, source)}`);
335
+ const incResult = (0, incremental_1.compileIncremental)(files, cache, depGraph, {
336
+ namespace,
337
+ output,
338
+ });
339
+ const timestamp = new Date().toLocaleTimeString();
340
+ // Print warnings from recompiled files
341
+ for (const [file, compileResult] of incResult.results) {
342
+ for (const w of compileResult.warnings) {
343
+ console.error(`Warning: ${w}`);
321
344
  }
345
+ console.log(`✓ [${timestamp}] Compiled ${path.relative(dir, file)} (${compileResult.files.length} files)`);
346
+ }
347
+ if (incResult.cached > 0) {
348
+ console.log(` [${timestamp}] ${incResult.cached} file(s) unchanged (cached)`);
322
349
  }
323
- if (!hasErrors) {
324
- if (hotReloadUrl)
325
- await hotReload(hotReloadUrl);
326
- console.log('');
350
+ // Print errors
351
+ for (const [file, errMsg] of incResult.errors) {
352
+ console.error(`✗ [${timestamp}] ${path.relative(dir, file)}: ${errMsg}`);
327
353
  }
354
+ // Persist cache
355
+ cache.save();
356
+ if (incResult.errors.size === 0 && hotReloadUrl)
357
+ await hotReload(hotReloadUrl);
358
+ console.log('');
328
359
  }
329
360
  // Find all .mcrs files recursively
330
361
  function findRsFiles(directory) {
@@ -332,7 +363,7 @@ function watchCommand(dir, output, namespace, hotReloadUrl) {
332
363
  const entries = fs.readdirSync(directory, { withFileTypes: true });
333
364
  for (const entry of entries) {
334
365
  const fullPath = path.join(directory, entry.name);
335
- if (entry.isDirectory()) {
366
+ if (entry.isDirectory() && entry.name !== '.redscript-cache') {
336
367
  results.push(...findRsFiles(fullPath));
337
368
  }
338
369
  else if (entry.isFile() && entry.name.endsWith('.mcrs')) {
@@ -342,7 +373,7 @@ function watchCommand(dir, output, namespace, hotReloadUrl) {
342
373
  return results;
343
374
  }
344
375
  // Initial compile
345
- void compileAll();
376
+ void compileAllIncremental();
346
377
  // Watch for changes
347
378
  fs.watch(dir, { recursive: true }, (eventType, filename) => {
348
379
  if (filename && filename.endsWith('.mcrs')) {
@@ -352,7 +383,7 @@ function watchCommand(dir, output, namespace, hotReloadUrl) {
352
383
  }
353
384
  debounceTimer = setTimeout(() => {
354
385
  console.log(`📝 Change detected: ${filename}`);
355
- void compileAll();
386
+ void compileAllIncremental();
356
387
  }, 100);
357
388
  }
358
389
  });
@@ -380,7 +411,7 @@ async function main() {
380
411
  {
381
412
  const namespace = parsed.namespace ?? deriveNamespace(parsed.file);
382
413
  const output = parsed.output ?? './dist';
383
- compileCommand(parsed.file, output, namespace);
414
+ compileCommand(parsed.file, output, namespace, parsed.sourceMap, parsed.mcVersionStr, parsed.lenient);
384
415
  }
385
416
  break;
386
417
  case 'watch':
@@ -397,7 +428,7 @@ async function main() {
397
428
  printUsage();
398
429
  process.exit(1);
399
430
  }
400
- checkCommand(parsed.file);
431
+ checkCommand(parsed.file, parsed.namespace);
401
432
  break;
402
433
  case 'fmt':
403
434
  case 'format': {
@@ -3,8 +3,8 @@
3
3
  *
4
4
  * Preprocessing utilities and v2 compile re-export.
5
5
  */
6
- export { compile, CompileOptions, CompileResult } from '../src2/emit/compile';
7
- export type { DatapackFile } from '../src2/emit/index';
6
+ export { compile, CompileOptions, CompileResult } from './emit/compile';
7
+ export type { DatapackFile } from './emit/index';
8
8
  export interface SourceRange {
9
9
  startLine: number;
10
10
  endLine: number;
@@ -48,7 +48,7 @@ const diagnostics_1 = require("./diagnostics");
48
48
  // ---------------------------------------------------------------------------
49
49
  // Re-export v2 compile
50
50
  // ---------------------------------------------------------------------------
51
- var compile_1 = require("../src2/emit/compile");
51
+ var compile_1 = require("./emit/compile");
52
52
  Object.defineProperty(exports, "compile", { enumerable: true, get: function () { return compile_1.compile; } });
53
53
  /**
54
54
  * Resolve a combined-source line number back to the original file and line.
@@ -41,4 +41,4 @@ export declare class DiagnosticCollector {
41
41
  * e.g., "Expected ';' at line 5, col 12"
42
42
  */
43
43
  export declare function parseErrorMessage(kind: DiagnosticKind, rawMessage: string, sourceLines?: string[], filePath?: string): DiagnosticError;
44
- export declare function formatError(error: Error | DiagnosticError, source?: string): string;
44
+ export declare function formatError(error: Error | DiagnosticError, source?: string, filePath?: string): string;
@@ -116,25 +116,22 @@ function parseErrorMessage(kind, rawMessage, sourceLines, filePath) {
116
116
  // Fallback: line 1, col 1
117
117
  return new DiagnosticError(kind, rawMessage, { file: filePath, line: 1, col: 1 }, sourceLines);
118
118
  }
119
- function formatError(error, source) {
119
+ function formatError(error, source, filePath) {
120
120
  if (error instanceof DiagnosticError) {
121
121
  const sourceLines = source?.split('\n') ?? error.sourceLines ?? [];
122
122
  const { file, line, col } = error.location;
123
- const locationPart = file
124
- ? ` in ${file} at line ${line}, col ${col}`
125
- : ` at line ${line}, col ${col}`;
126
- const lines = [`Error${locationPart}:`];
123
+ const fileStr = file ?? filePath ?? '<input>';
124
+ const header = `${fileStr}:${line}:${col}: error: ${error.message}`;
127
125
  const pointerLines = formatSourcePointer(sourceLines, line, col);
128
- if (pointerLines.length > 0) {
129
- lines.push(...pointerLines);
126
+ if (pointerLines.length === 0) {
127
+ return header;
130
128
  }
131
- lines.push(error.message);
132
- return lines.join('\n');
129
+ return [header, ...pointerLines].join('\n');
133
130
  }
134
131
  if (!source) {
135
132
  return error.message;
136
133
  }
137
- const parsed = parseErrorMessage('ParseError', error.message, source.split('\n'));
138
- return formatError(parsed, source);
134
+ const parsed = parseErrorMessage('ParseError', error.message, source.split('\n'), filePath);
135
+ return formatError(parsed, source, filePath);
139
136
  }
140
137
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Top-level compile function for the v2 pipeline.
3
+ *
4
+ * Pipeline: source → Lexer → Parser → TypeCheck → HIR → MIR → optimize → LIR → emit
5
+ */
6
+ import { type DatapackFile } from './index';
7
+ import { McVersion } from '../types/mc-version';
8
+ export interface CompileOptions {
9
+ namespace?: string;
10
+ filePath?: string;
11
+ /** v1 compat: inline library sources (treated as `module library;` imports) */
12
+ librarySources?: string[];
13
+ /** When true, generate .sourcemap.json files alongside .mcfunction output */
14
+ generateSourceMap?: boolean;
15
+ /** Target Minecraft version (default: 1.21). Affects which MC features are used. */
16
+ mcVersion?: McVersion;
17
+ /**
18
+ * When true, type errors are reported as warnings instead of blocking compilation.
19
+ * Use for gradual migration or testing with existing codebases that have type errors.
20
+ */
21
+ lenient?: boolean;
22
+ }
23
+ export interface CompileResult {
24
+ files: DatapackFile[];
25
+ warnings: string[];
26
+ /** Always true — v1 compat shim (compile() throws on error) */
27
+ readonly success: true;
28
+ }
29
+ export declare function compile(source: string, options?: CompileOptions): CompileResult;
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ /**
3
+ * Top-level compile function for the v2 pipeline.
4
+ *
5
+ * Pipeline: source → Lexer → Parser → TypeCheck → HIR → MIR → optimize → LIR → emit
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.compile = compile;
9
+ const lexer_1 = require("../lexer");
10
+ const parser_1 = require("../parser");
11
+ const compile_1 = require("../compile");
12
+ const diagnostics_1 = require("../diagnostics");
13
+ const lower_1 = require("../hir/lower");
14
+ const monomorphize_1 = require("../hir/monomorphize");
15
+ const lower_2 = require("../mir/lower");
16
+ const pipeline_1 = require("../optimizer/pipeline");
17
+ const lower_3 = require("../lir/lower");
18
+ const pipeline_2 = require("../optimizer/lir/pipeline");
19
+ const index_1 = require("./index");
20
+ const coroutine_1 = require("../optimizer/coroutine");
21
+ const budget_1 = require("../lir/budget");
22
+ const mc_version_1 = require("../types/mc-version");
23
+ const typechecker_1 = require("../typechecker");
24
+ function compile(source, options = {}) {
25
+ const { namespace = 'redscript', filePath, generateSourceMap = false, mcVersion = mc_version_1.DEFAULT_MC_VERSION, lenient = false } = options;
26
+ const warnings = [];
27
+ // Preprocess: resolve import directives, merge imported sources
28
+ const preprocessed = (0, compile_1.preprocessSourceWithMetadata)(source, { filePath });
29
+ const processedSource = preprocessed.source;
30
+ // Stage 1: Lex + Parse → AST
31
+ const lexer = new lexer_1.Lexer(processedSource);
32
+ const tokens = lexer.tokenize();
33
+ const parser = new parser_1.Parser(tokens, processedSource, filePath);
34
+ const ast = parser.parse(namespace);
35
+ // Merge library imports (files with `module library;`) into AST
36
+ for (const li of preprocessed.libraryImports ?? []) {
37
+ const libPreprocessed = (0, compile_1.preprocessSourceWithMetadata)(li.source, { filePath: li.filePath });
38
+ const libTokens = new lexer_1.Lexer(libPreprocessed.source, li.filePath).tokenize();
39
+ const libAst = new parser_1.Parser(libTokens, libPreprocessed.source, li.filePath).parse(namespace);
40
+ for (const fn of libAst.declarations)
41
+ fn.isLibraryFn = true;
42
+ ast.declarations.push(...libAst.declarations);
43
+ ast.structs.push(...libAst.structs);
44
+ ast.implBlocks.push(...libAst.implBlocks);
45
+ ast.enums.push(...libAst.enums);
46
+ ast.consts.push(...libAst.consts);
47
+ ast.globals.push(...libAst.globals);
48
+ }
49
+ // Merge librarySources (v1 compat: inline library strings) before HIR
50
+ if (options.librarySources) {
51
+ for (const libSrc of options.librarySources) {
52
+ const libTokens = new lexer_1.Lexer(libSrc).tokenize();
53
+ const libAst = new parser_1.Parser(libTokens, libSrc).parse(namespace);
54
+ for (const fn of libAst.declarations)
55
+ fn.isLibraryFn = true;
56
+ ast.declarations.push(...libAst.declarations);
57
+ ast.structs.push(...libAst.structs);
58
+ ast.implBlocks.push(...libAst.implBlocks);
59
+ ast.enums.push(...libAst.enums);
60
+ ast.consts.push(...libAst.consts);
61
+ ast.globals.push(...libAst.globals);
62
+ }
63
+ }
64
+ // Stage 1b: Type checking
65
+ // Run TypeChecker on the merged AST. In error-mode (default), throw on first type error.
66
+ // In lenient mode, demote type errors to warnings.
67
+ {
68
+ const checker = new typechecker_1.TypeChecker(processedSource, filePath);
69
+ const typeErrors = checker.check(ast);
70
+ if (typeErrors.length > 0) {
71
+ if (lenient) {
72
+ for (const e of typeErrors) {
73
+ warnings.push(`[TypeError] line ${e.location.line}, col ${e.location.col}: ${e.message}`);
74
+ }
75
+ }
76
+ else {
77
+ throw typeErrors[0];
78
+ }
79
+ }
80
+ }
81
+ // Stage 2–7: lower, optimize, emit
82
+ // Wrap non-DiagnosticError from later stages so CLI always gets structured errors.
83
+ try {
84
+ // Stage 2: AST → HIR
85
+ const hirRaw = (0, lower_1.lowerToHIR)(ast);
86
+ // Stage 2b: Monomorphize generic functions
87
+ const hir = (0, monomorphize_1.monomorphize)(hirRaw);
88
+ // Extract @tick, @load, @coroutine, and @schedule functions from HIR (before decorator info is lost)
89
+ const tickFunctions = [];
90
+ const loadFunctions = [];
91
+ const coroutineInfos = [];
92
+ const scheduleFunctions = [];
93
+ for (const fn of hir.functions) {
94
+ for (const dec of fn.decorators) {
95
+ if (dec.name === 'tick')
96
+ tickFunctions.push(fn.name);
97
+ if (dec.name === 'load')
98
+ loadFunctions.push(fn.name);
99
+ if (dec.name === 'coroutine') {
100
+ coroutineInfos.push({
101
+ fnName: fn.name,
102
+ batch: dec.args?.batch ?? 10,
103
+ onDone: dec.args?.onDone,
104
+ });
105
+ }
106
+ if (dec.name === 'schedule') {
107
+ scheduleFunctions.push({ name: fn.name, ticks: dec.args?.ticks ?? 1 });
108
+ }
109
+ }
110
+ }
111
+ // Stage 3: HIR → MIR
112
+ const mir = (0, lower_2.lowerToMIR)(hir, filePath);
113
+ // Stage 4: MIR optimization
114
+ const mirOpt = (0, pipeline_1.optimizeModule)(mir);
115
+ // Stage 4b: Coroutine transform (opt-in, only for @coroutine functions)
116
+ const coroResult = (0, coroutine_1.coroutineTransform)(mirOpt, coroutineInfos);
117
+ const mirFinal = coroResult.module;
118
+ tickFunctions.push(...coroResult.generatedTickFunctions);
119
+ // Stage 5: MIR → LIR
120
+ const lir = (0, lower_3.lowerToLIR)(mirFinal);
121
+ // Stage 6: LIR optimization
122
+ const lirOpt = (0, pipeline_2.lirOptimizeModule)(lir);
123
+ // Static tick budget analysis
124
+ const coroutineNames = new Set(coroutineInfos.map(c => c.fnName));
125
+ const budgetDiags = (0, budget_1.analyzeBudget)(lirOpt, coroutineNames);
126
+ for (const diag of budgetDiags) {
127
+ if (diag.level === 'error') {
128
+ throw new diagnostics_1.DiagnosticError('LoweringError', diag.message, { line: 1, col: 1, file: filePath });
129
+ }
130
+ warnings.push(diag.message);
131
+ }
132
+ // Stage 7: LIR → .mcfunction
133
+ const files = (0, index_1.emit)(lirOpt, { namespace, tickFunctions, loadFunctions, scheduleFunctions, generateSourceMap, mcVersion });
134
+ return { files, warnings, success: true };
135
+ }
136
+ catch (err) {
137
+ if (err instanceof diagnostics_1.DiagnosticError)
138
+ throw err;
139
+ const sourceLines = processedSource.split('\n');
140
+ throw (0, diagnostics_1.parseErrorMessage)('LoweringError', err.message, sourceLines, filePath);
141
+ }
142
+ }
143
+ //# sourceMappingURL=compile.js.map
@@ -5,6 +5,7 @@
5
5
  * Each LIRFunction becomes a .mcfunction file under data/<ns>/function/.
6
6
  */
7
7
  import type { LIRModule } from '../lir/types';
8
+ import { McVersion } from '../types/mc-version';
8
9
  export interface DatapackFile {
9
10
  path: string;
10
11
  content: string;
@@ -13,5 +14,13 @@ export interface EmitOptions {
13
14
  namespace: string;
14
15
  tickFunctions?: string[];
15
16
  loadFunctions?: string[];
17
+ scheduleFunctions?: Array<{
18
+ name: string;
19
+ ticks: number;
20
+ }>;
21
+ /** When true, generate a .sourcemap.json sidecar file for each .mcfunction */
22
+ generateSourceMap?: boolean;
23
+ /** Target Minecraft version; controls which MC features are used in codegen */
24
+ mcVersion?: McVersion;
16
25
  }
17
26
  export declare function emit(module: LIRModule, options: EmitOptions): DatapackFile[];