@scriptc/compiler 0.3.6 → 0.4.0
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 +682 -50
- package/ambient/scriptc.d.ts +134 -0
- package/dist/backend/cycle-analysis.d.ts +1 -1
- package/dist/backend/cycle-analysis.js +1 -0
- package/dist/backend/cycle-analysis.js.map +1 -1
- package/dist/backend/cycle-analysis.test.js +13 -1
- package/dist/backend/cycle-analysis.test.js.map +1 -1
- package/dist/backend/cycle-mutability.js +16 -5
- package/dist/backend/cycle-mutability.js.map +1 -1
- package/dist/backend/executable-features.js +13 -0
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/immutability.test.js +1 -1
- package/dist/backend/library-pack.js +6 -0
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/llvm/alloc.d.ts +41 -4
- package/dist/backend/llvm/alloc.js +138 -7
- package/dist/backend/llvm/alloc.js.map +1 -1
- package/dist/backend/llvm/alloc.test.js +30 -1
- package/dist/backend/llvm/alloc.test.js.map +1 -1
- package/dist/backend/llvm/appended-array-literals.test.js +1 -1
- package/dist/backend/llvm/array-search.test.js +1 -1
- package/dist/backend/llvm/blocks.d.ts +8 -0
- package/dist/backend/llvm/blocks.js +43 -1
- package/dist/backend/llvm/blocks.js.map +1 -1
- package/dist/backend/llvm/blocks.test.js +22 -1
- package/dist/backend/llvm/blocks.test.js.map +1 -1
- package/dist/backend/llvm/byte-numbers.js +15 -5
- package/dist/backend/llvm/byte-numbers.js.map +1 -1
- package/dist/backend/llvm/bytes-alias.d.ts +14 -0
- package/dist/backend/llvm/bytes-alias.js +20 -0
- package/dist/backend/llvm/bytes-alias.js.map +1 -0
- package/dist/backend/llvm/bytes-loop-versions.d.ts +86 -0
- package/dist/backend/llvm/bytes-loop-versions.js +506 -0
- package/dist/backend/llvm/bytes-loop-versions.js.map +1 -0
- package/dist/backend/llvm/bytes-loop-versions.test.d.ts +1 -0
- package/dist/backend/llvm/bytes-loop-versions.test.js +244 -0
- package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -0
- package/dist/backend/llvm/call-lifetimes.js +50 -1
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.test.js +34 -0
- package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/checked-narrows.test.js +1 -1
- package/dist/backend/llvm/checked-value-lifetimes.js +4 -1
- package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
- package/dist/backend/llvm/classes.d.ts +11 -0
- package/dist/backend/llvm/classes.js +71 -14
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +58 -8
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/common.js +1 -0
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.d.ts +5 -1
- package/dist/backend/llvm/constant-callbacks.js +55 -12
- package/dist/backend/llvm/constant-callbacks.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.test.js +88 -1
- package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
- package/dist/backend/llvm/counted-loops.d.ts +4 -0
- package/dist/backend/llvm/counted-loops.js +37 -0
- package/dist/backend/llvm/counted-loops.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.d.ts +12 -3
- package/dist/backend/llvm/dense-array-access.js +72 -14
- package/dist/backend/llvm/dense-array-access.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.test.js +59 -3
- package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
- package/dist/backend/llvm/dense-array-loops.d.ts +51 -0
- package/dist/backend/llvm/dense-array-loops.js +162 -0
- package/dist/backend/llvm/dense-array-loops.js.map +1 -0
- package/dist/backend/llvm/dense-array-loops.test.d.ts +1 -0
- package/dist/backend/llvm/dense-array-loops.test.js +128 -0
- package/dist/backend/llvm/dense-array-loops.test.js.map +1 -0
- package/dist/backend/llvm/dyn-handle-tags.test.d.ts +1 -0
- package/dist/backend/llvm/dyn-handle-tags.test.js +38 -0
- package/dist/backend/llvm/dyn-handle-tags.test.js.map +1 -0
- package/dist/backend/llvm/dyn.d.ts +28 -4
- package/dist/backend/llvm/dyn.js +293 -178
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.d.ts +64 -0
- package/dist/backend/llvm/emit-function.js +1190 -0
- package/dist/backend/llvm/emit-function.js.map +1 -0
- package/dist/backend/llvm/emit-module.d.ts +24 -0
- package/dist/backend/llvm/emit-module.js +1535 -0
- package/dist/backend/llvm/emit-module.js.map +1 -0
- package/dist/backend/llvm/emit-statements.d.ts +58 -0
- package/dist/backend/llvm/emit-statements.js +1964 -0
- package/dist/backend/llvm/emit-statements.js.map +1 -0
- package/dist/backend/llvm/emitter.d.ts +547 -283
- package/dist/backend/llvm/emitter.js +689 -4643
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +57 -3
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +73 -46
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-async.test.js +1 -1
- package/dist/backend/llvm/expr-bytes.d.ts +2 -0
- package/dist/backend/llvm/expr-bytes.js +76 -29
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-callbacks.d.ts +6 -2
- package/dist/backend/llvm/expr-callbacks.js +48 -11
- package/dist/backend/llvm/expr-callbacks.js.map +1 -1
- package/dist/backend/llvm/expr-calls.d.ts +1 -1
- package/dist/backend/llvm/expr-calls.js +71 -53
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-calls.test.js +1 -1
- package/dist/backend/llvm/expr-containers.js +39 -15
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-control.js +16 -16
- package/dist/backend/llvm/expr-control.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.d.ts +3 -0
- package/dist/backend/llvm/expr-dynamic.js +67 -62
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +121 -25
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.test.js +2 -2
- package/dist/backend/llvm/expr-records.d.ts +1 -1
- package/dist/backend/llvm/expr-records.js +32 -11
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +54 -12
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.test.js +2 -2
- package/dist/backend/llvm/expr-stream-callbacks.js +22 -1
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/int32-abi.test.js +2 -2
- package/dist/backend/llvm/integer-clones.test.js +3 -3
- package/dist/backend/llvm/integer-remainder.d.ts +34 -13
- package/dist/backend/llvm/integer-remainder.js +156 -22
- package/dist/backend/llvm/integer-remainder.js.map +1 -1
- package/dist/backend/llvm/intern-tables.test.js +1 -1
- package/dist/backend/llvm/jsval-encoding.d.ts +21 -0
- package/dist/backend/llvm/jsval-encoding.js +20 -0
- package/dist/backend/llvm/jsval-encoding.js.map +1 -0
- package/dist/backend/llvm/jsval.d.ts +12 -0
- package/dist/backend/llvm/jsval.js +488 -0
- package/dist/backend/llvm/jsval.js.map +1 -0
- package/dist/backend/llvm/lazy-captures.d.ts +12 -2
- package/dist/backend/llvm/lazy-captures.js +39 -17
- package/dist/backend/llvm/lazy-captures.js.map +1 -1
- package/dist/backend/llvm/lib-abi.js +1 -1
- package/dist/backend/llvm/lib-abi.js.map +1 -1
- package/dist/backend/llvm/lib-connect.js +1 -1
- package/dist/backend/llvm/lib-connect.js.map +1 -1
- package/dist/backend/llvm/lib-datagram.js +14 -8
- package/dist/backend/llvm/lib-datagram.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +189 -23
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +42 -13
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-http2.js +3 -3
- package/dist/backend/llvm/lib-http2.js.map +1 -1
- package/dist/backend/llvm/lib-lookup.js +2 -2
- package/dist/backend/llvm/lib-lookup.js.map +1 -1
- package/dist/backend/llvm/lib-network.js +56 -22
- package/dist/backend/llvm/lib-network.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +90 -50
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.d.ts +12 -0
- package/dist/backend/llvm/lib-shared.js +187 -6
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +46 -16
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/lib-test.js +43 -7
- package/dist/backend/llvm/lib-test.js.map +1 -1
- package/dist/backend/llvm/lib-tls.js +4 -9
- package/dist/backend/llvm/lib-tls.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +2 -2
- package/dist/backend/llvm/local-array-reads.test.js +1 -1
- package/dist/backend/llvm/local-extents.d.ts +19 -0
- package/dist/backend/llvm/local-extents.js +169 -0
- package/dist/backend/llvm/local-extents.js.map +1 -0
- package/dist/backend/llvm/local-extents.test.d.ts +1 -0
- package/dist/backend/llvm/local-extents.test.js +92 -0
- package/dist/backend/llvm/local-extents.test.js.map +1 -0
- package/dist/backend/llvm/local-union-storage.js +7 -7
- package/dist/backend/llvm/local-union-storage.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.test.js +2 -2
- package/dist/backend/llvm/map-entry-fusion.test.js +1 -1
- package/dist/backend/llvm/map-number-lookup.js +2 -2
- package/dist/backend/llvm/map-number-lookup.test.js +2 -2
- package/dist/backend/llvm/map-read-lifetimes.test.js +2 -2
- package/dist/backend/llvm/narrow-guards.d.ts +38 -0
- package/dist/backend/llvm/narrow-guards.js +151 -0
- package/dist/backend/llvm/narrow-guards.js.map +1 -0
- package/dist/backend/llvm/nullable-unions.d.ts +64 -6
- package/dist/backend/llvm/nullable-unions.js +103 -6
- package/dist/backend/llvm/nullable-unions.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.test.d.ts +1 -0
- package/dist/backend/llvm/nullable-unions.test.js +65 -0
- package/dist/backend/llvm/nullable-unions.test.js.map +1 -0
- package/dist/backend/llvm/publish.d.ts +4 -0
- package/dist/backend/llvm/publish.js +14 -2
- package/dist/backend/llvm/publish.js.map +1 -1
- package/dist/backend/llvm/publish.test.js +1 -1
- package/dist/backend/llvm/receivers.d.ts +31 -0
- package/dist/backend/llvm/receivers.js +395 -0
- package/dist/backend/llvm/receivers.js.map +1 -0
- package/dist/backend/llvm/record-results.d.ts +12 -1
- package/dist/backend/llvm/record-results.js +64 -4
- package/dist/backend/llvm/record-results.js.map +1 -1
- package/dist/backend/llvm/reference-effects.js +9 -0
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- package/dist/backend/llvm/reference-writes.d.ts +4 -0
- package/dist/backend/llvm/reference-writes.js +142 -6
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/reference-writes.test.d.ts +1 -0
- package/dist/backend/llvm/reference-writes.test.js +88 -0
- package/dist/backend/llvm/reference-writes.test.js.map +1 -0
- package/dist/backend/llvm/regex-matchers.d.ts +8 -0
- package/dist/backend/llvm/regex-matchers.js +33 -0
- package/dist/backend/llvm/regex-matchers.js.map +1 -1
- package/dist/backend/llvm/regex-matchers.test.js +23 -1
- package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
- package/dist/backend/llvm/regions.d.ts +1 -1
- package/dist/backend/llvm/regions.js +9 -6
- package/dist/backend/llvm/regions.js.map +1 -1
- package/dist/backend/llvm/regions.test.js +1 -1
- package/dist/backend/llvm/shapes.d.ts +66 -43
- package/dist/backend/llvm/shapes.js +280 -21
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +37 -3
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/split-loops.js +2 -2
- package/dist/backend/llvm/split-loops.js.map +1 -1
- package/dist/backend/llvm/stack-objects.d.ts +26 -6
- package/dist/backend/llvm/stack-objects.js +133 -10
- package/dist/backend/llvm/stack-objects.js.map +1 -1
- package/dist/backend/llvm/stack-objects.test.js +55 -1
- package/dist/backend/llvm/stack-objects.test.js.map +1 -1
- package/dist/backend/llvm/stack-unions.test.js +1 -1
- package/dist/backend/llvm/string-construction.test.js +1 -1
- package/dist/backend/llvm/string-lifetimes.test.js +15 -14
- package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/string-slices.d.ts +25 -0
- package/dist/backend/llvm/string-slices.js +207 -1
- package/dist/backend/llvm/string-slices.js.map +1 -1
- package/dist/backend/llvm/string-slices.test.js +139 -2
- package/dist/backend/llvm/string-slices.test.js.map +1 -1
- package/dist/backend/llvm/switch-dispatch.test.js +2 -2
- package/dist/backend/llvm/thread-slots.d.ts +5 -0
- package/dist/backend/llvm/thread-slots.js +142 -0
- package/dist/backend/llvm/thread-slots.js.map +1 -0
- package/dist/backend/llvm/thread-slots.test.d.ts +1 -0
- package/dist/backend/llvm/thread-slots.test.js +110 -0
- package/dist/backend/llvm/thread-slots.test.js.map +1 -0
- package/dist/backend/llvm/union-repr.d.ts +7 -7
- package/dist/backend/llvm/union-repr.js +18 -2
- package/dist/backend/llvm/union-repr.js.map +1 -1
- package/dist/backend/llvm/union-retype.test.js +17 -3
- package/dist/backend/llvm/union-retype.test.js.map +1 -1
- package/dist/backend/llvm/walkers.d.ts +2 -2
- package/dist/backend/llvm/walkers.js +51 -26
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/llvm/wasm-modules.d.ts +16 -0
- package/dist/backend/llvm/wasm-modules.js +66 -0
- package/dist/backend/llvm/wasm-modules.js.map +1 -0
- package/dist/backend/llvm/wrapping-sums.d.ts +7 -0
- package/dist/backend/llvm/wrapping-sums.js +11 -3
- package/dist/backend/llvm/wrapping-sums.js.map +1 -1
- package/dist/backend/mangle.d.ts +7 -0
- package/dist/backend/mangle.js +11 -0
- package/dist/backend/mangle.js.map +1 -1
- package/dist/backend/may-throw.d.ts +3 -0
- package/dist/backend/may-throw.js +4 -2
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/may-throw.test.js +1 -1
- package/dist/backend/native/contracts.d.ts +37 -0
- package/dist/backend/native/executable.js +192 -137
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/library.js +1 -0
- package/dist/backend/native/library.js.map +1 -1
- package/dist/backend/native/runtime-inputs.d.ts +1 -1
- package/dist/backend/native/runtime-inputs.js +1 -0
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +30 -0
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/publication.test.js +1 -1
- package/dist/backend/runtime-pack-core.d.ts +9 -1
- package/dist/backend/runtime-pack-core.js +10 -1
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-native.js +1 -1
- package/dist/backend/runtime-pack-native.js.map +1 -1
- package/dist/backend/runtime-pack-native.test.d.ts +1 -0
- package/dist/backend/runtime-pack-native.test.js +31 -0
- package/dist/backend/runtime-pack-native.test.js.map +1 -0
- package/dist/backend/runtime-pack-targets.test.js +5 -0
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +5 -0
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/stack-observations.d.ts +22 -0
- package/dist/backend/stack-observations.js +382 -0
- package/dist/backend/stack-observations.js.map +1 -0
- package/dist/backend/stack-observations.test.d.ts +1 -0
- package/dist/backend/stack-observations.test.js +233 -0
- package/dist/backend/stack-observations.test.js.map +1 -0
- package/dist/backend/target-diagnostics.js +8 -0
- package/dist/backend/target-diagnostics.js.map +1 -1
- package/dist/backend/target-diagnostics.test.js +1 -1
- package/dist/backend/warm-cache.js +5 -0
- package/dist/backend/warm-cache.js.map +1 -1
- package/dist/backend/young-nursery.d.ts +7 -0
- package/dist/backend/young-nursery.js +10 -0
- package/dist/backend/young-nursery.js.map +1 -0
- package/dist/cli/command.js +44 -4
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/usage.d.ts +11 -1
- package/dist/cli/usage.js +20 -1
- package/dist/cli/usage.js.map +1 -1
- package/dist/compat/fetch-profile.js +10 -1
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/compile-types.d.ts +13 -0
- package/dist/contracts/check.js +24 -6
- package/dist/contracts/check.js.map +1 -1
- package/dist/contracts/int32-elements.d.ts +115 -0
- package/dist/contracts/int32-elements.js +1179 -0
- package/dist/contracts/int32-elements.js.map +1 -0
- package/dist/coverage/report.d.ts +16 -0
- package/dist/coverage/report.js +182 -1
- package/dist/coverage/report.js.map +1 -1
- package/dist/coverage/surface-manifest.js +16 -3
- package/dist/coverage/surface-manifest.js.map +1 -1
- package/dist/coverage/verdict-cache.d.ts +2 -0
- package/dist/coverage/verdict-cache.js +12 -0
- package/dist/coverage/verdict-cache.js.map +1 -1
- package/dist/coverage/verdict-cache.test.js +2 -1
- package/dist/coverage/verdict-cache.test.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +10 -6
- package/dist/diagnostics/diagnostic.js +29 -21
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/envelope.d.ts +39 -2
- package/dist/diagnostics/envelope.js.map +1 -1
- package/dist/diagnostics/render.d.ts +7 -0
- package/dist/diagnostics/render.js +50 -13
- package/dist/diagnostics/render.js.map +1 -1
- package/dist/diagnostics/render.test.d.ts +1 -0
- package/dist/diagnostics/render.test.js +49 -0
- package/dist/diagnostics/render.test.js.map +1 -0
- package/dist/executable/executable-cache.d.ts +17 -0
- package/dist/executable/executable-cache.js +13 -1
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +7 -1
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/executable/prepare.js +2 -1
- package/dist/executable/prepare.js.map +1 -1
- package/dist/frontend/analysis.js +6 -1
- package/dist/frontend/analysis.js.map +1 -1
- package/dist/frontend/builtin-modules.d.ts +16 -2
- package/dist/frontend/builtin-modules.js +40 -7
- package/dist/frontend/builtin-modules.js.map +1 -1
- package/dist/frontend/cjs-syntax.js +52 -51
- package/dist/frontend/cjs-syntax.js.map +1 -1
- package/dist/frontend/contract-types.d.ts +3 -0
- package/dist/frontend/contract-types.js +36 -7
- package/dist/frontend/contract-types.js.map +1 -1
- package/dist/frontend/experimental-import.d.ts +5 -1
- package/dist/frontend/experimental-import.js +26 -7
- package/dist/frontend/experimental-import.js.map +1 -1
- package/dist/frontend/fork-target.js +20 -22
- package/dist/frontend/fork-target.js.map +1 -1
- package/dist/frontend/fork-target.test.js +2 -1
- package/dist/frontend/fork-target.test.js.map +1 -1
- package/dist/frontend/function-completion.js +6 -6
- package/dist/frontend/function-completion.js.map +1 -1
- package/dist/frontend/helper-tokens.js +15 -3
- package/dist/frontend/helper-tokens.js.map +1 -1
- package/dist/frontend/helper-tokens.test.js +7 -1
- package/dist/frontend/helper-tokens.test.js.map +1 -1
- package/dist/frontend/inferred-js-diagnostics.js +14 -17
- package/dist/frontend/inferred-js-diagnostics.js.map +1 -1
- package/dist/frontend/input-tracker.d.ts +3 -0
- package/dist/frontend/input-tracker.js +32 -3
- package/dist/frontend/input-tracker.js.map +1 -1
- package/dist/frontend/lib-contract.js +36 -32
- package/dist/frontend/lib-contract.js.map +1 -1
- package/dist/frontend/lib-exports.js +3 -3
- package/dist/frontend/lib-exports.js.map +1 -1
- package/dist/frontend/lowering/array-values.d.ts +8 -3
- package/dist/frontend/lowering/array-values.js +60 -11
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/assert-instances.js +4 -4
- package/dist/frontend/lowering/assert-instances.js.map +1 -1
- package/dist/frontend/lowering/assertion-identity.d.ts +12 -0
- package/dist/frontend/lowering/assertion-identity.js +70 -0
- package/dist/frontend/lowering/assertion-identity.js.map +1 -0
- package/dist/frontend/lowering/assertion-members.d.ts +28 -0
- package/dist/frontend/lowering/assertion-members.js +185 -0
- package/dist/frontend/lowering/assertion-members.js.map +1 -0
- package/dist/frontend/lowering/binding-analysis.js +27 -20
- package/dist/frontend/lowering/binding-analysis.js.map +1 -1
- package/dist/frontend/lowering/builtin-calls.js +63 -5
- package/dist/frontend/lowering/builtin-calls.js.map +1 -1
- package/dist/frontend/lowering/builtin-function-fences.d.ts +14 -0
- package/dist/frontend/lowering/builtin-function-fences.js +42 -0
- package/dist/frontend/lowering/builtin-function-fences.js.map +1 -0
- package/dist/frontend/lowering/builtins/arguments.js +1 -1
- package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
- package/dist/frontend/lowering/builtins/async-context.js +53 -52
- package/dist/frontend/lowering/builtins/async-context.js.map +1 -1
- package/dist/frontend/lowering/builtins/atomics.js +6 -6
- package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
- package/dist/frontend/lowering/builtins/blob.js +8 -6
- package/dist/frontend/lowering/builtins/blob.js.map +1 -1
- package/dist/frontend/lowering/builtins/builtin-class-dyn.d.ts +23 -0
- package/dist/frontend/lowering/builtins/builtin-class-dyn.js +156 -0
- package/dist/frontend/lowering/builtins/builtin-class-dyn.js.map +1 -0
- package/dist/frontend/lowering/builtins/callable-aliases.js +16 -5
- package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-async.js +7 -7
- package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-methods.d.ts +6 -4
- package/dist/frontend/lowering/builtins/child-process-methods.js +310 -57
- package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-sync.js +16 -10
- package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process.d.ts +6 -4
- package/dist/frontend/lowering/builtins/child-process.js +85 -61
- package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
- package/dist/frontend/lowering/builtins/class-values.d.ts +60 -0
- package/dist/frontend/lowering/builtins/class-values.js +226 -0
- package/dist/frontend/lowering/builtins/class-values.js.map +1 -0
- package/dist/frontend/lowering/builtins/compression.d.ts +9 -0
- package/dist/frontend/lowering/builtins/compression.js +107 -44
- package/dist/frontend/lowering/builtins/compression.js.map +1 -1
- package/dist/frontend/lowering/builtins/constants.d.ts +9 -1
- package/dist/frontend/lowering/builtins/constants.js +28 -7
- package/dist/frontend/lowering/builtins/constants.js.map +1 -1
- package/dist/frontend/lowering/builtins/crypto.d.ts +19 -0
- package/dist/frontend/lowering/builtins/crypto.js +211 -37
- package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
- package/dist/frontend/lowering/builtins/dates.d.ts +7 -1
- package/dist/frontend/lowering/builtins/dates.js +92 -16
- package/dist/frontend/lowering/builtins/dates.js.map +1 -1
- package/dist/frontend/lowering/builtins/disposable-stack.d.ts +18 -0
- package/dist/frontend/lowering/builtins/disposable-stack.js +137 -0
- package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -0
- package/dist/frontend/lowering/builtins/environment.js +3 -3
- package/dist/frontend/lowering/builtins/environment.js.map +1 -1
- package/dist/frontend/lowering/builtins/errors.d.ts +14 -10
- package/dist/frontend/lowering/builtins/errors.js +169 -3
- package/dist/frontend/lowering/builtins/errors.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.js +128 -116
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem.js +77 -77
- package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-glob.js +3 -3
- package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-streams.js +10 -11
- package/dist/frontend/lowering/builtins/fs-streams.js.map +1 -1
- package/dist/frontend/lowering/builtins/ipc.js +45 -8
- package/dist/frontend/lowering/builtins/ipc.js.map +1 -1
- package/dist/frontend/lowering/builtins/json.js +232 -24
- package/dist/frontend/lowering/builtins/json.js.map +1 -1
- package/dist/frontend/lowering/builtins/key-object.js +4 -4
- package/dist/frontend/lowering/builtins/key-object.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-bindings.d.ts +8 -0
- package/dist/frontend/lowering/builtins/module-bindings.js +71 -22
- package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-calls.js +55 -44
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-resolution.d.ts +4 -3
- package/dist/frontend/lowering/builtins/module-resolution.js +24 -23
- package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
- package/dist/frontend/lowering/builtins/navigator.d.ts +13 -0
- package/dist/frontend/lowering/builtins/navigator.js +40 -0
- package/dist/frontend/lowering/builtins/navigator.js.map +1 -0
- package/dist/frontend/lowering/builtins/net-address.d.ts +19 -0
- package/dist/frontend/lowering/builtins/net-address.js +156 -0
- package/dist/frontend/lowering/builtins/net-address.js.map +1 -0
- package/dist/frontend/lowering/builtins/numbers.js +25 -9
- package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
- package/dist/frontend/lowering/builtins/operating-system.d.ts +4 -0
- package/dist/frontend/lowering/builtins/operating-system.js +25 -12
- package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
- package/dist/frontend/lowering/builtins/performance.d.ts +12 -0
- package/dist/frontend/lowering/builtins/performance.js +259 -8
- package/dist/frontend/lowering/builtins/performance.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.d.ts +32 -1
- package/dist/frontend/lowering/builtins/process.js +461 -99
- package/dist/frontend/lowering/builtins/process.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.d.ts +5 -1
- package/dist/frontend/lowering/builtins/promises.js +326 -43
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/builtins/promisify-callback.d.ts +37 -0
- package/dist/frontend/lowering/builtins/promisify-callback.js +320 -0
- package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -0
- package/dist/frontend/lowering/builtins/properties.js +37 -1
- package/dist/frontend/lowering/builtins/properties.js.map +1 -1
- package/dist/frontend/lowering/builtins/querystring.js +14 -14
- package/dist/frontend/lowering/builtins/querystring.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +12 -2
- package/dist/frontend/lowering/builtins/readline.js +136 -39
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/receiver-types.js +3 -5
- package/dist/frontend/lowering/builtins/receiver-types.js.map +1 -1
- package/dist/frontend/lowering/builtins/reflection.js +16 -14
- package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
- package/dist/frontend/lowering/builtins/runtime-constructor.d.ts +26 -0
- package/dist/frontend/lowering/builtins/runtime-constructor.js +165 -0
- package/dist/frontend/lowering/builtins/runtime-constructor.js.map +1 -0
- package/dist/frontend/lowering/builtins/strings.js +101 -12
- package/dist/frontend/lowering/builtins/strings.js.map +1 -1
- package/dist/frontend/lowering/builtins/text-codecs.js +41 -38
- package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
- package/dist/frontend/lowering/builtins/timers.js +75 -30
- package/dist/frontend/lowering/builtins/timers.js.map +1 -1
- package/dist/frontend/lowering/builtins/url.d.ts +3 -0
- package/dist/frontend/lowering/builtins/url.js +120 -17
- package/dist/frontend/lowering/builtins/url.js.map +1 -1
- package/dist/frontend/lowering/builtins/util-types.js +20 -4
- package/dist/frontend/lowering/builtins/util-types.js.map +1 -1
- package/dist/frontend/lowering/builtins/v8.d.ts +11 -0
- package/dist/frontend/lowering/builtins/v8.js +105 -0
- package/dist/frontend/lowering/builtins/v8.js.map +1 -0
- package/dist/frontend/lowering/builtins/webassembly.d.ts +33 -0
- package/dist/frontend/lowering/builtins/webassembly.js +388 -0
- package/dist/frontend/lowering/builtins/webassembly.js.map +1 -0
- package/dist/frontend/lowering/builtins/webcrypto.d.ts +20 -0
- package/dist/frontend/lowering/builtins/webcrypto.js +112 -0
- package/dist/frontend/lowering/builtins/webcrypto.js.map +1 -0
- package/dist/frontend/lowering/builtins/workers.d.ts +12 -0
- package/dist/frontend/lowering/builtins/workers.js +193 -8
- package/dist/frontend/lowering/builtins/workers.js.map +1 -1
- package/dist/frontend/lowering/call-arguments.js +69 -14
- package/dist/frontend/lowering/call-arguments.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.d.ts +19 -1
- package/dist/frontend/lowering/call-signatures.js +254 -47
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/checked-promise-all.d.ts +3 -0
- package/dist/frontend/lowering/checked-promise-all.js +1 -1
- package/dist/frontend/lowering/checked-promise-all.js.map +1 -1
- package/dist/frontend/lowering/cjs-exports-object.d.ts +53 -0
- package/dist/frontend/lowering/cjs-exports-object.js +528 -0
- package/dist/frontend/lowering/cjs-exports-object.js.map +1 -0
- package/dist/frontend/lowering/cjs-inline-require.d.ts +86 -0
- package/dist/frontend/lowering/cjs-inline-require.js +314 -0
- package/dist/frontend/lowering/cjs-inline-require.js.map +1 -0
- package/dist/frontend/lowering/cjs-tsc-interop.d.ts +28 -0
- package/dist/frontend/lowering/cjs-tsc-interop.js +208 -0
- package/dist/frontend/lowering/cjs-tsc-interop.js.map +1 -0
- package/dist/frontend/lowering/class-attributes.d.ts +19 -0
- package/dist/frontend/lowering/class-attributes.js +378 -0
- package/dist/frontend/lowering/class-attributes.js.map +1 -0
- package/dist/frontend/lowering/class-callbacks.d.ts +3 -1
- package/dist/frontend/lowering/class-callbacks.js +21 -10
- package/dist/frontend/lowering/class-callbacks.js.map +1 -1
- package/dist/frontend/lowering/class-construction.js +49 -4
- package/dist/frontend/lowering/class-construction.js.map +1 -1
- package/dist/frontend/lowering/class-descriptors.d.ts +2 -0
- package/dist/frontend/lowering/class-descriptors.js +8 -8
- package/dist/frontend/lowering/class-descriptors.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +64 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +1115 -89
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-instance-constructor.js +1 -1
- package/dist/frontend/lowering/class-instance-constructor.js.map +1 -1
- package/dist/frontend/lowering/class-iterables.d.ts +11 -0
- package/dist/frontend/lowering/class-iterables.js +31 -0
- package/dist/frontend/lowering/class-iterables.js.map +1 -0
- package/dist/frontend/lowering/class-method-mutations.js +73 -35
- package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
- package/dist/frontend/lowering/class-method-values.js +56 -10
- package/dist/frontend/lowering/class-method-values.js.map +1 -1
- package/dist/frontend/lowering/class-protocol-dispatch.js +24 -22
- package/dist/frontend/lowering/class-protocol-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-protocols.js +25 -44
- package/dist/frontend/lowering/class-protocols.js.map +1 -1
- package/dist/frontend/lowering/class-prototypes.d.ts +6 -0
- package/dist/frontend/lowering/class-prototypes.js +80 -18
- package/dist/frontend/lowering/class-prototypes.js.map +1 -1
- package/dist/frontend/lowering/class-runtime-statics.js +1 -1
- package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
- package/dist/frontend/lowering/class-static-data.js +2 -2
- package/dist/frontend/lowering/class-static-data.js.map +1 -1
- package/dist/frontend/lowering/class-to-primitive.d.ts +25 -0
- package/dist/frontend/lowering/class-to-primitive.js +261 -0
- package/dist/frontend/lowering/class-to-primitive.js.map +1 -0
- package/dist/frontend/lowering/class-unions.d.ts +25 -0
- package/dist/frontend/lowering/class-unions.js +102 -1
- package/dist/frontend/lowering/class-unions.js.map +1 -1
- package/dist/frontend/lowering/code-generation.d.ts +14 -0
- package/dist/frontend/lowering/code-generation.js +127 -0
- package/dist/frontend/lowering/code-generation.js.map +1 -0
- package/dist/frontend/lowering/coercions/function-adapters.d.ts +16 -2
- package/dist/frontend/lowering/coercions/function-adapters.js +145 -3
- package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural-plans.js +25 -3
- package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +35 -3
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/coercions/unions.d.ts +15 -0
- package/dist/frontend/lowering/coercions/unions.js +57 -1
- package/dist/frontend/lowering/coercions/unions.js.map +1 -1
- package/dist/frontend/lowering/collection-ingestion.js +2 -2
- package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
- package/dist/frontend/lowering/collection-narrowing.js +2 -4
- package/dist/frontend/lowering/collection-narrowing.js.map +1 -1
- package/dist/frontend/lowering/construction-escapes.js +8 -8
- package/dist/frontend/lowering/construction-escapes.js.map +1 -1
- package/dist/frontend/lowering/construction-escapes.test.js +4 -4
- package/dist/frontend/lowering/construction-escapes.test.js.map +1 -1
- package/dist/frontend/lowering/constructor-returns.d.ts +61 -0
- package/dist/frontend/lowering/constructor-returns.js +477 -0
- package/dist/frontend/lowering/constructor-returns.js.map +1 -0
- package/dist/frontend/lowering/containers/array-callback-call.js +1 -1
- package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.d.ts +9 -0
- package/dist/frontend/lowering/containers/array-callbacks.js +266 -100
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-concat.js +1 -1
- package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.d.ts +0 -1
- package/dist/frontend/lowering/containers/array-construction.js +51 -13
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-from-async.d.ts +6 -5
- package/dist/frontend/lowering/containers/array-from-async.js +159 -14
- package/dist/frontend/lowering/containers/array-from-async.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +89 -77
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/array-pipelines.js +1 -0
- package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.js +161 -101
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.d.ts +9 -1
- package/dist/frontend/lowering/containers/callback-arguments.js +55 -5
- package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-grouping.d.ts +7 -8
- package/dist/frontend/lowering/containers/collection-grouping.js +217 -26
- package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +54 -25
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/dynamic-receivers.js +1 -1
- package/dist/frontend/lowering/containers/dynamic-receivers.js.map +1 -1
- package/dist/frontend/lowering/containers/exec-result-uses.js +2 -2
- package/dist/frontend/lowering/containers/exec-result-uses.js.map +1 -1
- package/dist/frontend/lowering/containers/for-of.d.ts +6 -0
- package/dist/frontend/lowering/containers/for-of.js +19 -19
- package/dist/frontend/lowering/containers/for-of.js.map +1 -1
- package/dist/frontend/lowering/containers/indexed-objects.js +142 -57
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/containers/iterator-helpers.d.ts +53 -4
- package/dist/frontend/lowering/containers/iterator-helpers.js +1581 -462
- package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
- package/dist/frontend/lowering/containers/match-row-uses.d.ts +17 -0
- package/dist/frontend/lowering/containers/match-row-uses.js +264 -0
- package/dist/frontend/lowering/containers/match-row-uses.js.map +1 -0
- package/dist/frontend/lowering/containers/string-and-regexp.d.ts +14 -0
- package/dist/frontend/lowering/containers/string-and-regexp.js +419 -30
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/containers/string-replacement.js +1 -1
- package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
- package/dist/frontend/lowering/cycle-initialization.d.ts +4 -0
- package/dist/frontend/lowering/cycle-initialization.js +39 -0
- package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
- package/dist/frontend/lowering/deferred-module-initializers.js +47 -43
- package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
- package/dist/frontend/lowering/devirtualize.d.ts +1 -1
- package/dist/frontend/lowering/devirtualize.js +27 -7
- package/dist/frontend/lowering/devirtualize.js.map +1 -1
- package/dist/frontend/lowering/divergences.d.ts +0 -5
- package/dist/frontend/lowering/divergences.js +62 -125
- package/dist/frontend/lowering/divergences.js.map +1 -1
- package/dist/frontend/lowering/dyn-streams.d.ts +25 -0
- package/dist/frontend/lowering/dyn-streams.js +257 -0
- package/dist/frontend/lowering/dyn-streams.js.map +1 -0
- package/dist/frontend/lowering/error-methods.js +4 -1
- package/dist/frontend/lowering/error-methods.js.map +1 -1
- package/dist/frontend/lowering/error-name-order.d.ts +19 -0
- package/dist/frontend/lowering/error-name-order.js +93 -0
- package/dist/frontend/lowering/error-name-order.js.map +1 -0
- package/dist/frontend/lowering/expressions/array-literals.d.ts +21 -0
- package/dist/frontend/lowering/expressions/array-literals.js +703 -0
- package/dist/frontend/lowering/expressions/array-literals.js.map +1 -0
- package/dist/frontend/lowering/expressions/binary.d.ts +35 -0
- package/dist/frontend/lowering/expressions/binary.js +2483 -0
- package/dist/frontend/lowering/expressions/binary.js.map +1 -0
- package/dist/frontend/lowering/expressions/element-access.d.ts +31 -0
- package/dist/frontend/lowering/expressions/element-access.js +1797 -0
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -0
- package/dist/frontend/lowering/expressions/evaluation-safety.js +4 -3
- package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
- package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +38 -0
- package/dist/frontend/lowering/expressions/hosted-narrowing.js +160 -0
- package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -0
- package/dist/frontend/lowering/expressions/identifiers.d.ts +4 -0
- package/dist/frontend/lowering/expressions/identifiers.js +830 -0
- package/dist/frontend/lowering/expressions/identifiers.js.map +1 -0
- package/dist/frontend/lowering/expressions/keyed-field-targets.d.ts +40 -0
- package/dist/frontend/lowering/expressions/keyed-field-targets.js +226 -0
- package/dist/frontend/lowering/expressions/keyed-field-targets.js.map +1 -0
- package/dist/frontend/lowering/expressions/narrowing.d.ts +37 -0
- package/dist/frontend/lowering/expressions/narrowing.js +1322 -0
- package/dist/frontend/lowering/expressions/narrowing.js.map +1 -0
- package/dist/frontend/lowering/expressions/native-proxy.js +4 -4
- package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -1
- package/dist/frontend/lowering/expressions/nullish-assignment.js +45 -0
- package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.d.ts +10 -0
- package/dist/frontend/lowering/expressions/object-literals.js +253 -85
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.d.ts +2 -1
- package/dist/frontend/lowering/expressions/optional-chains.js +91 -14
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.d.ts +110 -0
- package/dist/frontend/lowering/expressions/property-access.js +3544 -0
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -0
- package/dist/frontend/lowering/expressions/relational.d.ts +28 -0
- package/dist/frontend/lowering/expressions/relational.js +1679 -0
- package/dist/frontend/lowering/expressions/relational.js.map +1 -0
- package/dist/frontend/lowering/expressions/typeof.d.ts +22 -0
- package/dist/frontend/lowering/expressions/typeof.js +538 -0
- package/dist/frontend/lowering/expressions/typeof.js.map +1 -0
- package/dist/frontend/lowering/expressions/union-fields.js +1 -1
- package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
- package/dist/frontend/lowering/expressions/updates.d.ts +21 -0
- package/dist/frontend/lowering/expressions/updates.js +780 -0
- package/dist/frontend/lowering/expressions/updates.js.map +1 -0
- package/dist/frontend/lowering/function-context.d.ts +10 -0
- package/dist/frontend/lowering/function-context.js +11 -1
- package/dist/frontend/lowering/function-context.js.map +1 -1
- package/dist/frontend/lowering/function-returns.js +52 -28
- package/dist/frontend/lowering/function-returns.js.map +1 -1
- package/dist/frontend/lowering/general-streams.d.ts +25 -0
- package/dist/frontend/lowering/general-streams.js +108 -0
- package/dist/frontend/lowering/general-streams.js.map +1 -0
- package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +7 -0
- package/dist/frontend/lowering/generator-dynamic-dispatch.js +172 -69
- package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.d.ts +39 -0
- package/dist/frontend/lowering/generic-functions.js +393 -75
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/import-meta.js +2 -2
- package/dist/frontend/lowering/import-meta.js.map +1 -1
- package/dist/frontend/lowering/intern-tables.js +10 -9
- package/dist/frontend/lowering/intern-tables.js.map +1 -1
- package/dist/frontend/lowering/iterator-adapters.d.ts +19 -0
- package/dist/frontend/lowering/iterator-adapters.js +331 -3
- package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
- package/dist/frontend/lowering/js-class-fields.d.ts +28 -0
- package/dist/frontend/lowering/js-class-fields.js +170 -0
- package/dist/frontend/lowering/js-class-fields.js.map +1 -0
- package/dist/frontend/lowering/js-dynamic-objects.d.ts +15 -0
- package/dist/frontend/lowering/js-dynamic-objects.js +299 -0
- package/dist/frontend/lowering/js-dynamic-objects.js.map +1 -0
- package/dist/frontend/lowering/js-dynamic-objects.test.d.ts +1 -0
- package/dist/frontend/lowering/js-dynamic-objects.test.js +35 -0
- package/dist/frontend/lowering/js-dynamic-objects.test.js.map +1 -0
- package/dist/frontend/lowering/json-require.d.ts +22 -0
- package/dist/frontend/lowering/json-require.js +131 -0
- package/dist/frontend/lowering/json-require.js.map +1 -0
- package/dist/frontend/lowering/key-order-witness.d.ts +44 -0
- package/dist/frontend/lowering/key-order-witness.js +641 -0
- package/dist/frontend/lowering/key-order-witness.js.map +1 -0
- package/dist/frontend/lowering/key-order-witness.test.d.ts +1 -0
- package/dist/frontend/lowering/key-order-witness.test.js +239 -0
- package/dist/frontend/lowering/key-order-witness.test.js.map +1 -0
- package/dist/frontend/lowering/lifetime-regions.js +7 -7
- package/dist/frontend/lowering/lifetime-regions.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +61 -60
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-async-iteration.d.ts +10 -1
- package/dist/frontend/lowering/lower-async-iteration.js +34 -6
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-builtin-values.d.ts +5 -0
- package/dist/frontend/lowering/lower-builtin-values.js +32 -3
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.js +1239 -442
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +50 -3
- package/dist/frontend/lowering/lower-classes.js +1473 -468
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-comptime.d.ts +4 -2
- package/dist/frontend/lowering/lower-comptime.js +111 -13
- package/dist/frontend/lowering/lower-comptime.js.map +1 -1
- package/dist/frontend/lowering/lower-console.js +13 -11
- package/dist/frontend/lowering/lower-console.js.map +1 -1
- package/dist/frontend/lowering/lower-dgram.d.ts +10 -0
- package/dist/frontend/lowering/lower-dgram.js +179 -8
- package/dist/frontend/lowering/lower-dgram.js.map +1 -1
- package/dist/frontend/lowering/lower-enums.js +113 -14
- package/dist/frontend/lowering/lower-enums.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.d.ts +16 -7
- package/dist/frontend/lowering/lower-event-emitter.js +258 -70
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-event-target.js +2 -2
- package/dist/frontend/lowering/lower-event-target.js.map +1 -1
- package/dist/frontend/lowering/lower-expando.js +17 -13
- package/dist/frontend/lowering/lower-expando.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +188 -186
- package/dist/frontend/lowering/lower-exprs.js +1481 -12489
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +68 -22
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.d.ts +6 -0
- package/dist/frontend/lowering/lower-generators.js +29 -16
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-global-value.js +5 -1
- package/dist/frontend/lowering/lower-global-value.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +331 -96
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-mixins.js +23 -20
- package/dist/frontend/lowering/lower-mixins.js.map +1 -1
- package/dist/frontend/lowering/lower-mock.d.ts +8 -1
- package/dist/frontend/lowering/lower-mock.js +185 -18
- package/dist/frontend/lowering/lower-mock.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +267 -61
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.d.ts +6 -0
- package/dist/frontend/lowering/lower-namespaces.js +45 -33
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-node-module.d.ts +16 -0
- package/dist/frontend/lowering/lower-node-module.js +147 -14
- package/dist/frontend/lowering/lower-node-module.js.map +1 -1
- package/dist/frontend/lowering/lower-server.d.ts +6 -6
- package/dist/frontend/lowering/lower-server.js +488 -100
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.d.ts +4 -0
- package/dist/frontend/lowering/lower-stdlib.js +151 -109
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +28 -2
- package/dist/frontend/lowering/lower-stmts.js +1541 -391
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.d.ts +3 -0
- package/dist/frontend/lowering/lower-stream.js +398 -56
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-test.d.ts +3 -0
- package/dist/frontend/lowering/lower-test.js +437 -62
- package/dist/frontend/lowering/lower-test.js.map +1 -1
- package/dist/frontend/lowering/lower-timers.js +80 -32
- package/dist/frontend/lowering/lower-timers.js.map +1 -1
- package/dist/frontend/lowering/lower-url.js +1 -1
- package/dist/frontend/lowering/lower-url.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +399 -26
- package/dist/frontend/lowering/lowerer.js +1910 -305
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/lowerer.test.js +10 -4
- package/dist/frontend/lowering/lowerer.test.js.map +1 -1
- package/dist/frontend/lowering/maybe-promise.d.ts +46 -0
- package/dist/frontend/lowering/maybe-promise.js +249 -0
- package/dist/frontend/lowering/maybe-promise.js.map +1 -0
- package/dist/frontend/lowering/module-member-this.d.ts +3 -0
- package/dist/frontend/lowering/module-member-this.js +262 -0
- package/dist/frontend/lowering/module-member-this.js.map +1 -0
- package/dist/frontend/lowering/module-namespace-elements.js +1 -1
- package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
- package/dist/frontend/lowering/nan-coded-reads.d.ts +3 -0
- package/dist/frontend/lowering/nan-coded-reads.js +45 -32
- package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
- package/dist/frontend/lowering/narrowing-stability.d.ts +18 -3
- package/dist/frontend/lowering/narrowing-stability.js +104 -32
- package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
- package/dist/frontend/lowering/native-ffi.js +11 -11
- package/dist/frontend/lowering/native-ffi.js.map +1 -1
- package/dist/frontend/lowering/object-factory-new.js +6 -8
- package/dist/frontend/lowering/object-factory-new.js.map +1 -1
- package/dist/frontend/lowering/private-brands.d.ts +46 -0
- package/dist/frontend/lowering/private-brands.js +265 -0
- package/dist/frontend/lowering/private-brands.js.map +1 -0
- package/dist/frontend/lowering/promise-executor-adapter.d.ts +11 -0
- package/dist/frontend/lowering/promise-executor-adapter.js +87 -0
- package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -0
- package/dist/frontend/lowering/require-initialization.d.ts +32 -0
- package/dist/frontend/lowering/require-initialization.js +246 -0
- package/dist/frontend/lowering/require-initialization.js.map +1 -0
- package/dist/frontend/lowering/runtime-optional-bounds.js +7 -7
- package/dist/frontend/lowering/runtime-optional-bounds.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-elements.js +12 -12
- package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-guards.js +10 -10
- package/dist/frontend/lowering/runtime-optional-guards.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-guards.test.js +1 -1
- package/dist/frontend/lowering/runtime-optional-guards.test.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-ownership.js +10 -9
- package/dist/frontend/lowering/runtime-optional-ownership.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-provenance.js +2 -2
- package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-records.d.ts +35 -0
- package/dist/frontend/lowering/runtime-optional-records.js +205 -32
- package/dist/frontend/lowering/runtime-optional-records.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-records.test.js +19 -1
- package/dist/frontend/lowering/runtime-optional-records.test.js.map +1 -1
- package/dist/frontend/lowering/sanitize-class-types.test.js +2 -2
- package/dist/frontend/lowering/split-consumers.js +4 -4
- package/dist/frontend/lowering/split-consumers.js.map +1 -1
- package/dist/frontend/lowering/static-function-names.d.ts +28 -0
- package/dist/frontend/lowering/static-function-names.js +212 -0
- package/dist/frontend/lowering/static-function-names.js.map +1 -0
- package/dist/frontend/lowering/static-this.js +6 -6
- package/dist/frontend/lowering/static-this.js.map +1 -1
- package/dist/frontend/lowering/strict-mode.d.ts +5 -0
- package/dist/frontend/lowering/strict-mode.js +31 -0
- package/dist/frontend/lowering/strict-mode.js.map +1 -0
- package/dist/frontend/lowering/string-index-bounds.js +10 -10
- package/dist/frontend/lowering/string-index-bounds.js.map +1 -1
- package/dist/frontend/lowering/string-index.d.ts +12 -0
- package/dist/frontend/lowering/string-index.js +72 -1
- package/dist/frontend/lowering/string-index.js.map +1 -1
- package/dist/frontend/lowering/surfaces.d.ts +12 -3
- package/dist/frontend/lowering/surfaces.js +252 -41
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/symbol-fields.d.ts +7 -0
- package/dist/frontend/lowering/symbol-fields.js +204 -36
- package/dist/frontend/lowering/symbol-fields.js.map +1 -1
- package/dist/frontend/lowering/symbol-methods.d.ts +2 -1
- package/dist/frontend/lowering/symbol-methods.js +24 -6
- package/dist/frontend/lowering/symbol-methods.js.map +1 -1
- package/dist/frontend/lowering/thread-slots.d.ts +13 -0
- package/dist/frontend/lowering/thread-slots.js +208 -0
- package/dist/frontend/lowering/thread-slots.js.map +1 -0
- package/dist/frontend/lowering/typed-arguments.d.ts +74 -0
- package/dist/frontend/lowering/typed-arguments.js +472 -0
- package/dist/frontend/lowering/typed-arguments.js.map +1 -0
- package/dist/frontend/lowering/union-retag.d.ts +8 -0
- package/dist/frontend/lowering/union-retag.js +27 -0
- package/dist/frontend/lowering/union-retag.js.map +1 -1
- package/dist/frontend/lowering/union-retag.test.js +24 -1
- package/dist/frontend/lowering/union-retag.test.js.map +1 -1
- package/dist/frontend/lowering/var-hoisting.js +6 -6
- package/dist/frontend/lowering/var-hoisting.js.map +1 -1
- package/dist/frontend/lowering/width-lift.d.ts +4 -0
- package/dist/frontend/mock-shapes.js +13 -6
- package/dist/frontend/mock-shapes.js.map +1 -1
- package/dist/frontend/module-source-candidates.js +1 -1
- package/dist/frontend/module-source-candidates.js.map +1 -1
- package/dist/frontend/module-source-candidates.test.js +2 -1
- package/dist/frontend/module-source-candidates.test.js.map +1 -1
- package/dist/frontend/module-syntax.js +8 -8
- package/dist/frontend/module-syntax.js.map +1 -1
- package/dist/frontend/npm-static-bundled-chunks.d.ts +51 -0
- package/dist/frontend/npm-static-bundled-chunks.js +810 -0
- package/dist/frontend/npm-static-bundled-chunks.js.map +1 -0
- package/dist/frontend/npm-static-bundled-chunks.test.d.ts +1 -0
- package/dist/frontend/npm-static-bundled-chunks.test.js +287 -0
- package/dist/frontend/npm-static-bundled-chunks.test.js.map +1 -0
- package/dist/frontend/npm-static-bundled-cjs.js +24 -23
- package/dist/frontend/npm-static-bundled-cjs.js.map +1 -1
- package/dist/frontend/npm-static-bundled-esm.d.ts +9 -0
- package/dist/frontend/npm-static-bundled-esm.js +768 -0
- package/dist/frontend/npm-static-bundled-esm.js.map +1 -0
- package/dist/frontend/npm-static-bundled-esm.test.d.ts +1 -0
- package/dist/frontend/npm-static-bundled-esm.test.js +207 -0
- package/dist/frontend/npm-static-bundled-esm.test.js.map +1 -0
- package/dist/frontend/npm-static-cjs-exports-alias.d.ts +2 -0
- package/dist/frontend/npm-static-cjs-exports-alias.js +186 -0
- package/dist/frontend/npm-static-cjs-exports-alias.js.map +1 -0
- package/dist/frontend/npm-static-cjs-exports-alias.test.d.ts +1 -0
- package/dist/frontend/npm-static-cjs-exports-alias.test.js +73 -0
- package/dist/frontend/npm-static-cjs-exports-alias.test.js.map +1 -0
- package/dist/frontend/npm-static-cjs-exports-var.d.ts +2 -0
- package/dist/frontend/npm-static-cjs-exports-var.js +236 -0
- package/dist/frontend/npm-static-cjs-exports-var.js.map +1 -0
- package/dist/frontend/npm-static-declaration-syntax.js +102 -101
- package/dist/frontend/npm-static-declaration-syntax.js.map +1 -1
- package/dist/frontend/npm-static-prune.js +36 -24
- package/dist/frontend/npm-static-prune.js.map +1 -1
- package/dist/frontend/npm-static-rewrite-host.d.ts +4 -1
- package/dist/frontend/npm-static-rewrite-host.js +14 -3
- package/dist/frontend/npm-static-rewrite-host.js.map +1 -1
- package/dist/frontend/npm-static-rewrite-syntax.d.ts +19 -0
- package/dist/frontend/npm-static-rewrite-syntax.js +274 -101
- package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
- package/dist/frontend/npm-static-subtyping.js +7 -9
- package/dist/frontend/npm-static-subtyping.js.map +1 -1
- package/dist/frontend/npm-static.d.ts +17 -1
- package/dist/frontend/npm-static.js +167 -16
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/npm-static.test.js +22 -1
- package/dist/frontend/npm-static.test.js.map +1 -1
- package/dist/frontend/pipeline.js +164 -26
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/pipeline.test.js +22 -1
- package/dist/frontend/pipeline.test.js.map +1 -1
- package/dist/frontend/program-analysis.d.ts +6 -1
- package/dist/frontend/program-analysis.js +7 -0
- package/dist/frontend/program-analysis.js.map +1 -1
- package/dist/frontend/program.d.ts +92 -2
- package/dist/frontend/program.js +1557 -255
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +76 -6
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/resolve.js +36 -2
- package/dist/frontend/resolve.js.map +1 -1
- package/dist/frontend/resolve.test.js +49 -0
- package/dist/frontend/resolve.test.js.map +1 -1
- package/dist/frontend/services.d.ts +20 -1
- package/dist/frontend/services.js +40 -3
- package/dist/frontend/services.js.map +1 -1
- package/dist/frontend/services.test.js +2 -1
- package/dist/frontend/services.test.js.map +1 -1
- package/dist/frontend/threads-import.js +1 -1
- package/dist/frontend/threads-import.js.map +1 -1
- package/dist/frontend/tier-analysis.d.ts +71 -0
- package/dist/frontend/tier-analysis.js +522 -0
- package/dist/frontend/tier-analysis.js.map +1 -0
- package/dist/frontend/ts7/api-conformance.d.ts +234 -0
- package/dist/frontend/ts7/api-conformance.js +7 -0
- package/dist/frontend/ts7/api-conformance.js.map +1 -0
- package/dist/frontend/ts7/ast-guards.generated.js +2 -1
- package/dist/frontend/ts7/ast-guards.generated.js.map +1 -1
- package/dist/frontend/ts7/ast-node.d.ts +47 -25
- package/dist/frontend/ts7/ast-node.js +64 -18
- package/dist/frontend/ts7/ast-node.js.map +1 -1
- package/dist/frontend/ts7/ast-node.test.js +36 -12
- package/dist/frontend/ts7/ast-node.test.js.map +1 -1
- package/dist/frontend/ts7/ast-types.d.ts +10 -3
- package/dist/frontend/ts7/ast-types.generated.d.ts +39 -39
- package/dist/frontend/ts7/ast.d.ts +1 -0
- package/dist/frontend/ts7/ast.js +3 -2
- package/dist/frontend/ts7/ast.js.map +1 -1
- package/dist/frontend/ts7/checker-backend.d.ts +23 -0
- package/dist/frontend/ts7/checker-backend.js +88 -0
- package/dist/frontend/ts7/checker-backend.js.map +1 -0
- package/dist/frontend/ts7/checker-backend.test.d.ts +1 -0
- package/dist/frontend/ts7/checker-backend.test.js +63 -0
- package/dist/frontend/ts7/checker-backend.test.js.map +1 -0
- package/dist/frontend/ts7/checker-cache.d.ts +0 -3
- package/dist/frontend/ts7/checker-cache.js +0 -6
- package/dist/frontend/ts7/checker-cache.js.map +1 -1
- package/dist/frontend/ts7/checker.d.ts +18 -11
- package/dist/frontend/ts7/checker.js +42 -55
- package/dist/frontend/ts7/checker.js.map +1 -1
- package/dist/frontend/ts7/checker.test.js +10 -7
- package/dist/frontend/ts7/checker.test.js.map +1 -1
- package/dist/frontend/ts7/diagnostic.d.ts +19 -0
- package/dist/frontend/ts7/diagnostic.js +22 -0
- package/dist/frontend/ts7/diagnostic.js.map +1 -0
- package/dist/frontend/ts7/node-functions.d.ts +8 -0
- package/dist/frontend/ts7/node-functions.js +18 -0
- package/dist/frontend/ts7/node-functions.js.map +1 -0
- package/dist/frontend/ts7/program-host.d.ts +5 -1
- package/dist/frontend/ts7/program-host.js +12 -0
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/rpc-api.d.ts +5 -1
- package/dist/frontend/ts7/rpc-api.js +8 -1
- package/dist/frontend/ts7/rpc-api.js.map +1 -1
- package/dist/frontend/ts7/semantic-checker.d.ts +13 -6
- package/dist/frontend/ts7/semantic-checker.js +26 -8
- package/dist/frontend/ts7/semantic-checker.js.map +1 -1
- package/dist/frontend/ts7/semantic-checker.test.js +12 -9
- package/dist/frontend/ts7/semantic-checker.test.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.d.ts +54 -24
- package/dist/frontend/ts7/semantic-model.js +88 -16
- package/dist/frontend/ts7/semantic-model.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.test.js +4 -4
- package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
- package/dist/frontend/ts7/semantic-types.d.ts +7 -3
- package/dist/frontend/ts7/semantic-types.js +1 -1
- package/dist/frontend/ts7/semantic-types.js.map +1 -1
- package/dist/frontend/ts7/session.d.ts +11 -11
- package/dist/frontend/ts7/session.js +8 -5
- package/dist/frontend/ts7/session.js.map +1 -1
- package/dist/frontend/ts7/session.test.js +9 -5
- package/dist/frontend/ts7/session.test.js.map +1 -1
- package/dist/frontend/ts7/source-parser.d.ts +6 -2
- package/dist/frontend/ts7/source-parser.js +24 -3
- package/dist/frontend/ts7/source-parser.js.map +1 -1
- package/dist/frontend/ts7/source-parser.test.js +38 -17
- package/dist/frontend/ts7/source-parser.test.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +122 -2
- package/dist/frontend/type-mapper.js +2545 -719
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/frontend/type-only-imports.d.ts +28 -0
- package/dist/frontend/type-only-imports.js +122 -0
- package/dist/frontend/type-only-imports.js.map +1 -0
- package/dist/frontend/worker-target.js +8 -8
- package/dist/frontend/worker-target.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +29 -2
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.js +4 -2
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/api.d.ts +1 -1
- package/dist/ir/api.js +1 -1
- package/dist/ir/api.js.map +1 -1
- package/dist/ir/array-length-stability.d.ts +30 -0
- package/dist/ir/array-length-stability.js +236 -0
- package/dist/ir/array-length-stability.js.map +1 -0
- package/dist/ir/array-length-stability.test.d.ts +1 -0
- package/dist/ir/array-length-stability.test.js +113 -0
- package/dist/ir/array-length-stability.test.js.map +1 -0
- package/dist/ir/build.d.ts +2 -2
- package/dist/ir/build.js +1 -1
- package/dist/ir/build.js.map +1 -1
- package/dist/ir/builtin-effects.js +103 -0
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +1 -1
- package/dist/ir/builtin-signatures.js +494 -25
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/byte-numbers.js +3 -0
- package/dist/ir/byte-numbers.js.map +1 -1
- package/dist/ir/callback-specialization.d.ts +37 -0
- package/dist/ir/callback-specialization.js +459 -0
- package/dist/ir/callback-specialization.js.map +1 -0
- package/dist/ir/callback-specialization.test.d.ts +1 -0
- package/dist/ir/callback-specialization.test.js +208 -0
- package/dist/ir/callback-specialization.test.js.map +1 -0
- package/dist/ir/capture-values.d.ts +0 -1
- package/dist/ir/capture-values.js +51 -40
- package/dist/ir/capture-values.js.map +1 -1
- package/dist/ir/constant-globals.test.js +1 -1
- package/dist/ir/constant-tables.test.js +1 -1
- package/dist/ir/field-values.test.js +1 -1
- package/dist/ir/final-fields.test.js +1 -1
- package/dist/ir/function-references.test.js +9 -1
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/init-only-globals.test.js +1 -1
- package/dist/ir/initializer-bindings.test.js +1 -1
- package/dist/ir/int32-slots.d.ts +14 -0
- package/dist/ir/int32-slots.js +97 -14
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/int32-slots.test.js +1 -1
- package/dist/ir/integer-loop-facts.d.ts +2 -0
- package/dist/ir/integer-loop-facts.js +24 -3
- package/dist/ir/integer-loop-facts.js.map +1 -1
- package/dist/ir/integer-loops.d.ts +1 -1
- package/dist/ir/integer-loops.js +39 -9
- package/dist/ir/integer-loops.js.map +1 -1
- package/dist/ir/integer-loops.test.js +104 -0
- package/dist/ir/integer-loops.test.js.map +1 -1
- package/dist/ir/integer-ranges.d.ts +3 -0
- package/dist/ir/integer-ranges.js +3 -1
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +82 -1
- package/dist/ir/integer-ranges.test.js.map +1 -1
- package/dist/ir/intrinsic-signatures.js +6 -0
- package/dist/ir/intrinsic-signatures.js.map +1 -1
- package/dist/ir/ir.d.ts +221 -58
- package/dist/ir/ir.js +119 -12
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/ir.test.js +10 -0
- package/dist/ir/ir.test.js.map +1 -1
- package/dist/ir/jsval.d.ts +8 -0
- package/dist/ir/jsval.js +365 -0
- package/dist/ir/jsval.js.map +1 -0
- package/dist/ir/jsval.test.d.ts +1 -0
- package/dist/ir/jsval.test.js +239 -0
- package/dist/ir/jsval.test.js.map +1 -0
- package/dist/ir/runtime-features.d.ts +148 -33
- package/dist/ir/runtime-features.js +629 -386
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/scalar-records.test.js +1 -1
- package/dist/ir/self-captures.d.ts +33 -0
- package/dist/ir/self-captures.js +245 -0
- package/dist/ir/self-captures.js.map +1 -0
- package/dist/ir/self-captures.test.d.ts +1 -0
- package/dist/ir/self-captures.test.js +135 -0
- package/dist/ir/self-captures.test.js.map +1 -0
- package/dist/ir/serialize.d.ts +1 -1
- package/dist/ir/serialize.js +7 -4
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/tiers.d.ts +26 -0
- package/dist/ir/tiers.js +101 -0
- package/dist/ir/tiers.js.map +1 -0
- package/dist/ir/tiers.test.d.ts +1 -0
- package/dist/ir/tiers.test.js +140 -0
- package/dist/ir/tiers.test.js.map +1 -0
- package/dist/ir/traverse.js +103 -94
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/traverse.test.js +33 -30
- package/dist/ir/traverse.test.js.map +1 -1
- package/dist/ir/unshare.js +65 -3
- package/dist/ir/unshare.js.map +1 -1
- package/dist/ir/unshare.test.js +1 -1
- package/dist/ir/validate.js +175 -68
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +26 -9
- 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/ir-policy.js +13 -0
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/library/library-cache.d.ts +1 -0
- package/dist/library/library-cache.js.map +1 -1
- package/dist/library/library-cache.test.js +5 -5
- package/dist/library/library-profile.d.ts +4 -4
- package/dist/library/library-profile.js +35 -7
- package/dist/library/library-profile.js.map +1 -1
- package/dist/library/prepare.js +13 -1
- package/dist/library/prepare.js.map +1 -1
- package/dist/native/cli.js +5 -0
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.js +2 -2
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/compiler.test.js +2 -2
- package/dist/native/prepare.js +7 -0
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/sanitizer.test.js +12 -0
- package/dist/native/sanitizer.test.js.map +1 -1
- package/dist/native/toolchain.d.ts +2 -0
- package/dist/native/toolchain.js +10 -1
- package/dist/native/toolchain.js.map +1 -1
- package/dist/native/toolchain.test.js +39 -1
- package/dist/native/toolchain.test.js.map +1 -1
- package/dist/startup-cache.d.ts +1 -0
- package/dist/startup-cache.js +1 -0
- package/dist/startup-cache.js.map +1 -1
- package/dist/wasm/base64.d.ts +5 -0
- package/dist/wasm/base64.js +62 -0
- package/dist/wasm/base64.js.map +1 -0
- package/dist/wasm/binary.d.ts +36 -0
- package/dist/wasm/binary.js +1976 -0
- package/dist/wasm/binary.js.map +1 -0
- package/dist/wasm/binary.test.d.ts +1 -0
- package/dist/wasm/binary.test.js +190 -0
- package/dist/wasm/binary.test.js.map +1 -0
- package/dist/wasm/discover.d.ts +38 -0
- package/dist/wasm/discover.js +377 -0
- package/dist/wasm/discover.js.map +1 -0
- package/dist/wasm/discover.test.d.ts +1 -0
- package/dist/wasm/discover.test.js +24 -0
- package/dist/wasm/discover.test.js.map +1 -0
- package/dist/wasm/module.d.ts +151 -0
- package/dist/wasm/module.js +575 -0
- package/dist/wasm/module.js.map +1 -0
- package/dist/wasm/translate.d.ts +48 -0
- package/dist/wasm/translate.js +2129 -0
- package/dist/wasm/translate.js.map +1 -0
- package/dist/wasm/translate.test.d.ts +1 -0
- package/dist/wasm/translate.test.js +207 -0
- package/dist/wasm/translate.test.js.map +1 -0
- package/package.json +21 -20
- package/surface-manifest.json +303 -19
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { dateJsonType, isDateJsonSource } from "../builtins/dates.js";
|
|
1
2
|
import { dynUndefinedExpr, numLit, strLit, varRef } from "../../../ir/build.js";
|
|
2
3
|
import { pathModuleValue } from "../lower-builtin-values.js";
|
|
3
4
|
import { InternalCompilerError } from "../../../errors.js";
|
|
@@ -13,7 +14,7 @@ import { isSafeToRepeat } from "./evaluation-safety.js";
|
|
|
13
14
|
import { tryLowerExpression } from "./try-lower-expression.js";
|
|
14
15
|
import { fenceSymbolFieldCopy } from "../symbol-fields.js";
|
|
15
16
|
import { planUnionRetag } from "../union-retag.js";
|
|
16
|
-
import { runtimeOptionalStorageOperand } from "../lower-exprs.js";
|
|
17
|
+
import { jsHoldsDynObject, runtimeOptionalStorageOperand } from "../lower-exprs.js";
|
|
17
18
|
/** `{ a: 1, b: "x" }` → recordLit. The record type comes from the
|
|
18
19
|
* contextual type when tsc has one (annotated declarations, arguments,
|
|
19
20
|
* nested literals) and from the literal's own type otherwise — both intern
|
|
@@ -51,7 +52,7 @@ export function foldedStringKeyOf(lowerer, expr) {
|
|
|
51
52
|
// fallback (a template the checker DID type as one literal).
|
|
52
53
|
let out = expr.head.text;
|
|
53
54
|
let folded = true;
|
|
54
|
-
for (const span of expr.templateSpans) {
|
|
55
|
+
for (const span of expr.templateSpans.nodes) {
|
|
55
56
|
const part = foldedStringKeyOf(lowerer, span.expression);
|
|
56
57
|
if (part === null) {
|
|
57
58
|
folded = false;
|
|
@@ -146,7 +147,7 @@ function pureKeyExpr(lowerer, expr) {
|
|
|
146
147
|
pureKeyExpr(lowerer, expr.whenFalse));
|
|
147
148
|
}
|
|
148
149
|
if (ts.isTemplateExpression(expr))
|
|
149
|
-
return expr.templateSpans.every((s) => pureKeyExpr(lowerer, s.expression));
|
|
150
|
+
return expr.templateSpans.nodes.every((s) => pureKeyExpr(lowerer, s.expression));
|
|
150
151
|
return false;
|
|
151
152
|
}
|
|
152
153
|
/** A property's field name: identifier/string-literal keys directly,
|
|
@@ -221,7 +222,7 @@ export function lowerDynObjectLiteral(lowerer, expr, boxValue) {
|
|
|
221
222
|
: { kind: "libCall", fn: "dyn.assign", args: [acc, chunk], type: DYN, loc };
|
|
222
223
|
fields = [];
|
|
223
224
|
};
|
|
224
|
-
for (const prop of expr.properties) {
|
|
225
|
+
for (const prop of expr.properties.nodes) {
|
|
225
226
|
if (ts.isPropertyAssignment(prop) &&
|
|
226
227
|
!ts.isComputedPropertyName(prop.name) &&
|
|
227
228
|
prop.name.text === "__proto__") {
|
|
@@ -243,7 +244,7 @@ export function lowerDynObjectLiteral(lowerer, expr, boxValue) {
|
|
|
243
244
|
const builtin = lowerer.builtinNamespaceModuleOf(prop.expression);
|
|
244
245
|
const raw = builtin === "path" || builtin === "path/posix" || builtin === "path/win32"
|
|
245
246
|
? pathModuleValue(lowerer, builtin === "path" ? "path/posix" : builtin, locOf(prop))
|
|
246
|
-
: isJsSourceFile(
|
|
247
|
+
: isJsSourceFile(ts.getSourceFileOfNode(expr))
|
|
247
248
|
? lowerer.lowerExprExpecting(prop.expression, DYN)
|
|
248
249
|
: lowerer.lowerExpr(prop.expression);
|
|
249
250
|
fenceSymbolFieldCopy(lowerer, prop.expression, raw.type);
|
|
@@ -375,7 +376,7 @@ export function lowerDynObjectLiteral(lowerer, expr, boxValue) {
|
|
|
375
376
|
// A JS object's array-valued properties retain the same source array.
|
|
376
377
|
// Repeated references must compare equal and mutations remain shared.
|
|
377
378
|
if (!boxValue &&
|
|
378
|
-
isJsSourceFile(
|
|
379
|
+
isJsSourceFile(ts.getSourceFileOfNode(prop)) &&
|
|
379
380
|
v.kind === "dynFrom" &&
|
|
380
381
|
v.value.type.kind === "array") {
|
|
381
382
|
v = { ...v, liveRef: true };
|
|
@@ -442,7 +443,7 @@ function laterSpreadType(lowerer, expr) {
|
|
|
442
443
|
* the fallback does not apply (not a JS file, not a lambda, no func slot)
|
|
443
444
|
* — the caller lowers normally. ICEs (SC9001) never convert. */
|
|
444
445
|
function fenceClosureProbe(lowerer, node, slotType, attempt) {
|
|
445
|
-
if (!isJsSourceFile(
|
|
446
|
+
if (!isJsSourceFile(ts.getSourceFileOfNode(node)))
|
|
446
447
|
return null;
|
|
447
448
|
let inner = node;
|
|
448
449
|
while (ts.isParenthesizedExpression(inner))
|
|
@@ -458,7 +459,7 @@ function fenceClosureProbe(lowerer, node, slotType, attempt) {
|
|
|
458
459
|
// admits.
|
|
459
460
|
const fieldType = slotType !== undefined && slotType.kind === "func"
|
|
460
461
|
? slotType
|
|
461
|
-
: { kind: "func", params: inner.parameters.map(() => DYN), ret: DYN };
|
|
462
|
+
: { kind: "func", params: inner.parameters.nodes.map(() => DYN), ret: DYN };
|
|
462
463
|
if (slotType !== undefined && slotType.kind !== "func")
|
|
463
464
|
return null;
|
|
464
465
|
const diagsBefore = lowerer.diags.length;
|
|
@@ -508,7 +509,7 @@ function literalUnionArmOf(lowerer, expr, tsType, recordArms) {
|
|
|
508
509
|
return null;
|
|
509
510
|
const props = [];
|
|
510
511
|
let hasSpread = false;
|
|
511
|
-
for (const p of expr.properties) {
|
|
512
|
+
for (const p of expr.properties.nodes) {
|
|
512
513
|
if (ts.isPropertyAssignment(p) && !ts.isComputedPropertyName(p.name)) {
|
|
513
514
|
props.push({ name: propNameText(lowerer, p.name), type: lowerer.typeOf(p.initializer) });
|
|
514
515
|
}
|
|
@@ -529,7 +530,10 @@ function literalUnionArmOf(lowerer, expr, tsType, recordArms) {
|
|
|
529
530
|
return null;
|
|
530
531
|
props.length = 0;
|
|
531
532
|
for (const property of lowerer.checker.getPropertiesOfType(own)) {
|
|
532
|
-
props.push({
|
|
533
|
+
props.push({
|
|
534
|
+
name: ts.symbolName(property),
|
|
535
|
+
type: lowerer.checker.getTypeOfSymbol(property),
|
|
536
|
+
});
|
|
533
537
|
}
|
|
534
538
|
}
|
|
535
539
|
/** Cheap literal discriminants avoid checker traffic for unrelated arms.
|
|
@@ -596,6 +600,64 @@ function literalUnionArmOf(lowerer, expr, tsType, recordArms) {
|
|
|
596
600
|
/** Object spread treats nullish sources as empty. Preserve evaluation once,
|
|
597
601
|
* then turn `Record<K, V> | undefined` into either that record or a fresh
|
|
598
602
|
* empty record of the same represented shape. */
|
|
603
|
+
/** `{ ...unknownValue }` into a pure index-signature record (headers
|
|
604
|
+
* forwarded from an untyped parameter): Node copies the source's own
|
|
605
|
+
* enumerable keys in order, and spreads nothing for null, undefined,
|
|
606
|
+
* numbers and booleans. An object source converts through the checked
|
|
607
|
+
* extraction into the target's own shape, which keeps its keys and order
|
|
608
|
+
* and checks each value against the slot type (a value outside it throws
|
|
609
|
+
* the catchable TypeError of every unknown-to-typed conversion). A string
|
|
610
|
+
* source takes the same extraction, which rejects it, rather than
|
|
611
|
+
* silently dropping the characters Node would spread. Null for other
|
|
612
|
+
* sources and targets. */
|
|
613
|
+
function dynIndexSpreadSource(lowerer, source, target, loc) {
|
|
614
|
+
if (source.type.kind !== "dyn" || target.kind !== "record")
|
|
615
|
+
return null;
|
|
616
|
+
const shape = lowerer.shapes.get(target.shapeId);
|
|
617
|
+
if (!shape?.indexValue || shape.fields.length > 0 || shape.tuple)
|
|
618
|
+
return null;
|
|
619
|
+
if (!canDynCheckTo(target, (id) => lowerer.shapes.get(id), (id) => lowerer.unions.get(id)))
|
|
620
|
+
return null;
|
|
621
|
+
const local = lowerer.declareHiddenLocal("%dynSpread", DYN);
|
|
622
|
+
const ref = varRef(local.id, DYN, loc);
|
|
623
|
+
const test = (kind) => ({
|
|
624
|
+
kind: "dynTest",
|
|
625
|
+
test: kind,
|
|
626
|
+
value: ref,
|
|
627
|
+
type: BOOL,
|
|
628
|
+
loc,
|
|
629
|
+
});
|
|
630
|
+
const extract = { kind: "dynCheck", value: ref, type: target, loc };
|
|
631
|
+
const empty = { kind: "recordLit", fields: [], type: target, loc };
|
|
632
|
+
return {
|
|
633
|
+
kind: "seqExpr",
|
|
634
|
+
stmts: [{ kind: "varDecl", localId: local.id, init: source, loc }],
|
|
635
|
+
result: {
|
|
636
|
+
kind: "ternary",
|
|
637
|
+
cond: test("nullish"),
|
|
638
|
+
then: empty,
|
|
639
|
+
else_: {
|
|
640
|
+
kind: "ternary",
|
|
641
|
+
cond: {
|
|
642
|
+
kind: "logical",
|
|
643
|
+
op: "||",
|
|
644
|
+
left: test("object"),
|
|
645
|
+
right: test("string"),
|
|
646
|
+
type: BOOL,
|
|
647
|
+
loc,
|
|
648
|
+
},
|
|
649
|
+
then: extract,
|
|
650
|
+
else_: empty,
|
|
651
|
+
type: target,
|
|
652
|
+
loc,
|
|
653
|
+
},
|
|
654
|
+
type: target,
|
|
655
|
+
loc,
|
|
656
|
+
},
|
|
657
|
+
type: target,
|
|
658
|
+
loc,
|
|
659
|
+
};
|
|
660
|
+
}
|
|
599
661
|
function lowerOptionalIndexSpreadSource(lowerer, source, loc) {
|
|
600
662
|
if (source.type.kind !== "union")
|
|
601
663
|
return null;
|
|
@@ -647,16 +709,16 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
647
709
|
// Unannotated JavaScript accumulator fields have no element contract.
|
|
648
710
|
// Preserve their checked arrays instead of assigning never[] a numeric ABI.
|
|
649
711
|
if (!expected &&
|
|
650
|
-
isJsSourceFile(
|
|
651
|
-
expr.properties.some((prop) => ts.isPropertyAssignment(prop) &&
|
|
712
|
+
isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
|
|
713
|
+
expr.properties.nodes.some((prop) => ts.isPropertyAssignment(prop) &&
|
|
652
714
|
((ts.isArrayLiteralExpression(prop.initializer) &&
|
|
653
|
-
prop.initializer.elements.length === 0) ||
|
|
715
|
+
prop.initializer.elements.nodes.length === 0) ||
|
|
654
716
|
neverTaintedJsType(lowerer, prop.initializer, lowerer.typeOf(prop.initializer))))) {
|
|
655
717
|
return lowerDynObjectLiteral(lowerer, expr);
|
|
656
718
|
}
|
|
657
719
|
if (!expected &&
|
|
658
|
-
isJsSourceFile(
|
|
659
|
-
expr.properties.some((prop) => ts.isPropertyAssignment(prop) &&
|
|
720
|
+
isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
|
|
721
|
+
expr.properties.nodes.some((prop) => ts.isPropertyAssignment(prop) &&
|
|
660
722
|
lowerer.mapTypeOf(lowerer.typeOf(prop.initializer))?.kind === "array" &&
|
|
661
723
|
tryLowerExpression(lowerer, prop.initializer)?.type.kind === "dyn")) {
|
|
662
724
|
return lowerDynObjectLiteral(lowerer, expr);
|
|
@@ -665,8 +727,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
665
727
|
// documentation names a number. Inferred literal fields must preserve
|
|
666
728
|
// the represented binding rather than checking it back into that type.
|
|
667
729
|
if (!expected &&
|
|
668
|
-
isJsSourceFile(
|
|
669
|
-
expr.properties.some((prop) => {
|
|
730
|
+
isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
|
|
731
|
+
expr.properties.nodes.some((prop) => {
|
|
670
732
|
let value = ts.isPropertyAssignment(prop)
|
|
671
733
|
? prop.initializer
|
|
672
734
|
: ts.isShorthandPropertyAssignment(prop)
|
|
@@ -674,6 +736,10 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
674
736
|
: null;
|
|
675
737
|
while (value && ts.isParenthesizedExpression(value))
|
|
676
738
|
value = value.expression;
|
|
739
|
+
// A nested literal holding such a binding: building it as a static
|
|
740
|
+
// record would copy the binding's object.
|
|
741
|
+
if (value && (ts.isArrayLiteralExpression(value) || ts.isObjectLiteralExpression(value)))
|
|
742
|
+
return jsHoldsDynObject(lowerer, value);
|
|
677
743
|
if (!value || !ts.isIdentifier(value))
|
|
678
744
|
return false;
|
|
679
745
|
const stored = lowerer.peekLocal(value)?.type ?? lowerer.globalOf(value)?.type;
|
|
@@ -687,9 +753,9 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
687
753
|
}
|
|
688
754
|
// JavaScript object methods/accessors carry a live receiver. Keep the
|
|
689
755
|
// literal in checked native storage instead of erasing its prototype ABI.
|
|
690
|
-
if (isJsSourceFile(
|
|
691
|
-
(expr.properties.length === 0 ||
|
|
692
|
-
expr.properties.some((prop) => ts.isMethodDeclaration(prop) ||
|
|
756
|
+
if (isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
|
|
757
|
+
(expr.properties.nodes.length === 0 ||
|
|
758
|
+
expr.properties.nodes.some((prop) => ts.isMethodDeclaration(prop) ||
|
|
693
759
|
ts.isGetAccessorDeclaration(prop) ||
|
|
694
760
|
ts.isSetAccessorDeclaration(prop)))) {
|
|
695
761
|
return lowerDynObjectLiteral(lowerer, expr);
|
|
@@ -698,7 +764,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
698
764
|
// Module collection already chose checked storage for this JavaScript
|
|
699
765
|
// binding. Construct in that representation: an intermediate record would
|
|
700
766
|
// check nested aliases back into inferred shapes and lose their identity.
|
|
701
|
-
if (isJsSourceFile(
|
|
767
|
+
if (isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
|
|
702
768
|
ts.isVariableDeclaration(expr.parent) &&
|
|
703
769
|
expr.parent.initializer === expr &&
|
|
704
770
|
ts.isIdentifier(expr.parent.name) &&
|
|
@@ -708,8 +774,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
708
774
|
// A checked spread carries runtime symbol keys and receiver-sensitive
|
|
709
775
|
// methods absent from its inferred record shape. Copy the real properties.
|
|
710
776
|
if (!expected &&
|
|
711
|
-
isJsSourceFile(
|
|
712
|
-
expr.properties.some((property) => ts.isSpreadAssignment(property) &&
|
|
777
|
+
isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
|
|
778
|
+
expr.properties.nodes.some((property) => ts.isSpreadAssignment(property) &&
|
|
713
779
|
(lowerer.builtinNamespaceModuleOf(property.expression)?.startsWith("path") ||
|
|
714
780
|
tryLowerExpression(lowerer, property.expression)?.type.kind === "dyn"))) {
|
|
715
781
|
return lowerDynObjectLiteral(lowerer, expr);
|
|
@@ -724,8 +790,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
724
790
|
// test/common's _mustCallInner context), where keys are runtime string
|
|
725
791
|
// values. TypeScript keeps the record world and its fence: this shape
|
|
726
792
|
// only arises in checked-dynamic JS.
|
|
727
|
-
if (isJsSourceFile(
|
|
728
|
-
expr.properties.some((p) => {
|
|
793
|
+
if (isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
|
|
794
|
+
expr.properties.nodes.some((p) => {
|
|
729
795
|
const n = ts.isSpreadAssignment(p) ? undefined : p.name;
|
|
730
796
|
return n !== undefined && ts.isComputedPropertyName(n);
|
|
731
797
|
})) {
|
|
@@ -735,7 +801,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
735
801
|
// message even when they also make the literal's type unmappable
|
|
736
802
|
// (a getter or a `this`-returning method would otherwise surface as an
|
|
737
803
|
// opaque type fence on the whole literal).
|
|
738
|
-
for (const prop of expr.properties) {
|
|
804
|
+
for (const prop of expr.properties.nodes) {
|
|
739
805
|
if (ts.isSpreadAssignment(prop)) {
|
|
740
806
|
// Supported shapes: FULL spreads of known record shapes read as
|
|
741
807
|
// identifiers or other side-effect-free reads, all BEFORE any
|
|
@@ -745,7 +811,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
745
811
|
// `k?: ...` — which desugar to one conditional field at the
|
|
746
812
|
// spread's own position (any position: they introduce one fresh
|
|
747
813
|
// name, collision-fenced below). Everything else stays fenced.
|
|
748
|
-
const cs = conditionalSpreadOf(prop.expression);
|
|
814
|
+
const cs = conditionalSpreadOf(prop.expression) ?? andSpreadOf(lowerer, prop.expression);
|
|
749
815
|
if (cs === "unsupported" || (cs && cs.props.length !== 1)) {
|
|
750
816
|
lowerer.unsupported("SC1090", prop, "conditional spreads beyond `...(c ? { field: v } : {})` (exactly one property against an empty arm — spell other shapes as optional fields)");
|
|
751
817
|
}
|
|
@@ -766,7 +832,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
766
832
|
// receiver (capturing the record under construction would be an
|
|
767
833
|
// RC cycle), and the generic lexical-this walk would incorrectly
|
|
768
834
|
// capture an ENCLOSING method's `this` — the object-method rule.
|
|
769
|
-
if (!isJsSourceFile(
|
|
835
|
+
if (!isJsSourceFile(ts.getSourceFileOfNode(expr))) {
|
|
770
836
|
rejectThisInObjectAccessor(lowerer, prop.body ?? prop);
|
|
771
837
|
}
|
|
772
838
|
}
|
|
@@ -838,7 +904,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
838
904
|
// type narrows away (a field written as `lanIp: null` types as bare
|
|
839
905
|
// `null`, which maps to nothing on its own).
|
|
840
906
|
if (tsType.isUnionType() &&
|
|
841
|
-
ts.constituentTypes(tsType).some((t) => t.getSymbol()
|
|
907
|
+
ts.constituentTypes(tsType).some((t) => ts.symbolNameOf(t.getSymbol()) === "PromiseLike")) {
|
|
842
908
|
tsType = lowerer.checker.getAwaitedType(tsType) ?? tsType;
|
|
843
909
|
}
|
|
844
910
|
let mapped = lowerer.mapTypeOf(tsType);
|
|
@@ -847,13 +913,13 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
847
913
|
// Keep a checked-dynamic destination in that representation so copying
|
|
848
914
|
// preserves keys, evaluation order, and fields overwritten afterwards.
|
|
849
915
|
if (mapped?.kind === "dyn" &&
|
|
850
|
-
expr.properties.some((p) => ts.isSpreadAssignment(p) && lowerer.mapTypeOf(lowerer.typeOf(p.expression))?.kind === "dyn")) {
|
|
916
|
+
expr.properties.nodes.some((p) => ts.isSpreadAssignment(p) && lowerer.mapTypeOf(lowerer.typeOf(p.expression))?.kind === "dyn")) {
|
|
851
917
|
return lowerDynObjectLiteral(lowerer, expr);
|
|
852
918
|
}
|
|
853
919
|
// A JavaScript call can contextually type an object literal as string even
|
|
854
920
|
// though the literal itself is a record. Keep its own shape so a caller
|
|
855
921
|
// performing ToString can convert it after the value is built.
|
|
856
|
-
if (mapped?.kind === "string" && isJsSourceFile(
|
|
922
|
+
if (mapped?.kind === "string" && isJsSourceFile(ts.getSourceFileOfNode(expr))) {
|
|
857
923
|
const own = lowerer.mapTypeOf(lowerer.typeOf(expr));
|
|
858
924
|
if (own?.kind === "record")
|
|
859
925
|
mapped = own;
|
|
@@ -863,7 +929,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
863
929
|
// object): `{}` carries no shape information, so the literal builds as
|
|
864
930
|
// its OWN type, exactly the unmappable-context fallback below. An
|
|
865
931
|
// empty LITERAL keeps the context (the shapes agree).
|
|
866
|
-
if (mapped?.kind === "record" && expr.properties.length > 0) {
|
|
932
|
+
if (mapped?.kind === "record" && expr.properties.nodes.length > 0) {
|
|
867
933
|
const ctxShape = lowerer.shapes.get(mapped.shapeId);
|
|
868
934
|
if (ctxShape && ctxShape.fields.length === 0 && !ctxShape.indexValue && !ctxShape.tuple) {
|
|
869
935
|
mapped = lowerer.mapTypeOf(lowerer.typeOf(expr)) ?? mapped;
|
|
@@ -879,7 +945,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
879
945
|
// type carries but the shape dropped (settled value/reason,
|
|
880
946
|
// generic-callable members) belongs to the drop paths below, and
|
|
881
947
|
// index-signature contexts keep every key (overflow capture).
|
|
882
|
-
if (mapped?.kind === "record" && expr.properties.length > 0) {
|
|
948
|
+
if (mapped?.kind === "record" && expr.properties.nodes.length > 0) {
|
|
883
949
|
const ctxShape = lowerer.shapes.get(mapped.shapeId);
|
|
884
950
|
if (ctxShape && !ctxShape.indexValue && !ctxShape.tuple) {
|
|
885
951
|
const names = new Set(ctxShape.fields.map((f) => f.name));
|
|
@@ -888,7 +954,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
888
954
|
return members.some((m) => lowerer.checker.getPropertyOfType(m, name) !== undefined);
|
|
889
955
|
};
|
|
890
956
|
const extraOf = (text) => !names.has(text) && !ctxHasProp(text);
|
|
891
|
-
const extra = expr.properties.some((p) => {
|
|
957
|
+
const extra = expr.properties.nodes.some((p) => {
|
|
892
958
|
if (ts.isSpreadAssignment(p) || !p.name)
|
|
893
959
|
return false;
|
|
894
960
|
if (ts.isIdentifier(p.name) || ts.isStringLiteral(p.name))
|
|
@@ -945,7 +1011,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
945
1011
|
!armShape?.tuple &&
|
|
946
1012
|
// `{} | undefined` supplies no layout for a populated options
|
|
947
1013
|
// literal, just as a bare empty-record context supplies none.
|
|
948
|
-
(expr.properties.length === 0 ||
|
|
1014
|
+
(expr.properties.nodes.length === 0 ||
|
|
949
1015
|
(armShape && (armShape.fields.length > 0 || armShape.indexValue)))) {
|
|
950
1016
|
mapped = recordArms[0];
|
|
951
1017
|
}
|
|
@@ -970,7 +1036,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
970
1036
|
// already appears in the union.
|
|
971
1037
|
if (ownShapeId === null ||
|
|
972
1038
|
!recordArms.some((a) => a.shapeId === ownShapeId) ||
|
|
973
|
-
expr.properties.some(ts.isSpreadAssignment)) {
|
|
1039
|
+
expr.properties.nodes.some(ts.isSpreadAssignment)) {
|
|
974
1040
|
const arm = literalUnionArmOf(lowerer, expr, tsType, recordArms);
|
|
975
1041
|
if (arm)
|
|
976
1042
|
mapped = arm;
|
|
@@ -985,12 +1051,12 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
985
1051
|
// lower; accessor entries and members with no value representation
|
|
986
1052
|
// (rest-param function types) narrow away. SEMANTICS.md documents the
|
|
987
1053
|
// enumeration divergence.
|
|
988
|
-
if (isJsSourceFile(
|
|
1054
|
+
if (isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
|
|
989
1055
|
(!mapped ||
|
|
990
|
-
expr.properties.some((p) => ts.isGetAccessorDeclaration(p) || ts.isSetAccessorDeclaration(p))) &&
|
|
1056
|
+
expr.properties.nodes.some((p) => ts.isGetAccessorDeclaration(p) || ts.isSetAccessorDeclaration(p))) &&
|
|
991
1057
|
isCjsExportTableLiteral(expr)) {
|
|
992
1058
|
const fields = [];
|
|
993
|
-
for (const prop of expr.properties) {
|
|
1059
|
+
for (const prop of expr.properties.nodes) {
|
|
994
1060
|
if (ts.isGetAccessorDeclaration(prop) || ts.isSetAccessorDeclaration(prop))
|
|
995
1061
|
continue;
|
|
996
1062
|
const propName = ts.isSpreadAssignment(prop) ? undefined : prop.name;
|
|
@@ -1024,7 +1090,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1024
1090
|
// each field converts through the usual dyn boundary, and dynamic
|
|
1025
1091
|
// consumers ride the keyed-dyn paths. TypeScript keeps the fence.
|
|
1026
1092
|
if (mapped?.kind === "dyn" ||
|
|
1027
|
-
(!mapped && isJsSourceFile(
|
|
1093
|
+
(!mapped && isJsSourceFile(ts.getSourceFileOfNode(expr))) ||
|
|
1028
1094
|
(!expected &&
|
|
1029
1095
|
mapped &&
|
|
1030
1096
|
jsOpenObjectType(expr, mapped, lowerer.shapes, lowerer.unions).kind === "dyn")) {
|
|
@@ -1039,8 +1105,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1039
1105
|
// until the join supplies it. Existing values still use width coercion;
|
|
1040
1106
|
// extra fields, spreads, accessors, and keyed shapes retain their paths.
|
|
1041
1107
|
if (expected &&
|
|
1042
|
-
!isJsSourceFile(
|
|
1043
|
-
expr.properties.every((p) => ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p))) {
|
|
1108
|
+
!isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
|
|
1109
|
+
expr.properties.nodes.every((p) => ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p))) {
|
|
1044
1110
|
const own = lowerer.shapes.get(type.shapeId);
|
|
1045
1111
|
const target = lowerer.shapes.get(expected.shapeId);
|
|
1046
1112
|
if (!own.tuple &&
|
|
@@ -1055,10 +1121,29 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1055
1121
|
type = { kind: "record", shapeId: expected.shapeId };
|
|
1056
1122
|
}
|
|
1057
1123
|
}
|
|
1124
|
+
// A Date's toJSON() result keeps its null in a field with no declared
|
|
1125
|
+
// destination: the lib types say string.
|
|
1126
|
+
if (!expected) {
|
|
1127
|
+
for (const property of expr.properties.nodes) {
|
|
1128
|
+
const value = ts.isPropertyAssignment(property)
|
|
1129
|
+
? property.initializer
|
|
1130
|
+
: ts.isShorthandPropertyAssignment(property)
|
|
1131
|
+
? property.name
|
|
1132
|
+
: null;
|
|
1133
|
+
if (value &&
|
|
1134
|
+
property.name &&
|
|
1135
|
+
(ts.isIdentifier(property.name) || ts.isStringLiteral(property.name)) &&
|
|
1136
|
+
isDateJsonSource(lowerer, value)) {
|
|
1137
|
+
const widened = lowerer.runtimeOptionalRecordField(type, property.name.text, dateJsonType(lowerer));
|
|
1138
|
+
if (widened.kind === "record")
|
|
1139
|
+
type = { kind: "record", shapeId: widened.shapeId };
|
|
1140
|
+
}
|
|
1141
|
+
}
|
|
1142
|
+
}
|
|
1058
1143
|
let shape = lowerer.shapes.get(type.shapeId);
|
|
1059
1144
|
// JavaScript Dates carry native object identity in checked storage. An
|
|
1060
1145
|
// inferred scalar Date field would erase that identity before boxing.
|
|
1061
|
-
if (isJsSourceFile(
|
|
1146
|
+
if (isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
|
|
1062
1147
|
shape.fields.some((field) => field.type.kind === "date")) {
|
|
1063
1148
|
return lowerDynObjectLiteral(lowerer, expr);
|
|
1064
1149
|
}
|
|
@@ -1067,8 +1152,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1067
1152
|
// so the literal's shape NARROWS to its plain fields (reads resolve
|
|
1068
1153
|
// through the lifted accessors; Object.keys over the value omits
|
|
1069
1154
|
// accessor names — the documented divergence).
|
|
1070
|
-
if (isJsSourceFile(
|
|
1071
|
-
const accessorNames = new Set(expr.properties
|
|
1155
|
+
if (isJsSourceFile(ts.getSourceFileOfNode(expr))) {
|
|
1156
|
+
const accessorNames = new Set(expr.properties.nodes
|
|
1072
1157
|
.filter((p) => ts.isGetAccessorDeclaration(p) || ts.isSetAccessorDeclaration(p))
|
|
1073
1158
|
.map((p) => p.name && (ts.isIdentifier(p.name) || ts.isStringLiteral(p.name)) ? p.name.text : "")
|
|
1074
1159
|
.filter((n) => n !== ""));
|
|
@@ -1088,10 +1173,10 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1088
1173
|
expr.parent.initializer === expr &&
|
|
1089
1174
|
ts.isVariableStatement(expr.parent?.parent?.parent) &&
|
|
1090
1175
|
ts.isSourceFile(expr.parent?.parent?.parent?.parent);
|
|
1091
|
-
const assignedProperties = expr.properties.filter((prop) => ts.isPropertyAssignment(prop) || ts.isShorthandPropertyAssignment(prop));
|
|
1176
|
+
const assignedProperties = expr.properties.nodes.filter((prop) => ts.isPropertyAssignment(prop) || ts.isShorthandPropertyAssignment(prop));
|
|
1092
1177
|
if (topLevelJsDecl &&
|
|
1093
|
-
isJsSourceFile(
|
|
1094
|
-
assignedProperties.length === expr.properties.length) {
|
|
1178
|
+
isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
|
|
1179
|
+
assignedProperties.length === expr.properties.nodes.length) {
|
|
1095
1180
|
const provided = new Set(assignedProperties.map((prop) => propNameText(lowerer, prop.name)));
|
|
1096
1181
|
if (shape.fields.some((field) => !provided.has(field.name))) {
|
|
1097
1182
|
return lowerDynObjectLiteral(lowerer, expr);
|
|
@@ -1114,14 +1199,15 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1114
1199
|
// Stay deliberately narrow. Tuple/index/accessor shapes, conditional or
|
|
1115
1200
|
// multiple spreads, spread-after-explicit order, and shape-changing width
|
|
1116
1201
|
// copies retain their existing lowering and diagnostics.
|
|
1117
|
-
if (!isJsSourceFile(
|
|
1202
|
+
if (!isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
|
|
1118
1203
|
!shape.indexValue &&
|
|
1119
1204
|
!shape.tuple &&
|
|
1120
1205
|
!shapeHasAccessorSlots(shape) &&
|
|
1121
|
-
expr.properties.length >= 2 &&
|
|
1122
|
-
ts.isSpreadAssignment(expr.properties[0]) &&
|
|
1123
|
-
!conditionalSpreadOf(expr.properties[0].expression) &&
|
|
1124
|
-
expr.properties
|
|
1206
|
+
expr.properties.nodes.length >= 2 &&
|
|
1207
|
+
ts.isSpreadAssignment(expr.properties.nodes[0]) &&
|
|
1208
|
+
!conditionalSpreadOf(expr.properties.nodes[0].expression) &&
|
|
1209
|
+
!andSpreadOf(lowerer, expr.properties.nodes[0].expression) &&
|
|
1210
|
+
expr.properties.nodes
|
|
1125
1211
|
.slice(1)
|
|
1126
1212
|
.every((p) => (ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
|
|
1127
1213
|
p.name !== undefined &&
|
|
@@ -1129,8 +1215,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1129
1215
|
ts.isStringLiteral(p.name) ||
|
|
1130
1216
|
ts.isNumericLiteral(p.name) ||
|
|
1131
1217
|
(ts.isComputedPropertyName(p.name) && literalComputedKey(lowerer, p.name) !== null)))) {
|
|
1132
|
-
const spread = expr.properties[0];
|
|
1133
|
-
const props = expr.properties.slice(1);
|
|
1218
|
+
const spread = expr.properties.nodes[0];
|
|
1219
|
+
const props = expr.properties.nodes.slice(1);
|
|
1134
1220
|
const names = props.map((p) => propNameText(lowerer, p.name));
|
|
1135
1221
|
const unique = new Set(names);
|
|
1136
1222
|
const sourceType = lowerer.mapTypeOf(lowerer.typeOf(spread.expression));
|
|
@@ -1178,13 +1264,13 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1178
1264
|
if (shape.indexValue &&
|
|
1179
1265
|
shape.fields.length === 0 &&
|
|
1180
1266
|
!shape.tuple &&
|
|
1181
|
-
(expr.properties.some((p) => ts.isSpreadAssignment(p)) ||
|
|
1182
|
-
expr.properties.some(isRuntimeComputedKey))) {
|
|
1267
|
+
(expr.properties.nodes.some((p) => ts.isSpreadAssignment(p)) ||
|
|
1268
|
+
expr.properties.nodes.some(isRuntimeComputedKey))) {
|
|
1183
1269
|
const contributors = [];
|
|
1184
1270
|
let mergeable = true;
|
|
1185
|
-
for (const prop of expr.properties) {
|
|
1271
|
+
for (const prop of expr.properties.nodes) {
|
|
1186
1272
|
if (ts.isSpreadAssignment(prop)) {
|
|
1187
|
-
const cs = conditionalSpreadOf(prop.expression);
|
|
1273
|
+
const cs = conditionalSpreadOf(prop.expression) ?? andSpreadOf(lowerer, prop.expression);
|
|
1188
1274
|
if (cs === "unsupported" || (cs && cs.props.length !== 1)) {
|
|
1189
1275
|
lowerer.unsupported("SC1090", prop, "conditional spreads beyond `...(c ? { field: v } : {})` (exactly one property against an empty arm)");
|
|
1190
1276
|
}
|
|
@@ -1200,7 +1286,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1200
1286
|
? lowerer.lowerExpr(csProp.initializer)
|
|
1201
1287
|
: lowerer.lowerShorthandValue(csProp), shape.indexValue, vNode);
|
|
1202
1288
|
contributors.push({
|
|
1203
|
-
kind: "
|
|
1289
|
+
kind: "condField",
|
|
1204
1290
|
name: csProp.name.text,
|
|
1205
1291
|
value: {
|
|
1206
1292
|
kind: "ternary",
|
|
@@ -1215,6 +1301,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1215
1301
|
}
|
|
1216
1302
|
let src = lowerer.lowerExpr(prop.expression);
|
|
1217
1303
|
src = lowerOptionalIndexSpreadSource(lowerer, src, locOf(prop)) ?? src;
|
|
1304
|
+
src = dynIndexSpreadSource(lowerer, src, type, locOf(prop)) ?? src;
|
|
1218
1305
|
if (src.type.kind !== "record") {
|
|
1219
1306
|
lowerer.unsupported("SC1090", prop, `object spread of '${lowerer.fmt(src.type)}' sources into an index-signature shape (only index-signature records merge — ${NARROW_FIRST})`);
|
|
1220
1307
|
}
|
|
@@ -1272,7 +1359,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1272
1359
|
}
|
|
1273
1360
|
// Unfoldable computed keys outside the index-signature merge path:
|
|
1274
1361
|
// no record shape can hold a runtime-decided name.
|
|
1275
|
-
for (const prop of expr.properties) {
|
|
1362
|
+
for (const prop of expr.properties.nodes) {
|
|
1276
1363
|
if (isRuntimeComputedKey(prop)) {
|
|
1277
1364
|
lowerer.unsupported("SC1090", prop.name, "computed property keys (compile-time-known keys fold — a pure expression whose checker type is one string or number literal: consts, enum members, quoted keys, templates of those — `{ [MARKER]: v }`; runtime string keys write through an index-signature target; symbol keys stay out)");
|
|
1278
1365
|
}
|
|
@@ -1284,9 +1371,11 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1284
1371
|
if (!shape.indexValue &&
|
|
1285
1372
|
!shape.tuple &&
|
|
1286
1373
|
shape.fields.length > 0 &&
|
|
1287
|
-
expr.properties.length > 0 &&
|
|
1288
|
-
expr.properties.every((p) => ts.isSpreadAssignment(p) &&
|
|
1289
|
-
|
|
1374
|
+
expr.properties.nodes.length > 0 &&
|
|
1375
|
+
expr.properties.nodes.every((p) => ts.isSpreadAssignment(p) &&
|
|
1376
|
+
!conditionalSpreadOf(p.expression) &&
|
|
1377
|
+
!andSpreadOf(lowerer, p.expression)) &&
|
|
1378
|
+
expr.properties.nodes.some((p) => {
|
|
1290
1379
|
const t = lowerer.mapTypeOf(lowerer.typeOf(p.expression));
|
|
1291
1380
|
return (t?.kind === "dyn" || (t?.kind === "record" && !!lowerer.shapes.get(t.shapeId)?.indexValue));
|
|
1292
1381
|
})) {
|
|
@@ -1301,7 +1390,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1301
1390
|
};
|
|
1302
1391
|
const fields = [];
|
|
1303
1392
|
const spreadStmts = [];
|
|
1304
|
-
const hasSpread = expr.properties.some(ts.isSpreadAssignment);
|
|
1393
|
+
const hasSpread = expr.properties.nodes.some(ts.isSpreadAssignment);
|
|
1305
1394
|
const captured = new Set();
|
|
1306
1395
|
const capture = (value) => {
|
|
1307
1396
|
const local = lowerer.declareHiddenLocal("%spreadValue", value.type);
|
|
@@ -1380,7 +1469,9 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1380
1469
|
// Member names DROPPED from the shape (JS deferral — unlowerable pure
|
|
1381
1470
|
// member reads narrow away; see the catch in the property loop).
|
|
1382
1471
|
const droppedNames = new Set();
|
|
1383
|
-
|
|
1472
|
+
// The order this literal creates its keys in (key-order-witness.ts).
|
|
1473
|
+
const orderSegments = [];
|
|
1474
|
+
for (const prop of expr.properties.nodes) {
|
|
1384
1475
|
// A later contributor can mutate an earlier source or overwrite a
|
|
1385
1476
|
// value with effects. Snapshot pending fields at their source position,
|
|
1386
1477
|
// before evaluating the next contributor, even if they are overwritten.
|
|
@@ -1391,7 +1482,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1391
1482
|
}
|
|
1392
1483
|
}
|
|
1393
1484
|
if (ts.isSpreadAssignment(prop)) {
|
|
1394
|
-
const cs = conditionalSpreadOf(prop.expression);
|
|
1485
|
+
const cs = conditionalSpreadOf(prop.expression) ?? andSpreadOf(lowerer, prop.expression);
|
|
1395
1486
|
if (cs && cs !== "unsupported") {
|
|
1396
1487
|
// `...(c ? { k: v } : {})` — ONE conditional field at the
|
|
1397
1488
|
// spread's own position: cond evaluates exactly once, `v` only
|
|
@@ -1408,7 +1499,10 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1408
1499
|
}
|
|
1409
1500
|
shapeMismatch(prop);
|
|
1410
1501
|
}
|
|
1411
|
-
|
|
1502
|
+
// An 'unknown' slot holds the checked-dynamic undefined for the
|
|
1503
|
+
// empty arm, the absent-property read the width copy uses too.
|
|
1504
|
+
const absent = lowerer.absentFieldValue(fieldType, locOf(prop)) ??
|
|
1505
|
+
(fieldType.kind === "dyn" ? dynUndefinedExpr(locOf(prop)) : null);
|
|
1412
1506
|
if (!absent) {
|
|
1413
1507
|
lowerer.unsupported("SC1090", prop, `conditional spreads onto the required field '${name}' (the empty arm leaves it undefined — declare the field optional)`);
|
|
1414
1508
|
}
|
|
@@ -1424,6 +1518,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1424
1518
|
if (!typeEquals(v.type, fieldType))
|
|
1425
1519
|
lowerer.badType(valueNode, lowerer.typeOf(valueNode));
|
|
1426
1520
|
conditionalNames.add(name);
|
|
1521
|
+
orderSegments.push({ kind: "key", name, definite: false });
|
|
1427
1522
|
fields.push({
|
|
1428
1523
|
name,
|
|
1429
1524
|
value: {
|
|
@@ -1447,7 +1542,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1447
1542
|
let srcNode = prop.expression;
|
|
1448
1543
|
while (ts.isParenthesizedExpression(srcNode))
|
|
1449
1544
|
srcNode = srcNode.expression;
|
|
1450
|
-
const srcLowered = capture(prop === expr.properties[0] && leadingSpreadLowered !== null
|
|
1545
|
+
const srcLowered = capture(prop === expr.properties.nodes[0] && leadingSpreadLowered !== null
|
|
1451
1546
|
? leadingSpreadLowered
|
|
1452
1547
|
: lowerer.lowerExpr(srcNode));
|
|
1453
1548
|
// Array callbacks can receive a record-or-undefined ABI even when
|
|
@@ -1491,9 +1586,9 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1491
1586
|
lowerer.unsupported("SC1090", prop, "object spread involving index-signature shapes (overflow keys are runtime state — copy the fields you need explicitly)");
|
|
1492
1587
|
}
|
|
1493
1588
|
const laterNames = new Set();
|
|
1494
|
-
for (const later of expr.properties.slice(expr.properties.indexOf(prop) + 1)) {
|
|
1589
|
+
for (const later of expr.properties.nodes.slice(expr.properties.nodes.indexOf(prop) + 1)) {
|
|
1495
1590
|
if (ts.isSpreadAssignment(later)) {
|
|
1496
|
-
if (conditionalSpreadOf(later.expression))
|
|
1591
|
+
if (conditionalSpreadOf(later.expression) || andSpreadOf(lowerer, later.expression))
|
|
1497
1592
|
continue;
|
|
1498
1593
|
const lt = laterSpreadType(lowerer, later.expression);
|
|
1499
1594
|
if (lt?.kind === "record") {
|
|
@@ -1514,6 +1609,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1514
1609
|
}
|
|
1515
1610
|
}
|
|
1516
1611
|
const srcRef = () => srcLowered ?? lowerer.lowerExpr(srcNode);
|
|
1612
|
+
orderSegments.push({ kind: "spread", shapeId: recArm.shapeId, maybeAbsent: true });
|
|
1517
1613
|
for (const f of srcShape.fields) {
|
|
1518
1614
|
if (laterNames.has(f.name))
|
|
1519
1615
|
continue;
|
|
@@ -1689,9 +1785,9 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1689
1785
|
// exactly like Node does. Conditional spreads don't count (their
|
|
1690
1786
|
// empty arm defines nothing) — their own collision fences hold.
|
|
1691
1787
|
const laterNames = new Set();
|
|
1692
|
-
for (const later of expr.properties.slice(expr.properties.indexOf(prop) + 1)) {
|
|
1788
|
+
for (const later of expr.properties.nodes.slice(expr.properties.nodes.indexOf(prop) + 1)) {
|
|
1693
1789
|
if (ts.isSpreadAssignment(later)) {
|
|
1694
|
-
if (conditionalSpreadOf(later.expression))
|
|
1790
|
+
if (conditionalSpreadOf(later.expression) || andSpreadOf(lowerer, later.expression))
|
|
1695
1791
|
continue;
|
|
1696
1792
|
const lt = laterSpreadType(lowerer, later.expression);
|
|
1697
1793
|
if (lt?.kind === "record") {
|
|
@@ -1711,6 +1807,10 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1711
1807
|
laterNames.add(propNameText(lowerer, later.name));
|
|
1712
1808
|
}
|
|
1713
1809
|
}
|
|
1810
|
+
// A checked-dynamic source's keys are a run-time fact.
|
|
1811
|
+
orderSegments.push(srcLowered.type.kind === "dyn"
|
|
1812
|
+
? { kind: "opaque" }
|
|
1813
|
+
: { kind: "spread", shapeId: srcType.shapeId, maybeAbsent: false });
|
|
1714
1814
|
for (const f of srcShape.fields) {
|
|
1715
1815
|
if (laterNames.has(f.name))
|
|
1716
1816
|
continue;
|
|
@@ -1836,7 +1936,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1836
1936
|
// closures is side-effect-free, so their position among the data
|
|
1837
1937
|
// fields' source-order evaluation is unobservable — exactly JS,
|
|
1838
1938
|
// where accessor definitions evaluate nothing.
|
|
1839
|
-
if (isJsSourceFile(
|
|
1939
|
+
if (isJsSourceFile(ts.getSourceFileOfNode(expr)))
|
|
1840
1940
|
continue;
|
|
1841
1941
|
const name = propNameText(lowerer, prop.name); // key-form-checked above
|
|
1842
1942
|
const slotName = `${ts.isGetAccessorDeclaration(prop) ? "%get" : "%set"}:${name}`;
|
|
@@ -1912,7 +2012,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1912
2012
|
// reads; the field promotion below adopts that layout.
|
|
1913
2013
|
(fieldType?.kind === "record" &&
|
|
1914
2014
|
ts.isObjectLiteralExpression(init) &&
|
|
1915
|
-
init.properties.length > 0
|
|
2015
|
+
init.properties.nodes.length > 0
|
|
1916
2016
|
? (() => {
|
|
1917
2017
|
const nested = lowerer.lowerObjectLiteral(init, fieldType);
|
|
1918
2018
|
return lowerer.isRuntimeOptionalRecordVariant(nested.type, fieldType)
|
|
@@ -1951,7 +2051,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1951
2051
|
(ts.isPropertyAssignment(prop) && ts.isIdentifier(prop.initializer));
|
|
1952
2052
|
if (!(err instanceof PoisonError) ||
|
|
1953
2053
|
!pureMember ||
|
|
1954
|
-
!isJsSourceFile(
|
|
2054
|
+
!isJsSourceFile(ts.getSourceFileOfNode(expr)) ||
|
|
1955
2055
|
lowerer.diagSink !== null ||
|
|
1956
2056
|
lowerer.diags.length <= propDiagsBefore ||
|
|
1957
2057
|
lowerer.diags.slice(propDiagsBefore).some((d) => d.code === "SC9001")) {
|
|
@@ -1999,6 +2099,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1999
2099
|
if (at >= 0)
|
|
2000
2100
|
fields.splice(at, 1);
|
|
2001
2101
|
fields.push({ name, value });
|
|
2102
|
+
orderSegments.push({ kind: "key", name, definite: true });
|
|
2002
2103
|
}
|
|
2003
2104
|
// Optional fields may be omitted: the field holds its absent state.
|
|
2004
2105
|
// tsc rejects omission of required fields before lowering.
|
|
@@ -2024,7 +2125,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
2024
2125
|
fields.push({ name: f.name, value: absent });
|
|
2025
2126
|
}
|
|
2026
2127
|
}
|
|
2027
|
-
const result = { kind: "recordLit", fields, type, loc };
|
|
2128
|
+
const result = lowerer.keyOrder.literal({ kind: "recordLit", fields, type, loc }, orderSegments);
|
|
2028
2129
|
return spreadStmts.length === 0
|
|
2029
2130
|
? result
|
|
2030
2131
|
: { kind: "seqExpr", stmts: spreadStmts, result, type, loc };
|
|
@@ -2036,9 +2137,9 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
2036
2137
|
* their identity. Changing a discriminator or adding variant-specific
|
|
2037
2138
|
* fields needs a different result layout and stays on the ordinary path. */
|
|
2038
2139
|
function lowerUnionRecordClone(lowerer, expr) {
|
|
2039
|
-
if (isJsSourceFile(
|
|
2140
|
+
if (isJsSourceFile(ts.getSourceFileOfNode(expr)))
|
|
2040
2141
|
return null;
|
|
2041
|
-
const spread = expr.properties[0];
|
|
2142
|
+
const spread = expr.properties.nodes[0];
|
|
2042
2143
|
if (!spread || !ts.isSpreadAssignment(spread))
|
|
2043
2144
|
return null;
|
|
2044
2145
|
let sourceNode = spread.expression;
|
|
@@ -2056,7 +2157,7 @@ function lowerUnionRecordClone(lowerer, expr) {
|
|
|
2056
2157
|
return null;
|
|
2057
2158
|
const props = [];
|
|
2058
2159
|
const names = [];
|
|
2059
|
-
for (const prop of expr.properties.slice(1)) {
|
|
2160
|
+
for (const prop of expr.properties.nodes.slice(1)) {
|
|
2060
2161
|
if ((!ts.isPropertyAssignment(prop) && !ts.isShorthandPropertyAssignment(prop)) ||
|
|
2061
2162
|
(!ts.isIdentifier(prop.name) && !ts.isStringLiteral(prop.name)))
|
|
2062
2163
|
return null;
|
|
@@ -2196,6 +2297,73 @@ function lowerUnionRecordClone(lowerer, expr) {
|
|
|
2196
2297
|
loc,
|
|
2197
2298
|
};
|
|
2198
2299
|
}
|
|
2300
|
+
/** `...(c && { k: v })`: spreading a falsy primitive (false, 0, "", NaN)
|
|
2301
|
+
* copies nothing, so the idiom is `...(c ? { k: v } : {})` with `c`
|
|
2302
|
+
* evaluated once. Recognized only where the spread's own type mixes the
|
|
2303
|
+
* record with primitive arms; a record or record-or-unit spread keeps the
|
|
2304
|
+
* ordinary source-copy path. */
|
|
2305
|
+
export function andSpreadOf(lowerer, expr) {
|
|
2306
|
+
let e = expr;
|
|
2307
|
+
while (ts.isParenthesizedExpression(e))
|
|
2308
|
+
e = e.expression;
|
|
2309
|
+
if (!ts.isBinaryExpression(e) || e.operatorToken.kind !== ts.SyntaxKind.AmpersandAmpersandToken)
|
|
2310
|
+
return null;
|
|
2311
|
+
let right = e.right;
|
|
2312
|
+
while (ts.isParenthesizedExpression(right))
|
|
2313
|
+
right = right.expression;
|
|
2314
|
+
if (!ts.isObjectLiteralExpression(right))
|
|
2315
|
+
return null;
|
|
2316
|
+
const spreadType = lowerer.mapTypeOf(lowerer.typeOf(e));
|
|
2317
|
+
// Every falsy value is a primitive, which spreads nothing, so `c && {
|
|
2318
|
+
// ... }` contributes the literal's members exactly when c is truthy,
|
|
2319
|
+
// whatever c's type. The checker's union of the two decides the
|
|
2320
|
+
// representation where it maps; where it does not (a member typed by a
|
|
2321
|
+
// checked-dynamic value such as an AbortSignal), the syntax decides.
|
|
2322
|
+
if (spreadType === null || spreadType.kind === "dyn") {
|
|
2323
|
+
return syntacticAndSpread(right, e.left);
|
|
2324
|
+
}
|
|
2325
|
+
if (spreadType?.kind !== "union")
|
|
2326
|
+
return null;
|
|
2327
|
+
const arms = lowerer.unions.get(spreadType.unionId)?.arms ?? [];
|
|
2328
|
+
if (arms.filter((arm) => arm.kind === "record").length !== 1 ||
|
|
2329
|
+
!arms.some((arm) => arm.kind === "bool" || arm.kind === "f64" || arm.kind === "string") ||
|
|
2330
|
+
!arms.every((arm) => arm.kind === "record" ||
|
|
2331
|
+
arm.kind === "bool" ||
|
|
2332
|
+
arm.kind === "f64" ||
|
|
2333
|
+
arm.kind === "string" ||
|
|
2334
|
+
isUnitType(arm)))
|
|
2335
|
+
return null;
|
|
2336
|
+
if (right.properties.nodes.length === 0)
|
|
2337
|
+
return "unsupported";
|
|
2338
|
+
const props = [];
|
|
2339
|
+
for (const p of right.properties.nodes) {
|
|
2340
|
+
if ((ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
|
|
2341
|
+
p.name &&
|
|
2342
|
+
(ts.isIdentifier(p.name) || ts.isStringLiteral(p.name))) {
|
|
2343
|
+
props.push(p);
|
|
2344
|
+
}
|
|
2345
|
+
else {
|
|
2346
|
+
return "unsupported";
|
|
2347
|
+
}
|
|
2348
|
+
}
|
|
2349
|
+
return { cond: e.left, props, whenTrue: true };
|
|
2350
|
+
}
|
|
2351
|
+
function syntacticAndSpread(right, cond) {
|
|
2352
|
+
if (right.properties.nodes.length === 0)
|
|
2353
|
+
return "unsupported";
|
|
2354
|
+
const props = [];
|
|
2355
|
+
for (const p of right.properties.nodes) {
|
|
2356
|
+
if ((ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
|
|
2357
|
+
p.name &&
|
|
2358
|
+
(ts.isIdentifier(p.name) || ts.isStringLiteral(p.name))) {
|
|
2359
|
+
props.push(p);
|
|
2360
|
+
}
|
|
2361
|
+
else {
|
|
2362
|
+
return "unsupported";
|
|
2363
|
+
}
|
|
2364
|
+
}
|
|
2365
|
+
return { cond, props, whenTrue: true };
|
|
2366
|
+
}
|
|
2199
2367
|
export function conditionalSpreadOf(expr) {
|
|
2200
2368
|
let e = expr;
|
|
2201
2369
|
while (ts.isParenthesizedExpression(e))
|
|
@@ -2213,13 +2381,13 @@ export function conditionalSpreadOf(expr) {
|
|
|
2213
2381
|
if (!ts.isObjectLiteralExpression(whenTrue) || !ts.isObjectLiteralExpression(whenFalse)) {
|
|
2214
2382
|
return "unsupported";
|
|
2215
2383
|
}
|
|
2216
|
-
const trueCarries = whenFalse.properties.length === 0 && whenTrue.properties.length > 0;
|
|
2217
|
-
const falseCarries = whenTrue.properties.length === 0 && whenFalse.properties.length > 0;
|
|
2384
|
+
const trueCarries = whenFalse.properties.nodes.length === 0 && whenTrue.properties.nodes.length > 0;
|
|
2385
|
+
const falseCarries = whenTrue.properties.nodes.length === 0 && whenFalse.properties.nodes.length > 0;
|
|
2218
2386
|
if (!trueCarries && !falseCarries)
|
|
2219
2387
|
return "unsupported"; // both empty is tsc-unreachable; both non-empty has no single desugar
|
|
2220
2388
|
const carrier = trueCarries ? whenTrue : whenFalse;
|
|
2221
2389
|
const props = [];
|
|
2222
|
-
for (const p of carrier.properties) {
|
|
2390
|
+
for (const p of carrier.properties.nodes) {
|
|
2223
2391
|
if ((ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
|
|
2224
2392
|
p.name &&
|
|
2225
2393
|
(ts.isIdentifier(p.name) || ts.isStringLiteral(p.name))) {
|
|
@@ -2249,7 +2417,7 @@ export function conditionalSpreadOf(expr) {
|
|
|
2249
2417
|
* (last-write-wins). Fixed, hybrid, and pure index records may contribute. */
|
|
2250
2418
|
function lowerDeclaredSpreadMerge(lowerer, expr, type, shape, loc) {
|
|
2251
2419
|
const srcs = [];
|
|
2252
|
-
for (const prop of expr.properties) {
|
|
2420
|
+
for (const prop of expr.properties.nodes) {
|
|
2253
2421
|
const spread = prop; // caller-checked: all spreads
|
|
2254
2422
|
const value = lowerer.lowerExpr(spread.expression);
|
|
2255
2423
|
if (value.type.kind === "dyn") {
|
|
@@ -2620,7 +2788,7 @@ export function lowerShorthandValue(lowerer, prop) {
|
|
|
2620
2788
|
return lowerer.maybeNarrow({ kind: "varRef", localId: g.id, type: g.type, loc }, propName);
|
|
2621
2789
|
}
|
|
2622
2790
|
const sig = lowerer.fnSigsBySymbol.get(resolved);
|
|
2623
|
-
const decl =
|
|
2791
|
+
const decl = resolved.declarations[0];
|
|
2624
2792
|
if (sig &&
|
|
2625
2793
|
decl &&
|
|
2626
2794
|
ts.isFunctionDeclaration(decl) &&
|