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,279 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generateStructure = generateStructure;
4
- exports.compileToStructure = compileToStructure;
5
- const lexer_1 = require("../../lexer");
6
- const parser_1 = require("../../parser");
7
- const lowering_1 = require("../../lowering");
8
- const nbt_1 = require("../../nbt");
9
- const commands_1 = require("../../optimizer/commands");
10
- const passes_1 = require("../../optimizer/passes");
11
- const structure_1 = require("../../optimizer/structure");
12
- const dce_1 = require("../../optimizer/dce");
13
- const compile_1 = require("../../compile");
14
- const types_1 = require("../../events/types");
15
- const var_allocator_1 = require("../var-allocator");
16
- const DATA_VERSION = 3953;
17
- const MAX_WIDTH = 16;
18
- const OBJ = 'rs';
19
- const PALETTE_IMPULSE = 0;
20
- const PALETTE_CHAIN_UNCONDITIONAL = 1;
21
- const PALETTE_CHAIN_CONDITIONAL = 2;
22
- const PALETTE_REPEAT = 3;
23
- const palette = [
24
- { Name: 'minecraft:command_block', Properties: { conditional: 'false', facing: 'east' } },
25
- { Name: 'minecraft:chain_command_block', Properties: { conditional: 'false', facing: 'east' } },
26
- { Name: 'minecraft:chain_command_block', Properties: { conditional: 'true', facing: 'east' } },
27
- { Name: 'minecraft:repeating_command_block', Properties: { conditional: 'false', facing: 'east' } },
28
- { Name: 'minecraft:air', Properties: {} },
29
- ];
30
- function escapeJsonString(value) {
31
- return JSON.stringify(value).slice(1, -1);
32
- }
33
- function collectConsts(fn) {
34
- const consts = new Set();
35
- for (const block of fn.blocks) {
36
- for (const instr of block.instrs) {
37
- if (instr.op === 'assign' && instr.src.kind === 'const')
38
- consts.add(instr.src.value);
39
- if (instr.op === 'binop') {
40
- if (instr.lhs.kind === 'const')
41
- consts.add(instr.lhs.value);
42
- if (instr.rhs.kind === 'const')
43
- consts.add(instr.rhs.value);
44
- }
45
- if (instr.op === 'cmp') {
46
- if (instr.lhs.kind === 'const')
47
- consts.add(instr.lhs.value);
48
- if (instr.rhs.kind === 'const')
49
- consts.add(instr.rhs.value);
50
- }
51
- }
52
- if (block.term.op === 'return' && block.term.value?.kind === 'const') {
53
- consts.add(block.term.value.value);
54
- }
55
- }
56
- return consts;
57
- }
58
- function collectCommandEntriesFromModule(module, mangle = false) {
59
- const alloc = new var_allocator_1.VarAllocator(mangle);
60
- const entries = [];
61
- const triggerHandlers = module.functions.filter(fn => fn.isTriggerHandler && fn.triggerName);
62
- const triggerNames = new Set(triggerHandlers.map(fn => fn.triggerName));
63
- const eventHandlers = module.functions.filter((fn) => !!fn.eventHandler && (0, types_1.isEventTypeName)(fn.eventHandler.eventType));
64
- const eventTypes = new Set(eventHandlers.map(fn => fn.eventHandler.eventType));
65
- const loadCommands = [
66
- `scoreboard objectives add ${OBJ} dummy`,
67
- ...module.globals.map(g => `scoreboard players set ${alloc.alloc(g.name)} ${OBJ} ${g.init}`),
68
- ...Array.from(triggerNames).flatMap(triggerName => [
69
- `scoreboard objectives add ${triggerName} trigger`,
70
- `scoreboard players enable @a ${triggerName}`,
71
- ]),
72
- ...Array.from(new Set(module.functions.flatMap(fn => Array.from(collectConsts(fn))))).map(value => `scoreboard players set ${alloc.constant(value)} ${OBJ} ${value}`),
73
- ];
74
- for (const eventType of eventTypes) {
75
- if (eventType === 'PlayerDeath') {
76
- loadCommands.push('scoreboard objectives add rs.deaths deathCount');
77
- }
78
- else if (eventType === 'EntityKill') {
79
- loadCommands.push('scoreboard objectives add rs.kills totalKillCount');
80
- }
81
- }
82
- // Call @load functions from __load
83
- for (const fn of module.functions) {
84
- if (fn.isLoadInit) {
85
- loadCommands.push(`function ${module.namespace}:${fn.name}`);
86
- }
87
- }
88
- const sections = [];
89
- if (loadCommands.length > 0) {
90
- sections.push({
91
- name: '__load',
92
- commands: loadCommands.map(cmd => ({ cmd })),
93
- });
94
- }
95
- for (const triggerName of triggerNames) {
96
- const handlers = triggerHandlers.filter(fn => fn.triggerName === triggerName);
97
- sections.push({
98
- name: `__trigger_${triggerName}_dispatch`,
99
- commands: [
100
- ...handlers.map(handler => ({ cmd: `function ${module.namespace}:${handler.name}` })),
101
- { cmd: `scoreboard players set @s ${triggerName} 0` },
102
- { cmd: `scoreboard players enable @s ${triggerName}` },
103
- ],
104
- });
105
- }
106
- for (const fn of module.functions) {
107
- if (!fn.commands || fn.commands.length === 0)
108
- continue;
109
- sections.push({
110
- name: fn.name,
111
- commands: fn.commands,
112
- });
113
- }
114
- const tickCommands = [];
115
- for (const fn of module.functions.filter(candidate => candidate.isTickLoop)) {
116
- tickCommands.push({ cmd: `function ${module.namespace}:${fn.name}` });
117
- }
118
- if (triggerNames.size > 0) {
119
- for (const triggerName of triggerNames) {
120
- tickCommands.push({
121
- cmd: `execute as @a[scores={${triggerName}=1..}] run function ${module.namespace}:__trigger_${triggerName}_dispatch`,
122
- });
123
- }
124
- }
125
- if (eventHandlers.length > 0) {
126
- for (const eventType of eventTypes) {
127
- const tag = types_1.EVENT_TYPES[eventType].tag;
128
- const handlers = eventHandlers.filter(fn => fn.eventHandler?.eventType === eventType);
129
- for (const handler of handlers) {
130
- tickCommands.push({
131
- cmd: `execute as @a[tag=${tag}] run function ${module.namespace}:${handler.name}`,
132
- });
133
- }
134
- tickCommands.push({
135
- cmd: `tag @a[tag=${tag}] remove ${tag}`,
136
- });
137
- }
138
- }
139
- if (tickCommands.length > 0) {
140
- sections.push({
141
- name: '__tick',
142
- commands: tickCommands,
143
- repeat: true,
144
- });
145
- }
146
- for (const section of sections) {
147
- for (let i = 0; i < section.commands.length; i++) {
148
- const command = section.commands[i];
149
- const state = i === 0
150
- ? (section.repeat ? PALETTE_REPEAT : PALETTE_IMPULSE)
151
- : (command.conditional ? PALETTE_CHAIN_CONDITIONAL : PALETTE_CHAIN_UNCONDITIONAL);
152
- entries.push({
153
- functionName: section.name,
154
- lineNumber: i + 1,
155
- command: command.cmd,
156
- conditional: Boolean(command.conditional),
157
- state,
158
- isRepeat: Boolean(section.repeat && i === 0),
159
- });
160
- }
161
- }
162
- return entries;
163
- }
164
- function toFunctionName(file) {
165
- const match = file.path.match(/^data\/[^/]+\/function\/(.+)\.mcfunction$/);
166
- return match?.[1] ?? null;
167
- }
168
- function collectCommandEntriesFromFiles(files) {
169
- const entries = [];
170
- for (const file of files) {
171
- const functionName = toFunctionName(file);
172
- if (!functionName)
173
- continue;
174
- const lines = file.content.split('\n');
175
- let isFirstCommand = true;
176
- const isTickFunction = functionName === '__tick';
177
- for (let i = 0; i < lines.length; i++) {
178
- const command = lines[i].trim();
179
- if (command === '' || command.startsWith('#'))
180
- continue;
181
- const state = isFirstCommand
182
- ? (isTickFunction ? PALETTE_REPEAT : PALETTE_IMPULSE)
183
- : PALETTE_CHAIN_UNCONDITIONAL;
184
- entries.push({
185
- functionName,
186
- lineNumber: i + 1,
187
- command,
188
- conditional: false,
189
- state,
190
- isRepeat: isTickFunction && isFirstCommand,
191
- });
192
- isFirstCommand = false;
193
- }
194
- }
195
- return entries;
196
- }
197
- function createPaletteTag() {
198
- return palette.map(entry => nbt_1.nbt.compound({
199
- Name: nbt_1.nbt.string(entry.Name),
200
- Properties: nbt_1.nbt.compound(Object.fromEntries(Object.entries(entry.Properties).map(([key, value]) => [key, nbt_1.nbt.string(value)]))),
201
- }));
202
- }
203
- function createBlockEntityTag(entry) {
204
- return nbt_1.nbt.compound({
205
- id: nbt_1.nbt.string('minecraft:command_block'),
206
- Command: nbt_1.nbt.string(entry.command),
207
- auto: nbt_1.nbt.byte(entry.isRepeat ? 1 : 0),
208
- powered: nbt_1.nbt.byte(0),
209
- conditionMet: nbt_1.nbt.byte(0),
210
- UpdateLastExecution: nbt_1.nbt.byte(1),
211
- LastExecution: nbt_1.nbt.long(0n),
212
- TrackOutput: nbt_1.nbt.byte(1),
213
- SuccessCount: nbt_1.nbt.int(0),
214
- LastOutput: nbt_1.nbt.string(''),
215
- CustomName: nbt_1.nbt.string(`{"text":"${escapeJsonString(`${entry.functionName}:${entry.lineNumber}`)}"}`),
216
- });
217
- }
218
- function createBlockTag(entry, index) {
219
- const x = index % MAX_WIDTH;
220
- const z = Math.floor(index / MAX_WIDTH) % MAX_WIDTH;
221
- const y = Math.floor(index / (MAX_WIDTH * MAX_WIDTH));
222
- return nbt_1.nbt.compound({
223
- pos: nbt_1.nbt.list(3 /* TagType.Int */, [nbt_1.nbt.int(x), nbt_1.nbt.int(y), nbt_1.nbt.int(z)]),
224
- state: nbt_1.nbt.int(entry.state),
225
- nbt: createBlockEntityTag(entry),
226
- });
227
- }
228
- function generateStructure(input, options) {
229
- const entries = Array.isArray(input)
230
- ? collectCommandEntriesFromFiles(input)
231
- : collectCommandEntriesFromModule(input, options?.mangle);
232
- const blockTags = entries.map(createBlockTag);
233
- const sizeX = Math.max(1, Math.min(MAX_WIDTH, entries.length || 1));
234
- const sizeZ = Math.max(1, Math.min(MAX_WIDTH, Math.ceil(entries.length / MAX_WIDTH) || 1));
235
- const sizeY = Math.max(1, Math.ceil(entries.length / (MAX_WIDTH * MAX_WIDTH)) || 1);
236
- const root = nbt_1.nbt.compound({
237
- DataVersion: nbt_1.nbt.int(DATA_VERSION),
238
- size: nbt_1.nbt.list(3 /* TagType.Int */, [nbt_1.nbt.int(sizeX), nbt_1.nbt.int(sizeY), nbt_1.nbt.int(sizeZ)]),
239
- palette: nbt_1.nbt.list(10 /* TagType.Compound */, createPaletteTag()),
240
- blocks: nbt_1.nbt.list(10 /* TagType.Compound */, blockTags),
241
- entities: nbt_1.nbt.list(10 /* TagType.Compound */, []),
242
- });
243
- return {
244
- buffer: (0, nbt_1.writeNbt)(root, ''),
245
- blockCount: entries.length,
246
- blocks: entries.map(entry => ({
247
- command: entry.command,
248
- conditional: entry.conditional,
249
- state: entry.state,
250
- functionName: entry.functionName,
251
- lineNumber: entry.lineNumber,
252
- })),
253
- };
254
- }
255
- function compileToStructure(source, namespace, filePath, options = {}) {
256
- const preprocessedSource = (0, compile_1.preprocessSource)(source, { filePath });
257
- const tokens = new lexer_1.Lexer(preprocessedSource, filePath).tokenize();
258
- const parsedAst = new parser_1.Parser(tokens, preprocessedSource, filePath).parse(namespace);
259
- const dceResult = options.dce ?? true ? (0, dce_1.eliminateDeadCode)(parsedAst) : { program: parsedAst, warnings: [] };
260
- const ast = dceResult.program;
261
- const ir = new lowering_1.Lowering(namespace).lower(ast);
262
- const stats = (0, commands_1.createEmptyOptimizationStats)();
263
- const optimizedIRFunctions = ir.functions.map(fn => {
264
- const optimized = (0, passes_1.optimizeWithStats)(fn);
265
- (0, commands_1.mergeOptimizationStats)(stats, optimized.stats);
266
- return optimized.fn;
267
- });
268
- const structureOptimized = (0, structure_1.optimizeForStructureWithStats)(optimizedIRFunctions, namespace);
269
- (0, commands_1.mergeOptimizationStats)(stats, structureOptimized.stats);
270
- const optimizedModule = {
271
- ...ir,
272
- functions: structureOptimized.functions,
273
- };
274
- return {
275
- ...generateStructure(optimizedModule, { mangle: options.mangle }),
276
- stats,
277
- };
278
- }
279
- //# sourceMappingURL=index.js.map
@@ -1,45 +0,0 @@
1
- /**
2
- * VarAllocator — assigns scoreboard fake-player names to variables.
3
- *
4
- * mangle=true: sequential short names ($a, $b, ..., $z, $aa, $ab, ...)
5
- * mangle=false: legacy names ($<name> for vars, $const_<v> for consts, $p0/$ret for internals)
6
- */
7
- export declare class VarAllocator {
8
- private readonly mangle;
9
- private seq;
10
- private readonly varCache;
11
- private readonly constCache;
12
- private readonly internalCache;
13
- constructor(mangle?: boolean);
14
- /** Allocate a name for a user variable. Strips leading '$' if present. */
15
- alloc(originalName: string): string;
16
- /** Allocate a name for a constant value (content-addressed). */
17
- constant(value: number): string;
18
- /**
19
- * Look up the allocated name for a raw scoreboard fake-player name such as
20
- * "$_2", "$x", "$p0", or "$ret". Returns the mangled name when mangle=true,
21
- * or the original name when mangle=false or the name is not yet known.
22
- *
23
- * Unlike alloc/internal/constant this does NOT create a new slot — it only
24
- * resolves names that were already registered. Used by the codegen to
25
- * rewrite variable references inside `raw` IR instructions.
26
- */
27
- resolve(rawName: string): string;
28
- /**
29
- * Rewrite all $varname tokens in a raw mcfunction command string so that
30
- * IR variable names are replaced by their allocated (possibly mangled) names.
31
- * Tokens that are not registered in the allocator are left untouched (they
32
- * are literal scoreboard fake-player names like "out" or "#rs").
33
- */
34
- resolveRaw(cmd: string): string;
35
- /** Allocate a name for a compiler internal (e.g. "ret", "p0"). */
36
- internal(suffix: string): string;
37
- /** Generate the next sequential name: a, b, ..., z, aa, ab, ..., az, ba, ... */
38
- private nextSeqName;
39
- /**
40
- * Returns a sourcemap object mapping allocated name → original name.
41
- * Useful for debugging: write to <output>.map.json alongside the datapack.
42
- * Only meaningful when mangle=true.
43
- */
44
- toSourceMap(): Record<string, string>;
45
- }
@@ -1,104 +0,0 @@
1
- "use strict";
2
- /**
3
- * VarAllocator — assigns scoreboard fake-player names to variables.
4
- *
5
- * mangle=true: sequential short names ($a, $b, ..., $z, $aa, $ab, ...)
6
- * mangle=false: legacy names ($<name> for vars, $const_<v> for consts, $p0/$ret for internals)
7
- */
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.VarAllocator = void 0;
10
- class VarAllocator {
11
- constructor(mangle = true) {
12
- this.seq = 0;
13
- this.varCache = new Map();
14
- this.constCache = new Map();
15
- this.internalCache = new Map();
16
- this.mangle = mangle;
17
- }
18
- /** Allocate a name for a user variable. Strips leading '$' if present. */
19
- alloc(originalName) {
20
- const clean = originalName.startsWith('$') ? originalName.slice(1) : originalName;
21
- const cached = this.varCache.get(clean);
22
- if (cached)
23
- return cached;
24
- const name = this.mangle ? `$${this.nextSeqName()}` : `$${clean}`;
25
- this.varCache.set(clean, name);
26
- return name;
27
- }
28
- /** Allocate a name for a constant value (content-addressed). */
29
- constant(value) {
30
- const cached = this.constCache.get(value);
31
- if (cached)
32
- return cached;
33
- const name = this.mangle ? `$${this.nextSeqName()}` : `$const_${value}`;
34
- this.constCache.set(value, name);
35
- return name;
36
- }
37
- /**
38
- * Look up the allocated name for a raw scoreboard fake-player name such as
39
- * "$_2", "$x", "$p0", or "$ret". Returns the mangled name when mangle=true,
40
- * or the original name when mangle=false or the name is not yet known.
41
- *
42
- * Unlike alloc/internal/constant this does NOT create a new slot — it only
43
- * resolves names that were already registered. Used by the codegen to
44
- * rewrite variable references inside `raw` IR instructions.
45
- */
46
- resolve(rawName) {
47
- const clean = rawName.startsWith('$') ? rawName.slice(1) : rawName;
48
- // Check every cache in priority order: vars, internals, consts
49
- return (this.varCache.get(clean) ??
50
- this.internalCache.get(clean) ??
51
- rawName // not registered → return as-is (literal fake player, not a var)
52
- );
53
- }
54
- /**
55
- * Rewrite all $varname tokens in a raw mcfunction command string so that
56
- * IR variable names are replaced by their allocated (possibly mangled) names.
57
- * Tokens that are not registered in the allocator are left untouched (they
58
- * are literal scoreboard fake-player names like "out" or "#rs").
59
- */
60
- resolveRaw(cmd) {
61
- return cmd.replace(/\$[A-Za-z_][A-Za-z0-9_]*/g, (tok) => this.resolve(tok));
62
- }
63
- /** Allocate a name for a compiler internal (e.g. "ret", "p0"). */
64
- internal(suffix) {
65
- const cached = this.internalCache.get(suffix);
66
- if (cached)
67
- return cached;
68
- const name = this.mangle ? `$${this.nextSeqName()}` : `$${suffix}`;
69
- this.internalCache.set(suffix, name);
70
- return name;
71
- }
72
- /** Generate the next sequential name: a, b, ..., z, aa, ab, ..., az, ba, ... */
73
- nextSeqName() {
74
- const n = this.seq++;
75
- let result = '';
76
- let remaining = n;
77
- do {
78
- result = String.fromCharCode(97 + (remaining % 26)) + result;
79
- remaining = Math.floor(remaining / 26) - 1;
80
- } while (remaining >= 0);
81
- return result;
82
- }
83
- /**
84
- * Returns a sourcemap object mapping allocated name → original name.
85
- * Useful for debugging: write to <output>.map.json alongside the datapack.
86
- * Only meaningful when mangle=true.
87
- */
88
- toSourceMap() {
89
- const map = {};
90
- for (const [orig, alloc] of this.varCache) {
91
- // Skip compiler-generated temporaries (start with _ followed by digits)
92
- if (/^_\d+$/.test(orig))
93
- continue;
94
- map[alloc] = orig;
95
- }
96
- for (const [val, alloc] of this.constCache)
97
- map[alloc] = `const:${val}`;
98
- for (const [suf, alloc] of this.internalCache)
99
- map[alloc] = `internal:${suf}`;
100
- return map;
101
- }
102
- }
103
- exports.VarAllocator = VarAllocator;
104
- //# sourceMappingURL=var-allocator.js.map
package/dist/compile.d.ts DELETED
@@ -1,68 +0,0 @@
1
- /**
2
- * RedScript Compile API
3
- *
4
- * Main compile function with proper error handling and diagnostics.
5
- */
6
- import { DatapackFile } from './codegen/mcfunction';
7
- import { DiagnosticError } from './diagnostics';
8
- import type { IRModule } from './ir/types';
9
- import type { Program } from './ast/types';
10
- export interface CompileOptions {
11
- namespace?: string;
12
- filePath?: string;
13
- optimize?: boolean;
14
- dce?: boolean;
15
- mangle?: boolean;
16
- /** Scoreboard objective used for all variable slots.
17
- * Defaults to '__<namespace>' (e.g. '__mathshow') — the double-underscore
18
- * prefix signals compiler-internal and avoids occupying the user's namespace.
19
- * Each datapack gets a unique objective automatically; no manual setup needed. */
20
- scoreboardObjective?: string;
21
- /** Additional source files that should be treated as *library* code.
22
- * Functions in these files are DCE-eligible: they are only compiled into
23
- * the datapack when actually called from user code. Each string is parsed
24
- * independently (as if it had `module library;` at the top), so library
25
- * mode never bleeds into the main `source`. */
26
- librarySources?: string[];
27
- }
28
- export interface CompileResult {
29
- success: boolean;
30
- files?: DatapackFile[];
31
- advancements?: DatapackFile[];
32
- ast?: Program;
33
- ir?: IRModule;
34
- error?: DiagnosticError;
35
- }
36
- export interface SourceRange {
37
- startLine: number;
38
- endLine: number;
39
- filePath: string;
40
- }
41
- export interface PreprocessedSource {
42
- source: string;
43
- ranges: SourceRange[];
44
- /** Imported files that declared `module library;` — parsed separately
45
- * in library mode so their functions are DCE-eligible. Never concatenated
46
- * into `source`. */
47
- libraryImports?: Array<{
48
- source: string;
49
- filePath: string;
50
- }>;
51
- }
52
- /**
53
- * Resolve a combined-source line number back to the original file and line.
54
- * Returns { filePath, line } if a mapping is found, otherwise returns the input unchanged.
55
- */
56
- export declare function resolveSourceLine(combinedLine: number, ranges: SourceRange[], fallbackFile?: string): {
57
- filePath?: string;
58
- line: number;
59
- };
60
- interface PreprocessOptions {
61
- filePath?: string;
62
- seen?: Set<string>;
63
- }
64
- export declare function preprocessSourceWithMetadata(source: string, options?: PreprocessOptions): PreprocessedSource;
65
- export declare function preprocessSource(source: string, options?: PreprocessOptions): string;
66
- export declare function compile(source: string, options?: CompileOptions): CompileResult;
67
- export declare function formatCompileError(result: CompileResult): string;
68
- export {};
@@ -1,6 +0,0 @@
1
- # RedScript runtime init
2
- scoreboard objectives add rs dummy
3
- scoreboard players set $const_1 rs 1
4
- scoreboard players set $const_200 rs 200
5
- scoreboard players set $const_0 rs 0
6
- scoreboard players set $const_0 rs 0
@@ -1,2 +0,0 @@
1
- # RedScript tick dispatcher
2
- function arena:arena_tick
@@ -1,3 +0,0 @@
1
- # block: else_1
2
- say Arena update: no PvP kills yet.
3
- function arena:announce_leaders/merge_2
@@ -1,3 +0,0 @@
1
- # block: then_0
2
- scoreboard players operation $top_kills rs = $kills rs
3
- function arena:announce_leaders/foreach_0/merge_2
@@ -1,7 +0,0 @@
1
- # block: entry
2
- execute store result score $t0 rs run scoreboard players get @s kills
3
- scoreboard players operation $kills rs = $t0 rs
4
- scoreboard players set $t1 rs 0
5
- execute if score $t0 rs > $top_kills rs run scoreboard players set $t1 rs 1
6
- execute if score $t1 rs matches 1.. run function arena:announce_leaders/foreach_0/then_0
7
- execute if score $t1 rs matches ..0 run function arena:announce_leaders/foreach_0/merge_2
@@ -1,4 +0,0 @@
1
- # block: then_0
2
- tellraw @s {"text":"You are leading the arena right now."}
3
- title @s title {"text":"Arena Leader"}
4
- function arena:announce_leaders/foreach_1/merge_2
@@ -1,6 +0,0 @@
1
- # block: entry
2
- execute store result score $t0 rs run scoreboard players get @s kills
3
- scoreboard players set $t1 rs 0
4
- execute if score $t0 rs = $top_kills rs run scoreboard players set $t1 rs 1
5
- execute if score $t1 rs matches 1.. run function arena:announce_leaders/foreach_1/then_0
6
- execute if score $t1 rs matches ..0 run function arena:announce_leaders/foreach_1/merge_2
@@ -1 +0,0 @@
1
- # block: merge_2
@@ -1,4 +0,0 @@
1
- # block: then_0
2
- say Arena update: current leader check complete.
3
- execute as @a run function arena:announce_leaders/foreach_1
4
- function arena:announce_leaders/merge_2
@@ -1,6 +0,0 @@
1
- # block: entry
2
- execute as @a run function arena:announce_leaders/foreach_0
3
- scoreboard players set $t0 rs 0
4
- execute if score $const_0 rs > $const_0 rs run scoreboard players set $t0 rs 1
5
- execute if score $t0 rs matches 1.. run function arena:announce_leaders/then_0
6
- execute if score $t0 rs matches ..0 run function arena:announce_leaders/else_1
@@ -1 +0,0 @@
1
- # block: merge_2
@@ -1,4 +0,0 @@
1
- # block: then_0
2
- function arena:announce_leaders
3
- scoreboard players operation $t5 rs = $ret rs
4
- function arena:arena_tick/merge_2
@@ -1,11 +0,0 @@
1
- # block: entry
2
- execute store result score $t0 rs run scoreboard players get arena ticks
3
- scoreboard players operation $t1 rs = $t0 rs
4
- scoreboard players operation $t1 rs += $const_1 rs
5
- execute store result score arena ticks run scoreboard players get $t2 rs
6
- scoreboard players operation $t3 rs = $t1 rs
7
- scoreboard players operation $t3 rs %= $const_200 rs
8
- scoreboard players set $t4 rs 0
9
- execute if score $t3 rs = $const_0 rs run scoreboard players set $t4 rs 1
10
- execute if score $t4 rs matches 1.. run function arena:arena_tick/then_0
11
- execute if score $t4 rs matches ..0 run function arena:arena_tick/merge_2
@@ -1,5 +0,0 @@
1
- # RedScript runtime init
2
- scoreboard objectives add rs dummy
3
- scoreboard players set $const_1 rs 1
4
- scoreboard players set $const_100 rs 100
5
- scoreboard players set $const_0 rs 0
@@ -1,2 +0,0 @@
1
- # RedScript tick dispatcher
2
- function counter:counter_tick
@@ -1 +0,0 @@
1
- # block: merge_2
@@ -1,3 +0,0 @@
1
- # block: then_0
2
- say Counter reached another 100 ticks
3
- function counter:counter_tick/merge_2
@@ -1,11 +0,0 @@
1
- # block: entry
2
- execute store result score $t0 rs run scoreboard players get counter ticks
3
- scoreboard players operation $t1 rs = $t0 rs
4
- scoreboard players operation $t1 rs += $const_1 rs
5
- execute store result score counter ticks run scoreboard players get $t2 rs
6
- scoreboard players operation $t3 rs = $t1 rs
7
- scoreboard players operation $t3 rs %= $const_100 rs
8
- scoreboard players set $t4 rs 0
9
- execute if score $t3 rs = $const_0 rs run scoreboard players set $t4 rs 1
10
- execute if score $t4 rs matches 1.. run function counter:counter_tick/then_0
11
- execute if score $t4 rs matches ..0 run function counter:counter_tick/merge_2
@@ -1,3 +0,0 @@
1
- # RedScript runtime init
2
- scoreboard objectives add rs dummy
3
- scoreboard players set $a rs 0
@@ -1,3 +0,0 @@
1
- # block: merge_2
2
- scoreboard players operation $h rs = $b rs
3
- return run scoreboard players get $b rs
@@ -1,5 +0,0 @@
1
- # block: then_0
2
- scoreboard players set $f rs 0
3
- scoreboard players operation $f rs -= $b rs
4
- scoreboard players operation $h rs = $f rs
5
- return run scoreboard players get $f rs
@@ -1,7 +0,0 @@
1
- # block: entry
2
- scoreboard players operation $b rs = $c rs
3
- scoreboard players operation $b rs = $d rs
4
- scoreboard players set $e rs 0
5
- execute if score $d rs < $a rs run scoreboard players set $e rs 1
6
- execute if score $e rs matches 1.. run function gcd2:abs/then_0
7
- execute if score $e rs matches ..0 run function gcd2:abs/merge_2
@@ -1,7 +0,0 @@
1
- # block: loop_body_1
2
- scoreboard players operation $r rs = $b rs
3
- scoreboard players operation $r rs %= $p rs
4
- scoreboard players operation $s rs = $r rs
5
- scoreboard players operation $b rs = $p rs
6
- scoreboard players operation $p rs = $r rs
7
- function gcd2:gcd/loop_check_0
@@ -1,5 +0,0 @@
1
- # block: loop_check_0
2
- scoreboard players set $q rs 0
3
- execute if score $p rs > $a rs run scoreboard players set $q rs 1
4
- execute if score $q rs matches 1.. run function gcd2:gcd/loop_body_1
5
- execute if score $q rs matches ..0 run function gcd2:gcd/loop_exit_2