@scriptc/compiler 0.2.4 → 0.2.6
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 +972 -245
- package/ambient/scriptc-overrides.d.ts +5 -1
- package/ambient/scriptc.d.ts +22 -2
- package/dist/backend/build-cache.d.ts +4 -0
- package/dist/backend/build-cache.js +16 -2
- package/dist/backend/build-cache.js.map +1 -1
- package/dist/backend/cycle-analysis.js +17 -5
- package/dist/backend/cycle-analysis.js.map +1 -1
- package/dist/backend/cycle-analysis.test.js +50 -11
- package/dist/backend/cycle-analysis.test.js.map +1 -1
- package/dist/backend/debug-symbols.js.map +1 -1
- package/dist/backend/executable-features.js +3 -1
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/external-c.d.ts +13 -6
- package/dist/backend/external-c.js +15 -3
- package/dist/backend/external-c.js.map +1 -1
- package/dist/backend/ffi-callbacks.js +6 -9
- package/dist/backend/ffi-callbacks.js.map +1 -1
- package/dist/backend/library-identity-markers.js.map +1 -1
- package/dist/backend/library-pack.d.ts +1 -1
- package/dist/backend/library-pack.js +81 -24
- 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 +10 -2
- package/dist/backend/link-plan-core.js.map +1 -1
- package/dist/backend/link-plan.d.ts +2 -1
- package/dist/backend/link-plan.js +7 -5
- package/dist/backend/link-plan.js.map +1 -1
- package/dist/backend/linker.d.ts +1 -1
- package/dist/backend/linker.js +42 -23
- package/dist/backend/linker.js.map +1 -1
- package/dist/backend/literals.js +5 -4
- package/dist/backend/literals.js.map +1 -1
- package/dist/backend/literals.test.js +30 -5
- package/dist/backend/literals.test.js.map +1 -1
- package/dist/backend/llvm/blocks.test.js +5 -2
- package/dist/backend/llvm/blocks.test.js.map +1 -1
- package/dist/backend/llvm/borrowed-inputs.js.map +1 -1
- package/dist/backend/llvm/borrowed-receivers.js +43 -19
- package/dist/backend/llvm/borrowed-receivers.js.map +1 -1
- package/dist/backend/llvm/byte-numbers.js +38 -5
- package/dist/backend/llvm/byte-numbers.js.map +1 -1
- package/dist/backend/llvm/byte-windows.d.ts +31 -0
- package/dist/backend/llvm/byte-windows.js +334 -0
- package/dist/backend/llvm/byte-windows.js.map +1 -0
- package/dist/backend/llvm/byte-windows.test.d.ts +1 -0
- package/dist/backend/llvm/byte-windows.test.js +244 -0
- package/dist/backend/llvm/byte-windows.test.js.map +1 -0
- package/dist/backend/llvm/bytes-bounds.js +73 -22
- package/dist/backend/llvm/bytes-bounds.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.d.ts +5 -2
- package/dist/backend/llvm/call-lifetimes.js +72 -19
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.test.js +159 -28
- package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/checked-value-lifetimes.d.ts +4 -0
- package/dist/backend/llvm/checked-value-lifetimes.js +14 -4
- package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
- package/dist/backend/llvm/classes.d.ts +14 -1
- package/dist/backend/llvm/classes.js +94 -19
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.d.ts +1 -0
- package/dist/backend/llvm/classes.test.js +99 -0
- package/dist/backend/llvm/classes.test.js.map +1 -0
- package/dist/backend/llvm/common.js +4 -1
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.d.ts +11 -0
- package/dist/backend/llvm/constant-callbacks.js +213 -0
- package/dist/backend/llvm/constant-callbacks.js.map +1 -0
- package/dist/backend/llvm/constant-callbacks.test.d.ts +1 -0
- package/dist/backend/llvm/constant-callbacks.test.js +124 -0
- package/dist/backend/llvm/constant-callbacks.test.js.map +1 -0
- package/dist/backend/llvm/counted-loops.js +10 -3
- package/dist/backend/llvm/counted-loops.js.map +1 -1
- package/dist/backend/llvm/debug-info.js +33 -13
- package/dist/backend/llvm/debug-info.js.map +1 -1
- package/dist/backend/llvm/debug-info.test.js +28 -6
- package/dist/backend/llvm/debug-info.test.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +1 -1
- package/dist/backend/llvm/dyn.js +75 -56
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +28 -3
- package/dist/backend/llvm/emitter.js +506 -145
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +247 -50
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +25 -6
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.js +24 -4
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-callbacks.js +10 -4
- package/dist/backend/llvm/expr-callbacks.js.map +1 -1
- package/dist/backend/llvm/expr-calls.js +110 -31
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.d.ts +2 -0
- package/dist/backend/llvm/expr-containers.js +112 -41
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-control.js +1 -3
- package/dist/backend/llvm/expr-control.js.map +1 -1
- package/dist/backend/llvm/expr-dispatch.js +3 -1
- package/dist/backend/llvm/expr-dispatch.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +55 -7
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-island.js +26 -6
- package/dist/backend/llvm/expr-island.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +95 -19
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.test.js +44 -2
- package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
- package/dist/backend/llvm/expr-records.js +10 -9
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +44 -26
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.test.js +51 -14
- package/dist/backend/llvm/expr-stream-bridges.test.js.map +1 -1
- package/dist/backend/llvm/expr-stream-callbacks.js +34 -14
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/integer-remainder.d.ts +7 -0
- package/dist/backend/llvm/integer-remainder.js +26 -0
- package/dist/backend/llvm/integer-remainder.js.map +1 -0
- package/dist/backend/llvm/integer-values.js +15 -4
- package/dist/backend/llvm/integer-values.js.map +1 -1
- package/dist/backend/llvm/integer-views.js +23 -7
- package/dist/backend/llvm/integer-views.js.map +1 -1
- package/dist/backend/llvm/integer-views.test.js +42 -7
- package/dist/backend/llvm/integer-views.test.js.map +1 -1
- package/dist/backend/llvm/layouts.js +1 -1
- package/dist/backend/llvm/layouts.js.map +1 -1
- package/dist/backend/llvm/lib-abi.js +20 -4
- package/dist/backend/llvm/lib-abi.js.map +1 -1
- package/dist/backend/llvm/lib-connect.js +7 -1
- package/dist/backend/llvm/lib-connect.js.map +1 -1
- package/dist/backend/llvm/lib-datagram.js +35 -10
- package/dist/backend/llvm/lib-datagram.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +42 -38
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +33 -18
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-http2.js +60 -15
- package/dist/backend/llvm/lib-http2.js.map +1 -1
- package/dist/backend/llvm/lib-lookup.js +12 -5
- package/dist/backend/llvm/lib-lookup.js.map +1 -1
- package/dist/backend/llvm/lib-network.js +97 -31
- package/dist/backend/llvm/lib-network.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +57 -14
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +122 -31
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +33 -14
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/lib-test.js +21 -7
- package/dist/backend/llvm/lib-test.js.map +1 -1
- package/dist/backend/llvm/lib-tls.js +69 -20
- package/dist/backend/llvm/lib-tls.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.d.ts +9 -2
- package/dist/backend/llvm/local-array-reads.js +176 -89
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.test.js +394 -62
- package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.d.ts +25 -0
- package/dist/backend/llvm/local-union-storage.js +109 -0
- package/dist/backend/llvm/local-union-storage.js.map +1 -0
- package/dist/backend/llvm/local-union-storage.test.d.ts +1 -0
- package/dist/backend/llvm/local-union-storage.test.js +210 -0
- package/dist/backend/llvm/local-union-storage.test.js.map +1 -0
- package/dist/backend/llvm/loop-array-borrows.d.ts +11 -0
- package/dist/backend/llvm/loop-array-borrows.js +70 -0
- package/dist/backend/llvm/loop-array-borrows.js.map +1 -0
- package/dist/backend/llvm/loop-array-borrows.test.d.ts +1 -0
- package/dist/backend/llvm/loop-array-borrows.test.js +145 -0
- package/dist/backend/llvm/loop-array-borrows.test.js.map +1 -0
- package/dist/backend/llvm/map-read-lifetimes.d.ts +11 -2
- package/dist/backend/llvm/map-read-lifetimes.js +64 -19
- package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.test.js +89 -17
- package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/reference-effects.d.ts +5 -3
- package/dist/backend/llvm/reference-effects.js +74 -36
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- package/dist/backend/llvm/reference-effects.test.js +92 -9
- package/dist/backend/llvm/reference-effects.test.js.map +1 -1
- package/dist/backend/llvm/shapes.d.ts +4 -1
- package/dist/backend/llvm/shapes.js +82 -24
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +3 -1
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/split-loops.d.ts +48 -0
- package/dist/backend/llvm/split-loops.js +183 -0
- package/dist/backend/llvm/split-loops.js.map +1 -0
- package/dist/backend/llvm/split.js +4 -11
- package/dist/backend/llvm/split.js.map +1 -1
- package/dist/backend/llvm/split.test.js +80 -8
- package/dist/backend/llvm/split.test.js.map +1 -1
- package/dist/backend/llvm/stack-callbacks.d.ts +14 -0
- package/dist/backend/llvm/stack-callbacks.js +73 -0
- package/dist/backend/llvm/stack-callbacks.js.map +1 -0
- package/dist/backend/llvm/stack-captures.d.ts +25 -0
- package/dist/backend/llvm/stack-captures.js +150 -0
- package/dist/backend/llvm/stack-captures.js.map +1 -0
- package/dist/backend/llvm/stack-unions.js +14 -5
- package/dist/backend/llvm/stack-unions.js.map +1 -1
- package/dist/backend/llvm/stack-unions.test.js +151 -32
- package/dist/backend/llvm/stack-unions.test.js.map +1 -1
- package/dist/backend/llvm/string-construction.js.map +1 -1
- package/dist/backend/llvm/string-construction.test.js +32 -7
- package/dist/backend/llvm/string-construction.test.js.map +1 -1
- package/dist/backend/llvm/string-lifetimes.js +14 -8
- package/dist/backend/llvm/string-lifetimes.js.map +1 -1
- package/dist/backend/llvm/string-lifetimes.test.js +119 -29
- package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/string-slices.d.ts +20 -0
- package/dist/backend/llvm/string-slices.js +87 -0
- package/dist/backend/llvm/string-slices.js.map +1 -0
- package/dist/backend/llvm/string-slices.test.d.ts +1 -0
- package/dist/backend/llvm/string-slices.test.js +98 -0
- package/dist/backend/llvm/string-slices.test.js.map +1 -0
- package/dist/backend/llvm/switch-dispatch.d.ts +9 -0
- package/dist/backend/llvm/switch-dispatch.js +114 -0
- package/dist/backend/llvm/switch-dispatch.js.map +1 -0
- package/dist/backend/llvm/switch-dispatch.test.d.ts +1 -0
- package/dist/backend/llvm/switch-dispatch.test.js +83 -0
- package/dist/backend/llvm/switch-dispatch.test.js.map +1 -0
- package/dist/backend/llvm/unsupported.js.map +1 -1
- package/dist/backend/llvm/walkers.d.ts +4 -14
- package/dist/backend/llvm/walkers.js +58 -313
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/mangle.js +9 -3
- package/dist/backend/mangle.js.map +1 -1
- package/dist/backend/may-throw.js +18 -8
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/may-throw.test.js +119 -23
- package/dist/backend/may-throw.test.js.map +1 -1
- package/dist/backend/native/artifact-stamps.d.ts +39 -0
- package/dist/backend/native/artifact-stamps.js +371 -0
- package/dist/backend/native/artifact-stamps.js.map +1 -0
- package/dist/backend/native/cache-warm.d.ts +24 -0
- package/dist/backend/native/cache-warm.js +80 -0
- package/dist/backend/native/cache-warm.js.map +1 -0
- package/dist/backend/native/compiler-fingerprint.d.ts +19 -0
- package/dist/backend/native/compiler-fingerprint.js +357 -0
- package/dist/backend/native/compiler-fingerprint.js.map +1 -0
- package/dist/backend/native/contracts.d.ts +316 -0
- package/dist/backend/native/contracts.js +2 -0
- package/dist/backend/native/contracts.js.map +1 -0
- package/dist/backend/native/dependency-files.d.ts +5 -0
- package/dist/backend/native/dependency-files.js +83 -0
- package/dist/backend/native/dependency-files.js.map +1 -0
- package/dist/backend/native/driver.d.ts +50 -0
- package/dist/backend/native/driver.js +294 -0
- package/dist/backend/native/driver.js.map +1 -0
- package/dist/backend/native/executable.d.ts +18 -0
- package/dist/backend/native/executable.js +1275 -0
- package/dist/backend/native/executable.js.map +1 -0
- package/dist/backend/native/library.d.ts +2 -0
- package/dist/backend/native/library.js +614 -0
- package/dist/backend/native/library.js.map +1 -0
- package/dist/backend/native/linker-fingerprint.d.ts +8 -0
- package/dist/backend/native/linker-fingerprint.js +174 -0
- package/dist/backend/native/linker-fingerprint.js.map +1 -0
- package/dist/backend/native/object-merge.d.ts +2 -0
- package/dist/backend/native/object-merge.js +154 -0
- package/dist/backend/native/object-merge.js.map +1 -0
- package/dist/backend/native/process.d.ts +17 -0
- package/dist/backend/native/process.js +42 -0
- package/dist/backend/native/process.js.map +1 -0
- package/dist/backend/native/program-shards.d.ts +21 -0
- package/dist/backend/native/program-shards.js +99 -0
- package/dist/backend/native/program-shards.js.map +1 -0
- package/dist/backend/native/runtime-inputs.d.ts +12 -0
- package/dist/backend/native/runtime-inputs.js +165 -0
- package/dist/backend/native/runtime-inputs.js.map +1 -0
- package/dist/backend/native/runtime-inputs.test.d.ts +1 -0
- package/dist/backend/native/runtime-inputs.test.js +64 -0
- package/dist/backend/native/runtime-inputs.test.js.map +1 -0
- package/dist/backend/native/runtime-objects.d.ts +16 -0
- package/dist/backend/native/runtime-objects.js +122 -0
- package/dist/backend/native/runtime-objects.js.map +1 -0
- package/dist/backend/native/session.d.ts +12 -0
- package/dist/backend/native/session.js +31 -0
- package/dist/backend/native/session.js.map +1 -0
- package/dist/backend/native/tool-identity.d.ts +37 -0
- package/dist/backend/native/tool-identity.js +310 -0
- package/dist/backend/native/tool-identity.js.map +1 -0
- package/dist/backend/native/trace-paths.d.ts +12 -0
- package/dist/backend/native/trace-paths.js +73 -0
- package/dist/backend/native/trace-paths.js.map +1 -0
- package/dist/backend/native/vendor.d.ts +1 -0
- package/dist/backend/native/vendor.js +12 -0
- package/dist/backend/native/vendor.js.map +1 -0
- package/dist/backend/native-codegen-core.d.ts +6 -0
- package/dist/backend/native-codegen-core.js +23 -1
- package/dist/backend/native-codegen-core.js.map +1 -1
- package/dist/backend/native-codegen.d.ts +5 -1
- package/dist/backend/native-codegen.js +52 -25
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +59 -11
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +1 -0
- package/dist/backend/native-link-info-core.js +9 -5
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/native-link-info.js +14 -5
- package/dist/backend/native-link-info.js.map +1 -1
- package/dist/backend/native-link-info.test.js +58 -13
- package/dist/backend/native-link-info.test.js.map +1 -1
- package/dist/backend/native-toolchain.d.ts +17 -450
- package/dist/backend/native-toolchain.js +17 -3971
- package/dist/backend/native-toolchain.js.map +1 -1
- package/dist/backend/native-toolchain.test.js +103 -72
- package/dist/backend/native-toolchain.test.js.map +1 -1
- package/dist/backend/native-tools.d.ts +3 -1
- package/dist/backend/native-tools.js +30 -9
- package/dist/backend/native-tools.js.map +1 -1
- package/dist/backend/object-localize.js +17 -14
- package/dist/backend/object-localize.js.map +1 -1
- package/dist/backend/object-localize.test.js +59 -12
- package/dist/backend/object-localize.test.js.map +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 +1 -0
- package/dist/backend/runtime-pack-core.js +104 -50
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-native.js +5 -3
- package/dist/backend/runtime-pack-native.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +126 -17
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.d.ts +1 -1
- package/dist/backend/runtime-pack.js +11 -12
- package/dist/backend/runtime-pack.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +51 -25
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/source-locations.js.map +1 -1
- package/dist/backend/source-locations.test.js +7 -2
- package/dist/backend/source-locations.test.js.map +1 -1
- package/dist/backend/target-diagnostics.js +44 -14
- package/dist/backend/target-diagnostics.js.map +1 -1
- package/dist/backend/target-diagnostics.test.js +93 -20
- package/dist/backend/target-diagnostics.test.js.map +1 -1
- package/dist/backend/targets.js +230 -86
- package/dist/backend/targets.js.map +1 -1
- package/dist/backend/targets.test.js +32 -18
- package/dist/backend/targets.test.js.map +1 -1
- package/dist/backend/toolchain-environment.js +5 -1
- package/dist/backend/toolchain-environment.js.map +1 -1
- package/dist/backend/vendor-archives.d.ts +2 -2
- package/dist/backend/vendor-archives.js +84 -35
- package/dist/backend/vendor-archives.js.map +1 -1
- package/dist/backend/vendor-inputs.js +13 -1
- package/dist/backend/vendor-inputs.js.map +1 -1
- package/dist/backend/warm-cache.d.ts +1 -1
- package/dist/backend/warm-cache.js +33 -9
- package/dist/backend/warm-cache.js.map +1 -1
- package/dist/cli/command.js +39 -9
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/output-options.js +14 -4
- package/dist/cli/output-options.js.map +1 -1
- package/dist/cli/paths.js.map +1 -1
- package/dist/cli/wasi-runner.js.map +1 -1
- package/dist/compat/fetch-profile.js +36 -35
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/coverage/report.js +16 -17
- package/dist/coverage/report.js.map +1 -1
- package/dist/coverage/surface-manifest.js +112 -26
- package/dist/coverage/surface-manifest.js.map +1 -1
- package/dist/diagnostics/diagnostic.js +55 -16
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +2 -1
- package/dist/executable/executable-cache.js +79 -48
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +90 -26
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/executable/prepare.js +2 -2
- package/dist/executable/prepare.js.map +1 -1
- package/dist/ffi/ffi-manifest.js +78 -20
- package/dist/ffi/ffi-manifest.js.map +1 -1
- package/dist/ffi/ffi-manifest.test.js +96 -16
- package/dist/ffi/ffi-manifest.test.js.map +1 -1
- package/dist/format-integer.js.map +1 -1
- package/dist/frontend/analysis.js +12 -2
- package/dist/frontend/analysis.js.map +1 -1
- package/dist/frontend/arguments-usage.js.map +1 -1
- package/dist/frontend/binding-source.js +9 -3
- package/dist/frontend/binding-source.js.map +1 -1
- package/dist/frontend/builtin-modules.js +46 -2
- package/dist/frontend/builtin-modules.js.map +1 -1
- package/dist/frontend/cjs-resolve.js +40 -17
- package/dist/frontend/cjs-resolve.js.map +1 -1
- package/dist/frontend/cjs-syntax.js +31 -10
- package/dist/frontend/cjs-syntax.js.map +1 -1
- package/dist/frontend/comptime-node.test.js +10 -11
- package/dist/frontend/comptime-node.test.js.map +1 -1
- package/dist/frontend/dts-paths.js +7 -3
- package/dist/frontend/dts-paths.js.map +1 -1
- package/dist/frontend/fork-target.d.ts +5 -0
- package/dist/frontend/fork-target.js +55 -18
- package/dist/frontend/fork-target.js.map +1 -1
- package/dist/frontend/fork-target.test.d.ts +1 -0
- package/dist/frontend/fork-target.test.js +59 -0
- package/dist/frontend/fork-target.test.js.map +1 -0
- package/dist/frontend/function-completion.js +11 -6
- package/dist/frontend/function-completion.js.map +1 -1
- package/dist/frontend/helper-tokens.js +53 -6
- package/dist/frontend/helper-tokens.js.map +1 -1
- package/dist/frontend/helper-tokens.test.js +18 -2
- package/dist/frontend/helper-tokens.test.js.map +1 -1
- package/dist/frontend/inferred-js-diagnostics.js +32 -12
- package/dist/frontend/inferred-js-diagnostics.js.map +1 -1
- package/dist/frontend/inferred-js-diagnostics.test.js +11 -15
- package/dist/frontend/inferred-js-diagnostics.test.js.map +1 -1
- package/dist/frontend/input-tracker.js +11 -11
- package/dist/frontend/input-tracker.js.map +1 -1
- package/dist/frontend/input-tracker.test.js +4 -1
- package/dist/frontend/input-tracker.test.js.map +1 -1
- package/dist/frontend/lib-contract.js +38 -9
- package/dist/frontend/lib-contract.js.map +1 -1
- package/dist/frontend/literal-values.js.map +1 -1
- package/dist/frontend/literal-values.test.js +28 -8
- package/dist/frontend/literal-values.test.js.map +1 -1
- package/dist/frontend/lowering/abstract-equality.js +53 -10
- package/dist/frontend/lowering/abstract-equality.js.map +1 -1
- package/dist/frontend/lowering/array-indexed-mutation.d.ts +1 -1
- package/dist/frontend/lowering/array-indexed-mutation.js +108 -106
- package/dist/frontend/lowering/array-indexed-mutation.js.map +1 -1
- package/dist/frontend/lowering/array-values.js +37 -14
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/binding-analysis.d.ts +50 -0
- package/dist/frontend/lowering/binding-analysis.js +376 -0
- package/dist/frontend/lowering/binding-analysis.js.map +1 -0
- package/dist/frontend/lowering/builtin-calls.d.ts +9 -0
- package/dist/frontend/lowering/builtin-calls.js +60 -0
- package/dist/frontend/lowering/builtin-calls.js.map +1 -0
- package/dist/frontend/lowering/builtins/arguments.d.ts +43 -0
- package/dist/frontend/lowering/builtins/arguments.js +247 -0
- package/dist/frontend/lowering/builtins/arguments.js.map +1 -0
- package/dist/frontend/lowering/builtins/async-context.d.ts +52 -0
- package/dist/frontend/lowering/builtins/async-context.js +436 -0
- package/dist/frontend/lowering/builtins/async-context.js.map +1 -0
- package/dist/frontend/lowering/builtins/atomics.d.ts +6 -0
- package/dist/frontend/lowering/builtins/atomics.js +82 -0
- package/dist/frontend/lowering/builtins/atomics.js.map +1 -0
- package/dist/frontend/lowering/builtins/callable-aliases.d.ts +13 -0
- package/dist/frontend/lowering/builtins/callable-aliases.js +87 -0
- package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -0
- package/dist/frontend/lowering/builtins/child-process-async.d.ts +18 -0
- package/dist/frontend/lowering/builtins/child-process-async.js +245 -0
- package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -0
- package/dist/frontend/lowering/builtins/child-process-methods.d.ts +21 -0
- package/dist/frontend/lowering/builtins/child-process-methods.js +362 -0
- package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -0
- package/dist/frontend/lowering/builtins/child-process-sync.d.ts +4 -0
- package/dist/frontend/lowering/builtins/child-process-sync.js +639 -0
- package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -0
- package/dist/frontend/lowering/builtins/child-process.d.ts +55 -0
- package/dist/frontend/lowering/builtins/child-process.js +669 -0
- package/dist/frontend/lowering/builtins/child-process.js.map +1 -0
- package/dist/frontend/lowering/builtins/compression.d.ts +7 -0
- package/dist/frontend/lowering/builtins/compression.js +115 -0
- package/dist/frontend/lowering/builtins/compression.js.map +1 -0
- package/dist/frontend/lowering/builtins/console.d.ts +10 -0
- package/dist/frontend/lowering/builtins/console.js +38 -0
- package/dist/frontend/lowering/builtins/console.js.map +1 -0
- package/dist/frontend/lowering/builtins/constants.d.ts +24 -0
- package/dist/frontend/lowering/builtins/constants.js +141 -0
- package/dist/frontend/lowering/builtins/constants.js.map +1 -0
- package/dist/frontend/lowering/builtins/crypto.d.ts +22 -0
- package/dist/frontend/lowering/builtins/crypto.js +517 -0
- package/dist/frontend/lowering/builtins/crypto.js.map +1 -0
- package/dist/frontend/lowering/builtins/dates.d.ts +7 -0
- package/dist/frontend/lowering/builtins/dates.js +101 -0
- package/dist/frontend/lowering/builtins/dates.js.map +1 -0
- package/dist/frontend/lowering/builtins/environment.d.ts +34 -0
- package/dist/frontend/lowering/builtins/environment.js +95 -0
- package/dist/frontend/lowering/builtins/environment.js.map +1 -0
- package/dist/frontend/lowering/builtins/errors.d.ts +14 -0
- package/dist/frontend/lowering/builtins/errors.js +83 -0
- package/dist/frontend/lowering/builtins/errors.js.map +1 -0
- package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +35 -0
- package/dist/frontend/lowering/builtins/filesystem-calls.js +725 -0
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -0
- package/dist/frontend/lowering/builtins/filesystem.d.ts +108 -0
- package/dist/frontend/lowering/builtins/filesystem.js +1061 -0
- package/dist/frontend/lowering/builtins/filesystem.js.map +1 -0
- package/dist/frontend/lowering/builtins/ipc.d.ts +8 -0
- package/dist/frontend/lowering/builtins/ipc.js +76 -0
- package/dist/frontend/lowering/builtins/ipc.js.map +1 -0
- package/dist/frontend/lowering/builtins/json.d.ts +12 -0
- package/dist/frontend/lowering/builtins/json.js +387 -0
- package/dist/frontend/lowering/builtins/json.js.map +1 -0
- package/dist/frontend/lowering/builtins/module-bindings.d.ts +85 -0
- package/dist/frontend/lowering/builtins/module-bindings.js +346 -0
- package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -0
- package/dist/frontend/lowering/builtins/module-calls.d.ts +8 -0
- package/dist/frontend/lowering/builtins/module-calls.js +308 -0
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -0
- package/dist/frontend/lowering/builtins/module-resolution.d.ts +38 -0
- package/dist/frontend/lowering/builtins/module-resolution.js +344 -0
- package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -0
- package/dist/frontend/lowering/builtins/numbers.d.ts +15 -0
- package/dist/frontend/lowering/builtins/numbers.js +124 -0
- package/dist/frontend/lowering/builtins/numbers.js.map +1 -0
- package/dist/frontend/lowering/builtins/operating-system.d.ts +13 -0
- package/dist/frontend/lowering/builtins/operating-system.js +148 -0
- package/dist/frontend/lowering/builtins/operating-system.js.map +1 -0
- package/dist/frontend/lowering/builtins/performance.d.ts +13 -0
- package/dist/frontend/lowering/builtins/performance.js +100 -0
- package/dist/frontend/lowering/builtins/performance.js.map +1 -0
- package/dist/frontend/lowering/builtins/process.d.ts +50 -0
- package/dist/frontend/lowering/builtins/process.js +1138 -0
- package/dist/frontend/lowering/builtins/process.js.map +1 -0
- package/dist/frontend/lowering/builtins/promises.d.ts +14 -0
- package/dist/frontend/lowering/builtins/promises.js +356 -0
- package/dist/frontend/lowering/builtins/promises.js.map +1 -0
- package/dist/frontend/lowering/builtins/properties.d.ts +11 -0
- package/dist/frontend/lowering/builtins/properties.js +186 -0
- package/dist/frontend/lowering/builtins/properties.js.map +1 -0
- package/dist/frontend/lowering/builtins/querystring.d.ts +19 -0
- package/dist/frontend/lowering/builtins/querystring.js +150 -0
- package/dist/frontend/lowering/builtins/querystring.js.map +1 -0
- package/dist/frontend/lowering/builtins/readline.d.ts +13 -0
- package/dist/frontend/lowering/builtins/readline.js +138 -0
- package/dist/frontend/lowering/builtins/readline.js.map +1 -0
- package/dist/frontend/lowering/builtins/receiver-types.d.ts +5 -0
- package/dist/frontend/lowering/builtins/receiver-types.js +15 -0
- package/dist/frontend/lowering/builtins/receiver-types.js.map +1 -0
- package/dist/frontend/lowering/builtins/reflection.d.ts +13 -0
- package/dist/frontend/lowering/builtins/reflection.js +95 -0
- package/dist/frontend/lowering/builtins/reflection.js.map +1 -0
- package/dist/frontend/lowering/builtins/strings.d.ts +14 -0
- package/dist/frontend/lowering/builtins/strings.js +121 -0
- package/dist/frontend/lowering/builtins/strings.js.map +1 -0
- package/dist/frontend/lowering/builtins/text-codecs.d.ts +29 -0
- package/dist/frontend/lowering/builtins/text-codecs.js +590 -0
- package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -0
- package/dist/frontend/lowering/builtins/timers.d.ts +22 -0
- package/dist/frontend/lowering/builtins/timers.js +180 -0
- package/dist/frontend/lowering/builtins/timers.js.map +1 -0
- package/dist/frontend/lowering/builtins/url.d.ts +37 -0
- package/dist/frontend/lowering/builtins/url.js +596 -0
- package/dist/frontend/lowering/builtins/url.js.map +1 -0
- package/dist/frontend/lowering/builtins/util-types.d.ts +7 -0
- package/dist/frontend/lowering/builtins/util-types.js +31 -0
- package/dist/frontend/lowering/builtins/util-types.js.map +1 -0
- package/dist/frontend/lowering/builtins/workers.d.ts +5 -0
- package/dist/frontend/lowering/builtins/workers.js +65 -0
- package/dist/frontend/lowering/builtins/workers.js.map +1 -0
- package/dist/frontend/lowering/call-arguments.d.ts +72 -0
- package/dist/frontend/lowering/call-arguments.js +618 -0
- package/dist/frontend/lowering/call-arguments.js.map +1 -0
- package/dist/frontend/lowering/call-signatures.d.ts +115 -0
- package/dist/frontend/lowering/call-signatures.js +719 -0
- package/dist/frontend/lowering/call-signatures.js.map +1 -0
- package/dist/frontend/lowering/callback-arg.js.map +1 -1
- package/dist/frontend/lowering/checked-iterable-spread.js +53 -10
- package/dist/frontend/lowering/checked-iterable-spread.js.map +1 -1
- package/dist/frontend/lowering/checked-promise-all.js +41 -9
- package/dist/frontend/lowering/checked-promise-all.js.map +1 -1
- package/dist/frontend/lowering/class-assertions.d.ts +7 -0
- package/dist/frontend/lowering/class-assertions.js +96 -0
- package/dist/frontend/lowering/class-assertions.js.map +1 -0
- package/dist/frontend/lowering/class-callbacks.d.ts +1 -1
- package/dist/frontend/lowering/class-callbacks.js +130 -27
- package/dist/frontend/lowering/class-callbacks.js.map +1 -1
- package/dist/frontend/lowering/class-construction.d.ts +1 -1
- package/dist/frontend/lowering/class-construction.js +247 -50
- package/dist/frontend/lowering/class-construction.js.map +1 -1
- package/dist/frontend/lowering/class-descriptors.js +109 -29
- package/dist/frontend/lowering/class-descriptors.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +6 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.js +2471 -465
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js +284 -44
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
- package/dist/frontend/lowering/class-instance-constructor.js +17 -5
- package/dist/frontend/lowering/class-instance-constructor.js.map +1 -1
- package/dist/frontend/lowering/class-method-values.js +199 -51
- package/dist/frontend/lowering/class-method-values.js.map +1 -1
- package/dist/frontend/lowering/class-protocols.d.ts +17 -0
- package/dist/frontend/lowering/class-protocols.js +126 -0
- package/dist/frontend/lowering/class-protocols.js.map +1 -0
- package/dist/frontend/lowering/class-prototypes.js +345 -86
- package/dist/frontend/lowering/class-prototypes.js.map +1 -1
- package/dist/frontend/lowering/class-runtime-statics.d.ts +1 -1
- package/dist/frontend/lowering/class-runtime-statics.js +80 -17
- package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
- package/dist/frontend/lowering/class-static-data.js +76 -16
- package/dist/frontend/lowering/class-static-data.js.map +1 -1
- package/dist/frontend/lowering/coercions/builders.d.ts +13 -0
- package/dist/frontend/lowering/coercions/builders.js +77 -0
- package/dist/frontend/lowering/coercions/builders.js.map +1 -0
- package/dist/frontend/lowering/coercions/function-adapters.d.ts +58 -0
- package/dist/frontend/lowering/coercions/function-adapters.js +430 -0
- package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -0
- package/dist/frontend/lowering/coercions/island.d.ts +37 -0
- package/dist/frontend/lowering/coercions/island.js +350 -0
- package/dist/frontend/lowering/coercions/island.js.map +1 -0
- package/dist/frontend/lowering/coercions/state.d.ts +14 -0
- package/dist/frontend/lowering/coercions/state.js +16 -0
- package/dist/frontend/lowering/coercions/state.js.map +1 -0
- package/dist/frontend/lowering/coercions/structural-plans.d.ts +40 -0
- package/dist/frontend/lowering/coercions/structural-plans.js +447 -0
- package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -0
- package/dist/frontend/lowering/coercions/structural.d.ts +63 -0
- package/dist/frontend/lowering/coercions/structural.js +616 -0
- package/dist/frontend/lowering/coercions/structural.js.map +1 -0
- package/dist/frontend/lowering/coercions/unions.d.ts +65 -0
- package/dist/frontend/lowering/coercions/unions.js +318 -0
- package/dist/frontend/lowering/coercions/unions.js.map +1 -0
- package/dist/frontend/lowering/collection-ingestion.js +355 -72
- package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.d.ts +88 -0
- package/dist/frontend/lowering/containers/array-callbacks.js +1611 -0
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -0
- package/dist/frontend/lowering/containers/array-construction.d.ts +42 -0
- package/dist/frontend/lowering/containers/array-construction.js +1044 -0
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -0
- package/dist/frontend/lowering/containers/array-iteration.d.ts +16 -0
- package/dist/frontend/lowering/containers/array-iteration.js +95 -0
- package/dist/frontend/lowering/containers/array-iteration.js.map +1 -0
- package/dist/frontend/lowering/containers/array-methods.d.ts +27 -0
- package/dist/frontend/lowering/containers/array-methods.js +1854 -0
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -0
- package/dist/frontend/lowering/containers/bytes.d.ts +17 -17
- package/dist/frontend/lowering/containers/bytes.js +430 -138
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.d.ts +26 -0
- package/dist/frontend/lowering/containers/callback-arguments.js +179 -0
- package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -0
- package/dist/frontend/lowering/containers/collection-grouping.d.ts +19 -0
- package/dist/frontend/lowering/containers/collection-grouping.js +297 -0
- package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -0
- package/dist/frontend/lowering/containers/collection-methods.d.ts +57 -0
- package/dist/frontend/lowering/containers/collection-methods.js +1314 -0
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -0
- package/dist/frontend/lowering/containers/dynamic-receivers.d.ts +18 -0
- package/dist/frontend/lowering/containers/dynamic-receivers.js +114 -0
- package/dist/frontend/lowering/containers/dynamic-receivers.js.map +1 -0
- package/dist/frontend/lowering/containers/for-of.d.ts +60 -0
- package/dist/frontend/lowering/containers/for-of.js +643 -0
- package/dist/frontend/lowering/containers/for-of.js.map +1 -0
- package/dist/frontend/lowering/containers/indexed-objects.d.ts +132 -0
- package/dist/frontend/lowering/containers/indexed-objects.js +1743 -0
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -0
- package/dist/frontend/lowering/containers/iterator-helpers.d.ts +20 -0
- package/dist/frontend/lowering/containers/iterator-helpers.js +809 -0
- package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -0
- package/dist/frontend/lowering/containers/string-and-regexp.js +601 -160
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/containers/string-replacement.js +213 -63
- package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
- package/dist/frontend/lowering/crypto-tables.js +263 -64
- package/dist/frontend/lowering/crypto-tables.js.map +1 -1
- package/dist/frontend/lowering/deferred-module-initializers.js +172 -68
- package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
- package/dist/frontend/lowering/deferred-module-initializers.test.js +41 -8
- package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -1
- package/dist/frontend/lowering/error-methods.js +339 -65
- package/dist/frontend/lowering/error-methods.js.map +1 -1
- package/dist/frontend/lowering/expressions/evaluation-safety.js +3 -2
- package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
- package/dist/frontend/lowering/expressions/global-symbols.js +2 -1
- package/dist/frontend/lowering/expressions/global-symbols.js.map +1 -1
- package/dist/frontend/lowering/expressions/native-proxy.js +11 -5
- package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -1
- package/dist/frontend/lowering/expressions/nullish-assignment.js +67 -13
- package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.js +588 -165
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.d.ts +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.js +68 -17
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/union-field-write.js +45 -18
- package/dist/frontend/lowering/expressions/union-field-write.js.map +1 -1
- package/dist/frontend/lowering/function-context.js +5 -1
- package/dist/frontend/lowering/function-context.js.map +1 -1
- package/dist/frontend/lowering/function-returns.d.ts +67 -0
- package/dist/frontend/lowering/function-returns.js +392 -0
- package/dist/frontend/lowering/function-returns.js.map +1 -0
- package/dist/frontend/lowering/generator-delegation.d.ts +1 -1
- package/dist/frontend/lowering/generator-delegation.js +171 -39
- package/dist/frontend/lowering/generator-delegation.js.map +1 -1
- package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +1 -1
- package/dist/frontend/lowering/generator-dynamic-dispatch.js +176 -36
- package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.d.ts +271 -0
- package/dist/frontend/lowering/generic-functions.js +1730 -0
- package/dist/frontend/lowering/generic-functions.js.map +1 -0
- package/dist/frontend/lowering/import-meta.d.ts +1 -1
- package/dist/frontend/lowering/import-meta.js +37 -14
- package/dist/frontend/lowering/import-meta.js.map +1 -1
- package/dist/frontend/lowering/indexed-comparison.js +6 -2
- package/dist/frontend/lowering/indexed-comparison.js.map +1 -1
- package/dist/frontend/lowering/instantiation-path.d.ts +8 -0
- package/dist/frontend/lowering/instantiation-path.js +10 -0
- package/dist/frontend/lowering/instantiation-path.js.map +1 -0
- package/dist/frontend/lowering/instantiation-path.test.d.ts +1 -0
- package/dist/frontend/lowering/instantiation-path.test.js +23 -0
- package/dist/frontend/lowering/instantiation-path.test.js.map +1 -0
- package/dist/frontend/lowering/iterator-consumption.d.ts +9 -0
- package/dist/frontend/lowering/iterator-consumption.js +91 -0
- package/dist/frontend/lowering/iterator-consumption.js.map +1 -0
- package/dist/frontend/lowering/lib-boundary.js +40 -17
- package/dist/frontend/lowering/lib-boundary.js.map +1 -1
- package/dist/frontend/lowering/lib-boundary.test.js +49 -11
- package/dist/frontend/lowering/lib-boundary.test.js.map +1 -1
- package/dist/frontend/lowering/lower-array-sort.d.ts +0 -19
- package/dist/frontend/lowering/lower-array-sort.js +331 -566
- package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +248 -43
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-async-iteration.js +71 -16
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-builtin-values.js +430 -77
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +39 -558
- package/dist/frontend/lowering/lower-calls.js +2628 -5669
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +248 -242
- package/dist/frontend/lowering/lower-classes.js +1820 -775
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-comptime.d.ts +35 -35
- package/dist/frontend/lowering/lower-comptime.js +39 -37
- package/dist/frontend/lowering/lower-comptime.js.map +1 -1
- package/dist/frontend/lowering/lower-dgram.js +59 -31
- package/dist/frontend/lowering/lower-dgram.js.map +1 -1
- package/dist/frontend/lowering/lower-enums.js +5 -2
- package/dist/frontend/lowering/lower-enums.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.js +323 -86
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-expando.js +19 -7
- package/dist/frontend/lowering/lower-expando.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +194 -194
- package/dist/frontend/lowering/lower-exprs.js +3473 -1160
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.d.ts +23 -0
- package/dist/frontend/lowering/lower-functions.js +449 -0
- package/dist/frontend/lowering/lower-functions.js.map +1 -0
- package/dist/frontend/lowering/lower-generators.js +121 -32
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-global-value.js +15 -4
- package/dist/frontend/lowering/lower-global-value.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +479 -89
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-island.d.ts +79 -79
- package/dist/frontend/lowering/lower-island.js +366 -274
- package/dist/frontend/lowering/lower-island.js.map +1 -1
- package/dist/frontend/lowering/lower-island.test.js +7 -2
- package/dist/frontend/lowering/lower-island.test.js.map +1 -1
- package/dist/frontend/lowering/lower-mixins.js +17 -8
- package/dist/frontend/lowering/lower-mixins.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.d.ts +95 -94
- package/dist/frontend/lowering/lower-modules.js +655 -329
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.test.js +91 -20
- package/dist/frontend/lowering/lower-modules.test.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.js +25 -8
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-node-module.js +115 -34
- package/dist/frontend/lowering/lower-node-module.js.map +1 -1
- package/dist/frontend/lowering/lower-server.js +1210 -290
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +148 -148
- package/dist/frontend/lowering/lower-stmts.js +2324 -994
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.test.js +13 -5
- package/dist/frontend/lowering/lower-stmts.test.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.js +363 -91
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-system-errors.js +30 -8
- package/dist/frontend/lowering/lower-system-errors.js.map +1 -1
- package/dist/frontend/lowering/lower-test.js +40 -13
- package/dist/frontend/lowering/lower-test.js.map +1 -1
- package/dist/frontend/lowering/lower-timers.d.ts +31 -0
- package/dist/frontend/lowering/lower-timers.js +336 -0
- package/dist/frontend/lowering/lower-timers.js.map +1 -0
- package/dist/frontend/lowering/lower-url.d.ts +1 -1
- package/dist/frontend/lowering/lower-url.js +46 -13
- package/dist/frontend/lowering/lower-url.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +34 -352
- package/dist/frontend/lowering/lowerer.js +1074 -2712
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/lowerer.test.js +85 -17
- package/dist/frontend/lowering/lowerer.test.js.map +1 -1
- package/dist/frontend/lowering/module-namespace-elements.js +43 -8
- package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
- package/dist/frontend/lowering/native-ffi.d.ts +21 -1
- package/dist/frontend/lowering/native-ffi.js +487 -18
- package/dist/frontend/lowering/native-ffi.js.map +1 -1
- package/dist/frontend/lowering/object-enumeration-receiver.js +55 -10
- package/dist/frontend/lowering/object-enumeration-receiver.js.map +1 -1
- package/dist/frontend/lowering/object-factory-new.d.ts +1 -1
- package/dist/frontend/lowering/object-factory-new.js +36 -11
- package/dist/frontend/lowering/object-factory-new.js.map +1 -1
- package/dist/frontend/lowering/optional-arguments.js +49 -20
- package/dist/frontend/lowering/optional-arguments.js.map +1 -1
- package/dist/frontend/lowering/pairs-snapshot.js +66 -14
- package/dist/frontend/lowering/pairs-snapshot.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-locals.js +3 -1
- package/dist/frontend/lowering/runtime-optional-locals.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-locals.test.js.map +1 -1
- package/dist/frontend/lowering/sanitize-class-types.js +4 -1
- package/dist/frontend/lowering/sanitize-class-types.js.map +1 -1
- package/dist/frontend/lowering/sanitize-class-types.test.js +86 -18
- package/dist/frontend/lowering/sanitize-class-types.test.js.map +1 -1
- package/dist/frontend/lowering/split-consumers.d.ts +7 -0
- package/dist/frontend/lowering/split-consumers.js +64 -0
- package/dist/frontend/lowering/split-consumers.js.map +1 -0
- package/dist/frontend/lowering/static-this.js +13 -6
- package/dist/frontend/lowering/static-this.js.map +1 -1
- package/dist/frontend/lowering/string-index.js +32 -10
- package/dist/frontend/lowering/string-index.js.map +1 -1
- package/dist/frontend/lowering/surfaces.d.ts +45 -46
- package/dist/frontend/lowering/surfaces.js +1129 -256
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/symbol-fields.js +40 -15
- package/dist/frontend/lowering/symbol-fields.js.map +1 -1
- package/dist/frontend/lowering/symbol-methods.js.map +1 -1
- package/dist/frontend/lowering/text-decoder-encoding.js +236 -24
- package/dist/frontend/lowering/text-decoder-encoding.js.map +1 -1
- package/dist/frontend/lowering/text-decoder-encoding.test.js +84 -12
- package/dist/frontend/lowering/text-decoder-encoding.test.js.map +1 -1
- package/dist/frontend/lowering/union-narrow.js +59 -16
- package/dist/frontend/lowering/union-narrow.js.map +1 -1
- package/dist/frontend/lowering/union-narrow.test.js +24 -7
- package/dist/frontend/lowering/union-narrow.test.js.map +1 -1
- package/dist/frontend/lowering/union-retag.js +155 -40
- package/dist/frontend/lowering/union-retag.js.map +1 -1
- package/dist/frontend/lowering/union-retag.test.js +131 -33
- package/dist/frontend/lowering/union-retag.test.js.map +1 -1
- package/dist/frontend/lowering/unregistered-class-types.js.map +1 -1
- package/dist/frontend/lowering/unregistered-class-types.test.js +34 -8
- package/dist/frontend/lowering/unregistered-class-types.test.js.map +1 -1
- package/dist/frontend/module-source-candidates.d.ts +10 -0
- package/dist/frontend/module-source-candidates.js +40 -0
- package/dist/frontend/module-source-candidates.js.map +1 -0
- package/dist/frontend/module-source-candidates.test.d.ts +1 -0
- package/dist/frontend/module-source-candidates.test.js +53 -0
- package/dist/frontend/module-source-candidates.test.js.map +1 -0
- package/dist/frontend/module-syntax.js +21 -8
- package/dist/frontend/module-syntax.js.map +1 -1
- package/dist/frontend/module-syntax.test.js +37 -13
- package/dist/frontend/module-syntax.test.js.map +1 -1
- package/dist/frontend/npm-fetch-analysis.js +13 -4
- package/dist/frontend/npm-fetch-analysis.js.map +1 -1
- package/dist/frontend/npm-fetch-analysis.test.js +33 -10
- package/dist/frontend/npm-fetch-analysis.test.js.map +1 -1
- package/dist/frontend/npm-fetch-node.js.map +1 -1
- package/dist/frontend/npm-fetch-syntax.js +4 -9
- package/dist/frontend/npm-fetch-syntax.js.map +1 -1
- package/dist/frontend/npm-node.js +3 -1
- package/dist/frontend/npm-node.js.map +1 -1
- package/dist/frontend/npm-static-bundled-cjs.js +88 -29
- package/dist/frontend/npm-static-bundled-cjs.js.map +1 -1
- package/dist/frontend/npm-static-bundled-cjs.test.js +29 -10
- package/dist/frontend/npm-static-bundled-cjs.test.js.map +1 -1
- package/dist/frontend/npm-static-declaration-syntax.js +148 -56
- package/dist/frontend/npm-static-declaration-syntax.js.map +1 -1
- package/dist/frontend/npm-static-declarations.d.ts +1 -1
- package/dist/frontend/npm-static-declarations.js.map +1 -1
- package/dist/frontend/npm-static-declarations.test.js +33 -7
- package/dist/frontend/npm-static-declarations.test.js.map +1 -1
- package/dist/frontend/npm-static-prune.js +26 -12
- package/dist/frontend/npm-static-prune.js.map +1 -1
- package/dist/frontend/npm-static-prune.test.js +17 -3
- package/dist/frontend/npm-static-prune.test.js.map +1 -1
- package/dist/frontend/npm-static-rewrite-host.js +2 -3
- package/dist/frontend/npm-static-rewrite-host.js.map +1 -1
- package/dist/frontend/npm-static-rewrite-syntax.js +64 -21
- package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
- package/dist/frontend/npm-static-rewrite.js.map +1 -1
- package/dist/frontend/npm-static-subtyping.js +9 -4
- package/dist/frontend/npm-static-subtyping.js.map +1 -1
- package/dist/frontend/npm-static-subtyping.test.js +30 -6
- package/dist/frontend/npm-static-subtyping.test.js.map +1 -1
- package/dist/frontend/npm-static.js +15 -4
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/npm.js +122 -36
- package/dist/frontend/npm.js.map +1 -1
- package/dist/frontend/npm.test.js +30 -10
- package/dist/frontend/npm.test.js.map +1 -1
- package/dist/frontend/pipeline-native.js.map +1 -1
- package/dist/frontend/pipeline.js +25 -8
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/pipeline.test.js +21 -7
- package/dist/frontend/pipeline.test.js.map +1 -1
- package/dist/frontend/program-analysis.d.ts +2 -0
- package/dist/frontend/program-analysis.js +2 -0
- package/dist/frontend/program-analysis.js.map +1 -1
- package/dist/frontend/program-node.js +5 -3
- package/dist/frontend/program-node.js.map +1 -1
- package/dist/frontend/program.d.ts +2 -2
- package/dist/frontend/program.js +248 -127
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +27 -27
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/provenance-core.js +8 -4
- package/dist/frontend/provenance-core.js.map +1 -1
- package/dist/frontend/provenance-registry.js +1 -4
- package/dist/frontend/provenance-registry.js.map +1 -1
- package/dist/frontend/resolve.js +32 -20
- package/dist/frontend/resolve.js.map +1 -1
- package/dist/frontend/resolve.test.js +1 -1
- package/dist/frontend/resolve.test.js.map +1 -1
- package/dist/frontend/runtime-resolve.js +13 -4
- package/dist/frontend/runtime-resolve.js.map +1 -1
- package/dist/frontend/runtime-resolve.test.js +25 -9
- package/dist/frontend/runtime-resolve.test.js.map +1 -1
- package/dist/frontend/services-node.js +6 -2
- package/dist/frontend/services-node.js.map +1 -1
- package/dist/frontend/services-node.test.js +18 -6
- package/dist/frontend/services-node.test.js.map +1 -1
- package/dist/frontend/services.js +8 -4
- package/dist/frontend/services.js.map +1 -1
- package/dist/frontend/services.test.js +6 -2
- package/dist/frontend/services.test.js.map +1 -1
- package/dist/frontend/ts7/api.js +12 -4
- package/dist/frontend/ts7/api.js.map +1 -1
- package/dist/frontend/ts7/ast-bytes.js +10 -3
- package/dist/frontend/ts7/ast-bytes.js.map +1 -1
- package/dist/frontend/ts7/ast-bytes.test.js +23 -4
- package/dist/frontend/ts7/ast-bytes.test.js.map +1 -1
- package/dist/frontend/ts7/ast-guards.test.js +14 -5
- package/dist/frontend/ts7/ast-guards.test.js.map +1 -1
- package/dist/frontend/ts7/ast-node.d.ts +6 -1
- package/dist/frontend/ts7/ast-node.js +490 -172
- package/dist/frontend/ts7/ast-node.js.map +1 -1
- package/dist/frontend/ts7/ast-node.test.js +150 -36
- package/dist/frontend/ts7/ast-node.test.js.map +1 -1
- package/dist/frontend/ts7/ast-text.js +13 -3
- package/dist/frontend/ts7/ast-text.js.map +1 -1
- package/dist/frontend/ts7/ast-text.test.js.map +1 -1
- package/dist/frontend/ts7/ast-types.js.map +1 -1
- package/dist/frontend/ts7/ast-wire.d.ts +5 -1
- package/dist/frontend/ts7/ast-wire.js +83 -20
- package/dist/frontend/ts7/ast-wire.js.map +1 -1
- package/dist/frontend/ts7/ast-wire.test.js +53 -8
- package/dist/frontend/ts7/ast-wire.test.js.map +1 -1
- package/dist/frontend/ts7/ast.d.ts +2 -1
- package/dist/frontend/ts7/ast.js +53 -30
- package/dist/frontend/ts7/ast.js.map +1 -1
- package/dist/frontend/ts7/census-check.js +1 -1
- package/dist/frontend/ts7/census-check.js.map +1 -1
- package/dist/frontend/ts7/checker-cache.js.map +1 -1
- package/dist/frontend/ts7/checker.d.ts +8 -2
- package/dist/frontend/ts7/checker.js +46 -8
- package/dist/frontend/ts7/checker.js.map +1 -1
- package/dist/frontend/ts7/checker.test.js +96 -17
- package/dist/frontend/ts7/checker.test.js.map +1 -1
- package/dist/frontend/ts7/enums.test.js +9 -4
- package/dist/frontend/ts7/enums.test.js.map +1 -1
- package/dist/frontend/ts7/native-api.js.map +1 -1
- package/dist/frontend/ts7/native-host.js.map +1 -1
- package/dist/frontend/ts7/native-process.js +9 -3
- package/dist/frontend/ts7/native-process.js.map +1 -1
- package/dist/frontend/ts7/program-adapter.js +1 -1
- package/dist/frontend/ts7/program-adapter.js.map +1 -1
- package/dist/frontend/ts7/program-host.d.ts +7 -0
- package/dist/frontend/ts7/program-host.js +33 -6
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/program-host.test.js +72 -11
- package/dist/frontend/ts7/program-host.test.js.map +1 -1
- package/dist/frontend/ts7/rpc-api.js +3 -1
- package/dist/frontend/ts7/rpc-api.js.map +1 -1
- package/dist/frontend/ts7/rpc-client.js +15 -5
- package/dist/frontend/ts7/rpc-client.js.map +1 -1
- package/dist/frontend/ts7/rpc-client.test.js +26 -8
- package/dist/frontend/ts7/rpc-client.test.js.map +1 -1
- package/dist/frontend/ts7/rpc-filesystem.js.map +1 -1
- package/dist/frontend/ts7/rpc-filesystem.test.js +43 -10
- package/dist/frontend/ts7/rpc-filesystem.test.js.map +1 -1
- package/dist/frontend/ts7/rpc-process.js +16 -6
- package/dist/frontend/ts7/rpc-process.js.map +1 -1
- package/dist/frontend/ts7/rpc-process.test.js.map +1 -1
- package/dist/frontend/ts7/rpc-wire.d.ts +1 -0
- package/dist/frontend/ts7/rpc-wire.js +41 -14
- package/dist/frontend/ts7/rpc-wire.js.map +1 -1
- package/dist/frontend/ts7/rpc-wire.test.js +36 -6
- package/dist/frontend/ts7/rpc-wire.test.js.map +1 -1
- package/dist/frontend/ts7/semantic-checker.js +209 -68
- package/dist/frontend/ts7/semantic-checker.js.map +1 -1
- package/dist/frontend/ts7/semantic-checker.test.js +29 -14
- package/dist/frontend/ts7/semantic-checker.test.js.map +1 -1
- package/dist/frontend/ts7/semantic-json.js +7 -1
- package/dist/frontend/ts7/semantic-json.js.map +1 -1
- package/dist/frontend/ts7/semantic-json.test.js +17 -3
- package/dist/frontend/ts7/semantic-json.test.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.js +147 -51
- package/dist/frontend/ts7/semantic-model.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.test.js +72 -19
- package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
- package/dist/frontend/ts7/semantic-types.d.ts +2 -2
- package/dist/frontend/ts7/session-cache.js +10 -3
- package/dist/frontend/ts7/session-cache.js.map +1 -1
- package/dist/frontend/ts7/session-cache.test.js +13 -4
- package/dist/frontend/ts7/session-cache.test.js.map +1 -1
- package/dist/frontend/ts7/session-path.js +25 -10
- package/dist/frontend/ts7/session-path.js.map +1 -1
- package/dist/frontend/ts7/session-path.test.js +47 -4
- package/dist/frontend/ts7/session-path.test.js.map +1 -1
- package/dist/frontend/ts7/session-timing.js +22 -3
- package/dist/frontend/ts7/session-timing.js.map +1 -1
- package/dist/frontend/ts7/session-timing.test.js +12 -3
- package/dist/frontend/ts7/session-timing.test.js.map +1 -1
- package/dist/frontend/ts7/session.d.ts +1 -0
- package/dist/frontend/ts7/session.js +109 -35
- package/dist/frontend/ts7/session.js.map +1 -1
- package/dist/frontend/ts7/session.test.js +69 -15
- package/dist/frontend/ts7/session.test.js.map +1 -1
- package/dist/frontend/ts7/source-parser.js +17 -6
- package/dist/frontend/ts7/source-parser.js.map +1 -1
- package/dist/frontend/ts7/source-parser.test.js +32 -9
- package/dist/frontend/ts7/source-parser.test.js.map +1 -1
- package/dist/frontend/tsc-codes.js +56 -11
- package/dist/frontend/tsc-codes.js.map +1 -1
- package/dist/frontend/tsc-codes.test.d.ts +1 -0
- package/dist/frontend/tsc-codes.test.js +16 -0
- package/dist/frontend/tsc-codes.test.js.map +1 -0
- package/dist/frontend/type-mapper.d.ts +3 -0
- package/dist/frontend/type-mapper.js +589 -206
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/frontend/type-mapper.test.js +108 -33
- package/dist/frontend/type-mapper.test.js.map +1 -1
- package/dist/frontend/union-discriminants.js +8 -2
- package/dist/frontend/union-discriminants.js.map +1 -1
- package/dist/frontend/union-discriminants.test.js +77 -20
- package/dist/frontend/union-discriminants.test.js.map +1 -1
- package/dist/frontend/worker-target.d.ts +6 -0
- package/dist/frontend/worker-target.js +108 -0
- package/dist/frontend/worker-target.js.map +1 -0
- package/dist/frontend/worker-target.test.d.ts +1 -0
- package/dist/frontend/worker-target.test.js +71 -0
- package/dist/frontend/worker-target.test.js.map +1 -0
- package/dist/index.d.ts +9 -8
- package/dist/index.js +174 -88
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.js +95 -38
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/analysis.test.js +91 -15
- package/dist/ir/analysis.test.js.map +1 -1
- package/dist/ir/api.d.ts +4 -0
- package/dist/ir/api.js +6 -0
- package/dist/ir/api.js.map +1 -0
- package/dist/ir/build.d.ts +7 -0
- package/dist/ir/build.js +27 -1
- package/dist/ir/build.js.map +1 -1
- package/dist/ir/builtin-effects.d.ts +9 -0
- package/dist/ir/builtin-effects.js +643 -0
- package/dist/ir/builtin-effects.js.map +1 -0
- package/dist/ir/builtin-signatures.d.ts +15 -0
- package/dist/ir/builtin-signatures.js +3397 -0
- package/dist/ir/builtin-signatures.js.map +1 -0
- package/dist/ir/byte-numbers.js +67 -16
- package/dist/ir/byte-numbers.js.map +1 -1
- package/dist/ir/byte-numbers.test.js +17 -4
- package/dist/ir/byte-numbers.test.js.map +1 -1
- package/dist/ir/constant-tables.js +13 -5
- package/dist/ir/constant-tables.js.map +1 -1
- package/dist/ir/constant-tables.test.js +47 -7
- package/dist/ir/constant-tables.test.js.map +1 -1
- package/dist/ir/control-flow.js +2 -1
- package/dist/ir/control-flow.js.map +1 -1
- package/dist/ir/control-flow.test.js +35 -11
- package/dist/ir/control-flow.test.js.map +1 -1
- package/dist/ir/initializer-bindings.d.ts +9 -0
- package/dist/ir/initializer-bindings.js +115 -0
- package/dist/ir/initializer-bindings.js.map +1 -0
- package/dist/ir/initializer-bindings.test.d.ts +1 -0
- package/dist/ir/initializer-bindings.test.js +118 -0
- package/dist/ir/initializer-bindings.test.js.map +1 -0
- package/dist/ir/integer-loop-facts.d.ts +12 -0
- package/dist/ir/integer-loop-facts.js +137 -0
- package/dist/ir/integer-loop-facts.js.map +1 -0
- package/dist/ir/integer-loops.js +85 -30
- package/dist/ir/integer-loops.js.map +1 -1
- package/dist/ir/integer-loops.test.js +76 -13
- package/dist/ir/integer-loops.test.js.map +1 -1
- package/dist/ir/integer-ranges.js +93 -21
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +199 -21
- package/dist/ir/integer-ranges.test.js.map +1 -1
- package/dist/ir/intrinsic-signatures.d.ts +20 -0
- package/dist/ir/intrinsic-signatures.js +57 -0
- package/dist/ir/intrinsic-signatures.js.map +1 -0
- package/dist/ir/ir.d.ts +15 -2160
- package/dist/ir/ir.js +160 -1396
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/ir.test.js +98 -77
- package/dist/ir/ir.test.js.map +1 -1
- package/dist/ir/numeric-call-specialization.d.ts +8 -0
- package/dist/ir/numeric-call-specialization.js +198 -0
- package/dist/ir/numeric-call-specialization.js.map +1 -0
- package/dist/ir/runtime-features.d.ts +221 -0
- package/dist/ir/runtime-features.js +552 -0
- package/dist/ir/runtime-features.js.map +1 -0
- package/dist/ir/runtime-features.test.d.ts +1 -0
- package/dist/ir/runtime-features.test.js +98 -0
- package/dist/ir/runtime-features.test.js.map +1 -0
- package/dist/ir/scalar-records.js +130 -40
- package/dist/ir/scalar-records.js.map +1 -1
- package/dist/ir/scalar-records.test.js +146 -27
- package/dist/ir/scalar-records.test.js.map +1 -1
- package/dist/ir/serialize.d.ts +1 -1
- package/dist/ir/serialize.js +7 -5
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/serialize.test.js +44 -9
- package/dist/ir/serialize.test.js.map +1 -1
- package/dist/ir/traverse.js +156 -43
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/traverse.test.js +99 -24
- package/dist/ir/traverse.test.js.map +1 -1
- package/dist/ir/validate.d.ts +1 -31
- package/dist/ir/validate.js +869 -1910
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +697 -114
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/library/cache-primitives.js +9 -10
- package/dist/library/cache-primitives.js.map +1 -1
- package/dist/library/cache-reset.test.js +2 -1
- package/dist/library/cache-reset.test.js.map +1 -1
- package/dist/library/compiler-self-identity.js +11 -5
- package/dist/library/compiler-self-identity.js.map +1 -1
- package/dist/library/compiler-self-identity.test.js +10 -3
- package/dist/library/compiler-self-identity.test.js.map +1 -1
- package/dist/library/fence-eval.js +24 -7
- package/dist/library/fence-eval.js.map +1 -1
- package/dist/library/fence-eval.test.js +31 -7
- package/dist/library/fence-eval.test.js.map +1 -1
- package/dist/library/int-infer.js +199 -59
- package/dist/library/int-infer.js.map +1 -1
- package/dist/library/int-infer.test.js +137 -61
- package/dist/library/int-infer.test.js.map +1 -1
- package/dist/library/ir-policy.d.ts +27 -0
- package/dist/library/ir-policy.js +234 -0
- package/dist/library/ir-policy.js.map +1 -0
- package/dist/library/library-cache.js +40 -17
- package/dist/library/library-cache.js.map +1 -1
- package/dist/library/library-cache.test.js +29 -18
- package/dist/library/library-cache.test.js.map +1 -1
- package/dist/library/library-profile.js +68 -13
- package/dist/library/library-profile.js.map +1 -1
- package/dist/library/prepare.js +48 -20
- package/dist/library/prepare.js.map +1 -1
- package/dist/library/semantic-source.js +16 -14
- package/dist/library/semantic-source.js.map +1 -1
- package/dist/library/semantic-source.test.js +9 -14
- package/dist/library/semantic-source.test.js.map +1 -1
- package/dist/library/sidecar-validate.js +53 -12
- package/dist/library/sidecar-validate.js.map +1 -1
- package/dist/library/sidecar.js +85 -24
- package/dist/library/sidecar.js.map +1 -1
- package/dist/library/trap-teaching.js +11 -2
- package/dist/library/trap-teaching.js.map +1 -1
- package/dist/native/cache.js +10 -4
- package/dist/native/cache.js.map +1 -1
- package/dist/native/cli.js +34 -9
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.js +191 -54
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/compiler.test.js +134 -33
- package/dist/native/compiler.test.js.map +1 -1
- package/dist/native/comptime.js +23 -7
- package/dist/native/comptime.js.map +1 -1
- package/dist/native/comptime.test.js +26 -6
- package/dist/native/comptime.test.js.map +1 -1
- package/dist/native/executable-cache.js +77 -27
- package/dist/native/executable-cache.js.map +1 -1
- package/dist/native/executable-cache.test.js +41 -6
- package/dist/native/executable-cache.test.js.map +1 -1
- package/dist/native/file-identity.js +9 -2
- package/dist/native/file-identity.js.map +1 -1
- package/dist/native/file-identity.test.js.map +1 -1
- package/dist/native/library.js +50 -12
- package/dist/native/library.js.map +1 -1
- package/dist/native/prepare.js +121 -34
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/prepare.test.js +22 -6
- package/dist/native/prepare.test.js.map +1 -1
- package/dist/native/runtime-typescript.js +24 -11
- package/dist/native/runtime-typescript.js.map +1 -1
- package/dist/native/runtime-typescript.test.js.map +1 -1
- package/dist/native/sanitizer.js +71 -18
- package/dist/native/sanitizer.js.map +1 -1
- package/dist/native/sanitizer.test.js +78 -20
- package/dist/native/sanitizer.test.js.map +1 -1
- package/dist/native/task.js.map +1 -1
- package/dist/native/task.test.js +7 -2
- package/dist/native/task.test.js.map +1 -1
- package/dist/native/toolchain.js +68 -26
- package/dist/native/toolchain.js.map +1 -1
- package/dist/native/toolchain.test.js +59 -20
- package/dist/native/toolchain.test.js.map +1 -1
- package/dist/startup-cache.d.ts +1 -1
- package/dist/startup-cache.js +1 -1
- package/dist/startup-cache.js.map +1 -1
- package/dist/timing.js.map +1 -1
- package/package.json +20 -20
- package/surface-manifest.json +30 -2
- package/dist/frontend/lowering/lower-builtins.d.ts +0 -601
- package/dist/frontend/lowering/lower-builtins.js +0 -8986
- package/dist/frontend/lowering/lower-builtins.js.map +0 -1
- package/dist/frontend/lowering/lower-containers.d.ts +0 -382
- package/dist/frontend/lowering/lower-containers.js +0 -7344
- package/dist/frontend/lowering/lower-containers.js.map +0 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { dynUndefinedExpr, numLit, strLit, varRef } from "../../../ir/build.js";
|
|
1
2
|
import { pathModuleValue } from "../lower-builtin-values.js";
|
|
2
3
|
import { InternalCompilerError } from "../../../errors.js";
|
|
3
4
|
import * as ts from "../../ts7/adapter.js";
|
|
@@ -5,10 +6,9 @@ import { BOOL, DYN, F64, JSVAL, STRING, UNDEFINED_T, VOID, arrayOf, canDynCheckT
|
|
|
5
6
|
import { isCjsExportTableLiteral, isJsSourceFile, locOf } from "../../program.js";
|
|
6
7
|
import { NARROW_FIRST } from "../surfaces.js";
|
|
7
8
|
import { recordShapeMismatchDiag } from "../../../diagnostics/diagnostic.js";
|
|
8
|
-
import { PoisonError,
|
|
9
|
-
import { lowerIndexMergeHelper } from "../
|
|
9
|
+
import { PoisonError, neverTaintedJsType } from "../lowerer.js";
|
|
10
|
+
import { lowerIndexMergeHelper } from "../containers/indexed-objects.js";
|
|
10
11
|
import { isGenericCallableMemberType, jsOpenObjectType } from "../../type-mapper.js";
|
|
11
|
-
import { numLit, strLit, varRef } from "../../../ir/build.js";
|
|
12
12
|
import { isSafeToRepeat } from "./evaluation-safety.js";
|
|
13
13
|
import { tryLowerExpression } from "./try-lower-expression.js";
|
|
14
14
|
import { fenceSymbolFieldCopy } from "../symbol-fields.js";
|
|
@@ -31,7 +31,9 @@ function settledDropNames(lowerer, tsType) {
|
|
|
31
31
|
for (const part of parts) {
|
|
32
32
|
const sym = part.getSymbol();
|
|
33
33
|
if (!sym ||
|
|
34
|
-
!lowerer.checker
|
|
34
|
+
!lowerer.checker
|
|
35
|
+
.declarationsOf(sym)
|
|
36
|
+
.some((d) => ts.isInterfaceDeclaration(d) && lowerer.isStdlibFile(d.getSourceFile()))) {
|
|
35
37
|
continue;
|
|
36
38
|
}
|
|
37
39
|
if (sym.name === "PromiseFulfilledResult" || sym.name === "PromiseRejectedResult") {
|
|
@@ -106,7 +108,11 @@ function literalKeySpellingOf(t) {
|
|
|
106
108
|
if (t.isUnionType()) {
|
|
107
109
|
let out = null;
|
|
108
110
|
for (const arm of ts.constituentTypes(t)) {
|
|
109
|
-
const s = arm.isStringLiteralType()
|
|
111
|
+
const s = arm.isStringLiteralType()
|
|
112
|
+
? arm.value
|
|
113
|
+
: arm.isNumberLiteralType()
|
|
114
|
+
? String(arm.value)
|
|
115
|
+
: null;
|
|
110
116
|
if (s === null || (out !== null && s !== out))
|
|
111
117
|
return null;
|
|
112
118
|
out = s;
|
|
@@ -129,7 +135,8 @@ function pureKeyExpr(lowerer, expr) {
|
|
|
129
135
|
return true;
|
|
130
136
|
if (ts.isStringLiteralLike(expr) || ts.isNumericLiteral(expr))
|
|
131
137
|
return true;
|
|
132
|
-
if (expr.kind === ts.SyntaxKind.TrueKeyword ||
|
|
138
|
+
if (expr.kind === ts.SyntaxKind.TrueKeyword ||
|
|
139
|
+
expr.kind === ts.SyntaxKind.FalseKeyword ||
|
|
133
140
|
expr.kind === ts.SyntaxKind.NullKeyword)
|
|
134
141
|
return true;
|
|
135
142
|
if (ts.isPropertyAccessExpression(expr)) {
|
|
@@ -139,20 +146,27 @@ function pureKeyExpr(lowerer, expr) {
|
|
|
139
146
|
return pureKeyExpr(lowerer, expr.expression);
|
|
140
147
|
}
|
|
141
148
|
if (ts.isPrefixUnaryExpression(expr) &&
|
|
142
|
-
(expr.operator === ts.SyntaxKind.MinusToken ||
|
|
143
|
-
expr.operator === ts.SyntaxKind.
|
|
149
|
+
(expr.operator === ts.SyntaxKind.MinusToken ||
|
|
150
|
+
expr.operator === ts.SyntaxKind.PlusToken ||
|
|
151
|
+
expr.operator === ts.SyntaxKind.ExclamationToken ||
|
|
152
|
+
expr.operator === ts.SyntaxKind.TildeToken)) {
|
|
144
153
|
return pureKeyExpr(lowerer, expr.operand);
|
|
145
154
|
}
|
|
146
155
|
if (ts.isBinaryExpression(expr)) {
|
|
147
156
|
const op = expr.operatorToken.kind;
|
|
148
|
-
const pureOp = op === ts.SyntaxKind.AmpersandAmpersandToken ||
|
|
157
|
+
const pureOp = op === ts.SyntaxKind.AmpersandAmpersandToken ||
|
|
158
|
+
op === ts.SyntaxKind.BarBarToken ||
|
|
149
159
|
op === ts.SyntaxKind.QuestionQuestionToken ||
|
|
150
|
-
(op >= ts.SyntaxKind.LessThanToken &&
|
|
151
|
-
op
|
|
160
|
+
(op >= ts.SyntaxKind.LessThanToken &&
|
|
161
|
+
op <= ts.SyntaxKind.CaretToken &&
|
|
162
|
+
op !== ts.SyntaxKind.InstanceOfKeyword &&
|
|
163
|
+
op !== ts.SyntaxKind.InKeyword);
|
|
152
164
|
return pureOp && pureKeyExpr(lowerer, expr.left) && pureKeyExpr(lowerer, expr.right);
|
|
153
165
|
}
|
|
154
166
|
if (ts.isConditionalExpression(expr)) {
|
|
155
|
-
return pureKeyExpr(lowerer, expr.condition) &&
|
|
167
|
+
return (pureKeyExpr(lowerer, expr.condition) &&
|
|
168
|
+
pureKeyExpr(lowerer, expr.whenTrue) &&
|
|
169
|
+
pureKeyExpr(lowerer, expr.whenFalse));
|
|
156
170
|
}
|
|
157
171
|
if (ts.isTemplateExpression(expr))
|
|
158
172
|
return expr.templateSpans.every((s) => pureKeyExpr(lowerer, s.expression));
|
|
@@ -195,31 +209,56 @@ export function lowerDynObjectLiteral(lowerer, expr, boxValue) {
|
|
|
195
209
|
return;
|
|
196
210
|
if (hasAccessors) {
|
|
197
211
|
for (const field of fields) {
|
|
198
|
-
const descriptor = {
|
|
212
|
+
const descriptor = {
|
|
213
|
+
kind: "dynObjLit",
|
|
214
|
+
type: DYN,
|
|
215
|
+
loc,
|
|
216
|
+
fields: [
|
|
199
217
|
{ key: { kind: "strLit", value: "value", type: STRING, loc }, value: field.value },
|
|
200
|
-
...["writable", "enumerable", "configurable"].map(name => ({
|
|
218
|
+
...["writable", "enumerable", "configurable"].map((name) => ({
|
|
201
219
|
key: strLit(name, loc),
|
|
202
|
-
value: {
|
|
220
|
+
value: {
|
|
221
|
+
kind: "dynFrom",
|
|
222
|
+
value: { kind: "boolLit", value: true, type: BOOL, loc },
|
|
223
|
+
type: DYN,
|
|
224
|
+
loc,
|
|
225
|
+
},
|
|
203
226
|
})),
|
|
204
|
-
]
|
|
205
|
-
|
|
227
|
+
],
|
|
228
|
+
};
|
|
229
|
+
acc = {
|
|
230
|
+
kind: "libCall",
|
|
231
|
+
fn: "dyn.defineProperty",
|
|
232
|
+
args: [acc, lowerer.coerceToExpected(field.key, DYN), descriptor],
|
|
233
|
+
type: DYN,
|
|
234
|
+
loc,
|
|
235
|
+
};
|
|
206
236
|
}
|
|
207
237
|
fields = [];
|
|
208
238
|
return;
|
|
209
239
|
}
|
|
210
240
|
const chunk = { kind: "dynObjLit", fields, type: DYN, loc };
|
|
211
|
-
acc =
|
|
212
|
-
|
|
213
|
-
|
|
241
|
+
acc =
|
|
242
|
+
acc === null
|
|
243
|
+
? chunk
|
|
244
|
+
: { kind: "libCall", fn: "dyn.assign", args: [acc, chunk], type: DYN, loc };
|
|
214
245
|
fields = [];
|
|
215
246
|
};
|
|
216
247
|
for (const prop of expr.properties) {
|
|
217
|
-
if (ts.isPropertyAssignment(prop) &&
|
|
248
|
+
if (ts.isPropertyAssignment(prop) &&
|
|
249
|
+
!ts.isComputedPropertyName(prop.name) &&
|
|
250
|
+
prop.name.text === "__proto__") {
|
|
218
251
|
if (prop.initializer.kind !== ts.SyntaxKind.NullKeyword)
|
|
219
252
|
lowerer.unsupported("SC1090", prop, "object-literal prototypes other than null (use Object.setPrototypeOf)");
|
|
220
253
|
flushFields();
|
|
221
254
|
acc ??= { kind: "dynObjLit", fields: [], type: DYN, loc };
|
|
222
|
-
acc = {
|
|
255
|
+
acc = {
|
|
256
|
+
kind: "libCall",
|
|
257
|
+
fn: "dyn.setPrototype",
|
|
258
|
+
args: [acc, lowerer.lowerExprExpecting(prop.initializer, DYN)],
|
|
259
|
+
type: DYN,
|
|
260
|
+
loc: locOf(prop),
|
|
261
|
+
};
|
|
223
262
|
continue;
|
|
224
263
|
}
|
|
225
264
|
if (ts.isSpreadAssignment(prop)) {
|
|
@@ -231,14 +270,18 @@ export function lowerDynObjectLiteral(lowerer, expr, boxValue) {
|
|
|
231
270
|
? lowerer.lowerExprExpecting(prop.expression, DYN)
|
|
232
271
|
: lowerer.lowerExpr(prop.expression);
|
|
233
272
|
fenceSymbolFieldCopy(lowerer, prop.expression, raw.type);
|
|
234
|
-
const source = boxValue
|
|
235
|
-
? boxValue(prop.expression, raw)
|
|
236
|
-
: lowerer.coerceToExpected(raw, DYN);
|
|
273
|
+
const source = boxValue ? boxValue(prop.expression, raw) : lowerer.coerceToExpected(raw, DYN);
|
|
237
274
|
if (source.type.kind !== "dyn") {
|
|
238
275
|
lowerer.unsupported("SC1101", prop.expression, `spreading '${lowerer.fmt(source.type)}' into a checked-dynamic object literal`);
|
|
239
276
|
}
|
|
240
277
|
acc ??= { kind: "dynObjLit", fields: [], type: DYN, loc };
|
|
241
|
-
acc = {
|
|
278
|
+
acc = {
|
|
279
|
+
kind: "libCall",
|
|
280
|
+
fn: "dyn.copyDataProperties",
|
|
281
|
+
args: [acc, source],
|
|
282
|
+
type: DYN,
|
|
283
|
+
loc: locOf(prop),
|
|
284
|
+
};
|
|
242
285
|
continue;
|
|
243
286
|
}
|
|
244
287
|
const name = prop.name;
|
|
@@ -278,19 +321,39 @@ export function lowerDynObjectLiteral(lowerer, expr, boxValue) {
|
|
|
278
321
|
flushFields();
|
|
279
322
|
hasAccessors = true;
|
|
280
323
|
acc ??= { kind: "dynObjLit", fields: [], type: DYN, loc };
|
|
281
|
-
|
|
282
|
-
lowerer.rejectThisInObjectMethod(prop.body ?? prop);
|
|
283
|
-
const fn = lowerer.lowerLambda(prop);
|
|
324
|
+
const fn = lowerer.lowerLambda(prop, true);
|
|
284
325
|
const descriptor = {
|
|
285
|
-
kind: "dynObjLit",
|
|
286
|
-
|
|
287
|
-
|
|
326
|
+
kind: "dynObjLit",
|
|
327
|
+
type: DYN,
|
|
328
|
+
loc: locOf(prop),
|
|
329
|
+
fields: [
|
|
330
|
+
{
|
|
331
|
+
key: {
|
|
332
|
+
kind: "strLit",
|
|
333
|
+
value: ts.isGetAccessorDeclaration(prop) ? "get" : "set",
|
|
334
|
+
type: STRING,
|
|
335
|
+
loc,
|
|
336
|
+
},
|
|
337
|
+
value: lowerer.coerceToExpected(fn, DYN),
|
|
338
|
+
},
|
|
339
|
+
...["enumerable", "configurable"].map((name) => ({
|
|
288
340
|
key: strLit(name, loc),
|
|
289
|
-
value: {
|
|
341
|
+
value: {
|
|
342
|
+
kind: "dynFrom",
|
|
343
|
+
value: { kind: "boolLit", value: true, type: BOOL, loc },
|
|
344
|
+
type: DYN,
|
|
345
|
+
loc,
|
|
346
|
+
},
|
|
290
347
|
})),
|
|
291
348
|
],
|
|
292
349
|
};
|
|
293
|
-
acc = {
|
|
350
|
+
acc = {
|
|
351
|
+
kind: "libCall",
|
|
352
|
+
fn: "dyn.defineProperty",
|
|
353
|
+
args: [acc, lowerer.coerceToExpected(key, DYN), descriptor],
|
|
354
|
+
type: DYN,
|
|
355
|
+
loc,
|
|
356
|
+
};
|
|
294
357
|
continue;
|
|
295
358
|
}
|
|
296
359
|
const valueExpr = ts.isMethodDeclaration(prop)
|
|
@@ -305,13 +368,11 @@ export function lowerDynObjectLiteral(lowerer, expr, boxValue) {
|
|
|
305
368
|
const propDiagsBefore = lowerer.diags.length;
|
|
306
369
|
try {
|
|
307
370
|
const lowerValue = () => ts.isMethodDeclaration(prop)
|
|
308
|
-
?
|
|
371
|
+
? lowerer.lowerLambda(prop, true)
|
|
309
372
|
: !boxValue && ts.isObjectLiteralExpression(valueExpr)
|
|
310
373
|
? lowerer.lowerExprExpecting(valueExpr, DYN)
|
|
311
374
|
: lowerer.lowerExpr(valueExpr);
|
|
312
|
-
raw =
|
|
313
|
-
fenceClosureProbe(lowerer, valueExpr, undefined, lowerValue) ??
|
|
314
|
-
lowerValue();
|
|
375
|
+
raw = fenceClosureProbe(lowerer, valueExpr, undefined, lowerValue) ?? lowerValue();
|
|
315
376
|
}
|
|
316
377
|
catch (err) {
|
|
317
378
|
// A PURE member read a JS file cannot lower (a namespace object
|
|
@@ -336,7 +397,10 @@ export function lowerDynObjectLiteral(lowerer, expr, boxValue) {
|
|
|
336
397
|
: lowerer.coerceToExpected(raw, DYN);
|
|
337
398
|
// A JS object's array-valued properties retain the same source array.
|
|
338
399
|
// Repeated references must compare equal and mutations remain shared.
|
|
339
|
-
if (!boxValue &&
|
|
400
|
+
if (!boxValue &&
|
|
401
|
+
isJsSourceFile(prop.getSourceFile()) &&
|
|
402
|
+
v.kind === "dynFrom" &&
|
|
403
|
+
v.value.type.kind === "array") {
|
|
340
404
|
v = { ...v, liveRef: true };
|
|
341
405
|
}
|
|
342
406
|
if (v.type.kind !== "dyn") {
|
|
@@ -406,7 +470,9 @@ function fenceClosureProbe(lowerer, node, slotType, attempt) {
|
|
|
406
470
|
let inner = node;
|
|
407
471
|
while (ts.isParenthesizedExpression(inner))
|
|
408
472
|
inner = inner.expression;
|
|
409
|
-
if (!ts.isArrowFunction(inner) &&
|
|
473
|
+
if (!ts.isArrowFunction(inner) &&
|
|
474
|
+
!ts.isFunctionExpression(inner) &&
|
|
475
|
+
!ts.isMethodDeclaration(inner)) {
|
|
410
476
|
return null;
|
|
411
477
|
}
|
|
412
478
|
// The trap's ABI: the field's func slot when one exists; otherwise (the
|
|
@@ -498,7 +564,8 @@ function literalUnionArmOf(lowerer, expr, tsType, recordArms) {
|
|
|
498
564
|
if (ftT.isNumberLiteralType())
|
|
499
565
|
return litT.isNumberLiteralType() && litT.value === ftT.value;
|
|
500
566
|
if (ftT.flags & ts.TypeFlags.BooleanLiteral) {
|
|
501
|
-
return (litT.flags & ts.TypeFlags.BooleanLiteral) !== 0 &&
|
|
567
|
+
return ((litT.flags & ts.TypeFlags.BooleanLiteral) !== 0 &&
|
|
568
|
+
lowerer.checker.typeToString(litT) === lowerer.checker.typeToString(ftT));
|
|
502
569
|
}
|
|
503
570
|
if (ftT.flags & ts.TypeFlags.Null)
|
|
504
571
|
return (litT.flags & ts.TypeFlags.Null) !== 0;
|
|
@@ -510,7 +577,9 @@ function literalUnionArmOf(lowerer, expr, tsType, recordArms) {
|
|
|
510
577
|
const candidates = new Set();
|
|
511
578
|
for (const member of ts.constituentTypes(tsType)) {
|
|
512
579
|
const mMapped = lowerer.mapTypeOf(member);
|
|
513
|
-
if (mMapped?.kind !== "record" ||
|
|
580
|
+
if (mMapped?.kind !== "record" ||
|
|
581
|
+
!armShapeIds.has(mMapped.shapeId) ||
|
|
582
|
+
candidates.has(mMapped.shapeId))
|
|
514
583
|
continue;
|
|
515
584
|
const shape = lowerer.shapes.get(mMapped.shapeId);
|
|
516
585
|
if (!shape || shape.tuple || shape.indexValue)
|
|
@@ -572,59 +641,100 @@ function lowerOptionalIndexSpreadSource(lowerer, source, loc) {
|
|
|
572
641
|
}
|
|
573
642
|
const selected = {
|
|
574
643
|
kind: "ternary",
|
|
575
|
-
cond: {
|
|
644
|
+
cond: {
|
|
645
|
+
kind: "unionIsTag",
|
|
646
|
+
unionId: source.type.unionId,
|
|
647
|
+
tag: undefinedTag,
|
|
648
|
+
negated: false,
|
|
649
|
+
value: stable,
|
|
650
|
+
type: BOOL,
|
|
651
|
+
loc,
|
|
652
|
+
},
|
|
576
653
|
then: { kind: "recordLit", fields: [], type: recordType, loc },
|
|
577
|
-
else_: {
|
|
654
|
+
else_: {
|
|
655
|
+
kind: "unionNarrow",
|
|
656
|
+
unionId: source.type.unionId,
|
|
657
|
+
tag: recordTag,
|
|
658
|
+
value: stable,
|
|
659
|
+
type: recordType,
|
|
660
|
+
loc,
|
|
661
|
+
},
|
|
578
662
|
type: recordType,
|
|
579
663
|
loc,
|
|
580
664
|
};
|
|
581
|
-
return prefix.length === 0
|
|
665
|
+
return prefix.length === 0
|
|
666
|
+
? selected
|
|
667
|
+
: { kind: "seqExpr", stmts: prefix, result: selected, type: recordType, loc };
|
|
582
668
|
}
|
|
583
669
|
export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
584
670
|
// Unannotated JavaScript accumulator fields have no element contract.
|
|
585
671
|
// Preserve their checked arrays instead of assigning never[] a numeric ABI.
|
|
586
|
-
if (!expected &&
|
|
587
|
-
|
|
672
|
+
if (!expected &&
|
|
673
|
+
isJsSourceFile(expr.getSourceFile()) &&
|
|
674
|
+
expr.properties.some((prop) => ts.isPropertyAssignment(prop) &&
|
|
675
|
+
((ts.isArrayLiteralExpression(prop.initializer) &&
|
|
676
|
+
prop.initializer.elements.length === 0) ||
|
|
677
|
+
neverTaintedJsType(lowerer, prop.initializer, lowerer.typeOf(prop.initializer))))) {
|
|
588
678
|
return lowerDynObjectLiteral(lowerer, expr);
|
|
589
679
|
}
|
|
590
|
-
if (!expected &&
|
|
591
|
-
|
|
680
|
+
if (!expected &&
|
|
681
|
+
isJsSourceFile(expr.getSourceFile()) &&
|
|
682
|
+
expr.properties.some((prop) => ts.isPropertyAssignment(prop) &&
|
|
683
|
+
lowerer.mapTypeOf(lowerer.typeOf(prop.initializer))?.kind === "array" &&
|
|
684
|
+
tryLowerExpression(lowerer, prop.initializer)?.type.kind === "dyn")) {
|
|
592
685
|
return lowerDynObjectLiteral(lowerer, expr);
|
|
593
686
|
}
|
|
594
687
|
// A JS constructor parameter can hold omitted values even when its
|
|
595
688
|
// documentation names a number. Inferred literal fields must preserve
|
|
596
689
|
// the represented binding rather than checking it back into that type.
|
|
597
|
-
if (!expected &&
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
690
|
+
if (!expected &&
|
|
691
|
+
isJsSourceFile(expr.getSourceFile()) &&
|
|
692
|
+
expr.properties.some((prop) => {
|
|
693
|
+
let value = ts.isPropertyAssignment(prop)
|
|
694
|
+
? prop.initializer
|
|
695
|
+
: ts.isShorthandPropertyAssignment(prop)
|
|
696
|
+
? prop.name
|
|
697
|
+
: null;
|
|
698
|
+
while (value && ts.isParenthesizedExpression(value))
|
|
699
|
+
value = value.expression;
|
|
700
|
+
if (!value || !ts.isIdentifier(value))
|
|
701
|
+
return false;
|
|
702
|
+
const stored = lowerer.peekLocal(value)?.type ?? lowerer.globalOf(value)?.type;
|
|
703
|
+
const inferred = lowerer.mapTypeOf(lowerer.typeOf(value));
|
|
704
|
+
return (stored?.kind === "dyn" &&
|
|
705
|
+
inferred !== null &&
|
|
706
|
+
inferred.kind !== "dyn" &&
|
|
707
|
+
lowerer.dynConvertible(inferred));
|
|
708
|
+
})) {
|
|
608
709
|
return lowerDynObjectLiteral(lowerer, expr);
|
|
609
710
|
}
|
|
610
711
|
// JavaScript object methods/accessors carry a live receiver. Keep the
|
|
611
712
|
// literal in checked native storage instead of erasing its prototype ABI.
|
|
612
|
-
if (isJsSourceFile(expr.getSourceFile()) &&
|
|
713
|
+
if (isJsSourceFile(expr.getSourceFile()) &&
|
|
714
|
+
(expr.properties.length === 0 ||
|
|
715
|
+
expr.properties.some((prop) => ts.isMethodDeclaration(prop) ||
|
|
716
|
+
ts.isGetAccessorDeclaration(prop) ||
|
|
717
|
+
ts.isSetAccessorDeclaration(prop)))) {
|
|
613
718
|
return lowerDynObjectLiteral(lowerer, expr);
|
|
614
719
|
}
|
|
615
720
|
const loc = locOf(expr);
|
|
616
721
|
// Module collection already chose checked storage for this JavaScript
|
|
617
722
|
// binding. Construct in that representation: an intermediate record would
|
|
618
723
|
// check nested aliases back into inferred shapes and lose their identity.
|
|
619
|
-
if (isJsSourceFile(expr.getSourceFile()) &&
|
|
620
|
-
|
|
724
|
+
if (isJsSourceFile(expr.getSourceFile()) &&
|
|
725
|
+
ts.isVariableDeclaration(expr.parent) &&
|
|
726
|
+
expr.parent.initializer === expr &&
|
|
727
|
+
ts.isIdentifier(expr.parent.name) &&
|
|
621
728
|
lowerer.globalOf(expr.parent.name)?.type.kind === "dyn") {
|
|
622
729
|
return lowerDynObjectLiteral(lowerer, expr);
|
|
623
730
|
}
|
|
624
731
|
// A checked spread carries runtime symbol keys and receiver-sensitive
|
|
625
732
|
// methods absent from its inferred record shape. Copy the real properties.
|
|
626
|
-
if (!expected &&
|
|
627
|
-
|
|
733
|
+
if (!expected &&
|
|
734
|
+
isJsSourceFile(expr.getSourceFile()) &&
|
|
735
|
+
expr.properties.some((property) => ts.isSpreadAssignment(property) &&
|
|
736
|
+
(lowerer.builtinNamespaceModuleOf(property.expression)?.startsWith("path") ||
|
|
737
|
+
tryLowerExpression(lowerer, property.expression)?.type.kind === "dyn"))) {
|
|
628
738
|
return lowerDynObjectLiteral(lowerer, expr);
|
|
629
739
|
}
|
|
630
740
|
const unionClone = lowerUnionRecordClone(lowerer, expr);
|
|
@@ -694,8 +804,10 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
694
804
|
// stores "16" — JS's ToPropertyKey; the checker names the property
|
|
695
805
|
// symbol the same way), and FOLDABLE computed keys (above).
|
|
696
806
|
if (!prop.name ||
|
|
697
|
-
!(ts.isIdentifier(prop.name) ||
|
|
698
|
-
ts.
|
|
807
|
+
!(ts.isIdentifier(prop.name) ||
|
|
808
|
+
ts.isStringLiteral(prop.name) ||
|
|
809
|
+
ts.isNumericLiteral(prop.name) ||
|
|
810
|
+
ts.isComputedPropertyName(prop.name))) {
|
|
699
811
|
lowerer.unsupported("SC1090", prop, "non-identifier property names");
|
|
700
812
|
}
|
|
701
813
|
// Shorthand methods are just closure-valued fields — but their `this`
|
|
@@ -710,8 +822,11 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
710
822
|
// An inferred binding pattern supplies placeholders such as
|
|
711
823
|
// { nested: { value: any } }. Construct the literal's own fields so
|
|
712
824
|
// those placeholders do not erase instantiated generic storage.
|
|
713
|
-
if (!expected &&
|
|
714
|
-
ts.
|
|
825
|
+
if (!expected &&
|
|
826
|
+
ts.isVariableDeclaration(expr.parent) &&
|
|
827
|
+
!expr.parent.type &&
|
|
828
|
+
ts.isObjectBindingPattern(expr.parent.name) &&
|
|
829
|
+
expr.parent.initializer === expr) {
|
|
715
830
|
tsType = lowerer.typeOf(expr);
|
|
716
831
|
}
|
|
717
832
|
// `as never` supplies no construction layout. Keep the literal's own
|
|
@@ -745,7 +860,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
745
860
|
// slot's field types (`lanIp: string | null`), which the literal's own
|
|
746
861
|
// type narrows away (a field written as `lanIp: null` types as bare
|
|
747
862
|
// `null`, which maps to nothing on its own).
|
|
748
|
-
if (tsType.isUnionType() &&
|
|
863
|
+
if (tsType.isUnionType() &&
|
|
864
|
+
ts.constituentTypes(tsType).some((t) => t.getSymbol()?.name === "PromiseLike")) {
|
|
749
865
|
tsType = lowerer.checker.getAwaitedType(tsType) ?? tsType;
|
|
750
866
|
}
|
|
751
867
|
let mapped = lowerer.mapTypeOf(tsType);
|
|
@@ -753,7 +869,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
753
869
|
// fields make the literal's inferred type look like a fixed record.
|
|
754
870
|
// Keep a checked-dynamic destination in that representation so copying
|
|
755
871
|
// preserves keys, evaluation order, and fields overwritten afterwards.
|
|
756
|
-
if (mapped?.kind === "dyn" &&
|
|
872
|
+
if (mapped?.kind === "dyn" &&
|
|
873
|
+
expr.properties.some((p) => ts.isSpreadAssignment(p) && lowerer.mapTypeOf(lowerer.typeOf(p.expression))?.kind === "dyn")) {
|
|
757
874
|
return lowerDynObjectLiteral(lowerer, expr);
|
|
758
875
|
}
|
|
759
876
|
// A JavaScript call can contextually type an object literal as string even
|
|
@@ -826,7 +943,12 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
826
943
|
// a prototype-named DATA property (notably `toString`). Object literals
|
|
827
944
|
// have no call signature; construct their own data shape and let the
|
|
828
945
|
// surrounding assignment/assertion enforce the destination contract.
|
|
829
|
-
if (mapped === null ||
|
|
946
|
+
if (mapped === null ||
|
|
947
|
+
mapped.kind === "union" ||
|
|
948
|
+
mapped.kind === "dyn" ||
|
|
949
|
+
mapped.kind === "object" ||
|
|
950
|
+
mapped.kind === "jsval" ||
|
|
951
|
+
mapped.kind === "func") {
|
|
830
952
|
const ctxUnion = mapped?.kind === "union" ? mapped : null;
|
|
831
953
|
mapped = lowerer.mapTypeOf(lowerer.typeOf(expr)) ?? mapped;
|
|
832
954
|
// A literal whose own shape re-tags into NO arm of the contextual
|
|
@@ -851,7 +973,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
851
973
|
!armShape?.tuple &&
|
|
852
974
|
// `{} | undefined` supplies no layout for a populated options
|
|
853
975
|
// literal, just as a bare empty-record context supplies none.
|
|
854
|
-
(expr.properties.length === 0 ||
|
|
976
|
+
(expr.properties.length === 0 ||
|
|
977
|
+
(armShape && (armShape.fields.length > 0 || armShape.indexValue)))) {
|
|
855
978
|
mapped = recordArms[0];
|
|
856
979
|
}
|
|
857
980
|
}
|
|
@@ -873,7 +996,9 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
873
996
|
// retaining distinct nominal knots. An inferred spread shape can
|
|
874
997
|
// match the wrong knot, so consult discriminants even if that shape
|
|
875
998
|
// already appears in the union.
|
|
876
|
-
if (ownShapeId === null ||
|
|
999
|
+
if (ownShapeId === null ||
|
|
1000
|
+
!recordArms.some((a) => a.shapeId === ownShapeId) ||
|
|
1001
|
+
expr.properties.some(ts.isSpreadAssignment)) {
|
|
877
1002
|
const arm = literalUnionArmOf(lowerer, expr, tsType, recordArms);
|
|
878
1003
|
if (arm)
|
|
879
1004
|
mapped = arm;
|
|
@@ -889,7 +1014,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
889
1014
|
// (rest-param function types) narrow away. SEMANTICS.md documents the
|
|
890
1015
|
// enumeration divergence.
|
|
891
1016
|
if (isJsSourceFile(expr.getSourceFile()) &&
|
|
892
|
-
(!mapped ||
|
|
1017
|
+
(!mapped ||
|
|
1018
|
+
expr.properties.some((p) => ts.isGetAccessorDeclaration(p) || ts.isSetAccessorDeclaration(p))) &&
|
|
893
1019
|
isCjsExportTableLiteral(expr)) {
|
|
894
1020
|
const fields = [];
|
|
895
1021
|
for (const prop of expr.properties) {
|
|
@@ -925,8 +1051,11 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
925
1051
|
// descriptor records with `any` values) — builds as a dyn OBJECT:
|
|
926
1052
|
// each field converts through the usual dyn boundary, and dynamic
|
|
927
1053
|
// consumers ride the keyed-dyn paths. TypeScript keeps the fence.
|
|
928
|
-
if (mapped?.kind === "dyn" ||
|
|
929
|
-
(!
|
|
1054
|
+
if (mapped?.kind === "dyn" ||
|
|
1055
|
+
(!mapped && isJsSourceFile(expr.getSourceFile())) ||
|
|
1056
|
+
(!expected &&
|
|
1057
|
+
mapped &&
|
|
1058
|
+
jsOpenObjectType(expr, mapped, lowerer.shapes, lowerer.unions).kind === "dyn")) {
|
|
930
1059
|
return lowerDynObjectLiteral(lowerer, expr);
|
|
931
1060
|
}
|
|
932
1061
|
if (!mapped || mapped.kind !== "record")
|
|
@@ -937,14 +1066,19 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
937
1066
|
// conditional records: an empty array in one arm has no element layout
|
|
938
1067
|
// until the join supplies it. Existing values still use width coercion;
|
|
939
1068
|
// extra fields, spreads, accessors, and keyed shapes retain their paths.
|
|
940
|
-
if (expected &&
|
|
1069
|
+
if (expected &&
|
|
1070
|
+
!isJsSourceFile(expr.getSourceFile()) &&
|
|
941
1071
|
expr.properties.every((p) => ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p))) {
|
|
942
1072
|
const own = lowerer.shapes.get(type.shapeId);
|
|
943
1073
|
const target = lowerer.shapes.get(expected.shapeId);
|
|
944
|
-
if (!own.tuple &&
|
|
945
|
-
!
|
|
1074
|
+
if (!own.tuple &&
|
|
1075
|
+
!target.tuple &&
|
|
1076
|
+
!own.indexValue &&
|
|
1077
|
+
!target.indexValue &&
|
|
1078
|
+
!shapeHasAccessorSlots(own) &&
|
|
1079
|
+
!shapeHasAccessorSlots(target) &&
|
|
946
1080
|
target.fields.every((field) => own.fields.some((candidate) => candidate.name === field.name) ||
|
|
947
|
-
field.type.kind === "union" && lowerer.armTag(field.type.unionId, UNDEFINED_T) >= 0) &&
|
|
1081
|
+
(field.type.kind === "union" && lowerer.armTag(field.type.unionId, UNDEFINED_T) >= 0)) &&
|
|
948
1082
|
own.fields.every((field) => target.fields.some((candidate) => candidate.name === field.name))) {
|
|
949
1083
|
type = { kind: "record", shapeId: expected.shapeId };
|
|
950
1084
|
}
|
|
@@ -952,7 +1086,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
952
1086
|
let shape = lowerer.shapes.get(type.shapeId);
|
|
953
1087
|
// JavaScript Dates carry native object identity in checked storage. An
|
|
954
1088
|
// inferred scalar Date field would erase that identity before boxing.
|
|
955
|
-
if (isJsSourceFile(expr.getSourceFile()) &&
|
|
1089
|
+
if (isJsSourceFile(expr.getSourceFile()) &&
|
|
1090
|
+
shape.fields.some((field) => field.type.kind === "date")) {
|
|
956
1091
|
return lowerDynObjectLiteral(lowerer, expr);
|
|
957
1092
|
}
|
|
958
1093
|
// ACCESSOR properties, JS literals only (TS accessors fill the shape's
|
|
@@ -963,7 +1098,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
963
1098
|
if (isJsSourceFile(expr.getSourceFile())) {
|
|
964
1099
|
const accessorNames = new Set(expr.properties
|
|
965
1100
|
.filter((p) => ts.isGetAccessorDeclaration(p) || ts.isSetAccessorDeclaration(p))
|
|
966
|
-
.map((p) =>
|
|
1101
|
+
.map((p) => p.name && (ts.isIdentifier(p.name) || ts.isStringLiteral(p.name)) ? p.name.text : "")
|
|
967
1102
|
.filter((n) => n !== ""));
|
|
968
1103
|
if (accessorNames.size > 0) {
|
|
969
1104
|
const narrowed = shape.fields.filter((f) => !accessorNames.has(f.name));
|
|
@@ -982,7 +1117,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
982
1117
|
ts.isVariableStatement(expr.parent?.parent?.parent) &&
|
|
983
1118
|
ts.isSourceFile(expr.parent?.parent?.parent?.parent);
|
|
984
1119
|
const assignedProperties = expr.properties.filter((prop) => ts.isPropertyAssignment(prop) || ts.isShorthandPropertyAssignment(prop));
|
|
985
|
-
if (topLevelJsDecl &&
|
|
1120
|
+
if (topLevelJsDecl &&
|
|
1121
|
+
isJsSourceFile(expr.getSourceFile()) &&
|
|
986
1122
|
assignedProperties.length === expr.properties.length) {
|
|
987
1123
|
const provided = new Set(assignedProperties.map((prop) => propNameText(lowerer, prop.name)));
|
|
988
1124
|
if (shape.fields.some((field) => !provided.has(field.name))) {
|
|
@@ -1013,7 +1149,9 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1013
1149
|
expr.properties.length >= 2 &&
|
|
1014
1150
|
ts.isSpreadAssignment(expr.properties[0]) &&
|
|
1015
1151
|
!conditionalSpreadOf(expr.properties[0].expression) &&
|
|
1016
|
-
expr.properties
|
|
1152
|
+
expr.properties
|
|
1153
|
+
.slice(1)
|
|
1154
|
+
.every((p) => (ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
|
|
1017
1155
|
p.name !== undefined &&
|
|
1018
1156
|
(ts.isIdentifier(p.name) ||
|
|
1019
1157
|
ts.isStringLiteral(p.name) ||
|
|
@@ -1068,7 +1206,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1068
1206
|
if (shape.indexValue &&
|
|
1069
1207
|
shape.fields.length === 0 &&
|
|
1070
1208
|
!shape.tuple &&
|
|
1071
|
-
(expr.properties.some((p) => ts.isSpreadAssignment(p)) ||
|
|
1209
|
+
(expr.properties.some((p) => ts.isSpreadAssignment(p)) ||
|
|
1210
|
+
expr.properties.some(isRuntimeComputedKey))) {
|
|
1072
1211
|
const contributors = [];
|
|
1073
1212
|
let mergeable = true;
|
|
1074
1213
|
for (const prop of expr.properties) {
|
|
@@ -1085,7 +1224,9 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1085
1224
|
const csProp = cs.props[0];
|
|
1086
1225
|
const cond = lowerer.lowerCondition(cs.cond);
|
|
1087
1226
|
const vNode = ts.isPropertyAssignment(csProp) ? csProp.initializer : csProp;
|
|
1088
|
-
const v = lowerer.intoIndexValueSlot(ts.isPropertyAssignment(csProp)
|
|
1227
|
+
const v = lowerer.intoIndexValueSlot(ts.isPropertyAssignment(csProp)
|
|
1228
|
+
? lowerer.lowerExpr(csProp.initializer)
|
|
1229
|
+
: lowerer.lowerShorthandValue(csProp), shape.indexValue, vNode);
|
|
1089
1230
|
contributors.push({
|
|
1090
1231
|
kind: "field",
|
|
1091
1232
|
name: csProp.name.text,
|
|
@@ -1175,7 +1316,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1175
1316
|
expr.properties.every((p) => ts.isSpreadAssignment(p) && !conditionalSpreadOf(p.expression)) &&
|
|
1176
1317
|
expr.properties.some((p) => {
|
|
1177
1318
|
const t = lowerer.mapTypeOf(lowerer.typeOf(p.expression));
|
|
1178
|
-
return t?.kind === "dyn" || t?.kind === "record" && !!lowerer.shapes.get(t.shapeId)?.indexValue;
|
|
1319
|
+
return (t?.kind === "dyn" || (t?.kind === "record" && !!lowerer.shapes.get(t.shapeId)?.indexValue));
|
|
1179
1320
|
})) {
|
|
1180
1321
|
return lowerDeclaredSpreadMerge(lowerer, expr, type, shape, loc);
|
|
1181
1322
|
}
|
|
@@ -1337,7 +1478,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1337
1478
|
(ts.isIdentifier(later.name) ||
|
|
1338
1479
|
ts.isStringLiteral(later.name) ||
|
|
1339
1480
|
ts.isNumericLiteral(later.name) ||
|
|
1340
|
-
(ts.isComputedPropertyName(later.name) &&
|
|
1481
|
+
(ts.isComputedPropertyName(later.name) &&
|
|
1482
|
+
literalComputedKey(lowerer, later.name) !== null))) {
|
|
1341
1483
|
laterNames.add(propNameText(lowerer, later.name));
|
|
1342
1484
|
}
|
|
1343
1485
|
}
|
|
@@ -1355,13 +1497,28 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1355
1497
|
}
|
|
1356
1498
|
const fRead = () => ({
|
|
1357
1499
|
kind: "recordGet",
|
|
1358
|
-
obj: {
|
|
1500
|
+
obj: {
|
|
1501
|
+
kind: "unionNarrow",
|
|
1502
|
+
unionId: srcType.unionId,
|
|
1503
|
+
tag: recTag,
|
|
1504
|
+
value: srcRef(),
|
|
1505
|
+
type: recArm,
|
|
1506
|
+
loc: locOf(prop),
|
|
1507
|
+
},
|
|
1359
1508
|
shapeId: recArm.shapeId,
|
|
1360
1509
|
field: f.name,
|
|
1361
1510
|
type: f.type,
|
|
1362
1511
|
loc: locOf(prop),
|
|
1363
1512
|
});
|
|
1364
|
-
let cond = {
|
|
1513
|
+
let cond = {
|
|
1514
|
+
kind: "unionIsTag",
|
|
1515
|
+
unionId: srcType.unionId,
|
|
1516
|
+
tag: recTag,
|
|
1517
|
+
negated: false,
|
|
1518
|
+
value: srcRef(),
|
|
1519
|
+
type: BOOL,
|
|
1520
|
+
loc: locOf(prop),
|
|
1521
|
+
};
|
|
1365
1522
|
let thenVal;
|
|
1366
1523
|
if (typeEquals(f.type, targetType)) {
|
|
1367
1524
|
thenVal = fRead();
|
|
@@ -1377,7 +1534,15 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1377
1534
|
kind: "logical",
|
|
1378
1535
|
op: "&&",
|
|
1379
1536
|
left: cond,
|
|
1380
|
-
right: {
|
|
1537
|
+
right: {
|
|
1538
|
+
kind: "unionIsTag",
|
|
1539
|
+
unionId: f.type.unionId,
|
|
1540
|
+
tag: ftUndef,
|
|
1541
|
+
negated: true,
|
|
1542
|
+
value: fRead(),
|
|
1543
|
+
type: BOOL,
|
|
1544
|
+
loc: locOf(prop),
|
|
1545
|
+
},
|
|
1381
1546
|
type: BOOL,
|
|
1382
1547
|
loc: locOf(prop),
|
|
1383
1548
|
};
|
|
@@ -1388,10 +1553,25 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1388
1553
|
lowerer.pushDiag(recordShapeMismatchDiag(lowerer.fmt(type), lowerer.fmt(recArm), locOf(prop), `spread field '${f.name}': '${lowerer.fmt(f.type)}' cannot re-tag into '${lowerer.fmt(targetType)}' behind the present-test`));
|
|
1389
1554
|
throw new PoisonError();
|
|
1390
1555
|
}
|
|
1391
|
-
thenVal = {
|
|
1556
|
+
thenVal = {
|
|
1557
|
+
kind: "call",
|
|
1558
|
+
callee: retag,
|
|
1559
|
+
args: [fRead()],
|
|
1560
|
+
type: targetType,
|
|
1561
|
+
loc: locOf(prop),
|
|
1562
|
+
};
|
|
1392
1563
|
}
|
|
1393
|
-
else if (ftDef &&
|
|
1394
|
-
|
|
1564
|
+
else if (ftDef &&
|
|
1565
|
+
ftDef.arms.length === 2 &&
|
|
1566
|
+
lowerer.armTag(f.type.unionId, targetType) >= 0) {
|
|
1567
|
+
thenVal = {
|
|
1568
|
+
kind: "unionNarrow",
|
|
1569
|
+
unionId: f.type.unionId,
|
|
1570
|
+
tag: lowerer.armTag(f.type.unionId, targetType),
|
|
1571
|
+
value: fRead(),
|
|
1572
|
+
type: targetType,
|
|
1573
|
+
loc: locOf(prop),
|
|
1574
|
+
};
|
|
1395
1575
|
}
|
|
1396
1576
|
else {
|
|
1397
1577
|
lowerer.pushDiag(recordShapeMismatchDiag(lowerer.fmt(type), lowerer.fmt(recArm), locOf(prop), `spread field '${f.name}': '${lowerer.fmt(f.type)}' cannot narrow into '${lowerer.fmt(targetType)}' behind the present-test`));
|
|
@@ -1416,7 +1596,14 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1416
1596
|
if (!elseVal) {
|
|
1417
1597
|
lowerer.unsupported("SC1090", prop, `object spread of '${lowerer.fmt(srcType)}' sources where '${f.name}' has no earlier contributor (the absent arm leaves the required field unset — spread defaults first: { ...defaults, ...overrides })`);
|
|
1418
1598
|
}
|
|
1419
|
-
const merged = {
|
|
1599
|
+
const merged = {
|
|
1600
|
+
kind: "ternary",
|
|
1601
|
+
cond,
|
|
1602
|
+
then: thenVal,
|
|
1603
|
+
else_: elseVal,
|
|
1604
|
+
type: targetType,
|
|
1605
|
+
loc: locOf(prop),
|
|
1606
|
+
};
|
|
1420
1607
|
if (at >= 0)
|
|
1421
1608
|
fields[at] = { name: f.name, value: merged };
|
|
1422
1609
|
else
|
|
@@ -1459,7 +1646,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1459
1646
|
(ts.isIdentifier(later.name) ||
|
|
1460
1647
|
ts.isStringLiteral(later.name) ||
|
|
1461
1648
|
ts.isNumericLiteral(later.name) ||
|
|
1462
|
-
(ts.isComputedPropertyName(later.name) &&
|
|
1649
|
+
(ts.isComputedPropertyName(later.name) &&
|
|
1650
|
+
literalComputedKey(lowerer, later.name) !== null))) {
|
|
1463
1651
|
laterNames.add(propNameText(lowerer, later.name));
|
|
1464
1652
|
}
|
|
1465
1653
|
}
|
|
@@ -1619,8 +1807,12 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1619
1807
|
// compile time; anything else — the awaited mapper — runs
|
|
1620
1808
|
// (and may throw into the enclosing catch) with its result
|
|
1621
1809
|
// released by the statement frame.
|
|
1622
|
-
if (v.kind !== "unitLit" &&
|
|
1623
|
-
v.kind !== "
|
|
1810
|
+
if (v.kind !== "unitLit" &&
|
|
1811
|
+
v.kind !== "numLit" &&
|
|
1812
|
+
v.kind !== "strLit" &&
|
|
1813
|
+
v.kind !== "boolLit" &&
|
|
1814
|
+
v.kind !== "varRef" &&
|
|
1815
|
+
v.kind !== "closure") {
|
|
1624
1816
|
fields.push({ name, value: v, drop: true });
|
|
1625
1817
|
}
|
|
1626
1818
|
}
|
|
@@ -1642,7 +1834,10 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1642
1834
|
init = init.expression;
|
|
1643
1835
|
value =
|
|
1644
1836
|
fenceClosureProbe(lowerer, prop.initializer, fieldType, () => lowerer.lowerExpr(prop.initializer)) ??
|
|
1645
|
-
(fieldType !== undefined &&
|
|
1837
|
+
(fieldType !== undefined &&
|
|
1838
|
+
(ts.isArrayLiteralExpression(init) ||
|
|
1839
|
+
ts.isObjectLiteralExpression(init) ||
|
|
1840
|
+
ts.isConditionalExpression(init))
|
|
1646
1841
|
? lowerer.lowerExprExpecting(prop.initializer, fieldType)
|
|
1647
1842
|
: lowerer.lowerExpr(prop.initializer));
|
|
1648
1843
|
}
|
|
@@ -1651,7 +1846,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1651
1846
|
}
|
|
1652
1847
|
else if (ts.isMethodDeclaration(prop)) {
|
|
1653
1848
|
value =
|
|
1654
|
-
fenceClosureProbe(lowerer, prop, fieldType, () => lowerer.lowerLambda(prop)) ??
|
|
1849
|
+
fenceClosureProbe(lowerer, prop, fieldType, () => lowerer.lowerLambda(prop)) ??
|
|
1850
|
+
lowerer.lowerLambda(prop);
|
|
1655
1851
|
}
|
|
1656
1852
|
else {
|
|
1657
1853
|
lowerer.unsupported("SC1090", prop, `syntax '${ts.syntaxKindName(prop.kind)}'`);
|
|
@@ -1734,7 +1930,9 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1734
1930
|
// property reads as undefined in Node, and a dyn slot holds
|
|
1735
1931
|
// exactly that (the options-record call shape against
|
|
1736
1932
|
// `{ plugins: unknown, ... }` — a JS caller the checker admits).
|
|
1737
|
-
const optional = ((lowerer.checker.getPropertyOfType(tsType, f.name)?.flags ?? 0) &
|
|
1933
|
+
const optional = ((lowerer.checker.getPropertyOfType(tsType, f.name)?.flags ?? 0) &
|
|
1934
|
+
ts.SymbolFlags.Optional) !==
|
|
1935
|
+
0;
|
|
1738
1936
|
const absentHandle = f.type.kind === "jsval" && optional
|
|
1739
1937
|
? { kind: "jsOp", op: "undefLit", args: [], type: JSVAL, loc }
|
|
1740
1938
|
: null;
|
|
@@ -1747,7 +1945,9 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1747
1945
|
}
|
|
1748
1946
|
}
|
|
1749
1947
|
const result = { kind: "recordLit", fields, type, loc };
|
|
1750
|
-
return spreadStmts.length === 0
|
|
1948
|
+
return spreadStmts.length === 0
|
|
1949
|
+
? result
|
|
1950
|
+
: { kind: "seqExpr", stmts: spreadStmts, result, type, loc };
|
|
1751
1951
|
}
|
|
1752
1952
|
/** A union of plain records can preserve its existing variant while
|
|
1753
1953
|
* replacing shared fields. Dispatch before constructing the copy: only
|
|
@@ -1790,7 +1990,10 @@ function lowerUnionRecordClone(lowerer, expr) {
|
|
|
1790
1990
|
if (arm.kind !== "record")
|
|
1791
1991
|
return null;
|
|
1792
1992
|
const shape = lowerer.shapes.get(arm.shapeId);
|
|
1793
|
-
if (!shape ||
|
|
1993
|
+
if (!shape ||
|
|
1994
|
+
shape.indexValue ||
|
|
1995
|
+
shape.tuple ||
|
|
1996
|
+
shapeHasAccessorSlots(shape) ||
|
|
1794
1997
|
!names.every((name) => shape.fields.some((field) => field.name === name)))
|
|
1795
1998
|
return null;
|
|
1796
1999
|
for (let index = 0; index < props.length; index++) {
|
|
@@ -1807,10 +2010,14 @@ function lowerUnionRecordClone(lowerer, expr) {
|
|
|
1807
2010
|
if (lift.how === "retag" && valueType?.kind === "union" && fieldType.kind === "union") {
|
|
1808
2011
|
const from = lowerer.unions.get(valueType.unionId);
|
|
1809
2012
|
const to = lowerer.unions.get(fieldType.unionId);
|
|
1810
|
-
const plan = from && to
|
|
1811
|
-
|
|
1812
|
-
|
|
1813
|
-
|
|
2013
|
+
const plan = from && to
|
|
2014
|
+
? planUnionRetag(from, to, (id) => lowerer.shapes.get(id), (source, target) => lowerer.widthLiftPlan(source, target))
|
|
2015
|
+
: null;
|
|
2016
|
+
if (!plan ||
|
|
2017
|
+
!plan.every((arm) => arm.kind === "direct"
|
|
2018
|
+
? arm.route.lift.how === "copy" || arm.route.lift.how === "upcast"
|
|
2019
|
+
: arm.kind === "discriminant" &&
|
|
2020
|
+
arm.routes.every((route) => route.lift.how === "copy" || route.lift.how === "upcast")))
|
|
1814
2021
|
return null;
|
|
1815
2022
|
}
|
|
1816
2023
|
else if (lift.how !== "copy" && lift.how !== "wrap" && lift.how !== "upcast")
|
|
@@ -1821,14 +2028,24 @@ function lowerUnionRecordClone(lowerer, expr) {
|
|
|
1821
2028
|
// Hidden runtime absence must never be mistaken for a record payload.
|
|
1822
2029
|
// An earlier guard can remove that arm; an unguarded optional spread
|
|
1823
2030
|
// still needs a destination able to represent the empty copy.
|
|
1824
|
-
if (!typeEquals(source.type, sourceType) &&
|
|
2031
|
+
if (!typeEquals(source.type, sourceType) &&
|
|
2032
|
+
source.type.kind === "union" &&
|
|
2033
|
+
ts.isIdentifier(spread.expression)) {
|
|
1825
2034
|
const local = lowerer.resolveLocal(spread.expression);
|
|
1826
2035
|
const symbol = lowerer.resolveValueSymbol(spread.expression);
|
|
1827
|
-
const captured = local?.boxed === true || symbol && lowerer.ctx.captureBySymbol.has(symbol);
|
|
1828
|
-
if (local &&
|
|
2036
|
+
const captured = local?.boxed === true || (symbol && lowerer.ctx.captureBySymbol.has(symbol));
|
|
2037
|
+
if (local &&
|
|
2038
|
+
!captured &&
|
|
2039
|
+
!lowerer.runtimeOptionalLocals.has(lowerer.runtimeOptionalRootOf(local))) {
|
|
1829
2040
|
const helper = lowerer.narrowedRetagHelper(spread.expression, source.type.unionId, sourceType.unionId, source.loc);
|
|
1830
2041
|
if (helper)
|
|
1831
|
-
source = {
|
|
2042
|
+
source = {
|
|
2043
|
+
kind: "call",
|
|
2044
|
+
callee: helper,
|
|
2045
|
+
args: [source],
|
|
2046
|
+
type: sourceType,
|
|
2047
|
+
loc: source.loc,
|
|
2048
|
+
};
|
|
1832
2049
|
}
|
|
1833
2050
|
}
|
|
1834
2051
|
if (!typeEquals(source.type, sourceType)) {
|
|
@@ -1853,18 +2070,50 @@ function lowerUnionRecordClone(lowerer, expr) {
|
|
|
1853
2070
|
: lowerer.coerceInto(prop, lowerer.lowerShorthandValue(prop), fieldType);
|
|
1854
2071
|
overrides.push({ name, value });
|
|
1855
2072
|
}
|
|
1856
|
-
const clone = {
|
|
2073
|
+
const clone = {
|
|
2074
|
+
kind: "recordClone",
|
|
1857
2075
|
source: { kind: "unionNarrow", value: ref, unionId: sourceType.unionId, tag, type: arm, loc },
|
|
1858
|
-
overrides,
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1862
|
-
|
|
2076
|
+
overrides,
|
|
2077
|
+
type: arm,
|
|
2078
|
+
loc,
|
|
2079
|
+
};
|
|
2080
|
+
const wrapped = {
|
|
2081
|
+
kind: "unionWrap",
|
|
2082
|
+
value: clone,
|
|
2083
|
+
unionId: sourceType.unionId,
|
|
2084
|
+
tag,
|
|
2085
|
+
type: sourceType,
|
|
2086
|
+
loc,
|
|
1863
2087
|
};
|
|
2088
|
+
result =
|
|
2089
|
+
result === null
|
|
2090
|
+
? wrapped
|
|
2091
|
+
: {
|
|
2092
|
+
kind: "ternary",
|
|
2093
|
+
cond: {
|
|
2094
|
+
kind: "unionIsTag",
|
|
2095
|
+
value: ref,
|
|
2096
|
+
unionId: sourceType.unionId,
|
|
2097
|
+
tag,
|
|
2098
|
+
negated: false,
|
|
2099
|
+
type: BOOL,
|
|
2100
|
+
loc,
|
|
2101
|
+
},
|
|
2102
|
+
then: wrapped,
|
|
2103
|
+
else_: result,
|
|
2104
|
+
type: sourceType,
|
|
2105
|
+
loc,
|
|
2106
|
+
};
|
|
1864
2107
|
}
|
|
1865
2108
|
if (result === null)
|
|
1866
2109
|
throw new InternalCompilerError("union clone has no arms");
|
|
1867
|
-
return {
|
|
2110
|
+
return {
|
|
2111
|
+
kind: "seqExpr",
|
|
2112
|
+
stmts: [{ kind: "varDecl", localId: saved.id, init: source, loc }],
|
|
2113
|
+
result,
|
|
2114
|
+
type: sourceType,
|
|
2115
|
+
loc,
|
|
2116
|
+
};
|
|
1868
2117
|
}
|
|
1869
2118
|
/** Parses the conditional-spread idiom `...(c ? { k: v, ... } : {})`
|
|
1870
2119
|
* (either orientation). Returns the condition, the non-empty arm's
|
|
@@ -1899,7 +2148,8 @@ export function conditionalSpreadOf(expr) {
|
|
|
1899
2148
|
const props = [];
|
|
1900
2149
|
for (const p of carrier.properties) {
|
|
1901
2150
|
if ((ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
|
|
1902
|
-
p.name &&
|
|
2151
|
+
p.name &&
|
|
2152
|
+
(ts.isIdentifier(p.name) || ts.isStringLiteral(p.name))) {
|
|
1903
2153
|
props.push(p);
|
|
1904
2154
|
}
|
|
1905
2155
|
else {
|
|
@@ -1967,32 +2217,77 @@ function lowerDeclaredSpreadMerge(lowerer, expr, type, shape, loc) {
|
|
|
1967
2217
|
stmts: (write) => {
|
|
1968
2218
|
const chain = (i) => {
|
|
1969
2219
|
if (i >= def.arms.length) {
|
|
1970
|
-
return [
|
|
2220
|
+
return [
|
|
2221
|
+
{
|
|
1971
2222
|
kind: "throw",
|
|
1972
2223
|
value: {
|
|
1973
2224
|
kind: "libCall",
|
|
1974
2225
|
fn: "error.new",
|
|
1975
|
-
args: [
|
|
2226
|
+
args: [
|
|
2227
|
+
{
|
|
2228
|
+
kind: "strLit",
|
|
2229
|
+
value: `expected ${lowerer.fmt(fUnion)} at $.${f.name}`,
|
|
2230
|
+
type: STRING,
|
|
2231
|
+
loc,
|
|
2232
|
+
},
|
|
2233
|
+
],
|
|
1976
2234
|
type: { kind: "object", className: "%TypeError" },
|
|
1977
2235
|
loc,
|
|
1978
2236
|
},
|
|
1979
2237
|
loc,
|
|
1980
|
-
}
|
|
2238
|
+
},
|
|
2239
|
+
];
|
|
1981
2240
|
}
|
|
1982
2241
|
const arm = def.arms[i];
|
|
1983
2242
|
const toTag = lowerer.armTag(fUnion.unionId, arm);
|
|
1984
2243
|
if (toTag < 0)
|
|
1985
2244
|
return chain(i + 1);
|
|
1986
2245
|
const extracted = isUnitType(arm)
|
|
1987
|
-
? {
|
|
1988
|
-
|
|
1989
|
-
|
|
2246
|
+
? {
|
|
2247
|
+
kind: "unionWrap",
|
|
2248
|
+
unionId: fUnion.unionId,
|
|
2249
|
+
tag: toTag,
|
|
2250
|
+
value: {
|
|
2251
|
+
kind: "unitLit",
|
|
2252
|
+
unit: arm.kind === "undefinedT" ? "undefined" : "null",
|
|
2253
|
+
type: arm,
|
|
2254
|
+
loc,
|
|
2255
|
+
},
|
|
2256
|
+
type: fUnion,
|
|
2257
|
+
loc,
|
|
2258
|
+
}
|
|
2259
|
+
: {
|
|
2260
|
+
kind: "unionWrap",
|
|
2261
|
+
unionId: fUnion.unionId,
|
|
2262
|
+
tag: toTag,
|
|
2263
|
+
value: {
|
|
2264
|
+
kind: "unionNarrow",
|
|
2265
|
+
unionId: iv.unionId,
|
|
2266
|
+
tag: i,
|
|
2267
|
+
value: v,
|
|
2268
|
+
type: arm,
|
|
2269
|
+
loc,
|
|
2270
|
+
},
|
|
2271
|
+
type: fUnion,
|
|
2272
|
+
loc,
|
|
2273
|
+
};
|
|
2274
|
+
return [
|
|
2275
|
+
{
|
|
1990
2276
|
kind: "if",
|
|
1991
|
-
cond: {
|
|
2277
|
+
cond: {
|
|
2278
|
+
kind: "unionIsTag",
|
|
2279
|
+
unionId: iv.unionId,
|
|
2280
|
+
tag: i,
|
|
2281
|
+
negated: false,
|
|
2282
|
+
value: v,
|
|
2283
|
+
type: BOOL,
|
|
2284
|
+
loc,
|
|
2285
|
+
},
|
|
1992
2286
|
then: [write(extracted)],
|
|
1993
2287
|
else_: chain(i + 1),
|
|
1994
2288
|
loc,
|
|
1995
|
-
}
|
|
2289
|
+
},
|
|
2290
|
+
];
|
|
1996
2291
|
};
|
|
1997
2292
|
return chain(0);
|
|
1998
2293
|
},
|
|
@@ -2006,16 +2301,27 @@ function lowerDeclaredSpreadMerge(lowerer, expr, type, shape, loc) {
|
|
|
2006
2301
|
// later source factory mutated it, contrary to object spread evaluation.
|
|
2007
2302
|
const out = lowerer.declareHiddenLocal("%declMerge", type);
|
|
2008
2303
|
const outRef = varRef(out.id, type, loc);
|
|
2009
|
-
const stmts = [
|
|
2010
|
-
|
|
2011
|
-
|
|
2304
|
+
const stmts = [
|
|
2305
|
+
{
|
|
2306
|
+
kind: "varDecl",
|
|
2307
|
+
localId: out.id,
|
|
2308
|
+
init: {
|
|
2309
|
+
kind: "recordLit",
|
|
2310
|
+
fields: shape.fields.map((f) => ({
|
|
2311
|
+
name: f.name,
|
|
2312
|
+
value: lowerer.wrappedUndefined(f.type, loc),
|
|
2313
|
+
})),
|
|
2314
|
+
type,
|
|
2315
|
+
loc,
|
|
2316
|
+
},
|
|
2012
2317
|
loc,
|
|
2013
|
-
}
|
|
2318
|
+
},
|
|
2319
|
+
];
|
|
2014
2320
|
for (const source of srcs) {
|
|
2015
2321
|
const key = `declmerge-source:${type.shapeId}:${source.shapeId}`;
|
|
2016
|
-
let helper = lowerer.
|
|
2322
|
+
let helper = lowerer.valueHelpers.get(key);
|
|
2017
2323
|
if (!helper) {
|
|
2018
|
-
helper = `%rec.declmerge.${lowerer.
|
|
2324
|
+
helper = `%rec.declmerge.${lowerer.valueHelpers.size}`;
|
|
2019
2325
|
const sourceType = source.value.type;
|
|
2020
2326
|
const destination = varRef("out.0", type, loc);
|
|
2021
2327
|
const receiver = varRef("source.0", sourceType, loc);
|
|
@@ -2028,31 +2334,57 @@ function lowerDeclaredSpreadMerge(lowerer, expr, type, shape, loc) {
|
|
|
2028
2334
|
// CopyDataProperties skips nullish sources, even when an erased
|
|
2029
2335
|
// record view supplies the checker's apparent object type.
|
|
2030
2336
|
body.push({
|
|
2031
|
-
kind: "if",
|
|
2032
|
-
|
|
2337
|
+
kind: "if",
|
|
2338
|
+
cond: { kind: "dynTest", test: "nullish", value: receiver, type: BOOL, loc },
|
|
2339
|
+
then: [{ kind: "return", value: destination, loc }],
|
|
2340
|
+
else_: null,
|
|
2341
|
+
loc,
|
|
2033
2342
|
});
|
|
2034
2343
|
}
|
|
2035
2344
|
for (const field of source.shape?.fields ?? []) {
|
|
2036
2345
|
const target = shape.fields.find((candidate) => candidate.name === field.name);
|
|
2037
2346
|
if (!target)
|
|
2038
2347
|
continue; // The declared destination drops extra keys.
|
|
2039
|
-
const raw = {
|
|
2348
|
+
const raw = {
|
|
2349
|
+
kind: "recordGet",
|
|
2350
|
+
obj: receiver,
|
|
2351
|
+
shapeId: source.shapeId,
|
|
2352
|
+
field: field.name,
|
|
2353
|
+
type: field.type,
|
|
2354
|
+
loc,
|
|
2355
|
+
};
|
|
2040
2356
|
const lift = lowerer.widthLiftPlan(field.type, target.type);
|
|
2041
2357
|
if (!lift) {
|
|
2042
2358
|
lowerer.unsupported("SC1090", expr, `object spread of field '${field.name}' from '${lowerer.fmt(field.type)}' into '${lowerer.fmt(target.type)}'`);
|
|
2043
2359
|
}
|
|
2044
2360
|
const write = {
|
|
2045
|
-
kind: "recordSet",
|
|
2046
|
-
|
|
2361
|
+
kind: "recordSet",
|
|
2362
|
+
obj: destination,
|
|
2363
|
+
shapeId: type.shapeId,
|
|
2364
|
+
field: field.name,
|
|
2365
|
+
value: lowerer.applyWidthLift(lift, raw, target.type, loc),
|
|
2366
|
+
loc,
|
|
2047
2367
|
};
|
|
2048
2368
|
// Optional declared fields use the established unset convention.
|
|
2049
2369
|
// A dyn field, including a present undefined, is a real property;
|
|
2050
2370
|
// its checked conversion runs and can overwrite an earlier value.
|
|
2051
2371
|
const absent = field.type.kind === "union" ? lowerer.armTag(field.type.unionId, UNDEFINED_T) : -1;
|
|
2052
2372
|
if (absent >= 0 && field.type.kind === "union") {
|
|
2053
|
-
body.push({
|
|
2054
|
-
|
|
2055
|
-
|
|
2373
|
+
body.push({
|
|
2374
|
+
kind: "if",
|
|
2375
|
+
cond: {
|
|
2376
|
+
kind: "unionIsTag",
|
|
2377
|
+
unionId: field.type.unionId,
|
|
2378
|
+
tag: absent,
|
|
2379
|
+
negated: true,
|
|
2380
|
+
value: raw,
|
|
2381
|
+
type: BOOL,
|
|
2382
|
+
loc,
|
|
2383
|
+
},
|
|
2384
|
+
then: [write],
|
|
2385
|
+
else_: null,
|
|
2386
|
+
loc,
|
|
2387
|
+
});
|
|
2056
2388
|
}
|
|
2057
2389
|
else
|
|
2058
2390
|
body.push(write);
|
|
@@ -2066,42 +2398,123 @@ function lowerDeclaredSpreadMerge(lowerer, expr, type, shape, loc) {
|
|
|
2066
2398
|
const value = varRef("value.0", iv, loc);
|
|
2067
2399
|
locals.push({ id: "keys.0", name: "keys", type: keysType, mutable: false }, { id: "index.0", name: "index", type: F64, mutable: true }, { id: "key.0", name: "key", type: STRING, mutable: false }, { id: "value.0", name: "value", type: iv, mutable: false });
|
|
2068
2400
|
const dispatch = shape.fields.reduceRight((rest, field) => {
|
|
2069
|
-
const write = (value) => ({
|
|
2401
|
+
const write = (value) => ({
|
|
2402
|
+
kind: "recordSet",
|
|
2403
|
+
obj: destination,
|
|
2404
|
+
shapeId: type.shapeId,
|
|
2405
|
+
field: field.name,
|
|
2406
|
+
value,
|
|
2407
|
+
loc,
|
|
2408
|
+
});
|
|
2070
2409
|
const converted = conv(iv, field, value);
|
|
2071
|
-
return [
|
|
2410
|
+
return [
|
|
2411
|
+
{
|
|
2072
2412
|
kind: "if",
|
|
2073
|
-
cond: {
|
|
2413
|
+
cond: {
|
|
2414
|
+
kind: "strEq",
|
|
2415
|
+
negated: false,
|
|
2416
|
+
left: name,
|
|
2417
|
+
right: { kind: "strLit", value: field.name, type: STRING, loc },
|
|
2418
|
+
type: BOOL,
|
|
2419
|
+
loc,
|
|
2420
|
+
},
|
|
2074
2421
|
then: "value" in converted ? [write(converted.value)] : converted.stmts(write),
|
|
2075
|
-
else_: rest.length > 0 ? rest : null,
|
|
2076
|
-
|
|
2422
|
+
else_: rest.length > 0 ? rest : null,
|
|
2423
|
+
loc,
|
|
2424
|
+
},
|
|
2425
|
+
];
|
|
2077
2426
|
}, []);
|
|
2078
|
-
body.push({
|
|
2079
|
-
|
|
2080
|
-
|
|
2427
|
+
body.push({
|
|
2428
|
+
kind: "varDecl",
|
|
2429
|
+
localId: "keys.0",
|
|
2430
|
+
init: source.shape
|
|
2431
|
+
? {
|
|
2432
|
+
kind: "recordOvfKeys",
|
|
2433
|
+
obj: receiver,
|
|
2434
|
+
shapeId: source.shapeId,
|
|
2435
|
+
type: keysType,
|
|
2436
|
+
loc,
|
|
2437
|
+
}
|
|
2438
|
+
: {
|
|
2439
|
+
kind: "dynCheck",
|
|
2440
|
+
value: { kind: "libCall", fn: "dyn.objKeys", args: [receiver], type: DYN, loc },
|
|
2441
|
+
type: keysType,
|
|
2442
|
+
loc,
|
|
2443
|
+
},
|
|
2444
|
+
loc,
|
|
2445
|
+
}, {
|
|
2081
2446
|
kind: "for",
|
|
2082
2447
|
init: { kind: "varDecl", localId: "index.0", init: numLit(0, loc), loc },
|
|
2083
|
-
cond: {
|
|
2084
|
-
|
|
2448
|
+
cond: {
|
|
2449
|
+
kind: "bin",
|
|
2450
|
+
op: "<",
|
|
2451
|
+
left: index,
|
|
2452
|
+
right: {
|
|
2453
|
+
kind: "arrIntrinsic",
|
|
2454
|
+
method: "length",
|
|
2455
|
+
receiver: keys,
|
|
2456
|
+
args: [],
|
|
2457
|
+
type: F64,
|
|
2458
|
+
loc,
|
|
2459
|
+
},
|
|
2460
|
+
type: BOOL,
|
|
2461
|
+
loc,
|
|
2462
|
+
},
|
|
2463
|
+
update: {
|
|
2464
|
+
kind: "assign",
|
|
2465
|
+
localId: "index.0",
|
|
2466
|
+
value: { kind: "bin", op: "+", left: index, right: numLit(1, loc), type: F64, loc },
|
|
2467
|
+
loc,
|
|
2468
|
+
},
|
|
2085
2469
|
body: [
|
|
2086
|
-
{
|
|
2087
|
-
|
|
2088
|
-
|
|
2089
|
-
|
|
2470
|
+
{
|
|
2471
|
+
kind: "varDecl",
|
|
2472
|
+
localId: "key.0",
|
|
2473
|
+
init: { kind: "arrayGet", arr: keys, index, type: STRING, loc },
|
|
2474
|
+
loc,
|
|
2475
|
+
},
|
|
2476
|
+
{
|
|
2477
|
+
kind: "varDecl",
|
|
2478
|
+
localId: "value.0",
|
|
2479
|
+
init: source.shape
|
|
2480
|
+
? {
|
|
2481
|
+
kind: "recordKeyGet",
|
|
2482
|
+
obj: receiver,
|
|
2483
|
+
shapeId: source.shapeId,
|
|
2484
|
+
key: name,
|
|
2485
|
+
overflowOnly: true,
|
|
2486
|
+
type: iv,
|
|
2487
|
+
loc,
|
|
2488
|
+
}
|
|
2489
|
+
: { kind: "dynKeyGet", value: receiver, key: name, type: DYN, loc },
|
|
2490
|
+
loc,
|
|
2491
|
+
},
|
|
2090
2492
|
...dispatch,
|
|
2091
|
-
],
|
|
2493
|
+
],
|
|
2494
|
+
loc,
|
|
2092
2495
|
});
|
|
2093
2496
|
}
|
|
2094
2497
|
body.push({ kind: "return", value: destination, loc });
|
|
2095
2498
|
lowerer.liftedFns.push({
|
|
2096
2499
|
name: helper,
|
|
2097
|
-
params: [
|
|
2098
|
-
|
|
2500
|
+
params: [
|
|
2501
|
+
{ localId: "out.0", name: "out", type },
|
|
2502
|
+
{ localId: "source.0", name: "source", type: sourceType },
|
|
2503
|
+
],
|
|
2504
|
+
returnType: type,
|
|
2505
|
+
locals,
|
|
2506
|
+
body,
|
|
2507
|
+
loc,
|
|
2099
2508
|
});
|
|
2100
2509
|
// Publish only a fully checked helper: rejected conversions must not
|
|
2101
2510
|
// leave an entry that a later literal could reuse without a body.
|
|
2102
|
-
lowerer.
|
|
2511
|
+
lowerer.valueHelpers.set(key, helper);
|
|
2103
2512
|
}
|
|
2104
|
-
stmts.push({
|
|
2513
|
+
stmts.push({
|
|
2514
|
+
kind: "exprStmt",
|
|
2515
|
+
expr: { kind: "call", callee: helper, args: [outRef, source.value], type, loc },
|
|
2516
|
+
loc,
|
|
2517
|
+
});
|
|
2105
2518
|
}
|
|
2106
2519
|
return { kind: "seqExpr", stmts, result: outRef, type, loc };
|
|
2107
2520
|
}
|
|
@@ -2138,8 +2551,11 @@ export function lowerShorthandValue(lowerer, prop) {
|
|
|
2138
2551
|
}
|
|
2139
2552
|
const sig = lowerer.fnSigsBySymbol.get(resolved);
|
|
2140
2553
|
const decl = lowerer.checker.declarationsOf(resolved)[0];
|
|
2141
|
-
if (sig &&
|
|
2142
|
-
|
|
2554
|
+
if (sig &&
|
|
2555
|
+
decl &&
|
|
2556
|
+
ts.isFunctionDeclaration(decl) &&
|
|
2557
|
+
(ts.isSourceFile(decl.parent) ||
|
|
2558
|
+
(decl.parent !== undefined && lowerer.nsBlocks.get(decl.parent) === "flattened"))) {
|
|
2143
2559
|
lowerer.noteEdge(sig.name);
|
|
2144
2560
|
const funcType = {
|
|
2145
2561
|
kind: "func",
|
|
@@ -2157,12 +2573,19 @@ export function lowerShorthandValue(lowerer, prop) {
|
|
|
2157
2573
|
lowerer.unsupported("SC1090", prop, `generic functions as values (call '${propName.text}' directly)`);
|
|
2158
2574
|
}
|
|
2159
2575
|
}
|
|
2160
|
-
lowerer.rejectUnresolvedSymbol(symbol
|
|
2576
|
+
lowerer.rejectUnresolvedSymbol(symbol
|
|
2577
|
+
? symbol.flags & ts.SymbolFlags.Alias
|
|
2578
|
+
? lowerer.checker.getAliasedSymbol(symbol)
|
|
2579
|
+
: symbol
|
|
2580
|
+
: null, propName.text, prop, `the reference to '${propName.text}' (a binding form with no lowering)`);
|
|
2161
2581
|
}
|
|
2162
2582
|
/** Rejects the method's own receiver, including lexical captures in
|
|
2163
2583
|
* arrows. Nested ordinary functions bind their own ambient receiver. */
|
|
2164
2584
|
export function rejectThisInObjectMethod(lowerer, node) {
|
|
2165
|
-
if (ts.isFunctionExpression(node) ||
|
|
2585
|
+
if (ts.isFunctionExpression(node) ||
|
|
2586
|
+
ts.isFunctionDeclaration(node) ||
|
|
2587
|
+
ts.isMethodDeclaration(node) ||
|
|
2588
|
+
ts.isAccessor(node))
|
|
2166
2589
|
return;
|
|
2167
2590
|
if (node.kind === ts.SyntaxKind.ThisKeyword) {
|
|
2168
2591
|
lowerer.unsupported("SC1090", node, "references to 'this' in object literal methods");
|