@scriptc/compiler 0.2.4 → 0.2.5
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 +915 -215
- 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 +2 -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.js +9 -2
- package/dist/backend/link-plan-core.js.map +1 -1
- package/dist/backend/link-plan.d.ts +1 -1
- package/dist/backend/link-plan.js +4 -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 +6 -1
- package/dist/backend/llvm/byte-numbers.js.map +1 -1
- 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 +3 -0
- package/dist/backend/llvm/call-lifetimes.js +60 -17
- 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.js +16 -12
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/common.js +4 -1
- package/dist/backend/llvm/common.js.map +1 -1
- 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.js +68 -22
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +9 -3
- package/dist/backend/llvm/emitter.js +238 -105
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +233 -42
- 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 +13 -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 +20 -9
- 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 +92 -33
- 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 +19 -4
- 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 +88 -19
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.test.js +43 -1
- 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-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/lib-abi.js +13 -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 +35 -16
- 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 +107 -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 +1 -0
- package/dist/backend/llvm/local-array-reads.js +96 -30
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.test.js +368 -60
- 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/map-read-lifetimes.d.ts +6 -2
- package/dist/backend/llvm/map-read-lifetimes.js +44 -14
- 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 +3 -2
- package/dist/backend/llvm/reference-effects.js +67 -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.js +60 -17
- 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.js +4 -4
- package/dist/backend/llvm/split.js.map +1 -1
- package/dist/backend/llvm/split.test.js +14 -6
- package/dist/backend/llvm/split.test.js.map +1 -1
- 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 +112 -26
- package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
- 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.js +6 -3
- 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 +118 -22
- 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 +314 -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 +1267 -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 +163 -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.js +2 -1
- package/dist/backend/native-codegen-core.js.map +1 -1
- package/dist/backend/native-codegen.d.ts +1 -1
- package/dist/backend/native-codegen.js +24 -13
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +12 -9
- package/dist/backend/native-codegen.test.js.map +1 -1
- 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.js +27 -8
- 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-pack-core.js +96 -49
- 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 +87 -15
- 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 +40 -24
- 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 +1 -1
- package/dist/executable/executable-cache.js +78 -48
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +75 -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.js +17 -12
- package/dist/frontend/fork-target.js.map +1 -1
- 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 +15 -0
- package/dist/frontend/lowering/builtins/atomics.js +46 -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 +32 -0
- package/dist/frontend/lowering/builtins/filesystem-calls.js +678 -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 +303 -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/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-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-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 +92 -0
- package/dist/frontend/lowering/containers/array-callbacks.js +1646 -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 +419 -105
- 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 +580 -158
- 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 +589 -162
- 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 +274 -0
- package/dist/frontend/lowering/generic-functions.js +1727 -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/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 +420 -71
- 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 +2593 -5667
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +243 -242
- package/dist/frontend/lowering/lower-classes.js +1701 -724
- 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 +322 -85
- 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 +3446 -1154
- 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 +365 -273
- 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 +94 -94
- package/dist/frontend/lowering/lower-modules.js +612 -321
- 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 +2312 -984
- 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 +362 -90
- 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 +21 -351
- package/dist/frontend/lowering/lowerer.js +1024 -2704
- 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/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 +42 -42
- package/dist/frontend/lowering/surfaces.js +1094 -249
- 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-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-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 +234 -101
- 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 +484 -164
- package/dist/frontend/ts7/ast-node.js.map +1 -1
- package/dist/frontend/ts7/ast-node.test.js +109 -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 +1 -1
- package/dist/frontend/ts7/ast-wire.js +55 -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.js +47 -28
- 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.js +5 -3
- package/dist/frontend/ts7/checker.js.map +1 -1
- package/dist/frontend/ts7/checker.test.js +54 -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.js +7 -4
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/program-host.test.js +43 -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.js +545 -204
- 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/index.d.ts +9 -8
- package/dist/index.js +150 -81
- 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 +631 -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 +3396 -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 +6 -2150
- 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/runtime-features.d.ts +221 -0
- package/dist/ir/runtime-features.js +551 -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.js +4 -2
- 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 +782 -1889
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +610 -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 +133 -57
- 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 +232 -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 +24 -13
- 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 +167 -43
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/compiler.test.js +129 -32
- 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 +119 -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 +77 -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 +1 -1
- 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;
|
|
@@ -282,15 +325,37 @@ export function lowerDynObjectLiteral(lowerer, expr, boxValue) {
|
|
|
282
325
|
lowerer.rejectThisInObjectMethod(prop.body ?? prop);
|
|
283
326
|
const fn = lowerer.lowerLambda(prop);
|
|
284
327
|
const descriptor = {
|
|
285
|
-
kind: "dynObjLit",
|
|
286
|
-
|
|
287
|
-
|
|
328
|
+
kind: "dynObjLit",
|
|
329
|
+
type: DYN,
|
|
330
|
+
loc: locOf(prop),
|
|
331
|
+
fields: [
|
|
332
|
+
{
|
|
333
|
+
key: {
|
|
334
|
+
kind: "strLit",
|
|
335
|
+
value: ts.isGetAccessorDeclaration(prop) ? "get" : "set",
|
|
336
|
+
type: STRING,
|
|
337
|
+
loc,
|
|
338
|
+
},
|
|
339
|
+
value: lowerer.coerceToExpected(fn, DYN),
|
|
340
|
+
},
|
|
341
|
+
...["enumerable", "configurable"].map((name) => ({
|
|
288
342
|
key: strLit(name, loc),
|
|
289
|
-
value: {
|
|
343
|
+
value: {
|
|
344
|
+
kind: "dynFrom",
|
|
345
|
+
value: { kind: "boolLit", value: true, type: BOOL, loc },
|
|
346
|
+
type: DYN,
|
|
347
|
+
loc,
|
|
348
|
+
},
|
|
290
349
|
})),
|
|
291
350
|
],
|
|
292
351
|
};
|
|
293
|
-
acc = {
|
|
352
|
+
acc = {
|
|
353
|
+
kind: "libCall",
|
|
354
|
+
fn: "dyn.defineProperty",
|
|
355
|
+
args: [acc, lowerer.coerceToExpected(key, DYN), descriptor],
|
|
356
|
+
type: DYN,
|
|
357
|
+
loc,
|
|
358
|
+
};
|
|
294
359
|
continue;
|
|
295
360
|
}
|
|
296
361
|
const valueExpr = ts.isMethodDeclaration(prop)
|
|
@@ -305,13 +370,13 @@ export function lowerDynObjectLiteral(lowerer, expr, boxValue) {
|
|
|
305
370
|
const propDiagsBefore = lowerer.diags.length;
|
|
306
371
|
try {
|
|
307
372
|
const lowerValue = () => ts.isMethodDeclaration(prop)
|
|
308
|
-
?
|
|
373
|
+
? isJsSourceFile(expr.getSourceFile())
|
|
374
|
+
? lowerer.lowerLambda(prop)
|
|
375
|
+
: (lowerer.rejectThisInObjectMethod(prop.body ?? prop), lowerer.lowerLambda(prop))
|
|
309
376
|
: !boxValue && ts.isObjectLiteralExpression(valueExpr)
|
|
310
377
|
? lowerer.lowerExprExpecting(valueExpr, DYN)
|
|
311
378
|
: lowerer.lowerExpr(valueExpr);
|
|
312
|
-
raw =
|
|
313
|
-
fenceClosureProbe(lowerer, valueExpr, undefined, lowerValue) ??
|
|
314
|
-
lowerValue();
|
|
379
|
+
raw = fenceClosureProbe(lowerer, valueExpr, undefined, lowerValue) ?? lowerValue();
|
|
315
380
|
}
|
|
316
381
|
catch (err) {
|
|
317
382
|
// A PURE member read a JS file cannot lower (a namespace object
|
|
@@ -336,7 +401,10 @@ export function lowerDynObjectLiteral(lowerer, expr, boxValue) {
|
|
|
336
401
|
: lowerer.coerceToExpected(raw, DYN);
|
|
337
402
|
// A JS object's array-valued properties retain the same source array.
|
|
338
403
|
// Repeated references must compare equal and mutations remain shared.
|
|
339
|
-
if (!boxValue &&
|
|
404
|
+
if (!boxValue &&
|
|
405
|
+
isJsSourceFile(prop.getSourceFile()) &&
|
|
406
|
+
v.kind === "dynFrom" &&
|
|
407
|
+
v.value.type.kind === "array") {
|
|
340
408
|
v = { ...v, liveRef: true };
|
|
341
409
|
}
|
|
342
410
|
if (v.type.kind !== "dyn") {
|
|
@@ -406,7 +474,9 @@ function fenceClosureProbe(lowerer, node, slotType, attempt) {
|
|
|
406
474
|
let inner = node;
|
|
407
475
|
while (ts.isParenthesizedExpression(inner))
|
|
408
476
|
inner = inner.expression;
|
|
409
|
-
if (!ts.isArrowFunction(inner) &&
|
|
477
|
+
if (!ts.isArrowFunction(inner) &&
|
|
478
|
+
!ts.isFunctionExpression(inner) &&
|
|
479
|
+
!ts.isMethodDeclaration(inner)) {
|
|
410
480
|
return null;
|
|
411
481
|
}
|
|
412
482
|
// The trap's ABI: the field's func slot when one exists; otherwise (the
|
|
@@ -498,7 +568,8 @@ function literalUnionArmOf(lowerer, expr, tsType, recordArms) {
|
|
|
498
568
|
if (ftT.isNumberLiteralType())
|
|
499
569
|
return litT.isNumberLiteralType() && litT.value === ftT.value;
|
|
500
570
|
if (ftT.flags & ts.TypeFlags.BooleanLiteral) {
|
|
501
|
-
return (litT.flags & ts.TypeFlags.BooleanLiteral) !== 0 &&
|
|
571
|
+
return ((litT.flags & ts.TypeFlags.BooleanLiteral) !== 0 &&
|
|
572
|
+
lowerer.checker.typeToString(litT) === lowerer.checker.typeToString(ftT));
|
|
502
573
|
}
|
|
503
574
|
if (ftT.flags & ts.TypeFlags.Null)
|
|
504
575
|
return (litT.flags & ts.TypeFlags.Null) !== 0;
|
|
@@ -510,7 +581,9 @@ function literalUnionArmOf(lowerer, expr, tsType, recordArms) {
|
|
|
510
581
|
const candidates = new Set();
|
|
511
582
|
for (const member of ts.constituentTypes(tsType)) {
|
|
512
583
|
const mMapped = lowerer.mapTypeOf(member);
|
|
513
|
-
if (mMapped?.kind !== "record" ||
|
|
584
|
+
if (mMapped?.kind !== "record" ||
|
|
585
|
+
!armShapeIds.has(mMapped.shapeId) ||
|
|
586
|
+
candidates.has(mMapped.shapeId))
|
|
514
587
|
continue;
|
|
515
588
|
const shape = lowerer.shapes.get(mMapped.shapeId);
|
|
516
589
|
if (!shape || shape.tuple || shape.indexValue)
|
|
@@ -572,59 +645,100 @@ function lowerOptionalIndexSpreadSource(lowerer, source, loc) {
|
|
|
572
645
|
}
|
|
573
646
|
const selected = {
|
|
574
647
|
kind: "ternary",
|
|
575
|
-
cond: {
|
|
648
|
+
cond: {
|
|
649
|
+
kind: "unionIsTag",
|
|
650
|
+
unionId: source.type.unionId,
|
|
651
|
+
tag: undefinedTag,
|
|
652
|
+
negated: false,
|
|
653
|
+
value: stable,
|
|
654
|
+
type: BOOL,
|
|
655
|
+
loc,
|
|
656
|
+
},
|
|
576
657
|
then: { kind: "recordLit", fields: [], type: recordType, loc },
|
|
577
|
-
else_: {
|
|
658
|
+
else_: {
|
|
659
|
+
kind: "unionNarrow",
|
|
660
|
+
unionId: source.type.unionId,
|
|
661
|
+
tag: recordTag,
|
|
662
|
+
value: stable,
|
|
663
|
+
type: recordType,
|
|
664
|
+
loc,
|
|
665
|
+
},
|
|
578
666
|
type: recordType,
|
|
579
667
|
loc,
|
|
580
668
|
};
|
|
581
|
-
return prefix.length === 0
|
|
669
|
+
return prefix.length === 0
|
|
670
|
+
? selected
|
|
671
|
+
: { kind: "seqExpr", stmts: prefix, result: selected, type: recordType, loc };
|
|
582
672
|
}
|
|
583
673
|
export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
584
674
|
// Unannotated JavaScript accumulator fields have no element contract.
|
|
585
675
|
// Preserve their checked arrays instead of assigning never[] a numeric ABI.
|
|
586
|
-
if (!expected &&
|
|
587
|
-
|
|
676
|
+
if (!expected &&
|
|
677
|
+
isJsSourceFile(expr.getSourceFile()) &&
|
|
678
|
+
expr.properties.some((prop) => ts.isPropertyAssignment(prop) &&
|
|
679
|
+
((ts.isArrayLiteralExpression(prop.initializer) &&
|
|
680
|
+
prop.initializer.elements.length === 0) ||
|
|
681
|
+
neverTaintedJsType(lowerer, prop.initializer, lowerer.typeOf(prop.initializer))))) {
|
|
588
682
|
return lowerDynObjectLiteral(lowerer, expr);
|
|
589
683
|
}
|
|
590
|
-
if (!expected &&
|
|
591
|
-
|
|
684
|
+
if (!expected &&
|
|
685
|
+
isJsSourceFile(expr.getSourceFile()) &&
|
|
686
|
+
expr.properties.some((prop) => ts.isPropertyAssignment(prop) &&
|
|
687
|
+
lowerer.mapTypeOf(lowerer.typeOf(prop.initializer))?.kind === "array" &&
|
|
688
|
+
tryLowerExpression(lowerer, prop.initializer)?.type.kind === "dyn")) {
|
|
592
689
|
return lowerDynObjectLiteral(lowerer, expr);
|
|
593
690
|
}
|
|
594
691
|
// A JS constructor parameter can hold omitted values even when its
|
|
595
692
|
// documentation names a number. Inferred literal fields must preserve
|
|
596
693
|
// the represented binding rather than checking it back into that type.
|
|
597
|
-
if (!expected &&
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
694
|
+
if (!expected &&
|
|
695
|
+
isJsSourceFile(expr.getSourceFile()) &&
|
|
696
|
+
expr.properties.some((prop) => {
|
|
697
|
+
let value = ts.isPropertyAssignment(prop)
|
|
698
|
+
? prop.initializer
|
|
699
|
+
: ts.isShorthandPropertyAssignment(prop)
|
|
700
|
+
? prop.name
|
|
701
|
+
: null;
|
|
702
|
+
while (value && ts.isParenthesizedExpression(value))
|
|
703
|
+
value = value.expression;
|
|
704
|
+
if (!value || !ts.isIdentifier(value))
|
|
705
|
+
return false;
|
|
706
|
+
const stored = lowerer.peekLocal(value)?.type ?? lowerer.globalOf(value)?.type;
|
|
707
|
+
const inferred = lowerer.mapTypeOf(lowerer.typeOf(value));
|
|
708
|
+
return (stored?.kind === "dyn" &&
|
|
709
|
+
inferred !== null &&
|
|
710
|
+
inferred.kind !== "dyn" &&
|
|
711
|
+
lowerer.dynConvertible(inferred));
|
|
712
|
+
})) {
|
|
608
713
|
return lowerDynObjectLiteral(lowerer, expr);
|
|
609
714
|
}
|
|
610
715
|
// JavaScript object methods/accessors carry a live receiver. Keep the
|
|
611
716
|
// literal in checked native storage instead of erasing its prototype ABI.
|
|
612
|
-
if (isJsSourceFile(expr.getSourceFile()) &&
|
|
717
|
+
if (isJsSourceFile(expr.getSourceFile()) &&
|
|
718
|
+
(expr.properties.length === 0 ||
|
|
719
|
+
expr.properties.some((prop) => ts.isMethodDeclaration(prop) ||
|
|
720
|
+
ts.isGetAccessorDeclaration(prop) ||
|
|
721
|
+
ts.isSetAccessorDeclaration(prop)))) {
|
|
613
722
|
return lowerDynObjectLiteral(lowerer, expr);
|
|
614
723
|
}
|
|
615
724
|
const loc = locOf(expr);
|
|
616
725
|
// Module collection already chose checked storage for this JavaScript
|
|
617
726
|
// binding. Construct in that representation: an intermediate record would
|
|
618
727
|
// check nested aliases back into inferred shapes and lose their identity.
|
|
619
|
-
if (isJsSourceFile(expr.getSourceFile()) &&
|
|
620
|
-
|
|
728
|
+
if (isJsSourceFile(expr.getSourceFile()) &&
|
|
729
|
+
ts.isVariableDeclaration(expr.parent) &&
|
|
730
|
+
expr.parent.initializer === expr &&
|
|
731
|
+
ts.isIdentifier(expr.parent.name) &&
|
|
621
732
|
lowerer.globalOf(expr.parent.name)?.type.kind === "dyn") {
|
|
622
733
|
return lowerDynObjectLiteral(lowerer, expr);
|
|
623
734
|
}
|
|
624
735
|
// A checked spread carries runtime symbol keys and receiver-sensitive
|
|
625
736
|
// methods absent from its inferred record shape. Copy the real properties.
|
|
626
|
-
if (!expected &&
|
|
627
|
-
|
|
737
|
+
if (!expected &&
|
|
738
|
+
isJsSourceFile(expr.getSourceFile()) &&
|
|
739
|
+
expr.properties.some((property) => ts.isSpreadAssignment(property) &&
|
|
740
|
+
(lowerer.builtinNamespaceModuleOf(property.expression)?.startsWith("path") ||
|
|
741
|
+
tryLowerExpression(lowerer, property.expression)?.type.kind === "dyn"))) {
|
|
628
742
|
return lowerDynObjectLiteral(lowerer, expr);
|
|
629
743
|
}
|
|
630
744
|
const unionClone = lowerUnionRecordClone(lowerer, expr);
|
|
@@ -694,8 +808,10 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
694
808
|
// stores "16" — JS's ToPropertyKey; the checker names the property
|
|
695
809
|
// symbol the same way), and FOLDABLE computed keys (above).
|
|
696
810
|
if (!prop.name ||
|
|
697
|
-
!(ts.isIdentifier(prop.name) ||
|
|
698
|
-
ts.
|
|
811
|
+
!(ts.isIdentifier(prop.name) ||
|
|
812
|
+
ts.isStringLiteral(prop.name) ||
|
|
813
|
+
ts.isNumericLiteral(prop.name) ||
|
|
814
|
+
ts.isComputedPropertyName(prop.name))) {
|
|
699
815
|
lowerer.unsupported("SC1090", prop, "non-identifier property names");
|
|
700
816
|
}
|
|
701
817
|
// Shorthand methods are just closure-valued fields — but their `this`
|
|
@@ -710,8 +826,11 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
710
826
|
// An inferred binding pattern supplies placeholders such as
|
|
711
827
|
// { nested: { value: any } }. Construct the literal's own fields so
|
|
712
828
|
// those placeholders do not erase instantiated generic storage.
|
|
713
|
-
if (!expected &&
|
|
714
|
-
ts.
|
|
829
|
+
if (!expected &&
|
|
830
|
+
ts.isVariableDeclaration(expr.parent) &&
|
|
831
|
+
!expr.parent.type &&
|
|
832
|
+
ts.isObjectBindingPattern(expr.parent.name) &&
|
|
833
|
+
expr.parent.initializer === expr) {
|
|
715
834
|
tsType = lowerer.typeOf(expr);
|
|
716
835
|
}
|
|
717
836
|
// `as never` supplies no construction layout. Keep the literal's own
|
|
@@ -745,7 +864,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
745
864
|
// slot's field types (`lanIp: string | null`), which the literal's own
|
|
746
865
|
// type narrows away (a field written as `lanIp: null` types as bare
|
|
747
866
|
// `null`, which maps to nothing on its own).
|
|
748
|
-
if (tsType.isUnionType() &&
|
|
867
|
+
if (tsType.isUnionType() &&
|
|
868
|
+
ts.constituentTypes(tsType).some((t) => t.getSymbol()?.name === "PromiseLike")) {
|
|
749
869
|
tsType = lowerer.checker.getAwaitedType(tsType) ?? tsType;
|
|
750
870
|
}
|
|
751
871
|
let mapped = lowerer.mapTypeOf(tsType);
|
|
@@ -753,7 +873,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
753
873
|
// fields make the literal's inferred type look like a fixed record.
|
|
754
874
|
// Keep a checked-dynamic destination in that representation so copying
|
|
755
875
|
// preserves keys, evaluation order, and fields overwritten afterwards.
|
|
756
|
-
if (mapped?.kind === "dyn" &&
|
|
876
|
+
if (mapped?.kind === "dyn" &&
|
|
877
|
+
expr.properties.some((p) => ts.isSpreadAssignment(p) && lowerer.mapTypeOf(lowerer.typeOf(p.expression))?.kind === "dyn")) {
|
|
757
878
|
return lowerDynObjectLiteral(lowerer, expr);
|
|
758
879
|
}
|
|
759
880
|
// A JavaScript call can contextually type an object literal as string even
|
|
@@ -826,7 +947,12 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
826
947
|
// a prototype-named DATA property (notably `toString`). Object literals
|
|
827
948
|
// have no call signature; construct their own data shape and let the
|
|
828
949
|
// surrounding assignment/assertion enforce the destination contract.
|
|
829
|
-
if (mapped === null ||
|
|
950
|
+
if (mapped === null ||
|
|
951
|
+
mapped.kind === "union" ||
|
|
952
|
+
mapped.kind === "dyn" ||
|
|
953
|
+
mapped.kind === "object" ||
|
|
954
|
+
mapped.kind === "jsval" ||
|
|
955
|
+
mapped.kind === "func") {
|
|
830
956
|
const ctxUnion = mapped?.kind === "union" ? mapped : null;
|
|
831
957
|
mapped = lowerer.mapTypeOf(lowerer.typeOf(expr)) ?? mapped;
|
|
832
958
|
// A literal whose own shape re-tags into NO arm of the contextual
|
|
@@ -851,7 +977,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
851
977
|
!armShape?.tuple &&
|
|
852
978
|
// `{} | undefined` supplies no layout for a populated options
|
|
853
979
|
// literal, just as a bare empty-record context supplies none.
|
|
854
|
-
(expr.properties.length === 0 ||
|
|
980
|
+
(expr.properties.length === 0 ||
|
|
981
|
+
(armShape && (armShape.fields.length > 0 || armShape.indexValue)))) {
|
|
855
982
|
mapped = recordArms[0];
|
|
856
983
|
}
|
|
857
984
|
}
|
|
@@ -873,7 +1000,9 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
873
1000
|
// retaining distinct nominal knots. An inferred spread shape can
|
|
874
1001
|
// match the wrong knot, so consult discriminants even if that shape
|
|
875
1002
|
// already appears in the union.
|
|
876
|
-
if (ownShapeId === null ||
|
|
1003
|
+
if (ownShapeId === null ||
|
|
1004
|
+
!recordArms.some((a) => a.shapeId === ownShapeId) ||
|
|
1005
|
+
expr.properties.some(ts.isSpreadAssignment)) {
|
|
877
1006
|
const arm = literalUnionArmOf(lowerer, expr, tsType, recordArms);
|
|
878
1007
|
if (arm)
|
|
879
1008
|
mapped = arm;
|
|
@@ -889,7 +1018,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
889
1018
|
// (rest-param function types) narrow away. SEMANTICS.md documents the
|
|
890
1019
|
// enumeration divergence.
|
|
891
1020
|
if (isJsSourceFile(expr.getSourceFile()) &&
|
|
892
|
-
(!mapped ||
|
|
1021
|
+
(!mapped ||
|
|
1022
|
+
expr.properties.some((p) => ts.isGetAccessorDeclaration(p) || ts.isSetAccessorDeclaration(p))) &&
|
|
893
1023
|
isCjsExportTableLiteral(expr)) {
|
|
894
1024
|
const fields = [];
|
|
895
1025
|
for (const prop of expr.properties) {
|
|
@@ -925,8 +1055,11 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
925
1055
|
// descriptor records with `any` values) — builds as a dyn OBJECT:
|
|
926
1056
|
// each field converts through the usual dyn boundary, and dynamic
|
|
927
1057
|
// consumers ride the keyed-dyn paths. TypeScript keeps the fence.
|
|
928
|
-
if (mapped?.kind === "dyn" ||
|
|
929
|
-
(!
|
|
1058
|
+
if (mapped?.kind === "dyn" ||
|
|
1059
|
+
(!mapped && isJsSourceFile(expr.getSourceFile())) ||
|
|
1060
|
+
(!expected &&
|
|
1061
|
+
mapped &&
|
|
1062
|
+
jsOpenObjectType(expr, mapped, lowerer.shapes, lowerer.unions).kind === "dyn")) {
|
|
930
1063
|
return lowerDynObjectLiteral(lowerer, expr);
|
|
931
1064
|
}
|
|
932
1065
|
if (!mapped || mapped.kind !== "record")
|
|
@@ -937,14 +1070,19 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
937
1070
|
// conditional records: an empty array in one arm has no element layout
|
|
938
1071
|
// until the join supplies it. Existing values still use width coercion;
|
|
939
1072
|
// extra fields, spreads, accessors, and keyed shapes retain their paths.
|
|
940
|
-
if (expected &&
|
|
1073
|
+
if (expected &&
|
|
1074
|
+
!isJsSourceFile(expr.getSourceFile()) &&
|
|
941
1075
|
expr.properties.every((p) => ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p))) {
|
|
942
1076
|
const own = lowerer.shapes.get(type.shapeId);
|
|
943
1077
|
const target = lowerer.shapes.get(expected.shapeId);
|
|
944
|
-
if (!own.tuple &&
|
|
945
|
-
!
|
|
1078
|
+
if (!own.tuple &&
|
|
1079
|
+
!target.tuple &&
|
|
1080
|
+
!own.indexValue &&
|
|
1081
|
+
!target.indexValue &&
|
|
1082
|
+
!shapeHasAccessorSlots(own) &&
|
|
1083
|
+
!shapeHasAccessorSlots(target) &&
|
|
946
1084
|
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) &&
|
|
1085
|
+
(field.type.kind === "union" && lowerer.armTag(field.type.unionId, UNDEFINED_T) >= 0)) &&
|
|
948
1086
|
own.fields.every((field) => target.fields.some((candidate) => candidate.name === field.name))) {
|
|
949
1087
|
type = { kind: "record", shapeId: expected.shapeId };
|
|
950
1088
|
}
|
|
@@ -952,7 +1090,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
952
1090
|
let shape = lowerer.shapes.get(type.shapeId);
|
|
953
1091
|
// JavaScript Dates carry native object identity in checked storage. An
|
|
954
1092
|
// inferred scalar Date field would erase that identity before boxing.
|
|
955
|
-
if (isJsSourceFile(expr.getSourceFile()) &&
|
|
1093
|
+
if (isJsSourceFile(expr.getSourceFile()) &&
|
|
1094
|
+
shape.fields.some((field) => field.type.kind === "date")) {
|
|
956
1095
|
return lowerDynObjectLiteral(lowerer, expr);
|
|
957
1096
|
}
|
|
958
1097
|
// ACCESSOR properties, JS literals only (TS accessors fill the shape's
|
|
@@ -963,7 +1102,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
963
1102
|
if (isJsSourceFile(expr.getSourceFile())) {
|
|
964
1103
|
const accessorNames = new Set(expr.properties
|
|
965
1104
|
.filter((p) => ts.isGetAccessorDeclaration(p) || ts.isSetAccessorDeclaration(p))
|
|
966
|
-
.map((p) =>
|
|
1105
|
+
.map((p) => p.name && (ts.isIdentifier(p.name) || ts.isStringLiteral(p.name)) ? p.name.text : "")
|
|
967
1106
|
.filter((n) => n !== ""));
|
|
968
1107
|
if (accessorNames.size > 0) {
|
|
969
1108
|
const narrowed = shape.fields.filter((f) => !accessorNames.has(f.name));
|
|
@@ -982,7 +1121,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
982
1121
|
ts.isVariableStatement(expr.parent?.parent?.parent) &&
|
|
983
1122
|
ts.isSourceFile(expr.parent?.parent?.parent?.parent);
|
|
984
1123
|
const assignedProperties = expr.properties.filter((prop) => ts.isPropertyAssignment(prop) || ts.isShorthandPropertyAssignment(prop));
|
|
985
|
-
if (topLevelJsDecl &&
|
|
1124
|
+
if (topLevelJsDecl &&
|
|
1125
|
+
isJsSourceFile(expr.getSourceFile()) &&
|
|
986
1126
|
assignedProperties.length === expr.properties.length) {
|
|
987
1127
|
const provided = new Set(assignedProperties.map((prop) => propNameText(lowerer, prop.name)));
|
|
988
1128
|
if (shape.fields.some((field) => !provided.has(field.name))) {
|
|
@@ -1013,7 +1153,9 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1013
1153
|
expr.properties.length >= 2 &&
|
|
1014
1154
|
ts.isSpreadAssignment(expr.properties[0]) &&
|
|
1015
1155
|
!conditionalSpreadOf(expr.properties[0].expression) &&
|
|
1016
|
-
expr.properties
|
|
1156
|
+
expr.properties
|
|
1157
|
+
.slice(1)
|
|
1158
|
+
.every((p) => (ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
|
|
1017
1159
|
p.name !== undefined &&
|
|
1018
1160
|
(ts.isIdentifier(p.name) ||
|
|
1019
1161
|
ts.isStringLiteral(p.name) ||
|
|
@@ -1068,7 +1210,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1068
1210
|
if (shape.indexValue &&
|
|
1069
1211
|
shape.fields.length === 0 &&
|
|
1070
1212
|
!shape.tuple &&
|
|
1071
|
-
(expr.properties.some((p) => ts.isSpreadAssignment(p)) ||
|
|
1213
|
+
(expr.properties.some((p) => ts.isSpreadAssignment(p)) ||
|
|
1214
|
+
expr.properties.some(isRuntimeComputedKey))) {
|
|
1072
1215
|
const contributors = [];
|
|
1073
1216
|
let mergeable = true;
|
|
1074
1217
|
for (const prop of expr.properties) {
|
|
@@ -1085,7 +1228,9 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1085
1228
|
const csProp = cs.props[0];
|
|
1086
1229
|
const cond = lowerer.lowerCondition(cs.cond);
|
|
1087
1230
|
const vNode = ts.isPropertyAssignment(csProp) ? csProp.initializer : csProp;
|
|
1088
|
-
const v = lowerer.intoIndexValueSlot(ts.isPropertyAssignment(csProp)
|
|
1231
|
+
const v = lowerer.intoIndexValueSlot(ts.isPropertyAssignment(csProp)
|
|
1232
|
+
? lowerer.lowerExpr(csProp.initializer)
|
|
1233
|
+
: lowerer.lowerShorthandValue(csProp), shape.indexValue, vNode);
|
|
1089
1234
|
contributors.push({
|
|
1090
1235
|
kind: "field",
|
|
1091
1236
|
name: csProp.name.text,
|
|
@@ -1175,7 +1320,7 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1175
1320
|
expr.properties.every((p) => ts.isSpreadAssignment(p) && !conditionalSpreadOf(p.expression)) &&
|
|
1176
1321
|
expr.properties.some((p) => {
|
|
1177
1322
|
const t = lowerer.mapTypeOf(lowerer.typeOf(p.expression));
|
|
1178
|
-
return t?.kind === "dyn" || t?.kind === "record" && !!lowerer.shapes.get(t.shapeId)?.indexValue;
|
|
1323
|
+
return (t?.kind === "dyn" || (t?.kind === "record" && !!lowerer.shapes.get(t.shapeId)?.indexValue));
|
|
1179
1324
|
})) {
|
|
1180
1325
|
return lowerDeclaredSpreadMerge(lowerer, expr, type, shape, loc);
|
|
1181
1326
|
}
|
|
@@ -1337,7 +1482,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1337
1482
|
(ts.isIdentifier(later.name) ||
|
|
1338
1483
|
ts.isStringLiteral(later.name) ||
|
|
1339
1484
|
ts.isNumericLiteral(later.name) ||
|
|
1340
|
-
(ts.isComputedPropertyName(later.name) &&
|
|
1485
|
+
(ts.isComputedPropertyName(later.name) &&
|
|
1486
|
+
literalComputedKey(lowerer, later.name) !== null))) {
|
|
1341
1487
|
laterNames.add(propNameText(lowerer, later.name));
|
|
1342
1488
|
}
|
|
1343
1489
|
}
|
|
@@ -1355,13 +1501,28 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1355
1501
|
}
|
|
1356
1502
|
const fRead = () => ({
|
|
1357
1503
|
kind: "recordGet",
|
|
1358
|
-
obj: {
|
|
1504
|
+
obj: {
|
|
1505
|
+
kind: "unionNarrow",
|
|
1506
|
+
unionId: srcType.unionId,
|
|
1507
|
+
tag: recTag,
|
|
1508
|
+
value: srcRef(),
|
|
1509
|
+
type: recArm,
|
|
1510
|
+
loc: locOf(prop),
|
|
1511
|
+
},
|
|
1359
1512
|
shapeId: recArm.shapeId,
|
|
1360
1513
|
field: f.name,
|
|
1361
1514
|
type: f.type,
|
|
1362
1515
|
loc: locOf(prop),
|
|
1363
1516
|
});
|
|
1364
|
-
let cond = {
|
|
1517
|
+
let cond = {
|
|
1518
|
+
kind: "unionIsTag",
|
|
1519
|
+
unionId: srcType.unionId,
|
|
1520
|
+
tag: recTag,
|
|
1521
|
+
negated: false,
|
|
1522
|
+
value: srcRef(),
|
|
1523
|
+
type: BOOL,
|
|
1524
|
+
loc: locOf(prop),
|
|
1525
|
+
};
|
|
1365
1526
|
let thenVal;
|
|
1366
1527
|
if (typeEquals(f.type, targetType)) {
|
|
1367
1528
|
thenVal = fRead();
|
|
@@ -1377,7 +1538,15 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1377
1538
|
kind: "logical",
|
|
1378
1539
|
op: "&&",
|
|
1379
1540
|
left: cond,
|
|
1380
|
-
right: {
|
|
1541
|
+
right: {
|
|
1542
|
+
kind: "unionIsTag",
|
|
1543
|
+
unionId: f.type.unionId,
|
|
1544
|
+
tag: ftUndef,
|
|
1545
|
+
negated: true,
|
|
1546
|
+
value: fRead(),
|
|
1547
|
+
type: BOOL,
|
|
1548
|
+
loc: locOf(prop),
|
|
1549
|
+
},
|
|
1381
1550
|
type: BOOL,
|
|
1382
1551
|
loc: locOf(prop),
|
|
1383
1552
|
};
|
|
@@ -1388,10 +1557,25 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1388
1557
|
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
1558
|
throw new PoisonError();
|
|
1390
1559
|
}
|
|
1391
|
-
thenVal = {
|
|
1560
|
+
thenVal = {
|
|
1561
|
+
kind: "call",
|
|
1562
|
+
callee: retag,
|
|
1563
|
+
args: [fRead()],
|
|
1564
|
+
type: targetType,
|
|
1565
|
+
loc: locOf(prop),
|
|
1566
|
+
};
|
|
1392
1567
|
}
|
|
1393
|
-
else if (ftDef &&
|
|
1394
|
-
|
|
1568
|
+
else if (ftDef &&
|
|
1569
|
+
ftDef.arms.length === 2 &&
|
|
1570
|
+
lowerer.armTag(f.type.unionId, targetType) >= 0) {
|
|
1571
|
+
thenVal = {
|
|
1572
|
+
kind: "unionNarrow",
|
|
1573
|
+
unionId: f.type.unionId,
|
|
1574
|
+
tag: lowerer.armTag(f.type.unionId, targetType),
|
|
1575
|
+
value: fRead(),
|
|
1576
|
+
type: targetType,
|
|
1577
|
+
loc: locOf(prop),
|
|
1578
|
+
};
|
|
1395
1579
|
}
|
|
1396
1580
|
else {
|
|
1397
1581
|
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 +1600,14 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1416
1600
|
if (!elseVal) {
|
|
1417
1601
|
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
1602
|
}
|
|
1419
|
-
const merged = {
|
|
1603
|
+
const merged = {
|
|
1604
|
+
kind: "ternary",
|
|
1605
|
+
cond,
|
|
1606
|
+
then: thenVal,
|
|
1607
|
+
else_: elseVal,
|
|
1608
|
+
type: targetType,
|
|
1609
|
+
loc: locOf(prop),
|
|
1610
|
+
};
|
|
1420
1611
|
if (at >= 0)
|
|
1421
1612
|
fields[at] = { name: f.name, value: merged };
|
|
1422
1613
|
else
|
|
@@ -1459,7 +1650,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1459
1650
|
(ts.isIdentifier(later.name) ||
|
|
1460
1651
|
ts.isStringLiteral(later.name) ||
|
|
1461
1652
|
ts.isNumericLiteral(later.name) ||
|
|
1462
|
-
(ts.isComputedPropertyName(later.name) &&
|
|
1653
|
+
(ts.isComputedPropertyName(later.name) &&
|
|
1654
|
+
literalComputedKey(lowerer, later.name) !== null))) {
|
|
1463
1655
|
laterNames.add(propNameText(lowerer, later.name));
|
|
1464
1656
|
}
|
|
1465
1657
|
}
|
|
@@ -1619,8 +1811,12 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1619
1811
|
// compile time; anything else — the awaited mapper — runs
|
|
1620
1812
|
// (and may throw into the enclosing catch) with its result
|
|
1621
1813
|
// released by the statement frame.
|
|
1622
|
-
if (v.kind !== "unitLit" &&
|
|
1623
|
-
v.kind !== "
|
|
1814
|
+
if (v.kind !== "unitLit" &&
|
|
1815
|
+
v.kind !== "numLit" &&
|
|
1816
|
+
v.kind !== "strLit" &&
|
|
1817
|
+
v.kind !== "boolLit" &&
|
|
1818
|
+
v.kind !== "varRef" &&
|
|
1819
|
+
v.kind !== "closure") {
|
|
1624
1820
|
fields.push({ name, value: v, drop: true });
|
|
1625
1821
|
}
|
|
1626
1822
|
}
|
|
@@ -1642,7 +1838,10 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1642
1838
|
init = init.expression;
|
|
1643
1839
|
value =
|
|
1644
1840
|
fenceClosureProbe(lowerer, prop.initializer, fieldType, () => lowerer.lowerExpr(prop.initializer)) ??
|
|
1645
|
-
(fieldType !== undefined &&
|
|
1841
|
+
(fieldType !== undefined &&
|
|
1842
|
+
(ts.isArrayLiteralExpression(init) ||
|
|
1843
|
+
ts.isObjectLiteralExpression(init) ||
|
|
1844
|
+
ts.isConditionalExpression(init))
|
|
1646
1845
|
? lowerer.lowerExprExpecting(prop.initializer, fieldType)
|
|
1647
1846
|
: lowerer.lowerExpr(prop.initializer));
|
|
1648
1847
|
}
|
|
@@ -1651,7 +1850,8 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1651
1850
|
}
|
|
1652
1851
|
else if (ts.isMethodDeclaration(prop)) {
|
|
1653
1852
|
value =
|
|
1654
|
-
fenceClosureProbe(lowerer, prop, fieldType, () => lowerer.lowerLambda(prop)) ??
|
|
1853
|
+
fenceClosureProbe(lowerer, prop, fieldType, () => lowerer.lowerLambda(prop)) ??
|
|
1854
|
+
lowerer.lowerLambda(prop);
|
|
1655
1855
|
}
|
|
1656
1856
|
else {
|
|
1657
1857
|
lowerer.unsupported("SC1090", prop, `syntax '${ts.syntaxKindName(prop.kind)}'`);
|
|
@@ -1734,7 +1934,9 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1734
1934
|
// property reads as undefined in Node, and a dyn slot holds
|
|
1735
1935
|
// exactly that (the options-record call shape against
|
|
1736
1936
|
// `{ plugins: unknown, ... }` — a JS caller the checker admits).
|
|
1737
|
-
const optional = ((lowerer.checker.getPropertyOfType(tsType, f.name)?.flags ?? 0) &
|
|
1937
|
+
const optional = ((lowerer.checker.getPropertyOfType(tsType, f.name)?.flags ?? 0) &
|
|
1938
|
+
ts.SymbolFlags.Optional) !==
|
|
1939
|
+
0;
|
|
1738
1940
|
const absentHandle = f.type.kind === "jsval" && optional
|
|
1739
1941
|
? { kind: "jsOp", op: "undefLit", args: [], type: JSVAL, loc }
|
|
1740
1942
|
: null;
|
|
@@ -1747,7 +1949,9 @@ export function lowerObjectLiteral(lowerer, expr, expected) {
|
|
|
1747
1949
|
}
|
|
1748
1950
|
}
|
|
1749
1951
|
const result = { kind: "recordLit", fields, type, loc };
|
|
1750
|
-
return spreadStmts.length === 0
|
|
1952
|
+
return spreadStmts.length === 0
|
|
1953
|
+
? result
|
|
1954
|
+
: { kind: "seqExpr", stmts: spreadStmts, result, type, loc };
|
|
1751
1955
|
}
|
|
1752
1956
|
/** A union of plain records can preserve its existing variant while
|
|
1753
1957
|
* replacing shared fields. Dispatch before constructing the copy: only
|
|
@@ -1790,7 +1994,10 @@ function lowerUnionRecordClone(lowerer, expr) {
|
|
|
1790
1994
|
if (arm.kind !== "record")
|
|
1791
1995
|
return null;
|
|
1792
1996
|
const shape = lowerer.shapes.get(arm.shapeId);
|
|
1793
|
-
if (!shape ||
|
|
1997
|
+
if (!shape ||
|
|
1998
|
+
shape.indexValue ||
|
|
1999
|
+
shape.tuple ||
|
|
2000
|
+
shapeHasAccessorSlots(shape) ||
|
|
1794
2001
|
!names.every((name) => shape.fields.some((field) => field.name === name)))
|
|
1795
2002
|
return null;
|
|
1796
2003
|
for (let index = 0; index < props.length; index++) {
|
|
@@ -1807,10 +2014,14 @@ function lowerUnionRecordClone(lowerer, expr) {
|
|
|
1807
2014
|
if (lift.how === "retag" && valueType?.kind === "union" && fieldType.kind === "union") {
|
|
1808
2015
|
const from = lowerer.unions.get(valueType.unionId);
|
|
1809
2016
|
const to = lowerer.unions.get(fieldType.unionId);
|
|
1810
|
-
const plan = from && to
|
|
1811
|
-
|
|
1812
|
-
|
|
1813
|
-
|
|
2017
|
+
const plan = from && to
|
|
2018
|
+
? planUnionRetag(from, to, (id) => lowerer.shapes.get(id), (source, target) => lowerer.widthLiftPlan(source, target))
|
|
2019
|
+
: null;
|
|
2020
|
+
if (!plan ||
|
|
2021
|
+
!plan.every((arm) => arm.kind === "direct"
|
|
2022
|
+
? arm.route.lift.how === "copy" || arm.route.lift.how === "upcast"
|
|
2023
|
+
: arm.kind === "discriminant" &&
|
|
2024
|
+
arm.routes.every((route) => route.lift.how === "copy" || route.lift.how === "upcast")))
|
|
1814
2025
|
return null;
|
|
1815
2026
|
}
|
|
1816
2027
|
else if (lift.how !== "copy" && lift.how !== "wrap" && lift.how !== "upcast")
|
|
@@ -1821,14 +2032,24 @@ function lowerUnionRecordClone(lowerer, expr) {
|
|
|
1821
2032
|
// Hidden runtime absence must never be mistaken for a record payload.
|
|
1822
2033
|
// An earlier guard can remove that arm; an unguarded optional spread
|
|
1823
2034
|
// still needs a destination able to represent the empty copy.
|
|
1824
|
-
if (!typeEquals(source.type, sourceType) &&
|
|
2035
|
+
if (!typeEquals(source.type, sourceType) &&
|
|
2036
|
+
source.type.kind === "union" &&
|
|
2037
|
+
ts.isIdentifier(spread.expression)) {
|
|
1825
2038
|
const local = lowerer.resolveLocal(spread.expression);
|
|
1826
2039
|
const symbol = lowerer.resolveValueSymbol(spread.expression);
|
|
1827
|
-
const captured = local?.boxed === true || symbol && lowerer.ctx.captureBySymbol.has(symbol);
|
|
1828
|
-
if (local &&
|
|
2040
|
+
const captured = local?.boxed === true || (symbol && lowerer.ctx.captureBySymbol.has(symbol));
|
|
2041
|
+
if (local &&
|
|
2042
|
+
!captured &&
|
|
2043
|
+
!lowerer.runtimeOptionalLocals.has(lowerer.runtimeOptionalRootOf(local))) {
|
|
1829
2044
|
const helper = lowerer.narrowedRetagHelper(spread.expression, source.type.unionId, sourceType.unionId, source.loc);
|
|
1830
2045
|
if (helper)
|
|
1831
|
-
source = {
|
|
2046
|
+
source = {
|
|
2047
|
+
kind: "call",
|
|
2048
|
+
callee: helper,
|
|
2049
|
+
args: [source],
|
|
2050
|
+
type: sourceType,
|
|
2051
|
+
loc: source.loc,
|
|
2052
|
+
};
|
|
1832
2053
|
}
|
|
1833
2054
|
}
|
|
1834
2055
|
if (!typeEquals(source.type, sourceType)) {
|
|
@@ -1853,18 +2074,50 @@ function lowerUnionRecordClone(lowerer, expr) {
|
|
|
1853
2074
|
: lowerer.coerceInto(prop, lowerer.lowerShorthandValue(prop), fieldType);
|
|
1854
2075
|
overrides.push({ name, value });
|
|
1855
2076
|
}
|
|
1856
|
-
const clone = {
|
|
2077
|
+
const clone = {
|
|
2078
|
+
kind: "recordClone",
|
|
1857
2079
|
source: { kind: "unionNarrow", value: ref, unionId: sourceType.unionId, tag, type: arm, loc },
|
|
1858
|
-
overrides,
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1862
|
-
|
|
2080
|
+
overrides,
|
|
2081
|
+
type: arm,
|
|
2082
|
+
loc,
|
|
2083
|
+
};
|
|
2084
|
+
const wrapped = {
|
|
2085
|
+
kind: "unionWrap",
|
|
2086
|
+
value: clone,
|
|
2087
|
+
unionId: sourceType.unionId,
|
|
2088
|
+
tag,
|
|
2089
|
+
type: sourceType,
|
|
2090
|
+
loc,
|
|
1863
2091
|
};
|
|
2092
|
+
result =
|
|
2093
|
+
result === null
|
|
2094
|
+
? wrapped
|
|
2095
|
+
: {
|
|
2096
|
+
kind: "ternary",
|
|
2097
|
+
cond: {
|
|
2098
|
+
kind: "unionIsTag",
|
|
2099
|
+
value: ref,
|
|
2100
|
+
unionId: sourceType.unionId,
|
|
2101
|
+
tag,
|
|
2102
|
+
negated: false,
|
|
2103
|
+
type: BOOL,
|
|
2104
|
+
loc,
|
|
2105
|
+
},
|
|
2106
|
+
then: wrapped,
|
|
2107
|
+
else_: result,
|
|
2108
|
+
type: sourceType,
|
|
2109
|
+
loc,
|
|
2110
|
+
};
|
|
1864
2111
|
}
|
|
1865
2112
|
if (result === null)
|
|
1866
2113
|
throw new InternalCompilerError("union clone has no arms");
|
|
1867
|
-
return {
|
|
2114
|
+
return {
|
|
2115
|
+
kind: "seqExpr",
|
|
2116
|
+
stmts: [{ kind: "varDecl", localId: saved.id, init: source, loc }],
|
|
2117
|
+
result,
|
|
2118
|
+
type: sourceType,
|
|
2119
|
+
loc,
|
|
2120
|
+
};
|
|
1868
2121
|
}
|
|
1869
2122
|
/** Parses the conditional-spread idiom `...(c ? { k: v, ... } : {})`
|
|
1870
2123
|
* (either orientation). Returns the condition, the non-empty arm's
|
|
@@ -1899,7 +2152,8 @@ export function conditionalSpreadOf(expr) {
|
|
|
1899
2152
|
const props = [];
|
|
1900
2153
|
for (const p of carrier.properties) {
|
|
1901
2154
|
if ((ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
|
|
1902
|
-
p.name &&
|
|
2155
|
+
p.name &&
|
|
2156
|
+
(ts.isIdentifier(p.name) || ts.isStringLiteral(p.name))) {
|
|
1903
2157
|
props.push(p);
|
|
1904
2158
|
}
|
|
1905
2159
|
else {
|
|
@@ -1967,32 +2221,77 @@ function lowerDeclaredSpreadMerge(lowerer, expr, type, shape, loc) {
|
|
|
1967
2221
|
stmts: (write) => {
|
|
1968
2222
|
const chain = (i) => {
|
|
1969
2223
|
if (i >= def.arms.length) {
|
|
1970
|
-
return [
|
|
2224
|
+
return [
|
|
2225
|
+
{
|
|
1971
2226
|
kind: "throw",
|
|
1972
2227
|
value: {
|
|
1973
2228
|
kind: "libCall",
|
|
1974
2229
|
fn: "error.new",
|
|
1975
|
-
args: [
|
|
2230
|
+
args: [
|
|
2231
|
+
{
|
|
2232
|
+
kind: "strLit",
|
|
2233
|
+
value: `expected ${lowerer.fmt(fUnion)} at $.${f.name}`,
|
|
2234
|
+
type: STRING,
|
|
2235
|
+
loc,
|
|
2236
|
+
},
|
|
2237
|
+
],
|
|
1976
2238
|
type: { kind: "object", className: "%TypeError" },
|
|
1977
2239
|
loc,
|
|
1978
2240
|
},
|
|
1979
2241
|
loc,
|
|
1980
|
-
}
|
|
2242
|
+
},
|
|
2243
|
+
];
|
|
1981
2244
|
}
|
|
1982
2245
|
const arm = def.arms[i];
|
|
1983
2246
|
const toTag = lowerer.armTag(fUnion.unionId, arm);
|
|
1984
2247
|
if (toTag < 0)
|
|
1985
2248
|
return chain(i + 1);
|
|
1986
2249
|
const extracted = isUnitType(arm)
|
|
1987
|
-
? {
|
|
1988
|
-
|
|
1989
|
-
|
|
2250
|
+
? {
|
|
2251
|
+
kind: "unionWrap",
|
|
2252
|
+
unionId: fUnion.unionId,
|
|
2253
|
+
tag: toTag,
|
|
2254
|
+
value: {
|
|
2255
|
+
kind: "unitLit",
|
|
2256
|
+
unit: arm.kind === "undefinedT" ? "undefined" : "null",
|
|
2257
|
+
type: arm,
|
|
2258
|
+
loc,
|
|
2259
|
+
},
|
|
2260
|
+
type: fUnion,
|
|
2261
|
+
loc,
|
|
2262
|
+
}
|
|
2263
|
+
: {
|
|
2264
|
+
kind: "unionWrap",
|
|
2265
|
+
unionId: fUnion.unionId,
|
|
2266
|
+
tag: toTag,
|
|
2267
|
+
value: {
|
|
2268
|
+
kind: "unionNarrow",
|
|
2269
|
+
unionId: iv.unionId,
|
|
2270
|
+
tag: i,
|
|
2271
|
+
value: v,
|
|
2272
|
+
type: arm,
|
|
2273
|
+
loc,
|
|
2274
|
+
},
|
|
2275
|
+
type: fUnion,
|
|
2276
|
+
loc,
|
|
2277
|
+
};
|
|
2278
|
+
return [
|
|
2279
|
+
{
|
|
1990
2280
|
kind: "if",
|
|
1991
|
-
cond: {
|
|
2281
|
+
cond: {
|
|
2282
|
+
kind: "unionIsTag",
|
|
2283
|
+
unionId: iv.unionId,
|
|
2284
|
+
tag: i,
|
|
2285
|
+
negated: false,
|
|
2286
|
+
value: v,
|
|
2287
|
+
type: BOOL,
|
|
2288
|
+
loc,
|
|
2289
|
+
},
|
|
1992
2290
|
then: [write(extracted)],
|
|
1993
2291
|
else_: chain(i + 1),
|
|
1994
2292
|
loc,
|
|
1995
|
-
}
|
|
2293
|
+
},
|
|
2294
|
+
];
|
|
1996
2295
|
};
|
|
1997
2296
|
return chain(0);
|
|
1998
2297
|
},
|
|
@@ -2006,16 +2305,27 @@ function lowerDeclaredSpreadMerge(lowerer, expr, type, shape, loc) {
|
|
|
2006
2305
|
// later source factory mutated it, contrary to object spread evaluation.
|
|
2007
2306
|
const out = lowerer.declareHiddenLocal("%declMerge", type);
|
|
2008
2307
|
const outRef = varRef(out.id, type, loc);
|
|
2009
|
-
const stmts = [
|
|
2010
|
-
|
|
2011
|
-
|
|
2308
|
+
const stmts = [
|
|
2309
|
+
{
|
|
2310
|
+
kind: "varDecl",
|
|
2311
|
+
localId: out.id,
|
|
2312
|
+
init: {
|
|
2313
|
+
kind: "recordLit",
|
|
2314
|
+
fields: shape.fields.map((f) => ({
|
|
2315
|
+
name: f.name,
|
|
2316
|
+
value: lowerer.wrappedUndefined(f.type, loc),
|
|
2317
|
+
})),
|
|
2318
|
+
type,
|
|
2319
|
+
loc,
|
|
2320
|
+
},
|
|
2012
2321
|
loc,
|
|
2013
|
-
}
|
|
2322
|
+
},
|
|
2323
|
+
];
|
|
2014
2324
|
for (const source of srcs) {
|
|
2015
2325
|
const key = `declmerge-source:${type.shapeId}:${source.shapeId}`;
|
|
2016
|
-
let helper = lowerer.
|
|
2326
|
+
let helper = lowerer.valueHelpers.get(key);
|
|
2017
2327
|
if (!helper) {
|
|
2018
|
-
helper = `%rec.declmerge.${lowerer.
|
|
2328
|
+
helper = `%rec.declmerge.${lowerer.valueHelpers.size}`;
|
|
2019
2329
|
const sourceType = source.value.type;
|
|
2020
2330
|
const destination = varRef("out.0", type, loc);
|
|
2021
2331
|
const receiver = varRef("source.0", sourceType, loc);
|
|
@@ -2028,31 +2338,57 @@ function lowerDeclaredSpreadMerge(lowerer, expr, type, shape, loc) {
|
|
|
2028
2338
|
// CopyDataProperties skips nullish sources, even when an erased
|
|
2029
2339
|
// record view supplies the checker's apparent object type.
|
|
2030
2340
|
body.push({
|
|
2031
|
-
kind: "if",
|
|
2032
|
-
|
|
2341
|
+
kind: "if",
|
|
2342
|
+
cond: { kind: "dynTest", test: "nullish", value: receiver, type: BOOL, loc },
|
|
2343
|
+
then: [{ kind: "return", value: destination, loc }],
|
|
2344
|
+
else_: null,
|
|
2345
|
+
loc,
|
|
2033
2346
|
});
|
|
2034
2347
|
}
|
|
2035
2348
|
for (const field of source.shape?.fields ?? []) {
|
|
2036
2349
|
const target = shape.fields.find((candidate) => candidate.name === field.name);
|
|
2037
2350
|
if (!target)
|
|
2038
2351
|
continue; // The declared destination drops extra keys.
|
|
2039
|
-
const raw = {
|
|
2352
|
+
const raw = {
|
|
2353
|
+
kind: "recordGet",
|
|
2354
|
+
obj: receiver,
|
|
2355
|
+
shapeId: source.shapeId,
|
|
2356
|
+
field: field.name,
|
|
2357
|
+
type: field.type,
|
|
2358
|
+
loc,
|
|
2359
|
+
};
|
|
2040
2360
|
const lift = lowerer.widthLiftPlan(field.type, target.type);
|
|
2041
2361
|
if (!lift) {
|
|
2042
2362
|
lowerer.unsupported("SC1090", expr, `object spread of field '${field.name}' from '${lowerer.fmt(field.type)}' into '${lowerer.fmt(target.type)}'`);
|
|
2043
2363
|
}
|
|
2044
2364
|
const write = {
|
|
2045
|
-
kind: "recordSet",
|
|
2046
|
-
|
|
2365
|
+
kind: "recordSet",
|
|
2366
|
+
obj: destination,
|
|
2367
|
+
shapeId: type.shapeId,
|
|
2368
|
+
field: field.name,
|
|
2369
|
+
value: lowerer.applyWidthLift(lift, raw, target.type, loc),
|
|
2370
|
+
loc,
|
|
2047
2371
|
};
|
|
2048
2372
|
// Optional declared fields use the established unset convention.
|
|
2049
2373
|
// A dyn field, including a present undefined, is a real property;
|
|
2050
2374
|
// its checked conversion runs and can overwrite an earlier value.
|
|
2051
2375
|
const absent = field.type.kind === "union" ? lowerer.armTag(field.type.unionId, UNDEFINED_T) : -1;
|
|
2052
2376
|
if (absent >= 0 && field.type.kind === "union") {
|
|
2053
|
-
body.push({
|
|
2054
|
-
|
|
2055
|
-
|
|
2377
|
+
body.push({
|
|
2378
|
+
kind: "if",
|
|
2379
|
+
cond: {
|
|
2380
|
+
kind: "unionIsTag",
|
|
2381
|
+
unionId: field.type.unionId,
|
|
2382
|
+
tag: absent,
|
|
2383
|
+
negated: true,
|
|
2384
|
+
value: raw,
|
|
2385
|
+
type: BOOL,
|
|
2386
|
+
loc,
|
|
2387
|
+
},
|
|
2388
|
+
then: [write],
|
|
2389
|
+
else_: null,
|
|
2390
|
+
loc,
|
|
2391
|
+
});
|
|
2056
2392
|
}
|
|
2057
2393
|
else
|
|
2058
2394
|
body.push(write);
|
|
@@ -2066,42 +2402,123 @@ function lowerDeclaredSpreadMerge(lowerer, expr, type, shape, loc) {
|
|
|
2066
2402
|
const value = varRef("value.0", iv, loc);
|
|
2067
2403
|
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
2404
|
const dispatch = shape.fields.reduceRight((rest, field) => {
|
|
2069
|
-
const write = (value) => ({
|
|
2405
|
+
const write = (value) => ({
|
|
2406
|
+
kind: "recordSet",
|
|
2407
|
+
obj: destination,
|
|
2408
|
+
shapeId: type.shapeId,
|
|
2409
|
+
field: field.name,
|
|
2410
|
+
value,
|
|
2411
|
+
loc,
|
|
2412
|
+
});
|
|
2070
2413
|
const converted = conv(iv, field, value);
|
|
2071
|
-
return [
|
|
2414
|
+
return [
|
|
2415
|
+
{
|
|
2072
2416
|
kind: "if",
|
|
2073
|
-
cond: {
|
|
2417
|
+
cond: {
|
|
2418
|
+
kind: "strEq",
|
|
2419
|
+
negated: false,
|
|
2420
|
+
left: name,
|
|
2421
|
+
right: { kind: "strLit", value: field.name, type: STRING, loc },
|
|
2422
|
+
type: BOOL,
|
|
2423
|
+
loc,
|
|
2424
|
+
},
|
|
2074
2425
|
then: "value" in converted ? [write(converted.value)] : converted.stmts(write),
|
|
2075
|
-
else_: rest.length > 0 ? rest : null,
|
|
2076
|
-
|
|
2426
|
+
else_: rest.length > 0 ? rest : null,
|
|
2427
|
+
loc,
|
|
2428
|
+
},
|
|
2429
|
+
];
|
|
2077
2430
|
}, []);
|
|
2078
|
-
body.push({
|
|
2079
|
-
|
|
2080
|
-
|
|
2431
|
+
body.push({
|
|
2432
|
+
kind: "varDecl",
|
|
2433
|
+
localId: "keys.0",
|
|
2434
|
+
init: source.shape
|
|
2435
|
+
? {
|
|
2436
|
+
kind: "recordOvfKeys",
|
|
2437
|
+
obj: receiver,
|
|
2438
|
+
shapeId: source.shapeId,
|
|
2439
|
+
type: keysType,
|
|
2440
|
+
loc,
|
|
2441
|
+
}
|
|
2442
|
+
: {
|
|
2443
|
+
kind: "dynCheck",
|
|
2444
|
+
value: { kind: "libCall", fn: "dyn.objKeys", args: [receiver], type: DYN, loc },
|
|
2445
|
+
type: keysType,
|
|
2446
|
+
loc,
|
|
2447
|
+
},
|
|
2448
|
+
loc,
|
|
2449
|
+
}, {
|
|
2081
2450
|
kind: "for",
|
|
2082
2451
|
init: { kind: "varDecl", localId: "index.0", init: numLit(0, loc), loc },
|
|
2083
|
-
cond: {
|
|
2084
|
-
|
|
2452
|
+
cond: {
|
|
2453
|
+
kind: "bin",
|
|
2454
|
+
op: "<",
|
|
2455
|
+
left: index,
|
|
2456
|
+
right: {
|
|
2457
|
+
kind: "arrIntrinsic",
|
|
2458
|
+
method: "length",
|
|
2459
|
+
receiver: keys,
|
|
2460
|
+
args: [],
|
|
2461
|
+
type: F64,
|
|
2462
|
+
loc,
|
|
2463
|
+
},
|
|
2464
|
+
type: BOOL,
|
|
2465
|
+
loc,
|
|
2466
|
+
},
|
|
2467
|
+
update: {
|
|
2468
|
+
kind: "assign",
|
|
2469
|
+
localId: "index.0",
|
|
2470
|
+
value: { kind: "bin", op: "+", left: index, right: numLit(1, loc), type: F64, loc },
|
|
2471
|
+
loc,
|
|
2472
|
+
},
|
|
2085
2473
|
body: [
|
|
2086
|
-
{
|
|
2087
|
-
|
|
2088
|
-
|
|
2089
|
-
|
|
2474
|
+
{
|
|
2475
|
+
kind: "varDecl",
|
|
2476
|
+
localId: "key.0",
|
|
2477
|
+
init: { kind: "arrayGet", arr: keys, index, type: STRING, loc },
|
|
2478
|
+
loc,
|
|
2479
|
+
},
|
|
2480
|
+
{
|
|
2481
|
+
kind: "varDecl",
|
|
2482
|
+
localId: "value.0",
|
|
2483
|
+
init: source.shape
|
|
2484
|
+
? {
|
|
2485
|
+
kind: "recordKeyGet",
|
|
2486
|
+
obj: receiver,
|
|
2487
|
+
shapeId: source.shapeId,
|
|
2488
|
+
key: name,
|
|
2489
|
+
overflowOnly: true,
|
|
2490
|
+
type: iv,
|
|
2491
|
+
loc,
|
|
2492
|
+
}
|
|
2493
|
+
: { kind: "dynKeyGet", value: receiver, key: name, type: DYN, loc },
|
|
2494
|
+
loc,
|
|
2495
|
+
},
|
|
2090
2496
|
...dispatch,
|
|
2091
|
-
],
|
|
2497
|
+
],
|
|
2498
|
+
loc,
|
|
2092
2499
|
});
|
|
2093
2500
|
}
|
|
2094
2501
|
body.push({ kind: "return", value: destination, loc });
|
|
2095
2502
|
lowerer.liftedFns.push({
|
|
2096
2503
|
name: helper,
|
|
2097
|
-
params: [
|
|
2098
|
-
|
|
2504
|
+
params: [
|
|
2505
|
+
{ localId: "out.0", name: "out", type },
|
|
2506
|
+
{ localId: "source.0", name: "source", type: sourceType },
|
|
2507
|
+
],
|
|
2508
|
+
returnType: type,
|
|
2509
|
+
locals,
|
|
2510
|
+
body,
|
|
2511
|
+
loc,
|
|
2099
2512
|
});
|
|
2100
2513
|
// Publish only a fully checked helper: rejected conversions must not
|
|
2101
2514
|
// leave an entry that a later literal could reuse without a body.
|
|
2102
|
-
lowerer.
|
|
2515
|
+
lowerer.valueHelpers.set(key, helper);
|
|
2103
2516
|
}
|
|
2104
|
-
stmts.push({
|
|
2517
|
+
stmts.push({
|
|
2518
|
+
kind: "exprStmt",
|
|
2519
|
+
expr: { kind: "call", callee: helper, args: [outRef, source.value], type, loc },
|
|
2520
|
+
loc,
|
|
2521
|
+
});
|
|
2105
2522
|
}
|
|
2106
2523
|
return { kind: "seqExpr", stmts, result: outRef, type, loc };
|
|
2107
2524
|
}
|
|
@@ -2138,8 +2555,11 @@ export function lowerShorthandValue(lowerer, prop) {
|
|
|
2138
2555
|
}
|
|
2139
2556
|
const sig = lowerer.fnSigsBySymbol.get(resolved);
|
|
2140
2557
|
const decl = lowerer.checker.declarationsOf(resolved)[0];
|
|
2141
|
-
if (sig &&
|
|
2142
|
-
|
|
2558
|
+
if (sig &&
|
|
2559
|
+
decl &&
|
|
2560
|
+
ts.isFunctionDeclaration(decl) &&
|
|
2561
|
+
(ts.isSourceFile(decl.parent) ||
|
|
2562
|
+
(decl.parent !== undefined && lowerer.nsBlocks.get(decl.parent) === "flattened"))) {
|
|
2143
2563
|
lowerer.noteEdge(sig.name);
|
|
2144
2564
|
const funcType = {
|
|
2145
2565
|
kind: "func",
|
|
@@ -2157,12 +2577,19 @@ export function lowerShorthandValue(lowerer, prop) {
|
|
|
2157
2577
|
lowerer.unsupported("SC1090", prop, `generic functions as values (call '${propName.text}' directly)`);
|
|
2158
2578
|
}
|
|
2159
2579
|
}
|
|
2160
|
-
lowerer.rejectUnresolvedSymbol(symbol
|
|
2580
|
+
lowerer.rejectUnresolvedSymbol(symbol
|
|
2581
|
+
? symbol.flags & ts.SymbolFlags.Alias
|
|
2582
|
+
? lowerer.checker.getAliasedSymbol(symbol)
|
|
2583
|
+
: symbol
|
|
2584
|
+
: null, propName.text, prop, `the reference to '${propName.text}' (a binding form with no lowering)`);
|
|
2161
2585
|
}
|
|
2162
2586
|
/** Rejects the method's own receiver, including lexical captures in
|
|
2163
2587
|
* arrows. Nested ordinary functions bind their own ambient receiver. */
|
|
2164
2588
|
export function rejectThisInObjectMethod(lowerer, node) {
|
|
2165
|
-
if (ts.isFunctionExpression(node) ||
|
|
2589
|
+
if (ts.isFunctionExpression(node) ||
|
|
2590
|
+
ts.isFunctionDeclaration(node) ||
|
|
2591
|
+
ts.isMethodDeclaration(node) ||
|
|
2592
|
+
ts.isAccessor(node))
|
|
2166
2593
|
return;
|
|
2167
2594
|
if (node.kind === ts.SyntaxKind.ThisKeyword) {
|
|
2168
2595
|
lowerer.unsupported("SC1090", node, "references to 'this' in object literal methods");
|