@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
|
@@ -10,7 +10,7 @@ import { InternalCompilerError } from "../../errors.js";
|
|
|
10
10
|
* explicit resource management, and blocked-binding poisoning. */
|
|
11
11
|
import * as ts from "../ts7/adapter.js";
|
|
12
12
|
import { bindingSource } from "../binding-source.js";
|
|
13
|
-
import { arrayValueRead, arrayValueStore, arrayValueType, unionArrayValueRead, } from "./array-values.js";
|
|
13
|
+
import { arrayValueRead, arrayValueStore, arrayValueType, unionArrayValueRead, lowerSafeIndexRead, } from "./array-values.js";
|
|
14
14
|
import { lowerForAwaitGenerator, lowerForOfGenerator, lowerYieldStarStatement, } from "./lower-generators.js";
|
|
15
15
|
import { lowerForAwaitBuiltin } from "./lower-async-iteration.js";
|
|
16
16
|
import { BOOL, BYTES_U8, CAUGHT, DYN, F64, JSVAL, STRING, UNDEFINED_T, VOID, arrayOf, isDynTypedRefType, isUnitType, shapeHasAccessorSlots, typeEquals, } from "../../ir/ir.js";
|
|
@@ -23,7 +23,6 @@ import { isProvenanceSourceFile } from "../provenance-registry.js";
|
|
|
23
23
|
import { ambientUndefVarRootOf, lowerImportEquals, nsUndefRead, nsWritableTarget, trapDeclRootOf, } from "./lower-namespaces.js";
|
|
24
24
|
import { expandoWritableTarget, lowerExpandoAssignStmt } from "./lower-expando.js";
|
|
25
25
|
import { lowerForOfArrayIter, lowerForOfMap, lowerForOfSearchParams, lowerForOfSet, } from "./containers/for-of.js";
|
|
26
|
-
import { lowerSafeIndexRead } from "./containers/array-methods.js";
|
|
27
26
|
import { objectIterOverIndexShape } from "./containers/indexed-objects.js";
|
|
28
27
|
import { strCharsCall } from "./containers/array-construction.js";
|
|
29
28
|
import { bindingContextualGenericFnNodeOf, bindingGenericFnAliasInfoOf, bindingGenericFnInfoOf, bindingGenericFnNodeOf, implicitLocalFnInfoOf, implicitLocalFnNodeOf, implicitMethodCallInfersReturn, } from "./generic-functions.js";
|
|
@@ -37,7 +36,7 @@ import { classStaticDataFor } from "./class-static-data.js";
|
|
|
37
36
|
import { objectFactorySignature } from "./object-factory-new.js";
|
|
38
37
|
import { isClassCallback, lowerClassCallbackAssign } from "./class-callbacks.js";
|
|
39
38
|
import { classForInHasKey, classPropertiesHelper } from "./class-dynamic-dispatch.js";
|
|
40
|
-
import { genericIfaceBindingKeepsClass
|
|
39
|
+
import { genericIfaceBindingKeepsClass } from "./lower-classes.js";
|
|
41
40
|
import { lowerStreamUnderscoreAssign, streamClassAliasDecl } from "./lower-stream.js";
|
|
42
41
|
import { lowerHttpResPropertyAssignment, lowerHttpServerTimeoutAssignment, lowerServerCloseOverrideAssignment, } from "./lower-server.js";
|
|
43
42
|
import { lowerUrlAssignment } from "./builtins/url.js";
|
|
@@ -45,7 +44,7 @@ import { isNativeFfiRequire, builtinMemberRequireDecl, builtinNamespaceDestructu
|
|
|
45
44
|
import { lowerNodeModuleCall } from "./builtins/module-resolution.js";
|
|
46
45
|
import { registerBuiltinCallableAlias } from "./builtins/callable-aliases.js";
|
|
47
46
|
import { lowerEnumDeclaration } from "./lower-enums.js";
|
|
48
|
-
import { abstractPropertyDeclOf, aliasTypeofNarrows, isMatchSliceType, lowerAbsenceProbe, lowerCompoundValueToTarget, lowerElementCompound, lowerIncDec, lowerGroupsProjection, matchResultNamedGroupsOf, runtimeOptionalGuardIds, runtimeOptionalTrueIds, symbolFieldInfo, withRuntimeOptionalNarrowed, } from "./lower-exprs.js";
|
|
47
|
+
import { abstractPropertyDeclOf, aliasTypeofNarrows, isMatchSliceType, lowerAbsenceProbe, lowerCompoundValueToTarget, lowerElementCompound, lowerIncDec, lowerIncDecTarget, lowerGroupsProjection, matchResultNamedGroupsOf, runtimeOptionalGuardIds, runtimeOptionalTrueIds, symbolFieldInfo, withRuntimeOptionalNarrowed, } from "./lower-exprs.js";
|
|
49
48
|
import { globalSymbolKey } from "./expressions/global-symbols.js";
|
|
50
49
|
import { lowerShortCircuitAssignment } from "./expressions/nullish-assignment.js";
|
|
51
50
|
import { lowerEnvironmentKey, lowerNativeFunctionAssignment } from "./lower-exprs.js";
|
|
@@ -3042,14 +3041,14 @@ function objectRestValue(lowerer, el, srcRef, srcType, shape) {
|
|
|
3042
3041
|
kind: "recordLit",
|
|
3043
3042
|
fields: rem.map((f) => ({
|
|
3044
3043
|
name: f.name,
|
|
3045
|
-
value: {
|
|
3044
|
+
value: lowerer.presenceKeepingCopy(srcRef(), srcType.shapeId, f.name, {
|
|
3046
3045
|
kind: "recordGet",
|
|
3047
3046
|
obj: srcRef(),
|
|
3048
3047
|
shapeId: srcType.shapeId,
|
|
3049
3048
|
field: f.name,
|
|
3050
3049
|
type: f.type,
|
|
3051
3050
|
loc,
|
|
3052
|
-
},
|
|
3051
|
+
}, loc),
|
|
3053
3052
|
})),
|
|
3054
3053
|
type: {
|
|
3055
3054
|
kind: "record",
|
|
@@ -3083,7 +3082,10 @@ function objectRestValue(lowerer, el, srcRef, srcType, shape) {
|
|
|
3083
3082
|
type: srcField.type,
|
|
3084
3083
|
loc,
|
|
3085
3084
|
};
|
|
3086
|
-
return {
|
|
3085
|
+
return {
|
|
3086
|
+
name: f.name,
|
|
3087
|
+
value: lowerer.presenceKeepingCopy(srcRef(), srcType.shapeId, srcField.name, lowerer.coerceInto(el, read, f.type), loc),
|
|
3088
|
+
};
|
|
3087
3089
|
});
|
|
3088
3090
|
return { kind: "recordLit", fields, type: restT, loc };
|
|
3089
3091
|
}
|
|
@@ -3614,10 +3616,14 @@ export function bindPatternTarget(lowerer, name, value, isLet, out, allowDynObje
|
|
|
3614
3616
|
// through later locals, templates, operators, and narrowing instead
|
|
3615
3617
|
// of being extracted with a checked arm read.
|
|
3616
3618
|
let runtimeOptional = false;
|
|
3619
|
+
// The optional-read pre-pass may already have widened the binding to
|
|
3620
|
+
// that union; its reads still need the runtime-optional treatment.
|
|
3617
3621
|
if (!dynStays &&
|
|
3618
3622
|
value.type.kind === "union" &&
|
|
3619
3623
|
lowerer.armTag(value.type.unionId, UNDEFINED_T) >= 0 &&
|
|
3620
|
-
typeEquals(lowerer.stripUndefinedArm(value.type), type)
|
|
3624
|
+
(typeEquals(lowerer.stripUndefinedArm(value.type), type) ||
|
|
3625
|
+
(typeEquals(value.type, type) &&
|
|
3626
|
+
typeEquals(lowerer.stripUndefinedArm(value.type), lowerer.irTypeOf(name))))) {
|
|
3621
3627
|
type = value.type;
|
|
3622
3628
|
runtimeOptional = true;
|
|
3623
3629
|
}
|
|
@@ -4020,10 +4026,13 @@ export function lowerVarDecl(lowerer, decl, isLet) {
|
|
|
4020
4026
|
g.type = DYN;
|
|
4021
4027
|
g.type = inferredOptionalRecordType(lowerer, decl, g.type, raw.type);
|
|
4022
4028
|
const arithmetic = raw.type.kind === "union" ? lowerer.unions.get(raw.type.unionId)?.arms : undefined;
|
|
4023
|
-
if (
|
|
4024
|
-
arithmetic
|
|
4025
|
-
|
|
4026
|
-
|
|
4029
|
+
if (arithmetic?.length === 2 &&
|
|
4030
|
+
arithmetic.every((a) => a.kind === "f64" || a.kind === "string" || a.kind === "bool") &&
|
|
4031
|
+
(lowerer.runtimeOptionalArithmeticTypes.has(decl.initializer) ||
|
|
4032
|
+
lowerer.runtimeOptionalBindingType(decl.name)?.kind === "union" ||
|
|
4033
|
+
(g.type.kind === "string" &&
|
|
4034
|
+
arithmetic.some((a) => a.kind === "f64") &&
|
|
4035
|
+
arithmetic.some((a) => a.kind === "string")))) {
|
|
4027
4036
|
g.type = raw.type;
|
|
4028
4037
|
lowerer.runtimeOptionalArithmeticGlobals.add(g);
|
|
4029
4038
|
}
|
|
@@ -4128,7 +4137,7 @@ export function lowerVarDecl(lowerer, decl, isLet) {
|
|
|
4128
4137
|
: immediatelyGuardedAbsenceProbe(lowerer, decl)
|
|
4129
4138
|
? (lowerAbsenceProbe(lowerer, decl.initializer) ?? lowerer.lowerExpr(decl.initializer))
|
|
4130
4139
|
: lowerVariableInitializer(lowerer, decl.initializer, decl.type && (lowerer.typeOf(decl.name).flags & ts.TypeFlags.Never) === 0
|
|
4131
|
-
? (lowerer
|
|
4140
|
+
? annotatedInitializerTarget(lowerer, decl.name)
|
|
4132
4141
|
: undefined);
|
|
4133
4142
|
}
|
|
4134
4143
|
catch (e) {
|
|
@@ -4394,9 +4403,13 @@ export function lowerVarDecl(lowerer, decl, isLet) {
|
|
|
4394
4403
|
arms.some((a) => a.kind === "f64") &&
|
|
4395
4404
|
arms.some((a) => a.kind === "string"));
|
|
4396
4405
|
};
|
|
4397
|
-
const runtimeStringArithmetic =
|
|
4398
|
-
(
|
|
4399
|
-
|
|
4406
|
+
const runtimeStringArithmetic = (arithmeticType !== undefined && typeEquals(arithmeticType, init.type)) ||
|
|
4407
|
+
(settledType.kind === "string" && isStringArithmeticUnion(init.type)) ||
|
|
4408
|
+
(init.type.kind === "union" &&
|
|
4409
|
+
typeEquals(lowerer.runtimeOptionalBindingType(decl.name, settledType), init.type) &&
|
|
4410
|
+
lowerer.unions
|
|
4411
|
+
.get(init.type.unionId)
|
|
4412
|
+
?.arms.every((a) => a.kind === "f64" || a.kind === "string" || a.kind === "bool") === true);
|
|
4400
4413
|
if (runtimeStringArithmetic) {
|
|
4401
4414
|
settledType = init.type;
|
|
4402
4415
|
}
|
|
@@ -4528,7 +4541,7 @@ export function lowerVarDecl(lowerer, decl, isLet) {
|
|
|
4528
4541
|
// subtyping (`const p: {a: number} = wider;`) is rejected, not coerced.
|
|
4529
4542
|
init = lowerer.coerceInto(decl.initializer, init, settledType);
|
|
4530
4543
|
const local = lowerer.declareLocal(decl.name, decl.name.text, settledType, isLet);
|
|
4531
|
-
if (runtimeStringArithmetic &&
|
|
4544
|
+
if (runtimeStringArithmetic && init.type.kind === "union") {
|
|
4532
4545
|
lowerer.runtimeOptionalArithmeticLocals.add(lowerer.runtimeOptionalRootOf(local));
|
|
4533
4546
|
}
|
|
4534
4547
|
if (runtimeOptional) {
|
|
@@ -4538,14 +4551,25 @@ export function lowerVarDecl(lowerer, decl, isLet) {
|
|
|
4538
4551
|
}
|
|
4539
4552
|
return { kind: "varDecl", localId: local.id, init, loc: locOf(decl) };
|
|
4540
4553
|
}
|
|
4554
|
+
/** The destination an annotated declaration builds its initializer for:
|
|
4555
|
+
* the declared type, or the record layout the optional-read analysis
|
|
4556
|
+
* widened for fields a missing element can leave undefined. */
|
|
4557
|
+
function annotatedInitializerTarget(lowerer, name) {
|
|
4558
|
+
const declared = lowerer.mapTypeOf(lowerer.typeOf(name));
|
|
4559
|
+
if (!declared)
|
|
4560
|
+
return undefined;
|
|
4561
|
+
const widened = lowerer.runtimeOptionalBindingType(name, declared);
|
|
4562
|
+
return lowerer.isRuntimeOptionalRecordVariant(widened, declared) ? widened : declared;
|
|
4563
|
+
}
|
|
4541
4564
|
// lib.d.ts declares named captures as strings, but nonparticipating captures
|
|
4542
4565
|
// are undefined. Inferred index records retain that runtime representation;
|
|
4543
4566
|
// explicit annotations still require a checked conversion at the boundary.
|
|
4544
4567
|
function inferredOptionalRecordType(lowerer, decl, declared, actual) {
|
|
4545
|
-
if (decl.type ||
|
|
4546
|
-
|
|
4547
|
-
|
|
4548
|
-
actual
|
|
4568
|
+
if (decl.type || hasJsTypeAnnotation(decl))
|
|
4569
|
+
return declared;
|
|
4570
|
+
if (lowerer.isRuntimeOptionalRecordVariant(actual, declared))
|
|
4571
|
+
return actual;
|
|
4572
|
+
if (declared.kind !== "record" || actual.kind !== "record")
|
|
4549
4573
|
return declared;
|
|
4550
4574
|
const target = lowerer.shapes.get(declared.shapeId);
|
|
4551
4575
|
const source = lowerer.shapes.get(actual.shapeId);
|
|
@@ -5016,8 +5040,9 @@ function isStrictDelete(node) {
|
|
|
5016
5040
|
}
|
|
5017
5041
|
/** Statement-position `delete`: process.env keys → process.envUnset
|
|
5018
5042
|
* (unsetenv), pure `Record<string, T>` keys → recordKeyDelete (the
|
|
5019
|
-
* overflow Map delete), declared OPTIONAL fields → the
|
|
5020
|
-
*
|
|
5043
|
+
* overflow Map delete), declared OPTIONAL fields → the field's ABSENT
|
|
5044
|
+
* state (the slot reads undefined and no longer counts as an own
|
|
5045
|
+
* property). Everything else
|
|
5021
5046
|
* fences with the honest reason — a required field is a struct slot no
|
|
5022
5047
|
* runtime can remove. */
|
|
5023
5048
|
function lowerDeleteStatement(lowerer, expr) {
|
|
@@ -5133,14 +5158,13 @@ function lowerDeleteStatement(lowerer, expr) {
|
|
|
5133
5158
|
if (shape?.indexValue && shape.fields.length === 0 && !shape.tuple) {
|
|
5134
5159
|
return { kind: "recordKeyDelete", obj, shapeId: obj.type.shapeId, key: lowerKey(), loc };
|
|
5135
5160
|
}
|
|
5136
|
-
// `delete r.f` of a declared OPTIONAL field (undefined-armed slot)
|
|
5137
|
-
// the
|
|
5138
|
-
// slot,
|
|
5139
|
-
//
|
|
5140
|
-
//
|
|
5141
|
-
// (
|
|
5142
|
-
//
|
|
5143
|
-
// fields keep the honest fence below.
|
|
5161
|
+
// `delete r.f` of a declared OPTIONAL field (undefined-armed slot)
|
|
5162
|
+
// writes the field's ABSENT state: a monomorphic shape cannot remove
|
|
5163
|
+
// its slot, but the slot remembers that no property exists, so `in`
|
|
5164
|
+
// answers false, Object.keys skips it, and JSON.stringify drops it,
|
|
5165
|
+
// while a later write makes it present again. Constant keys only
|
|
5166
|
+
// (dot access or a literal bracket); required fields keep the honest
|
|
5167
|
+
// fence below.
|
|
5144
5168
|
const fieldName = ts.isPropertyAccessExpression(target)
|
|
5145
5169
|
? target.name.text
|
|
5146
5170
|
: ts.isStringLiteral(target.argumentExpression)
|
|
@@ -5150,7 +5174,7 @@ function lowerDeleteStatement(lowerer, expr) {
|
|
|
5150
5174
|
? shape?.fields.find((f) => f.name === fieldName)
|
|
5151
5175
|
: undefined;
|
|
5152
5176
|
if (field) {
|
|
5153
|
-
const absent = lowerer.
|
|
5177
|
+
const absent = lowerer.absentFieldValue(field.type, loc);
|
|
5154
5178
|
if (absent) {
|
|
5155
5179
|
return {
|
|
5156
5180
|
kind: "recordSet",
|
|
@@ -5964,7 +5988,7 @@ export function lowerExprStatement(lowerer, expr) {
|
|
|
5964
5988
|
}
|
|
5965
5989
|
const unionWrite = lowerUnionFieldWrite(lowerer, expr.left, expr.right);
|
|
5966
5990
|
if (unionWrite)
|
|
5967
|
-
return unionWrite;
|
|
5991
|
+
return { kind: "exprStmt", expr: unionWrite, loc: locOf(expr) };
|
|
5968
5992
|
const target = lowerer.fieldTarget(expr.left);
|
|
5969
5993
|
if (target) {
|
|
5970
5994
|
const value = lowerer.lowerExprExpecting(expr.right, target.fieldType);
|
|
@@ -6162,27 +6186,7 @@ export function lowerExprStatement(lowerer, expr) {
|
|
|
6162
6186
|
};
|
|
6163
6187
|
}
|
|
6164
6188
|
// Statement position only: pre/post distinction is unobservable, so
|
|
6165
|
-
//
|
|
6166
|
-
if (ts.isPropertyAccessExpression(expr.operand) ||
|
|
6167
|
-
(ts.isElementAccessExpression(expr.operand) && symbolFieldInfo(lowerer, expr.operand))) {
|
|
6168
|
-
// `N.x++` — the namespace-qualified spelling of a module-global
|
|
6169
|
-
// increment (the member's global IS the variable); expando
|
|
6170
|
-
// function members (`foo.count++`) are module globals too.
|
|
6171
|
-
if (ts.isPropertyAccessExpression(expr.operand) && !expr.operand.questionDotToken) {
|
|
6172
|
-
const staticTarget = staticFieldWriteTarget(lowerer, expr.operand);
|
|
6173
|
-
if (staticTarget)
|
|
6174
|
-
return lowerIncDecToTarget(lowerer, expr, staticTarget);
|
|
6175
|
-
const exT = expandoWritableTarget(lowerer, expr.operand);
|
|
6176
|
-
if (exT)
|
|
6177
|
-
return lowerIncDecToTarget(lowerer, expr, exT);
|
|
6178
|
-
const nsT = nsWritableTarget(lowerer, expr.operand);
|
|
6179
|
-
if (nsT)
|
|
6180
|
-
return lowerIncDecToTarget(lowerer, expr, nsT);
|
|
6181
|
-
}
|
|
6182
|
-
// `obj.f++` desugars through the compound-field path (`obj.f += 1`);
|
|
6183
|
-
// `this[kLimit]++` is the same desugar over the symbol-keyed slot.
|
|
6184
|
-
return lowerer.lowerFieldCompound(expr.operand, expr.operator === ts.SyntaxKind.PlusPlusToken ? "+" : "-", null, locOf(expr));
|
|
6185
|
-
}
|
|
6189
|
+
// numeric bindings retain the simple `x = x ± 1` loop form.
|
|
6186
6190
|
if (!ts.isIdentifier(expr.operand)) {
|
|
6187
6191
|
lowerer.unsupported("SC1090", expr.operand, "increment/decrement of non-variables");
|
|
6188
6192
|
}
|
|
@@ -6269,22 +6273,17 @@ function lowerIncDecToTarget(lowerer, expr, target) {
|
|
|
6269
6273
|
const loc = locOf(expr);
|
|
6270
6274
|
const op = expr.operator === ts.SyntaxKind.PlusPlusToken ? "+" : "-";
|
|
6271
6275
|
const readTarget = { kind: "varRef", localId: target.id, type: target.type, loc };
|
|
6272
|
-
|
|
6273
|
-
|
|
6274
|
-
const dynTarget = target.type.kind === "dyn" && isJsSourceFile(expr.getSourceFile());
|
|
6275
|
-
if (target.type.kind !== "f64" && !dynTarget) {
|
|
6276
|
-
lowerer.unsupported("SC1090", expr.operand, "increment/decrement of non-number targets");
|
|
6277
|
-
}
|
|
6276
|
+
if (target.type.kind !== "f64")
|
|
6277
|
+
return { kind: "exprStmt", expr: lowerIncDecTarget(lowerer, expr, target, false), loc };
|
|
6278
6278
|
const computed = {
|
|
6279
6279
|
kind: "bin",
|
|
6280
6280
|
op,
|
|
6281
|
-
left:
|
|
6281
|
+
left: readTarget,
|
|
6282
6282
|
right: { kind: "numLit", value: 1, type: F64, loc },
|
|
6283
6283
|
type: F64,
|
|
6284
6284
|
loc,
|
|
6285
6285
|
};
|
|
6286
|
-
|
|
6287
|
-
return { kind: "assign", localId: target.id, value, loc };
|
|
6286
|
+
return { kind: "assign", localId: target.id, value: computed, loc };
|
|
6288
6287
|
}
|
|
6289
6288
|
/** The shared tail of `x op= e` over a resolved variable/global target —
|
|
6290
6289
|
* desugared to `x = x op e` (x read before e, like JS). Serves the bare-
|
|
@@ -7745,7 +7744,17 @@ export function lowerForOf(lowerer, stmt) {
|
|
|
7745
7744
|
}
|
|
7746
7745
|
const elementType = iterable.type.kind === "array" ? iterable.type.elem : tupleSource.elem;
|
|
7747
7746
|
const privateSplit = !awaitArray && isPrivateSplitConsumer(lowerer, iterSrc, iterable);
|
|
7748
|
-
|
|
7747
|
+
// An array the optional-read analysis proved free of holes and stored
|
|
7748
|
+
// undefined yields its payload directly, with no per-element state test.
|
|
7749
|
+
const presentElements = tupleSource === null &&
|
|
7750
|
+
!privateSplit &&
|
|
7751
|
+
!awaitArray &&
|
|
7752
|
+
elementType.kind !== "dyn" &&
|
|
7753
|
+
elementType.kind !== "jsval" &&
|
|
7754
|
+
lowerer.presentElementLoops.has(stmt);
|
|
7755
|
+
const yieldedT = tupleSource === null && !privateSplit && !presentElements
|
|
7756
|
+
? arrayValueType(lowerer, elementType)
|
|
7757
|
+
: elementType;
|
|
7749
7758
|
let elemValueT = yieldedT;
|
|
7750
7759
|
let awaitPromiseTag = null;
|
|
7751
7760
|
if (awaitArray) {
|
|
@@ -7840,6 +7849,15 @@ export function lowerForOf(lowerer, stmt) {
|
|
|
7840
7849
|
};
|
|
7841
7850
|
}
|
|
7842
7851
|
}
|
|
7852
|
+
else if (presentElements) {
|
|
7853
|
+
yielded = {
|
|
7854
|
+
kind: "arrayGet",
|
|
7855
|
+
arr: varRef(source.id, sourceT, loc),
|
|
7856
|
+
index: varRef(cursor.id, F64, loc),
|
|
7857
|
+
type: elementType,
|
|
7858
|
+
loc,
|
|
7859
|
+
};
|
|
7860
|
+
}
|
|
7843
7861
|
else {
|
|
7844
7862
|
yielded = arrayValueRead(lowerer, varRef(source.id, sourceT, loc), varRef(cursor.id, F64, loc), elementType, loc);
|
|
7845
7863
|
}
|