redscript-mc 2.0.0 → 2.1.1

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 (643) hide show
  1. package/.claudeignore +21 -0
  2. package/README.md +48 -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 +321 -0
  22. package/dist/src/__tests__/mc-syntax.test.js +1 -6
  23. package/dist/src/__tests__/mc-version.test.d.ts +10 -0
  24. package/dist/src/__tests__/mc-version.test.js +154 -0
  25. package/dist/{src2 → src}/__tests__/mir/arithmetic.test.js +2 -2
  26. package/dist/{src2 → src}/__tests__/mir/control-flow.test.js +2 -2
  27. package/dist/src/__tests__/modules.test.d.ts +7 -0
  28. package/dist/src/__tests__/modules.test.js +333 -0
  29. package/dist/src/__tests__/optimizer/coroutine.test.d.ts +12 -0
  30. package/dist/src/__tests__/optimizer/coroutine.test.js +251 -0
  31. package/dist/src/__tests__/optimizer/interprocedural.test.js +145 -0
  32. package/dist/src/__tests__/optimizer/lir/const_imm.test.js +138 -0
  33. package/dist/src/__tests__/optimizer/lir/dead_slot.test.js +141 -0
  34. package/dist/src/__tests__/optimizer/lir/peephole.test.js +126 -0
  35. package/dist/src/__tests__/optimizer/lir/pipeline.test.js +84 -0
  36. package/dist/src/__tests__/optimizer/nbt-batch.test.js +110 -0
  37. package/dist/src/__tests__/optimizer/selector-cache.test.js +103 -0
  38. package/dist/src/__tests__/optimizer/unroll.test.js +206 -0
  39. package/dist/src/__tests__/option.test.d.ts +14 -0
  40. package/dist/src/__tests__/option.test.js +275 -0
  41. package/dist/src/__tests__/schedule.test.d.ts +7 -0
  42. package/dist/src/__tests__/schedule.test.js +98 -0
  43. package/dist/src/__tests__/sourcemap.test.d.ts +7 -0
  44. package/dist/src/__tests__/sourcemap.test.js +227 -0
  45. package/dist/src/__tests__/stdlib-include.test.js +86 -0
  46. package/dist/src/__tests__/tuple.test.d.ts +11 -0
  47. package/dist/src/__tests__/tuple.test.js +202 -0
  48. package/dist/src/__tests__/typechecker-strict.test.d.ts +10 -0
  49. package/dist/src/__tests__/typechecker-strict.test.js +197 -0
  50. package/dist/src/ast/types.d.ts +56 -2
  51. package/dist/src/cache/deps.d.ts +41 -0
  52. package/dist/src/cache/deps.js +158 -0
  53. package/dist/src/cache/incremental.d.ts +35 -0
  54. package/dist/src/cache/incremental.js +165 -0
  55. package/dist/src/cache/index.d.ts +37 -0
  56. package/dist/src/cache/index.js +152 -0
  57. package/dist/src/cli.js +83 -45
  58. package/dist/src/compile.d.ts +3 -2
  59. package/dist/src/compile.js +34 -11
  60. package/dist/src/diagnostics/index.d.ts +1 -1
  61. package/dist/src/diagnostics/index.js +8 -11
  62. package/dist/src/emit/compile.d.ts +31 -0
  63. package/dist/src/emit/compile.js +143 -0
  64. package/dist/{src2 → src}/emit/index.d.ts +9 -0
  65. package/dist/{src2 → src}/emit/index.js +59 -8
  66. package/dist/src/emit/modules.d.ts +29 -0
  67. package/dist/src/emit/modules.js +492 -0
  68. package/dist/src/emit/sourcemap.d.ts +53 -0
  69. package/dist/src/emit/sourcemap.js +73 -0
  70. package/dist/{src2 → src}/hir/lower.d.ts +1 -1
  71. package/dist/{src2 → src}/hir/lower.js +22 -1
  72. package/dist/src/hir/monomorphize.d.ts +22 -0
  73. package/dist/src/hir/monomorphize.js +379 -0
  74. package/dist/{src2 → src}/hir/types.d.ts +35 -2
  75. package/dist/src/index.d.ts +19 -2
  76. package/dist/src/index.js +36 -14
  77. package/dist/src/lexer/index.d.ts +1 -1
  78. package/dist/src/lexer/index.js +1 -0
  79. package/dist/src/lir/budget.d.ts +37 -0
  80. package/dist/src/lir/budget.js +280 -0
  81. package/dist/{src2 → src}/lir/lower.js +19 -0
  82. package/dist/{src2 → src}/lir/types.d.ts +7 -4
  83. package/dist/src/lsp/main.d.ts +8 -0
  84. package/dist/src/lsp/main.js +11 -0
  85. package/dist/src/lsp/server.d.ts +11 -0
  86. package/dist/src/lsp/server.js +403 -0
  87. package/dist/{src2 → src}/mir/lower.d.ts +1 -1
  88. package/dist/{src2 → src}/mir/lower.js +244 -10
  89. package/dist/{src2 → src}/mir/types.d.ts +10 -2
  90. package/dist/src/optimizer/coroutine.d.ts +34 -0
  91. package/dist/src/optimizer/coroutine.js +789 -0
  92. package/dist/src/optimizer/dce.d.ts +8 -34
  93. package/dist/src/optimizer/dce.js +146 -629
  94. package/dist/src/optimizer/interprocedural.d.ts +14 -0
  95. package/dist/src/optimizer/interprocedural.js +186 -0
  96. package/dist/src/optimizer/lir/const_imm.d.ts +12 -0
  97. package/dist/src/optimizer/lir/const_imm.js +139 -0
  98. package/dist/src/optimizer/lir/dead_slot.d.ts +14 -0
  99. package/dist/src/optimizer/lir/dead_slot.js +130 -0
  100. package/dist/src/optimizer/lir/peephole.d.ts +21 -0
  101. package/dist/src/optimizer/lir/peephole.js +52 -0
  102. package/dist/src/optimizer/lir/pipeline.d.ts +10 -0
  103. package/dist/src/optimizer/lir/pipeline.js +34 -0
  104. package/dist/src/optimizer/nbt-batch.d.ts +11 -0
  105. package/dist/src/optimizer/nbt-batch.js +51 -0
  106. package/dist/{src2 → src}/optimizer/pipeline.d.ts +4 -0
  107. package/dist/{src2 → src}/optimizer/pipeline.js +17 -1
  108. package/dist/src/optimizer/selector-cache.d.ts +22 -0
  109. package/dist/src/optimizer/selector-cache.js +100 -0
  110. package/dist/src/optimizer/unroll.d.ts +32 -0
  111. package/dist/src/optimizer/unroll.js +348 -0
  112. package/dist/src/parser/index.d.ts +8 -0
  113. package/dist/src/parser/index.js +204 -14
  114. package/dist/src/repl.d.ts +1 -1
  115. package/dist/src/typechecker/index.d.ts +4 -0
  116. package/dist/src/typechecker/index.js +198 -13
  117. package/dist/src/types/mc-version.d.ts +24 -0
  118. package/dist/src/types/mc-version.js +49 -0
  119. package/docs/ROADMAP.md +395 -0
  120. package/docs/compiler-pipeline-redesign.md +27 -10
  121. package/editors/vscode/out/extension.js +25176 -8000
  122. package/editors/vscode/package-lock.json +90 -6
  123. package/editors/vscode/package.json +3 -2
  124. package/editors/vscode/src/extension.ts +97 -67
  125. package/editors/vscode/syntaxes/redscript.tmLanguage.json +34 -0
  126. package/examples/coroutine-demo.mcrs +50 -0
  127. package/examples/enum-demo.mcrs +95 -0
  128. package/examples/scheduler-demo.mcrs +59 -0
  129. package/examples/showcase.mcrs +3 -3
  130. package/jest.config.js +1 -1
  131. package/package.json +9 -3
  132. package/src/__tests__/budget.test.ts +297 -0
  133. package/src/__tests__/diagnostics.test.ts +2 -3
  134. package/src/__tests__/e2e/coroutine.test.ts +142 -0
  135. package/{src2 → src}/__tests__/e2e/macros.test.ts +1 -1
  136. package/{src2 → src}/__tests__/e2e/migrate.test.ts +1 -1
  137. package/src/__tests__/e2e/stdlib-e2e.test.ts +348 -0
  138. package/src/__tests__/enum.test.ts +425 -0
  139. package/src/__tests__/generics.test.ts +390 -0
  140. package/{src2 → src}/__tests__/hir/desugar.test.ts +2 -2
  141. package/src/__tests__/incremental.test.ts +337 -0
  142. package/src/__tests__/lsp.test.ts +359 -0
  143. package/src/__tests__/mc-syntax.test.ts +1 -7
  144. package/src/__tests__/mc-version.test.ts +178 -0
  145. package/{src2 → src}/__tests__/mir/arithmetic.test.ts +2 -2
  146. package/{src2 → src}/__tests__/mir/control-flow.test.ts +2 -2
  147. package/src/__tests__/modules.test.ts +365 -0
  148. package/src/__tests__/optimizer/coroutine.test.ts +312 -0
  149. package/src/__tests__/optimizer/interprocedural.test.ts +174 -0
  150. package/src/__tests__/optimizer/lir/const_imm.test.ts +151 -0
  151. package/src/__tests__/optimizer/lir/dead_slot.test.ts +156 -0
  152. package/src/__tests__/optimizer/lir/peephole.test.ts +136 -0
  153. package/src/__tests__/optimizer/lir/pipeline.test.ts +113 -0
  154. package/src/__tests__/optimizer/nbt-batch.test.ts +119 -0
  155. package/src/__tests__/optimizer/selector-cache.test.ts +112 -0
  156. package/src/__tests__/optimizer/unroll.test.ts +231 -0
  157. package/src/__tests__/option.test.ts +299 -0
  158. package/src/__tests__/schedule.test.ts +105 -0
  159. package/src/__tests__/sourcemap.test.ts +254 -0
  160. package/src/__tests__/stdlib-include.test.ts +61 -0
  161. package/src/__tests__/tuple.test.ts +220 -0
  162. package/src/__tests__/typechecker-strict.test.ts +216 -0
  163. package/src/ast/types.ts +33 -2
  164. package/src/cache/deps.ts +132 -0
  165. package/src/cache/incremental.ts +173 -0
  166. package/src/cache/index.ts +135 -0
  167. package/src/cli.ts +96 -45
  168. package/src/compile.ts +46 -17
  169. package/src/diagnostics/index.ts +8 -11
  170. package/src/emit/compile.ts +179 -0
  171. package/{src2 → src}/emit/index.ts +72 -8
  172. package/src/emit/modules.ts +581 -0
  173. package/src/emit/sourcemap.ts +101 -0
  174. package/{src2 → src}/hir/lower.ts +29 -2
  175. package/src/hir/monomorphize.ts +416 -0
  176. package/{src2 → src}/hir/types.ts +15 -3
  177. package/src/index.ts +29 -10
  178. package/src/lexer/index.ts +2 -1
  179. package/src/lir/budget.ts +321 -0
  180. package/{src2 → src}/lir/lower.ts +32 -1
  181. package/{src2 → src}/lir/types.ts +7 -3
  182. package/src/lsp/main.ts +9 -0
  183. package/src/lsp/server.ts +469 -0
  184. package/{src2 → src}/mir/lower.ts +251 -8
  185. package/{src2 → src}/mir/types.ts +12 -1
  186. package/src/optimizer/coroutine.ts +996 -0
  187. package/{src2 → src}/optimizer/dce.ts +2 -1
  188. package/src/optimizer/interprocedural.ts +177 -0
  189. package/src/optimizer/lir/const_imm.ts +143 -0
  190. package/src/optimizer/lir/dead_slot.ts +123 -0
  191. package/src/optimizer/lir/peephole.ts +57 -0
  192. package/src/optimizer/lir/pipeline.ts +37 -0
  193. package/src/optimizer/nbt-batch.ts +50 -0
  194. package/{src2 → src}/optimizer/pipeline.ts +16 -1
  195. package/src/optimizer/selector-cache.ts +103 -0
  196. package/src/optimizer/unroll.ts +386 -0
  197. package/src/parser/index.ts +212 -15
  198. package/src/repl.ts +1 -1
  199. package/src/stdlib/math.mcrs +4 -4
  200. package/src/templates/quest.mcrs +4 -4
  201. package/src/typechecker/index.ts +215 -15
  202. package/src/types/mc-version.ts +46 -0
  203. package/tsconfig.json +1 -1
  204. package/.claude/commands/build-test.md +0 -10
  205. package/.claude/commands/deploy-demo.md +0 -12
  206. package/.claude/commands/stage-status.md +0 -13
  207. package/.claude/settings.json +0 -12
  208. package/CLAUDE.md +0 -231
  209. package/dist/__tests__/cli.test.js +0 -278
  210. package/dist/__tests__/codegen.test.js +0 -152
  211. package/dist/__tests__/compile-all.test.d.ts +0 -10
  212. package/dist/__tests__/compile-all.test.js +0 -108
  213. package/dist/__tests__/dce.test.js +0 -138
  214. package/dist/__tests__/diagnostics.test.d.ts +0 -4
  215. package/dist/__tests__/diagnostics.test.js +0 -149
  216. package/dist/__tests__/e2e.test.d.ts +0 -6
  217. package/dist/__tests__/e2e.test.js +0 -1847
  218. package/dist/__tests__/entity-types.test.js +0 -203
  219. package/dist/__tests__/formatter.test.js +0 -40
  220. package/dist/__tests__/lexer.test.js +0 -343
  221. package/dist/__tests__/lowering.test.js +0 -1015
  222. package/dist/__tests__/macro.test.d.ts +0 -8
  223. package/dist/__tests__/macro.test.js +0 -305
  224. package/dist/__tests__/mc-integration.test.d.ts +0 -12
  225. package/dist/__tests__/mc-integration.test.js +0 -819
  226. package/dist/__tests__/mc-syntax.test.js +0 -124
  227. package/dist/__tests__/nbt.test.js +0 -82
  228. package/dist/__tests__/optimizer-advanced.test.js +0 -124
  229. package/dist/__tests__/optimizer.test.js +0 -149
  230. package/dist/__tests__/parser.test.d.ts +0 -1
  231. package/dist/__tests__/parser.test.js +0 -807
  232. package/dist/__tests__/repl.test.d.ts +0 -1
  233. package/dist/__tests__/repl.test.js +0 -27
  234. package/dist/__tests__/runtime.test.d.ts +0 -1
  235. package/dist/__tests__/runtime.test.js +0 -289
  236. package/dist/__tests__/stdlib-advanced.test.d.ts +0 -4
  237. package/dist/__tests__/stdlib-advanced.test.js +0 -378
  238. package/dist/__tests__/stdlib-bigint.test.d.ts +0 -7
  239. package/dist/__tests__/stdlib-bigint.test.js +0 -428
  240. package/dist/__tests__/stdlib-math.test.d.ts +0 -7
  241. package/dist/__tests__/stdlib-math.test.js +0 -352
  242. package/dist/__tests__/stdlib-vec.test.d.ts +0 -4
  243. package/dist/__tests__/stdlib-vec.test.js +0 -264
  244. package/dist/__tests__/structure-optimizer.test.d.ts +0 -1
  245. package/dist/__tests__/structure-optimizer.test.js +0 -33
  246. package/dist/__tests__/typechecker.test.d.ts +0 -1
  247. package/dist/__tests__/typechecker.test.js +0 -552
  248. package/dist/__tests__/var-allocator.test.d.ts +0 -1
  249. package/dist/__tests__/var-allocator.test.js +0 -69
  250. package/dist/ast/types.d.ts +0 -514
  251. package/dist/ast/types.js +0 -9
  252. package/dist/builtins/metadata.d.ts +0 -36
  253. package/dist/builtins/metadata.js +0 -1014
  254. package/dist/cli.d.ts +0 -11
  255. package/dist/codegen/cmdblock/index.d.ts +0 -26
  256. package/dist/codegen/cmdblock/index.js +0 -45
  257. package/dist/codegen/mcfunction/index.d.ts +0 -40
  258. package/dist/codegen/mcfunction/index.js +0 -606
  259. package/dist/codegen/structure/index.d.ts +0 -24
  260. package/dist/codegen/structure/index.js +0 -279
  261. package/dist/codegen/var-allocator.d.ts +0 -45
  262. package/dist/codegen/var-allocator.js +0 -104
  263. package/dist/compile.d.ts +0 -68
  264. package/dist/data/arena/function/__load.mcfunction +0 -6
  265. package/dist/data/arena/function/__tick.mcfunction +0 -2
  266. package/dist/data/arena/function/announce_leaders/else_1.mcfunction +0 -3
  267. package/dist/data/arena/function/announce_leaders/foreach_0/merge_2.mcfunction +0 -1
  268. package/dist/data/arena/function/announce_leaders/foreach_0/then_0.mcfunction +0 -3
  269. package/dist/data/arena/function/announce_leaders/foreach_0.mcfunction +0 -7
  270. package/dist/data/arena/function/announce_leaders/foreach_1/merge_2.mcfunction +0 -1
  271. package/dist/data/arena/function/announce_leaders/foreach_1/then_0.mcfunction +0 -4
  272. package/dist/data/arena/function/announce_leaders/foreach_1.mcfunction +0 -6
  273. package/dist/data/arena/function/announce_leaders/merge_2.mcfunction +0 -1
  274. package/dist/data/arena/function/announce_leaders/then_0.mcfunction +0 -4
  275. package/dist/data/arena/function/announce_leaders.mcfunction +0 -6
  276. package/dist/data/arena/function/arena_tick/merge_2.mcfunction +0 -1
  277. package/dist/data/arena/function/arena_tick/then_0.mcfunction +0 -4
  278. package/dist/data/arena/function/arena_tick.mcfunction +0 -11
  279. package/dist/data/counter/function/__load.mcfunction +0 -5
  280. package/dist/data/counter/function/__tick.mcfunction +0 -2
  281. package/dist/data/counter/function/counter_tick/merge_2.mcfunction +0 -1
  282. package/dist/data/counter/function/counter_tick/then_0.mcfunction +0 -3
  283. package/dist/data/counter/function/counter_tick.mcfunction +0 -11
  284. package/dist/data/gcd2/function/__load.mcfunction +0 -3
  285. package/dist/data/gcd2/function/abs/merge_2.mcfunction +0 -3
  286. package/dist/data/gcd2/function/abs/then_0.mcfunction +0 -5
  287. package/dist/data/gcd2/function/abs.mcfunction +0 -7
  288. package/dist/data/gcd2/function/gcd/loop_body_1.mcfunction +0 -7
  289. package/dist/data/gcd2/function/gcd/loop_check_0.mcfunction +0 -5
  290. package/dist/data/gcd2/function/gcd/loop_exit_2.mcfunction +0 -3
  291. package/dist/data/gcd2/function/gcd.mcfunction +0 -14
  292. package/dist/data/gcd3/function/__load.mcfunction +0 -3
  293. package/dist/data/gcd3/function/abs/merge_2.mcfunction +0 -3
  294. package/dist/data/gcd3/function/abs/then_0.mcfunction +0 -5
  295. package/dist/data/gcd3/function/abs.mcfunction +0 -7
  296. package/dist/data/gcd3/function/gcd/loop_body_1.mcfunction +0 -7
  297. package/dist/data/gcd3/function/gcd/loop_check_0.mcfunction +0 -5
  298. package/dist/data/gcd3/function/gcd/loop_exit_2.mcfunction +0 -3
  299. package/dist/data/gcd3/function/gcd.mcfunction +0 -14
  300. package/dist/data/gcd3/function/test.mcfunction +0 -7
  301. package/dist/data/gcd3nm/function/__load.mcfunction +0 -3
  302. package/dist/data/gcd3nm/function/abs/merge_2.mcfunction +0 -3
  303. package/dist/data/gcd3nm/function/abs/then_0.mcfunction +0 -5
  304. package/dist/data/gcd3nm/function/abs.mcfunction +0 -7
  305. package/dist/data/gcd3nm/function/gcd/loop_body_1.mcfunction +0 -7
  306. package/dist/data/gcd3nm/function/gcd/loop_check_0.mcfunction +0 -5
  307. package/dist/data/gcd3nm/function/gcd/loop_exit_2.mcfunction +0 -3
  308. package/dist/data/gcd3nm/function/gcd.mcfunction +0 -14
  309. package/dist/data/gcd3nm/function/test.mcfunction +0 -7
  310. package/dist/data/gcd_test/function/__load.mcfunction +0 -3
  311. package/dist/data/gcd_test/function/abs/merge_2.mcfunction +0 -3
  312. package/dist/data/gcd_test/function/abs/then_0.mcfunction +0 -5
  313. package/dist/data/gcd_test/function/abs.mcfunction +0 -7
  314. package/dist/data/gcd_test/function/gcd/loop_body_1.mcfunction +0 -7
  315. package/dist/data/gcd_test/function/gcd/loop_check_0.mcfunction +0 -5
  316. package/dist/data/gcd_test/function/gcd/loop_exit_2.mcfunction +0 -3
  317. package/dist/data/gcd_test/function/gcd.mcfunction +0 -14
  318. package/dist/data/isqrttest/function/__load.mcfunction +0 -6
  319. package/dist/data/isqrttest/function/isqrt/loop_body_4.mcfunction +0 -12
  320. package/dist/data/isqrttest/function/isqrt/loop_check_3.mcfunction +0 -5
  321. package/dist/data/isqrttest/function/isqrt/loop_exit_5.mcfunction +0 -3
  322. package/dist/data/isqrttest/function/isqrt/merge_2.mcfunction +0 -4
  323. package/dist/data/isqrttest/function/isqrt/merge_8.mcfunction +0 -6
  324. package/dist/data/isqrttest/function/isqrt/then_0.mcfunction +0 -3
  325. package/dist/data/isqrttest/function/isqrt/then_6.mcfunction +0 -3
  326. package/dist/data/isqrttest/function/isqrt.mcfunction +0 -7
  327. package/dist/data/isqrttest/function/test.mcfunction +0 -6
  328. package/dist/data/mathtest/function/__load.mcfunction +0 -3
  329. package/dist/data/mathtest/function/abs/merge_2.mcfunction +0 -3
  330. package/dist/data/mathtest/function/abs/then_0.mcfunction +0 -5
  331. package/dist/data/mathtest/function/abs.mcfunction +0 -6
  332. package/dist/data/mathtest/function/test.mcfunction +0 -5
  333. package/dist/data/minecraft/tags/function/load.json +0 -5
  334. package/dist/data/minecraft/tags/function/tick.json +0 -5
  335. package/dist/data/mypack/function/__load.mcfunction +0 -13
  336. package/dist/data/mypack/function/_atan_init.mcfunction +0 -2
  337. package/dist/data/mypack/function/abs/merge_2.mcfunction +0 -3
  338. package/dist/data/mypack/function/abs/then_0.mcfunction +0 -5
  339. package/dist/data/mypack/function/abs.mcfunction +0 -6
  340. package/dist/data/mypack/function/atan2_fixed/__sgi_1.mcfunction +0 -2
  341. package/dist/data/mypack/function/atan2_fixed/else_34.mcfunction +0 -3
  342. package/dist/data/mypack/function/atan2_fixed/loop_body_31.mcfunction +0 -19
  343. package/dist/data/mypack/function/atan2_fixed/loop_check_30.mcfunction +0 -5
  344. package/dist/data/mypack/function/atan2_fixed/loop_exit_32.mcfunction +0 -6
  345. package/dist/data/mypack/function/atan2_fixed/merge_11.mcfunction +0 -6
  346. package/dist/data/mypack/function/atan2_fixed/merge_14.mcfunction +0 -3
  347. package/dist/data/mypack/function/atan2_fixed/merge_17.mcfunction +0 -6
  348. package/dist/data/mypack/function/atan2_fixed/merge_2.mcfunction +0 -5
  349. package/dist/data/mypack/function/atan2_fixed/merge_20.mcfunction +0 -5
  350. package/dist/data/mypack/function/atan2_fixed/merge_23.mcfunction +0 -5
  351. package/dist/data/mypack/function/atan2_fixed/merge_26.mcfunction +0 -6
  352. package/dist/data/mypack/function/atan2_fixed/merge_29.mcfunction +0 -4
  353. package/dist/data/mypack/function/atan2_fixed/merge_38.mcfunction +0 -5
  354. package/dist/data/mypack/function/atan2_fixed/merge_41.mcfunction +0 -5
  355. package/dist/data/mypack/function/atan2_fixed/merge_44.mcfunction +0 -5
  356. package/dist/data/mypack/function/atan2_fixed/merge_47.mcfunction +0 -5
  357. package/dist/data/mypack/function/atan2_fixed/merge_5.mcfunction +0 -5
  358. package/dist/data/mypack/function/atan2_fixed/merge_8.mcfunction +0 -3
  359. package/dist/data/mypack/function/atan2_fixed/then_0.mcfunction +0 -5
  360. package/dist/data/mypack/function/atan2_fixed/then_12.mcfunction +0 -3
  361. package/dist/data/mypack/function/atan2_fixed/then_15.mcfunction +0 -5
  362. package/dist/data/mypack/function/atan2_fixed/then_18.mcfunction +0 -5
  363. package/dist/data/mypack/function/atan2_fixed/then_21.mcfunction +0 -3
  364. package/dist/data/mypack/function/atan2_fixed/then_24.mcfunction +0 -3
  365. package/dist/data/mypack/function/atan2_fixed/then_27.mcfunction +0 -6
  366. package/dist/data/mypack/function/atan2_fixed/then_3.mcfunction +0 -3
  367. package/dist/data/mypack/function/atan2_fixed/then_33.mcfunction +0 -5
  368. package/dist/data/mypack/function/atan2_fixed/then_36.mcfunction +0 -5
  369. package/dist/data/mypack/function/atan2_fixed/then_39.mcfunction +0 -5
  370. package/dist/data/mypack/function/atan2_fixed/then_42.mcfunction +0 -3
  371. package/dist/data/mypack/function/atan2_fixed/then_45.mcfunction +0 -5
  372. package/dist/data/mypack/function/atan2_fixed/then_6.mcfunction +0 -3
  373. package/dist/data/mypack/function/atan2_fixed/then_9.mcfunction +0 -5
  374. package/dist/data/mypack/function/atan2_fixed.mcfunction +0 -7
  375. package/dist/data/mypack/function/my_game.mcfunction +0 -10
  376. package/dist/data/quiz/function/__load.mcfunction +0 -16
  377. package/dist/data/quiz/function/__tick.mcfunction +0 -6
  378. package/dist/data/quiz/function/__trigger_quiz_a_dispatch.mcfunction +0 -4
  379. package/dist/data/quiz/function/__trigger_quiz_b_dispatch.mcfunction +0 -4
  380. package/dist/data/quiz/function/__trigger_quiz_c_dispatch.mcfunction +0 -4
  381. package/dist/data/quiz/function/__trigger_quiz_start_dispatch.mcfunction +0 -4
  382. package/dist/data/quiz/function/answer_a.mcfunction +0 -4
  383. package/dist/data/quiz/function/answer_b.mcfunction +0 -4
  384. package/dist/data/quiz/function/answer_c.mcfunction +0 -4
  385. package/dist/data/quiz/function/ask_question/else_1.mcfunction +0 -5
  386. package/dist/data/quiz/function/ask_question/else_4.mcfunction +0 -5
  387. package/dist/data/quiz/function/ask_question/else_7.mcfunction +0 -4
  388. package/dist/data/quiz/function/ask_question/merge_2.mcfunction +0 -1
  389. package/dist/data/quiz/function/ask_question/merge_5.mcfunction +0 -2
  390. package/dist/data/quiz/function/ask_question/merge_8.mcfunction +0 -2
  391. package/dist/data/quiz/function/ask_question/then_0.mcfunction +0 -4
  392. package/dist/data/quiz/function/ask_question/then_3.mcfunction +0 -4
  393. package/dist/data/quiz/function/ask_question/then_6.mcfunction +0 -4
  394. package/dist/data/quiz/function/ask_question.mcfunction +0 -7
  395. package/dist/data/quiz/function/finish_quiz.mcfunction +0 -6
  396. package/dist/data/quiz/function/handle_answer/else_1.mcfunction +0 -5
  397. package/dist/data/quiz/function/handle_answer/else_10.mcfunction +0 -3
  398. package/dist/data/quiz/function/handle_answer/else_16.mcfunction +0 -3
  399. package/dist/data/quiz/function/handle_answer/else_4.mcfunction +0 -3
  400. package/dist/data/quiz/function/handle_answer/else_7.mcfunction +0 -5
  401. package/dist/data/quiz/function/handle_answer/merge_11.mcfunction +0 -2
  402. package/dist/data/quiz/function/handle_answer/merge_14.mcfunction +0 -2
  403. package/dist/data/quiz/function/handle_answer/merge_17.mcfunction +0 -2
  404. package/dist/data/quiz/function/handle_answer/merge_2.mcfunction +0 -8
  405. package/dist/data/quiz/function/handle_answer/merge_5.mcfunction +0 -2
  406. package/dist/data/quiz/function/handle_answer/merge_8.mcfunction +0 -2
  407. package/dist/data/quiz/function/handle_answer/then_0.mcfunction +0 -5
  408. package/dist/data/quiz/function/handle_answer/then_12.mcfunction +0 -5
  409. package/dist/data/quiz/function/handle_answer/then_15.mcfunction +0 -6
  410. package/dist/data/quiz/function/handle_answer/then_3.mcfunction +0 -6
  411. package/dist/data/quiz/function/handle_answer/then_6.mcfunction +0 -5
  412. package/dist/data/quiz/function/handle_answer/then_9.mcfunction +0 -6
  413. package/dist/data/quiz/function/handle_answer.mcfunction +0 -11
  414. package/dist/data/quiz/function/start_quiz.mcfunction +0 -5
  415. package/dist/data/reqtest/function/__load.mcfunction +0 -4
  416. package/dist/data/reqtest/function/_table_init.mcfunction +0 -2
  417. package/dist/data/reqtest/function/no_trig.mcfunction +0 -3
  418. package/dist/data/reqtest/function/use_table.mcfunction +0 -4
  419. package/dist/data/reqtest2/function/__load.mcfunction +0 -3
  420. package/dist/data/reqtest2/function/no_trig.mcfunction +0 -3
  421. package/dist/data/runtime/function/__load.mcfunction +0 -5
  422. package/dist/data/runtime/function/__tick.mcfunction +0 -2
  423. package/dist/data/runtime/function/counter_tick/then_0.mcfunction +0 -3
  424. package/dist/data/runtime/function/counter_tick.mcfunction +0 -13
  425. package/dist/data/shop/function/__load.mcfunction +0 -7
  426. package/dist/data/shop/function/__tick.mcfunction +0 -3
  427. package/dist/data/shop/function/__trigger_shop_buy_dispatch.mcfunction +0 -4
  428. package/dist/data/shop/function/complete_purchase/else_1.mcfunction +0 -5
  429. package/dist/data/shop/function/complete_purchase/else_4.mcfunction +0 -5
  430. package/dist/data/shop/function/complete_purchase/else_7.mcfunction +0 -3
  431. package/dist/data/shop/function/complete_purchase/merge_2.mcfunction +0 -2
  432. package/dist/data/shop/function/complete_purchase/merge_5.mcfunction +0 -2
  433. package/dist/data/shop/function/complete_purchase/merge_8.mcfunction +0 -2
  434. package/dist/data/shop/function/complete_purchase/then_0.mcfunction +0 -4
  435. package/dist/data/shop/function/complete_purchase/then_3.mcfunction +0 -4
  436. package/dist/data/shop/function/complete_purchase/then_6.mcfunction +0 -4
  437. package/dist/data/shop/function/complete_purchase.mcfunction +0 -7
  438. package/dist/data/shop/function/handle_shop_trigger.mcfunction +0 -3
  439. package/dist/data/swap_test/function/__load.mcfunction +0 -3
  440. package/dist/data/swap_test/function/gcd_old/loop_body_1.mcfunction +0 -7
  441. package/dist/data/swap_test/function/gcd_old/loop_check_0.mcfunction +0 -5
  442. package/dist/data/swap_test/function/gcd_old/loop_exit_2.mcfunction +0 -3
  443. package/dist/data/swap_test/function/gcd_old.mcfunction +0 -8
  444. package/dist/data/turret/function/__load.mcfunction +0 -5
  445. package/dist/data/turret/function/__tick.mcfunction +0 -4
  446. package/dist/data/turret/function/__trigger_deploy_turret_dispatch.mcfunction +0 -4
  447. package/dist/data/turret/function/deploy_turret.mcfunction +0 -8
  448. package/dist/data/turret/function/turret_tick/at_1.mcfunction +0 -2
  449. package/dist/data/turret/function/turret_tick/foreach_0.mcfunction +0 -2
  450. package/dist/data/turret/function/turret_tick/foreach_2.mcfunction +0 -2
  451. package/dist/data/turret/function/turret_tick/tick_body.mcfunction +0 -3
  452. package/dist/data/turret/function/turret_tick/tick_skip.mcfunction +0 -1
  453. package/dist/data/turret/function/turret_tick.mcfunction +0 -5
  454. package/dist/diagnostics/index.d.ts +0 -44
  455. package/dist/diagnostics/index.js +0 -140
  456. package/dist/events/types.d.ts +0 -35
  457. package/dist/events/types.js +0 -59
  458. package/dist/formatter/index.d.ts +0 -1
  459. package/dist/formatter/index.js +0 -26
  460. package/dist/gcd2.map.json +0 -15
  461. package/dist/gcd3.map.json +0 -17
  462. package/dist/gcd_test.map.json +0 -15
  463. package/dist/index.d.ts +0 -62
  464. package/dist/ir/builder.d.ts +0 -33
  465. package/dist/ir/builder.js +0 -99
  466. package/dist/ir/types.d.ts +0 -132
  467. package/dist/ir/types.js +0 -15
  468. package/dist/isqrttest.map.json +0 -15
  469. package/dist/lexer/index.d.ts +0 -37
  470. package/dist/lexer/index.js +0 -569
  471. package/dist/lowering/index.d.ts +0 -188
  472. package/dist/lowering/index.js +0 -3405
  473. package/dist/mathtest.map.json +0 -6
  474. package/dist/mc-test/client.d.ts +0 -128
  475. package/dist/mc-test/client.js +0 -174
  476. package/dist/mc-test/runner.d.ts +0 -28
  477. package/dist/mc-test/runner.js +0 -150
  478. package/dist/mc-test/setup.d.ts +0 -11
  479. package/dist/mc-test/setup.js +0 -98
  480. package/dist/mc-validator/index.d.ts +0 -17
  481. package/dist/mc-validator/index.js +0 -322
  482. package/dist/mypack.map.json +0 -27
  483. package/dist/nbt/index.d.ts +0 -86
  484. package/dist/nbt/index.js +0 -250
  485. package/dist/optimizer/commands.d.ts +0 -38
  486. package/dist/optimizer/commands.js +0 -451
  487. package/dist/optimizer/dce.d.ts +0 -34
  488. package/dist/optimizer/dce.js +0 -639
  489. package/dist/optimizer/passes.d.ts +0 -34
  490. package/dist/optimizer/passes.js +0 -243
  491. package/dist/optimizer/structure.d.ts +0 -9
  492. package/dist/optimizer/structure.js +0 -356
  493. package/dist/pack.mcmeta +0 -6
  494. package/dist/parser/index.d.ts +0 -93
  495. package/dist/parser/index.js +0 -1687
  496. package/dist/repl.d.ts +0 -16
  497. package/dist/repl.js +0 -165
  498. package/dist/reqtest.map.json +0 -4
  499. package/dist/reqtest2.map.json +0 -4
  500. package/dist/runtime/index.d.ts +0 -107
  501. package/dist/runtime/index.js +0 -1409
  502. package/dist/runtime.map.json +0 -7
  503. package/dist/src/__tests__/codegen.test.d.ts +0 -1
  504. package/dist/src/__tests__/codegen.test.js +0 -152
  505. package/dist/src/__tests__/e2e.test.d.ts +0 -6
  506. package/dist/src/__tests__/e2e.test.js +0 -1789
  507. package/dist/src/__tests__/entity-types.test.d.ts +0 -1
  508. package/dist/src/__tests__/entity-types.test.js +0 -203
  509. package/dist/src/__tests__/lowering.test.d.ts +0 -1
  510. package/dist/src/__tests__/lowering.test.js +0 -1015
  511. package/dist/src/__tests__/macro.test.d.ts +0 -8
  512. package/dist/src/__tests__/macro.test.js +0 -306
  513. package/dist/src/__tests__/nbt.test.d.ts +0 -1
  514. package/dist/src/__tests__/nbt.test.js +0 -82
  515. package/dist/src/__tests__/optimizer-advanced.test.d.ts +0 -1
  516. package/dist/src/__tests__/optimizer-advanced.test.js +0 -124
  517. package/dist/src/__tests__/optimizer.test.d.ts +0 -1
  518. package/dist/src/__tests__/optimizer.test.js +0 -149
  519. package/dist/src/__tests__/runtime.test.d.ts +0 -1
  520. package/dist/src/__tests__/runtime.test.js +0 -289
  521. package/dist/src/__tests__/stdlib-advanced.test.d.ts +0 -4
  522. package/dist/src/__tests__/stdlib-advanced.test.js +0 -374
  523. package/dist/src/__tests__/stdlib-bigint.test.d.ts +0 -7
  524. package/dist/src/__tests__/stdlib-bigint.test.js +0 -426
  525. package/dist/src/__tests__/stdlib-math.test.d.ts +0 -7
  526. package/dist/src/__tests__/stdlib-math.test.js +0 -351
  527. package/dist/src/__tests__/stdlib-vec.test.d.ts +0 -4
  528. package/dist/src/__tests__/stdlib-vec.test.js +0 -263
  529. package/dist/src/__tests__/structure-optimizer.test.d.ts +0 -1
  530. package/dist/src/__tests__/structure-optimizer.test.js +0 -33
  531. package/dist/src/__tests__/var-allocator.test.d.ts +0 -1
  532. package/dist/src/__tests__/var-allocator.test.js +0 -69
  533. package/dist/src/codegen/cmdblock/index.d.ts +0 -26
  534. package/dist/src/codegen/cmdblock/index.js +0 -45
  535. package/dist/src/codegen/mcfunction/index.d.ts +0 -40
  536. package/dist/src/codegen/mcfunction/index.js +0 -606
  537. package/dist/src/codegen/structure/index.d.ts +0 -24
  538. package/dist/src/codegen/structure/index.js +0 -279
  539. package/dist/src/codegen/var-allocator.d.ts +0 -45
  540. package/dist/src/codegen/var-allocator.js +0 -104
  541. package/dist/src/ir/builder.d.ts +0 -33
  542. package/dist/src/ir/builder.js +0 -99
  543. package/dist/src/ir/types.d.ts +0 -132
  544. package/dist/src/ir/types.js +0 -15
  545. package/dist/src/lowering/index.d.ts +0 -188
  546. package/dist/src/lowering/index.js +0 -3405
  547. package/dist/src/optimizer/commands.d.ts +0 -38
  548. package/dist/src/optimizer/commands.js +0 -451
  549. package/dist/src/optimizer/passes.d.ts +0 -34
  550. package/dist/src/optimizer/passes.js +0 -243
  551. package/dist/src/optimizer/structure.d.ts +0 -9
  552. package/dist/src/optimizer/structure.js +0 -356
  553. package/dist/src2/__tests__/optimizer/dce.test.d.ts +0 -1
  554. package/dist/src2/emit/compile.d.ts +0 -19
  555. package/dist/src2/emit/compile.js +0 -80
  556. package/dist/src2/optimizer/dce.d.ts +0 -8
  557. package/dist/src2/optimizer/dce.js +0 -155
  558. package/dist/swap_test.map.json +0 -14
  559. package/dist/tsconfig.tsbuildinfo +0 -1
  560. package/dist/typechecker/index.d.ts +0 -61
  561. package/dist/typechecker/index.js +0 -1034
  562. package/dist/types/entity-hierarchy.d.ts +0 -29
  563. package/dist/types/entity-hierarchy.js +0 -107
  564. package/examples/spiral.mcrs +0 -43
  565. package/src/examples/arena.mcrs +0 -44
  566. package/src/examples/counter.mcrs +0 -12
  567. package/src/examples/new_features_demo.mcrs +0 -193
  568. package/src/examples/rpg.mcrs +0 -13
  569. package/src/examples/stdlib_demo.mcrs +0 -181
  570. package/src2/emit/compile.ts +0 -99
  571. /package/dist/{__tests__/cli.test.d.ts → src/__tests__/budget.test.d.ts} +0 -0
  572. /package/dist/{src2 → src}/__tests__/e2e/basic.test.d.ts +0 -0
  573. /package/dist/{src2 → src}/__tests__/e2e/basic.test.js +0 -0
  574. /package/dist/{src2 → src}/__tests__/e2e/macros.test.d.ts +0 -0
  575. /package/dist/{src2 → src}/__tests__/e2e/migrate.test.d.ts +0 -0
  576. /package/dist/{src2 → src}/__tests__/hir/desugar.test.d.ts +0 -0
  577. /package/dist/{src2 → src}/__tests__/lir/lower.test.d.ts +0 -0
  578. /package/dist/{src2 → src}/__tests__/lir/lower.test.js +0 -0
  579. /package/dist/{src2 → src}/__tests__/lir/types.test.d.ts +0 -0
  580. /package/dist/{src2 → src}/__tests__/lir/types.test.js +0 -0
  581. /package/dist/{src2 → src}/__tests__/lir/verify.test.d.ts +0 -0
  582. /package/dist/{src2 → src}/__tests__/lir/verify.test.js +0 -0
  583. /package/dist/{src2 → src}/__tests__/mir/arithmetic.test.d.ts +0 -0
  584. /package/dist/{src2 → src}/__tests__/mir/control-flow.test.d.ts +0 -0
  585. /package/dist/{src2 → src}/__tests__/mir/verify.test.d.ts +0 -0
  586. /package/dist/{src2 → src}/__tests__/mir/verify.test.js +0 -0
  587. /package/dist/{src2 → src}/__tests__/optimizer/block_merge.test.d.ts +0 -0
  588. /package/dist/{src2 → src}/__tests__/optimizer/block_merge.test.js +0 -0
  589. /package/dist/{src2 → src}/__tests__/optimizer/branch_simplify.test.d.ts +0 -0
  590. /package/dist/{src2 → src}/__tests__/optimizer/branch_simplify.test.js +0 -0
  591. /package/dist/{src2 → src}/__tests__/optimizer/constant_fold.test.d.ts +0 -0
  592. /package/dist/{src2 → src}/__tests__/optimizer/constant_fold.test.js +0 -0
  593. /package/dist/{src2 → src}/__tests__/optimizer/copy_prop.test.d.ts +0 -0
  594. /package/dist/{src2 → src}/__tests__/optimizer/copy_prop.test.js +0 -0
  595. /package/dist/{__tests__ → src/__tests__/optimizer}/dce.test.d.ts +0 -0
  596. /package/dist/{src2 → src}/__tests__/optimizer/dce.test.js +0 -0
  597. /package/dist/{__tests__/codegen.test.d.ts → src/__tests__/optimizer/interprocedural.test.d.ts} +0 -0
  598. /package/dist/{__tests__/entity-types.test.d.ts → src/__tests__/optimizer/lir/const_imm.test.d.ts} +0 -0
  599. /package/dist/{__tests__/formatter.test.d.ts → src/__tests__/optimizer/lir/dead_slot.test.d.ts} +0 -0
  600. /package/dist/{__tests__/lexer.test.d.ts → src/__tests__/optimizer/lir/peephole.test.d.ts} +0 -0
  601. /package/dist/{src2/__tests__/optimizer → src/__tests__/optimizer/lir}/pipeline.test.d.ts +0 -0
  602. /package/dist/{__tests__/lowering.test.d.ts → src/__tests__/optimizer/nbt-batch.test.d.ts} +0 -0
  603. /package/dist/{__tests__/mc-syntax.test.d.ts → src/__tests__/optimizer/pipeline.test.d.ts} +0 -0
  604. /package/dist/{src2 → src}/__tests__/optimizer/pipeline.test.js +0 -0
  605. /package/dist/{__tests__/nbt.test.d.ts → src/__tests__/optimizer/selector-cache.test.d.ts} +0 -0
  606. /package/dist/{__tests__/optimizer-advanced.test.d.ts → src/__tests__/optimizer/unroll.test.d.ts} +0 -0
  607. /package/dist/{__tests__/optimizer.test.d.ts → src/__tests__/stdlib-include.test.d.ts} +0 -0
  608. /package/dist/{src2 → src}/hir/types.js +0 -0
  609. /package/dist/{src2 → src}/lir/lower.d.ts +0 -0
  610. /package/dist/{src2 → src}/lir/types.js +0 -0
  611. /package/dist/{src2 → src}/lir/verify.d.ts +0 -0
  612. /package/dist/{src2 → src}/lir/verify.js +0 -0
  613. /package/dist/{src2 → src}/mir/macro.d.ts +0 -0
  614. /package/dist/{src2 → src}/mir/macro.js +0 -0
  615. /package/dist/{src2 → src}/mir/types.js +0 -0
  616. /package/dist/{src2 → src}/mir/verify.d.ts +0 -0
  617. /package/dist/{src2 → src}/mir/verify.js +0 -0
  618. /package/dist/{src2 → src}/optimizer/block_merge.d.ts +0 -0
  619. /package/dist/{src2 → src}/optimizer/block_merge.js +0 -0
  620. /package/dist/{src2 → src}/optimizer/branch_simplify.d.ts +0 -0
  621. /package/dist/{src2 → src}/optimizer/branch_simplify.js +0 -0
  622. /package/dist/{src2 → src}/optimizer/constant_fold.d.ts +0 -0
  623. /package/dist/{src2 → src}/optimizer/constant_fold.js +0 -0
  624. /package/dist/{src2 → src}/optimizer/copy_prop.d.ts +0 -0
  625. /package/dist/{src2 → src}/optimizer/copy_prop.js +0 -0
  626. /package/{src2 → src}/__tests__/e2e/basic.test.ts +0 -0
  627. /package/{src2 → src}/__tests__/lir/lower.test.ts +0 -0
  628. /package/{src2 → src}/__tests__/lir/types.test.ts +0 -0
  629. /package/{src2 → src}/__tests__/lir/verify.test.ts +0 -0
  630. /package/{src2 → src}/__tests__/mir/verify.test.ts +0 -0
  631. /package/{src2 → src}/__tests__/optimizer/block_merge.test.ts +0 -0
  632. /package/{src2 → src}/__tests__/optimizer/branch_simplify.test.ts +0 -0
  633. /package/{src2 → src}/__tests__/optimizer/constant_fold.test.ts +0 -0
  634. /package/{src2 → src}/__tests__/optimizer/copy_prop.test.ts +0 -0
  635. /package/{src2 → src}/__tests__/optimizer/dce.test.ts +0 -0
  636. /package/{src2 → src}/__tests__/optimizer/pipeline.test.ts +0 -0
  637. /package/{src2 → src}/lir/verify.ts +0 -0
  638. /package/{src2 → src}/mir/macro.ts +0 -0
  639. /package/{src2 → src}/mir/verify.ts +0 -0
  640. /package/{src2 → src}/optimizer/block_merge.ts +0 -0
  641. /package/{src2 → src}/optimizer/branch_simplify.ts +0 -0
  642. /package/{src2 → src}/optimizer/constant_fold.ts +0 -0
  643. /package/{src2 → src}/optimizer/copy_prop.ts +0 -0
@@ -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.
@@ -75,6 +75,31 @@ function isLibrarySource(source) {
75
75
  }
76
76
  return false;
77
77
  }
78
+ /** Resolve an import specifier to an absolute file path, trying multiple locations. */
79
+ function resolveImportPath(spec, fromFile, includeDirs) {
80
+ const candidates = spec.endsWith('.mcrs') ? [spec] : [spec, spec + '.mcrs'];
81
+ for (const candidate of candidates) {
82
+ // 1. Relative to the importing file
83
+ const rel = path.resolve(path.dirname(fromFile), candidate);
84
+ if (fs.existsSync(rel))
85
+ return rel;
86
+ // 2. stdlib directory (package root / src / stdlib)
87
+ // Strip leading 'stdlib/' prefix so `import "stdlib/math"` resolves to
88
+ // <stdlibDir>/math.mcrs rather than <stdlibDir>/stdlib/math.mcrs.
89
+ const stdlibDir = path.resolve(__dirname, '..', 'src', 'stdlib');
90
+ const stdlibCandidate = candidate.replace(/^stdlib\//, '');
91
+ const stdlib = path.resolve(stdlibDir, stdlibCandidate);
92
+ if (fs.existsSync(stdlib))
93
+ return stdlib;
94
+ // 3. Extra include dirs
95
+ for (const dir of includeDirs) {
96
+ const extra = path.resolve(dir, candidate);
97
+ if (fs.existsSync(extra))
98
+ return extra;
99
+ }
100
+ }
101
+ return null;
102
+ }
78
103
  function countLines(source) {
79
104
  return source === '' ? 0 : source.split('\n').length;
80
105
  }
@@ -88,6 +113,7 @@ function offsetRanges(ranges, lineOffset) {
88
113
  function preprocessSourceWithMetadata(source, options = {}) {
89
114
  const { filePath } = options;
90
115
  const seen = options.seen ?? new Set();
116
+ const includeDirs = options.includeDirs ?? [];
91
117
  if (filePath) {
92
118
  seen.add(path.resolve(filePath));
93
119
  }
@@ -105,27 +131,24 @@ function preprocessSourceWithMetadata(source, options = {}) {
105
131
  if (!filePath) {
106
132
  throw new diagnostics_1.DiagnosticError('ParseError', 'Import statements require a file path', { line: i + 1, col: 1 }, lines);
107
133
  }
108
- const importPath = path.resolve(path.dirname(filePath), match[1]);
134
+ const importPath = resolveImportPath(match[1], filePath, includeDirs);
135
+ if (!importPath) {
136
+ throw new diagnostics_1.DiagnosticError('ParseError', `Cannot import '${match[1]}'`, { file: filePath, line: i + 1, col: 1 }, lines);
137
+ }
109
138
  if (!seen.has(importPath)) {
110
139
  seen.add(importPath);
111
- let importedSource;
112
- try {
113
- importedSource = fs.readFileSync(importPath, 'utf-8');
114
- }
115
- catch {
116
- throw new diagnostics_1.DiagnosticError('ParseError', `Cannot import '${match[1]}'`, { file: filePath, line: i + 1, col: 1 }, lines);
117
- }
140
+ const importedSource = fs.readFileSync(importPath, 'utf-8');
118
141
  if (isLibrarySource(importedSource)) {
119
142
  // Library file: parse separately so its functions are DCE-eligible.
120
143
  // Also collect any transitive library imports inside it.
121
- const nested = preprocessSourceWithMetadata(importedSource, { filePath: importPath, seen });
144
+ const nested = preprocessSourceWithMetadata(importedSource, { filePath: importPath, seen, includeDirs });
122
145
  libraryImports.push({ source: importedSource, filePath: importPath });
123
146
  // Propagate transitive library imports (e.g. math.mcrs imports vec.mcrs)
124
147
  if (nested.libraryImports)
125
148
  libraryImports.push(...nested.libraryImports);
126
149
  }
127
150
  else {
128
- imports.push(preprocessSourceWithMetadata(importedSource, { filePath: importPath, seen }));
151
+ imports.push(preprocessSourceWithMetadata(importedSource, { filePath: importPath, seen, includeDirs }));
129
152
  }
130
153
  }
131
154
  continue;
@@ -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,31 @@
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
+ /** Extra directories to search when resolving imports (in addition to relative and stdlib). */
23
+ includeDirs?: string[];
24
+ }
25
+ export interface CompileResult {
26
+ files: DatapackFile[];
27
+ warnings: string[];
28
+ /** Always true — v1 compat shim (compile() throws on error) */
29
+ readonly success: true;
30
+ }
31
+ 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, includeDirs } = options;
26
+ const warnings = [];
27
+ // Preprocess: resolve import directives, merge imported sources
28
+ const preprocessed = (0, compile_1.preprocessSourceWithMetadata)(source, { filePath, includeDirs });
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[];
@@ -7,6 +7,8 @@
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.emit = emit;
10
+ const sourcemap_1 = require("./sourcemap");
11
+ const mc_version_1 = require("../types/mc-version");
10
12
  // ---------------------------------------------------------------------------
11
13
  // Public API
12
14
  // ---------------------------------------------------------------------------
@@ -14,7 +16,10 @@ function emit(module, options) {
14
16
  const { namespace } = options;
15
17
  const tickFns = options.tickFunctions ?? [];
16
18
  const loadFns = options.loadFunctions ?? [];
19
+ const scheduleFns = options.scheduleFunctions ?? [];
17
20
  const objective = module.objective;
21
+ const genSourceMap = options.generateSourceMap ?? false;
22
+ const mcVersion = options.mcVersion ?? mc_version_1.DEFAULT_MC_VERSION;
18
23
  const files = [];
19
24
  // pack.mcmeta
20
25
  files.push({
@@ -31,9 +36,27 @@ function emit(module, options) {
31
36
  });
32
37
  // Each LIR function → .mcfunction file
33
38
  for (const fn of module.functions) {
34
- const lines = emitFunction(fn, namespace, objective);
35
39
  const fnPath = fnNameToPath(fn.name, namespace);
36
- files.push({ path: fnPath, content: lines.join('\n') + '\n' });
40
+ if (genSourceMap) {
41
+ const builder = new sourcemap_1.SourceMapBuilder(fnPath);
42
+ const lines = emitFunctionWithSourceMap(fn, namespace, objective, builder, mcVersion);
43
+ files.push({ path: fnPath, content: lines.join('\n') + '\n' });
44
+ const map = builder.build();
45
+ if (map) {
46
+ files.push({ path: (0, sourcemap_1.sourceMapPath)(fnPath), content: (0, sourcemap_1.serializeSourceMap)(map) });
47
+ }
48
+ }
49
+ else {
50
+ const lines = emitFunction(fn, namespace, objective, mcVersion);
51
+ files.push({ path: fnPath, content: lines.join('\n') + '\n' });
52
+ }
53
+ }
54
+ // @schedule wrapper functions: _schedule_xxx → schedule function ns:xxx Nt
55
+ for (const { name, ticks } of scheduleFns) {
56
+ files.push({
57
+ path: `data/${namespace}/function/_schedule_${name}.mcfunction`,
58
+ content: `schedule function ${namespace}:${name} ${ticks}t\n`,
59
+ });
37
60
  }
38
61
  // Tag files for tick/load
39
62
  if (loadFns.length > 0 || true) {
@@ -56,10 +79,18 @@ function emit(module, options) {
56
79
  // ---------------------------------------------------------------------------
57
80
  // Function emission
58
81
  // ---------------------------------------------------------------------------
59
- function emitFunction(fn, namespace, objective) {
82
+ function emitFunction(fn, namespace, objective, mcVersion) {
83
+ const lines = [];
84
+ for (const instr of fn.instructions) {
85
+ lines.push(emitInstr(instr, namespace, objective, mcVersion));
86
+ }
87
+ return lines;
88
+ }
89
+ function emitFunctionWithSourceMap(fn, namespace, objective, builder, mcVersion) {
60
90
  const lines = [];
61
91
  for (const instr of fn.instructions) {
62
- lines.push(emitInstr(instr, namespace, objective));
92
+ lines.push(emitInstr(instr, namespace, objective, mcVersion));
93
+ builder.addLine(instr.sourceLoc);
63
94
  }
64
95
  return lines;
65
96
  }
@@ -71,7 +102,7 @@ function fnNameToPath(name, namespace) {
71
102
  // ---------------------------------------------------------------------------
72
103
  // Instruction emission
73
104
  // ---------------------------------------------------------------------------
74
- function emitInstr(instr, ns, obj) {
105
+ function emitInstr(instr, ns, obj, mcVersion) {
75
106
  switch (instr.kind) {
76
107
  case 'score_set':
77
108
  return `scoreboard players set ${slot(instr.dst)} ${instr.value}`;
@@ -94,7 +125,7 @@ function emitInstr(instr, ns, obj) {
94
125
  case 'score_swap':
95
126
  return `scoreboard players operation ${slot(instr.a)} >< ${slot(instr.b)}`;
96
127
  case 'store_cmd_to_score':
97
- return `execute store result score ${slot(instr.dst)} run ${emitInstr(instr.cmd, ns, obj)}`;
128
+ return `execute store result score ${slot(instr.dst)} run ${emitInstr(instr.cmd, ns, obj, mcVersion)}`;
98
129
  case 'store_score_to_nbt':
99
130
  return `execute store result storage ${instr.ns} ${instr.path} ${instr.type} ${instr.scale} run scoreboard players get ${slot(instr.src)}`;
100
131
  case 'store_nbt_to_score':
@@ -106,7 +137,11 @@ function emitInstr(instr, ns, obj) {
106
137
  case 'call':
107
138
  return `function ${instr.fn}`;
108
139
  case 'call_macro':
109
- return `function ${instr.fn} with storage ${instr.storage}`;
140
+ if (mcVersion >= mc_version_1.McVersion.v1_20_2) {
141
+ return `function ${instr.fn} with storage ${instr.storage}`;
142
+ }
143
+ // Pre-1.20.2: macros not supported; call function directly (args in storage are ignored)
144
+ return `function ${instr.fn}`;
110
145
  case 'call_if_matches':
111
146
  return `execute if score ${slot(instr.slot)} matches ${instr.range} run function ${instr.fn}`;
112
147
  case 'call_unless_matches':
@@ -122,7 +157,13 @@ function emitInstr(instr, ns, obj) {
122
157
  case 'return_value':
123
158
  return `scoreboard players operation $ret ${instr.slot.obj} = ${slot(instr.slot)}`;
124
159
  case 'macro_line':
125
- return `$${instr.template}`;
160
+ if (mcVersion >= mc_version_1.McVersion.v1_20_2) {
161
+ return `$${instr.template}`;
162
+ }
163
+ // Pre-1.20.2: function macros not available. Emit as a plain command with
164
+ // $(param) placeholders replaced by storage reads via data get (best-effort
165
+ // compat for string/id params; numeric coords will not be dynamic).
166
+ return macroLineCompat(instr.template);
126
167
  case 'raw':
127
168
  return instr.cmd;
128
169
  }
@@ -143,6 +184,16 @@ function cmpToMC(op) {
143
184
  case 'ge': return '>=';
144
185
  }
145
186
  }
187
+ /**
188
+ * Pre-1.20.2 compat: emit a macro template as a plain command.
189
+ * $(param) placeholders are replaced with `storage rs:macro_args <param>` data-get
190
+ * expressions for string/id values, or left as literal "0" for coordinates.
191
+ * This is best-effort — dynamic numeric positions cannot be truly emulated.
192
+ */
193
+ function macroLineCompat(template) {
194
+ // Replace $(param) with data-get-style substitution marker
195
+ return template.replace(/\$\((\w+)\)/g, (_m, p) => `{storage:rs:macro_args,path:${p}}`);
196
+ }
146
197
  function emitSubcmd(sub) {
147
198
  switch (sub.kind) {
148
199
  case 'as':
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Phase 5b — Multi-Module Compilation
3
+ *
4
+ * Compiles multiple .mcrs files that use `module <name>;` / `import <mod>::<sym>;`
5
+ * into a single datapack with namespace-isolated scoreboards and correct cross-module
6
+ * function paths.
7
+ *
8
+ * Design:
9
+ * - Each module gets its own scoreboard objective: `__${namespace}_${moduleName}`
10
+ * - Cross-module function calls are emitted as `${namespace}:${moduleName}/${fnName}`
11
+ * - DCE: exported-but-never-imported functions are stripped from the output
12
+ * - Circular imports are detected and rejected
13
+ */
14
+ import { type DatapackFile } from './index';
15
+ export interface ModuleInput {
16
+ /** Module name (must match the `module <name>;` declaration in source, or be inferred) */
17
+ name: string;
18
+ source: string;
19
+ filePath?: string;
20
+ }
21
+ export interface CompileModulesOptions {
22
+ /** Datapack namespace (e.g. "mypack") */
23
+ namespace?: string;
24
+ }
25
+ export interface CompileModulesResult {
26
+ files: DatapackFile[];
27
+ warnings: string[];
28
+ }
29
+ export declare function compileModules(modules: ModuleInput[], options?: CompileModulesOptions): CompileModulesResult;