redscript-mc 2.0.0 → 2.1.1
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 +48 -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 +321 -0
- package/dist/src/__tests__/mc-syntax.test.js +1 -6
- 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__/stdlib-include.test.js +86 -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 +83 -45
- package/dist/src/compile.d.ts +3 -2
- package/dist/src/compile.js +34 -11
- package/dist/src/diagnostics/index.d.ts +1 -1
- package/dist/src/diagnostics/index.js +8 -11
- package/dist/src/emit/compile.d.ts +31 -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 +403 -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/editors/vscode/syntaxes/redscript.tmLanguage.json +34 -0
- package/examples/coroutine-demo.mcrs +50 -0
- package/examples/enum-demo.mcrs +95 -0
- package/examples/scheduler-demo.mcrs +59 -0
- 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 +359 -0
- package/src/__tests__/mc-syntax.test.ts +1 -7
- 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__/stdlib-include.test.ts +61 -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 +96 -45
- package/src/compile.ts +46 -17
- package/src/diagnostics/index.ts +8 -11
- package/src/emit/compile.ts +179 -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 +469 -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.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/examples/spiral.mcrs +0 -43
- package/src/examples/arena.mcrs +0 -44
- package/src/examples/counter.mcrs +0 -12
- package/src/examples/new_features_demo.mcrs +0 -193
- package/src/examples/rpg.mcrs +0 -13
- package/src/examples/stdlib_demo.mcrs +0 -181
- 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/{__tests__/optimizer.test.d.ts → src/__tests__/stdlib-include.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
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Phase 6b: TypeChecker strict (error-mode) tests
|
|
4
|
+
*
|
|
5
|
+
* Covers:
|
|
6
|
+
* - Type errors now block compilation (error-mode default)
|
|
7
|
+
* - --lenient flag demotes type errors to warnings
|
|
8
|
+
* - int/float implicit conversion detection
|
|
9
|
+
* - redscript check command correctly reports type errors
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const compile_1 = require("../emit/compile");
|
|
13
|
+
const lexer_1 = require("../lexer");
|
|
14
|
+
const parser_1 = require("../parser");
|
|
15
|
+
const typechecker_1 = require("../typechecker");
|
|
16
|
+
// Helper: run TypeChecker directly
|
|
17
|
+
function typeCheck(source) {
|
|
18
|
+
const tokens = new lexer_1.Lexer(source).tokenize();
|
|
19
|
+
const ast = new parser_1.Parser(tokens).parse('test');
|
|
20
|
+
const checker = new typechecker_1.TypeChecker(source);
|
|
21
|
+
return checker.check(ast);
|
|
22
|
+
}
|
|
23
|
+
// Helper: compile in strict mode (default)
|
|
24
|
+
function compileStrict(source) {
|
|
25
|
+
(0, compile_1.compile)(source, { namespace: 'test' });
|
|
26
|
+
}
|
|
27
|
+
// Helper: compile in lenient mode
|
|
28
|
+
function compileLenient(source) {
|
|
29
|
+
return (0, compile_1.compile)(source, { namespace: 'test', lenient: true });
|
|
30
|
+
}
|
|
31
|
+
describe('TypeChecker error-mode (Phase 6b)', () => {
|
|
32
|
+
describe('type errors block compilation', () => {
|
|
33
|
+
it('throws on undeclared variable usage', () => {
|
|
34
|
+
expect(() => compileStrict(`
|
|
35
|
+
fn test() {
|
|
36
|
+
let x: int = undeclared;
|
|
37
|
+
}
|
|
38
|
+
`)).toThrow();
|
|
39
|
+
});
|
|
40
|
+
it('throws on return type mismatch', () => {
|
|
41
|
+
expect(() => compileStrict(`
|
|
42
|
+
fn get_bool() -> bool {
|
|
43
|
+
return 5;
|
|
44
|
+
}
|
|
45
|
+
`)).toThrow();
|
|
46
|
+
});
|
|
47
|
+
it('throws on wrong argument count', () => {
|
|
48
|
+
expect(() => compileStrict(`
|
|
49
|
+
fn add(a: int, b: int) -> int {
|
|
50
|
+
return a + b;
|
|
51
|
+
}
|
|
52
|
+
fn test() {
|
|
53
|
+
let x: int = add(1);
|
|
54
|
+
}
|
|
55
|
+
`)).toThrow();
|
|
56
|
+
});
|
|
57
|
+
it('does not throw for valid programs', () => {
|
|
58
|
+
expect(() => compileStrict(`
|
|
59
|
+
fn add(a: int, b: int) -> int {
|
|
60
|
+
return a + b;
|
|
61
|
+
}
|
|
62
|
+
fn test() {
|
|
63
|
+
let x: int = add(1, 2);
|
|
64
|
+
}
|
|
65
|
+
`)).not.toThrow();
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
describe('--lenient mode', () => {
|
|
69
|
+
it('does not throw on type errors in lenient mode', () => {
|
|
70
|
+
expect(() => compileLenient(`
|
|
71
|
+
fn test() {
|
|
72
|
+
let x: int = undeclared;
|
|
73
|
+
}
|
|
74
|
+
`)).not.toThrow();
|
|
75
|
+
});
|
|
76
|
+
it('returns type errors as warnings in lenient mode', () => {
|
|
77
|
+
const result = compileLenient(`
|
|
78
|
+
fn test() {
|
|
79
|
+
let x: int = undeclared;
|
|
80
|
+
}
|
|
81
|
+
`);
|
|
82
|
+
expect(result.warnings.length).toBeGreaterThan(0);
|
|
83
|
+
expect(result.warnings[0]).toContain('TypeError');
|
|
84
|
+
});
|
|
85
|
+
it('emits no warnings for valid programs in lenient mode', () => {
|
|
86
|
+
const result = compileLenient(`
|
|
87
|
+
fn test() {
|
|
88
|
+
let x: int = 5;
|
|
89
|
+
}
|
|
90
|
+
`);
|
|
91
|
+
expect(result.warnings).toHaveLength(0);
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
describe('int/float implicit conversion checks', () => {
|
|
95
|
+
it('detects int assigned to float variable', () => {
|
|
96
|
+
// int literal assigned to float — different types
|
|
97
|
+
const errors = typeCheck(`
|
|
98
|
+
fn test() {
|
|
99
|
+
let x: float = 5;
|
|
100
|
+
}
|
|
101
|
+
`);
|
|
102
|
+
expect(errors.length).toBeGreaterThan(0);
|
|
103
|
+
expect(errors[0].message).toContain('cannot implicitly convert int to float');
|
|
104
|
+
expect(errors[0].message).toContain('as float');
|
|
105
|
+
});
|
|
106
|
+
it('detects float assigned to int variable', () => {
|
|
107
|
+
const errors = typeCheck(`
|
|
108
|
+
fn get_f() -> float {
|
|
109
|
+
return 3.14;
|
|
110
|
+
}
|
|
111
|
+
fn test() {
|
|
112
|
+
let x: int = get_f();
|
|
113
|
+
}
|
|
114
|
+
`);
|
|
115
|
+
expect(errors.length).toBeGreaterThan(0);
|
|
116
|
+
expect(errors[0].message).toContain('cannot implicitly convert');
|
|
117
|
+
});
|
|
118
|
+
it('detects int/float return type mismatch', () => {
|
|
119
|
+
const errors = typeCheck(`
|
|
120
|
+
fn get_float() -> float {
|
|
121
|
+
return 5;
|
|
122
|
+
}
|
|
123
|
+
`);
|
|
124
|
+
expect(errors.length).toBeGreaterThan(0);
|
|
125
|
+
expect(errors[0].message).toContain('cannot implicitly convert int to float');
|
|
126
|
+
expect(errors[0].message).toContain('as float');
|
|
127
|
+
});
|
|
128
|
+
it('detects float/int return type mismatch', () => {
|
|
129
|
+
const errors = typeCheck(`
|
|
130
|
+
fn get_int() -> int {
|
|
131
|
+
return 3.14;
|
|
132
|
+
}
|
|
133
|
+
`);
|
|
134
|
+
expect(errors.length).toBeGreaterThan(0);
|
|
135
|
+
expect(errors[0].message).toContain('cannot implicitly convert float to int');
|
|
136
|
+
expect(errors[0].message).toContain('as int');
|
|
137
|
+
});
|
|
138
|
+
it('allows int assigned to int variable', () => {
|
|
139
|
+
const errors = typeCheck(`
|
|
140
|
+
fn test() {
|
|
141
|
+
let x: int = 5;
|
|
142
|
+
}
|
|
143
|
+
`);
|
|
144
|
+
expect(errors).toHaveLength(0);
|
|
145
|
+
});
|
|
146
|
+
it('allows float assigned to float variable', () => {
|
|
147
|
+
const errors = typeCheck(`
|
|
148
|
+
fn get_f() -> float {
|
|
149
|
+
return 3.14;
|
|
150
|
+
}
|
|
151
|
+
fn test() {
|
|
152
|
+
let x: float = get_f();
|
|
153
|
+
}
|
|
154
|
+
`);
|
|
155
|
+
expect(errors).toHaveLength(0);
|
|
156
|
+
});
|
|
157
|
+
it('blocks compilation on int→float mismatch', () => {
|
|
158
|
+
expect(() => compileStrict(`
|
|
159
|
+
fn get_float() -> float {
|
|
160
|
+
return 5;
|
|
161
|
+
}
|
|
162
|
+
`)).toThrow();
|
|
163
|
+
});
|
|
164
|
+
it('int→float mismatch demoted to warning in lenient mode', () => {
|
|
165
|
+
const result = compileLenient(`
|
|
166
|
+
fn get_float() -> float {
|
|
167
|
+
return 5;
|
|
168
|
+
}
|
|
169
|
+
`);
|
|
170
|
+
expect(result.warnings.length).toBeGreaterThan(0);
|
|
171
|
+
expect(result.warnings[0]).toContain('TypeError');
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
describe('redscript check command behavior', () => {
|
|
175
|
+
it('TypeChecker check() returns errors for type mismatches', () => {
|
|
176
|
+
const errors = typeCheck(`
|
|
177
|
+
fn test() {
|
|
178
|
+
let x: int = undeclared;
|
|
179
|
+
let y: bool = 1;
|
|
180
|
+
}
|
|
181
|
+
`);
|
|
182
|
+
expect(errors.length).toBeGreaterThanOrEqual(1);
|
|
183
|
+
});
|
|
184
|
+
it('TypeChecker check() returns empty array for valid programs', () => {
|
|
185
|
+
const errors = typeCheck(`
|
|
186
|
+
struct Point { x: int, y: int }
|
|
187
|
+
|
|
188
|
+
fn test() {
|
|
189
|
+
let p: Point = { x: 10, y: 20 };
|
|
190
|
+
let val: int = p.x;
|
|
191
|
+
}
|
|
192
|
+
`);
|
|
193
|
+
expect(errors).toHaveLength(0);
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
//# sourceMappingURL=typechecker-strict.test.js.map
|
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;
|