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.
- package/.claudeignore +21 -0
- package/README.md +12 -16
- package/README.zh.md +2 -2
- package/dist/cli.js +0 -0
- package/dist/src/__tests__/budget.test.js +261 -0
- package/dist/src/__tests__/diagnostics.test.js +2 -3
- package/dist/src/__tests__/e2e/coroutine.test.d.ts +7 -0
- package/dist/src/__tests__/e2e/coroutine.test.js +132 -0
- package/dist/{src2 → src}/__tests__/e2e/macros.test.js +1 -1
- package/dist/{src2 → src}/__tests__/e2e/migrate.test.js +1 -1
- package/dist/src/__tests__/e2e/stdlib-e2e.test.d.ts +10 -0
- package/dist/src/__tests__/e2e/stdlib-e2e.test.js +324 -0
- package/dist/src/__tests__/enum.test.d.ts +10 -0
- package/dist/src/__tests__/enum.test.js +389 -0
- package/dist/src/__tests__/generics.test.d.ts +14 -0
- package/dist/src/__tests__/generics.test.js +367 -0
- package/dist/{src2 → src}/__tests__/hir/desugar.test.js +2 -2
- package/dist/src/__tests__/incremental.test.d.ts +5 -0
- package/dist/src/__tests__/incremental.test.js +308 -0
- package/dist/src/__tests__/lsp.test.d.ts +7 -0
- package/dist/src/__tests__/lsp.test.js +245 -0
- package/dist/src/__tests__/mc-version.test.d.ts +10 -0
- package/dist/src/__tests__/mc-version.test.js +154 -0
- package/dist/{src2 → src}/__tests__/mir/arithmetic.test.js +2 -2
- package/dist/{src2 → src}/__tests__/mir/control-flow.test.js +2 -2
- package/dist/src/__tests__/modules.test.d.ts +7 -0
- package/dist/src/__tests__/modules.test.js +333 -0
- package/dist/src/__tests__/optimizer/coroutine.test.d.ts +12 -0
- package/dist/src/__tests__/optimizer/coroutine.test.js +251 -0
- package/dist/src/__tests__/optimizer/interprocedural.test.js +145 -0
- package/dist/src/__tests__/optimizer/lir/const_imm.test.js +138 -0
- package/dist/src/__tests__/optimizer/lir/dead_slot.test.js +141 -0
- package/dist/src/__tests__/optimizer/lir/peephole.test.js +126 -0
- package/dist/src/__tests__/optimizer/lir/pipeline.test.js +84 -0
- package/dist/src/__tests__/optimizer/nbt-batch.test.js +110 -0
- package/dist/src/__tests__/optimizer/selector-cache.test.js +103 -0
- package/dist/src/__tests__/optimizer/unroll.test.js +206 -0
- package/dist/src/__tests__/option.test.d.ts +14 -0
- package/dist/src/__tests__/option.test.js +275 -0
- package/dist/src/__tests__/schedule.test.d.ts +7 -0
- package/dist/src/__tests__/schedule.test.js +98 -0
- package/dist/src/__tests__/sourcemap.test.d.ts +7 -0
- package/dist/src/__tests__/sourcemap.test.js +227 -0
- package/dist/src/__tests__/tuple.test.d.ts +11 -0
- package/dist/src/__tests__/tuple.test.js +202 -0
- package/dist/src/__tests__/typechecker-strict.test.d.ts +10 -0
- package/dist/src/__tests__/typechecker-strict.test.js +197 -0
- package/dist/src/ast/types.d.ts +56 -2
- package/dist/src/cache/deps.d.ts +41 -0
- package/dist/src/cache/deps.js +158 -0
- package/dist/src/cache/incremental.d.ts +35 -0
- package/dist/src/cache/incremental.js +165 -0
- package/dist/src/cache/index.d.ts +37 -0
- package/dist/src/cache/index.js +152 -0
- package/dist/src/cli.js +76 -45
- package/dist/src/compile.d.ts +2 -2
- package/dist/src/compile.js +1 -1
- package/dist/src/diagnostics/index.d.ts +1 -1
- package/dist/src/diagnostics/index.js +8 -11
- package/dist/src/emit/compile.d.ts +29 -0
- package/dist/src/emit/compile.js +143 -0
- package/dist/{src2 → src}/emit/index.d.ts +9 -0
- package/dist/{src2 → src}/emit/index.js +59 -8
- package/dist/src/emit/modules.d.ts +29 -0
- package/dist/src/emit/modules.js +492 -0
- package/dist/src/emit/sourcemap.d.ts +53 -0
- package/dist/src/emit/sourcemap.js +73 -0
- package/dist/{src2 → src}/hir/lower.d.ts +1 -1
- package/dist/{src2 → src}/hir/lower.js +22 -1
- package/dist/src/hir/monomorphize.d.ts +22 -0
- package/dist/src/hir/monomorphize.js +379 -0
- package/dist/{src2 → src}/hir/types.d.ts +35 -2
- package/dist/src/index.d.ts +19 -2
- package/dist/src/index.js +36 -14
- package/dist/src/lexer/index.d.ts +1 -1
- package/dist/src/lexer/index.js +1 -0
- package/dist/src/lir/budget.d.ts +37 -0
- package/dist/src/lir/budget.js +280 -0
- package/dist/{src2 → src}/lir/lower.js +19 -0
- package/dist/{src2 → src}/lir/types.d.ts +7 -4
- package/dist/src/lsp/main.d.ts +8 -0
- package/dist/src/lsp/main.js +11 -0
- package/dist/src/lsp/server.d.ts +11 -0
- package/dist/src/lsp/server.js +352 -0
- package/dist/{src2 → src}/mir/lower.d.ts +1 -1
- package/dist/{src2 → src}/mir/lower.js +244 -10
- package/dist/{src2 → src}/mir/types.d.ts +10 -2
- package/dist/src/optimizer/coroutine.d.ts +34 -0
- package/dist/src/optimizer/coroutine.js +789 -0
- package/dist/src/optimizer/dce.d.ts +8 -34
- package/dist/src/optimizer/dce.js +146 -629
- package/dist/src/optimizer/interprocedural.d.ts +14 -0
- package/dist/src/optimizer/interprocedural.js +186 -0
- package/dist/src/optimizer/lir/const_imm.d.ts +12 -0
- package/dist/src/optimizer/lir/const_imm.js +139 -0
- package/dist/src/optimizer/lir/dead_slot.d.ts +14 -0
- package/dist/src/optimizer/lir/dead_slot.js +130 -0
- package/dist/src/optimizer/lir/peephole.d.ts +21 -0
- package/dist/src/optimizer/lir/peephole.js +52 -0
- package/dist/src/optimizer/lir/pipeline.d.ts +10 -0
- package/dist/src/optimizer/lir/pipeline.js +34 -0
- package/dist/src/optimizer/nbt-batch.d.ts +11 -0
- package/dist/src/optimizer/nbt-batch.js +51 -0
- package/dist/{src2 → src}/optimizer/pipeline.d.ts +4 -0
- package/dist/{src2 → src}/optimizer/pipeline.js +17 -1
- package/dist/src/optimizer/selector-cache.d.ts +22 -0
- package/dist/src/optimizer/selector-cache.js +100 -0
- package/dist/src/optimizer/unroll.d.ts +32 -0
- package/dist/src/optimizer/unroll.js +348 -0
- package/dist/src/parser/index.d.ts +8 -0
- package/dist/src/parser/index.js +204 -14
- package/dist/src/repl.d.ts +1 -1
- package/dist/src/typechecker/index.d.ts +4 -0
- package/dist/src/typechecker/index.js +198 -13
- package/dist/src/types/mc-version.d.ts +24 -0
- package/dist/src/types/mc-version.js +49 -0
- package/docs/ROADMAP.md +395 -0
- package/docs/compiler-pipeline-redesign.md +27 -10
- package/editors/vscode/out/extension.js +25176 -8000
- package/editors/vscode/package-lock.json +90 -6
- package/editors/vscode/package.json +3 -2
- package/editors/vscode/src/extension.ts +97 -67
- package/examples/showcase.mcrs +3 -3
- package/jest.config.js +1 -1
- package/package.json +9 -3
- package/src/__tests__/budget.test.ts +297 -0
- package/src/__tests__/diagnostics.test.ts +2 -3
- package/src/__tests__/e2e/coroutine.test.ts +142 -0
- package/{src2 → src}/__tests__/e2e/macros.test.ts +1 -1
- package/{src2 → src}/__tests__/e2e/migrate.test.ts +1 -1
- package/src/__tests__/e2e/stdlib-e2e.test.ts +348 -0
- package/src/__tests__/enum.test.ts +425 -0
- package/src/__tests__/generics.test.ts +390 -0
- package/{src2 → src}/__tests__/hir/desugar.test.ts +2 -2
- package/src/__tests__/incremental.test.ts +337 -0
- package/src/__tests__/lsp.test.ts +270 -0
- package/src/__tests__/mc-version.test.ts +178 -0
- package/{src2 → src}/__tests__/mir/arithmetic.test.ts +2 -2
- package/{src2 → src}/__tests__/mir/control-flow.test.ts +2 -2
- package/src/__tests__/modules.test.ts +365 -0
- package/src/__tests__/optimizer/coroutine.test.ts +312 -0
- package/src/__tests__/optimizer/interprocedural.test.ts +174 -0
- package/src/__tests__/optimizer/lir/const_imm.test.ts +151 -0
- package/src/__tests__/optimizer/lir/dead_slot.test.ts +156 -0
- package/src/__tests__/optimizer/lir/peephole.test.ts +136 -0
- package/src/__tests__/optimizer/lir/pipeline.test.ts +113 -0
- package/src/__tests__/optimizer/nbt-batch.test.ts +119 -0
- package/src/__tests__/optimizer/selector-cache.test.ts +112 -0
- package/src/__tests__/optimizer/unroll.test.ts +231 -0
- package/src/__tests__/option.test.ts +299 -0
- package/src/__tests__/schedule.test.ts +105 -0
- package/src/__tests__/sourcemap.test.ts +254 -0
- package/src/__tests__/tuple.test.ts +220 -0
- package/src/__tests__/typechecker-strict.test.ts +216 -0
- package/src/ast/types.ts +33 -2
- package/src/cache/deps.ts +132 -0
- package/src/cache/incremental.ts +173 -0
- package/src/cache/index.ts +135 -0
- package/src/cli.ts +88 -45
- package/src/compile.ts +2 -2
- package/src/diagnostics/index.ts +8 -11
- package/src/emit/compile.ts +177 -0
- package/{src2 → src}/emit/index.ts +72 -8
- package/src/emit/modules.ts +581 -0
- package/src/emit/sourcemap.ts +101 -0
- package/{src2 → src}/hir/lower.ts +29 -2
- package/src/hir/monomorphize.ts +416 -0
- package/{src2 → src}/hir/types.ts +15 -3
- package/src/index.ts +29 -10
- package/src/lexer/index.ts +2 -1
- package/src/lir/budget.ts +321 -0
- package/{src2 → src}/lir/lower.ts +32 -1
- package/{src2 → src}/lir/types.ts +7 -3
- package/src/lsp/main.ts +9 -0
- package/src/lsp/server.ts +414 -0
- package/{src2 → src}/mir/lower.ts +251 -8
- package/{src2 → src}/mir/types.ts +12 -1
- package/src/optimizer/coroutine.ts +996 -0
- package/{src2 → src}/optimizer/dce.ts +2 -1
- package/src/optimizer/interprocedural.ts +177 -0
- package/src/optimizer/lir/const_imm.ts +143 -0
- package/src/optimizer/lir/dead_slot.ts +123 -0
- package/src/optimizer/lir/peephole.ts +57 -0
- package/src/optimizer/lir/pipeline.ts +37 -0
- package/src/optimizer/nbt-batch.ts +50 -0
- package/{src2 → src}/optimizer/pipeline.ts +16 -1
- package/src/optimizer/selector-cache.ts +103 -0
- package/src/optimizer/unroll.ts +386 -0
- package/src/parser/index.ts +212 -15
- package/src/repl.ts +1 -1
- package/src/stdlib/math.mcrs +4 -4
- package/src/templates/quest.mcrs +4 -4
- package/src/typechecker/index.ts +215 -15
- package/src/types/mc-version.ts +46 -0
- package/tsconfig.json +1 -1
- package/.claude/commands/build-test.md +0 -10
- package/.claude/commands/deploy-demo.md +0 -12
- package/.claude/commands/stage-status.md +0 -13
- package/.claude/settings.json +0 -12
- package/CLAUDE.md +0 -231
- package/dist/__tests__/cli.test.js +0 -278
- package/dist/__tests__/codegen.test.js +0 -152
- package/dist/__tests__/compile-all.test.d.ts +0 -10
- package/dist/__tests__/compile-all.test.js +0 -108
- package/dist/__tests__/dce.test.js +0 -138
- package/dist/__tests__/diagnostics.test.d.ts +0 -4
- package/dist/__tests__/diagnostics.test.js +0 -149
- package/dist/__tests__/e2e.test.d.ts +0 -6
- package/dist/__tests__/e2e.test.js +0 -1847
- package/dist/__tests__/entity-types.test.js +0 -203
- package/dist/__tests__/formatter.test.js +0 -40
- package/dist/__tests__/lexer.test.js +0 -343
- package/dist/__tests__/lowering.test.js +0 -1015
- package/dist/__tests__/macro.test.d.ts +0 -8
- package/dist/__tests__/macro.test.js +0 -305
- package/dist/__tests__/mc-integration.test.d.ts +0 -12
- package/dist/__tests__/mc-integration.test.js +0 -819
- package/dist/__tests__/mc-syntax.test.js +0 -124
- package/dist/__tests__/nbt.test.js +0 -82
- package/dist/__tests__/optimizer-advanced.test.js +0 -124
- package/dist/__tests__/optimizer.test.d.ts +0 -1
- package/dist/__tests__/optimizer.test.js +0 -149
- package/dist/__tests__/parser.test.d.ts +0 -1
- package/dist/__tests__/parser.test.js +0 -807
- package/dist/__tests__/repl.test.d.ts +0 -1
- package/dist/__tests__/repl.test.js +0 -27
- package/dist/__tests__/runtime.test.d.ts +0 -1
- package/dist/__tests__/runtime.test.js +0 -289
- package/dist/__tests__/stdlib-advanced.test.d.ts +0 -4
- package/dist/__tests__/stdlib-advanced.test.js +0 -378
- package/dist/__tests__/stdlib-bigint.test.d.ts +0 -7
- package/dist/__tests__/stdlib-bigint.test.js +0 -428
- package/dist/__tests__/stdlib-math.test.d.ts +0 -7
- package/dist/__tests__/stdlib-math.test.js +0 -352
- package/dist/__tests__/stdlib-vec.test.d.ts +0 -4
- package/dist/__tests__/stdlib-vec.test.js +0 -264
- package/dist/__tests__/structure-optimizer.test.d.ts +0 -1
- package/dist/__tests__/structure-optimizer.test.js +0 -33
- package/dist/__tests__/typechecker.test.d.ts +0 -1
- package/dist/__tests__/typechecker.test.js +0 -552
- package/dist/__tests__/var-allocator.test.d.ts +0 -1
- package/dist/__tests__/var-allocator.test.js +0 -69
- package/dist/ast/types.d.ts +0 -514
- package/dist/ast/types.js +0 -9
- package/dist/builtins/metadata.d.ts +0 -36
- package/dist/builtins/metadata.js +0 -1014
- package/dist/cli.d.ts +0 -11
- package/dist/codegen/cmdblock/index.d.ts +0 -26
- package/dist/codegen/cmdblock/index.js +0 -45
- package/dist/codegen/mcfunction/index.d.ts +0 -40
- package/dist/codegen/mcfunction/index.js +0 -606
- package/dist/codegen/structure/index.d.ts +0 -24
- package/dist/codegen/structure/index.js +0 -279
- package/dist/codegen/var-allocator.d.ts +0 -45
- package/dist/codegen/var-allocator.js +0 -104
- package/dist/compile.d.ts +0 -68
- package/dist/data/arena/function/__load.mcfunction +0 -6
- package/dist/data/arena/function/__tick.mcfunction +0 -2
- package/dist/data/arena/function/announce_leaders/else_1.mcfunction +0 -3
- package/dist/data/arena/function/announce_leaders/foreach_0/merge_2.mcfunction +0 -1
- package/dist/data/arena/function/announce_leaders/foreach_0/then_0.mcfunction +0 -3
- package/dist/data/arena/function/announce_leaders/foreach_0.mcfunction +0 -7
- package/dist/data/arena/function/announce_leaders/foreach_1/merge_2.mcfunction +0 -1
- package/dist/data/arena/function/announce_leaders/foreach_1/then_0.mcfunction +0 -4
- package/dist/data/arena/function/announce_leaders/foreach_1.mcfunction +0 -6
- package/dist/data/arena/function/announce_leaders/merge_2.mcfunction +0 -1
- package/dist/data/arena/function/announce_leaders/then_0.mcfunction +0 -4
- package/dist/data/arena/function/announce_leaders.mcfunction +0 -6
- package/dist/data/arena/function/arena_tick/merge_2.mcfunction +0 -1
- package/dist/data/arena/function/arena_tick/then_0.mcfunction +0 -4
- package/dist/data/arena/function/arena_tick.mcfunction +0 -11
- package/dist/data/counter/function/__load.mcfunction +0 -5
- package/dist/data/counter/function/__tick.mcfunction +0 -2
- package/dist/data/counter/function/counter_tick/merge_2.mcfunction +0 -1
- package/dist/data/counter/function/counter_tick/then_0.mcfunction +0 -3
- package/dist/data/counter/function/counter_tick.mcfunction +0 -11
- package/dist/data/gcd2/function/__load.mcfunction +0 -3
- package/dist/data/gcd2/function/abs/merge_2.mcfunction +0 -3
- package/dist/data/gcd2/function/abs/then_0.mcfunction +0 -5
- package/dist/data/gcd2/function/abs.mcfunction +0 -7
- package/dist/data/gcd2/function/gcd/loop_body_1.mcfunction +0 -7
- package/dist/data/gcd2/function/gcd/loop_check_0.mcfunction +0 -5
- package/dist/data/gcd2/function/gcd/loop_exit_2.mcfunction +0 -3
- package/dist/data/gcd2/function/gcd.mcfunction +0 -14
- package/dist/data/gcd3/function/__load.mcfunction +0 -3
- package/dist/data/gcd3/function/abs/merge_2.mcfunction +0 -3
- package/dist/data/gcd3/function/abs/then_0.mcfunction +0 -5
- package/dist/data/gcd3/function/abs.mcfunction +0 -7
- package/dist/data/gcd3/function/gcd/loop_body_1.mcfunction +0 -7
- package/dist/data/gcd3/function/gcd/loop_check_0.mcfunction +0 -5
- package/dist/data/gcd3/function/gcd/loop_exit_2.mcfunction +0 -3
- package/dist/data/gcd3/function/gcd.mcfunction +0 -14
- package/dist/data/gcd3/function/test.mcfunction +0 -7
- package/dist/data/gcd3nm/function/__load.mcfunction +0 -3
- package/dist/data/gcd3nm/function/abs/merge_2.mcfunction +0 -3
- package/dist/data/gcd3nm/function/abs/then_0.mcfunction +0 -5
- package/dist/data/gcd3nm/function/abs.mcfunction +0 -7
- package/dist/data/gcd3nm/function/gcd/loop_body_1.mcfunction +0 -7
- package/dist/data/gcd3nm/function/gcd/loop_check_0.mcfunction +0 -5
- package/dist/data/gcd3nm/function/gcd/loop_exit_2.mcfunction +0 -3
- package/dist/data/gcd3nm/function/gcd.mcfunction +0 -14
- package/dist/data/gcd3nm/function/test.mcfunction +0 -7
- package/dist/data/gcd_test/function/__load.mcfunction +0 -3
- package/dist/data/gcd_test/function/abs/merge_2.mcfunction +0 -3
- package/dist/data/gcd_test/function/abs/then_0.mcfunction +0 -5
- package/dist/data/gcd_test/function/abs.mcfunction +0 -7
- package/dist/data/gcd_test/function/gcd/loop_body_1.mcfunction +0 -7
- package/dist/data/gcd_test/function/gcd/loop_check_0.mcfunction +0 -5
- package/dist/data/gcd_test/function/gcd/loop_exit_2.mcfunction +0 -3
- package/dist/data/gcd_test/function/gcd.mcfunction +0 -14
- package/dist/data/isqrttest/function/__load.mcfunction +0 -6
- package/dist/data/isqrttest/function/isqrt/loop_body_4.mcfunction +0 -12
- package/dist/data/isqrttest/function/isqrt/loop_check_3.mcfunction +0 -5
- package/dist/data/isqrttest/function/isqrt/loop_exit_5.mcfunction +0 -3
- package/dist/data/isqrttest/function/isqrt/merge_2.mcfunction +0 -4
- package/dist/data/isqrttest/function/isqrt/merge_8.mcfunction +0 -6
- package/dist/data/isqrttest/function/isqrt/then_0.mcfunction +0 -3
- package/dist/data/isqrttest/function/isqrt/then_6.mcfunction +0 -3
- package/dist/data/isqrttest/function/isqrt.mcfunction +0 -7
- package/dist/data/isqrttest/function/test.mcfunction +0 -6
- package/dist/data/mathtest/function/__load.mcfunction +0 -3
- package/dist/data/mathtest/function/abs/merge_2.mcfunction +0 -3
- package/dist/data/mathtest/function/abs/then_0.mcfunction +0 -5
- package/dist/data/mathtest/function/abs.mcfunction +0 -6
- package/dist/data/mathtest/function/test.mcfunction +0 -5
- package/dist/data/minecraft/tags/function/load.json +0 -5
- package/dist/data/minecraft/tags/function/tick.json +0 -5
- package/dist/data/mypack/function/__load.mcfunction +0 -13
- package/dist/data/mypack/function/_atan_init.mcfunction +0 -2
- package/dist/data/mypack/function/abs/merge_2.mcfunction +0 -3
- package/dist/data/mypack/function/abs/then_0.mcfunction +0 -5
- package/dist/data/mypack/function/abs.mcfunction +0 -6
- package/dist/data/mypack/function/atan2_fixed/__sgi_1.mcfunction +0 -2
- package/dist/data/mypack/function/atan2_fixed/else_34.mcfunction +0 -3
- package/dist/data/mypack/function/atan2_fixed/loop_body_31.mcfunction +0 -19
- package/dist/data/mypack/function/atan2_fixed/loop_check_30.mcfunction +0 -5
- package/dist/data/mypack/function/atan2_fixed/loop_exit_32.mcfunction +0 -6
- package/dist/data/mypack/function/atan2_fixed/merge_11.mcfunction +0 -6
- package/dist/data/mypack/function/atan2_fixed/merge_14.mcfunction +0 -3
- package/dist/data/mypack/function/atan2_fixed/merge_17.mcfunction +0 -6
- package/dist/data/mypack/function/atan2_fixed/merge_2.mcfunction +0 -5
- package/dist/data/mypack/function/atan2_fixed/merge_20.mcfunction +0 -5
- package/dist/data/mypack/function/atan2_fixed/merge_23.mcfunction +0 -5
- package/dist/data/mypack/function/atan2_fixed/merge_26.mcfunction +0 -6
- package/dist/data/mypack/function/atan2_fixed/merge_29.mcfunction +0 -4
- package/dist/data/mypack/function/atan2_fixed/merge_38.mcfunction +0 -5
- package/dist/data/mypack/function/atan2_fixed/merge_41.mcfunction +0 -5
- package/dist/data/mypack/function/atan2_fixed/merge_44.mcfunction +0 -5
- package/dist/data/mypack/function/atan2_fixed/merge_47.mcfunction +0 -5
- package/dist/data/mypack/function/atan2_fixed/merge_5.mcfunction +0 -5
- package/dist/data/mypack/function/atan2_fixed/merge_8.mcfunction +0 -3
- package/dist/data/mypack/function/atan2_fixed/then_0.mcfunction +0 -5
- package/dist/data/mypack/function/atan2_fixed/then_12.mcfunction +0 -3
- package/dist/data/mypack/function/atan2_fixed/then_15.mcfunction +0 -5
- package/dist/data/mypack/function/atan2_fixed/then_18.mcfunction +0 -5
- package/dist/data/mypack/function/atan2_fixed/then_21.mcfunction +0 -3
- package/dist/data/mypack/function/atan2_fixed/then_24.mcfunction +0 -3
- package/dist/data/mypack/function/atan2_fixed/then_27.mcfunction +0 -6
- package/dist/data/mypack/function/atan2_fixed/then_3.mcfunction +0 -3
- package/dist/data/mypack/function/atan2_fixed/then_33.mcfunction +0 -5
- package/dist/data/mypack/function/atan2_fixed/then_36.mcfunction +0 -5
- package/dist/data/mypack/function/atan2_fixed/then_39.mcfunction +0 -5
- package/dist/data/mypack/function/atan2_fixed/then_42.mcfunction +0 -3
- package/dist/data/mypack/function/atan2_fixed/then_45.mcfunction +0 -5
- package/dist/data/mypack/function/atan2_fixed/then_6.mcfunction +0 -3
- package/dist/data/mypack/function/atan2_fixed/then_9.mcfunction +0 -5
- package/dist/data/mypack/function/atan2_fixed.mcfunction +0 -7
- package/dist/data/mypack/function/my_game.mcfunction +0 -10
- package/dist/data/quiz/function/__load.mcfunction +0 -16
- package/dist/data/quiz/function/__tick.mcfunction +0 -6
- package/dist/data/quiz/function/__trigger_quiz_a_dispatch.mcfunction +0 -4
- package/dist/data/quiz/function/__trigger_quiz_b_dispatch.mcfunction +0 -4
- package/dist/data/quiz/function/__trigger_quiz_c_dispatch.mcfunction +0 -4
- package/dist/data/quiz/function/__trigger_quiz_start_dispatch.mcfunction +0 -4
- package/dist/data/quiz/function/answer_a.mcfunction +0 -4
- package/dist/data/quiz/function/answer_b.mcfunction +0 -4
- package/dist/data/quiz/function/answer_c.mcfunction +0 -4
- package/dist/data/quiz/function/ask_question/else_1.mcfunction +0 -5
- package/dist/data/quiz/function/ask_question/else_4.mcfunction +0 -5
- package/dist/data/quiz/function/ask_question/else_7.mcfunction +0 -4
- package/dist/data/quiz/function/ask_question/merge_2.mcfunction +0 -1
- package/dist/data/quiz/function/ask_question/merge_5.mcfunction +0 -2
- package/dist/data/quiz/function/ask_question/merge_8.mcfunction +0 -2
- package/dist/data/quiz/function/ask_question/then_0.mcfunction +0 -4
- package/dist/data/quiz/function/ask_question/then_3.mcfunction +0 -4
- package/dist/data/quiz/function/ask_question/then_6.mcfunction +0 -4
- package/dist/data/quiz/function/ask_question.mcfunction +0 -7
- package/dist/data/quiz/function/finish_quiz.mcfunction +0 -6
- package/dist/data/quiz/function/handle_answer/else_1.mcfunction +0 -5
- package/dist/data/quiz/function/handle_answer/else_10.mcfunction +0 -3
- package/dist/data/quiz/function/handle_answer/else_16.mcfunction +0 -3
- package/dist/data/quiz/function/handle_answer/else_4.mcfunction +0 -3
- package/dist/data/quiz/function/handle_answer/else_7.mcfunction +0 -5
- package/dist/data/quiz/function/handle_answer/merge_11.mcfunction +0 -2
- package/dist/data/quiz/function/handle_answer/merge_14.mcfunction +0 -2
- package/dist/data/quiz/function/handle_answer/merge_17.mcfunction +0 -2
- package/dist/data/quiz/function/handle_answer/merge_2.mcfunction +0 -8
- package/dist/data/quiz/function/handle_answer/merge_5.mcfunction +0 -2
- package/dist/data/quiz/function/handle_answer/merge_8.mcfunction +0 -2
- package/dist/data/quiz/function/handle_answer/then_0.mcfunction +0 -5
- package/dist/data/quiz/function/handle_answer/then_12.mcfunction +0 -5
- package/dist/data/quiz/function/handle_answer/then_15.mcfunction +0 -6
- package/dist/data/quiz/function/handle_answer/then_3.mcfunction +0 -6
- package/dist/data/quiz/function/handle_answer/then_6.mcfunction +0 -5
- package/dist/data/quiz/function/handle_answer/then_9.mcfunction +0 -6
- package/dist/data/quiz/function/handle_answer.mcfunction +0 -11
- package/dist/data/quiz/function/start_quiz.mcfunction +0 -5
- package/dist/data/reqtest/function/__load.mcfunction +0 -4
- package/dist/data/reqtest/function/_table_init.mcfunction +0 -2
- package/dist/data/reqtest/function/no_trig.mcfunction +0 -3
- package/dist/data/reqtest/function/use_table.mcfunction +0 -4
- package/dist/data/reqtest2/function/__load.mcfunction +0 -3
- package/dist/data/reqtest2/function/no_trig.mcfunction +0 -3
- package/dist/data/runtime/function/__load.mcfunction +0 -5
- package/dist/data/runtime/function/__tick.mcfunction +0 -2
- package/dist/data/runtime/function/counter_tick/then_0.mcfunction +0 -3
- package/dist/data/runtime/function/counter_tick.mcfunction +0 -13
- package/dist/data/shop/function/__load.mcfunction +0 -7
- package/dist/data/shop/function/__tick.mcfunction +0 -3
- package/dist/data/shop/function/__trigger_shop_buy_dispatch.mcfunction +0 -4
- package/dist/data/shop/function/complete_purchase/else_1.mcfunction +0 -5
- package/dist/data/shop/function/complete_purchase/else_4.mcfunction +0 -5
- package/dist/data/shop/function/complete_purchase/else_7.mcfunction +0 -3
- package/dist/data/shop/function/complete_purchase/merge_2.mcfunction +0 -2
- package/dist/data/shop/function/complete_purchase/merge_5.mcfunction +0 -2
- package/dist/data/shop/function/complete_purchase/merge_8.mcfunction +0 -2
- package/dist/data/shop/function/complete_purchase/then_0.mcfunction +0 -4
- package/dist/data/shop/function/complete_purchase/then_3.mcfunction +0 -4
- package/dist/data/shop/function/complete_purchase/then_6.mcfunction +0 -4
- package/dist/data/shop/function/complete_purchase.mcfunction +0 -7
- package/dist/data/shop/function/handle_shop_trigger.mcfunction +0 -3
- package/dist/data/swap_test/function/__load.mcfunction +0 -3
- package/dist/data/swap_test/function/gcd_old/loop_body_1.mcfunction +0 -7
- package/dist/data/swap_test/function/gcd_old/loop_check_0.mcfunction +0 -5
- package/dist/data/swap_test/function/gcd_old/loop_exit_2.mcfunction +0 -3
- package/dist/data/swap_test/function/gcd_old.mcfunction +0 -8
- package/dist/data/turret/function/__load.mcfunction +0 -5
- package/dist/data/turret/function/__tick.mcfunction +0 -4
- package/dist/data/turret/function/__trigger_deploy_turret_dispatch.mcfunction +0 -4
- package/dist/data/turret/function/deploy_turret.mcfunction +0 -8
- package/dist/data/turret/function/turret_tick/at_1.mcfunction +0 -2
- package/dist/data/turret/function/turret_tick/foreach_0.mcfunction +0 -2
- package/dist/data/turret/function/turret_tick/foreach_2.mcfunction +0 -2
- package/dist/data/turret/function/turret_tick/tick_body.mcfunction +0 -3
- package/dist/data/turret/function/turret_tick/tick_skip.mcfunction +0 -1
- package/dist/data/turret/function/turret_tick.mcfunction +0 -5
- package/dist/diagnostics/index.d.ts +0 -44
- package/dist/diagnostics/index.js +0 -140
- package/dist/events/types.d.ts +0 -35
- package/dist/events/types.js +0 -59
- package/dist/formatter/index.d.ts +0 -1
- package/dist/formatter/index.js +0 -26
- package/dist/gcd2.map.json +0 -15
- package/dist/gcd3.map.json +0 -17
- package/dist/gcd_test.map.json +0 -15
- package/dist/index.d.ts +0 -62
- package/dist/ir/builder.d.ts +0 -33
- package/dist/ir/builder.js +0 -99
- package/dist/ir/types.d.ts +0 -132
- package/dist/ir/types.js +0 -15
- package/dist/isqrttest.map.json +0 -15
- package/dist/lexer/index.d.ts +0 -37
- package/dist/lexer/index.js +0 -569
- package/dist/lowering/index.d.ts +0 -188
- package/dist/lowering/index.js +0 -3405
- package/dist/mathtest.map.json +0 -6
- package/dist/mc-test/client.d.ts +0 -128
- package/dist/mc-test/client.js +0 -174
- package/dist/mc-test/runner.d.ts +0 -28
- package/dist/mc-test/runner.js +0 -150
- package/dist/mc-test/setup.d.ts +0 -11
- package/dist/mc-test/setup.js +0 -98
- package/dist/mc-validator/index.d.ts +0 -17
- package/dist/mc-validator/index.js +0 -322
- package/dist/mypack.map.json +0 -27
- package/dist/nbt/index.d.ts +0 -86
- package/dist/nbt/index.js +0 -250
- package/dist/optimizer/commands.d.ts +0 -38
- package/dist/optimizer/commands.js +0 -451
- package/dist/optimizer/dce.d.ts +0 -34
- package/dist/optimizer/dce.js +0 -639
- package/dist/optimizer/passes.d.ts +0 -34
- package/dist/optimizer/passes.js +0 -243
- package/dist/optimizer/structure.d.ts +0 -9
- package/dist/optimizer/structure.js +0 -356
- package/dist/pack.mcmeta +0 -6
- package/dist/parser/index.d.ts +0 -93
- package/dist/parser/index.js +0 -1687
- package/dist/repl.d.ts +0 -16
- package/dist/repl.js +0 -165
- package/dist/reqtest.map.json +0 -4
- package/dist/reqtest2.map.json +0 -4
- package/dist/runtime/index.d.ts +0 -107
- package/dist/runtime/index.js +0 -1409
- package/dist/runtime.map.json +0 -7
- package/dist/src/__tests__/codegen.test.d.ts +0 -1
- package/dist/src/__tests__/codegen.test.js +0 -152
- package/dist/src/__tests__/e2e.test.d.ts +0 -6
- package/dist/src/__tests__/e2e.test.js +0 -1789
- package/dist/src/__tests__/entity-types.test.d.ts +0 -1
- package/dist/src/__tests__/entity-types.test.js +0 -203
- package/dist/src/__tests__/lowering.test.d.ts +0 -1
- package/dist/src/__tests__/lowering.test.js +0 -1015
- package/dist/src/__tests__/macro.test.d.ts +0 -8
- package/dist/src/__tests__/macro.test.js +0 -306
- package/dist/src/__tests__/nbt.test.d.ts +0 -1
- package/dist/src/__tests__/nbt.test.js +0 -82
- package/dist/src/__tests__/optimizer-advanced.test.d.ts +0 -1
- package/dist/src/__tests__/optimizer-advanced.test.js +0 -124
- package/dist/src/__tests__/optimizer.test.d.ts +0 -1
- package/dist/src/__tests__/optimizer.test.js +0 -149
- package/dist/src/__tests__/runtime.test.d.ts +0 -1
- package/dist/src/__tests__/runtime.test.js +0 -289
- package/dist/src/__tests__/stdlib-advanced.test.d.ts +0 -4
- package/dist/src/__tests__/stdlib-advanced.test.js +0 -374
- package/dist/src/__tests__/stdlib-bigint.test.d.ts +0 -7
- package/dist/src/__tests__/stdlib-bigint.test.js +0 -426
- package/dist/src/__tests__/stdlib-math.test.d.ts +0 -7
- package/dist/src/__tests__/stdlib-math.test.js +0 -351
- package/dist/src/__tests__/stdlib-vec.test.d.ts +0 -4
- package/dist/src/__tests__/stdlib-vec.test.js +0 -263
- package/dist/src/__tests__/structure-optimizer.test.d.ts +0 -1
- package/dist/src/__tests__/structure-optimizer.test.js +0 -33
- package/dist/src/__tests__/var-allocator.test.d.ts +0 -1
- package/dist/src/__tests__/var-allocator.test.js +0 -69
- package/dist/src/codegen/cmdblock/index.d.ts +0 -26
- package/dist/src/codegen/cmdblock/index.js +0 -45
- package/dist/src/codegen/mcfunction/index.d.ts +0 -40
- package/dist/src/codegen/mcfunction/index.js +0 -606
- package/dist/src/codegen/structure/index.d.ts +0 -24
- package/dist/src/codegen/structure/index.js +0 -279
- package/dist/src/codegen/var-allocator.d.ts +0 -45
- package/dist/src/codegen/var-allocator.js +0 -104
- package/dist/src/ir/builder.d.ts +0 -33
- package/dist/src/ir/builder.js +0 -99
- package/dist/src/ir/types.d.ts +0 -132
- package/dist/src/ir/types.js +0 -15
- package/dist/src/lowering/index.d.ts +0 -188
- package/dist/src/lowering/index.js +0 -3405
- package/dist/src/optimizer/commands.d.ts +0 -38
- package/dist/src/optimizer/commands.js +0 -451
- package/dist/src/optimizer/passes.d.ts +0 -34
- package/dist/src/optimizer/passes.js +0 -243
- package/dist/src/optimizer/structure.d.ts +0 -9
- package/dist/src/optimizer/structure.js +0 -356
- package/dist/src2/__tests__/optimizer/dce.test.d.ts +0 -1
- package/dist/src2/emit/compile.d.ts +0 -19
- package/dist/src2/emit/compile.js +0 -80
- package/dist/src2/optimizer/dce.d.ts +0 -8
- package/dist/src2/optimizer/dce.js +0 -155
- package/dist/swap_test.map.json +0 -14
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/dist/typechecker/index.d.ts +0 -61
- package/dist/typechecker/index.js +0 -1034
- package/dist/types/entity-hierarchy.d.ts +0 -29
- package/dist/types/entity-hierarchy.js +0 -107
- package/src2/emit/compile.ts +0 -99
- /package/dist/{__tests__/cli.test.d.ts → src/__tests__/budget.test.d.ts} +0 -0
- /package/dist/{src2 → src}/__tests__/e2e/basic.test.d.ts +0 -0
- /package/dist/{src2 → src}/__tests__/e2e/basic.test.js +0 -0
- /package/dist/{src2 → src}/__tests__/e2e/macros.test.d.ts +0 -0
- /package/dist/{src2 → src}/__tests__/e2e/migrate.test.d.ts +0 -0
- /package/dist/{src2 → src}/__tests__/hir/desugar.test.d.ts +0 -0
- /package/dist/{src2 → src}/__tests__/lir/lower.test.d.ts +0 -0
- /package/dist/{src2 → src}/__tests__/lir/lower.test.js +0 -0
- /package/dist/{src2 → src}/__tests__/lir/types.test.d.ts +0 -0
- /package/dist/{src2 → src}/__tests__/lir/types.test.js +0 -0
- /package/dist/{src2 → src}/__tests__/lir/verify.test.d.ts +0 -0
- /package/dist/{src2 → src}/__tests__/lir/verify.test.js +0 -0
- /package/dist/{src2 → src}/__tests__/mir/arithmetic.test.d.ts +0 -0
- /package/dist/{src2 → src}/__tests__/mir/control-flow.test.d.ts +0 -0
- /package/dist/{src2 → src}/__tests__/mir/verify.test.d.ts +0 -0
- /package/dist/{src2 → src}/__tests__/mir/verify.test.js +0 -0
- /package/dist/{src2 → src}/__tests__/optimizer/block_merge.test.d.ts +0 -0
- /package/dist/{src2 → src}/__tests__/optimizer/block_merge.test.js +0 -0
- /package/dist/{src2 → src}/__tests__/optimizer/branch_simplify.test.d.ts +0 -0
- /package/dist/{src2 → src}/__tests__/optimizer/branch_simplify.test.js +0 -0
- /package/dist/{src2 → src}/__tests__/optimizer/constant_fold.test.d.ts +0 -0
- /package/dist/{src2 → src}/__tests__/optimizer/constant_fold.test.js +0 -0
- /package/dist/{src2 → src}/__tests__/optimizer/copy_prop.test.d.ts +0 -0
- /package/dist/{src2 → src}/__tests__/optimizer/copy_prop.test.js +0 -0
- /package/dist/{__tests__ → src/__tests__/optimizer}/dce.test.d.ts +0 -0
- /package/dist/{src2 → src}/__tests__/optimizer/dce.test.js +0 -0
- /package/dist/{__tests__/codegen.test.d.ts → src/__tests__/optimizer/interprocedural.test.d.ts} +0 -0
- /package/dist/{__tests__/entity-types.test.d.ts → src/__tests__/optimizer/lir/const_imm.test.d.ts} +0 -0
- /package/dist/{__tests__/formatter.test.d.ts → src/__tests__/optimizer/lir/dead_slot.test.d.ts} +0 -0
- /package/dist/{__tests__/lexer.test.d.ts → src/__tests__/optimizer/lir/peephole.test.d.ts} +0 -0
- /package/dist/{src2/__tests__/optimizer → src/__tests__/optimizer/lir}/pipeline.test.d.ts +0 -0
- /package/dist/{__tests__/lowering.test.d.ts → src/__tests__/optimizer/nbt-batch.test.d.ts} +0 -0
- /package/dist/{__tests__/mc-syntax.test.d.ts → src/__tests__/optimizer/pipeline.test.d.ts} +0 -0
- /package/dist/{src2 → src}/__tests__/optimizer/pipeline.test.js +0 -0
- /package/dist/{__tests__/nbt.test.d.ts → src/__tests__/optimizer/selector-cache.test.d.ts} +0 -0
- /package/dist/{__tests__/optimizer-advanced.test.d.ts → src/__tests__/optimizer/unroll.test.d.ts} +0 -0
- /package/dist/{src2 → src}/hir/types.js +0 -0
- /package/dist/{src2 → src}/lir/lower.d.ts +0 -0
- /package/dist/{src2 → src}/lir/types.js +0 -0
- /package/dist/{src2 → src}/lir/verify.d.ts +0 -0
- /package/dist/{src2 → src}/lir/verify.js +0 -0
- /package/dist/{src2 → src}/mir/macro.d.ts +0 -0
- /package/dist/{src2 → src}/mir/macro.js +0 -0
- /package/dist/{src2 → src}/mir/types.js +0 -0
- /package/dist/{src2 → src}/mir/verify.d.ts +0 -0
- /package/dist/{src2 → src}/mir/verify.js +0 -0
- /package/dist/{src2 → src}/optimizer/block_merge.d.ts +0 -0
- /package/dist/{src2 → src}/optimizer/block_merge.js +0 -0
- /package/dist/{src2 → src}/optimizer/branch_simplify.d.ts +0 -0
- /package/dist/{src2 → src}/optimizer/branch_simplify.js +0 -0
- /package/dist/{src2 → src}/optimizer/constant_fold.d.ts +0 -0
- /package/dist/{src2 → src}/optimizer/constant_fold.js +0 -0
- /package/dist/{src2 → src}/optimizer/copy_prop.d.ts +0 -0
- /package/dist/{src2 → src}/optimizer/copy_prop.js +0 -0
- /package/{src2 → src}/__tests__/e2e/basic.test.ts +0 -0
- /package/{src2 → src}/__tests__/lir/lower.test.ts +0 -0
- /package/{src2 → src}/__tests__/lir/types.test.ts +0 -0
- /package/{src2 → src}/__tests__/lir/verify.test.ts +0 -0
- /package/{src2 → src}/__tests__/mir/verify.test.ts +0 -0
- /package/{src2 → src}/__tests__/optimizer/block_merge.test.ts +0 -0
- /package/{src2 → src}/__tests__/optimizer/branch_simplify.test.ts +0 -0
- /package/{src2 → src}/__tests__/optimizer/constant_fold.test.ts +0 -0
- /package/{src2 → src}/__tests__/optimizer/copy_prop.test.ts +0 -0
- /package/{src2 → src}/__tests__/optimizer/dce.test.ts +0 -0
- /package/{src2 → src}/__tests__/optimizer/pipeline.test.ts +0 -0
- /package/{src2 → src}/lir/verify.ts +0 -0
- /package/{src2 → src}/mir/macro.ts +0 -0
- /package/{src2 → src}/mir/verify.ts +0 -0
- /package/{src2 → src}/optimizer/block_merge.ts +0 -0
- /package/{src2 → src}/optimizer/branch_simplify.ts +0 -0
- /package/{src2 → src}/optimizer/constant_fold.ts +0 -0
- /package/{src2 → src}/optimizer/copy_prop.ts +0 -0
package/dist/src/index.d.ts
CHANGED
|
@@ -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 '
|
|
8
|
-
export
|
|
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
|
|
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("
|
|
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
|
|
19
|
-
Object.defineProperty(exports, "Lexer", { enumerable: true, get: function () { return
|
|
20
|
-
var
|
|
21
|
-
Object.defineProperty(exports, "Parser", { enumerable: true, get: function () { return
|
|
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
|
|
37
|
-
|
|
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;
|
package/dist/src/lexer/index.js
CHANGED
|
@@ -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
|
|
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,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 {};
|