@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
|
@@ -89,6 +89,10 @@ export interface ClassInfo {
|
|
|
89
89
|
* unassigned read throws the catchable TypeError instead of yielding
|
|
90
90
|
* an undefined the declared type cannot hold (SEMANTICS.md). */
|
|
91
91
|
deferredInitFields?: Set<string>;
|
|
92
|
+
/** True when construction may hand the instance to other code (a method
|
|
93
|
+
* call, an argument, a callback, or a base constructor that does) — a
|
|
94
|
+
* subclass's own fields can then be read before their assignment. */
|
|
95
|
+
constructionEscapes?: true;
|
|
92
96
|
/** null for the builtin error classes (runtime-provided; no source).
|
|
93
97
|
* Class EXPRESSIONS carry their ts.ClassExpression here — members,
|
|
94
98
|
* accessors, and locs read identically off either form. */
|
|
@@ -164,6 +168,8 @@ export interface ClassInfo {
|
|
|
164
168
|
staticFields: {
|
|
165
169
|
name: string;
|
|
166
170
|
type: IrType;
|
|
171
|
+
/** Indexed sources can be absent despite the declared static type. */
|
|
172
|
+
runtimeOptional?: true;
|
|
167
173
|
initializer: ts.Expression;
|
|
168
174
|
globalId: string;
|
|
169
175
|
readonly: boolean;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { dynUndefinedExpr, nodeThrowExpr } from "../../ir/build.js";
|
|
2
|
+
import { collectClassMethodMutations } from "./class-method-mutations.js";
|
|
2
3
|
import { InternalCompilerError } from "../../errors.js";
|
|
3
4
|
/* Class lowering: shape collection over the single-inheritance graph
|
|
4
5
|
* (fields, methods, accessors, overrides), constructor/member lowering with
|
|
@@ -41,6 +42,7 @@ import { lowerObjectFactoryNew } from "./object-factory-new.js";
|
|
|
41
42
|
import { tryLowerExpression } from "./expressions/try-lower-expression.js";
|
|
42
43
|
import { lowerInstanceConstructorNew } from "./class-instance-constructor.js";
|
|
43
44
|
import { classPrototypeData } from "./class-prototypes.js";
|
|
45
|
+
import { constructionEscape } from "./construction-escapes.js";
|
|
44
46
|
import { checkedClassConstruction, checkedClassConstructionPacked } from "./class-construction.js";
|
|
45
47
|
import { initializeRuntimeStatics, hasRuntimeStatics } from "./class-runtime-statics.js";
|
|
46
48
|
import { reflectedClassStaticMethodValue } from "./class-method-values.js";
|
|
@@ -380,6 +382,10 @@ export function registerBuiltinErrorClasses(lowerer) {
|
|
|
380
382
|
{ name: "%nameEnumerable", type: BOOL },
|
|
381
383
|
{ name: "%stackFrames", type: STRING },
|
|
382
384
|
{ name: "%stack", type: STRING },
|
|
385
|
+
{ name: "%systemErrno", type: F64 },
|
|
386
|
+
{ name: "%systemCall", type: STRING },
|
|
387
|
+
{ name: "%systemPath", type: STRING },
|
|
388
|
+
{ name: "%systemDest", type: STRING },
|
|
383
389
|
],
|
|
384
390
|
loc,
|
|
385
391
|
},
|
|
@@ -994,15 +1000,7 @@ function collectClassShapeDeferring(lowerer, decl) {
|
|
|
994
1000
|
const hasDeclTimeCode = (n) => ts.isClassStaticBlockDeclaration(n) ||
|
|
995
1001
|
(n.modifiers ?? []).some((m) => m.kind === ts.SyntaxKind.Decorator);
|
|
996
1002
|
if (symbol && (hasDeclTimeCode(decl) || decl.members.some(hasDeclTimeCode))) {
|
|
997
|
-
|
|
998
|
-
if (diags) {
|
|
999
|
-
lowerer.deferredDiags.delete(symbol);
|
|
1000
|
-
if (!lowerer.alreadyFlushed.has(symbol)) {
|
|
1001
|
-
lowerer.flushedSymbols.add(symbol);
|
|
1002
|
-
for (const d of diags)
|
|
1003
|
-
lowerer.pushDiag(d);
|
|
1004
|
-
}
|
|
1005
|
-
}
|
|
1003
|
+
lowerer.reportDeferred(symbol);
|
|
1006
1004
|
}
|
|
1007
1005
|
// A poisoned BASE this class EXTENDS must report EAGERLY for the same
|
|
1008
1006
|
// reason: the derived statement evaluates its heritage when module
|
|
@@ -1020,15 +1018,8 @@ function collectClassShapeDeferring(lowerer, decl) {
|
|
|
1020
1018
|
?.types.map((t) => t.expression)
|
|
1021
1019
|
.filter(ts.isIdentifier)[0];
|
|
1022
1020
|
const baseSym = baseIdent ? lowerer.resolveValueSymbol(baseIdent) : null;
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
lowerer.deferredDiags.delete(baseSym);
|
|
1026
|
-
if (!lowerer.alreadyFlushed.has(baseSym)) {
|
|
1027
|
-
lowerer.flushedSymbols.add(baseSym);
|
|
1028
|
-
for (const d of baseDiags)
|
|
1029
|
-
lowerer.pushDiag(d);
|
|
1030
|
-
}
|
|
1031
|
-
}
|
|
1021
|
+
if (baseSym)
|
|
1022
|
+
lowerer.reportDeferred(baseSym);
|
|
1032
1023
|
}
|
|
1033
1024
|
}
|
|
1034
1025
|
function inferredEmptyCollectionFieldType(lowerer, decl, field, initializer) {
|
|
@@ -1691,7 +1682,7 @@ mixin) {
|
|
|
1691
1682
|
lowerer.badType(member.name, lowerer.typeOf(member.name));
|
|
1692
1683
|
if (type.kind === "dyn" &&
|
|
1693
1684
|
!isJsSourceFile(member.getSourceFile()) &&
|
|
1694
|
-
!lowerer.
|
|
1685
|
+
!lowerer.classFieldStoresDyn(lowerer.typeOf(member.name)) &&
|
|
1695
1686
|
(member.type !== undefined ||
|
|
1696
1687
|
(lowerer.typeOf(member.name).flags & ts.TypeFlags.Any) === 0)) {
|
|
1697
1688
|
lowerer.unsupported("SC1090", member.name, "'unknown'-typed static fields");
|
|
@@ -1883,8 +1874,8 @@ mixin) {
|
|
|
1883
1874
|
// declaration is an ordinary OWN field (tsc guarantees every
|
|
1884
1875
|
// instantiable subclass declares it and, under
|
|
1885
1876
|
// strictPropertyInitialization, initializes it). Reads through
|
|
1886
|
-
// ABSTRACT-typed receivers
|
|
1887
|
-
//
|
|
1877
|
+
// ABSTRACT-typed receivers resolve the concrete instance's
|
|
1878
|
+
// property through checked class dispatch.
|
|
1888
1879
|
if (modifiers?.some((m) => m.kind === ts.SyntaxKind.AbstractKeyword))
|
|
1889
1880
|
continue;
|
|
1890
1881
|
if (modifiers?.some((m) => m.kind === ts.SyntaxKind.AccessorKeyword)) {
|
|
@@ -2054,7 +2045,7 @@ mixin) {
|
|
|
2054
2045
|
// storage as implicit constructor-assigned JS fields.
|
|
2055
2046
|
if (type.kind === "dyn" &&
|
|
2056
2047
|
!isJsSourceFile(member.getSourceFile()) &&
|
|
2057
|
-
!lowerer.
|
|
2048
|
+
!lowerer.classFieldStoresDyn(lowerer.typeOf(member.name))) {
|
|
2058
2049
|
lowerer.unsupported("SC1090", member.name, "'unknown'-typed class fields");
|
|
2059
2050
|
}
|
|
2060
2051
|
const undefinedInitializer = type.kind === "dyn" && !member.initializer ? locOf(member) : undefined;
|
|
@@ -2182,7 +2173,7 @@ mixin) {
|
|
|
2182
2173
|
if (type.kind === "void")
|
|
2183
2174
|
lowerer.badType(p.name, lowerer.typeOf(p.name));
|
|
2184
2175
|
// The class-field dyn rule verbatim (KEEP NARROW).
|
|
2185
|
-
if (type.kind === "dyn" && !lowerer.
|
|
2176
|
+
if (type.kind === "dyn" && !lowerer.classFieldStoresDyn(lowerer.typeOf(p))) {
|
|
2186
2177
|
lowerer.unsupported("SC1090", p.name, "'unknown'-typed class fields");
|
|
2187
2178
|
}
|
|
2188
2179
|
// `override x` (and any same-named inherited member) would
|
|
@@ -2234,15 +2225,12 @@ mixin) {
|
|
|
2234
2225
|
if (findGenericMethodOn(lowerer, base, mName)) {
|
|
2235
2226
|
lowerer.unsupported("SC1090", member.name, `overriding the inherited generic method '${mName}' with a non-generic method (generic methods dispatch statically and would never reach this override)`);
|
|
2236
2227
|
}
|
|
2237
|
-
// Abstract re-declarations keep the overridden ABI exactly,
|
|
2238
|
-
// like any override (a concrete implementation below must
|
|
2239
|
-
// agree with BOTH, which exactness makes one constraint).
|
|
2240
2228
|
const overridden = lowerer.findMethodOn(base, mName);
|
|
2241
2229
|
if (overridden &&
|
|
2242
2230
|
(overridden.sig.params.length !== shapes.length ||
|
|
2243
2231
|
!overridden.sig.params.every((p, i) => typeEquals(p.type, shapes[i].type)) ||
|
|
2244
|
-
!typeEquals(overridden.sig.ret, ret))) {
|
|
2245
|
-
lowerer.unsupported("SC1090", member.name, "overriding a method with a different signature (parameter
|
|
2232
|
+
!typeEquals(overridden.sig.ret, overrideReturnAbi(lowerer, ret, overridden.sig.ret, className, base)))) {
|
|
2233
|
+
lowerer.unsupported("SC1090", member.name, "overriding a method with a different signature (parameter types must match the base declaration exactly; returns may narrow to a subclass)");
|
|
2246
2234
|
}
|
|
2247
2235
|
methods.set(mName, { params: shapes, ret, abstract: true });
|
|
2248
2236
|
continue;
|
|
@@ -2363,11 +2351,12 @@ mixin) {
|
|
|
2363
2351
|
if (refined)
|
|
2364
2352
|
ft.ret = refined;
|
|
2365
2353
|
}
|
|
2366
|
-
// Overrides keep the
|
|
2354
|
+
// Overrides keep the inherited ABI signature. tsc's method
|
|
2367
2355
|
// bivariance would let a narrowed parameter type through, and a
|
|
2368
2356
|
// vtable-dispatched call could then hand the override a base
|
|
2369
2357
|
// instance it reads out-of-bounds fields from — exactness keeps
|
|
2370
|
-
// every slot sound
|
|
2358
|
+
// every parameter slot sound. Nominal covariant returns share the
|
|
2359
|
+
// base pointer ABI while retaining their declared result type. Comparing
|
|
2371
2360
|
// ABI types only (not modes) is deliberate: call sites complete
|
|
2372
2361
|
// against the STATIC receiver's shape, so `m(x?: number)` and
|
|
2373
2362
|
// `m(x: number | undefined)` interchange soundly in overrides.
|
|
@@ -2429,7 +2418,7 @@ mixin) {
|
|
|
2429
2418
|
member.asteriskToken === undefined &&
|
|
2430
2419
|
(overridden.sig.params.length !== shapes.length ||
|
|
2431
2420
|
!overridden.sig.params.every((p, i) => typeEquals(p.type, shapes[i].type)) ||
|
|
2432
|
-
!typeEquals(overridden.sig.ret, ft.ret))) {
|
|
2421
|
+
!typeEquals(overridden.sig.ret, overrideReturnAbi(lowerer, ft.ret, overridden.sig.ret, className, base)))) {
|
|
2433
2422
|
const fencedJsOverride = isJsSourceFile(member.getSourceFile()) &&
|
|
2434
2423
|
overridden.declarer.decl !== null &&
|
|
2435
2424
|
isJsSourceFile(overridden.declarer.decl.getSourceFile()) &&
|
|
@@ -2456,12 +2445,12 @@ mixin) {
|
|
|
2456
2445
|
});
|
|
2457
2446
|
methodEntryFences.set(mName, unsupportedDiag("SC1090", locOf(member.name), returnOnly
|
|
2458
2447
|
? `overriding method '${mName}' with a different return type (the native return type must match the base declaration exactly)`
|
|
2459
|
-
: `overriding method '${mName}' with a different signature (the native parameter
|
|
2448
|
+
: `overriding method '${mName}' with a different signature (the native parameter types must match the base declaration exactly; returns may narrow to a subclass)`));
|
|
2460
2449
|
shapes.splice(0, shapes.length, ...overridden.sig.params);
|
|
2461
2450
|
ft.ret = overridden.sig.ret;
|
|
2462
2451
|
}
|
|
2463
2452
|
else {
|
|
2464
|
-
lowerer.unsupported("SC1090", member.name, "overriding a method with a different signature (parameter
|
|
2453
|
+
lowerer.unsupported("SC1090", member.name, "overriding a method with a different signature (parameter types must match the base declaration exactly; returns may narrow to a subclass)");
|
|
2465
2454
|
}
|
|
2466
2455
|
}
|
|
2467
2456
|
const asyncMember = member.modifiers?.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword) === true;
|
|
@@ -2622,6 +2611,52 @@ mixin) {
|
|
|
2622
2611
|
initializer: undefined,
|
|
2623
2612
|
})));
|
|
2624
2613
|
}
|
|
2614
|
+
// Fields read before their first assignment. Construction that hands
|
|
2615
|
+
// the instance to other code (a method call, an argument, a callback,
|
|
2616
|
+
// a base constructor that does either) before assigning a class-typed
|
|
2617
|
+
// field lets that code read the field while Node still holds
|
|
2618
|
+
// undefined. Such fields take the deferred-init representation, whose
|
|
2619
|
+
// slot (a nullable instance pointer) starts empty and whose reads check
|
|
2620
|
+
// it. Fields assigned before any exposure keep their plain reads.
|
|
2621
|
+
const derived = decl.heritageClauses?.some((clause) => clause.token === ts.SyntaxKind.ExtendsKeyword) ??
|
|
2622
|
+
false;
|
|
2623
|
+
// Generic instances and mixins share layouts across declarations, so
|
|
2624
|
+
// they only report whether construction exposes the instance.
|
|
2625
|
+
const escape = familyMode || mixin
|
|
2626
|
+
? { escapes: derived, assigned: null }
|
|
2627
|
+
: constructionEscape({
|
|
2628
|
+
ctor,
|
|
2629
|
+
fields: fieldOrder.flatMap((f) => paramProps.some((pp) => pp.name === f.name)
|
|
2630
|
+
? []
|
|
2631
|
+
: [{ name: f.name, initializer: f.initializer }]),
|
|
2632
|
+
paramProps: paramProps.map((pp) => pp.name),
|
|
2633
|
+
derived,
|
|
2634
|
+
baseEscapes: base === null ||
|
|
2635
|
+
callableBase !== undefined ||
|
|
2636
|
+
factoryBaseExpression !== undefined ||
|
|
2637
|
+
base.constructionEscapes === true,
|
|
2638
|
+
isField: (name) => fields.has(name) &&
|
|
2639
|
+
!methods.has(`set:${name}`) &&
|
|
2640
|
+
!lowerer.findMethodOn(base, `set:${name}`),
|
|
2641
|
+
privateMethodBody: (call) => {
|
|
2642
|
+
const callee = call.expression;
|
|
2643
|
+
if (!ts.isPropertyAccessExpression(callee))
|
|
2644
|
+
return null;
|
|
2645
|
+
const name = callee.name.text;
|
|
2646
|
+
const declaration = decl.members.find((member) => ts.isMethodDeclaration(member) &&
|
|
2647
|
+
member.body !== undefined &&
|
|
2648
|
+
(ts.isIdentifier(member.name) || ts.isPrivateIdentifier(member.name)) &&
|
|
2649
|
+
member.name.text === name);
|
|
2650
|
+
if (!declaration?.body || declaration.asteriskToken)
|
|
2651
|
+
return null;
|
|
2652
|
+
const modifiers = ts.getModifiers(declaration) ?? [];
|
|
2653
|
+
if (modifiers.some((m) => m.kind === ts.SyntaxKind.StaticKeyword || m.kind === ts.SyntaxKind.AsyncKeyword))
|
|
2654
|
+
return null;
|
|
2655
|
+
const isPrivate = ts.isPrivateIdentifier(declaration.name) ||
|
|
2656
|
+
modifiers.some((m) => m.kind === ts.SyntaxKind.PrivateKeyword);
|
|
2657
|
+
return isPrivate ? declaration.body : null;
|
|
2658
|
+
},
|
|
2659
|
+
});
|
|
2625
2660
|
// The deferred definite-assignment check: a field on the unguarded
|
|
2626
2661
|
// list passes only with an unconditional `this.x = ...` at the
|
|
2627
2662
|
// constructor's TOP LEVEL — the same standard the JS-class path
|
|
@@ -2642,7 +2677,7 @@ mixin) {
|
|
|
2642
2677
|
}
|
|
2643
2678
|
}
|
|
2644
2679
|
for (const f of unguardedFields) {
|
|
2645
|
-
if (topAssigned.has(f.name))
|
|
2680
|
+
if (topAssigned.has(f.name) || escape.assigned?.has(f.name))
|
|
2646
2681
|
continue;
|
|
2647
2682
|
// DEFERRED INITIALIZATION (the Output.initialize idiom —
|
|
2648
2683
|
// `stream!: T` assigned inside a method the constructor calls):
|
|
@@ -2676,6 +2711,23 @@ mixin) {
|
|
|
2676
2711
|
lowerer.unsupported("SC1090", f.node, f.why);
|
|
2677
2712
|
}
|
|
2678
2713
|
}
|
|
2714
|
+
if (escape.assigned && !inst) {
|
|
2715
|
+
for (const f of fieldOrder) {
|
|
2716
|
+
if (f.redeclared || escape.assigned.has(f.name) || deferredInitFields.has(f.name))
|
|
2717
|
+
continue;
|
|
2718
|
+
if (paramProps.some((pp) => pp.name === f.name))
|
|
2719
|
+
continue;
|
|
2720
|
+
const declared = fields.get(f.name);
|
|
2721
|
+
if (declared?.kind !== "object" || lowerer.classes.get(declared.className)?.def.runtime)
|
|
2722
|
+
continue;
|
|
2723
|
+
const armed = lowerer.withUndefinedArm(declared);
|
|
2724
|
+
if (armed === null || armed.kind !== "union")
|
|
2725
|
+
continue;
|
|
2726
|
+
fields.set(f.name, armed);
|
|
2727
|
+
f.type = armed;
|
|
2728
|
+
deferredInitFields.add(f.name);
|
|
2729
|
+
}
|
|
2730
|
+
}
|
|
2679
2731
|
// Partial overrides of an inherited accessor pair. JS gives the
|
|
2680
2732
|
// derived class ONE own accessor property that SHADOWS the whole
|
|
2681
2733
|
// inherited pair — the missing half does NOT resolve to the base's
|
|
@@ -3056,6 +3108,7 @@ mixin) {
|
|
|
3056
3108
|
? { classDecorators: { nodes: classDecoratorNodes } }
|
|
3057
3109
|
: {}),
|
|
3058
3110
|
...(deferredInitFields.size > 0 ? { deferredInitFields } : {}),
|
|
3111
|
+
...(escape.escapes ? { constructionEscapes: true } : {}),
|
|
3059
3112
|
};
|
|
3060
3113
|
// GENERIC members get their declaring-class backlink now that the
|
|
3061
3114
|
// info exists (instance lowering reads it for `this` typing and the
|
|
@@ -3939,7 +3992,13 @@ export function lowerStaticFieldRead(lowerer, expr) {
|
|
|
3939
3992
|
lowerer.unsupported("SC1090", expr, `reading the private static '${expr.name.text}' through the subclass '${info.def.name.replace(/^%|^%m\d+\./, "")}' (JS brands the declaring class object alone — Node throws a TypeError here; spell the declaring class's name)`);
|
|
3940
3993
|
}
|
|
3941
3994
|
if (found?.field !== undefined) {
|
|
3942
|
-
|
|
3995
|
+
const value = {
|
|
3996
|
+
kind: "varRef",
|
|
3997
|
+
localId: found.field.globalId,
|
|
3998
|
+
type: found.field.type,
|
|
3999
|
+
loc,
|
|
4000
|
+
};
|
|
4001
|
+
return found.field.runtimeOptional ? value : lowerer.maybeNarrow(value, expr);
|
|
3943
4002
|
}
|
|
3944
4003
|
if (found) {
|
|
3945
4004
|
return staticMethodValue(lowerer, found.declarer, expr.name.text, found.method, expr, loc);
|
|
@@ -4752,7 +4811,13 @@ export function lowerClassValueProperty(lowerer, expr) {
|
|
|
4752
4811
|
lowerer.unsupported("SC1090", expr, `reading the static member '${member}' through a class value (a subclass of '${info.def.name.replace(/^%|^%m\d+\./, "")}' redeclares it, so the runtime class decides which declaration answers)`);
|
|
4753
4812
|
}
|
|
4754
4813
|
if (found.field !== undefined) {
|
|
4755
|
-
|
|
4814
|
+
const value = {
|
|
4815
|
+
kind: "varRef",
|
|
4816
|
+
localId: found.field.globalId,
|
|
4817
|
+
type: found.field.type,
|
|
4818
|
+
loc,
|
|
4819
|
+
};
|
|
4820
|
+
return found.field.runtimeOptional ? value : lowerer.maybeNarrow(value, expr);
|
|
4756
4821
|
}
|
|
4757
4822
|
return staticMethodValue(lowerer, found.declarer, member, found.method, expr, loc);
|
|
4758
4823
|
}
|
|
@@ -4770,6 +4835,20 @@ function abstractMemberSignature(lowerer, member) {
|
|
|
4770
4835
|
ret: lowerer.declaredReturnType(member, member.name),
|
|
4771
4836
|
};
|
|
4772
4837
|
}
|
|
4838
|
+
/** A nominal return subtype uses the same owned pointer as the inherited
|
|
4839
|
+
* return slot. The current class is still being collected, so consult its
|
|
4840
|
+
* already collected base chain before the complete class graph is available. */
|
|
4841
|
+
function overrideReturnAbi(lowerer, declared, inherited, className, base) {
|
|
4842
|
+
if (declared.kind !== "object" || inherited.kind !== "object")
|
|
4843
|
+
return declared;
|
|
4844
|
+
if (lowerer.isSubclassOf(declared.className, inherited.className) ||
|
|
4845
|
+
(declared.className === className &&
|
|
4846
|
+
base !== null &&
|
|
4847
|
+
(base.def.name === inherited.className ||
|
|
4848
|
+
lowerer.isSubclassOf(base.def.name, inherited.className))))
|
|
4849
|
+
return inherited;
|
|
4850
|
+
return declared;
|
|
4851
|
+
}
|
|
4773
4852
|
/** The nearest declaration of `name` at or above `info` — the method a
|
|
4774
4853
|
* receiver of that static class runs when nothing below overrides it. */
|
|
4775
4854
|
export function findMethodOn(lowerer, info, name) {
|
|
@@ -4933,34 +5012,7 @@ export function collectInheritedJsFieldWrites(lowerer, files) {
|
|
|
4933
5012
|
* hierarchy identifies the original declarations through aliases as well. */
|
|
4934
5013
|
export function collectVirtualJsMethods(lowerer, files) {
|
|
4935
5014
|
const families = [];
|
|
4936
|
-
|
|
4937
|
-
// Those slots need a callable ABI even when JavaScript would otherwise
|
|
4938
|
-
// specialize each call independently.
|
|
4939
|
-
for (const file of files)
|
|
4940
|
-
ts.walkPreorder(file, (node) => {
|
|
4941
|
-
if (!ts.isPropertyAccessExpression(node) && !ts.isElementAccessExpression(node))
|
|
4942
|
-
return;
|
|
4943
|
-
const name = ts.isPropertyAccessExpression(node)
|
|
4944
|
-
? node.name.text
|
|
4945
|
-
: ts.isStringLiteralLike(node.argumentExpression)
|
|
4946
|
-
? node.argumentExpression.text
|
|
4947
|
-
: null;
|
|
4948
|
-
if (name === null)
|
|
4949
|
-
return;
|
|
4950
|
-
const prototype = ts.isPropertyAccessExpression(node.expression) && node.expression.name.text === "prototype";
|
|
4951
|
-
const assigned = ts.isBinaryExpression(node.parent) &&
|
|
4952
|
-
node.parent.left === node &&
|
|
4953
|
-
node.parent.operatorToken.kind === ts.SyntaxKind.EqualsToken;
|
|
4954
|
-
const symbol = !assigned
|
|
4955
|
-
? undefined
|
|
4956
|
-
: ts.isPropertyAccessExpression(node)
|
|
4957
|
-
? lowerer.checker.getSymbolAtLocation(node.name)
|
|
4958
|
-
: lowerer.checker.getPropertyOfType(lowerer.typeOf(node.expression), name);
|
|
4959
|
-
if (prototype ||
|
|
4960
|
-
(symbol && lowerer.checker.declarationsOf(symbol).some(ts.isMethodDeclaration))) {
|
|
4961
|
-
lowerer.prototypeMethodAccesses.set(name, node);
|
|
4962
|
-
}
|
|
4963
|
-
});
|
|
5015
|
+
collectClassMethodMutations(lowerer, files);
|
|
4964
5016
|
const visit = (node) => {
|
|
4965
5017
|
if (ts.isClassDeclaration(node) || ts.isClassExpression(node)) {
|
|
4966
5018
|
const accessors = node.members.filter((member) => (ts.isGetAccessorDeclaration(member) || ts.isSetAccessorDeclaration(member)) &&
|
|
@@ -7273,7 +7325,7 @@ export function lowerNew(lowerer, expr) {
|
|
|
7273
7325
|
if (targs[1]) {
|
|
7274
7326
|
lowerer.unsupported("SC1090", expr, `Map values of type '${lowerer.checker.typeToString(targs[1])}' ` +
|
|
7275
7327
|
`(Map values must be number, string, boolean, records, class instances, ` +
|
|
7276
|
-
`arrays, promises, Maps, Sets, or unions
|
|
7328
|
+
`typed arrays, arrays, promises, Maps, Sets, or supported unions and checked values)`);
|
|
7277
7329
|
}
|
|
7278
7330
|
lowerer.badType(expr, tsType);
|
|
7279
7331
|
}
|