@scriptc/compiler 0.2.6 → 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 +7 -18
- package/dist/backend/cycle-analysis.d.ts +21 -9
- package/dist/backend/cycle-analysis.js +139 -67
- package/dist/backend/cycle-analysis.js.map +1 -1
- package/dist/backend/cycle-analysis.test.js +283 -3
- package/dist/backend/cycle-analysis.test.js.map +1 -1
- package/dist/backend/cycle-mutability.d.ts +39 -0
- package/dist/backend/cycle-mutability.js +205 -0
- package/dist/backend/cycle-mutability.js.map +1 -0
- package/dist/backend/link-plan-core.d.ts +2 -1
- package/dist/backend/link-plan-core.js +15 -3
- package/dist/backend/link-plan-core.js.map +1 -1
- package/dist/backend/link-plan.d.ts +2 -1
- package/dist/backend/link-plan.js.map +1 -1
- package/dist/backend/llvm/alloc.d.ts +43 -0
- package/dist/backend/llvm/alloc.js +246 -0
- package/dist/backend/llvm/alloc.js.map +1 -0
- package/dist/backend/llvm/alloc.test.d.ts +1 -0
- package/dist/backend/llvm/alloc.test.js +102 -0
- package/dist/backend/llvm/alloc.test.js.map +1 -0
- 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 +18 -3
- package/dist/backend/llvm/call-lifetimes.js +54 -19
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.test.js +178 -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 +16 -1
- package/dist/backend/llvm/classes.js +60 -49
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +68 -6
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +13 -0
- package/dist/backend/llvm/common.js +30 -0
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.d.ts +19 -3
- package/dist/backend/llvm/constant-callbacks.js +289 -52
- package/dist/backend/llvm/constant-callbacks.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.test.js +140 -3
- package/dist/backend/llvm/constant-callbacks.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.d.ts +29 -0
- package/dist/backend/llvm/dense-array-access.js +335 -0
- package/dist/backend/llvm/dense-array-access.js.map +1 -0
- package/dist/backend/llvm/dense-array-access.test.d.ts +1 -0
- package/dist/backend/llvm/dense-array-access.test.js +238 -0
- package/dist/backend/llvm/dense-array-access.test.js.map +1 -0
- package/dist/backend/llvm/dyn.d.ts +38 -0
- package/dist/backend/llvm/dyn.js +213 -14
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +308 -15
- package/dist/backend/llvm/emitter.js +1788 -206
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +89 -7
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +62 -8
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-async.test.d.ts +1 -0
- package/dist/backend/llvm/expr-async.test.js +62 -0
- package/dist/backend/llvm/expr-async.test.js.map +1 -0
- 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 +118 -15
- 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 +246 -32
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-control.js +113 -8
- package/dist/backend/llvm/expr-control.js.map +1 -1
- package/dist/backend/llvm/expr-dispatch.js +2 -0
- package/dist/backend/llvm/expr-dispatch.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +244 -44
- 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.d.ts +1 -1
- package/dist/backend/llvm/expr-primitives.js +93 -36
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.test.js +51 -3
- package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
- package/dist/backend/llvm/expr-records.js +31 -17
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +96 -29
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.test.js +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/integer-remainder.d.ts +11 -0
- package/dist/backend/llvm/integer-remainder.js +91 -0
- package/dist/backend/llvm/integer-remainder.js.map +1 -1
- package/dist/backend/llvm/layouts.d.ts +3 -1
- package/dist/backend/llvm/layouts.js +3 -2
- package/dist/backend/llvm/layouts.js.map +1 -1
- package/dist/backend/llvm/lazy-captures.d.ts +16 -0
- package/dist/backend/llvm/lazy-captures.js +96 -0
- package/dist/backend/llvm/lazy-captures.js.map +1 -0
- package/dist/backend/llvm/lazy-captures.test.d.ts +1 -0
- package/dist/backend/llvm/lazy-captures.test.js +78 -0
- package/dist/backend/llvm/lazy-captures.test.js.map +1 -0
- 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 +10 -15
- 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.d.ts +5 -1
- package/dist/backend/llvm/local-array-reads.js +147 -26
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.test.js +85 -4
- package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.d.ts +5 -1
- package/dist/backend/llvm/local-union-storage.js +54 -8
- package/dist/backend/llvm/local-union-storage.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.test.js +94 -6
- 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 +39 -20
- package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/nullable-fields.d.ts +28 -0
- package/dist/backend/llvm/nullable-fields.js +45 -0
- package/dist/backend/llvm/nullable-fields.js.map +1 -0
- package/dist/backend/llvm/nullable-fields.test.d.ts +1 -0
- package/dist/backend/llvm/nullable-fields.test.js +48 -0
- package/dist/backend/llvm/nullable-fields.test.js.map +1 -0
- 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/serialized-ir-emission.test.d.ts +1 -0
- package/dist/backend/llvm/serialized-ir-emission.test.js +52 -0
- package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -0
- package/dist/backend/llvm/shapes.d.ts +104 -9
- package/dist/backend/llvm/shapes.js +356 -46
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +139 -5
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/stack-callbacks.js +2 -3
- package/dist/backend/llvm/stack-callbacks.js.map +1 -1
- package/dist/backend/llvm/stack-captures.d.ts +3 -1
- package/dist/backend/llvm/stack-captures.js +5 -3
- package/dist/backend/llvm/stack-captures.js.map +1 -1
- package/dist/backend/llvm/stack-unions.test.js +43 -3
- 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-construction.test.js +1 -1
- package/dist/backend/llvm/string-key-hash.d.ts +15 -0
- package/dist/backend/llvm/string-key-hash.js +76 -0
- package/dist/backend/llvm/string-key-hash.js.map +1 -0
- package/dist/backend/llvm/string-key-hash.test.d.ts +1 -0
- package/dist/backend/llvm/string-key-hash.test.js +45 -0
- package/dist/backend/llvm/string-key-hash.test.js.map +1 -0
- package/dist/backend/llvm/string-lifetimes.test.js +65 -15
- 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.js +1 -1
- package/dist/backend/llvm/switch-dispatch.js.map +1 -1
- package/dist/backend/llvm/switch-dispatch.test.js +3 -3
- 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 +349 -3
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/may-throw.test.js +114 -2
- package/dist/backend/may-throw.test.js.map +1 -1
- package/dist/backend/native/cache-warm.d.ts +2 -1
- package/dist/backend/native/cache-warm.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +3 -2
- package/dist/backend/native/contracts.js.map +1 -1
- package/dist/backend/native/runtime-inputs.d.ts +1 -1
- package/dist/backend/native/runtime-inputs.js +2 -0
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native-codegen-core.d.ts +7 -4
- 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 +9 -0
- package/dist/backend/native-codegen.js +53 -2
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +64 -10
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +3 -2
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/native-link-info.d.ts +2 -1
- package/dist/backend/native-link-info.js.map +1 -1
- package/dist/backend/native-link-info.test.js +2 -2
- package/dist/backend/native-link-info.test.js.map +1 -1
- package/dist/backend/native-tools.d.ts +5 -1
- package/dist/backend/native-tools.js +3 -1
- package/dist/backend/native-tools.js.map +1 -1
- package/dist/backend/optimization.d.ts +25 -0
- package/dist/backend/optimization.js +21 -0
- package/dist/backend/optimization.js.map +1 -0
- package/dist/backend/optimization.test.d.ts +1 -0
- package/dist/backend/optimization.test.js +24 -0
- package/dist/backend/optimization.test.js.map +1 -0
- 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-core.d.ts +15 -4
- package/dist/backend/runtime-pack-core.js +23 -12
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-native.d.ts +7 -3
- package/dist/backend/runtime-pack-native.js +0 -3
- package/dist/backend/runtime-pack-native.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +1 -1
- package/dist/backend/runtime-pack.d.ts +20 -2
- package/dist/backend/runtime-pack.js +23 -0
- package/dist/backend/runtime-pack.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +115 -2
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/target-diagnostics.test.js +1 -1
- package/dist/backend/targets.d.ts +2 -1
- package/dist/backend/targets.js +1 -1
- package/dist/backend/targets.js.map +1 -1
- package/dist/cli/command.js +75 -11
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/host.d.ts +2 -1
- package/dist/cli/usage.d.ts +4 -1
- package/dist/cli/usage.js +13 -3
- package/dist/cli/usage.js.map +1 -1
- package/dist/compile-types.d.ts +17 -5
- 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 +84 -12
- 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/executable-cache.d.ts +2 -2
- package/dist/executable/executable-cache.js +7 -4
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +20 -0
- package/dist/executable/executable-cache.test.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/abstract-equality.js +5 -49
- package/dist/frontend/lowering/abstract-equality.js.map +1 -1
- package/dist/frontend/lowering/array-values.d.ts +30 -0
- package/dist/frontend/lowering/array-values.js +246 -1
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/builtins/errors.js +17 -2
- package/dist/frontend/lowering/builtins/errors.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 +10 -17
- package/dist/frontend/lowering/builtins/process.js +66 -29
- 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/caught-value-dispatch.d.ts +11 -0
- package/dist/frontend/lowering/caught-value-dispatch.js +87 -0
- package/dist/frontend/lowering/caught-value-dispatch.js.map +1 -0
- package/dist/frontend/lowering/class-assertions.d.ts +12 -0
- package/dist/frontend/lowering/class-assertions.js +229 -5
- package/dist/frontend/lowering/class-assertions.js.map +1 -1
- package/dist/frontend/lowering/class-callbacks.d.ts +3 -3
- package/dist/frontend/lowering/class-callbacks.js +18 -5
- package/dist/frontend/lowering/class-callbacks.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +1 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +12 -6
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-method-mutations.d.ts +5 -0
- package/dist/frontend/lowering/class-method-mutations.js +472 -0
- package/dist/frontend/lowering/class-method-mutations.js.map +1 -0
- package/dist/frontend/lowering/class-method-values.js +25 -5
- package/dist/frontend/lowering/class-method-values.js.map +1 -1
- package/dist/frontend/lowering/class-prototypes.js +8 -2
- package/dist/frontend/lowering/class-prototypes.js.map +1 -1
- package/dist/frontend/lowering/class-unions.d.ts +16 -0
- package/dist/frontend/lowering/class-unions.js +127 -0
- package/dist/frontend/lowering/class-unions.js.map +1 -0
- package/dist/frontend/lowering/coercions/builders.js +8 -1
- package/dist/frontend/lowering/coercions/builders.js.map +1 -1
- package/dist/frontend/lowering/coercions/function-adapters.js +2 -0
- package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
- package/dist/frontend/lowering/coercions/identity.d.ts +7 -0
- package/dist/frontend/lowering/coercions/identity.js +26 -0
- package/dist/frontend/lowering/coercions/identity.js.map +1 -0
- 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/structural.js +9 -6
- package/dist/frontend/lowering/coercions/structural.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/collection-narrowing.d.ts +6 -0
- package/dist/frontend/lowering/collection-narrowing.js +31 -0
- package/dist/frontend/lowering/collection-narrowing.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-callback-call.d.ts +7 -0
- package/dist/frontend/lowering/containers/array-callback-call.js +52 -0
- package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -0
- package/dist/frontend/lowering/containers/array-callbacks.d.ts +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.js +416 -65
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-concat.d.ts +7 -0
- package/dist/frontend/lowering/containers/array-concat.js +130 -0
- package/dist/frontend/lowering/containers/array-concat.js.map +1 -0
- package/dist/frontend/lowering/containers/array-construction.d.ts +2 -0
- package/dist/frontend/lowering/containers/array-construction.js +110 -5
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.d.ts +1 -11
- package/dist/frontend/lowering/containers/array-methods.js +274 -144
- 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/collection-methods.js +10 -1
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/indexed-objects.js +56 -70
- package/dist/frontend/lowering/containers/indexed-objects.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 +46 -0
- package/dist/frontend/lowering/cycle-initialization.js +303 -0
- package/dist/frontend/lowering/cycle-initialization.js.map +1 -0
- 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/evaluation-safety.js +4 -0
- package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.js +178 -34
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/union-field-write.d.ts +4 -4
- package/dist/frontend/lowering/expressions/union-field-write.js +54 -44
- package/dist/frontend/lowering/expressions/union-field-write.js.map +1 -1
- package/dist/frontend/lowering/iterator-adapters.d.ts +20 -0
- package/dist/frontend/lowering/iterator-adapters.js +605 -0
- package/dist/frontend/lowering/iterator-adapters.js.map +1 -0
- package/dist/frontend/lowering/lower-array-sort.d.ts +1 -1
- package/dist/frontend/lowering/lower-array-sort.js +44 -5
- package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
- package/dist/frontend/lowering/lower-array-sort.test.d.ts +1 -0
- package/dist/frontend/lowering/lower-array-sort.test.js +31 -0
- package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -0
- package/dist/frontend/lowering/lower-assert.js +7 -0
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-builtin-values.js +1 -0
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +8 -3
- package/dist/frontend/lowering/lower-calls.js +388 -278
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +6 -0
- package/dist/frontend/lowering/lower-classes.js +117 -65
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +22 -2
- package/dist/frontend/lowering/lower-exprs.js +811 -254
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +32 -19
- package/dist/frontend/lowering/lower-functions.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 +29 -4
- 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 +100 -3
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.js +82 -64
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +115 -2
- package/dist/frontend/lowering/lowerer.js +1266 -88
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/native-ffi.js +3 -1
- package/dist/frontend/lowering/native-ffi.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 +16 -0
- package/dist/frontend/lowering/runtime-optional-provenance.js +41 -0
- package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -0
- package/dist/frontend/lowering/sanitize-class-types.test.js +2 -2
- package/dist/frontend/lowering/strict-equality.d.ts +9 -0
- package/dist/frontend/lowering/strict-equality.js +116 -0
- package/dist/frontend/lowering/strict-equality.js.map +1 -0
- 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/surfaces.js +3 -0
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/union-comparison.d.ts +5 -0
- package/dist/frontend/lowering/union-comparison.js +47 -0
- package/dist/frontend/lowering/union-comparison.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 +63 -2
- package/dist/frontend/program.js +1038 -61
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +122 -6
- 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 +4 -1
- package/dist/frontend/type-mapper.js +161 -20
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/frontend/type-mapper.test.js +15 -3
- package/dist/frontend/type-mapper.test.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 +70 -16
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.d.ts +3 -1
- package/dist/ir/analysis.js +4 -0
- package/dist/ir/analysis.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 +5 -3
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/constant-tables.test.js +1 -1
- package/dist/ir/initializer-bindings.test.js +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 +101 -20
- package/dist/ir/ir.js +20 -6
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/scalar-records.test.js +1 -1
- package/dist/ir/serialize.d.ts +1 -1
- package/dist/ir/serialize.js +3 -3
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/traverse.js +8 -0
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/validate.js +139 -22
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +308 -8
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/library/fence-eval.test.js +1 -1
- package/dist/library/int-infer.test.js +4 -4
- package/dist/library/library-cache.test.js +5 -5
- package/dist/library/library-profile.d.ts +2 -1
- package/dist/library/library-profile.js +4 -3
- package/dist/library/library-profile.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/compiler.test.js +2 -2
- package/dist/native/library.d.ts +2 -1
- package/dist/native/library.js.map +1 -1
- package/dist/native/prepare.d.ts +4 -0
- package/dist/native/prepare.js +28 -3
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/sanitizer.d.ts +3 -2
- package/dist/native/sanitizer.js +3 -13
- package/dist/native/sanitizer.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 +8 -2
|
@@ -12,6 +12,11 @@ import { accessorSlotProp, recordTextCodecClass } from "../ir/ir.js";
|
|
|
12
12
|
// helper interning); re-exported here so frontend call sites keep their
|
|
13
13
|
// import path.
|
|
14
14
|
export { typeKey };
|
|
15
|
+
/** The checker omits the erased receiver parameter from callable arity. */
|
|
16
|
+
function runtimeParameterCount(parameters) {
|
|
17
|
+
const first = parameters[0];
|
|
18
|
+
return (parameters.length - (first && ts.isIdentifier(first.name) && first.name.text === "this" ? 1 : 0));
|
|
19
|
+
}
|
|
15
20
|
/** Empty JS object inference describes no fixed layout. Keep these values
|
|
16
21
|
* in checked storage across fields, parameters and function signatures. */
|
|
17
22
|
export function jsOpenObjectType(decl, type, shapes, unions) {
|
|
@@ -855,6 +860,36 @@ let mapTypeDepth = 0;
|
|
|
855
860
|
* a bump between entry and exit stays fenced (recursive generic-open types
|
|
856
861
|
* stay fenced instead of interning a per-context-wrong shape). */
|
|
857
862
|
let contextResolutions = 0;
|
|
863
|
+
/** worker_threads' Worker and MessagePort: owned runtime handles that keep
|
|
864
|
+
* their live object representation (DYN) wherever they are stored. */
|
|
865
|
+
function isWorkerHandleSymbol(symbol, ctx) {
|
|
866
|
+
return ((symbol?.name === "Worker" || symbol?.name === "MessagePort") &&
|
|
867
|
+
ctx.checker
|
|
868
|
+
.declarationsOf(symbol)
|
|
869
|
+
.some((d) => (ts.isClassDeclaration(d) || ts.isInterfaceDeclaration(d)) &&
|
|
870
|
+
ctx.isStdlibFile(d.getSourceFile()) &&
|
|
871
|
+
isDeclaredInAmbientModule(d, "worker_threads")));
|
|
872
|
+
}
|
|
873
|
+
/** True for a type built only from worker handles, null/undefined, and
|
|
874
|
+
* arrays of those: values that keep the live DYN representation. */
|
|
875
|
+
export function isWorkerHandleType(type, ctx) {
|
|
876
|
+
const members = type.isUnionType() ? ts.constituentTypes(type) : [type];
|
|
877
|
+
let handle = false;
|
|
878
|
+
for (const member of members) {
|
|
879
|
+
if (member.flags & (ts.TypeFlags.Null | ts.TypeFlags.Undefined))
|
|
880
|
+
continue;
|
|
881
|
+
if (ctx.checker.isArrayType(member)) {
|
|
882
|
+
const element = ctx.checker.getTypeArguments(member)[0];
|
|
883
|
+
if (element === undefined || !isWorkerHandleType(element, ctx))
|
|
884
|
+
return false;
|
|
885
|
+
}
|
|
886
|
+
else if (!isWorkerHandleSymbol(member.getSymbol(), ctx)) {
|
|
887
|
+
return false;
|
|
888
|
+
}
|
|
889
|
+
handle = true;
|
|
890
|
+
}
|
|
891
|
+
return handle;
|
|
892
|
+
}
|
|
858
893
|
export function mapType(type, ctx) {
|
|
859
894
|
if (mapTypeDepth >= MAP_TYPE_MAX_DEPTH)
|
|
860
895
|
return null;
|
|
@@ -1325,6 +1360,9 @@ function mapTypeInner(type, ctx) {
|
|
|
1325
1360
|
// runtime-bearing class, callable, indexed, and non-literal data shapes
|
|
1326
1361
|
// remain intersections with no representation.
|
|
1327
1362
|
if (widened.isIntersectionType()) {
|
|
1363
|
+
const errorMetadata = mapErrorMetadataIntersection(widened, ctx);
|
|
1364
|
+
if (errorMetadata)
|
|
1365
|
+
return errorMetadata;
|
|
1328
1366
|
const brandedPrimitive = mapBrandedPrimitiveIntersection(widened, ctx);
|
|
1329
1367
|
if (brandedPrimitive)
|
|
1330
1368
|
return brandedPrimitive;
|
|
@@ -1720,7 +1758,7 @@ function mapTypeInner(type, ctx) {
|
|
|
1720
1758
|
// (fs/exec throw sites stamp `code`), so the type maps to the %Error
|
|
1721
1759
|
// root — `err as NodeJS.ErrnoException` from an Error-typed value is a
|
|
1722
1760
|
// no-op cast, error-typed listener params accept it, and the `.code`
|
|
1723
|
-
//
|
|
1761
|
+
// reads have dedicated lowerings that preserve absent metadata.
|
|
1724
1762
|
if (isStdlibInterface("ErrnoException"))
|
|
1725
1763
|
return { kind: "object", className: "%Error" };
|
|
1726
1764
|
// spawn consumes a presence-sensitive option bag, including optional
|
|
@@ -1957,12 +1995,7 @@ function mapTypeInner(type, ctx) {
|
|
|
1957
1995
|
ctx.isStdlibFile(d.getSourceFile()) &&
|
|
1958
1996
|
isDeclaredInAmbientModule(d, "fs")))
|
|
1959
1997
|
return DYN;
|
|
1960
|
-
if ((psym
|
|
1961
|
-
checker
|
|
1962
|
-
.declarationsOf(psym)
|
|
1963
|
-
.some((d) => (ts.isClassDeclaration(d) || ts.isInterfaceDeclaration(d)) &&
|
|
1964
|
-
ctx.isStdlibFile(d.getSourceFile()) &&
|
|
1965
|
-
isDeclaredInAmbientModule(d, "worker_threads")))
|
|
1998
|
+
if (isWorkerHandleSymbol(psym, ctx))
|
|
1966
1999
|
return DYN;
|
|
1967
2000
|
// fs/promises.FileHandle: an owned descriptor object. Module provenance
|
|
1968
2001
|
// distinguishes it from user interfaces with the same name; both the
|
|
@@ -2090,7 +2123,9 @@ function mapTypeInner(type, ctx) {
|
|
|
2090
2123
|
.declarationsOf(psym)
|
|
2091
2124
|
.some((d) => (ts.isInterfaceDeclaration(d) || ts.isClassDeclaration(d)) &&
|
|
2092
2125
|
ctx.isStdlibFile(d.getSourceFile()) &&
|
|
2093
|
-
isDeclaredInAmbientModule(d, "tty")
|
|
2126
|
+
(isDeclaredInAmbientModule(d, "tty") ||
|
|
2127
|
+
(isDeclaredInAmbientModule(d, "process") &&
|
|
2128
|
+
isDeclaredInAmbientNamespace(d, "NodeJS"))))) ||
|
|
2094
2129
|
(psym?.name === "WritableStream" &&
|
|
2095
2130
|
checker
|
|
2096
2131
|
.declarationsOf(psym)
|
|
@@ -2177,8 +2212,8 @@ function mapTypeInner(type, ctx) {
|
|
|
2177
2212
|
// NodeJS.ErrnoException: @types/node's `interface ErrnoException extends
|
|
2178
2213
|
// Error` (dns/fs callback error types). It IS an Error at runtime — map
|
|
2179
2214
|
// it to the runtime %Error hierarchy like the lib Error interfaces
|
|
2180
|
-
// above;
|
|
2181
|
-
//
|
|
2215
|
+
// above; optional metadata uses the same checked property view.
|
|
2216
|
+
// Provenance-checked like the rest.
|
|
2182
2217
|
if (psym?.name === "ErrnoException" &&
|
|
2183
2218
|
checker
|
|
2184
2219
|
.declarationsOf(psym)
|
|
@@ -2309,6 +2344,17 @@ function mapTypeInner(type, ctx) {
|
|
|
2309
2344
|
// Native collection iterators use checked runtime iterator objects.
|
|
2310
2345
|
if (isStdlibInterface("MapIterator") || isStdlibInterface("SetIterator"))
|
|
2311
2346
|
return DYN;
|
|
2347
|
+
// Array iterators (`list.values()` and friends) are generators over the
|
|
2348
|
+
// live array: each step reads the current length and element.
|
|
2349
|
+
if (isStdlibInterface("ArrayIterator")) {
|
|
2350
|
+
const arg = checker.getTypeArguments(widened)[0];
|
|
2351
|
+
const yieldT = arg ? mapType(arg, ctx) : null;
|
|
2352
|
+
if (!yieldT || yieldT.kind === "void" || isUnitType(yieldT))
|
|
2353
|
+
return null;
|
|
2354
|
+
if (!genResultRecord(yieldT, VOID, ctx.shapes, unions))
|
|
2355
|
+
return null;
|
|
2356
|
+
return { kind: "generator", yieldT, retT: VOID, nextT: UNDEFINED_T };
|
|
2357
|
+
}
|
|
2312
2358
|
// Generator<T, TReturn, TNext>, AsyncGenerator<T, TReturn, TNext> (and
|
|
2313
2359
|
// the lib's IterableIterator<T, ...>, the older sync annotation spelling):
|
|
2314
2360
|
// the generator kind. Channel normalization keeps the runtime honest:
|
|
@@ -2329,7 +2375,10 @@ function mapTypeInner(type, ctx) {
|
|
|
2329
2375
|
// branch of the result record has the same representation.
|
|
2330
2376
|
if (isStdlibInterface("Generator") ||
|
|
2331
2377
|
isStdlibInterface("AsyncGenerator") ||
|
|
2332
|
-
isStdlibInterface("IterableIterator")
|
|
2378
|
+
isStdlibInterface("IterableIterator") ||
|
|
2379
|
+
// An Iterator<T> annotation holds a single-pass iterator object: a
|
|
2380
|
+
// generator, or a native iterator adapted into one.
|
|
2381
|
+
isStdlibInterface("Iterator")) {
|
|
2333
2382
|
const args = checker.getTypeArguments(widened);
|
|
2334
2383
|
const channels = genChannels(args[0], args[1], args[2], ctx);
|
|
2335
2384
|
if (!channels)
|
|
@@ -2716,11 +2765,12 @@ function mapTypeInner(type, ctx) {
|
|
|
2716
2765
|
// has no declaration): the dotDotDot check below can't see it, and a
|
|
2717
2766
|
// fixed-arity func mapping would LIE about the value's calling
|
|
2718
2767
|
// convention. Detected by the param-count mismatch against the
|
|
2719
|
-
// signature's own declaration
|
|
2768
|
+
// signature's own declaration, excluding an erased `this` parameter.
|
|
2720
2769
|
{
|
|
2721
2770
|
const sigDecl = checker.signatureDeclaration(sig);
|
|
2722
2771
|
const declParams = sigDecl !== undefined && ts.isFunctionLike(sigDecl) ? sigDecl.parameters : undefined;
|
|
2723
|
-
if (declParams !== undefined &&
|
|
2772
|
+
if (declParams !== undefined &&
|
|
2773
|
+
runtimeParameterCount(declParams) !== sig.getParameters().length) {
|
|
2724
2774
|
return null;
|
|
2725
2775
|
}
|
|
2726
2776
|
// tsgo never SYNTHESIZES that rest param into the inferred signature
|
|
@@ -3678,7 +3728,7 @@ export function unitOnlyUnion(unions) {
|
|
|
3678
3728
|
* answers undefined). ONE shape per channel pair — `g.next()`'s lowering,
|
|
3679
3729
|
* `.return()`, `.throw()`, the for-of desugar, and mapType's
|
|
3680
3730
|
* IteratorResult alias mapping all intern through here, so reads agree.
|
|
3681
|
-
* Null when the combined union would be illegal (a
|
|
3731
|
+
* Null when the combined union would be illegal (a promise arm beside
|
|
3682
3732
|
* data arms, a regex/Date arm — kinds with no narrowing test here): such
|
|
3683
3733
|
* generators stay unmapped. */
|
|
3684
3734
|
export function genResultRecord(yieldT, retT, shapes, unions) {
|
|
@@ -3706,7 +3756,7 @@ export function genResultRecord(yieldT, retT, shapes, unions) {
|
|
|
3706
3756
|
return null;
|
|
3707
3757
|
byKey.set(typeKey(UNDEFINED_T), UNDEFINED_T);
|
|
3708
3758
|
const arms = [...byKey.values()];
|
|
3709
|
-
//
|
|
3759
|
+
// Promises keep the shared nullable-only rule. Generator function
|
|
3710
3760
|
// payloads retain their existing unit-only boundary too.
|
|
3711
3761
|
if (!unionContainerArmsOk(arms) ||
|
|
3712
3762
|
arms.some((a) => a.kind === "func" && !arms.every((b) => b === a || isUnitType(b)))) {
|
|
@@ -3834,6 +3884,58 @@ function mapHybridCallableIntersection(widened, ctx) {
|
|
|
3834
3884
|
fields.sort((a, b) => (a.name < b.name ? -1 : a.name > b.name ? 1 : 0));
|
|
3835
3885
|
return { kind: "record", shapeId: shapes.intern(fields, false, undefined, declaredOrder) };
|
|
3836
3886
|
}
|
|
3887
|
+
/** Optional standard error metadata refines an existing Error identity;
|
|
3888
|
+
* it does not allocate a structural copy or extend its native layout. */
|
|
3889
|
+
function mapErrorMetadataIntersection(type, ctx) {
|
|
3890
|
+
const parts = ts.constituentTypes(type);
|
|
3891
|
+
// Do not map unrelated intersections speculatively: mapping recursive
|
|
3892
|
+
// structural types can intern their representation before it is complete.
|
|
3893
|
+
const hasError = parts.some((part) => {
|
|
3894
|
+
const symbol = part.getSymbol();
|
|
3895
|
+
return (symbol !== undefined &&
|
|
3896
|
+
[
|
|
3897
|
+
"Error",
|
|
3898
|
+
"EvalError",
|
|
3899
|
+
"RangeError",
|
|
3900
|
+
"ReferenceError",
|
|
3901
|
+
"SyntaxError",
|
|
3902
|
+
"TypeError",
|
|
3903
|
+
"URIError",
|
|
3904
|
+
"AggregateError",
|
|
3905
|
+
].includes(symbol.name) &&
|
|
3906
|
+
ctx.checker.declarationsOf(symbol).some((decl) => ctx.isStdlibFile(decl.getSourceFile())));
|
|
3907
|
+
});
|
|
3908
|
+
if (!hasError)
|
|
3909
|
+
return null;
|
|
3910
|
+
let error = null;
|
|
3911
|
+
for (const part of parts) {
|
|
3912
|
+
const mapped = mapType(part, ctx);
|
|
3913
|
+
if (mapped?.kind === "object" && RUNTIME_ERROR_CLASSES.has(mapped.className)) {
|
|
3914
|
+
if (error && !typeEquals(error, mapped))
|
|
3915
|
+
return null;
|
|
3916
|
+
error = mapped;
|
|
3917
|
+
continue;
|
|
3918
|
+
}
|
|
3919
|
+
if (ctx.checker.getCallSignatures(part).length ||
|
|
3920
|
+
ctx.checker.getConstructSignatures(part).length ||
|
|
3921
|
+
ctx.checker.getIndexInfosOfType(part).length)
|
|
3922
|
+
return null;
|
|
3923
|
+
for (const property of ctx.checker.getPropertiesOfType(part)) {
|
|
3924
|
+
const expected = property.name === "errno"
|
|
3925
|
+
? "f64"
|
|
3926
|
+
: ["code", "syscall", "path", "dest"].includes(property.name)
|
|
3927
|
+
? "string"
|
|
3928
|
+
: null;
|
|
3929
|
+
if (!expected || !(property.flags & ts.SymbolFlags.Optional))
|
|
3930
|
+
return null;
|
|
3931
|
+
const field = mapType(ctx.checker.getTypeOfSymbol(property), ctx);
|
|
3932
|
+
const arms = field?.kind === "union" ? ctx.unions.get(field.unionId)?.arms : field ? [field] : [];
|
|
3933
|
+
if (!arms?.length || !arms.every((arm) => arm.kind === expected || arm.kind === "undefinedT"))
|
|
3934
|
+
return null;
|
|
3935
|
+
}
|
|
3936
|
+
}
|
|
3937
|
+
return error;
|
|
3938
|
+
}
|
|
3837
3939
|
/** A conventional primitive brand has one runtime-carrying primitive part
|
|
3838
3940
|
* and one or more phantom object parts whose fields are literal marker
|
|
3839
3941
|
* values. The marker can use a string or unique-symbol key, can be imported
|
|
@@ -4046,6 +4148,9 @@ function mapRecordType(widened, ctx) {
|
|
|
4046
4148
|
inner.fields.every((field) => field.type.kind === "dyn") &&
|
|
4047
4149
|
(inner.indexValue === undefined || inner.indexValue.kind === "dyn"))
|
|
4048
4150
|
return DYN;
|
|
4151
|
+
const refined = refinedConstituentShape(widened, inner, ctx);
|
|
4152
|
+
if (refined !== null)
|
|
4153
|
+
return { kind: "record", shapeId: refined };
|
|
4049
4154
|
return {
|
|
4050
4155
|
kind: "record",
|
|
4051
4156
|
shapeId: shapes.intern(inner.fields, false, inner.indexValue, inner.declaredOrder),
|
|
@@ -4055,6 +4160,44 @@ function mapRecordType(widened, ctx) {
|
|
|
4055
4160
|
shapes.inProgress.delete(widened);
|
|
4056
4161
|
}
|
|
4057
4162
|
}
|
|
4163
|
+
/** A refinement intersection (`Expr & { kind: "mul" }`, which the checker
|
|
4164
|
+
* reduces to `Mul & { kind: "mul" }`) keeps the shape of the constituent it
|
|
4165
|
+
* refines when the refinement changes no field's representation. Recursive
|
|
4166
|
+
* declarations own distinct shape ids even when their layouts coincide
|
|
4167
|
+
* (`Add` and `Mul` both `{ kind; left; right }`), and the structural key
|
|
4168
|
+
* names only the first of them, so interning the intersection by structure
|
|
4169
|
+
* could select a lookalike: a different arm of the very union the value is
|
|
4170
|
+
* narrowed from. Constituents still being mapped are left alone, so this
|
|
4171
|
+
* never mints a recursive placeholder. */
|
|
4172
|
+
function refinedConstituentShape(widened, parts, ctx) {
|
|
4173
|
+
if (!widened.isIntersectionType())
|
|
4174
|
+
return null;
|
|
4175
|
+
const { checker, shapes } = ctx;
|
|
4176
|
+
const names = checker.getPropertiesOfType(widened).map((prop) => prop.name);
|
|
4177
|
+
let found = null;
|
|
4178
|
+
for (const part of ts.constituentTypes(widened)) {
|
|
4179
|
+
if ((part.flags & ts.TypeFlags.Object) === 0 || shapes.inProgress.has(part))
|
|
4180
|
+
continue;
|
|
4181
|
+
const own = new Set(checker.getPropertiesOfType(part).map((prop) => prop.name));
|
|
4182
|
+
if (own.size !== names.length || !names.every((name) => own.has(name)))
|
|
4183
|
+
continue;
|
|
4184
|
+
const mapped = mapType(part, ctx);
|
|
4185
|
+
if (mapped?.kind !== "record")
|
|
4186
|
+
continue;
|
|
4187
|
+
const shape = shapes.get(mapped.shapeId);
|
|
4188
|
+
if (!shape ||
|
|
4189
|
+
shape.tuple ||
|
|
4190
|
+
shape.fields.length !== parts.fields.length ||
|
|
4191
|
+
!shape.fields.every((field, i) => field.name === parts.fields[i].name && typeEquals(field.type, parts.fields[i].type)) ||
|
|
4192
|
+
(shape.indexValue === undefined) !== (parts.indexValue === undefined) ||
|
|
4193
|
+
(shape.indexValue !== undefined && !typeEquals(shape.indexValue, parts.indexValue)))
|
|
4194
|
+
continue;
|
|
4195
|
+
if (found !== null && found !== mapped.shapeId)
|
|
4196
|
+
return null;
|
|
4197
|
+
found = mapped.shapeId;
|
|
4198
|
+
}
|
|
4199
|
+
return found;
|
|
4200
|
+
}
|
|
4058
4201
|
function mapRecordTypeInner(widened, ctx) {
|
|
4059
4202
|
const { checker, shapes } = ctx;
|
|
4060
4203
|
if (checker.getConstructSignatures(widened).length > 0)
|
|
@@ -4434,10 +4577,7 @@ function armHasUnionHome(arm, siblingCount) {
|
|
|
4434
4577
|
case "generator":
|
|
4435
4578
|
case "dyn":
|
|
4436
4579
|
return false;
|
|
4437
|
-
//
|
|
4438
|
-
// supported runtime narrowing test against them.
|
|
4439
|
-
case "map":
|
|
4440
|
-
case "set":
|
|
4580
|
+
// Promise data siblings still lack a supported narrowing contract.
|
|
4441
4581
|
case "promise":
|
|
4442
4582
|
return siblingCount === 0;
|
|
4443
4583
|
default:
|
|
@@ -4565,7 +4705,8 @@ export function describeComponentBlocker(widened, ctx) {
|
|
|
4565
4705
|
const sigDecl = checker.signatureDeclaration(sig);
|
|
4566
4706
|
if (sigDecl !== undefined &&
|
|
4567
4707
|
ts.isFunctionLike(sigDecl) &&
|
|
4568
|
-
(sigDecl.parameters
|
|
4708
|
+
(runtimeParameterCount(sigDecl.parameters) !== sig.getParameters().length ||
|
|
4709
|
+
bodyReadsArguments(sigDecl))) {
|
|
4569
4710
|
return `the function shape is supported, but its signature is variadic ('arguments'-reading), and a compiled signature is fixed-arity`;
|
|
4570
4711
|
}
|
|
4571
4712
|
for (const p of sig.getParameters()) {
|