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