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
@@ -4,19 +4,36 @@
4
4
  * Main entry point for programmatic usage.
5
5
  */
6
6
  export declare const version = "2.0.0";
7
- export { compile, CompileOptions, CompileResult } from '../src2/emit/compile';
8
- export type { DatapackFile } from '../src2/emit/index';
7
+ export { compile, CompileOptions, CompileResult } from './emit/compile';
8
+ export { compileModules } from './emit/modules';
9
+ export type { ModuleInput, CompileModulesOptions, CompileModulesResult } from './emit/modules';
10
+ export { McVersion, parseMcVersion, compareMcVersion, DEFAULT_MC_VERSION } from './types/mc-version';
11
+ export type { DatapackFile } from './emit/index';
9
12
  export { Lexer } from './lexer';
10
13
  export { Parser } from './parser';
11
14
  export { preprocessSource, preprocessSourceWithMetadata } from './compile';
12
15
  export { MCCommandValidator } from './mc-validator';
13
16
  export type { Program, FnDecl, Expr, Stmt, Span } from './ast/types';
14
17
  export type { DiagnosticError } from './diagnostics';
18
+ export { FileCache, hashFile } from './cache/index';
19
+ export { DependencyGraph, parseImports } from './cache/deps';
20
+ export { compileIncremental, resetCompileCache } from './cache/incremental';
21
+ export type { IncrementalOptions, IncrementalResult } from './cache/incremental';
22
+ export interface CheckResult {
23
+ error: Error | null;
24
+ warnings: string[];
25
+ }
15
26
  /**
16
27
  * Check RedScript source code for errors without generating output.
28
+ * Runs the full compile pipeline (lex → parse → HIR → MIR → LIR → emit)
29
+ * to catch type-level and lowering errors, not just parse errors.
17
30
  *
18
31
  * @param source - The RedScript source code
19
32
  * @param namespace - Optional namespace
20
33
  * @returns null if no errors, or an error object
21
34
  */
22
35
  export declare function check(source: string, namespace?: string, filePath?: string): Error | null;
36
+ /**
37
+ * Like check(), but also returns warnings (e.g., tick budget analysis).
38
+ */
39
+ export declare function checkWithWarnings(source: string, namespace?: string, filePath?: string): CheckResult;
package/dist/src/index.js CHANGED
@@ -5,41 +5,63 @@
5
5
  * Main entry point for programmatic usage.
6
6
  */
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.MCCommandValidator = exports.preprocessSourceWithMetadata = exports.preprocessSource = exports.Parser = exports.Lexer = exports.compile = exports.version = void 0;
8
+ exports.resetCompileCache = exports.compileIncremental = exports.parseImports = exports.DependencyGraph = exports.hashFile = exports.FileCache = exports.MCCommandValidator = exports.preprocessSourceWithMetadata = exports.preprocessSource = exports.Parser = exports.Lexer = exports.DEFAULT_MC_VERSION = exports.compareMcVersion = exports.parseMcVersion = exports.McVersion = exports.compileModules = exports.compile = exports.version = void 0;
9
9
  exports.check = check;
10
+ exports.checkWithWarnings = checkWithWarnings;
10
11
  exports.version = '2.0.0';
11
- const lexer_1 = require("./lexer");
12
- const parser_1 = require("./parser");
13
- const compile_1 = require("./compile");
12
+ const compile_1 = require("./emit/compile");
14
13
  // Re-export v2 compile API
15
- var compile_2 = require("../src2/emit/compile");
14
+ var compile_2 = require("./emit/compile");
16
15
  Object.defineProperty(exports, "compile", { enumerable: true, get: function () { return compile_2.compile; } });
16
+ var modules_1 = require("./emit/modules");
17
+ Object.defineProperty(exports, "compileModules", { enumerable: true, get: function () { return modules_1.compileModules; } });
18
+ var mc_version_1 = require("./types/mc-version");
19
+ Object.defineProperty(exports, "McVersion", { enumerable: true, get: function () { return mc_version_1.McVersion; } });
20
+ Object.defineProperty(exports, "parseMcVersion", { enumerable: true, get: function () { return mc_version_1.parseMcVersion; } });
21
+ Object.defineProperty(exports, "compareMcVersion", { enumerable: true, get: function () { return mc_version_1.compareMcVersion; } });
22
+ Object.defineProperty(exports, "DEFAULT_MC_VERSION", { enumerable: true, get: function () { return mc_version_1.DEFAULT_MC_VERSION; } });
17
23
  // Re-export utilities
18
- var lexer_2 = require("./lexer");
19
- Object.defineProperty(exports, "Lexer", { enumerable: true, get: function () { return lexer_2.Lexer; } });
20
- var parser_2 = require("./parser");
21
- Object.defineProperty(exports, "Parser", { enumerable: true, get: function () { return parser_2.Parser; } });
24
+ var lexer_1 = require("./lexer");
25
+ Object.defineProperty(exports, "Lexer", { enumerable: true, get: function () { return lexer_1.Lexer; } });
26
+ var parser_1 = require("./parser");
27
+ Object.defineProperty(exports, "Parser", { enumerable: true, get: function () { return parser_1.Parser; } });
22
28
  var compile_3 = require("./compile");
23
29
  Object.defineProperty(exports, "preprocessSource", { enumerable: true, get: function () { return compile_3.preprocessSource; } });
24
30
  Object.defineProperty(exports, "preprocessSourceWithMetadata", { enumerable: true, get: function () { return compile_3.preprocessSourceWithMetadata; } });
25
31
  var mc_validator_1 = require("./mc-validator");
26
32
  Object.defineProperty(exports, "MCCommandValidator", { enumerable: true, get: function () { return mc_validator_1.MCCommandValidator; } });
33
+ // Incremental compilation
34
+ var index_1 = require("./cache/index");
35
+ Object.defineProperty(exports, "FileCache", { enumerable: true, get: function () { return index_1.FileCache; } });
36
+ Object.defineProperty(exports, "hashFile", { enumerable: true, get: function () { return index_1.hashFile; } });
37
+ var deps_1 = require("./cache/deps");
38
+ Object.defineProperty(exports, "DependencyGraph", { enumerable: true, get: function () { return deps_1.DependencyGraph; } });
39
+ Object.defineProperty(exports, "parseImports", { enumerable: true, get: function () { return deps_1.parseImports; } });
40
+ var incremental_1 = require("./cache/incremental");
41
+ Object.defineProperty(exports, "compileIncremental", { enumerable: true, get: function () { return incremental_1.compileIncremental; } });
42
+ Object.defineProperty(exports, "resetCompileCache", { enumerable: true, get: function () { return incremental_1.resetCompileCache; } });
27
43
  /**
28
44
  * Check RedScript source code for errors without generating output.
45
+ * Runs the full compile pipeline (lex → parse → HIR → MIR → LIR → emit)
46
+ * to catch type-level and lowering errors, not just parse errors.
29
47
  *
30
48
  * @param source - The RedScript source code
31
49
  * @param namespace - Optional namespace
32
50
  * @returns null if no errors, or an error object
33
51
  */
34
52
  function check(source, namespace = 'redscript', filePath) {
53
+ return checkWithWarnings(source, namespace, filePath).error;
54
+ }
55
+ /**
56
+ * Like check(), but also returns warnings (e.g., tick budget analysis).
57
+ */
58
+ function checkWithWarnings(source, namespace = 'redscript', filePath) {
35
59
  try {
36
- const preprocessedSource = (0, compile_1.preprocessSource)(source, { filePath });
37
- const tokens = new lexer_1.Lexer(preprocessedSource, filePath).tokenize();
38
- new parser_1.Parser(tokens, preprocessedSource, filePath).parse(namespace);
39
- return null;
60
+ const result = (0, compile_1.compile)(source, { namespace, filePath });
61
+ return { error: null, warnings: result.warnings };
40
62
  }
41
63
  catch (err) {
42
- return err;
64
+ return { error: err, warnings: [] };
43
65
  }
44
66
  }
45
67
  //# sourceMappingURL=index.js.map
@@ -5,7 +5,7 @@
5
5
  * Handles special cases like entity selectors vs decorators,
6
6
  * range literals, and raw commands.
7
7
  */
8
- export type TokenKind = 'fn' | 'let' | 'const' | 'if' | 'else' | 'while' | 'for' | 'foreach' | 'match' | 'return' | 'break' | 'continue' | 'as' | 'at' | 'in' | 'is' | 'struct' | 'impl' | 'enum' | 'trigger' | 'namespace' | 'module' | 'execute' | 'run' | 'unless' | 'declare' | 'int' | 'bool' | 'float' | 'string' | 'void' | 'BlockPos' | 'true' | 'false' | 'selector' | 'decorator' | 'int_lit' | 'float_lit' | 'byte_lit' | 'short_lit' | 'long_lit' | 'double_lit' | 'string_lit' | 'f_string' | 'range_lit' | 'rel_coord' | 'local_coord' | '+' | '-' | '*' | '/' | '%' | '~' | '^' | '==' | '!=' | '<' | '<=' | '>' | '>=' | '&&' | '||' | '!' | '=' | '+=' | '-=' | '*=' | '/=' | '%=' | '{' | '}' | '(' | ')' | '[' | ']' | ',' | ';' | ':' | '::' | '->' | '=>' | '.' | 'ident' | 'mc_name' | 'raw_cmd' | 'eof';
8
+ export type TokenKind = 'fn' | 'let' | 'const' | 'if' | 'else' | 'while' | 'for' | 'foreach' | 'match' | 'return' | 'break' | 'continue' | 'as' | 'at' | 'in' | 'is' | 'struct' | 'impl' | 'enum' | 'trigger' | 'namespace' | 'module' | 'execute' | 'run' | 'unless' | 'declare' | 'export' | 'int' | 'bool' | 'float' | 'string' | 'void' | 'BlockPos' | 'true' | 'false' | 'selector' | 'decorator' | 'int_lit' | 'float_lit' | 'byte_lit' | 'short_lit' | 'long_lit' | 'double_lit' | 'string_lit' | 'f_string' | 'range_lit' | 'rel_coord' | 'local_coord' | '+' | '-' | '*' | '/' | '%' | '~' | '^' | '==' | '!=' | '<' | '<=' | '>' | '>=' | '&&' | '||' | '!' | '=' | '+=' | '-=' | '*=' | '/=' | '%=' | '{' | '}' | '(' | ')' | '[' | ']' | ',' | ';' | ':' | '::' | '->' | '=>' | '.' | 'ident' | 'mc_name' | 'raw_cmd' | 'eof';
9
9
  export interface Token {
10
10
  kind: TokenKind;
11
11
  value: string;
@@ -39,6 +39,7 @@ const KEYWORDS = {
39
39
  run: 'run',
40
40
  unless: 'unless',
41
41
  declare: 'declare',
42
+ export: 'export',
42
43
  int: 'int',
43
44
  bool: 'bool',
44
45
  float: 'float',
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Static Tick Budget Analysis — Phase 1a
3
+ *
4
+ * Estimates the number of MC commands a function will execute at runtime.
5
+ * Used to warn when loops may exceed Minecraft's maxCommandChainLength (65536).
6
+ *
7
+ * In LIR, loops are represented as mutually-recursive function calls
8
+ * (e.g., fn__header ↔ fn__body). This module detects call-graph cycles
9
+ * and multiplies the loop body cost by an estimated iteration count.
10
+ */
11
+ import type { LIRModule } from './types';
12
+ /** Warning threshold: suggest @coroutine */
13
+ export declare const BUDGET_WARN_THRESHOLD = 32768;
14
+ /** Error threshold: likely exceeds maxCommandChainLength */
15
+ export declare const BUDGET_ERROR_THRESHOLD = 65536;
16
+ export interface BudgetDiagnostic {
17
+ level: 'warning' | 'error';
18
+ fnName: string;
19
+ estimatedCommands: number;
20
+ message: string;
21
+ }
22
+ /**
23
+ * Estimate the total command count for a function, including callees.
24
+ *
25
+ * @param fnName - Name of the function to estimate
26
+ * @param mod - The LIR module
27
+ * @returns Estimated number of MC commands
28
+ */
29
+ export declare function estimateCommandCount(fnName: string, mod: LIRModule): number;
30
+ /**
31
+ * Analyze all "top-level" functions in the module for tick budget violations.
32
+ *
33
+ * @param mod - The LIR module to analyze
34
+ * @param coroutineFunctions - Set of function names marked @coroutine (skip these)
35
+ * @returns Array of budget diagnostics (warnings and errors)
36
+ */
37
+ export declare function analyzeBudget(mod: LIRModule, coroutineFunctions?: Set<string>): BudgetDiagnostic[];
@@ -0,0 +1,280 @@
1
+ "use strict";
2
+ /**
3
+ * Static Tick Budget Analysis — Phase 1a
4
+ *
5
+ * Estimates the number of MC commands a function will execute at runtime.
6
+ * Used to warn when loops may exceed Minecraft's maxCommandChainLength (65536).
7
+ *
8
+ * In LIR, loops are represented as mutually-recursive function calls
9
+ * (e.g., fn__header ↔ fn__body). This module detects call-graph cycles
10
+ * and multiplies the loop body cost by an estimated iteration count.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.BUDGET_ERROR_THRESHOLD = exports.BUDGET_WARN_THRESHOLD = void 0;
14
+ exports.estimateCommandCount = estimateCommandCount;
15
+ exports.analyzeBudget = analyzeBudget;
16
+ /** Default estimated iteration count when the upper bound is unknown */
17
+ const DEFAULT_LOOP_ITERATIONS = 100;
18
+ /** Warning threshold: suggest @coroutine */
19
+ exports.BUDGET_WARN_THRESHOLD = 32768;
20
+ /** Error threshold: likely exceeds maxCommandChainLength */
21
+ exports.BUDGET_ERROR_THRESHOLD = 65536;
22
+ // ---------------------------------------------------------------------------
23
+ // Call graph utilities
24
+ // ---------------------------------------------------------------------------
25
+ /** Extract all function names called by an instruction */
26
+ function getCalledFunctions(instr) {
27
+ switch (instr.kind) {
28
+ case 'call':
29
+ case 'call_macro':
30
+ return [instr.fn];
31
+ case 'call_if_matches':
32
+ case 'call_unless_matches':
33
+ case 'call_if_score':
34
+ case 'call_unless_score':
35
+ case 'call_context':
36
+ return [instr.fn];
37
+ case 'store_cmd_to_score':
38
+ // The nested cmd may also be a call
39
+ return getCalledFunctions(instr.cmd);
40
+ default:
41
+ return [];
42
+ }
43
+ }
44
+ /** Build adjacency list: fnName → set of called function names (module-local only) */
45
+ function buildCallGraph(mod) {
46
+ const fnNames = new Set(mod.functions.map(f => f.name));
47
+ const graph = new Map();
48
+ for (const fn of mod.functions) {
49
+ const callees = new Set();
50
+ for (const instr of fn.instructions) {
51
+ for (const callee of getCalledFunctions(instr)) {
52
+ // Strip namespace prefix to match local function names
53
+ const local = stripNamespace(callee, mod.namespace);
54
+ if (fnNames.has(local)) {
55
+ callees.add(local);
56
+ }
57
+ }
58
+ }
59
+ graph.set(fn.name, callees);
60
+ }
61
+ return graph;
62
+ }
63
+ /** Strip "namespace:" prefix from a qualified function name */
64
+ function stripNamespace(qualifiedName, namespace) {
65
+ const prefix = `${namespace}:`;
66
+ if (qualifiedName.startsWith(prefix)) {
67
+ return qualifiedName.slice(prefix.length);
68
+ }
69
+ return qualifiedName;
70
+ }
71
+ /** Find all strongly connected components (Tarjan's algorithm) */
72
+ function findSCCs(graph) {
73
+ let index = 0;
74
+ const stack = [];
75
+ const onStack = new Set();
76
+ const indices = new Map();
77
+ const lowlinks = new Map();
78
+ const sccs = [];
79
+ function strongconnect(v) {
80
+ indices.set(v, index);
81
+ lowlinks.set(v, index);
82
+ index++;
83
+ stack.push(v);
84
+ onStack.add(v);
85
+ for (const w of graph.get(v) ?? []) {
86
+ if (!indices.has(w)) {
87
+ strongconnect(w);
88
+ lowlinks.set(v, Math.min(lowlinks.get(v), lowlinks.get(w)));
89
+ }
90
+ else if (onStack.has(w)) {
91
+ lowlinks.set(v, Math.min(lowlinks.get(v), indices.get(w)));
92
+ }
93
+ }
94
+ if (lowlinks.get(v) === indices.get(v)) {
95
+ const scc = [];
96
+ let w;
97
+ do {
98
+ w = stack.pop();
99
+ onStack.delete(w);
100
+ scc.push(w);
101
+ } while (w !== v);
102
+ sccs.push(scc);
103
+ }
104
+ }
105
+ for (const v of graph.keys()) {
106
+ if (!indices.has(v)) {
107
+ strongconnect(v);
108
+ }
109
+ }
110
+ return sccs;
111
+ }
112
+ // ---------------------------------------------------------------------------
113
+ // Command count estimation
114
+ // ---------------------------------------------------------------------------
115
+ /** Count the number of MC commands an instruction generates (non-recursive) */
116
+ function instrCommandCount(instr) {
117
+ switch (instr.kind) {
118
+ case 'store_cmd_to_score':
119
+ // The execute store wrapper + the inner command
120
+ return 1;
121
+ default:
122
+ // Each LIR instruction maps to ~1 MC command
123
+ return 1;
124
+ }
125
+ }
126
+ /** Count raw (non-call) commands in a function */
127
+ function localCommandCount(fn) {
128
+ let count = 0;
129
+ for (const instr of fn.instructions) {
130
+ count += instrCommandCount(instr);
131
+ }
132
+ return count;
133
+ }
134
+ /**
135
+ * Try to extract a constant loop bound from a loop's LIR functions.
136
+ *
137
+ * Looks for patterns like:
138
+ * score_set <limit_slot> <N>
139
+ * in the cycle's functions, where N is used as a comparison bound.
140
+ *
141
+ * Returns the bound if found, otherwise DEFAULT_LOOP_ITERATIONS.
142
+ */
143
+ function estimateLoopIterations(cycleFns) {
144
+ // Look for score_set instructions that might be loop bounds
145
+ // Heuristic: find the largest constant set in the cycle's callers
146
+ // that looks like a loop limit (typically set before the loop)
147
+ for (const fn of cycleFns) {
148
+ for (const instr of fn.instructions) {
149
+ if (instr.kind === 'call_if_matches' || instr.kind === 'call_unless_matches') {
150
+ // Parse range like "..999" or "0..999" to extract upper bound
151
+ const range = instr.range;
152
+ const match = range.match(/\.\.(\d+)/);
153
+ if (match) {
154
+ return parseInt(match[1], 10) + 1;
155
+ }
156
+ }
157
+ }
158
+ }
159
+ return DEFAULT_LOOP_ITERATIONS;
160
+ }
161
+ /**
162
+ * Estimate the total command count for a function, including callees.
163
+ *
164
+ * @param fnName - Name of the function to estimate
165
+ * @param mod - The LIR module
166
+ * @returns Estimated number of MC commands
167
+ */
168
+ function estimateCommandCount(fnName, mod) {
169
+ const fnMap = new Map();
170
+ for (const fn of mod.functions) {
171
+ fnMap.set(fn.name, fn);
172
+ }
173
+ const callGraph = buildCallGraph(mod);
174
+ const sccs = findSCCs(callGraph);
175
+ // Map each function to its SCC
176
+ const fnToSCC = new Map();
177
+ for (const scc of sccs) {
178
+ for (const name of scc) {
179
+ fnToSCC.set(name, scc);
180
+ }
181
+ }
182
+ // Memoize estimated counts
183
+ const memo = new Map();
184
+ function estimate(name, visiting) {
185
+ if (memo.has(name))
186
+ return memo.get(name);
187
+ const fn = fnMap.get(name);
188
+ if (!fn)
189
+ return 0;
190
+ // Detect cycle: if we're already visiting this function, return 0
191
+ // (cycle cost is handled at the SCC level)
192
+ if (visiting.has(name))
193
+ return 0;
194
+ visiting.add(name);
195
+ const scc = fnToSCC.get(name);
196
+ const isCyclic = scc.length > 1 || (scc.length === 1 && callGraph.get(name)?.has(name));
197
+ if (isCyclic) {
198
+ // Sum local commands across all functions in the cycle
199
+ let cycleLocalCost = 0;
200
+ for (const member of scc) {
201
+ const memberFn = fnMap.get(member);
202
+ if (memberFn)
203
+ cycleLocalCost += localCommandCount(memberFn);
204
+ }
205
+ // Estimate iterations
206
+ const cycleFns = scc.map(n => fnMap.get(n)).filter(Boolean);
207
+ const iterations = estimateLoopIterations(cycleFns);
208
+ // Also add cost of non-cycle callees
209
+ let externalCalleeCost = 0;
210
+ for (const member of scc) {
211
+ for (const callee of callGraph.get(member) ?? []) {
212
+ if (!scc.includes(callee)) {
213
+ externalCalleeCost += estimate(callee, new Set(visiting));
214
+ }
215
+ }
216
+ }
217
+ const total = (cycleLocalCost + externalCalleeCost) * iterations;
218
+ // Memoize for all members of this SCC
219
+ for (const member of scc) {
220
+ memo.set(member, total);
221
+ }
222
+ visiting.delete(name);
223
+ return total;
224
+ }
225
+ // Non-cyclic: local cost + callee costs
226
+ let total = localCommandCount(fn);
227
+ for (const callee of callGraph.get(name) ?? []) {
228
+ total += estimate(callee, visiting);
229
+ }
230
+ memo.set(name, total);
231
+ visiting.delete(name);
232
+ return total;
233
+ }
234
+ return estimate(fnName, new Set());
235
+ }
236
+ // ---------------------------------------------------------------------------
237
+ // Budget analysis for a full module
238
+ // ---------------------------------------------------------------------------
239
+ /**
240
+ * Analyze all "top-level" functions in the module for tick budget violations.
241
+ *
242
+ * @param mod - The LIR module to analyze
243
+ * @param coroutineFunctions - Set of function names marked @coroutine (skip these)
244
+ * @returns Array of budget diagnostics (warnings and errors)
245
+ */
246
+ function analyzeBudget(mod, coroutineFunctions = new Set()) {
247
+ const diagnostics = [];
248
+ // Only analyze user-defined "root" functions, not compiler-generated helper blocks
249
+ // Helper blocks have names like "fnname__blockid"
250
+ for (const fn of mod.functions) {
251
+ // Skip coroutine-annotated functions
252
+ if (coroutineFunctions.has(fn.name))
253
+ continue;
254
+ // Skip compiler-generated helper functions (contain __)
255
+ if (fn.name.includes('__'))
256
+ continue;
257
+ // Skip coroutine-generated functions
258
+ if (fn.name.startsWith('_coro_'))
259
+ continue;
260
+ const estimated = estimateCommandCount(fn.name, mod);
261
+ if (estimated > exports.BUDGET_ERROR_THRESHOLD) {
262
+ diagnostics.push({
263
+ level: 'error',
264
+ fnName: fn.name,
265
+ estimatedCommands: estimated,
266
+ message: `function '${fn.name}' may exceed tick budget (~${estimated} commands), this will likely crash. Consider @coroutine or reducing loop iterations`,
267
+ });
268
+ }
269
+ else if (estimated > exports.BUDGET_WARN_THRESHOLD) {
270
+ diagnostics.push({
271
+ level: 'warning',
272
+ fnName: fn.name,
273
+ estimatedCommands: estimated,
274
+ message: `loop may exceed tick budget (~${estimated} commands), consider @coroutine`,
275
+ });
276
+ }
277
+ }
278
+ return diagnostics;
279
+ }
280
+ //# sourceMappingURL=budget.js.map
@@ -62,6 +62,15 @@ class LoweringContext {
62
62
  addFunction(fn) {
63
63
  this.functions.push(fn);
64
64
  }
65
+ /** Attach sourceLoc to newly added instructions (from the given start index onward) */
66
+ tagSourceLoc(instrs, fromIndex, sourceLoc) {
67
+ if (!sourceLoc)
68
+ return;
69
+ for (let i = fromIndex; i < instrs.length; i++) {
70
+ if (!instrs[i].sourceLoc)
71
+ instrs[i].sourceLoc = sourceLoc;
72
+ }
73
+ }
65
74
  analyzeBlocks(fn) {
66
75
  this.currentMIRFn = fn;
67
76
  this.multiPredBlocks.clear();
@@ -156,6 +165,11 @@ function lowerBlock(blockId, fn, ctx, instrs, visited) {
156
165
  // Instruction lowering
157
166
  // ---------------------------------------------------------------------------
158
167
  function lowerInstr(instr, fn, ctx, instrs) {
168
+ const beforeLen = instrs.length;
169
+ lowerInstrInner(instr, fn, ctx, instrs);
170
+ ctx.tagSourceLoc(instrs, beforeLen, instr.sourceLoc);
171
+ }
172
+ function lowerInstrInner(instr, fn, ctx, instrs) {
159
173
  switch (instr.kind) {
160
174
  case 'const': {
161
175
  instrs.push({ kind: 'score_set', dst: ctx.slot(instr.dst), value: instr.value });
@@ -326,6 +340,11 @@ function lowerInstr(instr, fn, ctx, instrs) {
326
340
  // Terminator lowering
327
341
  // ---------------------------------------------------------------------------
328
342
  function lowerTerminator(term, fn, ctx, instrs, visited) {
343
+ const beforeLen = instrs.length;
344
+ lowerTerminatorInner(term, fn, ctx, instrs, visited);
345
+ ctx.tagSourceLoc(instrs, beforeLen, term.sourceLoc);
346
+ }
347
+ function lowerTerminatorInner(term, fn, ctx, instrs, visited) {
329
348
  switch (term.kind) {
330
349
  case 'return': {
331
350
  if (term.value) {
@@ -6,13 +6,16 @@
6
6
  *
7
7
  * Spec: docs/compiler-pipeline-redesign.md § "LIR Instruction Set"
8
8
  */
9
- import type { CmpOp, NBTType, ExecuteSubcmd } from '../mir/types';
9
+ import type { CmpOp, NBTType, ExecuteSubcmd, SourceLoc } from '../mir/types';
10
10
  export interface Slot {
11
11
  player: string;
12
12
  obj: string;
13
13
  }
14
- export type { CmpOp, NBTType, ExecuteSubcmd };
15
- export type LIRInstr = {
14
+ export type { CmpOp, NBTType, ExecuteSubcmd, SourceLoc };
15
+ export type LIRInstrBase = {
16
+ sourceLoc?: SourceLoc;
17
+ };
18
+ export type LIRInstr = LIRInstrBase & ({
16
19
  kind: 'score_set';
17
20
  dst: Slot;
18
21
  value: number;
@@ -122,7 +125,7 @@ export type LIRInstr = {
122
125
  } | {
123
126
  kind: 'raw';
124
127
  cmd: string;
125
- };
128
+ });
126
129
  export interface LIRFunction {
127
130
  name: string;
128
131
  instructions: LIRInstr[];
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * RedScript LSP server entry point.
4
+ * Communicates over stdio (standard LSP protocol).
5
+ *
6
+ * Usage: redscript-lsp (started by your editor's LSP client)
7
+ */
8
+ import './server';
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * RedScript LSP server entry point.
5
+ * Communicates over stdio (standard LSP protocol).
6
+ *
7
+ * Usage: redscript-lsp (started by your editor's LSP client)
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ require("./server");
11
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1,11 @@
1
+ /**
2
+ * RedScript Language Server
3
+ *
4
+ * Implements LSP (Language Server Protocol) over stdio.
5
+ * Features:
6
+ * - Diagnostics (type errors, parse errors)
7
+ * - Hover (type information)
8
+ * - Go-to-definition (functions, variables)
9
+ * - Completion (keywords, functions, builtins)
10
+ */
11
+ export {};