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
@@ -1,243 +0,0 @@
1
- "use strict";
2
- /**
3
- * Optimization passes over IR.
4
- *
5
- * Each pass: IRFunction → IRFunction (pure transformation)
6
- *
7
- * Pipeline order:
8
- * 1. constantFolding — evaluate constant expressions at compile time
9
- * 2. copyPropagation — eliminate redundant copies
10
- * 3. deadCodeElimination — remove unused assignments
11
- * 4. commandMerging — MC-specific: merge chained execute conditions
12
- */
13
- Object.defineProperty(exports, "__esModule", { value: true });
14
- exports.defaultPipeline = void 0;
15
- exports.constantFolding = constantFolding;
16
- exports.constantFoldingWithStats = constantFoldingWithStats;
17
- exports.copyPropagation = copyPropagation;
18
- exports.deadCodeElimination = deadCodeElimination;
19
- exports.deadCodeEliminationWithStats = deadCodeEliminationWithStats;
20
- exports.optimize = optimize;
21
- exports.optimizeWithStats = optimizeWithStats;
22
- const commands_1 = require("./commands");
23
- // ---------------------------------------------------------------------------
24
- // Helpers
25
- // ---------------------------------------------------------------------------
26
- function isConst(op) {
27
- return op.kind === 'const';
28
- }
29
- function evalBinop(lhs, bop, rhs) {
30
- switch (bop) {
31
- case '+': return lhs + rhs;
32
- case '-': return lhs - rhs;
33
- case '*': return lhs * rhs;
34
- case '/': return rhs === 0 ? null : Math.trunc(lhs / rhs); // MC uses truncated int division
35
- case '%': return rhs === 0 ? null : lhs % rhs;
36
- default: return null;
37
- }
38
- }
39
- function evalCmp(lhs, cop, rhs) {
40
- switch (cop) {
41
- case '==': return lhs === rhs ? 1 : 0;
42
- case '!=': return lhs !== rhs ? 1 : 0;
43
- case '<': return lhs < rhs ? 1 : 0;
44
- case '<=': return lhs <= rhs ? 1 : 0;
45
- case '>': return lhs > rhs ? 1 : 0;
46
- case '>=': return lhs >= rhs ? 1 : 0;
47
- default: return 0;
48
- }
49
- }
50
- // ---------------------------------------------------------------------------
51
- // Pass 1: Constant Folding
52
- // Evaluates expressions with all-constant operands at compile time.
53
- // ---------------------------------------------------------------------------
54
- function constantFolding(fn) {
55
- return constantFoldingWithStats(fn).fn;
56
- }
57
- function constantFoldingWithStats(fn) {
58
- let folded = 0;
59
- const newBlocks = fn.blocks.map(block => {
60
- const newInstrs = [];
61
- for (const instr of block.instrs) {
62
- if (instr.op === 'binop' && isConst(instr.lhs) && isConst(instr.rhs)) {
63
- const result = evalBinop(instr.lhs.value, instr.bop, instr.rhs.value);
64
- if (result !== null) {
65
- folded++;
66
- newInstrs.push({ op: 'assign', dst: instr.dst, src: { kind: 'const', value: result } });
67
- continue;
68
- }
69
- }
70
- if (instr.op === 'cmp' && isConst(instr.lhs) && isConst(instr.rhs)) {
71
- const result = evalCmp(instr.lhs.value, instr.cop, instr.rhs.value);
72
- folded++;
73
- newInstrs.push({ op: 'assign', dst: instr.dst, src: { kind: 'const', value: result } });
74
- continue;
75
- }
76
- newInstrs.push(instr);
77
- }
78
- return { ...block, instrs: newInstrs };
79
- });
80
- return { fn: { ...fn, blocks: newBlocks }, stats: { constantFolds: folded } };
81
- }
82
- // ---------------------------------------------------------------------------
83
- // Pass 2: Copy Propagation
84
- // Replaces uses of variables that are just copies with their source.
85
- // e.g. t0 = x; y = t0 + 1 → y = x + 1
86
- // ---------------------------------------------------------------------------
87
- function copyPropagation(fn) {
88
- // Build copy map within each block (single-block analysis for simplicity)
89
- const newBlocks = fn.blocks.map(block => {
90
- const copies = new Map(); // var → its source if it's a copy
91
- function resolve(op) {
92
- if (op.kind !== 'var')
93
- return op;
94
- return copies.get(op.name) ?? op;
95
- }
96
- /**
97
- * Invalidate all copies that became stale because `written` was modified.
98
- * When $y is overwritten, any mapping copies[$tmp] = $y is now stale:
99
- * reading $tmp would return the OLD $y value via the copy, but $y now holds
100
- * a different value. Remove both the direct entry (copies[$y]) and every
101
- * reverse entry that points at $y.
102
- */
103
- function invalidate(written) {
104
- copies.delete(written);
105
- for (const [k, v] of copies) {
106
- if (v.kind === 'var' && v.name === written)
107
- copies.delete(k);
108
- }
109
- }
110
- const newInstrs = [];
111
- for (const instr of block.instrs) {
112
- switch (instr.op) {
113
- case 'assign': {
114
- const src = resolve(instr.src);
115
- invalidate(instr.dst);
116
- // Only propagate scalars (var or const), not storage
117
- if (src.kind === 'var' || src.kind === 'const') {
118
- copies.set(instr.dst, src);
119
- }
120
- newInstrs.push({ ...instr, src });
121
- break;
122
- }
123
- case 'binop':
124
- invalidate(instr.dst);
125
- newInstrs.push({ ...instr, lhs: resolve(instr.lhs), rhs: resolve(instr.rhs) });
126
- break;
127
- case 'cmp':
128
- invalidate(instr.dst);
129
- newInstrs.push({ ...instr, lhs: resolve(instr.lhs), rhs: resolve(instr.rhs) });
130
- break;
131
- case 'call':
132
- if (instr.dst)
133
- invalidate(instr.dst);
134
- newInstrs.push({ ...instr, args: instr.args.map(resolve) });
135
- break;
136
- default:
137
- newInstrs.push(instr);
138
- }
139
- }
140
- return { ...block, instrs: newInstrs };
141
- });
142
- return { ...fn, blocks: newBlocks };
143
- }
144
- // ---------------------------------------------------------------------------
145
- // Pass 3: Dead Code Elimination
146
- // Removes assignments to variables that are never read afterward.
147
- // ---------------------------------------------------------------------------
148
- function deadCodeElimination(fn) {
149
- return deadCodeEliminationWithStats(fn).fn;
150
- }
151
- function deadCodeEliminationWithStats(fn) {
152
- // Collect all reads across all blocks
153
- const readVars = new Set();
154
- function markRead(op) {
155
- if (op.kind === 'var')
156
- readVars.add(op.name);
157
- }
158
- function markRawReads(cmd) {
159
- for (const match of cmd.matchAll(/\$[A-Za-z0-9_]+/g)) {
160
- readVars.add(match[0]);
161
- }
162
- }
163
- for (const block of fn.blocks) {
164
- for (const instr of block.instrs) {
165
- if (instr.op === 'binop') {
166
- markRead(instr.lhs);
167
- markRead(instr.rhs);
168
- }
169
- if (instr.op === 'cmp') {
170
- markRead(instr.lhs);
171
- markRead(instr.rhs);
172
- }
173
- if (instr.op === 'call') {
174
- instr.args.forEach(markRead);
175
- }
176
- if (instr.op === 'assign') {
177
- markRead(instr.src);
178
- }
179
- if (instr.op === 'raw') {
180
- markRawReads(instr.cmd);
181
- }
182
- }
183
- // Terminator reads
184
- const t = block.term;
185
- if (t.op === 'jump_if' || t.op === 'jump_unless')
186
- readVars.add(t.cond);
187
- if (t.op === 'return' && t.value)
188
- markRead(t.value);
189
- if (t.op === 'tick_yield') { /* no reads */ }
190
- }
191
- // Also keep params and globals
192
- fn.params.forEach(p => readVars.add(p));
193
- let removed = 0;
194
- const newBlocks = fn.blocks.map(block => ({
195
- ...block,
196
- instrs: block.instrs.filter(instr => {
197
- // Only assignments/binops/cmps with an unused dst are candidates for removal
198
- if (instr.op === 'assign' || instr.op === 'binop' || instr.op === 'cmp') {
199
- // Always keep assignments to global variables (they may be read by other functions)
200
- // Temps are $t0, $t1, ...; params are $p0, $p1, ...; locals are $_0, $_1, ...
201
- // Everything else is a potential global
202
- const isTemp = /^\$t\d+$/.test(instr.dst) || /^\$p\d+$/.test(instr.dst) || /^\$_\d+$/.test(instr.dst);
203
- const keep = !isTemp || readVars.has(instr.dst);
204
- if (!keep)
205
- removed++;
206
- return keep;
207
- }
208
- // calls may have side effects — keep them always
209
- return true;
210
- }),
211
- }));
212
- return { fn: { ...fn, blocks: newBlocks }, stats: { deadCodeRemoved: removed } };
213
- }
214
- exports.defaultPipeline = [
215
- { name: 'constant-folding', run: constantFolding },
216
- { name: 'copy-propagation', run: copyPropagation },
217
- { name: 'dead-code-elimination', run: deadCodeElimination },
218
- // commandMerging is applied during codegen (MC-specific)
219
- ];
220
- function optimize(fn, passes = exports.defaultPipeline) {
221
- return optimizeWithStats(fn, passes).fn;
222
- }
223
- function optimizeWithStats(fn, passes = exports.defaultPipeline) {
224
- let current = fn;
225
- const stats = (0, commands_1.createEmptyOptimizationStats)();
226
- for (const pass of passes) {
227
- if (pass.name === 'constant-folding') {
228
- const result = constantFoldingWithStats(current);
229
- current = result.fn;
230
- (0, commands_1.mergeOptimizationStats)(stats, result.stats);
231
- continue;
232
- }
233
- if (pass.name === 'dead-code-elimination') {
234
- const result = deadCodeEliminationWithStats(current);
235
- current = result.fn;
236
- (0, commands_1.mergeOptimizationStats)(stats, result.stats);
237
- continue;
238
- }
239
- current = pass.run(current);
240
- }
241
- return { fn: current, stats };
242
- }
243
- //# sourceMappingURL=passes.js.map
@@ -1,9 +0,0 @@
1
- import type { IRCommand, IRFunction } from '../ir/types';
2
- import { type OptimizationStats } from './commands';
3
- export declare function setStructureObjective(obj: string): void;
4
- export declare function optimizeFunctionForStructure(fn: IRFunction, functions: Map<string, IRFunction>, namespace: string): IRCommand[];
5
- export declare function optimizeForStructure(functions: IRFunction[], namespace?: string): IRFunction[];
6
- export declare function optimizeForStructureWithStats(functions: IRFunction[], namespace?: string): {
7
- functions: IRFunction[];
8
- stats: OptimizationStats;
9
- };
@@ -1,356 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.setStructureObjective = setStructureObjective;
4
- exports.optimizeFunctionForStructure = optimizeFunctionForStructure;
5
- exports.optimizeForStructure = optimizeForStructure;
6
- exports.optimizeForStructureWithStats = optimizeForStructureWithStats;
7
- const commands_1 = require("./commands");
8
- let OBJ = 'rs';
9
- function setStructureObjective(obj) {
10
- OBJ = obj;
11
- (0, commands_1.setOptimizerObjective)(obj);
12
- }
13
- const INLINE_THRESHOLD = 8;
14
- const BOP_OP = {
15
- '+': '+=',
16
- '-': '-=',
17
- '*': '*=',
18
- '/': '/=',
19
- '%': '%=',
20
- };
21
- function varRef(name) {
22
- return name.startsWith('$') ? name : `$${name}`;
23
- }
24
- function operandToScore(op) {
25
- if (op.kind === 'var')
26
- return `${varRef(op.name)} ${OBJ}`;
27
- if (op.kind === 'const')
28
- return `$const_${op.value} ${OBJ}`;
29
- if (op.kind === 'param')
30
- return `$p${op.index} ${OBJ}`;
31
- throw new Error(`Cannot convert storage operand to score: ${op.path}`);
32
- }
33
- function emitInstr(instr, namespace) {
34
- const commands = [];
35
- switch (instr.op) {
36
- case 'assign':
37
- if (instr.src.kind === 'const') {
38
- commands.push({ cmd: `scoreboard players set ${varRef(instr.dst)} ${OBJ} ${instr.src.value}` });
39
- }
40
- else if (instr.src.kind === 'var') {
41
- commands.push({
42
- cmd: `scoreboard players operation ${varRef(instr.dst)} ${OBJ} = ${varRef(instr.src.name)} ${OBJ}`,
43
- });
44
- }
45
- else if (instr.src.kind === 'param') {
46
- commands.push({
47
- cmd: `scoreboard players operation ${varRef(instr.dst)} ${OBJ} = $p${instr.src.index} ${OBJ}`,
48
- });
49
- }
50
- else {
51
- commands.push({
52
- cmd: `execute store result score ${varRef(instr.dst)} ${OBJ} run data get storage ${instr.src.path}`,
53
- });
54
- }
55
- break;
56
- case 'binop':
57
- commands.push(...emitInstr({ op: 'assign', dst: instr.dst, src: instr.lhs }, namespace));
58
- commands.push({
59
- cmd: `scoreboard players operation ${varRef(instr.dst)} ${OBJ} ${BOP_OP[instr.bop]} ${operandToScore(instr.rhs)}`,
60
- });
61
- break;
62
- case 'cmp': {
63
- const dst = varRef(instr.dst);
64
- const lhs = operandToScore(instr.lhs);
65
- const rhs = operandToScore(instr.rhs);
66
- commands.push({ cmd: `scoreboard players set ${dst} ${OBJ} 0` });
67
- const op = instr.cop === '==' ? 'if score' :
68
- instr.cop === '!=' ? 'unless score' :
69
- instr.cop === '<' ? 'if score' :
70
- instr.cop === '<=' ? 'if score' :
71
- instr.cop === '>' ? 'if score' :
72
- 'if score';
73
- const cmp = instr.cop === '==' || instr.cop === '!=' ? '=' :
74
- instr.cop;
75
- commands.push({
76
- cmd: `execute ${op} ${lhs} ${cmp} ${rhs} run scoreboard players set ${dst} ${OBJ} 1`,
77
- });
78
- break;
79
- }
80
- case 'call':
81
- for (let i = 0; i < instr.args.length; i++) {
82
- commands.push(...emitInstr({ op: 'assign', dst: `$p${i}`, src: instr.args[i] }, namespace));
83
- }
84
- commands.push({ cmd: `function ${namespace}:${instr.fn}` });
85
- if (instr.dst) {
86
- commands.push({
87
- cmd: `scoreboard players operation ${varRef(instr.dst)} ${OBJ} = $ret ${OBJ}`,
88
- });
89
- }
90
- break;
91
- case 'raw':
92
- commands.push({ cmd: instr.cmd });
93
- break;
94
- }
95
- return commands;
96
- }
97
- function emitReturn(term) {
98
- const commands = [];
99
- if (term.value) {
100
- commands.push(...emitInstr({ op: 'assign', dst: '$ret', src: term.value }, ''));
101
- }
102
- if (term.value?.kind === 'const') {
103
- commands.push({ cmd: `return ${term.value.value}` });
104
- }
105
- else if (term.value?.kind === 'var') {
106
- commands.push({ cmd: `return run scoreboard players get ${varRef(term.value.name)} ${OBJ}` });
107
- }
108
- return commands;
109
- }
110
- function markConditional(commands) {
111
- return commands.map(command => ({
112
- ...command,
113
- conditional: true,
114
- }));
115
- }
116
- function cloneVisited(visited) {
117
- return new Set(visited);
118
- }
119
- function isRecursiveCommand(command, currentFn, namespace) {
120
- return command.includes(`function ${namespace}:${currentFn}`);
121
- }
122
- function getInlineableBlock(block, currentFn, namespace) {
123
- if (!block)
124
- return null;
125
- if (block.term.op === 'jump_if' || block.term.op === 'jump_unless' || block.term.op === 'tick_yield') {
126
- return null;
127
- }
128
- const commands = block.instrs.flatMap(instr => emitInstr(instr, namespace));
129
- if (commands.some(command => isRecursiveCommand(command.cmd, currentFn, namespace))) {
130
- return null;
131
- }
132
- if (block.term.op === 'return') {
133
- commands.push(...emitReturn(block.term));
134
- }
135
- if (commands.length > INLINE_THRESHOLD) {
136
- return null;
137
- }
138
- return {
139
- commands,
140
- continuation: block.term.op === 'jump' ? block.term.target : undefined,
141
- };
142
- }
143
- function flattenBlock(fn, label, namespace, visited) {
144
- const blockMap = new Map(fn.blocks.map(block => [block.label, block]));
145
- const block = blockMap.get(label);
146
- if (!block) {
147
- return [];
148
- }
149
- if (visited.has(label)) {
150
- return [{ cmd: `function ${namespace}:${fn.name}/${label}`, label }];
151
- }
152
- visited.add(label);
153
- const commands = [];
154
- if (label === fn.blocks[0]?.label) {
155
- for (let i = 0; i < fn.params.length; i++) {
156
- commands.push({
157
- cmd: `scoreboard players operation ${varRef(fn.params[i])} ${OBJ} = $p${i} ${OBJ}`,
158
- });
159
- }
160
- }
161
- commands.push(...block.instrs.flatMap(instr => emitInstr(instr, namespace)));
162
- const term = block.term;
163
- switch (term.op) {
164
- case 'jump':
165
- commands.push(...flattenBlock(fn, term.target, namespace, visited));
166
- return commands;
167
- case 'jump_if':
168
- case 'jump_unless': {
169
- const trueLabel = term.op === 'jump_if' ? term.then : term.else_;
170
- const falseLabel = term.op === 'jump_if' ? term.else_ : term.then;
171
- const trueRange = term.op === 'jump_if' ? '1..' : '..0';
172
- const falseRange = term.op === 'jump_if' ? '..0' : '1..';
173
- const trueBlock = getInlineableBlock(blockMap.get(trueLabel), fn.name, namespace);
174
- const falseBlock = getInlineableBlock(blockMap.get(falseLabel), fn.name, namespace);
175
- if (trueBlock && falseBlock) {
176
- if (trueBlock.commands.length > 0) {
177
- commands.push({ cmd: `execute if score ${varRef(term.cond)} ${OBJ} matches ${trueRange}`, label: trueLabel });
178
- commands.push(...markConditional(trueBlock.commands));
179
- }
180
- if (falseBlock.commands.length > 0) {
181
- commands.push({ cmd: `execute if score ${varRef(term.cond)} ${OBJ} matches ${falseRange}`, label: falseLabel });
182
- commands.push(...markConditional(falseBlock.commands));
183
- }
184
- const continuation = trueBlock.continuation && trueBlock.continuation === falseBlock.continuation
185
- ? trueBlock.continuation
186
- : undefined;
187
- if (continuation) {
188
- commands.push(...flattenBlock(fn, continuation, namespace, cloneVisited(visited)));
189
- }
190
- return commands;
191
- }
192
- commands.push({ cmd: `execute if score ${varRef(term.cond)} ${OBJ} matches ${trueRange} run function ${namespace}:${fn.name}/${trueLabel}` });
193
- commands.push({ cmd: `execute if score ${varRef(term.cond)} ${OBJ} matches ${falseRange} run function ${namespace}:${fn.name}/${falseLabel}` });
194
- return commands;
195
- }
196
- case 'return':
197
- commands.push(...emitReturn(term));
198
- return commands;
199
- case 'tick_yield':
200
- commands.push({ cmd: `schedule function ${namespace}:${fn.name}/${term.continuation} 1t replace` });
201
- return commands;
202
- }
203
- }
204
- function findVars(command) {
205
- return Array.from(command.matchAll(/\$[A-Za-z0-9_]+/g), match => match[0]);
206
- }
207
- function parsePureWrite(command) {
208
- let match = command.match(/^scoreboard players set (\$[A-Za-z0-9_]+) rs -?\d+$/);
209
- if (match) {
210
- return { dst: match[1], reads: [] };
211
- }
212
- match = command.match(/^scoreboard players operation (\$[A-Za-z0-9_]+) rs = (\$[A-Za-z0-9_]+) rs$/);
213
- if (match) {
214
- return { dst: match[1], reads: [match[2]] };
215
- }
216
- match = command.match(/^execute .* run scoreboard players set (\$[A-Za-z0-9_]+) rs -?\d+$/);
217
- if (match) {
218
- return {
219
- dst: match[1],
220
- reads: findVars(command).filter(name => name !== match[1]),
221
- };
222
- }
223
- return null;
224
- }
225
- function deadStoreEliminate(commands) {
226
- const live = new Set();
227
- const kept = [];
228
- for (let i = commands.length - 1; i >= 0; i--) {
229
- const command = commands[i];
230
- const pureWrite = parsePureWrite(command.cmd);
231
- if (pureWrite) {
232
- pureWrite.reads.forEach(name => live.add(name));
233
- if (!live.has(pureWrite.dst)) {
234
- continue;
235
- }
236
- live.delete(pureWrite.dst);
237
- kept.push(command);
238
- continue;
239
- }
240
- findVars(command.cmd).forEach(name => live.add(name));
241
- kept.push(command);
242
- }
243
- return kept.reverse();
244
- }
245
- function isInlineableFunction(fn, currentFn, namespace) {
246
- if (!fn?.commands || fn.name === currentFn || fn.commands.length > INLINE_THRESHOLD) {
247
- return false;
248
- }
249
- return !fn.commands.some(command => isRecursiveCommand(command.cmd, currentFn, namespace) ||
250
- isRecursiveCommand(command.cmd, fn.name, namespace));
251
- }
252
- function inlineConditionalCalls(commands, functions, currentFn, namespace) {
253
- const optimized = [];
254
- for (const command of commands) {
255
- const match = command.cmd.match(/^(execute .+) run function ([^:]+):(.+)$/);
256
- if (!match || match[2] !== namespace) {
257
- optimized.push(command);
258
- continue;
259
- }
260
- const target = functions.get(match[3]);
261
- if (!isInlineableFunction(target, currentFn, namespace)) {
262
- optimized.push(command);
263
- continue;
264
- }
265
- optimized.push({ cmd: match[1], label: command.label });
266
- optimized.push(...markConditional(target.commands));
267
- }
268
- return optimized;
269
- }
270
- function invertExecuteCondition(command) {
271
- if (command.startsWith('execute if ')) {
272
- return command.replace(/^execute if /, 'execute unless ');
273
- }
274
- if (command.startsWith('execute unless ')) {
275
- return command.replace(/^execute unless /, 'execute if ');
276
- }
277
- return null;
278
- }
279
- function eliminateBranchVariables(commands, functions, currentFn, namespace) {
280
- const optimized = [];
281
- for (let i = 0; i < commands.length; i++) {
282
- const init = commands[i];
283
- const set = commands[i + 1];
284
- const thenCmd = commands[i + 2];
285
- const elseCmd = commands[i + 3];
286
- const initMatch = init?.cmd.match(/^scoreboard players set (\$[A-Za-z0-9_]+) rs 0$/);
287
- const setMatch = set?.cmd.match(/^((?:execute if|execute unless) .+) run scoreboard players set (\$[A-Za-z0-9_]+) rs 1$/);
288
- const thenMatch = thenCmd?.cmd.match(/^execute if score (\$[A-Za-z0-9_]+) rs matches 1\.\. run function [^:]+:(.+)$/);
289
- const elseMatch = elseCmd?.cmd.match(/^execute if score (\$[A-Za-z0-9_]+) rs matches ..0 run function [^:]+:(.+)$/) ??
290
- elseCmd?.cmd.match(/^execute unless score (\$[A-Za-z0-9_]+) rs matches 1\.\. run function [^:]+:(.+)$/);
291
- if (!initMatch || !setMatch || !thenMatch || !elseMatch) {
292
- optimized.push(init);
293
- continue;
294
- }
295
- const branchVar = initMatch[1];
296
- if (setMatch[2] !== branchVar || thenMatch[1] !== branchVar || elseMatch[1] !== branchVar) {
297
- optimized.push(init);
298
- continue;
299
- }
300
- const thenFn = functions.get(thenMatch[2]);
301
- const elseFn = functions.get(elseMatch[2]);
302
- if (!isInlineableFunction(thenFn, currentFn, namespace) || !isInlineableFunction(elseFn, currentFn, namespace)) {
303
- optimized.push(init);
304
- continue;
305
- }
306
- const thenCondition = setMatch[1];
307
- const elseCondition = invertExecuteCondition(thenCondition);
308
- if (!elseCondition) {
309
- optimized.push(init);
310
- continue;
311
- }
312
- optimized.push({ cmd: thenCondition });
313
- optimized.push(...markConditional(thenFn.commands));
314
- if (elseFn.commands.length > 0) {
315
- optimized.push({ cmd: elseCondition });
316
- optimized.push(...markConditional(elseFn.commands));
317
- }
318
- i += 3;
319
- }
320
- return optimized;
321
- }
322
- function optimizeFunctionForStructure(fn, functions, namespace) {
323
- if (fn.blocks.length === 0) {
324
- return [];
325
- }
326
- const linear = flattenBlock(fn, fn.blocks[0].label, namespace, new Set());
327
- const branchEliminated = eliminateBranchVariables(linear, functions, fn.name, namespace);
328
- const inlined = inlineConditionalCalls(branchEliminated, functions, fn.name, namespace);
329
- return deadStoreEliminate(inlined);
330
- }
331
- function optimizeForStructure(functions, namespace = 'redscript') {
332
- return optimizeForStructureWithStats(functions, namespace).functions;
333
- }
334
- function optimizeForStructureWithStats(functions, namespace = 'redscript') {
335
- const staged = new Map(functions.map(fn => [fn.name, { ...fn }]));
336
- for (const fn of staged.values()) {
337
- fn.commands = flattenBlock(fn, fn.blocks[0]?.label ?? 'entry', namespace, new Set());
338
- }
339
- for (const fn of staged.values()) {
340
- fn.commands = optimizeFunctionForStructure(fn, staged, namespace);
341
- }
342
- const optimizedCommands = (0, commands_1.optimizeCommandFunctions)(Array.from(staged.values()).map(fn => ({
343
- name: fn.name,
344
- commands: fn.commands ?? [],
345
- })));
346
- const stats = (0, commands_1.createEmptyOptimizationStats)();
347
- (0, commands_1.mergeOptimizationStats)(stats, optimizedCommands.stats);
348
- return {
349
- functions: Array.from(staged.values()).map(fn => ({
350
- ...fn,
351
- commands: optimizedCommands.functions.find(candidate => candidate.name === fn.name)?.commands ?? fn.commands,
352
- })),
353
- stats,
354
- };
355
- }
356
- //# sourceMappingURL=structure.js.map
package/dist/pack.mcmeta DELETED
@@ -1,6 +0,0 @@
1
- {
2
- "pack": {
3
- "pack_format": 26,
4
- "description": "mypack datapack — compiled by redscript"
5
- }
6
- }