@scriptc/compiler 0.2.7 → 0.2.8
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/ambient/scriptc-node-fallback.d.ts +2 -0
- package/dist/backend/llvm/alloc.d.ts +3 -0
- package/dist/backend/llvm/alloc.js +54 -13
- package/dist/backend/llvm/alloc.js.map +1 -1
- package/dist/backend/llvm/blocks.d.ts +9 -0
- package/dist/backend/llvm/blocks.js +9 -0
- package/dist/backend/llvm/blocks.js.map +1 -1
- package/dist/backend/llvm/borrowed-receivers.d.ts +7 -0
- package/dist/backend/llvm/borrowed-receivers.js +39 -0
- package/dist/backend/llvm/borrowed-receivers.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.d.ts +4 -1
- package/dist/backend/llvm/call-lifetimes.js +14 -3
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.test.js +8 -3
- package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/checked-narrows.d.ts +24 -0
- package/dist/backend/llvm/checked-narrows.js +108 -0
- package/dist/backend/llvm/checked-narrows.js.map +1 -0
- package/dist/backend/llvm/checked-narrows.test.d.ts +1 -0
- package/dist/backend/llvm/checked-narrows.test.js +208 -0
- package/dist/backend/llvm/checked-narrows.test.js.map +1 -0
- package/dist/backend/llvm/classes.d.ts +13 -1
- package/dist/backend/llvm/classes.js +26 -18
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +32 -3
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/debug-info.d.ts +6 -2
- package/dist/backend/llvm/debug-info.js +11 -1
- package/dist/backend/llvm/debug-info.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.test.js +89 -0
- package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +4 -0
- package/dist/backend/llvm/dyn.js +31 -20
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +184 -11
- package/dist/backend/llvm/emitter.js +1189 -125
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +21 -1
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +4 -4
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.d.ts +1 -1
- package/dist/backend/llvm/expr-bytes.js +85 -8
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-callbacks.js +29 -21
- package/dist/backend/llvm/expr-callbacks.js.map +1 -1
- package/dist/backend/llvm/expr-calls.d.ts +5 -0
- package/dist/backend/llvm/expr-calls.js +55 -10
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.d.ts +7 -1
- package/dist/backend/llvm/expr-containers.js +230 -27
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-control.js +25 -10
- package/dist/backend/llvm/expr-control.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +72 -21
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-island.js +3 -8
- package/dist/backend/llvm/expr-island.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +41 -12
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.test.js +50 -2
- package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
- package/dist/backend/llvm/expr-records.js +28 -14
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +41 -31
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-callbacks.js +6 -3
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/layouts.d.ts +2 -1
- package/dist/backend/llvm/layouts.js +2 -2
- package/dist/backend/llvm/layouts.js.map +1 -1
- package/dist/backend/llvm/lib-abi.js +10 -0
- package/dist/backend/llvm/lib-abi.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +7 -11
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +8 -8
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +1 -0
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +73 -13
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.test.js +7 -3
- package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.js +10 -6
- package/dist/backend/llvm/local-union-storage.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.test.js +3 -2
- package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.d.ts +18 -0
- package/dist/backend/llvm/map-number-lookup.js +62 -0
- package/dist/backend/llvm/map-number-lookup.js.map +1 -0
- package/dist/backend/llvm/map-read-lifetimes.d.ts +6 -0
- package/dist/backend/llvm/map-read-lifetimes.js +24 -3
- package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.test.js +38 -19
- package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.d.ts +68 -0
- package/dist/backend/llvm/nullable-unions.js +132 -0
- package/dist/backend/llvm/nullable-unions.js.map +1 -0
- package/dist/backend/llvm/publish.d.ts +58 -0
- package/dist/backend/llvm/publish.js +286 -0
- package/dist/backend/llvm/publish.js.map +1 -0
- package/dist/backend/llvm/rebound-parameters.d.ts +12 -0
- package/dist/backend/llvm/rebound-parameters.js +72 -0
- package/dist/backend/llvm/rebound-parameters.js.map +1 -0
- package/dist/backend/llvm/rebound-parameters.test.d.ts +1 -0
- package/dist/backend/llvm/rebound-parameters.test.js +67 -0
- package/dist/backend/llvm/rebound-parameters.test.js.map +1 -0
- package/dist/backend/llvm/reference-effects.d.ts +18 -2
- package/dist/backend/llvm/reference-effects.js +106 -16
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- package/dist/backend/llvm/reference-effects.test.js +52 -1
- package/dist/backend/llvm/reference-effects.test.js.map +1 -1
- package/dist/backend/llvm/shapes.d.ts +45 -17
- package/dist/backend/llvm/shapes.js +131 -53
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +33 -8
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/stack-unions.test.js +5 -2
- package/dist/backend/llvm/stack-unions.test.js.map +1 -1
- package/dist/backend/llvm/string-construction.d.ts +10 -0
- package/dist/backend/llvm/string-construction.js +42 -0
- package/dist/backend/llvm/string-construction.js.map +1 -1
- package/dist/backend/llvm/string-key-hash.d.ts +9 -2
- package/dist/backend/llvm/string-key-hash.js +20 -3
- package/dist/backend/llvm/string-key-hash.js.map +1 -1
- package/dist/backend/llvm/string-key-hash.test.js +14 -3
- package/dist/backend/llvm/string-key-hash.test.js.map +1 -1
- package/dist/backend/llvm/string-lifetimes.test.js +24 -11
- package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/string-reads.d.ts +7 -0
- package/dist/backend/llvm/string-reads.js +76 -0
- package/dist/backend/llvm/string-reads.js.map +1 -0
- package/dist/backend/llvm/switch-dispatch.test.js +1 -1
- package/dist/backend/llvm/switch-dispatch.test.js.map +1 -1
- package/dist/backend/llvm/test-boxed-unions.d.ts +5 -0
- package/dist/backend/llvm/test-boxed-unions.js +13 -0
- package/dist/backend/llvm/test-boxed-unions.js.map +1 -0
- package/dist/backend/llvm/union-repr.d.ts +15 -0
- package/dist/backend/llvm/union-repr.js +89 -0
- package/dist/backend/llvm/union-repr.js.map +1 -0
- package/dist/backend/llvm/virtual-borrows.d.ts +31 -0
- package/dist/backend/llvm/virtual-borrows.js +82 -0
- package/dist/backend/llvm/virtual-borrows.js.map +1 -0
- package/dist/backend/llvm/walk-borrows.d.ts +43 -0
- package/dist/backend/llvm/walk-borrows.js +150 -0
- package/dist/backend/llvm/walk-borrows.js.map +1 -0
- package/dist/backend/llvm/walk-borrows.test.d.ts +1 -0
- package/dist/backend/llvm/walk-borrows.test.js +119 -0
- package/dist/backend/llvm/walk-borrows.test.js.map +1 -0
- package/dist/backend/llvm/walkers.d.ts +5 -1
- package/dist/backend/llvm/walkers.js +24 -21
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/may-throw.d.ts +29 -1
- package/dist/backend/may-throw.js +346 -3
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/may-throw.test.js +113 -1
- package/dist/backend/may-throw.test.js.map +1 -1
- package/dist/backend/native/runtime-inputs.d.ts +1 -1
- package/dist/backend/native/runtime-inputs.js +1 -0
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native-codegen-core.d.ts +7 -5
- package/dist/backend/native-codegen-core.js +14 -9
- package/dist/backend/native-codegen-core.js.map +1 -1
- package/dist/backend/native-codegen.d.ts +4 -0
- package/dist/backend/native-codegen.js +49 -2
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +41 -10
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-tools.d.ts +2 -0
- package/dist/backend/native-tools.js +3 -0
- package/dist/backend/native-tools.js.map +1 -1
- package/dist/backend/publication.d.ts +28 -0
- package/dist/backend/publication.js +155 -0
- package/dist/backend/publication.js.map +1 -0
- package/dist/backend/publication.test.d.ts +1 -0
- package/dist/backend/publication.test.js +72 -0
- package/dist/backend/publication.test.js.map +1 -0
- package/dist/backend/runtime-abi.d.ts +2 -2
- package/dist/backend/runtime-abi.js +2 -2
- package/dist/backend/runtime-pack-targets.test.js +1 -1
- package/dist/backend/runtime-pack.test.js +1 -1
- package/dist/cli/command.js +70 -7
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/usage.d.ts +4 -1
- package/dist/cli/usage.js +8 -1
- package/dist/cli/usage.js.map +1 -1
- package/dist/compile-types.d.ts +12 -3
- package/dist/coverage/report.d.ts +25 -2
- package/dist/coverage/report.js +161 -33
- package/dist/coverage/report.js.map +1 -1
- package/dist/coverage/verdict-cache.d.ts +63 -0
- package/dist/coverage/verdict-cache.js +193 -0
- package/dist/coverage/verdict-cache.js.map +1 -0
- package/dist/coverage/verdict-cache.test.d.ts +1 -0
- package/dist/coverage/verdict-cache.test.js +52 -0
- package/dist/coverage/verdict-cache.test.js.map +1 -0
- package/dist/coverage/verdict-semantic.d.ts +2 -0
- package/dist/coverage/verdict-semantic.js +24 -0
- package/dist/coverage/verdict-semantic.js.map +1 -0
- package/dist/coverage/verdict-startup.d.ts +15 -0
- package/dist/coverage/verdict-startup.js +66 -0
- package/dist/coverage/verdict-startup.js.map +1 -0
- package/dist/diagnostics/diagnostic.d.ts +29 -1
- package/dist/diagnostics/diagnostic.js +74 -4
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/envelope.d.ts +130 -0
- package/dist/diagnostics/envelope.js +257 -0
- package/dist/diagnostics/envelope.js.map +1 -0
- package/dist/diagnostics/envelope.test.d.ts +1 -0
- package/dist/diagnostics/envelope.test.js +91 -0
- package/dist/diagnostics/envelope.test.js.map +1 -0
- package/dist/diagnostics/render.d.ts +3 -0
- package/dist/diagnostics/render.js +13 -2
- package/dist/diagnostics/render.js.map +1 -1
- package/dist/executable/prepare.d.ts +4 -0
- package/dist/executable/prepare.js +7 -1
- package/dist/executable/prepare.js.map +1 -1
- package/dist/frontend/analysis.js +1 -0
- package/dist/frontend/analysis.js.map +1 -1
- package/dist/frontend/lowering/array-values.d.ts +7 -0
- package/dist/frontend/lowering/array-values.js +120 -4
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/builtins/numbers.js +29 -1
- package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.d.ts +4 -0
- package/dist/frontend/lowering/builtins/process.js +10 -0
- package/dist/frontend/lowering/builtins/process.js.map +1 -1
- package/dist/frontend/lowering/builtins/workers.js +4 -2
- package/dist/frontend/lowering/builtins/workers.js.map +1 -1
- package/dist/frontend/lowering/class-assertions.d.ts +8 -0
- package/dist/frontend/lowering/class-assertions.js +217 -1
- package/dist/frontend/lowering/class-assertions.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.js +8 -5
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/coercions/state.d.ts +6 -0
- package/dist/frontend/lowering/coercions/state.js +2 -0
- package/dist/frontend/lowering/coercions/state.js.map +1 -1
- package/dist/frontend/lowering/coercions/unions.d.ts +8 -0
- package/dist/frontend/lowering/coercions/unions.js +67 -2
- package/dist/frontend/lowering/coercions/unions.js.map +1 -1
- package/dist/frontend/lowering/collation-repertoire.d.ts +1 -0
- package/dist/frontend/lowering/collation-repertoire.js +19 -0
- package/dist/frontend/lowering/collation-repertoire.js.map +1 -0
- package/dist/frontend/lowering/construction-escapes.d.ts +38 -0
- package/dist/frontend/lowering/construction-escapes.js +146 -0
- package/dist/frontend/lowering/construction-escapes.js.map +1 -0
- package/dist/frontend/lowering/construction-escapes.test.d.ts +1 -0
- package/dist/frontend/lowering/construction-escapes.test.js +150 -0
- package/dist/frontend/lowering/construction-escapes.test.js.map +1 -0
- package/dist/frontend/lowering/containers/array-callbacks.js +81 -44
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.js +15 -2
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +231 -12
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.js +43 -1
- package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
- package/dist/frontend/lowering/containers/string-and-regexp.js +7 -63
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/cycle-initialization.d.ts +6 -1
- package/dist/frontend/lowering/cycle-initialization.js +59 -33
- package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
- package/dist/frontend/lowering/divergences.d.ts +9 -0
- package/dist/frontend/lowering/divergences.js +630 -0
- package/dist/frontend/lowering/divergences.js.map +1 -0
- package/dist/frontend/lowering/expressions/object-literals.js +40 -2
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +5 -0
- package/dist/frontend/lowering/lower-calls.js +226 -157
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +4 -0
- package/dist/frontend/lowering/lower-classes.js +72 -22
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +13 -0
- package/dist/frontend/lowering/lower-exprs.js +431 -107
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.d.ts +19 -13
- package/dist/frontend/lowering/lower-generators.js +67 -44
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +3 -2
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-island.d.ts +1 -1
- package/dist/frontend/lowering/lower-island.js +24 -7
- package/dist/frontend/lowering/lower-island.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +90 -1
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.js +36 -6
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +78 -2
- package/dist/frontend/lowering/lowerer.js +986 -73
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-bounds.d.ts +19 -0
- package/dist/frontend/lowering/runtime-optional-bounds.js +354 -0
- package/dist/frontend/lowering/runtime-optional-bounds.js.map +1 -0
- package/dist/frontend/lowering/runtime-optional-bounds.test.d.ts +1 -0
- package/dist/frontend/lowering/runtime-optional-bounds.test.js +66 -0
- package/dist/frontend/lowering/runtime-optional-bounds.test.js.map +1 -0
- package/dist/frontend/lowering/runtime-optional-elements.d.ts +117 -0
- package/dist/frontend/lowering/runtime-optional-elements.js +738 -0
- package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -0
- package/dist/frontend/lowering/runtime-optional-guards.d.ts +36 -0
- package/dist/frontend/lowering/runtime-optional-guards.js +375 -0
- package/dist/frontend/lowering/runtime-optional-guards.js.map +1 -0
- package/dist/frontend/lowering/runtime-optional-guards.test.d.ts +1 -0
- package/dist/frontend/lowering/runtime-optional-guards.test.js +92 -0
- package/dist/frontend/lowering/runtime-optional-guards.test.js.map +1 -0
- package/dist/frontend/lowering/runtime-optional-ownership.d.ts +63 -0
- package/dist/frontend/lowering/runtime-optional-ownership.js +382 -0
- package/dist/frontend/lowering/runtime-optional-ownership.js.map +1 -0
- package/dist/frontend/lowering/runtime-optional-provenance.d.ts +2 -1
- package/dist/frontend/lowering/runtime-optional-provenance.js +2 -1
- package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -1
- package/dist/frontend/lowering/string-index-bounds.d.ts +36 -0
- package/dist/frontend/lowering/string-index-bounds.js +537 -0
- package/dist/frontend/lowering/string-index-bounds.js.map +1 -0
- package/dist/frontend/lowering/string-index-bounds.test.d.ts +1 -0
- package/dist/frontend/lowering/string-index-bounds.test.js +223 -0
- package/dist/frontend/lowering/string-index-bounds.test.js.map +1 -0
- package/dist/frontend/lowering/union-narrow.d.ts +2 -0
- package/dist/frontend/lowering/union-narrow.js +10 -6
- package/dist/frontend/lowering/union-narrow.js.map +1 -1
- package/dist/frontend/program-analysis.d.ts +10 -0
- package/dist/frontend/program-analysis.js +7 -0
- package/dist/frontend/program-analysis.js.map +1 -1
- package/dist/frontend/program.d.ts +25 -0
- package/dist/frontend/program.js +613 -17
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +64 -1
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/resolve.d.ts +6 -0
- package/dist/frontend/resolve.js +14 -0
- package/dist/frontend/resolve.js.map +1 -1
- package/dist/frontend/threads-import.d.ts +5 -0
- package/dist/frontend/threads-import.js +21 -0
- package/dist/frontend/threads-import.js.map +1 -0
- package/dist/frontend/type-mapper.d.ts +3 -0
- package/dist/frontend/type-mapper.js +72 -6
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/frontend/worker-target.d.ts +4 -0
- package/dist/frontend/worker-target.js +8 -1
- package/dist/frontend/worker-target.js.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.js +47 -9
- package/dist/index.js.map +1 -1
- package/dist/ir/build.d.ts +5 -0
- package/dist/ir/build.js +7 -0
- package/dist/ir/build.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +1 -1
- package/dist/ir/builtin-signatures.js +3 -0
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/int32-slots.d.ts +72 -0
- package/dist/ir/int32-slots.js +837 -0
- package/dist/ir/int32-slots.js.map +1 -0
- package/dist/ir/int32-slots.test.d.ts +1 -0
- package/dist/ir/int32-slots.test.js +222 -0
- package/dist/ir/int32-slots.test.js.map +1 -0
- package/dist/ir/integer-ranges.d.ts +19 -3
- package/dist/ir/integer-ranges.js +168 -23
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +74 -2
- package/dist/ir/integer-ranges.test.js.map +1 -1
- package/dist/ir/ir.d.ts +24 -6
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/validate.js +21 -2
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +39 -0
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/native/cache.d.ts +3 -0
- package/dist/native/cache.js +49 -1
- package/dist/native/cache.js.map +1 -1
- package/dist/native/cache.test.js +21 -1
- package/dist/native/cache.test.js.map +1 -1
- package/dist/native/cli.js +1 -1
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.d.ts +5 -0
- package/dist/native/compiler.js +51 -4
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/prepare.d.ts +4 -0
- package/dist/native/prepare.js +2 -1
- package/dist/native/prepare.js.map +1 -1
- package/dist/startup-cache.d.ts +2 -0
- package/dist/startup-cache.js +2 -0
- package/dist/startup-cache.js.map +1 -1
- package/package.json +20 -20
- package/surface-manifest.json +1 -1
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { expect, test } from "vitest";
|
|
5
|
+
import { compile, deserializeModule, validateModule } from "../../index.js";
|
|
6
|
+
async function lower(source) {
|
|
7
|
+
const dir = await mkdtemp(join(tmpdir(), "scriptc-string-index-bounds-"));
|
|
8
|
+
try {
|
|
9
|
+
const entry = join(dir, "main.ts"), output = join(dir, "main.ir.json");
|
|
10
|
+
await writeFile(entry, source);
|
|
11
|
+
const result = await compile(entry, {
|
|
12
|
+
outDir: dir,
|
|
13
|
+
outPath: output,
|
|
14
|
+
outputKind: "ir",
|
|
15
|
+
});
|
|
16
|
+
if (!result.ok)
|
|
17
|
+
throw new Error(result.diagnostics.map((item) => `${item.code}: ${item.message}`).join("\n"));
|
|
18
|
+
const module = deserializeModule(await readFile(output, "utf8"));
|
|
19
|
+
expect(validateModule(module)).toEqual([]);
|
|
20
|
+
return module;
|
|
21
|
+
}
|
|
22
|
+
finally {
|
|
23
|
+
await rm(dir, { recursive: true, force: true });
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/** Functions whose string element reads keep the optional (checked) form. */
|
|
27
|
+
function optionalReads(module) {
|
|
28
|
+
return new Set(module.functions
|
|
29
|
+
.filter((fn) => fn.locals.some((local) => local.name === "%indexedString"))
|
|
30
|
+
.map((fn) => fn.name));
|
|
31
|
+
}
|
|
32
|
+
const PROVEN = `
|
|
33
|
+
function upward(s: string): string {
|
|
34
|
+
let out = "";
|
|
35
|
+
for (let i = 0; i < s.length; i++) out += s[i];
|
|
36
|
+
return out;
|
|
37
|
+
}
|
|
38
|
+
function downward(s: string): string {
|
|
39
|
+
let out = "";
|
|
40
|
+
for (let i = s.length - 1; i >= 0; i--) out += s[i];
|
|
41
|
+
return out;
|
|
42
|
+
}
|
|
43
|
+
function stepped(s: string): string {
|
|
44
|
+
let out = "";
|
|
45
|
+
for (let i = 1; i < s.length; i += 2) out += s[i];
|
|
46
|
+
return out;
|
|
47
|
+
}
|
|
48
|
+
function scanned(s: string): number {
|
|
49
|
+
let words = 0;
|
|
50
|
+
let i = 0;
|
|
51
|
+
while (i < s.length) {
|
|
52
|
+
const ch = s[i];
|
|
53
|
+
if (ch === " ") { i++; continue; }
|
|
54
|
+
while (i < s.length && s[i] !== " ") i++;
|
|
55
|
+
words++;
|
|
56
|
+
}
|
|
57
|
+
return words;
|
|
58
|
+
}
|
|
59
|
+
function exitFirst(s: string): string {
|
|
60
|
+
let i = 0;
|
|
61
|
+
while (true) {
|
|
62
|
+
if (i >= s.length) return "";
|
|
63
|
+
if (s[i] !== " ") return s[i];
|
|
64
|
+
i++;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
function aliased(s: string): number {
|
|
68
|
+
const n = s.length;
|
|
69
|
+
let count = 0;
|
|
70
|
+
for (let i = 0; i < n; i++) if (s[i] === "a") count++;
|
|
71
|
+
return count;
|
|
72
|
+
}
|
|
73
|
+
function inclusive(s: string): number {
|
|
74
|
+
let count = 0;
|
|
75
|
+
for (let i = 0; i <= s.length - 1; i++) if (s[i] === "b") count++;
|
|
76
|
+
return count;
|
|
77
|
+
}
|
|
78
|
+
function choice(s: string): string {
|
|
79
|
+
const i = 2;
|
|
80
|
+
return i < s.length ? s[i] : "-";
|
|
81
|
+
}
|
|
82
|
+
function negated(s: string): string {
|
|
83
|
+
let i = 0;
|
|
84
|
+
if (!(i < s.length)) return "-";
|
|
85
|
+
return s[i];
|
|
86
|
+
}
|
|
87
|
+
function trimmed(s: string): number {
|
|
88
|
+
let end = s.length - 1;
|
|
89
|
+
while (end >= 0 && s[end] === " ") end--;
|
|
90
|
+
return end + 1;
|
|
91
|
+
}
|
|
92
|
+
function nested(text: string): number {
|
|
93
|
+
const count = (): number => {
|
|
94
|
+
let k = 0;
|
|
95
|
+
for (let i = 0; i < text.length; i++) if (text[i] === "x") k++;
|
|
96
|
+
return k;
|
|
97
|
+
};
|
|
98
|
+
return count() + count();
|
|
99
|
+
}
|
|
100
|
+
console.log(upward("ab"), downward("ab"), stepped("abcd"), scanned("a b"), exitFirst(" q"));
|
|
101
|
+
console.log(aliased("aa"), inclusive("bb"), choice("abc"), negated("z"), trimmed("a "), nested("x"));
|
|
102
|
+
`;
|
|
103
|
+
const UNPROVEN = `
|
|
104
|
+
function bumped(s: string): string | undefined {
|
|
105
|
+
let i = 0;
|
|
106
|
+
if (i < s.length) { i++; return s[i]; }
|
|
107
|
+
return "";
|
|
108
|
+
}
|
|
109
|
+
function innerLoop(s: string): string {
|
|
110
|
+
let out = "";
|
|
111
|
+
let i = 0;
|
|
112
|
+
if (i < s.length) for (let k = 0; k < 3; k++) { out += String(s[i]); i++; }
|
|
113
|
+
return out;
|
|
114
|
+
}
|
|
115
|
+
function replaced(s: string): string | undefined {
|
|
116
|
+
let t = s;
|
|
117
|
+
const i = 1;
|
|
118
|
+
if (i < t.length) { t = ""; return t[i]; }
|
|
119
|
+
return "";
|
|
120
|
+
}
|
|
121
|
+
function capturedText(s: string): string {
|
|
122
|
+
let t = s;
|
|
123
|
+
const clear = (): void => { t = ""; };
|
|
124
|
+
let out = "";
|
|
125
|
+
for (let i = 0; i < t.length; i++) { clear(); out += String(t[i]); }
|
|
126
|
+
return out;
|
|
127
|
+
}
|
|
128
|
+
function capturedIndex(s: string): string {
|
|
129
|
+
let i = 0;
|
|
130
|
+
const skip = (): void => { i += 5; };
|
|
131
|
+
let out = "";
|
|
132
|
+
while (i < s.length) { skip(); out += String(s[i]); }
|
|
133
|
+
return out;
|
|
134
|
+
}
|
|
135
|
+
function fractional(s: string): string | undefined {
|
|
136
|
+
const i = 0.5;
|
|
137
|
+
return i < s.length ? s[i] : "";
|
|
138
|
+
}
|
|
139
|
+
function negative(s: string): string | undefined {
|
|
140
|
+
const i = -1;
|
|
141
|
+
return i < s.length ? s[i] : "";
|
|
142
|
+
}
|
|
143
|
+
function pastEnd(s: string): string {
|
|
144
|
+
let out = "";
|
|
145
|
+
for (let i = 0; i <= s.length; i++) out += String(s[i]);
|
|
146
|
+
return out;
|
|
147
|
+
}
|
|
148
|
+
function otherText(s: string, t: string): string {
|
|
149
|
+
let out = "";
|
|
150
|
+
for (let i = 0; i < s.length; i++) out += String(t[i]);
|
|
151
|
+
return out;
|
|
152
|
+
}
|
|
153
|
+
function parameterIndex(s: string, i: number): string | undefined {
|
|
154
|
+
return i < s.length ? s[i] : "";
|
|
155
|
+
}
|
|
156
|
+
function afterLoop(s: string): string | undefined {
|
|
157
|
+
let i = 0;
|
|
158
|
+
do { i++; } while (i < s.length);
|
|
159
|
+
return s[i];
|
|
160
|
+
}
|
|
161
|
+
function unguarded(s: string): string | undefined {
|
|
162
|
+
const i = 0;
|
|
163
|
+
return s[i];
|
|
164
|
+
}
|
|
165
|
+
console.log(bumped("a"), innerLoop("ab"), replaced("ab"), capturedText("ab"), capturedIndex("ab"));
|
|
166
|
+
console.log(fractional("a"), negative("a"), pastEnd("a"), otherText("abc", "a"), parameterIndex("a", 0.5));
|
|
167
|
+
console.log(afterLoop("ab"), unguarded(""));
|
|
168
|
+
`;
|
|
169
|
+
test("proven in-bounds string element reads lower to plain strings", async () => {
|
|
170
|
+
const module = await lower(PROVEN);
|
|
171
|
+
const names = [
|
|
172
|
+
"upward",
|
|
173
|
+
"downward",
|
|
174
|
+
"stepped",
|
|
175
|
+
"scanned",
|
|
176
|
+
"exitFirst",
|
|
177
|
+
"aliased",
|
|
178
|
+
"inclusive",
|
|
179
|
+
"choice",
|
|
180
|
+
"negated",
|
|
181
|
+
"trimmed",
|
|
182
|
+
"nested",
|
|
183
|
+
];
|
|
184
|
+
for (const name of names)
|
|
185
|
+
expect(module.functions.some((fn) => fn.name === name), name).toBe(true);
|
|
186
|
+
expect([...optionalReads(module)]).toEqual([]);
|
|
187
|
+
});
|
|
188
|
+
test("reads without a bounds proof keep the optional result", async () => {
|
|
189
|
+
const module = await lower(UNPROVEN);
|
|
190
|
+
const optional = optionalReads(module);
|
|
191
|
+
for (const name of [
|
|
192
|
+
"bumped",
|
|
193
|
+
"innerLoop",
|
|
194
|
+
"replaced",
|
|
195
|
+
"capturedText",
|
|
196
|
+
"capturedIndex",
|
|
197
|
+
"fractional",
|
|
198
|
+
"negative",
|
|
199
|
+
"pastEnd",
|
|
200
|
+
"otherText",
|
|
201
|
+
"parameterIndex",
|
|
202
|
+
"afterLoop",
|
|
203
|
+
"unguarded",
|
|
204
|
+
])
|
|
205
|
+
expect(optional.has(name), name).toBe(true);
|
|
206
|
+
});
|
|
207
|
+
test("a callee keeps a plain string parameter when every caller is proven", async () => {
|
|
208
|
+
const module = await lower(`
|
|
209
|
+
function isDigit(ch: string): boolean { return ch >= "0" && ch <= "9"; }
|
|
210
|
+
function isUpper(ch: string): boolean { return ch >= "A" && ch <= "Z"; }
|
|
211
|
+
function count(text: string): number {
|
|
212
|
+
let n = 0;
|
|
213
|
+
for (let i = 0; i < text.length; i++) if (isDigit(text[i])) n++;
|
|
214
|
+
return n;
|
|
215
|
+
}
|
|
216
|
+
function peekUpper(text: string, at: number): boolean { return isUpper(text[at]); }
|
|
217
|
+
console.log(count("a1b2"), peekUpper("Ab", 0), peekUpper("Ab", 9));
|
|
218
|
+
`);
|
|
219
|
+
const param = (name) => module.functions.find((fn) => fn.name === name).params[0].type;
|
|
220
|
+
expect(param("isDigit")).toEqual({ kind: "string" });
|
|
221
|
+
expect(param("isUpper").kind).toBe("union");
|
|
222
|
+
});
|
|
223
|
+
//# sourceMappingURL=string-index-bounds.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string-index-bounds.test.js","sourceRoot":"","sources":["../../../src/frontend/lowering/string-index-bounds.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { IrExpr, IrFunction, IrType, IrUnionDef, SrcLoc } from "../../ir/ir.js";
|
|
2
|
+
/** The TypeError message for a checked extraction that finds `arm`. */
|
|
3
|
+
export declare function unionNarrowFailureMessage(arm: IrType, formatType: (type: IrType) => string): string;
|
|
2
4
|
/** Build checked extraction from a union's actual storage. Successful reads
|
|
3
5
|
* retain reference payloads through unionNarrow; every other valid tag
|
|
4
6
|
* throws before the payload can be interpreted as the target type.
|
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
import { BOOL, STRING, isUnitType, typeEquals } from "../../ir/ir.js";
|
|
2
|
+
/** The TypeError message for a checked extraction that finds `arm`. */
|
|
3
|
+
export function unionNarrowFailureMessage(arm, formatType) {
|
|
4
|
+
const what = isUnitType(arm)
|
|
5
|
+
? arm.kind === "undefinedT"
|
|
6
|
+
? "undefined"
|
|
7
|
+
: "null"
|
|
8
|
+
: `a '${formatType(arm)}' value`;
|
|
9
|
+
return `${what} is not representable in the target union (a value narrowed or asserted past it still held it)`;
|
|
10
|
+
}
|
|
2
11
|
/** Build checked extraction from a union's actual storage. Successful reads
|
|
3
12
|
* retain reference payloads through unionNarrow; every other valid tag
|
|
4
13
|
* throws before the payload can be interpreted as the target type.
|
|
@@ -38,11 +47,6 @@ export function buildUnionNarrow(name, from, target, loc, formatType, undefinedD
|
|
|
38
47
|
branch = [{ kind: "return", value: undefinedDefault, loc }];
|
|
39
48
|
}
|
|
40
49
|
else {
|
|
41
|
-
const what = isUnitType(arm)
|
|
42
|
-
? arm.kind === "undefinedT"
|
|
43
|
-
? "undefined"
|
|
44
|
-
: "null"
|
|
45
|
-
: `a '${formatType(arm)}' value`;
|
|
46
50
|
branch = [
|
|
47
51
|
{
|
|
48
52
|
kind: "throw",
|
|
@@ -52,7 +56,7 @@ export function buildUnionNarrow(name, from, target, loc, formatType, undefinedD
|
|
|
52
56
|
args: [
|
|
53
57
|
{
|
|
54
58
|
kind: "strLit",
|
|
55
|
-
value:
|
|
59
|
+
value: unionNarrowFailureMessage(arm, formatType),
|
|
56
60
|
type: STRING,
|
|
57
61
|
loc,
|
|
58
62
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"union-narrow.js","sourceRoot":"","sources":["../../../src/frontend/lowering/union-narrow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGtE;;;;;;kEAMkE;AAClE,MAAM,UAAU,gBAAgB,CAC9B,IAAY,EACZ,IAAgB,EAChB,MAAc,EACd,GAAW,EACX,UAAoC,EACpC,gBAAgB,GAAkB,IAAI;IAEtC,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;IACxE,IAAI,SAAS,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/B,IAAI,gBAAgB,KAAK,IAAI,EAAE,CAAC;QAC9B,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC;QACjE,IACE,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC;YAC1C,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC;YAEnD,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,MAAM,SAAS,GAAW,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;IAC9D,MAAM,KAAK,GAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IAC/E,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAE,CAAC;QAC5B,IAAI,MAAgB,CAAC;QACrB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM,GAAG;gBACP;oBACE,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;oBACtF,GAAG;iBACJ;aACF,CAAC;QACJ,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,IAAI,gBAAgB,KAAK,IAAI,EAAE,CAAC;YAClE,MAAM,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACN,MAAM,
|
|
1
|
+
{"version":3,"file":"union-narrow.js","sourceRoot":"","sources":["../../../src/frontend/lowering/union-narrow.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import type { ExportDeclaration, SourceFile, VariableDeclaration } from "./ts7/ast-types.js";
|
|
2
2
|
import type { ModuleSourceCandidates } from "./module-source-candidates.js";
|
|
3
|
+
import type { CycleEarlyBinding } from "./program.js";
|
|
4
|
+
/** Early bindings computed for one module order of a program. */
|
|
5
|
+
export interface EarlyBindingsMemo {
|
|
6
|
+
key: string;
|
|
7
|
+
bindings: CycleEarlyBinding[];
|
|
8
|
+
}
|
|
3
9
|
/** Facts owned by one program snapshot. Strong collections are bounded by
|
|
4
10
|
* the program lifecycle, so neither GC finalizers nor native weak handles
|
|
5
11
|
* are needed, and newer snapshots cannot inherit stale package decisions. */
|
|
@@ -8,5 +14,9 @@ export declare class ProgramAnalysis {
|
|
|
8
14
|
readonly nodeEsmFiles: Map<SourceFile, boolean>;
|
|
9
15
|
readonly prunedNpmReexports: Set<ExportDeclaration>;
|
|
10
16
|
readonly moduleSourceCandidates: Map<SourceFile, ModuleSourceCandidates>;
|
|
17
|
+
/** The modules of every import cycle the exact initialization rule admitted. */
|
|
18
|
+
readonly exactCycleMembers: Set<SourceFile>;
|
|
19
|
+
cycleEarlyBindings: EarlyBindingsMemo | null;
|
|
20
|
+
moduleEarlyBindings: EarlyBindingsMemo | null;
|
|
11
21
|
clear(): void;
|
|
12
22
|
}
|
|
@@ -6,11 +6,18 @@ export class ProgramAnalysis {
|
|
|
6
6
|
nodeEsmFiles = new Map();
|
|
7
7
|
prunedNpmReexports = new Set();
|
|
8
8
|
moduleSourceCandidates = new Map();
|
|
9
|
+
/** The modules of every import cycle the exact initialization rule admitted. */
|
|
10
|
+
exactCycleMembers = new Set();
|
|
11
|
+
cycleEarlyBindings = null;
|
|
12
|
+
moduleEarlyBindings = null;
|
|
9
13
|
clear() {
|
|
10
14
|
this.createRequireReasons.clear();
|
|
11
15
|
this.nodeEsmFiles.clear();
|
|
12
16
|
this.prunedNpmReexports.clear();
|
|
13
17
|
this.moduleSourceCandidates.clear();
|
|
18
|
+
this.exactCycleMembers.clear();
|
|
19
|
+
this.cycleEarlyBindings = null;
|
|
20
|
+
this.moduleEarlyBindings = null;
|
|
14
21
|
}
|
|
15
22
|
}
|
|
16
23
|
//# sourceMappingURL=program-analysis.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"program-analysis.js","sourceRoot":"","sources":["../../src/frontend/program-analysis.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"program-analysis.js","sourceRoot":"","sources":["../../src/frontend/program-analysis.ts"],"names":[],"mappings":"AAUA;;6EAE6E;AAC7E,MAAM,OAAO,eAAe;IACjB,oBAAoB,GAAG,IAAI,GAAG,EAAsC,CAAC;IACrE,YAAY,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC9C,kBAAkB,GAAG,IAAI,GAAG,EAAqB,CAAC;IAClD,sBAAsB,GAAG,IAAI,GAAG,EAAsC,CAAC;IAChF,gFAAgF;IACvE,iBAAiB,GAAG,IAAI,GAAG,EAAc,CAAC;IACnD,kBAAkB,GAA6B,IAAI,CAAC;IACpD,mBAAmB,GAA6B,IAAI,CAAC;IAErD,KAAK;QACH,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;QAClC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,CAAC;QACpC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAClC,CAAC;CACF"}
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import * as ts from "./ts7/adapter.js";
|
|
2
2
|
import type { ScrDiagnostic } from "../diagnostics/diagnostic.js";
|
|
3
3
|
import type { FrontendServices } from "./services.js";
|
|
4
|
+
export interface TypeWorldDifferences {
|
|
5
|
+
/** No @types/node: the bundled fallback declarations type Node. */
|
|
6
|
+
nodeFallback: boolean;
|
|
7
|
+
/** The project tsconfig's "lib" entries (scriptc checks with its own). */
|
|
8
|
+
projectLib: readonly string[] | null;
|
|
9
|
+
/** The project disables strictNullChecks; scriptc forces it on. */
|
|
10
|
+
forcedStrictNullChecks: boolean;
|
|
11
|
+
}
|
|
4
12
|
export interface LoadResult {
|
|
5
13
|
program: ts.Program;
|
|
6
14
|
entry: ts.SourceFile;
|
|
@@ -23,6 +31,9 @@ export interface LoadResult {
|
|
|
23
31
|
* checkPreflight. */
|
|
24
32
|
startupCrash?: StartupCrash | null;
|
|
25
33
|
configDiags: ScrDiagnostic[];
|
|
34
|
+
/** How scriptc's type world differs from the project's own tsc setup —
|
|
35
|
+
* used only to label the TypeScript errors those differences cause. */
|
|
36
|
+
typeWorld?: TypeWorldDifferences;
|
|
26
37
|
/** Coverage-only external host modules: exact bare specifier → local
|
|
27
38
|
* declaration file. These participate in checker resolution but never
|
|
28
39
|
* become runtime module edges. */
|
|
@@ -186,6 +197,20 @@ export interface CycleEarlyBinding {
|
|
|
186
197
|
* Otherwise every deferred reference and every top-level reference from
|
|
187
198
|
* another member counts. */
|
|
188
199
|
export declare function cycleEarlyBindings(program: ts.Program, entry: ts.SourceFile, order: readonly ts.SourceFile[], singleRoot: boolean): CycleEarlyBinding[];
|
|
200
|
+
/** Top-level let/const bindings, in modules outside the exactly-initialized
|
|
201
|
+
* cycles, that code running before their declaration completes can read.
|
|
202
|
+
* Function declarations are callable from the module's start, so a call
|
|
203
|
+
* made by earlier top-level code (or by the declaration's own initializer)
|
|
204
|
+
* can observe the temporal dead zone. Reachability is syntactic: a stored
|
|
205
|
+
* callable (a function or class declaration, or a function, class or
|
|
206
|
+
* object-literal method stored by a variable initializer) becomes reachable
|
|
207
|
+
* once reachable code names its binding, and every other function-like in
|
|
208
|
+
* reachable code counts as reachable because it may be handed to a callee.
|
|
209
|
+
* A binding is reported only when one of its references in a deferred
|
|
210
|
+
* position is reachable before the declaration ran, so modules that call
|
|
211
|
+
* nothing early report nothing. Bindings of exactly-initialized cycles are
|
|
212
|
+
* covered by cycleEarlyBindings. */
|
|
213
|
+
export declare function moduleEarlyBindings(program: ts.Program, order: readonly ts.SourceFile[]): CycleEarlyBinding[];
|
|
189
214
|
/** Resolves an import specifier from `from` to a source file of the
|
|
190
215
|
* program, or null (unresolvable / outside the program). Exported (as
|
|
191
216
|
* resolveImport) for the lowering: CommonJS require statements lower to
|