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/ast/types.d.ts
CHANGED
|
@@ -36,6 +36,12 @@ export type TypeNode = {
|
|
|
36
36
|
} | {
|
|
37
37
|
kind: 'selector';
|
|
38
38
|
entityType?: string;
|
|
39
|
+
} | {
|
|
40
|
+
kind: 'tuple';
|
|
41
|
+
elements: TypeNode[];
|
|
42
|
+
} | {
|
|
43
|
+
kind: 'option';
|
|
44
|
+
inner: TypeNode;
|
|
39
45
|
};
|
|
40
46
|
export interface LambdaParam {
|
|
41
47
|
name: string;
|
|
@@ -191,6 +197,7 @@ export type Expr = {
|
|
|
191
197
|
kind: 'call';
|
|
192
198
|
fn: string;
|
|
193
199
|
args: Expr[];
|
|
200
|
+
typeArgs?: TypeNode[];
|
|
194
201
|
span?: Span;
|
|
195
202
|
} | {
|
|
196
203
|
kind: 'invoke';
|
|
@@ -231,9 +238,25 @@ export type Expr = {
|
|
|
231
238
|
method: string;
|
|
232
239
|
args: Expr[];
|
|
233
240
|
span?: Span;
|
|
241
|
+
} | {
|
|
242
|
+
kind: 'path_expr';
|
|
243
|
+
enumName: string;
|
|
244
|
+
variant: string;
|
|
245
|
+
span?: Span;
|
|
234
246
|
} | (LambdaExpr & {
|
|
235
247
|
span?: Span;
|
|
236
|
-
})
|
|
248
|
+
}) | {
|
|
249
|
+
kind: 'tuple_lit';
|
|
250
|
+
elements: Expr[];
|
|
251
|
+
span?: Span;
|
|
252
|
+
} | {
|
|
253
|
+
kind: 'some_lit';
|
|
254
|
+
value: Expr;
|
|
255
|
+
span?: Span;
|
|
256
|
+
} | {
|
|
257
|
+
kind: 'none_lit';
|
|
258
|
+
span?: Span;
|
|
259
|
+
};
|
|
237
260
|
export type LiteralExpr = Extract<Expr, {
|
|
238
261
|
kind: 'int_lit';
|
|
239
262
|
}> | Extract<Expr, {
|
|
@@ -345,6 +368,12 @@ export type Stmt = {
|
|
|
345
368
|
type?: TypeNode;
|
|
346
369
|
init: Expr;
|
|
347
370
|
span?: Span;
|
|
371
|
+
} | {
|
|
372
|
+
kind: 'let_destruct';
|
|
373
|
+
names: string[];
|
|
374
|
+
type?: TypeNode;
|
|
375
|
+
init: Expr;
|
|
376
|
+
span?: Span;
|
|
348
377
|
} | {
|
|
349
378
|
kind: 'expr';
|
|
350
379
|
expr: Expr;
|
|
@@ -399,6 +428,13 @@ export type Stmt = {
|
|
|
399
428
|
body: Block;
|
|
400
429
|
}[];
|
|
401
430
|
span?: Span;
|
|
431
|
+
} | {
|
|
432
|
+
kind: 'if_let_some';
|
|
433
|
+
binding: string;
|
|
434
|
+
init: Expr;
|
|
435
|
+
then: Block;
|
|
436
|
+
else_?: Block;
|
|
437
|
+
span?: Span;
|
|
402
438
|
} | {
|
|
403
439
|
kind: 'as_block';
|
|
404
440
|
selector: EntitySelector;
|
|
@@ -427,7 +463,7 @@ export type Stmt = {
|
|
|
427
463
|
};
|
|
428
464
|
export type Block = Stmt[];
|
|
429
465
|
export interface Decorator {
|
|
430
|
-
name: 'tick' | 'load' | 'on' | 'on_trigger' | 'on_advancement' | 'on_craft' | 'on_death' | 'on_login' | 'on_join_team' | 'keep' | 'require_on_load';
|
|
466
|
+
name: 'tick' | 'load' | 'on' | 'on_trigger' | 'on_advancement' | 'on_craft' | 'on_death' | 'on_login' | 'on_join_team' | 'keep' | 'require_on_load' | 'coroutine' | 'schedule';
|
|
431
467
|
args?: {
|
|
432
468
|
rate?: number;
|
|
433
469
|
eventType?: string;
|
|
@@ -435,6 +471,9 @@ export interface Decorator {
|
|
|
435
471
|
advancement?: string;
|
|
436
472
|
item?: string;
|
|
437
473
|
team?: string;
|
|
474
|
+
batch?: number;
|
|
475
|
+
onDone?: string;
|
|
476
|
+
ticks?: number;
|
|
438
477
|
};
|
|
439
478
|
/** Raw positional arguments (used by @requires and future generic decorators). */
|
|
440
479
|
rawArgs?: Array<{
|
|
@@ -455,7 +494,11 @@ export interface FnDecl {
|
|
|
455
494
|
* Library functions are NOT MC entry points — DCE only keeps them if they
|
|
456
495
|
* are reachable from a non-library (user) entry point. */
|
|
457
496
|
isLibraryFn?: boolean;
|
|
497
|
+
/** True when declared with `export fn` or `@keep fn` — survives DCE. */
|
|
498
|
+
isExported?: boolean;
|
|
458
499
|
name: string;
|
|
500
|
+
/** Generic type parameter names, e.g. ['T'] for fn foo<T>(...) */
|
|
501
|
+
typeParams?: string[];
|
|
459
502
|
params: Param[];
|
|
460
503
|
returnType: TypeNode;
|
|
461
504
|
decorators: Decorator[];
|
|
@@ -500,14 +543,25 @@ export interface GlobalDecl {
|
|
|
500
543
|
mutable: boolean;
|
|
501
544
|
span?: Span;
|
|
502
545
|
}
|
|
546
|
+
export interface ImportDecl {
|
|
547
|
+
/** The module being imported from, e.g. "math" in `import math::sin` */
|
|
548
|
+
moduleName: string;
|
|
549
|
+
/** The symbol being imported, or '*' for wildcard */
|
|
550
|
+
symbol: string;
|
|
551
|
+
span?: Span;
|
|
552
|
+
}
|
|
503
553
|
export interface Program {
|
|
504
554
|
namespace: string;
|
|
555
|
+
/** Module name declared with `module <name>;` (undefined if no module decl) */
|
|
556
|
+
moduleName?: string;
|
|
505
557
|
globals: GlobalDecl[];
|
|
506
558
|
declarations: FnDecl[];
|
|
507
559
|
structs: StructDecl[];
|
|
508
560
|
implBlocks: ImplBlock[];
|
|
509
561
|
enums: EnumDecl[];
|
|
510
562
|
consts: ConstDecl[];
|
|
563
|
+
/** Phase 5b: module imports (`import math::sin;`) */
|
|
564
|
+
imports: ImportDecl[];
|
|
511
565
|
/** True when the source file declares `module library;`.
|
|
512
566
|
* Library-mode: all functions are DCE-eligible by default — none are treated
|
|
513
567
|
* as MC entry points unless they carry @tick / @load / @on / @keep etc. */
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DependencyGraph — tracks import relationships between .mcrs files.
|
|
3
|
+
*
|
|
4
|
+
* Builds a forward dependency map (file → files it imports) and supports
|
|
5
|
+
* reverse lookups (file → files that depend on it) for change propagation.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Parse import statements from a source file's content.
|
|
9
|
+
* Returns absolute paths of imported files.
|
|
10
|
+
*/
|
|
11
|
+
export declare function parseImports(filePath: string, source?: string): string[];
|
|
12
|
+
export declare class DependencyGraph {
|
|
13
|
+
/** Forward edges: file → set of files it imports */
|
|
14
|
+
private deps;
|
|
15
|
+
/** Add a file and its direct imports to the graph. */
|
|
16
|
+
addFile(filePath: string, source?: string): void;
|
|
17
|
+
/** Remove a file from the graph. */
|
|
18
|
+
removeFile(filePath: string): void;
|
|
19
|
+
/** Get direct imports of a file. */
|
|
20
|
+
getDirectDeps(filePath: string): Set<string>;
|
|
21
|
+
/**
|
|
22
|
+
* Get transitive dependencies of a file (all files it depends on,
|
|
23
|
+
* directly or indirectly).
|
|
24
|
+
*/
|
|
25
|
+
getTransitiveDeps(filePath: string): Set<string>;
|
|
26
|
+
/**
|
|
27
|
+
* Get reverse dependents: all files that (transitively) depend on the
|
|
28
|
+
* given file. Used for change propagation — when `filePath` changes,
|
|
29
|
+
* all returned files need recompilation.
|
|
30
|
+
*/
|
|
31
|
+
getDependents(filePath: string): Set<string>;
|
|
32
|
+
/**
|
|
33
|
+
* Given a set of changed files, compute the full set of dirty files
|
|
34
|
+
* (changed files + all their reverse dependents).
|
|
35
|
+
*/
|
|
36
|
+
computeDirtySet(changedFiles: Set<string>): Set<string>;
|
|
37
|
+
/** Get all tracked files. */
|
|
38
|
+
getAllFiles(): string[];
|
|
39
|
+
/** Clear the graph. */
|
|
40
|
+
clear(): void;
|
|
41
|
+
}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* DependencyGraph — tracks import relationships between .mcrs files.
|
|
4
|
+
*
|
|
5
|
+
* Builds a forward dependency map (file → files it imports) and supports
|
|
6
|
+
* reverse lookups (file → files that depend on it) for change propagation.
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.DependencyGraph = void 0;
|
|
43
|
+
exports.parseImports = parseImports;
|
|
44
|
+
const fs = __importStar(require("fs"));
|
|
45
|
+
const path = __importStar(require("path"));
|
|
46
|
+
const IMPORT_RE = /^\s*import\s+"([^"]+)"\s*;?\s*$/;
|
|
47
|
+
/**
|
|
48
|
+
* Parse import statements from a source file's content.
|
|
49
|
+
* Returns absolute paths of imported files.
|
|
50
|
+
*/
|
|
51
|
+
function parseImports(filePath, source) {
|
|
52
|
+
const absPath = path.resolve(filePath);
|
|
53
|
+
const content = source ?? fs.readFileSync(absPath, 'utf-8');
|
|
54
|
+
const dir = path.dirname(absPath);
|
|
55
|
+
const imports = [];
|
|
56
|
+
for (const line of content.split('\n')) {
|
|
57
|
+
const trimmed = line.trim();
|
|
58
|
+
// Stop at first non-comment, non-blank, non-import line
|
|
59
|
+
if (!trimmed || trimmed.startsWith('//'))
|
|
60
|
+
continue;
|
|
61
|
+
const match = trimmed.match(IMPORT_RE);
|
|
62
|
+
if (match) {
|
|
63
|
+
imports.push(path.resolve(dir, match[1]));
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
// Past the import header
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return imports;
|
|
71
|
+
}
|
|
72
|
+
class DependencyGraph {
|
|
73
|
+
constructor() {
|
|
74
|
+
/** Forward edges: file → set of files it imports */
|
|
75
|
+
this.deps = new Map();
|
|
76
|
+
}
|
|
77
|
+
/** Add a file and its direct imports to the graph. */
|
|
78
|
+
addFile(filePath, source) {
|
|
79
|
+
const absPath = path.resolve(filePath);
|
|
80
|
+
const imports = parseImports(absPath, source);
|
|
81
|
+
this.deps.set(absPath, new Set(imports));
|
|
82
|
+
}
|
|
83
|
+
/** Remove a file from the graph. */
|
|
84
|
+
removeFile(filePath) {
|
|
85
|
+
this.deps.delete(path.resolve(filePath));
|
|
86
|
+
}
|
|
87
|
+
/** Get direct imports of a file. */
|
|
88
|
+
getDirectDeps(filePath) {
|
|
89
|
+
return this.deps.get(path.resolve(filePath)) ?? new Set();
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Get transitive dependencies of a file (all files it depends on,
|
|
93
|
+
* directly or indirectly).
|
|
94
|
+
*/
|
|
95
|
+
getTransitiveDeps(filePath) {
|
|
96
|
+
const absPath = path.resolve(filePath);
|
|
97
|
+
const result = new Set();
|
|
98
|
+
const stack = [absPath];
|
|
99
|
+
while (stack.length > 0) {
|
|
100
|
+
const current = stack.pop();
|
|
101
|
+
const directDeps = this.deps.get(current);
|
|
102
|
+
if (!directDeps)
|
|
103
|
+
continue;
|
|
104
|
+
for (const dep of directDeps) {
|
|
105
|
+
if (!result.has(dep)) {
|
|
106
|
+
result.add(dep);
|
|
107
|
+
stack.push(dep);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return result;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get reverse dependents: all files that (transitively) depend on the
|
|
115
|
+
* given file. Used for change propagation — when `filePath` changes,
|
|
116
|
+
* all returned files need recompilation.
|
|
117
|
+
*/
|
|
118
|
+
getDependents(filePath) {
|
|
119
|
+
const absPath = path.resolve(filePath);
|
|
120
|
+
const result = new Set();
|
|
121
|
+
const stack = [absPath];
|
|
122
|
+
while (stack.length > 0) {
|
|
123
|
+
const current = stack.pop();
|
|
124
|
+
for (const [file, deps] of this.deps) {
|
|
125
|
+
if (deps.has(current) && !result.has(file)) {
|
|
126
|
+
result.add(file);
|
|
127
|
+
stack.push(file);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return result;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Given a set of changed files, compute the full set of dirty files
|
|
135
|
+
* (changed files + all their reverse dependents).
|
|
136
|
+
*/
|
|
137
|
+
computeDirtySet(changedFiles) {
|
|
138
|
+
const dirty = new Set();
|
|
139
|
+
for (const file of changedFiles) {
|
|
140
|
+
const absFile = path.resolve(file);
|
|
141
|
+
dirty.add(absFile);
|
|
142
|
+
for (const dep of this.getDependents(absFile)) {
|
|
143
|
+
dirty.add(dep);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return dirty;
|
|
147
|
+
}
|
|
148
|
+
/** Get all tracked files. */
|
|
149
|
+
getAllFiles() {
|
|
150
|
+
return [...this.deps.keys()];
|
|
151
|
+
}
|
|
152
|
+
/** Clear the graph. */
|
|
153
|
+
clear() {
|
|
154
|
+
this.deps.clear();
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
exports.DependencyGraph = DependencyGraph;
|
|
158
|
+
//# sourceMappingURL=deps.js.map
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Incremental compilation — only recompile files whose content (or
|
|
3
|
+
* dependencies) has changed since the last build.
|
|
4
|
+
*/
|
|
5
|
+
import { type CompileResult } from '../emit/compile';
|
|
6
|
+
import { FileCache } from './index';
|
|
7
|
+
import { DependencyGraph } from './deps';
|
|
8
|
+
export interface IncrementalOptions {
|
|
9
|
+
namespace?: string;
|
|
10
|
+
/** Output directory for compiled files. */
|
|
11
|
+
output: string;
|
|
12
|
+
}
|
|
13
|
+
export interface IncrementalResult {
|
|
14
|
+
/** Number of files that were recompiled. */
|
|
15
|
+
recompiled: number;
|
|
16
|
+
/** Number of files that used the cache (skipped). */
|
|
17
|
+
cached: number;
|
|
18
|
+
/** Files that had errors (path → error message). */
|
|
19
|
+
errors: Map<string, string>;
|
|
20
|
+
/** Per-file compile results (only for recompiled files). */
|
|
21
|
+
results: Map<string, CompileResult>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Compile a set of entry files incrementally.
|
|
25
|
+
*
|
|
26
|
+
* For each file:
|
|
27
|
+
* - Compute content hash of the file and all its transitive imports
|
|
28
|
+
* - If all hashes match the previous build → skip (cache hit)
|
|
29
|
+
* - If any hash changed → recompile from scratch
|
|
30
|
+
*/
|
|
31
|
+
export declare function compileIncremental(files: string[], cache: FileCache, depGraph: DependencyGraph, options: IncrementalOptions): IncrementalResult;
|
|
32
|
+
/**
|
|
33
|
+
* Reset the in-memory compile cache. Useful for testing.
|
|
34
|
+
*/
|
|
35
|
+
export declare function resetCompileCache(): void;
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Incremental compilation — only recompile files whose content (or
|
|
4
|
+
* dependencies) has changed since the last build.
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.compileIncremental = compileIncremental;
|
|
41
|
+
exports.resetCompileCache = resetCompileCache;
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const compile_1 = require("../emit/compile");
|
|
44
|
+
const fs = __importStar(require("fs"));
|
|
45
|
+
const compiledCache = new Map();
|
|
46
|
+
/**
|
|
47
|
+
* Compile a set of entry files incrementally.
|
|
48
|
+
*
|
|
49
|
+
* For each file:
|
|
50
|
+
* - Compute content hash of the file and all its transitive imports
|
|
51
|
+
* - If all hashes match the previous build → skip (cache hit)
|
|
52
|
+
* - If any hash changed → recompile from scratch
|
|
53
|
+
*/
|
|
54
|
+
function compileIncremental(files, cache, depGraph, options) {
|
|
55
|
+
const result = {
|
|
56
|
+
recompiled: 0,
|
|
57
|
+
cached: 0,
|
|
58
|
+
errors: new Map(),
|
|
59
|
+
results: new Map(),
|
|
60
|
+
};
|
|
61
|
+
// Phase 1: Update dependency graph for all files
|
|
62
|
+
for (const file of files) {
|
|
63
|
+
const absFile = path.resolve(file);
|
|
64
|
+
try {
|
|
65
|
+
const source = fs.readFileSync(absFile, 'utf-8');
|
|
66
|
+
depGraph.addFile(absFile, source);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
// File might have been deleted
|
|
70
|
+
depGraph.removeFile(absFile);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Phase 2: Detect all changed source files BEFORE recompiling anything.
|
|
74
|
+
// This prevents cache.update() during one file's recompile from hiding
|
|
75
|
+
// changes needed by another file that shares the same dependency.
|
|
76
|
+
const changedSourceFiles = new Set();
|
|
77
|
+
const allSourceFiles = new Set();
|
|
78
|
+
for (const file of files) {
|
|
79
|
+
const absFile = path.resolve(file);
|
|
80
|
+
const allDeps = depGraph.getTransitiveDeps(absFile);
|
|
81
|
+
allSourceFiles.add(absFile);
|
|
82
|
+
for (const dep of allDeps)
|
|
83
|
+
allSourceFiles.add(dep);
|
|
84
|
+
}
|
|
85
|
+
for (const sourceFile of allSourceFiles) {
|
|
86
|
+
if (cache.hasChanged(sourceFile)) {
|
|
87
|
+
changedSourceFiles.add(sourceFile);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Phase 3: For each entry file, check if it or any dep changed → recompile
|
|
91
|
+
for (const file of files) {
|
|
92
|
+
const absFile = path.resolve(file);
|
|
93
|
+
// Collect all files in this compilation unit (entry + transitive deps)
|
|
94
|
+
const allDeps = depGraph.getTransitiveDeps(absFile);
|
|
95
|
+
const unitFiles = [absFile, ...allDeps];
|
|
96
|
+
// Check if any file in the unit has changed
|
|
97
|
+
let needsRecompile = false;
|
|
98
|
+
const prevEntry = compiledCache.get(absFile);
|
|
99
|
+
if (!prevEntry) {
|
|
100
|
+
needsRecompile = true;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
for (const unitFile of unitFiles) {
|
|
104
|
+
if (changedSourceFiles.has(unitFile)) {
|
|
105
|
+
needsRecompile = true;
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Also check if the set of dependencies changed
|
|
110
|
+
if (!needsRecompile && prevEntry.depHashes.size !== unitFiles.length) {
|
|
111
|
+
needsRecompile = true;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (!needsRecompile) {
|
|
115
|
+
// Cache hit — write cached result to output
|
|
116
|
+
const cached = compiledCache.get(absFile);
|
|
117
|
+
writeBuildOutput(cached.result, options.output);
|
|
118
|
+
result.cached++;
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
// Cache miss — recompile
|
|
122
|
+
try {
|
|
123
|
+
const source = fs.readFileSync(absFile, 'utf-8');
|
|
124
|
+
const ns = options.namespace ?? deriveNamespace(absFile);
|
|
125
|
+
const compileResult = (0, compile_1.compile)(source, { namespace: ns, filePath: absFile });
|
|
126
|
+
// Update caches
|
|
127
|
+
const depHashes = new Map();
|
|
128
|
+
for (const unitFile of unitFiles) {
|
|
129
|
+
cache.update(unitFile);
|
|
130
|
+
const entry = cache.get(unitFile);
|
|
131
|
+
if (entry)
|
|
132
|
+
depHashes.set(unitFile, entry.hash);
|
|
133
|
+
}
|
|
134
|
+
compiledCache.set(absFile, { result: compileResult, depHashes });
|
|
135
|
+
writeBuildOutput(compileResult, options.output);
|
|
136
|
+
result.recompiled++;
|
|
137
|
+
result.results.set(absFile, compileResult);
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
result.errors.set(absFile, err.message);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return result;
|
|
144
|
+
}
|
|
145
|
+
/** Write compile output files to the output directory. */
|
|
146
|
+
function writeBuildOutput(compileResult, output) {
|
|
147
|
+
fs.mkdirSync(output, { recursive: true });
|
|
148
|
+
for (const dataFile of compileResult.files) {
|
|
149
|
+
const filePath = path.join(output, dataFile.path);
|
|
150
|
+
const dir = path.dirname(filePath);
|
|
151
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
152
|
+
fs.writeFileSync(filePath, dataFile.content);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
function deriveNamespace(filePath) {
|
|
156
|
+
const basename = path.basename(filePath, path.extname(filePath));
|
|
157
|
+
return basename.toLowerCase().replace(/[^a-z0-9]/g, '_');
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Reset the in-memory compile cache. Useful for testing.
|
|
161
|
+
*/
|
|
162
|
+
function resetCompileCache() {
|
|
163
|
+
compiledCache.clear();
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=incremental.js.map
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FileCache — content-hash-based compilation cache for incremental builds.
|
|
3
|
+
*
|
|
4
|
+
* Stores per-file content hashes and optional cached HIR modules.
|
|
5
|
+
* Persists to `.redscript-cache/` as JSON.
|
|
6
|
+
*/
|
|
7
|
+
import type { HIRModule } from '../hir/types';
|
|
8
|
+
export interface CacheEntry {
|
|
9
|
+
hash: string;
|
|
10
|
+
mtime: number;
|
|
11
|
+
hir?: HIRModule;
|
|
12
|
+
}
|
|
13
|
+
export declare class FileCache {
|
|
14
|
+
private entries;
|
|
15
|
+
private cacheDir;
|
|
16
|
+
constructor(cacheDir: string);
|
|
17
|
+
/** Get cached entry for a file (by absolute path). */
|
|
18
|
+
get(filePath: string): CacheEntry | undefined;
|
|
19
|
+
/** Set cache entry for a file. */
|
|
20
|
+
set(filePath: string, entry: CacheEntry): void;
|
|
21
|
+
/** Check if a file's content has changed since last cache. */
|
|
22
|
+
hasChanged(filePath: string): boolean;
|
|
23
|
+
/** Update the cache entry for a file from disk. Returns true if content changed. */
|
|
24
|
+
update(filePath: string, hir?: HIRModule): boolean;
|
|
25
|
+
/** Remove a file from the cache. */
|
|
26
|
+
delete(filePath: string): void;
|
|
27
|
+
/** Clear all cache entries. */
|
|
28
|
+
clear(): void;
|
|
29
|
+
/** Number of cached entries. */
|
|
30
|
+
get size(): number;
|
|
31
|
+
/** Persist cache to disk (`.redscript-cache/cache.json`). */
|
|
32
|
+
save(): void;
|
|
33
|
+
/** Load cache from disk. */
|
|
34
|
+
load(): void;
|
|
35
|
+
}
|
|
36
|
+
/** SHA-256 hash of a file's content. */
|
|
37
|
+
export declare function hashFile(filePath: string): string;
|