@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,63 @@
|
|
|
1
|
+
import * as ts from "../ts7/adapter.js";
|
|
2
|
+
/** Program queries for the array-ownership proof. */
|
|
3
|
+
export interface OwnershipHost {
|
|
4
|
+
symbolOf(node: ts.Node): ts.Symbol | null;
|
|
5
|
+
declarationOf(symbol: ts.Symbol): ts.Node | undefined;
|
|
6
|
+
/** The node's checker type; null when the checker cannot answer. */
|
|
7
|
+
typeOf(node: ts.Node): ts.Type | null;
|
|
8
|
+
/** An instance of `owner` can be assigned to a value of type `target`. */
|
|
9
|
+
instanceAssignableTo(owner: ts.ClassLikeDeclaration, target: ts.Type): boolean;
|
|
10
|
+
isGlobal(node: ts.Expression, name: string): boolean;
|
|
11
|
+
isArray(node: ts.Expression): boolean;
|
|
12
|
+
/** Element keys of the native arrays a field's declared type holds. */
|
|
13
|
+
fieldKeys(declaration: ts.PropertyDeclaration): readonly string[];
|
|
14
|
+
/** Element keys of native arrays that some `any` or `unknown` value is
|
|
15
|
+
* converted to. Such a conversion can view an array reached through
|
|
16
|
+
* reflection (`(x as any).field`, `Object.values(x)`). */
|
|
17
|
+
dynamicViewKeys(): ReadonlySet<string>;
|
|
18
|
+
}
|
|
19
|
+
/** Proves that an array is owned by one storage slot: a local variable or
|
|
20
|
+
* a private instance field that only ever holds arrays allocated for it,
|
|
21
|
+
* whose every use reads elements or the length, mutates the array in
|
|
22
|
+
* place, or copies its elements into a new value (a spread, an iteration,
|
|
23
|
+
* a copying method), and never lets the array itself flow anywhere else.
|
|
24
|
+
* Facts about the slot's holes and undefined values then belong to the
|
|
25
|
+
* slot alone rather than to every array with the same element type.
|
|
26
|
+
*
|
|
27
|
+
* A private field can also be reached without naming its symbol: an object
|
|
28
|
+
* spread or destructuring of its instance, a literal-key access, or
|
|
29
|
+
* reflection that yields an `any` value. The first two must not apply to a
|
|
30
|
+
* value that can hold an instance, and no `any` or `unknown` value may be
|
|
31
|
+
* converted to the field's array type, which is the only way a reflected
|
|
32
|
+
* array becomes a native array again. */
|
|
33
|
+
export declare class ArrayOwnership {
|
|
34
|
+
private readonly files;
|
|
35
|
+
private readonly host;
|
|
36
|
+
private references;
|
|
37
|
+
/** Object spreads, which copy every own field out. */
|
|
38
|
+
private readonly copiedObjects;
|
|
39
|
+
/** Object destructuring patterns by the property names they read; ""
|
|
40
|
+
* collects patterns with a computed key or rest, which read any field. */
|
|
41
|
+
private readonly destructurings;
|
|
42
|
+
/** Receivers of `x["name"]` and `x.name`, by name. */
|
|
43
|
+
private readonly literalKeyAccesses;
|
|
44
|
+
private readonly namedAccesses;
|
|
45
|
+
/** Values whose fields are read by a computed key, an object walker, or
|
|
46
|
+
* a for-in loop. */
|
|
47
|
+
private readonly reflected;
|
|
48
|
+
private readonly ownedRoots;
|
|
49
|
+
constructor(files: readonly ts.SourceFile[], host: OwnershipHost);
|
|
50
|
+
/** The owning slot `node` reads, when it directly references one. */
|
|
51
|
+
ownerOf(node: ts.Expression): ts.Symbol | null;
|
|
52
|
+
/** The owning slot a freshly built array initializes or is assigned to. */
|
|
53
|
+
allocationOwner(allocation: ts.Expression): ts.Symbol | null;
|
|
54
|
+
private rootOf;
|
|
55
|
+
private fieldRoot;
|
|
56
|
+
private owned;
|
|
57
|
+
private computeOwned;
|
|
58
|
+
private ownedUse;
|
|
59
|
+
/** Nothing reaches the field's array without naming the field. */
|
|
60
|
+
private unexposed;
|
|
61
|
+
private isFreshArray;
|
|
62
|
+
private index;
|
|
63
|
+
}
|
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
import * as ts from "../ts7/adapter.js";
|
|
2
|
+
/** Array methods returning their receiver: a used result aliases it. */
|
|
3
|
+
const RETURNS_RECEIVER = new Set(["sort", "reverse", "fill", "copyWithin"]);
|
|
4
|
+
/** Array methods whose callback receives the array itself, by the
|
|
5
|
+
* position of that parameter. */
|
|
6
|
+
const ARRAY_ARGUMENT_AT = new Map([
|
|
7
|
+
["map", 2],
|
|
8
|
+
["filter", 2],
|
|
9
|
+
["forEach", 2],
|
|
10
|
+
["some", 2],
|
|
11
|
+
["every", 2],
|
|
12
|
+
["find", 2],
|
|
13
|
+
["findIndex", 2],
|
|
14
|
+
["findLast", 2],
|
|
15
|
+
["findLastIndex", 2],
|
|
16
|
+
["flatMap", 2],
|
|
17
|
+
["reduce", 3],
|
|
18
|
+
["reduceRight", 3],
|
|
19
|
+
]);
|
|
20
|
+
/** Iterator factories: their iterator reads the array later, so they are
|
|
21
|
+
* only an owned use directly as a for-of source. */
|
|
22
|
+
const ITERATORS = new Set(["values", "entries", "keys"]);
|
|
23
|
+
/** Array methods that return a newly allocated array. */
|
|
24
|
+
const FRESH_METHODS = new Set([
|
|
25
|
+
"map",
|
|
26
|
+
"filter",
|
|
27
|
+
"slice",
|
|
28
|
+
"concat",
|
|
29
|
+
"flat",
|
|
30
|
+
"flatMap",
|
|
31
|
+
"toSorted",
|
|
32
|
+
"toReversed",
|
|
33
|
+
"toSpliced",
|
|
34
|
+
"with",
|
|
35
|
+
]);
|
|
36
|
+
/** Proves that an array is owned by one storage slot: a local variable or
|
|
37
|
+
* a private instance field that only ever holds arrays allocated for it,
|
|
38
|
+
* whose every use reads elements or the length, mutates the array in
|
|
39
|
+
* place, or copies its elements into a new value (a spread, an iteration,
|
|
40
|
+
* a copying method), and never lets the array itself flow anywhere else.
|
|
41
|
+
* Facts about the slot's holes and undefined values then belong to the
|
|
42
|
+
* slot alone rather than to every array with the same element type.
|
|
43
|
+
*
|
|
44
|
+
* A private field can also be reached without naming its symbol: an object
|
|
45
|
+
* spread or destructuring of its instance, a literal-key access, or
|
|
46
|
+
* reflection that yields an `any` value. The first two must not apply to a
|
|
47
|
+
* value that can hold an instance, and no `any` or `unknown` value may be
|
|
48
|
+
* converted to the field's array type, which is the only way a reflected
|
|
49
|
+
* array becomes a native array again. */
|
|
50
|
+
export class ArrayOwnership {
|
|
51
|
+
files;
|
|
52
|
+
host;
|
|
53
|
+
references = null;
|
|
54
|
+
/** Object spreads, which copy every own field out. */
|
|
55
|
+
copiedObjects = [];
|
|
56
|
+
/** Object destructuring patterns by the property names they read; ""
|
|
57
|
+
* collects patterns with a computed key or rest, which read any field. */
|
|
58
|
+
destructurings = new Map();
|
|
59
|
+
/** Receivers of `x["name"]` and `x.name`, by name. */
|
|
60
|
+
literalKeyAccesses = new Map();
|
|
61
|
+
namedAccesses = new Map();
|
|
62
|
+
/** Values whose fields are read by a computed key, an object walker, or
|
|
63
|
+
* a for-in loop. */
|
|
64
|
+
reflected = [];
|
|
65
|
+
ownedRoots = new Map();
|
|
66
|
+
constructor(files, host) {
|
|
67
|
+
this.files = files;
|
|
68
|
+
this.host = host;
|
|
69
|
+
}
|
|
70
|
+
/** The owning slot `node` reads, when it directly references one. */
|
|
71
|
+
ownerOf(node) {
|
|
72
|
+
const root = this.rootOf(node);
|
|
73
|
+
return root !== null && this.owned(root) ? root.symbol : null;
|
|
74
|
+
}
|
|
75
|
+
/** The owning slot a freshly built array initializes or is assigned to. */
|
|
76
|
+
allocationOwner(allocation) {
|
|
77
|
+
let child = allocation;
|
|
78
|
+
let parent = allocation.parent;
|
|
79
|
+
while (parent &&
|
|
80
|
+
(ts.isParenthesizedExpression(parent) ||
|
|
81
|
+
ts.isAsExpression(parent) ||
|
|
82
|
+
ts.isTypeAssertion(parent) ||
|
|
83
|
+
ts.isSatisfiesExpression(parent))) {
|
|
84
|
+
child = parent;
|
|
85
|
+
parent = parent.parent;
|
|
86
|
+
}
|
|
87
|
+
let root = null;
|
|
88
|
+
if (parent && ts.isVariableDeclaration(parent) && parent.initializer === child) {
|
|
89
|
+
if (ts.isIdentifier(parent.name))
|
|
90
|
+
root = this.rootOf(parent.name);
|
|
91
|
+
}
|
|
92
|
+
else if (parent &&
|
|
93
|
+
ts.isBinaryExpression(parent) &&
|
|
94
|
+
parent.operatorToken.kind === ts.SyntaxKind.EqualsToken &&
|
|
95
|
+
parent.right === child) {
|
|
96
|
+
root = this.rootOf(parent.left);
|
|
97
|
+
}
|
|
98
|
+
else if (parent && ts.isPropertyDeclaration(parent) && parent.initializer === child) {
|
|
99
|
+
root = this.fieldRoot(parent);
|
|
100
|
+
}
|
|
101
|
+
return root !== null && this.owned(root) ? root.symbol : null;
|
|
102
|
+
}
|
|
103
|
+
rootOf(node) {
|
|
104
|
+
const e = peel(node);
|
|
105
|
+
if (ts.isIdentifier(e)) {
|
|
106
|
+
const symbol = this.host.symbolOf(e);
|
|
107
|
+
const declaration = symbol ? this.host.declarationOf(symbol) : undefined;
|
|
108
|
+
if (!symbol ||
|
|
109
|
+
!declaration ||
|
|
110
|
+
!ts.isVariableDeclaration(declaration) ||
|
|
111
|
+
!ts.isIdentifier(declaration.name) ||
|
|
112
|
+
!ts.isVariableDeclarationList(declaration.parent) ||
|
|
113
|
+
!ts.isVariableStatement(declaration.parent.parent))
|
|
114
|
+
return null;
|
|
115
|
+
return { symbol, name: e.text, field: null };
|
|
116
|
+
}
|
|
117
|
+
if (ts.isPropertyAccessExpression(e)) {
|
|
118
|
+
const symbol = this.host.symbolOf(e.name);
|
|
119
|
+
const declaration = symbol ? this.host.declarationOf(symbol) : undefined;
|
|
120
|
+
return declaration && ts.isPropertyDeclaration(declaration)
|
|
121
|
+
? this.fieldRoot(declaration)
|
|
122
|
+
: null;
|
|
123
|
+
}
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
fieldRoot(declaration) {
|
|
127
|
+
const owner = declaration.parent;
|
|
128
|
+
if (!ts.isClassDeclaration(owner) && !ts.isClassExpression(owner))
|
|
129
|
+
return null;
|
|
130
|
+
const name = declaration.name;
|
|
131
|
+
const flags = ts.getCombinedModifierFlags(declaration);
|
|
132
|
+
const isPrivate = ts.isPrivateIdentifier(name) ||
|
|
133
|
+
(flags & (ts.ModifierFlags.Private | ts.ModifierFlags.Protected)) !== 0;
|
|
134
|
+
if (!isPrivate || (flags & ts.ModifierFlags.Static) !== 0)
|
|
135
|
+
return null;
|
|
136
|
+
if (!ts.isIdentifier(name) && !ts.isPrivateIdentifier(name))
|
|
137
|
+
return null;
|
|
138
|
+
const symbol = this.host.symbolOf(name);
|
|
139
|
+
return symbol ? { symbol, name: name.text, field: declaration } : null;
|
|
140
|
+
}
|
|
141
|
+
owned(root) {
|
|
142
|
+
const cached = this.ownedRoots.get(root.symbol);
|
|
143
|
+
if (cached !== undefined)
|
|
144
|
+
return cached;
|
|
145
|
+
const result = this.computeOwned(root);
|
|
146
|
+
this.ownedRoots.set(root.symbol, result);
|
|
147
|
+
return result;
|
|
148
|
+
}
|
|
149
|
+
computeOwned(root) {
|
|
150
|
+
const references = this.index().get(root.name) ?? [];
|
|
151
|
+
for (const reference of references) {
|
|
152
|
+
if (this.host.symbolOf(reference) !== root.symbol)
|
|
153
|
+
continue;
|
|
154
|
+
if (!this.ownedUse(reference, root))
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
return root.field === null || this.unexposed(root, root.field);
|
|
158
|
+
}
|
|
159
|
+
ownedUse(reference, root) {
|
|
160
|
+
const parent = reference.parent;
|
|
161
|
+
if (parent &&
|
|
162
|
+
(ts.isVariableDeclaration(parent) || ts.isPropertyDeclaration(parent)) &&
|
|
163
|
+
parent.name === reference)
|
|
164
|
+
return parent.initializer === undefined || this.isFreshArray(parent.initializer);
|
|
165
|
+
let use = reference;
|
|
166
|
+
if (root.field !== null) {
|
|
167
|
+
if (!parent || !ts.isPropertyAccessExpression(parent) || parent.name !== reference)
|
|
168
|
+
return false;
|
|
169
|
+
use = parent;
|
|
170
|
+
}
|
|
171
|
+
else if (!ts.isIdentifier(reference))
|
|
172
|
+
return false;
|
|
173
|
+
while (use.parent &&
|
|
174
|
+
(ts.isParenthesizedExpression(use.parent) || ts.isNonNullExpression(use.parent)))
|
|
175
|
+
use = use.parent;
|
|
176
|
+
const user = use.parent;
|
|
177
|
+
if (!user)
|
|
178
|
+
return false;
|
|
179
|
+
if (ts.isElementAccessExpression(user) && user.expression === use)
|
|
180
|
+
return true;
|
|
181
|
+
if (ts.isSpreadElement(user))
|
|
182
|
+
return true;
|
|
183
|
+
if (ts.isForOfStatement(user) && user.expression === use)
|
|
184
|
+
return true;
|
|
185
|
+
if (ts.isPropertyAccessExpression(user) && user.expression === use) {
|
|
186
|
+
const method = user.name.text;
|
|
187
|
+
if (method === "length")
|
|
188
|
+
return true;
|
|
189
|
+
const call = user.parent;
|
|
190
|
+
if (!call || !ts.isCallExpression(call) || call.expression !== user)
|
|
191
|
+
return false;
|
|
192
|
+
if (ITERATORS.has(method))
|
|
193
|
+
return !!call.parent && ts.isForOfStatement(call.parent) && call.parent.expression === call;
|
|
194
|
+
if (RETURNS_RECEIVER.has(method))
|
|
195
|
+
return !!call.parent && ts.isExpressionStatement(call.parent);
|
|
196
|
+
const arrayAt = ARRAY_ARGUMENT_AT.get(method);
|
|
197
|
+
if (arrayAt !== undefined) {
|
|
198
|
+
// An inline callback that cannot see its array argument.
|
|
199
|
+
const callback = call.arguments[0];
|
|
200
|
+
return (callback !== undefined &&
|
|
201
|
+
(ts.isArrowFunction(callback) ||
|
|
202
|
+
(ts.isFunctionExpression(callback) && !usesArguments(callback))) &&
|
|
203
|
+
callback.parameters.length <= arrayAt &&
|
|
204
|
+
!callback.parameters.some((parameter) => parameter.dotDotDotToken));
|
|
205
|
+
}
|
|
206
|
+
return this.host.isArray(user.expression);
|
|
207
|
+
}
|
|
208
|
+
if (ts.isBinaryExpression(user) &&
|
|
209
|
+
user.left === use &&
|
|
210
|
+
user.operatorToken.kind === ts.SyntaxKind.EqualsToken)
|
|
211
|
+
return this.isFreshArray(user.right);
|
|
212
|
+
if (ts.isCallExpression(user) && user.arguments[0] === use) {
|
|
213
|
+
const callee = peel(user.expression);
|
|
214
|
+
return (ts.isPropertyAccessExpression(callee) &&
|
|
215
|
+
((callee.name.text === "hasOwn" && this.host.isGlobal(callee.expression, "Object")) ||
|
|
216
|
+
(callee.name.text === "isArray" && this.host.isGlobal(callee.expression, "Array")) ||
|
|
217
|
+
(callee.name.text === "from" &&
|
|
218
|
+
user.arguments.length === 1 &&
|
|
219
|
+
this.host.isGlobal(callee.expression, "Array"))));
|
|
220
|
+
}
|
|
221
|
+
return false;
|
|
222
|
+
}
|
|
223
|
+
/** Nothing reaches the field's array without naming the field. */
|
|
224
|
+
unexposed(root, field) {
|
|
225
|
+
const owner = field.parent;
|
|
226
|
+
const mayHoldInstance = (node) => {
|
|
227
|
+
const type = this.host.typeOf(node);
|
|
228
|
+
if (type === null)
|
|
229
|
+
return true;
|
|
230
|
+
if ((type.flags &
|
|
231
|
+
(ts.TypeFlags.Any |
|
|
232
|
+
ts.TypeFlags.Unknown |
|
|
233
|
+
ts.TypeFlags.NonPrimitive |
|
|
234
|
+
ts.TypeFlags.TypeParameter)) !==
|
|
235
|
+
0)
|
|
236
|
+
return true;
|
|
237
|
+
return this.host.instanceAssignableTo(owner, type);
|
|
238
|
+
};
|
|
239
|
+
this.index();
|
|
240
|
+
for (const pattern of [
|
|
241
|
+
...(this.destructurings.get(root.name) ?? []),
|
|
242
|
+
...(this.destructurings.get("") ?? []),
|
|
243
|
+
]) {
|
|
244
|
+
// Only a declaration's initializer names the destructured value.
|
|
245
|
+
const owner = pattern.parent;
|
|
246
|
+
if (!ts.isVariableDeclaration(owner) || !owner.initializer)
|
|
247
|
+
return false;
|
|
248
|
+
if (mayHoldInstance(owner.initializer))
|
|
249
|
+
return false;
|
|
250
|
+
}
|
|
251
|
+
if (this.copiedObjects.some(mayHoldInstance))
|
|
252
|
+
return false;
|
|
253
|
+
if ((this.literalKeyAccesses.get(root.name) ?? []).some(mayHoldInstance))
|
|
254
|
+
return false;
|
|
255
|
+
// A dynamic read can only reach the field through a value whose type
|
|
256
|
+
// admits the instance; its `any` result must then become a native
|
|
257
|
+
// array again.
|
|
258
|
+
const dynamic = (node) => {
|
|
259
|
+
const type = this.host.typeOf(node);
|
|
260
|
+
return type === null || (type.flags & (ts.TypeFlags.Any | ts.TypeFlags.TypeParameter)) !== 0;
|
|
261
|
+
};
|
|
262
|
+
const reflectedReads = this.reflected.some(mayHoldInstance) ||
|
|
263
|
+
(this.namedAccesses.get(root.name) ?? []).some(dynamic);
|
|
264
|
+
if (!reflectedReads)
|
|
265
|
+
return true;
|
|
266
|
+
const views = this.host.dynamicViewKeys();
|
|
267
|
+
if (views.has("*"))
|
|
268
|
+
return false;
|
|
269
|
+
return this.host.fieldKeys(field).every((key) => !views.has(key));
|
|
270
|
+
}
|
|
271
|
+
isFreshArray(node) {
|
|
272
|
+
const e = peel(node);
|
|
273
|
+
if (ts.isArrayLiteralExpression(e))
|
|
274
|
+
return true;
|
|
275
|
+
if (!ts.isNewExpression(e) && !ts.isCallExpression(e))
|
|
276
|
+
return false;
|
|
277
|
+
const callee = peel(e.expression);
|
|
278
|
+
if (ts.isIdentifier(callee))
|
|
279
|
+
return this.host.isGlobal(callee, "Array");
|
|
280
|
+
if (!ts.isPropertyAccessExpression(callee))
|
|
281
|
+
return false;
|
|
282
|
+
const method = callee.name.text;
|
|
283
|
+
if ((method === "from" || method === "of") && this.host.isGlobal(callee.expression, "Array"))
|
|
284
|
+
return true;
|
|
285
|
+
if (method === "fill")
|
|
286
|
+
return this.isFreshArray(callee.expression);
|
|
287
|
+
return FRESH_METHODS.has(method) && this.host.isArray(callee.expression);
|
|
288
|
+
}
|
|
289
|
+
index() {
|
|
290
|
+
if (this.references)
|
|
291
|
+
return this.references;
|
|
292
|
+
const references = new Map();
|
|
293
|
+
const add = (name, node) => {
|
|
294
|
+
const list = references.get(name);
|
|
295
|
+
if (list)
|
|
296
|
+
list.push(node);
|
|
297
|
+
else
|
|
298
|
+
references.set(name, [node]);
|
|
299
|
+
};
|
|
300
|
+
for (const file of this.files) {
|
|
301
|
+
ts.walkPreorder(file, (node) => {
|
|
302
|
+
if (ts.isIdentifier(node) || ts.isPrivateIdentifier(node))
|
|
303
|
+
add(node.text, node);
|
|
304
|
+
else if (ts.isPropertyAccessExpression(node)) {
|
|
305
|
+
const list = this.namedAccesses.get(node.name.text);
|
|
306
|
+
if (list)
|
|
307
|
+
list.push(node.expression);
|
|
308
|
+
else
|
|
309
|
+
this.namedAccesses.set(node.name.text, [node.expression]);
|
|
310
|
+
}
|
|
311
|
+
else if (ts.isElementAccessExpression(node)) {
|
|
312
|
+
const key = peel(node.argumentExpression);
|
|
313
|
+
if (ts.isStringLiteral(key) || ts.isNoSubstitutionTemplateLiteral(key)) {
|
|
314
|
+
const list = this.literalKeyAccesses.get(key.text);
|
|
315
|
+
if (list)
|
|
316
|
+
list.push(node.expression);
|
|
317
|
+
else
|
|
318
|
+
this.literalKeyAccesses.set(key.text, [node.expression]);
|
|
319
|
+
}
|
|
320
|
+
else if (!ts.isNumericLiteral(key))
|
|
321
|
+
this.reflected.push(node.expression);
|
|
322
|
+
}
|
|
323
|
+
else if (ts.isSpreadAssignment(node))
|
|
324
|
+
this.copiedObjects.push(node.expression);
|
|
325
|
+
else if (ts.isForInStatement(node))
|
|
326
|
+
this.reflected.push(node.expression);
|
|
327
|
+
else if (ts.isCallExpression(node)) {
|
|
328
|
+
const callee = peel(node.expression);
|
|
329
|
+
const walker = ts.isPropertyAccessExpression(callee) &&
|
|
330
|
+
(this.host.isGlobal(callee.expression, "Object") ||
|
|
331
|
+
this.host.isGlobal(callee.expression, "Reflect"));
|
|
332
|
+
const clone = ts.isIdentifier(callee) && this.host.isGlobal(callee, "structuredClone");
|
|
333
|
+
if (walker || clone)
|
|
334
|
+
for (const arg of node.arguments)
|
|
335
|
+
this.reflected.push(ts.isSpreadElement(arg) ? arg.expression : arg);
|
|
336
|
+
}
|
|
337
|
+
else if (ts.isObjectBindingPattern(node)) {
|
|
338
|
+
for (const element of node.elements) {
|
|
339
|
+
const name = element.propertyName ?? element.name;
|
|
340
|
+
// A rest element copies every remaining field.
|
|
341
|
+
const key = !element.dotDotDotToken &&
|
|
342
|
+
(ts.isIdentifier(name) || ts.isPrivateIdentifier(name) || ts.isStringLiteral(name))
|
|
343
|
+
? name.text
|
|
344
|
+
: "";
|
|
345
|
+
const list = this.destructurings.get(key);
|
|
346
|
+
if (list)
|
|
347
|
+
list.push(node);
|
|
348
|
+
else
|
|
349
|
+
this.destructurings.set(key, [node]);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
return undefined;
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
this.references = references;
|
|
356
|
+
return references;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
function usesArguments(fn) {
|
|
360
|
+
let found = false;
|
|
361
|
+
const visit = (node) => {
|
|
362
|
+
if (found)
|
|
363
|
+
return;
|
|
364
|
+
if (ts.isIdentifier(node) && node.text === "arguments")
|
|
365
|
+
found = true;
|
|
366
|
+
else if (!ts.isFunctionDeclaration(node) && !ts.isFunctionExpression(node))
|
|
367
|
+
node.forEachChild(visit);
|
|
368
|
+
};
|
|
369
|
+
fn.body?.forEachChild(visit);
|
|
370
|
+
return found;
|
|
371
|
+
}
|
|
372
|
+
function peel(node) {
|
|
373
|
+
let e = node;
|
|
374
|
+
while (ts.isParenthesizedExpression(e) ||
|
|
375
|
+
ts.isAsExpression(e) ||
|
|
376
|
+
ts.isTypeAssertion(e) ||
|
|
377
|
+
ts.isSatisfiesExpression(e) ||
|
|
378
|
+
ts.isNonNullExpression(e))
|
|
379
|
+
e = e.expression;
|
|
380
|
+
return e;
|
|
381
|
+
}
|
|
382
|
+
//# sourceMappingURL=runtime-optional-ownership.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-optional-ownership.js","sourceRoot":"","sources":["../../../src/frontend/lowering/runtime-optional-ownership.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as ts from "../ts7/adapter.js";
|
|
2
2
|
/** Debug-only record of why the indexed-read analysis widened a binding,
|
|
3
|
-
* parameter, return, or field to a runtime-optional representation
|
|
3
|
+
* parameter, return, or field to a runtime-optional representation, and
|
|
4
|
+
* why an array element ABI can hold undefined values or holes. It is
|
|
4
5
|
* enabled by SCRIPTC_DEBUG_RUNTIME_OPTIONAL=1 and writes one line per
|
|
5
6
|
* widening to stderr; the disabled path records nothing. Not a public API:
|
|
6
7
|
* the output format may change at any time. */
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as ts from "../ts7/adapter.js";
|
|
2
2
|
/** Debug-only record of why the indexed-read analysis widened a binding,
|
|
3
|
-
* parameter, return, or field to a runtime-optional representation
|
|
3
|
+
* parameter, return, or field to a runtime-optional representation, and
|
|
4
|
+
* why an array element ABI can hold undefined values or holes. It is
|
|
4
5
|
* enabled by SCRIPTC_DEBUG_RUNTIME_OPTIONAL=1 and writes one line per
|
|
5
6
|
* widening to stderr; the disabled path records nothing. Not a public API:
|
|
6
7
|
* the output format may change at any time. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-optional-provenance.js","sourceRoot":"","sources":["../../../src/frontend/lowering/runtime-optional-provenance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAExC
|
|
1
|
+
{"version":3,"file":"runtime-optional-provenance.js","sourceRoot":"","sources":["../../../src/frontend/lowering/runtime-optional-provenance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAExC;;;;;+CAK+C;AAC/C,MAAM,OAAO,yBAAyB;IACnB,KAAK,GAAa,EAAE,CAAC;IACrB,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE1C,MAAM,CAAC,eAAe;QACpB,OAAO,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,KAAK,GAAG;YAC1D,CAAC,CAAC,IAAI,yBAAyB,EAAE;YACjC,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAED;uCACmC;IACnC,IAAI,CAAC,IAAY,EAAE,MAA2B,EAAE,KAA0B,EAAE,MAAM,GAAG,EAAE;QACrF,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9F,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO;QAChC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,KAAK;QACH,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,IAAI,IAAI,CAAC,CAAC;QAC1F,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACxB,CAAC;CACF;AAED,SAAS,QAAQ,CAAC,IAAyB;IACzC,IAAI,CAAC,IAAI;QAAE,OAAO,GAAG,CAAC;IACtB,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC9B,MAAM,GAAG,GAAG,EAAE,CAAC,6BAA6B,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAClE,OAAO,GAAG,EAAE,CAAC,QAAQ,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,SAAS,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC;AAC5E,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import * as ts from "../ts7/adapter.js";
|
|
2
|
+
export declare class StringIndexBounds {
|
|
3
|
+
private readonly symbolAt;
|
|
4
|
+
private readonly declarationOf;
|
|
5
|
+
private readonly isString;
|
|
6
|
+
private readonly proofs;
|
|
7
|
+
private readonly bindings;
|
|
8
|
+
private readonly indexFacts;
|
|
9
|
+
private readonly identifiers;
|
|
10
|
+
constructor(symbolAt: (node: ts.Node) => ts.Symbol | null, declarationOf: (symbol: ts.Symbol) => ts.Node | undefined, isString: (node: ts.Expression) => boolean);
|
|
11
|
+
/** True when `read` (an element access on a string receiver) is proven
|
|
12
|
+
* to name an existing code unit. */
|
|
13
|
+
inBounds(read: ts.ElementAccessExpression): boolean;
|
|
14
|
+
private prove;
|
|
15
|
+
private namesIn;
|
|
16
|
+
/** Every write of a block-scoped local or parameter, or null for any
|
|
17
|
+
* other binding (module imports, var, class members, ...). */
|
|
18
|
+
private binding;
|
|
19
|
+
private scanBinding;
|
|
20
|
+
private valueFacts;
|
|
21
|
+
/** `text.length` on a string binding: its symbol, else null. */
|
|
22
|
+
private lengthOf;
|
|
23
|
+
private indexFactsOf;
|
|
24
|
+
/** `text.length`, or a const binding initialized from it while `text`
|
|
25
|
+
* itself is never reassigned. */
|
|
26
|
+
private isLength;
|
|
27
|
+
/** `text.length - k` for an integer k >= 1. */
|
|
28
|
+
private isLengthMinusOne;
|
|
29
|
+
private isIndex;
|
|
30
|
+
/** Does `cond` evaluating to `truthy` establish the bound? The index is
|
|
31
|
+
* an integer and lengths are numbers, so a false comparison is its
|
|
32
|
+
* negation. */
|
|
33
|
+
private holds;
|
|
34
|
+
/** Find a guard establishing `bound` that still holds at `read`. */
|
|
35
|
+
private guarded;
|
|
36
|
+
}
|