@scriptc/compiler 0.3.6 → 0.4.1
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 +717 -55
- 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 +20 -0
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/immutability.test.js +1 -1
- package/dist/backend/library-pack.js +9 -0
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/link-plan-core.d.ts +2 -0
- package/dist/backend/link-plan-core.js +2 -0
- package/dist/backend/link-plan-core.js.map +1 -1
- package/dist/backend/link-plan.d.ts +1 -0
- package/dist/backend/link-plan.js +1 -0
- package/dist/backend/link-plan.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.js +3 -1
- package/dist/backend/llvm/array-search.js.map +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 +38 -1
- package/dist/backend/llvm/classes.js +185 -35
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +79 -17
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +21 -3
- package/dist/backend/llvm/common.js +51 -3
- 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 +15 -4
- package/dist/backend/llvm/dense-array-access.js +125 -44
- package/dist/backend/llvm/dense-array-access.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.test.js +63 -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 +37 -4
- package/dist/backend/llvm/dyn.js +354 -183
- 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 +1193 -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 +1557 -0
- package/dist/backend/llvm/emit-module.js.map +1 -0
- package/dist/backend/llvm/emit-statements.d.ts +59 -0
- package/dist/backend/llvm/emit-statements.js +2041 -0
- package/dist/backend/llvm/emit-statements.js.map +1 -0
- package/dist/backend/llvm/emitter.d.ts +566 -291
- package/dist/backend/llvm/emitter.js +728 -4671
- 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 +87 -56
- 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 +45 -24
- 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 +113 -66
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +124 -28
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.test.js +57 -2
- package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
- 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 +65 -27
- 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.js +3 -3
- package/dist/backend/llvm/integer-clones.js.map +1 -1
- 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/js-ic.d.ts +18 -0
- package/dist/backend/llvm/js-ic.js +712 -0
- package/dist/backend/llvm/js-ic.js.map +1 -0
- 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 +616 -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 +94 -53
- 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 +209 -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 +42 -33
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- 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.d.ts +20 -4
- package/dist/backend/llvm/map-number-lookup.js +45 -9
- package/dist/backend/llvm/map-number-lookup.js.map +1 -1
- 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 +215 -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 +7 -0
- package/dist/backend/llvm/publish.js +50 -19
- 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 +10 -7
- package/dist/backend/llvm/regions.js.map +1 -1
- package/dist/backend/llvm/regions.test.js +8 -2
- package/dist/backend/llvm/regions.test.js.map +1 -1
- package/dist/backend/llvm/shapes.d.ts +74 -45
- package/dist/backend/llvm/shapes.js +289 -28
- 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/speculative-integers.d.ts +20 -1
- package/dist/backend/llvm/speculative-integers.js +94 -6
- package/dist/backend/llvm/speculative-integers.js.map +1 -1
- package/dist/backend/llvm/speculative-integers.test.js +55 -1
- package/dist/backend/llvm/speculative-integers.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-reads.d.ts +1 -1
- package/dist/backend/llvm/string-reads.js +4 -4
- package/dist/backend/llvm/string-reads.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 +111 -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 +12 -0
- package/dist/backend/mangle.js +18 -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 +57 -0
- package/dist/backend/native/executable.js +211 -139
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/library.js +2 -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-codegen.d.ts +6 -0
- package/dist/backend/native-codegen.js +19 -0
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +27 -0
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +48 -0
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/native-profile.d.ts +32 -0
- package/dist/backend/native-profile.js +39 -0
- package/dist/backend/native-profile.js.map +1 -0
- package/dist/backend/native-profile.test.d.ts +1 -0
- package/dist/backend/native-profile.test.js +58 -0
- package/dist/backend/native-profile.test.js.map +1 -0
- package/dist/backend/native-tools.d.ts +14 -0
- package/dist/backend/native-tools.js +13 -0
- package/dist/backend/native-tools.js.map +1 -1
- package/dist/backend/publication.test.js +1 -1
- package/dist/backend/runtime-abi.d.ts +2 -2
- package/dist/backend/runtime-abi.js +2 -2
- package/dist/backend/runtime-pack-core.d.ts +13 -1
- package/dist/backend/runtime-pack-core.js +14 -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 +9 -1
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +9 -1
- 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 +15 -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 +8 -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 +106 -4
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/host.d.ts +3 -0
- package/dist/cli/output-options.d.ts +2 -0
- package/dist/cli/output-options.js +9 -0
- package/dist/cli/output-options.js.map +1 -1
- package/dist/cli/usage.d.ts +21 -1
- package/dist/cli/usage.js +43 -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 +22 -0
- package/dist/contracts/check.js +25 -8
- 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 +27 -0
- package/dist/executable/executable-cache.js +19 -1
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +12 -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/arguments-usage.d.ts +8 -0
- package/dist/frontend/arguments-usage.js +98 -0
- package/dist/frontend/arguments-usage.js.map +1 -1
- package/dist/frontend/arguments-usage.test.d.ts +1 -0
- package/dist/frontend/arguments-usage.test.js +32 -0
- package/dist/frontend/arguments-usage.test.js.map +1 -0
- 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/builtin-package-aliases.d.ts +24 -0
- package/dist/frontend/builtin-package-aliases.js +133 -0
- package/dist/frontend/builtin-package-aliases.js.map +1 -0
- package/dist/frontend/builtin-package-aliases.test.d.ts +1 -0
- package/dist/frontend/builtin-package-aliases.test.js +48 -0
- package/dist/frontend/builtin-package-aliases.test.js.map +1 -0
- 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/dts-paths.d.ts +4 -0
- package/dist/frontend/dts-paths.js +9 -1
- package/dist/frontend/dts-paths.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 +31 -0
- package/dist/frontend/lowering/builtins/builtin-class-dyn.js +205 -0
- package/dist/frontend/lowering/builtins/builtin-class-dyn.js.map +1 -0
- package/dist/frontend/lowering/builtins/callable-aliases.js +17 -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 +22 -0
- package/dist/frontend/lowering/builtins/crypto.js +215 -38
- 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/ecdh.d.ts +10 -0
- package/dist/frontend/lowering/builtins/ecdh.js +208 -0
- package/dist/frontend/lowering/builtins/ecdh.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 +284 -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 +41 -1
- package/dist/frontend/lowering/builtins/process.js +505 -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 +40 -0
- package/dist/frontend/lowering/builtins/promisify-callback.js +338 -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 +42 -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 +79 -30
- package/dist/frontend/lowering/builtins/timers.js.map +1 -1
- package/dist/frontend/lowering/builtins/typed-array-members.d.ts +7 -0
- package/dist/frontend/lowering/builtins/typed-array-members.js +160 -0
- package/dist/frontend/lowering/builtins/typed-array-members.js.map +1 -0
- 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 +23 -1
- package/dist/frontend/lowering/call-signatures.js +379 -55
- 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 +561 -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 +1124 -90
- 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.d.ts +10 -0
- package/dist/frontend/lowering/class-protocols.js +76 -45
- 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 +86 -19
- 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 +264 -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/fresh-spread.d.ts +13 -0
- package/dist/frontend/lowering/coercions/fresh-spread.js +95 -0
- package/dist/frontend/lowering/coercions/fresh-spread.js.map +1 -0
- package/dist/frontend/lowering/coercions/function-adapters.d.ts +16 -2
- package/dist/frontend/lowering/coercions/function-adapters.js +239 -68
- 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 +17 -0
- package/dist/frontend/lowering/containers/array-callbacks.js +287 -118
- 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 +58 -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 +94 -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.d.ts +9 -0
- package/dist/frontend/lowering/containers/bytes.js +649 -113
- 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 +126 -28
- 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 +455 -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 +30 -10
- package/dist/frontend/lowering/cycle-initialization.js +191 -35
- 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 +723 -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 +2557 -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 +1804 -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 +52 -0
- package/dist/frontend/lowering/expressions/keyed-field-targets.js +307 -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 +1337 -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 +301 -86
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.d.ts +3 -2
- package/dist/frontend/lowering/expressions/optional-chains.js +103 -17
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.d.ts +115 -0
- package/dist/frontend/lowering/expressions/property-access.js +3787 -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 +1724 -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 +551 -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-delegation.d.ts +8 -0
- package/dist/frontend/lowering/generator-delegation.js +191 -1
- package/dist/frontend/lowering/generator-delegation.js.map +1 -1
- 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 +43 -0
- package/dist/frontend/lowering/generic-functions.js +593 -118
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/handle-properties.d.ts +24 -0
- package/dist/frontend/lowering/handle-properties.js +281 -0
- package/dist/frontend/lowering/handle-properties.js.map +1 -0
- 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/iterable-spelling.d.ts +7 -0
- package/dist/frontend/lowering/iterable-spelling.js +38 -0
- package/dist/frontend/lowering/iterable-spelling.js.map +1 -0
- 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-array-sort.d.ts +33 -15
- package/dist/frontend/lowering/lower-array-sort.js +117 -21
- package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
- package/dist/frontend/lowering/lower-array-sort.test.js +93 -14
- package/dist/frontend/lowering/lower-array-sort.test.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 +33 -3
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.js +1404 -448
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +54 -3
- package/dist/frontend/lowering/lower-classes.js +1529 -472
- 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 +241 -21
- 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 +1509 -12486
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +72 -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 +39 -20
- 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 +900 -107
- 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.d.ts +11 -3
- package/dist/frontend/lowering/lower-modules.js +445 -94
- 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 +65 -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 +514 -101
- 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 +179 -118
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +30 -7
- package/dist/frontend/lowering/lower-stmts.js +1950 -433
- 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 +96 -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 +424 -27
- package/dist/frontend/lowering/lowerer.js +2062 -310
- 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/rebindable-functions.d.ts +8 -0
- package/dist/frontend/lowering/rebindable-functions.js +54 -0
- package/dist/frontend/lowering/rebindable-functions.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/static-typeof.d.ts +26 -0
- package/dist/frontend/lowering/static-typeof.js +133 -0
- package/dist/frontend/lowering/static-typeof.js.map +1 -0
- 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 +13 -12
- 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 +282 -45
- 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/thenables.d.ts +16 -0
- package/dist/frontend/lowering/thenables.js +124 -0
- package/dist/frontend/lowering/thenables.js.map +1 -0
- 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-builtin-aliases.d.ts +8 -0
- package/dist/frontend/npm-static-builtin-aliases.js +65 -0
- package/dist/frontend/npm-static-builtin-aliases.js.map +1 -0
- package/dist/frontend/npm-static-bundled-chunks.d.ts +58 -0
- package/dist/frontend/npm-static-bundled-chunks.js +981 -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 +399 -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 +988 -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 +336 -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-enum-iife.d.ts +6 -0
- package/dist/frontend/npm-static-enum-iife.js +280 -0
- package/dist/frontend/npm-static-enum-iife.js.map +1 -0
- package/dist/frontend/npm-static-enum-iife.test.d.ts +1 -0
- package/dist/frontend/npm-static-enum-iife.test.js +116 -0
- package/dist/frontend/npm-static-enum-iife.test.js.map +1 -0
- 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 +25 -1
- package/dist/frontend/npm-static.js +212 -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/npm.js +13 -0
- package/dist/frontend/npm.js.map +1 -1
- package/dist/frontend/package-shims.d.ts +47 -0
- package/dist/frontend/package-shims.js +300 -0
- package/dist/frontend/package-shims.js.map +1 -0
- package/dist/frontend/pipeline.js +230 -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 +100 -2
- package/dist/frontend/program.js +1627 -262
- 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 +49 -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 +26 -1
- package/dist/frontend/services.js +59 -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 +10 -5
- package/dist/frontend/ts7/program-host.js +19 -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 +57 -24
- package/dist/frontend/ts7/semantic-model.js +114 -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 +30 -15
- 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 +2735 -723
- 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 +4 -1
- package/dist/index.js +87 -8
- 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 +31 -0
- package/dist/ir/array-length-stability.js +249 -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 +134 -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 +116 -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 +540 -29
- 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 +7 -0
- package/dist/ir/integer-loop-facts.js +103 -17
- 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 +13 -1
- package/dist/ir/integer-ranges.js +125 -26
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +273 -2
- 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 +127 -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/js-ic.d.ts +52 -0
- package/dist/ir/js-ic.js +199 -0
- package/dist/ir/js-ic.js.map +1 -0
- package/dist/ir/js-ic.test.d.ts +1 -0
- package/dist/ir/js-ic.test.js +148 -0
- package/dist/ir/js-ic.test.js.map +1 -0
- package/dist/ir/jsval.d.ts +8 -0
- package/dist/ir/jsval.js +399 -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 +183 -33
- package/dist/ir/runtime-features.js +795 -422
- 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 +201 -150
- 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 +196 -76
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +41 -11
- 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 +14 -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 +22 -0
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.js +35 -6
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/compiler.test.js +2 -2
- package/dist/native/executable-cache.js +3 -0
- package/dist/native/executable-cache.js.map +1 -1
- package/dist/native/prepare.js +10 -0
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/sanitizer.test.js +19 -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 +22 -20
- package/shims/fs-extra/core/api.ts +1192 -0
- package/shims/fs-extra/index.ts +9 -0
- package/shims/undici/core/agent.ts +163 -0
- package/shims/undici/core/api.ts +93 -0
- package/shims/undici/core/client.ts +1304 -0
- package/shims/undici/core/connector.ts +157 -0
- package/shims/undici/core/diagnostics-types.ts +68 -0
- package/shims/undici/core/diagnostics.ts +16 -0
- package/shims/undici/core/dispatcher.ts +574 -0
- package/shims/undici/core/errors-v5.ts +22 -0
- package/shims/undici/core/errors-v7.ts +25 -0
- package/shims/undici/core/errors.ts +255 -0
- package/shims/undici/core/fetch.ts +635 -0
- package/shims/undici/core/pool.ts +280 -0
- package/shims/undici/core/readable.ts +268 -0
- package/shims/undici/core/request.ts +313 -0
- package/shims/undici/core/timers.ts +80 -0
- package/shims/undici/core/types.ts +167 -0
- package/shims/undici/core/util.ts +67 -0
- package/shims/undici/v5.ts +119 -0
- package/shims/undici/v7.ts +119 -0
- package/surface-manifest.json +304 -22
|
@@ -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";
|
|
@@ -6,14 +7,14 @@ import { BOOL, DYN, F64, STRING, UNDEFINED_T, VOID, arrayOf, canDynCheckTo, isUn
|
|
|
6
7
|
import { isCjsExportTableLiteral, isJsSourceFile, locOf } from "../../program.js";
|
|
7
8
|
import { NARROW_FIRST } from "../surfaces.js";
|
|
8
9
|
import { recordShapeMismatchDiag } from "../../../diagnostics/diagnostic.js";
|
|
9
|
-
import { PoisonError, neverTaintedJsType } from "../lowerer.js";
|
|
10
|
+
import { PoisonError, jsFuncNameOf, neverTaintedJsType } from "../lowerer.js";
|
|
10
11
|
import { lowerIndexMergeHelper } from "../containers/indexed-objects.js";
|
|
11
12
|
import { PERF_ENTRY_MARKER, isGenericCallableMemberType, jsOpenObjectType, } from "../../type-mapper.js";
|
|
12
13
|
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,
|
|
@@ -165,6 +166,18 @@ function propNameText(lowerer, name) {
|
|
|
165
166
|
return String(Number(name.text));
|
|
166
167
|
return name.text;
|
|
167
168
|
}
|
|
169
|
+
/** The name an anonymous function or a method takes from its property key
|
|
170
|
+
* (NamedEvaluation): an identifier, string or numeric key, or a computed
|
|
171
|
+
* key that folds to one string. Null for other keys. */
|
|
172
|
+
function propertyFunctionName(lowerer, name) {
|
|
173
|
+
if (ts.isComputedPropertyName(name))
|
|
174
|
+
return literalComputedKey(lowerer, name);
|
|
175
|
+
if (ts.isNumericLiteral(name))
|
|
176
|
+
return String(Number(name.text));
|
|
177
|
+
if (ts.isIdentifier(name) || ts.isStringLiteral(name))
|
|
178
|
+
return name.text;
|
|
179
|
+
return null;
|
|
180
|
+
}
|
|
168
181
|
/** The runtime-keyed JS object literal (a computed key that doesn't fold):
|
|
169
182
|
* builds a dyn object member-by-member. Keys evaluate before their values,
|
|
170
183
|
* properties in source order — JS's object-literal evaluation exactly.
|
|
@@ -221,7 +234,7 @@ export function lowerDynObjectLiteral(lowerer, expr, boxValue) {
|
|
|
221
234
|
: { kind: "libCall", fn: "dyn.assign", args: [acc, chunk], type: DYN, loc };
|
|
222
235
|
fields = [];
|
|
223
236
|
};
|
|
224
|
-
for (const prop of expr.properties) {
|
|
237
|
+
for (const prop of expr.properties.nodes) {
|
|
225
238
|
if (ts.isPropertyAssignment(prop) &&
|
|
226
239
|
!ts.isComputedPropertyName(prop.name) &&
|
|
227
240
|
prop.name.text === "__proto__") {
|
|
@@ -243,7 +256,7 @@ export function lowerDynObjectLiteral(lowerer, expr, boxValue) {
|
|
|
243
256
|
const builtin = lowerer.builtinNamespaceModuleOf(prop.expression);
|
|
244
257
|
const raw = builtin === "path" || builtin === "path/posix" || builtin === "path/win32"
|
|
245
258
|
? pathModuleValue(lowerer, builtin === "path" ? "path/posix" : builtin, locOf(prop))
|
|
246
|
-
: isJsSourceFile(
|
|
259
|
+
: isJsSourceFile(ts.getSourceFileOfNode(expr))
|
|
247
260
|
? lowerer.lowerExprExpecting(prop.expression, DYN)
|
|
248
261
|
: lowerer.lowerExpr(prop.expression);
|
|
249
262
|
fenceSymbolFieldCopy(lowerer, prop.expression, raw.type);
|
|
@@ -372,10 +385,29 @@ export function lowerDynObjectLiteral(lowerer, expr, boxValue) {
|
|
|
372
385
|
let v = boxValue
|
|
373
386
|
? boxValue(valueExpr, raw)
|
|
374
387
|
: lowerer.coerceToExpected(raw, DYN);
|
|
388
|
+
// A function that boxes into a property takes its name as Node gives
|
|
389
|
+
// it: a function read by name keeps that name (`{ f }`, `{ k: f }`),
|
|
390
|
+
// and an anonymous function or a method takes the property's name
|
|
391
|
+
// (`{ g: function () {} }`, `{ m() {} }`).
|
|
392
|
+
if (!boxValue &&
|
|
393
|
+
v.kind === "dynFrom" &&
|
|
394
|
+
v.value.type.kind === "func" &&
|
|
395
|
+
v.fnName === undefined) {
|
|
396
|
+
let anonymous = valueExpr;
|
|
397
|
+
while (ts.isParenthesizedExpression(anonymous))
|
|
398
|
+
anonymous = anonymous.expression;
|
|
399
|
+
const name = ts.isMethodDeclaration(prop) ||
|
|
400
|
+
((ts.isFunctionExpression(anonymous) || ts.isArrowFunction(anonymous)) &&
|
|
401
|
+
!(ts.isFunctionExpression(anonymous) && anonymous.name))
|
|
402
|
+
? propertyFunctionName(lowerer, prop.name)
|
|
403
|
+
: jsFuncNameOf(valueExpr, lowerer);
|
|
404
|
+
if (name !== null)
|
|
405
|
+
v = { ...v, fnName: name };
|
|
406
|
+
}
|
|
375
407
|
// A JS object's array-valued properties retain the same source array.
|
|
376
408
|
// Repeated references must compare equal and mutations remain shared.
|
|
377
409
|
if (!boxValue &&
|
|
378
|
-
isJsSourceFile(
|
|
410
|
+
isJsSourceFile(ts.getSourceFileOfNode(prop)) &&
|
|
379
411
|
v.kind === "dynFrom" &&
|
|
380
412
|
v.value.type.kind === "array") {
|
|
381
413
|
v = { ...v, liveRef: true };
|
|
@@ -442,7 +474,7 @@ function laterSpreadType(lowerer, expr) {
|
|
|
442
474
|
* the fallback does not apply (not a JS file, not a lambda, no func slot)
|
|
443
475
|
* — the caller lowers normally. ICEs (SC9001) never convert. */
|
|
444
476
|
function fenceClosureProbe(lowerer, node, slotType, attempt) {
|
|
445
|
-
if (!isJsSourceFile(
|
|
477
|
+
if (!isJsSourceFile(ts.getSourceFileOfNode(node)))
|
|
446
478
|
return null;
|
|
447
479
|
let inner = node;
|
|
448
480
|
while (ts.isParenthesizedExpression(inner))
|
|
@@ -458,7 +490,7 @@ function fenceClosureProbe(lowerer, node, slotType, attempt) {
|
|
|
458
490
|
// admits.
|
|
459
491
|
const fieldType = slotType !== undefined && slotType.kind === "func"
|
|
460
492
|
? slotType
|
|
461
|
-
: { kind: "func", params: inner.parameters.map(() => DYN), ret: DYN };
|
|
493
|
+
: { kind: "func", params: inner.parameters.nodes.map(() => DYN), ret: DYN };
|
|
462
494
|
if (slotType !== undefined && slotType.kind !== "func")
|
|
463
495
|
return null;
|
|
464
496
|
const diagsBefore = lowerer.diags.length;
|
|
@@ -508,7 +540,7 @@ function literalUnionArmOf(lowerer, expr, tsType, recordArms) {
|
|
|
508
540
|
return null;
|
|
509
541
|
const props = [];
|
|
510
542
|
let hasSpread = false;
|
|
511
|
-
for (const p of expr.properties) {
|
|
543
|
+
for (const p of expr.properties.nodes) {
|
|
512
544
|
if (ts.isPropertyAssignment(p) && !ts.isComputedPropertyName(p.name)) {
|
|
513
545
|
props.push({ name: propNameText(lowerer, p.name), type: lowerer.typeOf(p.initializer) });
|
|
514
546
|
}
|
|
@@ -529,7 +561,10 @@ function literalUnionArmOf(lowerer, expr, tsType, recordArms) {
|
|
|
529
561
|
return null;
|
|
530
562
|
props.length = 0;
|
|
531
563
|
for (const property of lowerer.checker.getPropertiesOfType(own)) {
|
|
532
|
-
props.push({
|
|
564
|
+
props.push({
|
|
565
|
+
name: ts.symbolName(property),
|
|
566
|
+
type: lowerer.checker.getTypeOfSymbol(property),
|
|
567
|
+
});
|
|
533
568
|
}
|
|
534
569
|
}
|
|
535
570
|
/** Cheap literal discriminants avoid checker traffic for unrelated arms.
|
|
@@ -596,6 +631,64 @@ function literalUnionArmOf(lowerer, expr, tsType, recordArms) {
|
|
|
596
631
|
/** Object spread treats nullish sources as empty. Preserve evaluation once,
|
|
597
632
|
* then turn `Record<K, V> | undefined` into either that record or a fresh
|
|
598
633
|
* empty record of the same represented shape. */
|
|
634
|
+
/** `{ ...unknownValue }` into a pure index-signature record (headers
|
|
635
|
+
* forwarded from an untyped parameter): Node copies the source's own
|
|
636
|
+
* enumerable keys in order, and spreads nothing for null, undefined,
|
|
637
|
+
* numbers and booleans. An object source converts through the checked
|
|
638
|
+
* extraction into the target's own shape, which keeps its keys and order
|
|
639
|
+
* and checks each value against the slot type (a value outside it throws
|
|
640
|
+
* the catchable TypeError of every unknown-to-typed conversion). A string
|
|
641
|
+
* source takes the same extraction, which rejects it, rather than
|
|
642
|
+
* silently dropping the characters Node would spread. Null for other
|
|
643
|
+
* sources and targets. */
|
|
644
|
+
function dynIndexSpreadSource(lowerer, source, target, loc) {
|
|
645
|
+
if (source.type.kind !== "dyn" || target.kind !== "record")
|
|
646
|
+
return null;
|
|
647
|
+
const shape = lowerer.shapes.get(target.shapeId);
|
|
648
|
+
if (!shape?.indexValue || shape.fields.length > 0 || shape.tuple)
|
|
649
|
+
return null;
|
|
650
|
+
if (!canDynCheckTo(target, (id) => lowerer.shapes.get(id), (id) => lowerer.unions.get(id)))
|
|
651
|
+
return null;
|
|
652
|
+
const local = lowerer.declareHiddenLocal("%dynSpread", DYN);
|
|
653
|
+
const ref = varRef(local.id, DYN, loc);
|
|
654
|
+
const test = (kind) => ({
|
|
655
|
+
kind: "dynTest",
|
|
656
|
+
test: kind,
|
|
657
|
+
value: ref,
|
|
658
|
+
type: BOOL,
|
|
659
|
+
loc,
|
|
660
|
+
});
|
|
661
|
+
const extract = { kind: "dynCheck", value: ref, type: target, loc };
|
|
662
|
+
const empty = { kind: "recordLit", fields: [], type: target, loc };
|
|
663
|
+
return {
|
|
664
|
+
kind: "seqExpr",
|
|
665
|
+
stmts: [{ kind: "varDecl", localId: local.id, init: source, loc }],
|
|
666
|
+
result: {
|
|
667
|
+
kind: "ternary",
|
|
668
|
+
cond: test("nullish"),
|
|
669
|
+
then: empty,
|
|
670
|
+
else_: {
|
|
671
|
+
kind: "ternary",
|
|
672
|
+
cond: {
|
|
673
|
+
kind: "logical",
|
|
674
|
+
op: "||",
|
|
675
|
+
left: test("object"),
|
|
676
|
+
right: test("string"),
|
|
677
|
+
type: BOOL,
|
|
678
|
+
loc,
|
|
679
|
+
},
|
|
680
|
+
then: extract,
|
|
681
|
+
else_: empty,
|
|
682
|
+
type: target,
|
|
683
|
+
loc,
|
|
684
|
+
},
|
|
685
|
+
type: target,
|
|
686
|
+
loc,
|
|
687
|
+
},
|
|
688
|
+
type: target,
|
|
689
|
+
loc,
|
|
690
|
+
};
|
|
691
|
+
}
|
|
599
692
|
function lowerOptionalIndexSpreadSource(lowerer, source, loc) {
|
|
600
693
|
if (source.type.kind !== "union")
|
|
601
694
|
return null;
|
|
@@ -647,16 +740,16 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
647
740
|
// Unannotated JavaScript accumulator fields have no element contract.
|
|
648
741
|
// Preserve their checked arrays instead of assigning never[] a numeric ABI.
|
|
649
742
|
if (!expected &&
|
|
650
|
-
isJsSourceFile(
|
|
651
|
-
expr.properties.some((prop) => ts.isPropertyAssignment(prop) &&
|
|
743
|
+
isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
|
|
744
|
+
expr.properties.nodes.some((prop) => ts.isPropertyAssignment(prop) &&
|
|
652
745
|
((ts.isArrayLiteralExpression(prop.initializer) &&
|
|
653
|
-
prop.initializer.elements.length === 0) ||
|
|
746
|
+
prop.initializer.elements.nodes.length === 0) ||
|
|
654
747
|
neverTaintedJsType(lowerer, prop.initializer, lowerer.typeOf(prop.initializer))))) {
|
|
655
748
|
return lowerDynObjectLiteral(lowerer, expr);
|
|
656
749
|
}
|
|
657
750
|
if (!expected &&
|
|
658
|
-
isJsSourceFile(
|
|
659
|
-
expr.properties.some((prop) => ts.isPropertyAssignment(prop) &&
|
|
751
|
+
isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
|
|
752
|
+
expr.properties.nodes.some((prop) => ts.isPropertyAssignment(prop) &&
|
|
660
753
|
lowerer.mapTypeOf(lowerer.typeOf(prop.initializer))?.kind === "array" &&
|
|
661
754
|
tryLowerExpression(lowerer, prop.initializer)?.type.kind === "dyn")) {
|
|
662
755
|
return lowerDynObjectLiteral(lowerer, expr);
|
|
@@ -665,8 +758,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
665
758
|
// documentation names a number. Inferred literal fields must preserve
|
|
666
759
|
// the represented binding rather than checking it back into that type.
|
|
667
760
|
if (!expected &&
|
|
668
|
-
isJsSourceFile(
|
|
669
|
-
expr.properties.some((prop) => {
|
|
761
|
+
isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
|
|
762
|
+
expr.properties.nodes.some((prop) => {
|
|
670
763
|
let value = ts.isPropertyAssignment(prop)
|
|
671
764
|
? prop.initializer
|
|
672
765
|
: ts.isShorthandPropertyAssignment(prop)
|
|
@@ -674,6 +767,10 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
674
767
|
: null;
|
|
675
768
|
while (value && ts.isParenthesizedExpression(value))
|
|
676
769
|
value = value.expression;
|
|
770
|
+
// A nested literal holding such a binding: building it as a static
|
|
771
|
+
// record would copy the binding's object.
|
|
772
|
+
if (value && (ts.isArrayLiteralExpression(value) || ts.isObjectLiteralExpression(value)))
|
|
773
|
+
return jsHoldsDynObject(lowerer, value);
|
|
677
774
|
if (!value || !ts.isIdentifier(value))
|
|
678
775
|
return false;
|
|
679
776
|
const stored = lowerer.peekLocal(value)?.type ?? lowerer.globalOf(value)?.type;
|
|
@@ -687,9 +784,9 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
687
784
|
}
|
|
688
785
|
// JavaScript object methods/accessors carry a live receiver. Keep the
|
|
689
786
|
// 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) ||
|
|
787
|
+
if (isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
|
|
788
|
+
(expr.properties.nodes.length === 0 ||
|
|
789
|
+
expr.properties.nodes.some((prop) => ts.isMethodDeclaration(prop) ||
|
|
693
790
|
ts.isGetAccessorDeclaration(prop) ||
|
|
694
791
|
ts.isSetAccessorDeclaration(prop)))) {
|
|
695
792
|
return lowerDynObjectLiteral(lowerer, expr);
|
|
@@ -698,7 +795,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
698
795
|
// Module collection already chose checked storage for this JavaScript
|
|
699
796
|
// binding. Construct in that representation: an intermediate record would
|
|
700
797
|
// check nested aliases back into inferred shapes and lose their identity.
|
|
701
|
-
if (isJsSourceFile(
|
|
798
|
+
if (isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
|
|
702
799
|
ts.isVariableDeclaration(expr.parent) &&
|
|
703
800
|
expr.parent.initializer === expr &&
|
|
704
801
|
ts.isIdentifier(expr.parent.name) &&
|
|
@@ -708,8 +805,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
708
805
|
// A checked spread carries runtime symbol keys and receiver-sensitive
|
|
709
806
|
// methods absent from its inferred record shape. Copy the real properties.
|
|
710
807
|
if (!expected &&
|
|
711
|
-
isJsSourceFile(
|
|
712
|
-
expr.properties.some((property) => ts.isSpreadAssignment(property) &&
|
|
808
|
+
isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
|
|
809
|
+
expr.properties.nodes.some((property) => ts.isSpreadAssignment(property) &&
|
|
713
810
|
(lowerer.builtinNamespaceModuleOf(property.expression)?.startsWith("path") ||
|
|
714
811
|
tryLowerExpression(lowerer, property.expression)?.type.kind === "dyn"))) {
|
|
715
812
|
return lowerDynObjectLiteral(lowerer, expr);
|
|
@@ -724,8 +821,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
724
821
|
// test/common's _mustCallInner context), where keys are runtime string
|
|
725
822
|
// values. TypeScript keeps the record world and its fence: this shape
|
|
726
823
|
// only arises in checked-dynamic JS.
|
|
727
|
-
if (isJsSourceFile(
|
|
728
|
-
expr.properties.some((p) => {
|
|
824
|
+
if (isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
|
|
825
|
+
expr.properties.nodes.some((p) => {
|
|
729
826
|
const n = ts.isSpreadAssignment(p) ? undefined : p.name;
|
|
730
827
|
return n !== undefined && ts.isComputedPropertyName(n);
|
|
731
828
|
})) {
|
|
@@ -735,7 +832,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
735
832
|
// message even when they also make the literal's type unmappable
|
|
736
833
|
// (a getter or a `this`-returning method would otherwise surface as an
|
|
737
834
|
// opaque type fence on the whole literal).
|
|
738
|
-
for (const prop of expr.properties) {
|
|
835
|
+
for (const prop of expr.properties.nodes) {
|
|
739
836
|
if (ts.isSpreadAssignment(prop)) {
|
|
740
837
|
// Supported shapes: FULL spreads of known record shapes read as
|
|
741
838
|
// identifiers or other side-effect-free reads, all BEFORE any
|
|
@@ -745,7 +842,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
745
842
|
// `k?: ...` — which desugar to one conditional field at the
|
|
746
843
|
// spread's own position (any position: they introduce one fresh
|
|
747
844
|
// name, collision-fenced below). Everything else stays fenced.
|
|
748
|
-
const cs = conditionalSpreadOf(prop.expression);
|
|
845
|
+
const cs = conditionalSpreadOf(prop.expression) ?? andSpreadOf(lowerer, prop.expression);
|
|
749
846
|
if (cs === "unsupported" || (cs && cs.props.length !== 1)) {
|
|
750
847
|
lowerer.unsupported("SC1090", prop, "conditional spreads beyond `...(c ? { field: v } : {})` (exactly one property against an empty arm — spell other shapes as optional fields)");
|
|
751
848
|
}
|
|
@@ -766,7 +863,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
766
863
|
// receiver (capturing the record under construction would be an
|
|
767
864
|
// RC cycle), and the generic lexical-this walk would incorrectly
|
|
768
865
|
// capture an ENCLOSING method's `this` — the object-method rule.
|
|
769
|
-
if (!isJsSourceFile(
|
|
866
|
+
if (!isJsSourceFile(ts.getSourceFileOfNode(expr))) {
|
|
770
867
|
rejectThisInObjectAccessor(lowerer, prop.body ?? prop);
|
|
771
868
|
}
|
|
772
869
|
}
|
|
@@ -838,7 +935,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
838
935
|
// type narrows away (a field written as `lanIp: null` types as bare
|
|
839
936
|
// `null`, which maps to nothing on its own).
|
|
840
937
|
if (tsType.isUnionType() &&
|
|
841
|
-
ts.constituentTypes(tsType).some((t) => t.getSymbol()
|
|
938
|
+
ts.constituentTypes(tsType).some((t) => ts.symbolNameOf(t.getSymbol()) === "PromiseLike")) {
|
|
842
939
|
tsType = lowerer.checker.getAwaitedType(tsType) ?? tsType;
|
|
843
940
|
}
|
|
844
941
|
let mapped = lowerer.mapTypeOf(tsType);
|
|
@@ -847,13 +944,13 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
847
944
|
// Keep a checked-dynamic destination in that representation so copying
|
|
848
945
|
// preserves keys, evaluation order, and fields overwritten afterwards.
|
|
849
946
|
if (mapped?.kind === "dyn" &&
|
|
850
|
-
expr.properties.some((p) => ts.isSpreadAssignment(p) && lowerer.mapTypeOf(lowerer.typeOf(p.expression))?.kind === "dyn")) {
|
|
947
|
+
expr.properties.nodes.some((p) => ts.isSpreadAssignment(p) && lowerer.mapTypeOf(lowerer.typeOf(p.expression))?.kind === "dyn")) {
|
|
851
948
|
return lowerDynObjectLiteral(lowerer, expr);
|
|
852
949
|
}
|
|
853
950
|
// A JavaScript call can contextually type an object literal as string even
|
|
854
951
|
// though the literal itself is a record. Keep its own shape so a caller
|
|
855
952
|
// performing ToString can convert it after the value is built.
|
|
856
|
-
if (mapped?.kind === "string" && isJsSourceFile(
|
|
953
|
+
if (mapped?.kind === "string" && isJsSourceFile(ts.getSourceFileOfNode(expr))) {
|
|
857
954
|
const own = lowerer.mapTypeOf(lowerer.typeOf(expr));
|
|
858
955
|
if (own?.kind === "record")
|
|
859
956
|
mapped = own;
|
|
@@ -863,7 +960,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
863
960
|
// object): `{}` carries no shape information, so the literal builds as
|
|
864
961
|
// its OWN type, exactly the unmappable-context fallback below. An
|
|
865
962
|
// empty LITERAL keeps the context (the shapes agree).
|
|
866
|
-
if (mapped?.kind === "record" && expr.properties.length > 0) {
|
|
963
|
+
if (mapped?.kind === "record" && expr.properties.nodes.length > 0) {
|
|
867
964
|
const ctxShape = lowerer.shapes.get(mapped.shapeId);
|
|
868
965
|
if (ctxShape && ctxShape.fields.length === 0 && !ctxShape.indexValue && !ctxShape.tuple) {
|
|
869
966
|
mapped = lowerer.mapTypeOf(lowerer.typeOf(expr)) ?? mapped;
|
|
@@ -879,7 +976,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
879
976
|
// type carries but the shape dropped (settled value/reason,
|
|
880
977
|
// generic-callable members) belongs to the drop paths below, and
|
|
881
978
|
// index-signature contexts keep every key (overflow capture).
|
|
882
|
-
if (mapped?.kind === "record" && expr.properties.length > 0) {
|
|
979
|
+
if (mapped?.kind === "record" && expr.properties.nodes.length > 0) {
|
|
883
980
|
const ctxShape = lowerer.shapes.get(mapped.shapeId);
|
|
884
981
|
if (ctxShape && !ctxShape.indexValue && !ctxShape.tuple) {
|
|
885
982
|
const names = new Set(ctxShape.fields.map((f) => f.name));
|
|
@@ -888,7 +985,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
888
985
|
return members.some((m) => lowerer.checker.getPropertyOfType(m, name) !== undefined);
|
|
889
986
|
};
|
|
890
987
|
const extraOf = (text) => !names.has(text) && !ctxHasProp(text);
|
|
891
|
-
const extra = expr.properties.some((p) => {
|
|
988
|
+
const extra = expr.properties.nodes.some((p) => {
|
|
892
989
|
if (ts.isSpreadAssignment(p) || !p.name)
|
|
893
990
|
return false;
|
|
894
991
|
if (ts.isIdentifier(p.name) || ts.isStringLiteral(p.name))
|
|
@@ -945,7 +1042,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
945
1042
|
!armShape?.tuple &&
|
|
946
1043
|
// `{} | undefined` supplies no layout for a populated options
|
|
947
1044
|
// literal, just as a bare empty-record context supplies none.
|
|
948
|
-
(expr.properties.length === 0 ||
|
|
1045
|
+
(expr.properties.nodes.length === 0 ||
|
|
949
1046
|
(armShape && (armShape.fields.length > 0 || armShape.indexValue)))) {
|
|
950
1047
|
mapped = recordArms[0];
|
|
951
1048
|
}
|
|
@@ -970,7 +1067,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
970
1067
|
// already appears in the union.
|
|
971
1068
|
if (ownShapeId === null ||
|
|
972
1069
|
!recordArms.some((a) => a.shapeId === ownShapeId) ||
|
|
973
|
-
expr.properties.some(ts.isSpreadAssignment)) {
|
|
1070
|
+
expr.properties.nodes.some(ts.isSpreadAssignment)) {
|
|
974
1071
|
const arm = literalUnionArmOf(lowerer, expr, tsType, recordArms);
|
|
975
1072
|
if (arm)
|
|
976
1073
|
mapped = arm;
|
|
@@ -985,12 +1082,12 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
985
1082
|
// lower; accessor entries and members with no value representation
|
|
986
1083
|
// (rest-param function types) narrow away. SEMANTICS.md documents the
|
|
987
1084
|
// enumeration divergence.
|
|
988
|
-
if (isJsSourceFile(
|
|
1085
|
+
if (isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
|
|
989
1086
|
(!mapped ||
|
|
990
|
-
expr.properties.some((p) => ts.isGetAccessorDeclaration(p) || ts.isSetAccessorDeclaration(p))) &&
|
|
1087
|
+
expr.properties.nodes.some((p) => ts.isGetAccessorDeclaration(p) || ts.isSetAccessorDeclaration(p))) &&
|
|
991
1088
|
isCjsExportTableLiteral(expr)) {
|
|
992
1089
|
const fields = [];
|
|
993
|
-
for (const prop of expr.properties) {
|
|
1090
|
+
for (const prop of expr.properties.nodes) {
|
|
994
1091
|
if (ts.isGetAccessorDeclaration(prop) || ts.isSetAccessorDeclaration(prop))
|
|
995
1092
|
continue;
|
|
996
1093
|
const propName = ts.isSpreadAssignment(prop) ? undefined : prop.name;
|
|
@@ -1024,7 +1121,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1024
1121
|
// each field converts through the usual dyn boundary, and dynamic
|
|
1025
1122
|
// consumers ride the keyed-dyn paths. TypeScript keeps the fence.
|
|
1026
1123
|
if (mapped?.kind === "dyn" ||
|
|
1027
|
-
(!mapped && isJsSourceFile(
|
|
1124
|
+
(!mapped && isJsSourceFile(ts.getSourceFileOfNode(expr))) ||
|
|
1028
1125
|
(!expected &&
|
|
1029
1126
|
mapped &&
|
|
1030
1127
|
jsOpenObjectType(expr, mapped, lowerer.shapes, lowerer.unions).kind === "dyn")) {
|
|
@@ -1039,8 +1136,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1039
1136
|
// until the join supplies it. Existing values still use width coercion;
|
|
1040
1137
|
// extra fields, spreads, accessors, and keyed shapes retain their paths.
|
|
1041
1138
|
if (expected &&
|
|
1042
|
-
!isJsSourceFile(
|
|
1043
|
-
expr.properties.every((p) => ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p))) {
|
|
1139
|
+
!isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
|
|
1140
|
+
expr.properties.nodes.every((p) => ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p))) {
|
|
1044
1141
|
const own = lowerer.shapes.get(type.shapeId);
|
|
1045
1142
|
const target = lowerer.shapes.get(expected.shapeId);
|
|
1046
1143
|
if (!own.tuple &&
|
|
@@ -1055,10 +1152,29 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1055
1152
|
type = { kind: "record", shapeId: expected.shapeId };
|
|
1056
1153
|
}
|
|
1057
1154
|
}
|
|
1155
|
+
// A Date's toJSON() result keeps its null in a field with no declared
|
|
1156
|
+
// destination: the lib types say string.
|
|
1157
|
+
if (!expected) {
|
|
1158
|
+
for (const property of expr.properties.nodes) {
|
|
1159
|
+
const value = ts.isPropertyAssignment(property)
|
|
1160
|
+
? property.initializer
|
|
1161
|
+
: ts.isShorthandPropertyAssignment(property)
|
|
1162
|
+
? property.name
|
|
1163
|
+
: null;
|
|
1164
|
+
if (value &&
|
|
1165
|
+
property.name &&
|
|
1166
|
+
(ts.isIdentifier(property.name) || ts.isStringLiteral(property.name)) &&
|
|
1167
|
+
isDateJsonSource(lowerer, value)) {
|
|
1168
|
+
const widened = lowerer.runtimeOptionalRecordField(type, property.name.text, dateJsonType(lowerer));
|
|
1169
|
+
if (widened.kind === "record")
|
|
1170
|
+
type = { kind: "record", shapeId: widened.shapeId };
|
|
1171
|
+
}
|
|
1172
|
+
}
|
|
1173
|
+
}
|
|
1058
1174
|
let shape = lowerer.shapes.get(type.shapeId);
|
|
1059
1175
|
// JavaScript Dates carry native object identity in checked storage. An
|
|
1060
1176
|
// inferred scalar Date field would erase that identity before boxing.
|
|
1061
|
-
if (isJsSourceFile(
|
|
1177
|
+
if (isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
|
|
1062
1178
|
shape.fields.some((field) => field.type.kind === "date")) {
|
|
1063
1179
|
return lowerDynObjectLiteral(lowerer, expr);
|
|
1064
1180
|
}
|
|
@@ -1067,8 +1183,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1067
1183
|
// so the literal's shape NARROWS to its plain fields (reads resolve
|
|
1068
1184
|
// through the lifted accessors; Object.keys over the value omits
|
|
1069
1185
|
// accessor names — the documented divergence).
|
|
1070
|
-
if (isJsSourceFile(
|
|
1071
|
-
const accessorNames = new Set(expr.properties
|
|
1186
|
+
if (isJsSourceFile(ts.getSourceFileOfNode(expr))) {
|
|
1187
|
+
const accessorNames = new Set(expr.properties.nodes
|
|
1072
1188
|
.filter((p) => ts.isGetAccessorDeclaration(p) || ts.isSetAccessorDeclaration(p))
|
|
1073
1189
|
.map((p) => p.name && (ts.isIdentifier(p.name) || ts.isStringLiteral(p.name)) ? p.name.text : "")
|
|
1074
1190
|
.filter((n) => n !== ""));
|
|
@@ -1088,10 +1204,10 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1088
1204
|
expr.parent.initializer === expr &&
|
|
1089
1205
|
ts.isVariableStatement(expr.parent?.parent?.parent) &&
|
|
1090
1206
|
ts.isSourceFile(expr.parent?.parent?.parent?.parent);
|
|
1091
|
-
const assignedProperties = expr.properties.filter((prop) => ts.isPropertyAssignment(prop) || ts.isShorthandPropertyAssignment(prop));
|
|
1207
|
+
const assignedProperties = expr.properties.nodes.filter((prop) => ts.isPropertyAssignment(prop) || ts.isShorthandPropertyAssignment(prop));
|
|
1092
1208
|
if (topLevelJsDecl &&
|
|
1093
|
-
isJsSourceFile(
|
|
1094
|
-
assignedProperties.length === expr.properties.length) {
|
|
1209
|
+
isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
|
|
1210
|
+
assignedProperties.length === expr.properties.nodes.length) {
|
|
1095
1211
|
const provided = new Set(assignedProperties.map((prop) => propNameText(lowerer, prop.name)));
|
|
1096
1212
|
if (shape.fields.some((field) => !provided.has(field.name))) {
|
|
1097
1213
|
return lowerDynObjectLiteral(lowerer, expr);
|
|
@@ -1114,14 +1230,15 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1114
1230
|
// Stay deliberately narrow. Tuple/index/accessor shapes, conditional or
|
|
1115
1231
|
// multiple spreads, spread-after-explicit order, and shape-changing width
|
|
1116
1232
|
// copies retain their existing lowering and diagnostics.
|
|
1117
|
-
if (!isJsSourceFile(
|
|
1233
|
+
if (!isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
|
|
1118
1234
|
!shape.indexValue &&
|
|
1119
1235
|
!shape.tuple &&
|
|
1120
1236
|
!shapeHasAccessorSlots(shape) &&
|
|
1121
|
-
expr.properties.length >= 2 &&
|
|
1122
|
-
ts.isSpreadAssignment(expr.properties[0]) &&
|
|
1123
|
-
!conditionalSpreadOf(expr.properties[0].expression) &&
|
|
1124
|
-
expr.properties
|
|
1237
|
+
expr.properties.nodes.length >= 2 &&
|
|
1238
|
+
ts.isSpreadAssignment(expr.properties.nodes[0]) &&
|
|
1239
|
+
!conditionalSpreadOf(expr.properties.nodes[0].expression) &&
|
|
1240
|
+
!andSpreadOf(lowerer, expr.properties.nodes[0].expression) &&
|
|
1241
|
+
expr.properties.nodes
|
|
1125
1242
|
.slice(1)
|
|
1126
1243
|
.every((p) => (ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
|
|
1127
1244
|
p.name !== undefined &&
|
|
@@ -1129,8 +1246,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1129
1246
|
ts.isStringLiteral(p.name) ||
|
|
1130
1247
|
ts.isNumericLiteral(p.name) ||
|
|
1131
1248
|
(ts.isComputedPropertyName(p.name) && literalComputedKey(lowerer, p.name) !== null)))) {
|
|
1132
|
-
const spread = expr.properties[0];
|
|
1133
|
-
const props = expr.properties.slice(1);
|
|
1249
|
+
const spread = expr.properties.nodes[0];
|
|
1250
|
+
const props = expr.properties.nodes.slice(1);
|
|
1134
1251
|
const names = props.map((p) => propNameText(lowerer, p.name));
|
|
1135
1252
|
const unique = new Set(names);
|
|
1136
1253
|
const sourceType = lowerer.mapTypeOf(lowerer.typeOf(spread.expression));
|
|
@@ -1178,13 +1295,13 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1178
1295
|
if (shape.indexValue &&
|
|
1179
1296
|
shape.fields.length === 0 &&
|
|
1180
1297
|
!shape.tuple &&
|
|
1181
|
-
(expr.properties.some((p) => ts.isSpreadAssignment(p)) ||
|
|
1182
|
-
expr.properties.some(isRuntimeComputedKey))) {
|
|
1298
|
+
(expr.properties.nodes.some((p) => ts.isSpreadAssignment(p)) ||
|
|
1299
|
+
expr.properties.nodes.some(isRuntimeComputedKey))) {
|
|
1183
1300
|
const contributors = [];
|
|
1184
1301
|
let mergeable = true;
|
|
1185
|
-
for (const prop of expr.properties) {
|
|
1302
|
+
for (const prop of expr.properties.nodes) {
|
|
1186
1303
|
if (ts.isSpreadAssignment(prop)) {
|
|
1187
|
-
const cs = conditionalSpreadOf(prop.expression);
|
|
1304
|
+
const cs = conditionalSpreadOf(prop.expression) ?? andSpreadOf(lowerer, prop.expression);
|
|
1188
1305
|
if (cs === "unsupported" || (cs && cs.props.length !== 1)) {
|
|
1189
1306
|
lowerer.unsupported("SC1090", prop, "conditional spreads beyond `...(c ? { field: v } : {})` (exactly one property against an empty arm)");
|
|
1190
1307
|
}
|
|
@@ -1200,7 +1317,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1200
1317
|
? lowerer.lowerExpr(csProp.initializer)
|
|
1201
1318
|
: lowerer.lowerShorthandValue(csProp), shape.indexValue, vNode);
|
|
1202
1319
|
contributors.push({
|
|
1203
|
-
kind: "
|
|
1320
|
+
kind: "condField",
|
|
1204
1321
|
name: csProp.name.text,
|
|
1205
1322
|
value: {
|
|
1206
1323
|
kind: "ternary",
|
|
@@ -1215,6 +1332,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1215
1332
|
}
|
|
1216
1333
|
let src = lowerer.lowerExpr(prop.expression);
|
|
1217
1334
|
src = lowerOptionalIndexSpreadSource(lowerer, src, locOf(prop)) ?? src;
|
|
1335
|
+
src = dynIndexSpreadSource(lowerer, src, type, locOf(prop)) ?? src;
|
|
1218
1336
|
if (src.type.kind !== "record") {
|
|
1219
1337
|
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
1338
|
}
|
|
@@ -1272,7 +1390,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1272
1390
|
}
|
|
1273
1391
|
// Unfoldable computed keys outside the index-signature merge path:
|
|
1274
1392
|
// no record shape can hold a runtime-decided name.
|
|
1275
|
-
for (const prop of expr.properties) {
|
|
1393
|
+
for (const prop of expr.properties.nodes) {
|
|
1276
1394
|
if (isRuntimeComputedKey(prop)) {
|
|
1277
1395
|
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
1396
|
}
|
|
@@ -1284,9 +1402,11 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1284
1402
|
if (!shape.indexValue &&
|
|
1285
1403
|
!shape.tuple &&
|
|
1286
1404
|
shape.fields.length > 0 &&
|
|
1287
|
-
expr.properties.length > 0 &&
|
|
1288
|
-
expr.properties.every((p) => ts.isSpreadAssignment(p) &&
|
|
1289
|
-
|
|
1405
|
+
expr.properties.nodes.length > 0 &&
|
|
1406
|
+
expr.properties.nodes.every((p) => ts.isSpreadAssignment(p) &&
|
|
1407
|
+
!conditionalSpreadOf(p.expression) &&
|
|
1408
|
+
!andSpreadOf(lowerer, p.expression)) &&
|
|
1409
|
+
expr.properties.nodes.some((p) => {
|
|
1290
1410
|
const t = lowerer.mapTypeOf(lowerer.typeOf(p.expression));
|
|
1291
1411
|
return (t?.kind === "dyn" || (t?.kind === "record" && !!lowerer.shapes.get(t.shapeId)?.indexValue));
|
|
1292
1412
|
})) {
|
|
@@ -1301,7 +1421,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1301
1421
|
};
|
|
1302
1422
|
const fields = [];
|
|
1303
1423
|
const spreadStmts = [];
|
|
1304
|
-
const hasSpread = expr.properties.some(ts.isSpreadAssignment);
|
|
1424
|
+
const hasSpread = expr.properties.nodes.some(ts.isSpreadAssignment);
|
|
1305
1425
|
const captured = new Set();
|
|
1306
1426
|
const capture = (value) => {
|
|
1307
1427
|
const local = lowerer.declareHiddenLocal("%spreadValue", value.type);
|
|
@@ -1380,7 +1500,9 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1380
1500
|
// Member names DROPPED from the shape (JS deferral — unlowerable pure
|
|
1381
1501
|
// member reads narrow away; see the catch in the property loop).
|
|
1382
1502
|
const droppedNames = new Set();
|
|
1383
|
-
|
|
1503
|
+
// The order this literal creates its keys in (key-order-witness.ts).
|
|
1504
|
+
const orderSegments = [];
|
|
1505
|
+
for (const prop of expr.properties.nodes) {
|
|
1384
1506
|
// A later contributor can mutate an earlier source or overwrite a
|
|
1385
1507
|
// value with effects. Snapshot pending fields at their source position,
|
|
1386
1508
|
// before evaluating the next contributor, even if they are overwritten.
|
|
@@ -1391,7 +1513,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1391
1513
|
}
|
|
1392
1514
|
}
|
|
1393
1515
|
if (ts.isSpreadAssignment(prop)) {
|
|
1394
|
-
const cs = conditionalSpreadOf(prop.expression);
|
|
1516
|
+
const cs = conditionalSpreadOf(prop.expression) ?? andSpreadOf(lowerer, prop.expression);
|
|
1395
1517
|
if (cs && cs !== "unsupported") {
|
|
1396
1518
|
// `...(c ? { k: v } : {})` — ONE conditional field at the
|
|
1397
1519
|
// spread's own position: cond evaluates exactly once, `v` only
|
|
@@ -1408,7 +1530,10 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1408
1530
|
}
|
|
1409
1531
|
shapeMismatch(prop);
|
|
1410
1532
|
}
|
|
1411
|
-
|
|
1533
|
+
// An 'unknown' slot holds the checked-dynamic undefined for the
|
|
1534
|
+
// empty arm, the absent-property read the width copy uses too.
|
|
1535
|
+
const absent = lowerer.absentFieldValue(fieldType, locOf(prop)) ??
|
|
1536
|
+
(fieldType.kind === "dyn" ? dynUndefinedExpr(locOf(prop)) : null);
|
|
1412
1537
|
if (!absent) {
|
|
1413
1538
|
lowerer.unsupported("SC1090", prop, `conditional spreads onto the required field '${name}' (the empty arm leaves it undefined — declare the field optional)`);
|
|
1414
1539
|
}
|
|
@@ -1424,6 +1549,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1424
1549
|
if (!typeEquals(v.type, fieldType))
|
|
1425
1550
|
lowerer.badType(valueNode, lowerer.typeOf(valueNode));
|
|
1426
1551
|
conditionalNames.add(name);
|
|
1552
|
+
orderSegments.push({ kind: "key", name, definite: false });
|
|
1427
1553
|
fields.push({
|
|
1428
1554
|
name,
|
|
1429
1555
|
value: {
|
|
@@ -1447,7 +1573,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1447
1573
|
let srcNode = prop.expression;
|
|
1448
1574
|
while (ts.isParenthesizedExpression(srcNode))
|
|
1449
1575
|
srcNode = srcNode.expression;
|
|
1450
|
-
const srcLowered = capture(prop === expr.properties[0] && leadingSpreadLowered !== null
|
|
1576
|
+
const srcLowered = capture(prop === expr.properties.nodes[0] && leadingSpreadLowered !== null
|
|
1451
1577
|
? leadingSpreadLowered
|
|
1452
1578
|
: lowerer.lowerExpr(srcNode));
|
|
1453
1579
|
// Array callbacks can receive a record-or-undefined ABI even when
|
|
@@ -1491,9 +1617,9 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1491
1617
|
lowerer.unsupported("SC1090", prop, "object spread involving index-signature shapes (overflow keys are runtime state — copy the fields you need explicitly)");
|
|
1492
1618
|
}
|
|
1493
1619
|
const laterNames = new Set();
|
|
1494
|
-
for (const later of expr.properties.slice(expr.properties.indexOf(prop) + 1)) {
|
|
1620
|
+
for (const later of expr.properties.nodes.slice(expr.properties.nodes.indexOf(prop) + 1)) {
|
|
1495
1621
|
if (ts.isSpreadAssignment(later)) {
|
|
1496
|
-
if (conditionalSpreadOf(later.expression))
|
|
1622
|
+
if (conditionalSpreadOf(later.expression) || andSpreadOf(lowerer, later.expression))
|
|
1497
1623
|
continue;
|
|
1498
1624
|
const lt = laterSpreadType(lowerer, later.expression);
|
|
1499
1625
|
if (lt?.kind === "record") {
|
|
@@ -1514,6 +1640,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1514
1640
|
}
|
|
1515
1641
|
}
|
|
1516
1642
|
const srcRef = () => srcLowered ?? lowerer.lowerExpr(srcNode);
|
|
1643
|
+
orderSegments.push({ kind: "spread", shapeId: recArm.shapeId, maybeAbsent: true });
|
|
1517
1644
|
for (const f of srcShape.fields) {
|
|
1518
1645
|
if (laterNames.has(f.name))
|
|
1519
1646
|
continue;
|
|
@@ -1689,9 +1816,9 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1689
1816
|
// exactly like Node does. Conditional spreads don't count (their
|
|
1690
1817
|
// empty arm defines nothing) — their own collision fences hold.
|
|
1691
1818
|
const laterNames = new Set();
|
|
1692
|
-
for (const later of expr.properties.slice(expr.properties.indexOf(prop) + 1)) {
|
|
1819
|
+
for (const later of expr.properties.nodes.slice(expr.properties.nodes.indexOf(prop) + 1)) {
|
|
1693
1820
|
if (ts.isSpreadAssignment(later)) {
|
|
1694
|
-
if (conditionalSpreadOf(later.expression))
|
|
1821
|
+
if (conditionalSpreadOf(later.expression) || andSpreadOf(lowerer, later.expression))
|
|
1695
1822
|
continue;
|
|
1696
1823
|
const lt = laterSpreadType(lowerer, later.expression);
|
|
1697
1824
|
if (lt?.kind === "record") {
|
|
@@ -1711,6 +1838,10 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1711
1838
|
laterNames.add(propNameText(lowerer, later.name));
|
|
1712
1839
|
}
|
|
1713
1840
|
}
|
|
1841
|
+
// A checked-dynamic source's keys are a run-time fact.
|
|
1842
|
+
orderSegments.push(srcLowered.type.kind === "dyn"
|
|
1843
|
+
? { kind: "opaque" }
|
|
1844
|
+
: { kind: "spread", shapeId: srcType.shapeId, maybeAbsent: false });
|
|
1714
1845
|
for (const f of srcShape.fields) {
|
|
1715
1846
|
if (laterNames.has(f.name))
|
|
1716
1847
|
continue;
|
|
@@ -1836,7 +1967,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1836
1967
|
// closures is side-effect-free, so their position among the data
|
|
1837
1968
|
// fields' source-order evaluation is unobservable — exactly JS,
|
|
1838
1969
|
// where accessor definitions evaluate nothing.
|
|
1839
|
-
if (isJsSourceFile(
|
|
1970
|
+
if (isJsSourceFile(ts.getSourceFileOfNode(expr)))
|
|
1840
1971
|
continue;
|
|
1841
1972
|
const name = propNameText(lowerer, prop.name); // key-form-checked above
|
|
1842
1973
|
const slotName = `${ts.isGetAccessorDeclaration(prop) ? "%get" : "%set"}:${name}`;
|
|
@@ -1912,7 +2043,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1912
2043
|
// reads; the field promotion below adopts that layout.
|
|
1913
2044
|
(fieldType?.kind === "record" &&
|
|
1914
2045
|
ts.isObjectLiteralExpression(init) &&
|
|
1915
|
-
init.properties.length > 0
|
|
2046
|
+
init.properties.nodes.length > 0
|
|
1916
2047
|
? (() => {
|
|
1917
2048
|
const nested = lowerer.lowerObjectLiteral(init, fieldType);
|
|
1918
2049
|
return lowerer.isRuntimeOptionalRecordVariant(nested.type, fieldType)
|
|
@@ -1951,7 +2082,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1951
2082
|
(ts.isPropertyAssignment(prop) && ts.isIdentifier(prop.initializer));
|
|
1952
2083
|
if (!(err instanceof PoisonError) ||
|
|
1953
2084
|
!pureMember ||
|
|
1954
|
-
!isJsSourceFile(
|
|
2085
|
+
!isJsSourceFile(ts.getSourceFileOfNode(expr)) ||
|
|
1955
2086
|
lowerer.diagSink !== null ||
|
|
1956
2087
|
lowerer.diags.length <= propDiagsBefore ||
|
|
1957
2088
|
lowerer.diags.slice(propDiagsBefore).some((d) => d.code === "SC9001")) {
|
|
@@ -1999,6 +2130,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1999
2130
|
if (at >= 0)
|
|
2000
2131
|
fields.splice(at, 1);
|
|
2001
2132
|
fields.push({ name, value });
|
|
2133
|
+
orderSegments.push({ kind: "key", name, definite: true });
|
|
2002
2134
|
}
|
|
2003
2135
|
// Optional fields may be omitted: the field holds its absent state.
|
|
2004
2136
|
// tsc rejects omission of required fields before lowering.
|
|
@@ -2024,7 +2156,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
2024
2156
|
fields.push({ name: f.name, value: absent });
|
|
2025
2157
|
}
|
|
2026
2158
|
}
|
|
2027
|
-
const result = { kind: "recordLit", fields, type, loc };
|
|
2159
|
+
const result = lowerer.keyOrder.literal({ kind: "recordLit", fields, type, loc }, orderSegments);
|
|
2028
2160
|
return spreadStmts.length === 0
|
|
2029
2161
|
? result
|
|
2030
2162
|
: { kind: "seqExpr", stmts: spreadStmts, result, type, loc };
|
|
@@ -2036,9 +2168,9 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
2036
2168
|
* their identity. Changing a discriminator or adding variant-specific
|
|
2037
2169
|
* fields needs a different result layout and stays on the ordinary path. */
|
|
2038
2170
|
function lowerUnionRecordClone(lowerer, expr) {
|
|
2039
|
-
if (isJsSourceFile(
|
|
2171
|
+
if (isJsSourceFile(ts.getSourceFileOfNode(expr)))
|
|
2040
2172
|
return null;
|
|
2041
|
-
const spread = expr.properties[0];
|
|
2173
|
+
const spread = expr.properties.nodes[0];
|
|
2042
2174
|
if (!spread || !ts.isSpreadAssignment(spread))
|
|
2043
2175
|
return null;
|
|
2044
2176
|
let sourceNode = spread.expression;
|
|
@@ -2056,7 +2188,7 @@ function lowerUnionRecordClone(lowerer, expr) {
|
|
|
2056
2188
|
return null;
|
|
2057
2189
|
const props = [];
|
|
2058
2190
|
const names = [];
|
|
2059
|
-
for (const prop of expr.properties.slice(1)) {
|
|
2191
|
+
for (const prop of expr.properties.nodes.slice(1)) {
|
|
2060
2192
|
if ((!ts.isPropertyAssignment(prop) && !ts.isShorthandPropertyAssignment(prop)) ||
|
|
2061
2193
|
(!ts.isIdentifier(prop.name) && !ts.isStringLiteral(prop.name)))
|
|
2062
2194
|
return null;
|
|
@@ -2196,6 +2328,73 @@ function lowerUnionRecordClone(lowerer, expr) {
|
|
|
2196
2328
|
loc,
|
|
2197
2329
|
};
|
|
2198
2330
|
}
|
|
2331
|
+
/** `...(c && { k: v })`: spreading a falsy primitive (false, 0, "", NaN)
|
|
2332
|
+
* copies nothing, so the idiom is `...(c ? { k: v } : {})` with `c`
|
|
2333
|
+
* evaluated once. Recognized only where the spread's own type mixes the
|
|
2334
|
+
* record with primitive arms; a record or record-or-unit spread keeps the
|
|
2335
|
+
* ordinary source-copy path. */
|
|
2336
|
+
export function andSpreadOf(lowerer, expr) {
|
|
2337
|
+
let e = expr;
|
|
2338
|
+
while (ts.isParenthesizedExpression(e))
|
|
2339
|
+
e = e.expression;
|
|
2340
|
+
if (!ts.isBinaryExpression(e) || e.operatorToken.kind !== ts.SyntaxKind.AmpersandAmpersandToken)
|
|
2341
|
+
return null;
|
|
2342
|
+
let right = e.right;
|
|
2343
|
+
while (ts.isParenthesizedExpression(right))
|
|
2344
|
+
right = right.expression;
|
|
2345
|
+
if (!ts.isObjectLiteralExpression(right))
|
|
2346
|
+
return null;
|
|
2347
|
+
const spreadType = lowerer.mapTypeOf(lowerer.typeOf(e));
|
|
2348
|
+
// Every falsy value is a primitive, which spreads nothing, so `c && {
|
|
2349
|
+
// ... }` contributes the literal's members exactly when c is truthy,
|
|
2350
|
+
// whatever c's type. The checker's union of the two decides the
|
|
2351
|
+
// representation where it maps; where it does not (a member typed by a
|
|
2352
|
+
// checked-dynamic value such as an AbortSignal), the syntax decides.
|
|
2353
|
+
if (spreadType === null || spreadType.kind === "dyn") {
|
|
2354
|
+
return syntacticAndSpread(right, e.left);
|
|
2355
|
+
}
|
|
2356
|
+
if (spreadType?.kind !== "union")
|
|
2357
|
+
return null;
|
|
2358
|
+
const arms = lowerer.unions.get(spreadType.unionId)?.arms ?? [];
|
|
2359
|
+
if (arms.filter((arm) => arm.kind === "record").length !== 1 ||
|
|
2360
|
+
!arms.some((arm) => arm.kind === "bool" || arm.kind === "f64" || arm.kind === "string") ||
|
|
2361
|
+
!arms.every((arm) => arm.kind === "record" ||
|
|
2362
|
+
arm.kind === "bool" ||
|
|
2363
|
+
arm.kind === "f64" ||
|
|
2364
|
+
arm.kind === "string" ||
|
|
2365
|
+
isUnitType(arm)))
|
|
2366
|
+
return null;
|
|
2367
|
+
if (right.properties.nodes.length === 0)
|
|
2368
|
+
return "unsupported";
|
|
2369
|
+
const props = [];
|
|
2370
|
+
for (const p of right.properties.nodes) {
|
|
2371
|
+
if ((ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
|
|
2372
|
+
p.name &&
|
|
2373
|
+
(ts.isIdentifier(p.name) || ts.isStringLiteral(p.name))) {
|
|
2374
|
+
props.push(p);
|
|
2375
|
+
}
|
|
2376
|
+
else {
|
|
2377
|
+
return "unsupported";
|
|
2378
|
+
}
|
|
2379
|
+
}
|
|
2380
|
+
return { cond: e.left, props, whenTrue: true };
|
|
2381
|
+
}
|
|
2382
|
+
function syntacticAndSpread(right, cond) {
|
|
2383
|
+
if (right.properties.nodes.length === 0)
|
|
2384
|
+
return "unsupported";
|
|
2385
|
+
const props = [];
|
|
2386
|
+
for (const p of right.properties.nodes) {
|
|
2387
|
+
if ((ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
|
|
2388
|
+
p.name &&
|
|
2389
|
+
(ts.isIdentifier(p.name) || ts.isStringLiteral(p.name))) {
|
|
2390
|
+
props.push(p);
|
|
2391
|
+
}
|
|
2392
|
+
else {
|
|
2393
|
+
return "unsupported";
|
|
2394
|
+
}
|
|
2395
|
+
}
|
|
2396
|
+
return { cond, props, whenTrue: true };
|
|
2397
|
+
}
|
|
2199
2398
|
export function conditionalSpreadOf(expr) {
|
|
2200
2399
|
let e = expr;
|
|
2201
2400
|
while (ts.isParenthesizedExpression(e))
|
|
@@ -2213,13 +2412,13 @@ export function conditionalSpreadOf(expr) {
|
|
|
2213
2412
|
if (!ts.isObjectLiteralExpression(whenTrue) || !ts.isObjectLiteralExpression(whenFalse)) {
|
|
2214
2413
|
return "unsupported";
|
|
2215
2414
|
}
|
|
2216
|
-
const trueCarries = whenFalse.properties.length === 0 && whenTrue.properties.length > 0;
|
|
2217
|
-
const falseCarries = whenTrue.properties.length === 0 && whenFalse.properties.length > 0;
|
|
2415
|
+
const trueCarries = whenFalse.properties.nodes.length === 0 && whenTrue.properties.nodes.length > 0;
|
|
2416
|
+
const falseCarries = whenTrue.properties.nodes.length === 0 && whenFalse.properties.nodes.length > 0;
|
|
2218
2417
|
if (!trueCarries && !falseCarries)
|
|
2219
2418
|
return "unsupported"; // both empty is tsc-unreachable; both non-empty has no single desugar
|
|
2220
2419
|
const carrier = trueCarries ? whenTrue : whenFalse;
|
|
2221
2420
|
const props = [];
|
|
2222
|
-
for (const p of carrier.properties) {
|
|
2421
|
+
for (const p of carrier.properties.nodes) {
|
|
2223
2422
|
if ((ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
|
|
2224
2423
|
p.name &&
|
|
2225
2424
|
(ts.isIdentifier(p.name) || ts.isStringLiteral(p.name))) {
|
|
@@ -2249,7 +2448,7 @@ export function conditionalSpreadOf(expr) {
|
|
|
2249
2448
|
* (last-write-wins). Fixed, hybrid, and pure index records may contribute. */
|
|
2250
2449
|
function lowerDeclaredSpreadMerge(lowerer, expr, type, shape, loc) {
|
|
2251
2450
|
const srcs = [];
|
|
2252
|
-
for (const prop of expr.properties) {
|
|
2451
|
+
for (const prop of expr.properties.nodes) {
|
|
2253
2452
|
const spread = prop; // caller-checked: all spreads
|
|
2254
2453
|
const value = lowerer.lowerExpr(spread.expression);
|
|
2255
2454
|
if (value.type.kind === "dyn") {
|
|
@@ -2620,7 +2819,7 @@ export function lowerShorthandValue(lowerer, prop) {
|
|
|
2620
2819
|
return lowerer.maybeNarrow({ kind: "varRef", localId: g.id, type: g.type, loc }, propName);
|
|
2621
2820
|
}
|
|
2622
2821
|
const sig = lowerer.fnSigsBySymbol.get(resolved);
|
|
2623
|
-
const decl =
|
|
2822
|
+
const decl = resolved.declarations[0];
|
|
2624
2823
|
if (sig &&
|
|
2625
2824
|
decl &&
|
|
2626
2825
|
ts.isFunctionDeclaration(decl) &&
|
|
@@ -2642,6 +2841,22 @@ export function lowerShorthandValue(lowerer, prop) {
|
|
|
2642
2841
|
if (generic) {
|
|
2643
2842
|
lowerer.unsupported("SC1090", prop, `generic functions as values (call '${propName.text}' directly)`);
|
|
2644
2843
|
}
|
|
2844
|
+
// A program class name (`{ parse, TomlError }`, an imported class
|
|
2845
|
+
// included): the class object, exactly the long form `{ C: C }`.
|
|
2846
|
+
// Generic classes keep the identifier path's contextual pinning.
|
|
2847
|
+
const classInfo = lowerer.classBySymbol.get(resolved);
|
|
2848
|
+
if (classInfo && !classInfo.generic) {
|
|
2849
|
+
const decoratedGlobal = classInfo.classDecorators?.valueGlobalId;
|
|
2850
|
+
if (decoratedGlobal !== undefined) {
|
|
2851
|
+
return {
|
|
2852
|
+
kind: "varRef",
|
|
2853
|
+
localId: decoratedGlobal,
|
|
2854
|
+
type: { kind: "classval", className: classInfo.def.name },
|
|
2855
|
+
loc,
|
|
2856
|
+
};
|
|
2857
|
+
}
|
|
2858
|
+
return lowerer.classValueRef(classInfo, propName);
|
|
2859
|
+
}
|
|
2645
2860
|
}
|
|
2646
2861
|
lowerer.rejectUnresolvedSymbol(symbol
|
|
2647
2862
|
? symbol.flags & ts.SymbolFlags.Alias
|