@scriptc/compiler 0.2.3 → 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.d.ts +15 -0
- package/dist/backend/llvm/borrowed-inputs.js +28 -0
- package/dist/backend/llvm/borrowed-inputs.js.map +1 -0
- 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.d.ts +10 -0
- package/dist/backend/llvm/byte-numbers.js +240 -0
- package/dist/backend/llvm/byte-numbers.js.map +1 -0
- package/dist/backend/llvm/bytes-bounds.d.ts +9 -0
- package/dist/backend/llvm/bytes-bounds.js +240 -0
- package/dist/backend/llvm/bytes-bounds.js.map +1 -0
- package/dist/backend/llvm/call-lifetimes.d.ts +10 -0
- package/dist/backend/llvm/call-lifetimes.js +83 -20
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.test.js +203 -18
- package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/checked-value-lifetimes.d.ts +13 -0
- package/dist/backend/llvm/checked-value-lifetimes.js +45 -0
- package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -0
- 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.d.ts +6 -0
- package/dist/backend/llvm/counted-loops.js +35 -0
- package/dist/backend/llvm/counted-loops.js.map +1 -0
- 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 +34 -12
- package/dist/backend/llvm/emitter.js +357 -124
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +237 -46
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +28 -8
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.d.ts +4 -4
- package/dist/backend/llvm/expr-bytes.js +78 -36
- 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 +40 -21
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.d.ts +4 -1
- package/dist/backend/llvm/expr-containers.js +157 -76
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-context.d.ts +11 -0
- package/dist/backend/llvm/expr-control.js +27 -8
- 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 +50 -33
- 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 +139 -37
- 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 +16 -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.d.ts +10 -0
- package/dist/backend/llvm/integer-values.js +52 -0
- package/dist/backend/llvm/integer-values.js.map +1 -0
- package/dist/backend/llvm/integer-views.d.ts +7 -0
- package/dist/backend/llvm/integer-views.js +83 -0
- package/dist/backend/llvm/integer-views.js.map +1 -0
- package/dist/backend/llvm/integer-views.test.d.ts +1 -0
- package/dist/backend/llvm/integer-views.test.js +69 -0
- package/dist/backend/llvm/integer-views.test.js.map +1 -0
- 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 +36 -15
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +38 -23
- 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 +3 -4
- package/dist/backend/llvm/local-array-reads.js +100 -121
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.test.js +379 -71
- 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 +46 -16
- package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.test.js +93 -17
- package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/reference-effects.d.ts +23 -0
- package/dist/backend/llvm/reference-effects.js +179 -0
- package/dist/backend/llvm/reference-effects.js.map +1 -0
- package/dist/backend/llvm/reference-effects.test.d.ts +1 -0
- package/dist/backend/llvm/reference-effects.test.js +157 -0
- package/dist/backend/llvm/reference-effects.test.js.map +1 -0
- package/dist/backend/llvm/shapes.d.ts +7 -4
- package/dist/backend/llvm/shapes.js +82 -22
- 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 +172 -32
- package/dist/backend/llvm/stack-unions.test.js.map +1 -1
- package/dist/backend/llvm/string-construction.d.ts +10 -0
- package/dist/backend/llvm/string-construction.js +38 -0
- package/dist/backend/llvm/string-construction.js.map +1 -0
- package/dist/backend/llvm/string-construction.test.d.ts +1 -0
- package/dist/backend/llvm/string-construction.test.js +90 -0
- package/dist/backend/llvm/string-construction.test.js.map +1 -0
- package/dist/backend/llvm/string-lifetimes.d.ts +2 -2
- package/dist/backend/llvm/string-lifetimes.js +19 -11
- package/dist/backend/llvm/string-lifetimes.js.map +1 -1
- package/dist/backend/llvm/string-lifetimes.test.js +127 -32
- 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 +359 -67
- 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 +585 -157
- 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 +1704 -727
- 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 +3455 -1153
- 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 +1031 -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 +547 -206
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/frontend/type-mapper.test.js +108 -33
- package/dist/frontend/type-mapper.test.js.map +1 -1
- package/dist/frontend/union-discriminants.js +8 -2
- package/dist/frontend/union-discriminants.js.map +1 -1
- package/dist/frontend/union-discriminants.test.js +77 -20
- package/dist/frontend/union-discriminants.test.js.map +1 -1
- package/dist/index.d.ts +9 -8
- package/dist/index.js +150 -81
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.js +97 -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.d.ts +20 -0
- package/dist/ir/byte-numbers.js +116 -0
- package/dist/ir/byte-numbers.js.map +1 -0
- package/dist/ir/byte-numbers.test.d.ts +1 -0
- package/dist/ir/byte-numbers.test.js +55 -0
- package/dist/ir/byte-numbers.test.js.map +1 -0
- 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.d.ts +19 -0
- package/dist/ir/integer-loops.js +172 -11
- package/dist/ir/integer-loops.js.map +1 -1
- package/dist/ir/integer-loops.test.js +122 -9
- package/dist/ir/integer-loops.test.js.map +1 -1
- package/dist/ir/integer-ranges.d.ts +8 -6
- package/dist/ir/integer-ranges.js +416 -90
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +239 -10
- 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 +14 -2155
- package/dist/ir/ir.js +169 -1394
- 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 +826 -1915
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +627 -111
- 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 +74 -29
- package/dist/native/toolchain.js.map +1 -1
- package/dist/native/toolchain.test.js +95 -18
- 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 -8984
- 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 -7366
- package/dist/frontend/lowering/lower-containers.js.map +0 -1
|
@@ -1,27 +1,28 @@
|
|
|
1
|
+
import { dynUndefinedExpr, nodeThrowExpr } from "../../ir/build.js";
|
|
1
2
|
import { InternalCompilerError } from "../../errors.js";
|
|
2
3
|
/* Island-boundary lowering: jsval marshaling into the island (jsvalIn and
|
|
3
4
|
* its boundary fences), island-expression detection, the island method-call
|
|
4
5
|
* surface (Math and number/string methods under --dynamic), and the npm
|
|
5
6
|
* package boundary fences for node_modules-declared symbols. */
|
|
6
7
|
import * as ts from "../ts7/adapter.js";
|
|
7
|
-
import { arrayOf, BOOL, BYTES_U8, DYN, F64, JSVAL, MAX_ISLAND_CALLBACK_ARITY, STRING, VOID, canConvertToDyn, canMarshalTypedFuncIntoIsland, islandPromisePayloadTag, isUnitType } from "../../ir/ir.js";
|
|
8
|
-
import { ISLAND_SURFACE, STATIC_MATH_FNS, STATIC_MATH_PROPS, boundaryIntoIslandMsg, stdlibGlobalNameOf } from "./surfaces.js";
|
|
9
|
-
import { requiresDynamicApiDiag, requiresDynamicPackageDiag } from "../../diagnostics/diagnostic.js";
|
|
10
|
-
import { esmNamedImportLinkCrash, isCjsJsFile, isJsSourceFile, locOf, npmPackageNameOf } from "../program.js";
|
|
8
|
+
import { arrayOf, BOOL, BYTES_U8, DYN, F64, JSVAL, MAX_ISLAND_CALLBACK_ARITY, STRING, VOID, canConvertToDyn, canMarshalTypedFuncIntoIsland, islandPromisePayloadTag, isUnitType, } from "../../ir/ir.js";
|
|
9
|
+
import { ISLAND_SURFACE, STATIC_MATH_FNS, STATIC_MATH_PROPS, boundaryIntoIslandMsg, stdlibGlobalNameOf, } from "./surfaces.js";
|
|
10
|
+
import { requiresDynamicApiDiag, requiresDynamicPackageDiag, } from "../../diagnostics/diagnostic.js";
|
|
11
|
+
import { esmNamedImportLinkCrash, isCjsJsFile, isJsSourceFile, locOf, npmPackageNameOf, } from "../program.js";
|
|
11
12
|
import { foldedStringKeyOf, lowerDynObjectLiteral } from "./expressions/object-literals.js";
|
|
12
13
|
import { isSafeToRepeat } from "./expressions/evaluation-safety.js";
|
|
13
|
-
import { PoisonError,
|
|
14
|
+
import { PoisonError, newFnCtx, own } from "./lowerer.js";
|
|
14
15
|
import { NODE24_FETCH_COMPAT_PROFILE, STATIC_HEADERS_CALLS, STATIC_READABLE_STREAM_CALLS, STATIC_READABLE_STREAM_READS, STATIC_RESPONSE_CALLS, STATIC_RESPONSE_READS, } from "../../compat/fetch-profile.js";
|
|
15
16
|
/** True iff the checker's type for this node maps to jsval ('any') —
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
17
|
+
* the island test in front of every engine-op lowering (receivers,
|
|
18
|
+
* callees, assignment targets). ALSO true for an identifier bound to an
|
|
19
|
+
* island-HANDLE local whose declared type says otherwise (`const {
|
|
20
|
+
* readFileSync } = await import("fs")` — the binding's declared
|
|
21
|
+
* function/Buffer type never held the value; the handle is the value's
|
|
22
|
+
* only story), so its uses dispatch to engine ops instead of
|
|
23
|
+
* re-reporting the declared type. The one exclusion is promise-mapped
|
|
24
|
+
* declared types: a package promise held as a handle keeps its existing
|
|
25
|
+
* checker-driven dispatch (the await/.catch bridge lowerings own it). */
|
|
25
26
|
export function isIslandExpr(lowerer, node) {
|
|
26
27
|
// Static builds cannot contain island handles. Avoid mapping entire
|
|
27
28
|
// receiver/callee types (and their checker RPCs) just to prove that.
|
|
@@ -43,10 +44,10 @@ export function isIslandExpr(lowerer, node) {
|
|
|
43
44
|
return false;
|
|
44
45
|
}
|
|
45
46
|
/** Marshal a static value into the island (--dynamic): primitives by
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
* value, JSON-safe composites as a deep copy (the documented aliasing
|
|
48
|
+
* divergence). Values with no island representation — closures, class
|
|
49
|
+
* instances, promises, un-validated 'unknown' — are rejected with the
|
|
50
|
+
* boundary message. */
|
|
50
51
|
/** The call-time deferral of a FUNC-value island crossing in a JS
|
|
51
52
|
* source: captures the just-recorded diagnostic into the runtime-fence
|
|
52
53
|
* ledger and answers a marshaled host closure that THROWS it when
|
|
@@ -78,7 +79,13 @@ export function jsvalIn(lowerer, e, node) {
|
|
|
78
79
|
// engine's own units — unit-typed expressions are literals (units have
|
|
79
80
|
// no other producers), so dropping the operand loses nothing.
|
|
80
81
|
if (isUnitType(e.type)) {
|
|
81
|
-
return {
|
|
82
|
+
return {
|
|
83
|
+
kind: "jsOp",
|
|
84
|
+
op: e.type.kind === "undefinedT" ? "undefLit" : "nullLit",
|
|
85
|
+
args: [],
|
|
86
|
+
type: JSVAL,
|
|
87
|
+
loc: e.loc,
|
|
88
|
+
};
|
|
82
89
|
}
|
|
83
90
|
if (e.type.kind === "dyn") {
|
|
84
91
|
// A CHECKED-DYNAMIC value entering the island: the dyn tree
|
|
@@ -154,11 +161,11 @@ export function jsvalIn(lowerer, e, node) {
|
|
|
154
161
|
return { kind: "jsMarshal", value: e, type: JSVAL, loc: e.loc };
|
|
155
162
|
}
|
|
156
163
|
/** A static RegExp value as a fresh ENGINE RegExp — `new RegExp(source,
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
164
|
+
* flags)` in the island, the pattern TEXT crossing (both worlds compile
|
|
165
|
+
* the ES-spec grammar). Literals rebuild from their own pattern/flags;
|
|
166
|
+
* pure reads (a regex-typed binding) read the source/flags intrinsics —
|
|
167
|
+
* the rebuild emits the operand twice, so effectful producers return
|
|
168
|
+
* null into the caller's boundary fence. */
|
|
162
169
|
export function islandRegexpOf(e) {
|
|
163
170
|
if (e.type.kind !== "regex")
|
|
164
171
|
return null;
|
|
@@ -176,7 +183,14 @@ export function islandRegexpOf(e) {
|
|
|
176
183
|
else {
|
|
177
184
|
return null;
|
|
178
185
|
}
|
|
179
|
-
const ctor = {
|
|
186
|
+
const ctor = {
|
|
187
|
+
kind: "jsOp",
|
|
188
|
+
op: "globalGet",
|
|
189
|
+
name: "RegExp",
|
|
190
|
+
args: [],
|
|
191
|
+
type: JSVAL,
|
|
192
|
+
loc,
|
|
193
|
+
};
|
|
180
194
|
return {
|
|
181
195
|
kind: "jsOp",
|
|
182
196
|
op: "construct",
|
|
@@ -190,9 +204,9 @@ export function islandRegexpOf(e) {
|
|
|
190
204
|
};
|
|
191
205
|
}
|
|
192
206
|
/** The gate on every ISLAND_SURFACE lowering: under --dynamic the caller
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
207
|
+
* proceeds to engine ops; without it the use site is a per-site SC2012
|
|
208
|
+
* (poison-recovered, so every site in the program reports — and the
|
|
209
|
+
* coverage report groups them under "runs with --dynamic"). */
|
|
196
210
|
export function requireDynamicApi(lowerer, feature, node) {
|
|
197
211
|
if (lowerer.dynamic)
|
|
198
212
|
return;
|
|
@@ -200,9 +214,9 @@ export function requireDynamicApi(lowerer, feature, node) {
|
|
|
200
214
|
throw new PoisonError();
|
|
201
215
|
}
|
|
202
216
|
/** Resolves an identifier to an island-backed ambient GLOBAL function
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
217
|
+
* (parseFloat, isFinite). Provenance, not name: the
|
|
218
|
+
* symbol's declaration must live in the ambient file, so a user function
|
|
219
|
+
* named `parseFloat` never matches. */
|
|
206
220
|
export function islandGlobalFnOf(lowerer, ident) {
|
|
207
221
|
const entry = own(ISLAND_SURFACE.globals, ident.text);
|
|
208
222
|
if (!entry)
|
|
@@ -262,8 +276,7 @@ function requestInitPropMutatedSymbols(lowerer) {
|
|
|
262
276
|
const symbols = new Set();
|
|
263
277
|
const noteBase = (target) => {
|
|
264
278
|
let base = requestInitValueExpr(target);
|
|
265
|
-
while (ts.isPropertyAccessExpression(base) ||
|
|
266
|
-
ts.isElementAccessExpression(base)) {
|
|
279
|
+
while (ts.isPropertyAccessExpression(base) || ts.isElementAccessExpression(base)) {
|
|
267
280
|
base = requestInitValueExpr(base.expression);
|
|
268
281
|
}
|
|
269
282
|
if (!ts.isIdentifier(base))
|
|
@@ -284,16 +297,13 @@ function requestInitPropMutatedSymbols(lowerer) {
|
|
|
284
297
|
if (ts.isBinaryExpression(node) &&
|
|
285
298
|
node.operatorToken.kind >= ts.SyntaxKind.FirstAssignment &&
|
|
286
299
|
node.operatorToken.kind <= ts.SyntaxKind.LastAssignment &&
|
|
287
|
-
(ts.isPropertyAccessExpression(node.left) ||
|
|
288
|
-
ts.isElementAccessExpression(node.left))) {
|
|
300
|
+
(ts.isPropertyAccessExpression(node.left) || ts.isElementAccessExpression(node.left))) {
|
|
289
301
|
noteBase(node.left);
|
|
290
302
|
}
|
|
291
|
-
else if ((ts.isPrefixUnaryExpression(node) ||
|
|
292
|
-
ts.isPostfixUnaryExpression(node)) &&
|
|
303
|
+
else if ((ts.isPrefixUnaryExpression(node) || ts.isPostfixUnaryExpression(node)) &&
|
|
293
304
|
(node.operator === ts.SyntaxKind.PlusPlusToken ||
|
|
294
305
|
node.operator === ts.SyntaxKind.MinusMinusToken) &&
|
|
295
|
-
(ts.isPropertyAccessExpression(node.operand) ||
|
|
296
|
-
ts.isElementAccessExpression(node.operand))) {
|
|
306
|
+
(ts.isPropertyAccessExpression(node.operand) || ts.isElementAccessExpression(node.operand))) {
|
|
297
307
|
noteBase(node.operand);
|
|
298
308
|
}
|
|
299
309
|
else if (ts.isDeleteExpression(node)) {
|
|
@@ -315,8 +325,8 @@ function requestInitConstBacked(lowerer, value, seen) {
|
|
|
315
325
|
if (selected !== null) {
|
|
316
326
|
return requestInitConstBacked(lowerer, selected ? expr.whenTrue : expr.whenFalse, new Set(seen));
|
|
317
327
|
}
|
|
318
|
-
return requestInitConstBacked(lowerer, expr.whenTrue, new Set(seen)) &&
|
|
319
|
-
requestInitConstBacked(lowerer, expr.whenFalse, new Set(seen));
|
|
328
|
+
return (requestInitConstBacked(lowerer, expr.whenTrue, new Set(seen)) &&
|
|
329
|
+
requestInitConstBacked(lowerer, expr.whenFalse, new Set(seen)));
|
|
320
330
|
}
|
|
321
331
|
if (!ts.isIdentifier(expr))
|
|
322
332
|
return false;
|
|
@@ -326,11 +336,14 @@ function requestInitConstBacked(lowerer, value, seen) {
|
|
|
326
336
|
if (requestInitPropMutatedSymbols(lowerer).has(symbol))
|
|
327
337
|
return false;
|
|
328
338
|
seen.add(symbol);
|
|
329
|
-
const declarations = lowerer.checker
|
|
339
|
+
const declarations = lowerer.checker
|
|
340
|
+
.declarationsOf(symbol)
|
|
341
|
+
.filter((declaration) => ts.isVariableDeclaration(declaration) &&
|
|
330
342
|
declaration.initializer !== undefined &&
|
|
331
343
|
ts.isVariableDeclarationList(declaration.parent) &&
|
|
332
344
|
(declaration.parent.flags & ts.NodeFlags.Const) !== 0);
|
|
333
|
-
return declarations.length > 0 &&
|
|
345
|
+
return (declarations.length > 0 &&
|
|
346
|
+
declarations.every((declaration) => requestInitConstBacked(lowerer, declaration.initializer, new Set(seen))));
|
|
334
347
|
}
|
|
335
348
|
/** Visit the values selected by one key or index on a const-backed object or
|
|
336
349
|
* array. Property symbols can come from annotations rather than the literal
|
|
@@ -355,8 +368,7 @@ function visitRequestInitConstSelectedValues(lowerer, value, selector, seen, vis
|
|
|
355
368
|
if (ts.isPropertyAssignment(property)) {
|
|
356
369
|
visit(property.initializer);
|
|
357
370
|
}
|
|
358
|
-
else if (ts.isShorthandPropertyAssignment(property) &&
|
|
359
|
-
ts.isIdentifier(property.name)) {
|
|
371
|
+
else if (ts.isShorthandPropertyAssignment(property) && ts.isIdentifier(property.name)) {
|
|
360
372
|
visit(property.name);
|
|
361
373
|
}
|
|
362
374
|
return true;
|
|
@@ -365,9 +377,7 @@ function visitRequestInitConstSelectedValues(lowerer, value, selector, seen, vis
|
|
|
365
377
|
}
|
|
366
378
|
if (selector.kind === "index" && ts.isArrayLiteralExpression(expr)) {
|
|
367
379
|
const element = expr.elements[selector.index];
|
|
368
|
-
if (element === undefined ||
|
|
369
|
-
ts.isOmittedExpression(element) ||
|
|
370
|
-
ts.isSpreadElement(element)) {
|
|
380
|
+
if (element === undefined || ts.isOmittedExpression(element) || ts.isSpreadElement(element)) {
|
|
371
381
|
return false;
|
|
372
382
|
}
|
|
373
383
|
visit(element);
|
|
@@ -493,15 +503,18 @@ function fenceRequestInitProperty(lowerer, access, seen) {
|
|
|
493
503
|
if (ts.isPropertyAssignment(declaration)) {
|
|
494
504
|
fenceRequestInitValueInner(lowerer, declaration.initializer, seen);
|
|
495
505
|
}
|
|
496
|
-
else if (ts.isShorthandPropertyAssignment(declaration) &&
|
|
497
|
-
ts.isIdentifier(declaration.name)) {
|
|
506
|
+
else if (ts.isShorthandPropertyAssignment(declaration) && ts.isIdentifier(declaration.name)) {
|
|
498
507
|
fenceRequestInitValueInner(lowerer, declaration.name, seen);
|
|
499
508
|
}
|
|
500
509
|
}
|
|
501
510
|
}
|
|
502
511
|
function fenceRequestInitObject(lowerer, init, seen) {
|
|
503
512
|
const contextual = lowerer.checker.getContextualType(init);
|
|
504
|
-
const contextualArms = contextual?.isUnionType()
|
|
513
|
+
const contextualArms = contextual?.isUnionType()
|
|
514
|
+
? ts.constituentTypes(contextual)
|
|
515
|
+
: contextual
|
|
516
|
+
? [contextual]
|
|
517
|
+
: [];
|
|
505
518
|
const rows = NODE24_FETCH_COMPAT_PROFILE.inventory.entries.filter((entry) => entry.owner === "RequestInit" && entry.placement === "dictionary");
|
|
506
519
|
const shadowed = new Set();
|
|
507
520
|
const fence = (row, value, blame) => {
|
|
@@ -611,27 +624,27 @@ function fenceRequestInitValue(lowerer, value) {
|
|
|
611
624
|
fenceRequestInitValueInner(lowerer, value, new Set());
|
|
612
625
|
}
|
|
613
626
|
/** USER-code `fetch(url)` / `fetch(url, init)` — the ambient global
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
627
|
+
* (provenance, not the name: a user's own `fetch` never matches).
|
|
628
|
+
*
|
|
629
|
+
* The static tier owns URL requests directly: scr_fetch_static runs
|
|
630
|
+
* over the native net/http/tls stack, consumes a checked-dynamic
|
|
631
|
+
* RequestInit object, and returns a promise of an opaque native
|
|
632
|
+
* Response handle. AbortSignal and readable Web Streams are native
|
|
633
|
+
* checked-dynamic handles too, so cancellation and streaming bodies
|
|
634
|
+
* stay engine-free.
|
|
635
|
+
*
|
|
636
|
+
* The engine's own fetch executes (the same one embedded npm code calls —
|
|
637
|
+
* scr_fetch.c over the native net/tls stack): the url marshals in (strings; template
|
|
638
|
+
* results), an init OBJECT LITERAL builds natively in the island through
|
|
639
|
+
* the existing 'any'-contextual literal path (RequestInit maps to jsval,
|
|
640
|
+
* so field values marshal individually and an AbortSignal handle passes
|
|
641
|
+
* straight through), and the engine's promise bridges to a static
|
|
642
|
+
* `promise of jsval` (jsBridgePromise) — `await fetch(...)` parks the
|
|
643
|
+
* fiber like any await and resumes with the Response HANDLE. Member
|
|
644
|
+
* reads/calls on the handle are engine ops; typed extraction happens at
|
|
645
|
+
* the user's narrowing sites through the validated-exit machinery.
|
|
646
|
+
* Null for anything that isn't THE ambient fetch, so lowerCall keeps
|
|
647
|
+
* trying. */
|
|
635
648
|
export function lowerFetchCall(lowerer, call) {
|
|
636
649
|
const callee = call.expression;
|
|
637
650
|
if (!ts.isIdentifier(callee) || callee.text !== "fetch")
|
|
@@ -700,7 +713,9 @@ export function lowerFetchCall(lowerer, call) {
|
|
|
700
713
|
type: STRING,
|
|
701
714
|
loc: locOf(inputNode),
|
|
702
715
|
}
|
|
703
|
-
: input.type.kind === "dyn"
|
|
716
|
+
: input.type.kind === "dyn"
|
|
717
|
+
? inputRef
|
|
718
|
+
: lowerer.coerceInto(inputNode, inputRef, STRING);
|
|
704
719
|
const answer = {
|
|
705
720
|
kind: "libCall",
|
|
706
721
|
fn: input.type.kind === "dyn" ? "fetch.input" : "fetch.start",
|
|
@@ -710,7 +725,14 @@ export function lowerFetchCall(lowerer, call) {
|
|
|
710
725
|
};
|
|
711
726
|
return { kind: "seqExpr", stmts, result: answer, type: answer.type, loc };
|
|
712
727
|
}
|
|
713
|
-
const fetchFn = {
|
|
728
|
+
const fetchFn = {
|
|
729
|
+
kind: "jsOp",
|
|
730
|
+
op: "globalGet",
|
|
731
|
+
name: "fetch",
|
|
732
|
+
args: [],
|
|
733
|
+
type: JSVAL,
|
|
734
|
+
loc,
|
|
735
|
+
};
|
|
714
736
|
// Init OBJECT LITERALS build natively in the island (the general
|
|
715
737
|
// 'any'-contextual literal path can't claim them: the optional param's
|
|
716
738
|
// contextual type is `RequestInit | undefined`, a union) — field
|
|
@@ -718,7 +740,9 @@ export function lowerFetchCall(lowerer, call) {
|
|
|
718
740
|
// through and dashed header keys ("content-type") are plain engine
|
|
719
741
|
// property names. Non-literal inits marshal as a whole (JSON-safe
|
|
720
742
|
// records; a signal field inside one fences with the boundary rule).
|
|
721
|
-
const args = call.arguments.map((a) => ts.isObjectLiteralExpression(a)
|
|
743
|
+
const args = call.arguments.map((a) => ts.isObjectLiteralExpression(a)
|
|
744
|
+
? lowerIslandObjectLiteral(lowerer, a)
|
|
745
|
+
: lowerer.jsvalIn(lowerer.lowerExpr(a), a));
|
|
722
746
|
const raw = { kind: "jsOp", op: "callFn", args: [fetchFn, ...args], type: JSVAL, loc };
|
|
723
747
|
return { kind: "jsBridgePromise", value: raw, type: { kind: "promise", inner: JSVAL }, loc };
|
|
724
748
|
}
|
|
@@ -735,10 +759,7 @@ export function lowerStaticResponseCall(lowerer, call) {
|
|
|
735
759
|
const access = call.expression;
|
|
736
760
|
const member = staticResponseMemberName(lowerer, access);
|
|
737
761
|
if (access.questionDotToken ||
|
|
738
|
-
(member !== "json" &&
|
|
739
|
-
member !== "text" &&
|
|
740
|
-
member !== "bytes" &&
|
|
741
|
-
member !== "arrayBuffer") ||
|
|
762
|
+
(member !== "json" && member !== "text" && member !== "bytes" && member !== "arrayBuffer") ||
|
|
742
763
|
call.arguments.length !== 0) {
|
|
743
764
|
return null;
|
|
744
765
|
}
|
|
@@ -881,14 +902,10 @@ function fetchAccessMemberNames(lowerer, access) {
|
|
|
881
902
|
: fetchElementMemberNames(lowerer, access.argumentExpression);
|
|
882
903
|
}
|
|
883
904
|
function fetchInventoryStatus(owner, member, placement) {
|
|
884
|
-
return NODE24_FETCH_COMPAT_PROFILE.inventory.entries.find((entry) => entry.owner === owner &&
|
|
885
|
-
entry.member === member &&
|
|
886
|
-
entry.placement === placement)?.status ?? null;
|
|
905
|
+
return (NODE24_FETCH_COMPAT_PROFILE.inventory.entries.find((entry) => entry.owner === owner && entry.member === member && entry.placement === placement)?.status ?? null);
|
|
887
906
|
}
|
|
888
907
|
function fetchInventoryReason(owner, member, placement) {
|
|
889
|
-
return NODE24_FETCH_COMPAT_PROFILE.inventory.entries.find((entry) => entry.owner === owner &&
|
|
890
|
-
entry.member === member &&
|
|
891
|
-
entry.placement === placement)?.reason;
|
|
908
|
+
return NODE24_FETCH_COMPAT_PROFILE.inventory.entries.find((entry) => entry.owner === owner && entry.member === member && entry.placement === placement)?.reason;
|
|
892
909
|
}
|
|
893
910
|
/** Constructor-object operations are distinct from Response instance
|
|
894
911
|
* methods. The inventory marks the former unsupported in both tiers; fence
|
|
@@ -906,14 +923,13 @@ export function fenceUnsupportedFetchConstructorMember(lowerer, access) {
|
|
|
906
923
|
lowerer.noLowering(`Response.${member}`, access, "Response static constructor-object operations have no compiler lowering in either tier");
|
|
907
924
|
}
|
|
908
925
|
function hasLiveWebMutableArm(lowerer, type) {
|
|
909
|
-
if (type.kind === "record" ||
|
|
910
|
-
type.kind === "array" ||
|
|
911
|
-
type.kind === "bytes") {
|
|
926
|
+
if (type.kind === "record" || type.kind === "array" || type.kind === "bytes") {
|
|
912
927
|
return true;
|
|
913
928
|
}
|
|
914
929
|
if (type.kind !== "union")
|
|
915
930
|
return false;
|
|
916
|
-
return lowerer.unions.get(type.unionId)?.arms.some((arm) => hasLiveWebMutableArm(lowerer, arm)) ??
|
|
931
|
+
return (lowerer.unions.get(type.unionId)?.arms.some((arm) => hasLiveWebMutableArm(lowerer, arm)) ??
|
|
932
|
+
false);
|
|
917
933
|
}
|
|
918
934
|
/** Box mutable data for Web API slots that expose the exact JavaScript
|
|
919
935
|
* value again. Ordinary dynFrom remains the documented copy boundary;
|
|
@@ -938,8 +954,7 @@ function fetchMethodArgumentIsLive(owner, members, index) {
|
|
|
938
954
|
return ((index === 0 &&
|
|
939
955
|
((owner === "ReadableStreamDefaultController" &&
|
|
940
956
|
members.some((member) => member === "enqueue" || member === "error")) ||
|
|
941
|
-
((owner === "ReadableStream" ||
|
|
942
|
-
owner === "ReadableStreamDefaultReader") &&
|
|
957
|
+
((owner === "ReadableStream" || owner === "ReadableStreamDefaultReader") &&
|
|
943
958
|
members.includes("cancel")) ||
|
|
944
959
|
(owner === "AbortController" && members.includes("abort")))) ||
|
|
945
960
|
(index === 1 &&
|
|
@@ -962,9 +977,7 @@ export function fenceStaticResponseMember(lowerer, access, use) {
|
|
|
962
977
|
if (lowerer.dynamic && members.every((member) => status(member) !== "unsupported")) {
|
|
963
978
|
return null;
|
|
964
979
|
}
|
|
965
|
-
const supported = (member) => use === "call"
|
|
966
|
-
? STATIC_RESPONSE_CALLS.has(member)
|
|
967
|
-
: STATIC_RESPONSE_READS.has(member);
|
|
980
|
+
const supported = (member) => use === "call" ? STATIC_RESPONSE_CALLS.has(member) : STATIC_RESPONSE_READS.has(member);
|
|
968
981
|
if (!lowerer.dynamic && members.every(supported))
|
|
969
982
|
return null;
|
|
970
983
|
const member = members.find((candidate) => lowerer.dynamic ? status(candidate) === "unsupported" : !supported(candidate));
|
|
@@ -990,7 +1003,9 @@ export function fenceStaticHeadersMember(lowerer, access, use) {
|
|
|
990
1003
|
if (lowerer.dynamic && members.every((member) => status(member) !== "unsupported")) {
|
|
991
1004
|
return null;
|
|
992
1005
|
}
|
|
993
|
-
if (!lowerer.dynamic &&
|
|
1006
|
+
if (!lowerer.dynamic &&
|
|
1007
|
+
use === "call" &&
|
|
1008
|
+
members.every((member) => STATIC_HEADERS_CALLS.has(member))) {
|
|
994
1009
|
return null;
|
|
995
1010
|
}
|
|
996
1011
|
const member = members.find((candidate) => lowerer.dynamic
|
|
@@ -1136,7 +1151,9 @@ export function fenceStaticHeadersIteration(lowerer, node) {
|
|
|
1136
1151
|
return;
|
|
1137
1152
|
// The initializer is the value being iterated. Asking for the binding
|
|
1138
1153
|
// pattern's synthesized tuple type can panic in TypeScript serialization.
|
|
1139
|
-
const source = ts.isArrayBindingPattern(node) &&
|
|
1154
|
+
const source = ts.isArrayBindingPattern(node) &&
|
|
1155
|
+
ts.isVariableDeclaration(node.parent) &&
|
|
1156
|
+
node.parent.initializer
|
|
1140
1157
|
? node.parent.initializer
|
|
1141
1158
|
: node;
|
|
1142
1159
|
const value = ts.isExpression(source) ? requestInitValueExpr(source) : source;
|
|
@@ -1264,8 +1281,7 @@ export function lowerFetchElementMethodCall(lowerer, call) {
|
|
|
1264
1281
|
}
|
|
1265
1282
|
const rows = members.map((member) => NODE24_FETCH_COMPAT_PROFILE.inventory.entries.find((entry) => entry.owner === resolved.owner &&
|
|
1266
1283
|
entry.member === member &&
|
|
1267
|
-
(entry.placement === "prototype" ||
|
|
1268
|
-
entry.placement === "prototype-inherited")));
|
|
1284
|
+
(entry.placement === "prototype" || entry.placement === "prototype-inherited")));
|
|
1269
1285
|
if (rows.some((row) => row === undefined ||
|
|
1270
1286
|
row.status === "out-of-scope" ||
|
|
1271
1287
|
(lowerer.dynamic ? row.status === "unsupported" : row.status !== "static"))) {
|
|
@@ -1280,9 +1296,7 @@ export function lowerFetchElementMethodCall(lowerer, call) {
|
|
|
1280
1296
|
const loc = locOf(call);
|
|
1281
1297
|
const receiverLocal = lowerer.declareHiddenLocal("%fetchReceiver", lowerer.dynamic ? JSVAL : DYN);
|
|
1282
1298
|
const keyLocal = lowerer.declareHiddenLocal("%fetchMember", STRING);
|
|
1283
|
-
const calleeLocal = lowerer.dynamic
|
|
1284
|
-
? lowerer.declareHiddenLocal("%fetchMethod", JSVAL)
|
|
1285
|
-
: null;
|
|
1299
|
+
const calleeLocal = lowerer.dynamic ? lowerer.declareHiddenLocal("%fetchMethod", JSVAL) : null;
|
|
1286
1300
|
const argumentValues = call.arguments.map((argument, index) => lowerer.dynamic
|
|
1287
1301
|
? lowerer.jsvalIn(lowerer.lowerExpr(argument), argument)
|
|
1288
1302
|
: fetchMethodArgumentIsLive(resolved.owner, members, index)
|
|
@@ -1327,10 +1341,7 @@ export function lowerFetchElementMethodCall(lowerer, call) {
|
|
|
1327
1341
|
init: {
|
|
1328
1342
|
kind: "jsOp",
|
|
1329
1343
|
op: "getIdx",
|
|
1330
|
-
args: [
|
|
1331
|
-
receiverRef,
|
|
1332
|
-
{ kind: "jsMarshal", value: keyRef, type: JSVAL, loc },
|
|
1333
|
-
],
|
|
1344
|
+
args: [receiverRef, { kind: "jsMarshal", value: keyRef, type: JSVAL, loc }],
|
|
1334
1345
|
type: JSVAL,
|
|
1335
1346
|
loc,
|
|
1336
1347
|
},
|
|
@@ -1408,9 +1419,7 @@ export function lowerFetchElementMethodCall(lowerer, call) {
|
|
|
1408
1419
|
}
|
|
1409
1420
|
const declared = lowerer.dynamic ? lowerer.mapTypeOf(lowerer.typeOf(call)) : null;
|
|
1410
1421
|
if (declared &&
|
|
1411
|
-
(declared.kind === "f64" ||
|
|
1412
|
-
declared.kind === "bool" ||
|
|
1413
|
-
declared.kind === "string")) {
|
|
1422
|
+
(declared.kind === "f64" || declared.kind === "bool" || declared.kind === "string")) {
|
|
1414
1423
|
result = { kind: "jsExit", value: result, type: declared, loc };
|
|
1415
1424
|
}
|
|
1416
1425
|
return {
|
|
@@ -1502,9 +1511,7 @@ function staticFirstArgWithSurplusArgs(lowerer, call, first) {
|
|
|
1502
1511
|
type: first.type,
|
|
1503
1512
|
loc,
|
|
1504
1513
|
};
|
|
1505
|
-
const stmts = [
|
|
1506
|
-
{ kind: "varDecl", localId: firstLocal.id, init: first, loc },
|
|
1507
|
-
];
|
|
1514
|
+
const stmts = [{ kind: "varDecl", localId: firstLocal.id, init: first, loc }];
|
|
1508
1515
|
for (const argument of call.arguments.slice(1)) {
|
|
1509
1516
|
if (ts.isSpreadElement(argument)) {
|
|
1510
1517
|
lowerer.noLowering("spread surplus arguments on the static fetch companion APIs", argument, "pass surplus arguments without spread syntax");
|
|
@@ -1651,8 +1658,7 @@ export function lowerStaticAbortControllerCall(lowerer, call) {
|
|
|
1651
1658
|
if (lowerer.dynamic ||
|
|
1652
1659
|
call.questionDotToken ||
|
|
1653
1660
|
call.arguments.some((argument) => ts.isSpreadElement(argument)) ||
|
|
1654
|
-
(!ts.isPropertyAccessExpression(access) &&
|
|
1655
|
-
!ts.isElementAccessExpression(access)) ||
|
|
1661
|
+
(!ts.isPropertyAccessExpression(access) && !ts.isElementAccessExpression(access)) ||
|
|
1656
1662
|
access.questionDotToken ||
|
|
1657
1663
|
staticResponseMemberName(lowerer, access) !== "abort") {
|
|
1658
1664
|
return null;
|
|
@@ -1660,8 +1666,9 @@ export function lowerStaticAbortControllerCall(lowerer, call) {
|
|
|
1660
1666
|
const receiverTs = lowerer.checker.getBaseTypeOfLiteralType(lowerer.typeOf(access.expression));
|
|
1661
1667
|
const symbol = receiverTs.getAliasSymbol() ?? receiverTs.getSymbol();
|
|
1662
1668
|
if (symbol?.name !== "AbortController" ||
|
|
1663
|
-
!lowerer.checker
|
|
1664
|
-
|
|
1669
|
+
!lowerer.checker
|
|
1670
|
+
.declarationsOf(symbol)
|
|
1671
|
+
.some((d) => ts.isInterfaceDeclaration(d) && lowerer.isStdlibFile(d.getSourceFile()))) {
|
|
1665
1672
|
return null;
|
|
1666
1673
|
}
|
|
1667
1674
|
const receiver = lowerer.lowerExpr(access.expression);
|
|
@@ -1690,8 +1697,7 @@ export function lowerStaticReadableStreamControllerCall(lowerer, call) {
|
|
|
1690
1697
|
if (lowerer.dynamic ||
|
|
1691
1698
|
call.questionDotToken ||
|
|
1692
1699
|
call.arguments.length > 1 ||
|
|
1693
|
-
(!ts.isPropertyAccessExpression(access) &&
|
|
1694
|
-
!ts.isElementAccessExpression(access)) ||
|
|
1700
|
+
(!ts.isPropertyAccessExpression(access) && !ts.isElementAccessExpression(access)) ||
|
|
1695
1701
|
access.questionDotToken) {
|
|
1696
1702
|
return null;
|
|
1697
1703
|
}
|
|
@@ -1701,8 +1707,9 @@ export function lowerStaticReadableStreamControllerCall(lowerer, call) {
|
|
|
1701
1707
|
const receiverTs = lowerer.checker.getBaseTypeOfLiteralType(lowerer.typeOf(access.expression));
|
|
1702
1708
|
const symbol = receiverTs.getAliasSymbol() ?? receiverTs.getSymbol();
|
|
1703
1709
|
if (symbol?.name !== "ReadableStreamDefaultController" ||
|
|
1704
|
-
!lowerer.checker
|
|
1705
|
-
|
|
1710
|
+
!lowerer.checker
|
|
1711
|
+
.declarationsOf(symbol)
|
|
1712
|
+
.some((d) => ts.isInterfaceDeclaration(d) && lowerer.isStdlibFile(d.getSourceFile()))) {
|
|
1706
1713
|
return null;
|
|
1707
1714
|
}
|
|
1708
1715
|
const recv = lowerer.lowerExpr(access.expression);
|
|
@@ -1710,9 +1717,7 @@ export function lowerStaticReadableStreamControllerCall(lowerer, call) {
|
|
|
1710
1717
|
return null;
|
|
1711
1718
|
const loc = locOf(call);
|
|
1712
1719
|
const args = [
|
|
1713
|
-
call.arguments[0]
|
|
1714
|
-
? lowerLiveWebValue(lowerer, call.arguments[0])
|
|
1715
|
-
: dynUndefinedExpr(loc),
|
|
1720
|
+
call.arguments[0] ? lowerLiveWebValue(lowerer, call.arguments[0]) : dynUndefinedExpr(loc),
|
|
1716
1721
|
];
|
|
1717
1722
|
return lowerStaticFixedFetchMethodCall(lowerer, call, access, member, recv, args, (receiver, argumentRefs) => ({
|
|
1718
1723
|
kind: "dynInvoke",
|
|
@@ -1733,15 +1738,13 @@ export function lowerStaticReadableStreamCancelCall(lowerer, call) {
|
|
|
1733
1738
|
call.questionDotToken ||
|
|
1734
1739
|
call.arguments.length > 1 ||
|
|
1735
1740
|
call.arguments.some((argument) => ts.isSpreadElement(argument)) ||
|
|
1736
|
-
(!ts.isPropertyAccessExpression(access) &&
|
|
1737
|
-
!ts.isElementAccessExpression(access)) ||
|
|
1741
|
+
(!ts.isPropertyAccessExpression(access) && !ts.isElementAccessExpression(access)) ||
|
|
1738
1742
|
access.questionDotToken ||
|
|
1739
1743
|
staticResponseMemberName(lowerer, access) !== "cancel") {
|
|
1740
1744
|
return null;
|
|
1741
1745
|
}
|
|
1742
1746
|
const resolved = fetchInterfaceInventoryOwner(lowerer, access.expression);
|
|
1743
|
-
if (resolved?.owner !== "ReadableStream" &&
|
|
1744
|
-
resolved?.owner !== "ReadableStreamDefaultReader") {
|
|
1747
|
+
if (resolved?.owner !== "ReadableStream" && resolved?.owner !== "ReadableStreamDefaultReader") {
|
|
1745
1748
|
return null;
|
|
1746
1749
|
}
|
|
1747
1750
|
const receiver = lowerer.lowerExpr(access.expression);
|
|
@@ -1749,9 +1752,7 @@ export function lowerStaticReadableStreamCancelCall(lowerer, call) {
|
|
|
1749
1752
|
return null;
|
|
1750
1753
|
const loc = locOf(call);
|
|
1751
1754
|
const args = [
|
|
1752
|
-
call.arguments[0]
|
|
1753
|
-
? lowerLiveWebValue(lowerer, call.arguments[0])
|
|
1754
|
-
: dynUndefinedExpr(loc),
|
|
1755
|
+
call.arguments[0] ? lowerLiveWebValue(lowerer, call.arguments[0]) : dynUndefinedExpr(loc),
|
|
1755
1756
|
];
|
|
1756
1757
|
return lowerStaticFixedFetchMethodCall(lowerer, call, access, "cancel", receiver, args, (receiverRef, argumentRefs) => ({
|
|
1757
1758
|
kind: "dynInvoke",
|
|
@@ -1773,8 +1774,7 @@ export function lowerStaticAbortSignalListenerCall(lowerer, call) {
|
|
|
1773
1774
|
call.questionDotToken ||
|
|
1774
1775
|
call.arguments.length < 2 ||
|
|
1775
1776
|
call.arguments.some((arg) => ts.isSpreadElement(arg)) ||
|
|
1776
|
-
(!ts.isPropertyAccessExpression(access) &&
|
|
1777
|
-
!ts.isElementAccessExpression(access)) ||
|
|
1777
|
+
(!ts.isPropertyAccessExpression(access) && !ts.isElementAccessExpression(access)) ||
|
|
1778
1778
|
access.questionDotToken) {
|
|
1779
1779
|
return null;
|
|
1780
1780
|
}
|
|
@@ -1785,17 +1785,16 @@ export function lowerStaticAbortSignalListenerCall(lowerer, call) {
|
|
|
1785
1785
|
const receiverTs = lowerer.checker.getBaseTypeOfLiteralType(lowerer.typeOf(access.expression));
|
|
1786
1786
|
const symbol = receiverTs.getAliasSymbol() ?? receiverTs.getSymbol();
|
|
1787
1787
|
if (symbol?.name !== "AbortSignal" ||
|
|
1788
|
-
!lowerer.checker
|
|
1789
|
-
|
|
1788
|
+
!lowerer.checker
|
|
1789
|
+
.declarationsOf(symbol)
|
|
1790
|
+
.some((d) => ts.isInterfaceDeclaration(d) && lowerer.isStdlibFile(d.getSourceFile()))) {
|
|
1790
1791
|
return null;
|
|
1791
1792
|
}
|
|
1792
1793
|
const recv = lowerer.lowerExpr(access.expression);
|
|
1793
1794
|
if (recv.type.kind !== "dyn")
|
|
1794
1795
|
return null;
|
|
1795
1796
|
const loc = locOf(call);
|
|
1796
|
-
const args = call.arguments.map((arg, index) => index === 1
|
|
1797
|
-
? lowerLiveWebValue(lowerer, arg)
|
|
1798
|
-
: lowerer.lowerExprExpecting(arg, DYN));
|
|
1797
|
+
const args = call.arguments.map((arg, index) => index === 1 ? lowerLiveWebValue(lowerer, arg) : lowerer.lowerExprExpecting(arg, DYN));
|
|
1799
1798
|
return lowerStaticFixedFetchMethodCall(lowerer, call, access, member, recv, args, (receiver, argumentRefs) => ({
|
|
1800
1799
|
kind: "dynInvoke",
|
|
1801
1800
|
recv: receiver,
|
|
@@ -1811,8 +1810,7 @@ export function lowerStaticAbortSignalListenerCall(lowerer, call) {
|
|
|
1811
1810
|
* island Web object. JavaScript accepts surplus constructor arguments, so
|
|
1812
1811
|
* both tiers evaluate them even though AbortController ignores their values. */
|
|
1813
1812
|
export function lowerAbortControllerNew(lowerer, expr) {
|
|
1814
|
-
if (!ts.isIdentifier(expr.expression) ||
|
|
1815
|
-
expr.expression.text !== "AbortController") {
|
|
1813
|
+
if (!ts.isIdentifier(expr.expression) || expr.expression.text !== "AbortController") {
|
|
1816
1814
|
return null;
|
|
1817
1815
|
}
|
|
1818
1816
|
const symbol = lowerer.resolveValueSymbol(expr.expression);
|
|
@@ -1834,7 +1832,10 @@ export function lowerAbortControllerNew(lowerer, expr) {
|
|
|
1834
1832
|
return {
|
|
1835
1833
|
kind: "jsOp",
|
|
1836
1834
|
op: "construct",
|
|
1837
|
-
args: [
|
|
1835
|
+
args: [
|
|
1836
|
+
ctor,
|
|
1837
|
+
...args.map((argument) => lowerer.jsvalIn(lowerer.lowerExpr(argument), argument)),
|
|
1838
|
+
],
|
|
1838
1839
|
type: JSVAL,
|
|
1839
1840
|
loc,
|
|
1840
1841
|
};
|
|
@@ -1864,8 +1865,7 @@ export function lowerAbortControllerNew(lowerer, expr) {
|
|
|
1864
1865
|
* the checked-dynamic tree; dynamic builds construct the island's Web
|
|
1865
1866
|
* stream directly so the returned handle composes with dynamic fetch. */
|
|
1866
1867
|
export function lowerStaticReadableStreamNew(lowerer, expr) {
|
|
1867
|
-
if (!ts.isIdentifier(expr.expression) ||
|
|
1868
|
-
expr.expression.text !== "ReadableStream") {
|
|
1868
|
+
if (!ts.isIdentifier(expr.expression) || expr.expression.text !== "ReadableStream") {
|
|
1869
1869
|
return null;
|
|
1870
1870
|
}
|
|
1871
1871
|
const symbol = lowerer.resolveValueSymbol(expr.expression);
|
|
@@ -1920,17 +1920,30 @@ export function lowerFetchWebNew(lowerer, expr) {
|
|
|
1920
1920
|
return null;
|
|
1921
1921
|
const loc = locOf(expr);
|
|
1922
1922
|
if (lowerer.dynamic)
|
|
1923
|
-
return {
|
|
1923
|
+
return {
|
|
1924
|
+
kind: "jsOp",
|
|
1925
|
+
op: "construct",
|
|
1926
|
+
args: [
|
|
1924
1927
|
{ kind: "jsOp", op: "globalGet", name, args: [], type: JSVAL, loc },
|
|
1925
1928
|
...args.map((arg) => lowerer.jsvalIn(lowerer.lowerExpr(arg), arg)),
|
|
1926
|
-
],
|
|
1929
|
+
],
|
|
1930
|
+
type: JSVAL,
|
|
1931
|
+
loc,
|
|
1932
|
+
};
|
|
1927
1933
|
if (name === "Request" && args[1])
|
|
1928
1934
|
fenceRequestInitValue(lowerer, args[1]);
|
|
1929
1935
|
const lowered = args.map((arg) => ts.isObjectLiteralExpression(arg)
|
|
1930
|
-
? lowerDynObjectLiteral(lowerer, arg)
|
|
1931
|
-
|
|
1932
|
-
|
|
1933
|
-
|
|
1936
|
+
? lowerDynObjectLiteral(lowerer, arg)
|
|
1937
|
+
: lowerLiveWebValue(lowerer, arg));
|
|
1938
|
+
return {
|
|
1939
|
+
kind: "libCall",
|
|
1940
|
+
fn: name === "Request" ? "fetch.requestNew" : "fetch.headersNew",
|
|
1941
|
+
args: name === "Request"
|
|
1942
|
+
? [lowered[0] ?? dynUndefinedExpr(loc), lowered[1] ?? dynUndefinedExpr(loc)]
|
|
1943
|
+
: [lowered[0] ?? dynUndefinedExpr(loc)],
|
|
1944
|
+
type: DYN,
|
|
1945
|
+
loc,
|
|
1946
|
+
};
|
|
1934
1947
|
}
|
|
1935
1948
|
/** `new Response(body?, init?)`. Dynamic builds construct the island's
|
|
1936
1949
|
* Web Response directly. Static builds hand a checked-dynamic BodyInit and
|
|
@@ -2003,8 +2016,7 @@ export function lowerResponseNew(lowerer, expr) {
|
|
|
2003
2016
|
}
|
|
2004
2017
|
}
|
|
2005
2018
|
if (value.kind === "unitLit" || lowerer.dynConvertible(value.type)) {
|
|
2006
|
-
if (what === "an init value" &&
|
|
2007
|
-
hasLiveWebMutableArm(lowerer, value.type)) {
|
|
2019
|
+
if (what === "an init value" && hasLiveWebMutableArm(lowerer, value.type)) {
|
|
2008
2020
|
return {
|
|
2009
2021
|
kind: "dynFrom",
|
|
2010
2022
|
value,
|
|
@@ -2074,10 +2086,7 @@ export function lowerResponseNew(lowerer, expr) {
|
|
|
2074
2086
|
const result = {
|
|
2075
2087
|
kind: "libCall",
|
|
2076
2088
|
fn: "fetch.responseNew",
|
|
2077
|
-
args: [
|
|
2078
|
-
toDyn(bodyNode, bodyRef, "a body"),
|
|
2079
|
-
toDyn(initNode, initRef, "an init value"),
|
|
2080
|
-
],
|
|
2089
|
+
args: [toDyn(bodyNode, bodyRef, "a body"), toDyn(initNode, initRef, "an init value")],
|
|
2081
2090
|
type: DYN,
|
|
2082
2091
|
loc,
|
|
2083
2092
|
};
|
|
@@ -2092,8 +2101,7 @@ export function lowerStaticReadableStreamReaderCall(lowerer, call) {
|
|
|
2092
2101
|
if (lowerer.dynamic ||
|
|
2093
2102
|
call.questionDotToken ||
|
|
2094
2103
|
call.arguments.length !== 0 ||
|
|
2095
|
-
(!ts.isPropertyAccessExpression(access) &&
|
|
2096
|
-
!ts.isElementAccessExpression(access)) ||
|
|
2104
|
+
(!ts.isPropertyAccessExpression(access) && !ts.isElementAccessExpression(access)) ||
|
|
2097
2105
|
access.questionDotToken) {
|
|
2098
2106
|
return null;
|
|
2099
2107
|
}
|
|
@@ -2103,13 +2111,13 @@ export function lowerStaticReadableStreamReaderCall(lowerer, call) {
|
|
|
2103
2111
|
const receiverTs = lowerer.typeOf(access.expression);
|
|
2104
2112
|
const symbol = receiverTs.getSymbol();
|
|
2105
2113
|
if (symbol?.name !== "ReadableStreamDefaultReader" ||
|
|
2106
|
-
!lowerer.checker
|
|
2107
|
-
|
|
2114
|
+
!lowerer.checker
|
|
2115
|
+
.declarationsOf(symbol)
|
|
2116
|
+
.some((d) => ts.isInterfaceDeclaration(d) && lowerer.isStdlibFile(d.getSourceFile()))) {
|
|
2108
2117
|
return null;
|
|
2109
2118
|
}
|
|
2110
2119
|
const type = lowerer.mapTypeOf(lowerer.typeOf(call));
|
|
2111
|
-
if (type?.kind !== "promise" ||
|
|
2112
|
-
type.inner.kind !== "record") {
|
|
2120
|
+
if (type?.kind !== "promise" || type.inner.kind !== "record") {
|
|
2113
2121
|
return null;
|
|
2114
2122
|
}
|
|
2115
2123
|
const receiver = lowerer.lowerExprExpecting(access.expression, DYN);
|
|
@@ -2122,21 +2130,21 @@ export function lowerStaticReadableStreamReaderCall(lowerer, call) {
|
|
|
2122
2130
|
}));
|
|
2123
2131
|
}
|
|
2124
2132
|
/** Literal `import(spec)` at a user site. Static builds compile program
|
|
2125
|
-
|
|
2126
|
-
|
|
2127
|
-
|
|
2128
|
-
|
|
2129
|
-
|
|
2130
|
-
|
|
2131
|
-
|
|
2132
|
-
|
|
2133
|
-
|
|
2134
|
-
|
|
2135
|
-
|
|
2136
|
-
|
|
2137
|
-
|
|
2138
|
-
|
|
2139
|
-
|
|
2133
|
+
* modules and supported Node builtins to a native Promise<moduleNs>;
|
|
2134
|
+
* dynamic builds retain the island-backed package/module path below.
|
|
2135
|
+
* Under --dynamic the call lowers to island.importDyn(key): the engine
|
|
2136
|
+
* loads the module (embedded npm graph, a shipped local .js/.mjs the
|
|
2137
|
+
* build embedded, or a builtin shim — collectDynamicImports resolved and
|
|
2138
|
+
* embedded the specifier at collection time) and answers an ENGINE
|
|
2139
|
+
* promise of the namespace object, bridged to a static
|
|
2140
|
+
* `Promise<jsval>` (jsBridgePromise, the fetch precedent) — so `await
|
|
2141
|
+
* import(x)` parks the fiber and resumes with the namespace HANDLE, and
|
|
2142
|
+
* a load/evaluation failure crosses as a catchable rejection, exactly
|
|
2143
|
+
* where Node puts it. Specifiers must be string literals: the module
|
|
2144
|
+
* graph is a BUILD-time artifact — a runtime-computed name has nothing
|
|
2145
|
+
* to embed, and the fence says so. Static builds accept compiled program
|
|
2146
|
+
* modules and supported builtins; other execution homes report SC2012.
|
|
2147
|
+
* Null for anything that isn't `import(...)`. */
|
|
2140
2148
|
export function lowerDynamicImportCall(lowerer, call) {
|
|
2141
2149
|
if (call.expression.kind !== ts.SyntaxKind.ImportKeyword)
|
|
2142
2150
|
return null;
|
|
@@ -2185,26 +2193,26 @@ export function lowerDynamicImportCall(lowerer, call) {
|
|
|
2185
2193
|
return { kind: "jsBridgePromise", value: raw, type: { kind: "promise", inner: JSVAL }, loc };
|
|
2186
2194
|
}
|
|
2187
2195
|
/** Dynamic `import()` of one of the program's OWN modules: the compiled
|
|
2188
|
-
|
|
2189
|
-
|
|
2190
|
-
|
|
2191
|
-
|
|
2192
|
-
|
|
2193
|
-
|
|
2194
|
-
|
|
2195
|
-
|
|
2196
|
-
|
|
2197
|
-
|
|
2198
|
-
|
|
2199
|
-
|
|
2200
|
-
|
|
2201
|
-
|
|
2202
|
-
|
|
2196
|
+
* module's exports, marshaled into the engine as a namespace object.
|
|
2197
|
+
* The site lowers to `Promise.resolve().then(<builder>)` in the engine —
|
|
2198
|
+
* the builder is a synthesized compiled function (dynNsBuilderOf) that
|
|
2199
|
+
* runs on the engine MICROTASK, calls the target module's run-once %init
|
|
2200
|
+
* (Node's evaluation point for a module first reached through import():
|
|
2201
|
+
* after the importer's synchronous code, before the .then handlers), and
|
|
2202
|
+
* returns the exports object. Node differences (numbered divergences,
|
|
2203
|
+
* pinned in island.test.ts): the namespace is a SNAPSHOT taken when the
|
|
2204
|
+
* import resolves (Node's is live), a plain engine object (no Module
|
|
2205
|
+
* toStringTag, keys still sorted like Node's, each import minting a
|
|
2206
|
+
* fresh object where Node caches one), and exports with no island
|
|
2207
|
+
* representation (classes, generic functions, un-marshalable
|
|
2208
|
+
* signatures) cross as trap functions that throw a pointed TypeError
|
|
2209
|
+
* when USED — the namespace still builds, exactly like Node still
|
|
2210
|
+
* resolves it. */
|
|
2203
2211
|
function lowerOwnDynamicModuleImport(lowerer, call, arg) {
|
|
2204
2212
|
const loc = locOf(call);
|
|
2205
2213
|
let dep = null;
|
|
2206
2214
|
const modSym = lowerer.checker.getSymbolAtLocation(arg);
|
|
2207
|
-
for (const d of
|
|
2215
|
+
for (const d of modSym ? lowerer.checker.declarationsOf(modSym) : []) {
|
|
2208
2216
|
if (ts.isSourceFile(d) && !d.isDeclarationFile) {
|
|
2209
2217
|
dep = d;
|
|
2210
2218
|
break;
|
|
@@ -2220,8 +2228,22 @@ function lowerOwnDynamicModuleImport(lowerer, call, arg) {
|
|
|
2220
2228
|
lowerer.unsupported("SC1090", call, `dynamic import of the program's own module '${arg.text}' ` +
|
|
2221
2229
|
"(this module is not part of the compiled module graph — import it statically)");
|
|
2222
2230
|
}
|
|
2223
|
-
const promiseCtor = {
|
|
2224
|
-
|
|
2231
|
+
const promiseCtor = {
|
|
2232
|
+
kind: "jsOp",
|
|
2233
|
+
op: "globalGet",
|
|
2234
|
+
name: "Promise",
|
|
2235
|
+
args: [],
|
|
2236
|
+
type: JSVAL,
|
|
2237
|
+
loc,
|
|
2238
|
+
};
|
|
2239
|
+
const resolved = {
|
|
2240
|
+
kind: "jsOp",
|
|
2241
|
+
op: "callMethod",
|
|
2242
|
+
name: "resolve",
|
|
2243
|
+
args: [promiseCtor],
|
|
2244
|
+
type: JSVAL,
|
|
2245
|
+
loc,
|
|
2246
|
+
};
|
|
2225
2247
|
const builderAsync = dep !== null && lowerer.asyncInitFiles.has(dep);
|
|
2226
2248
|
const builderFn = {
|
|
2227
2249
|
kind: "func",
|
|
@@ -2234,23 +2256,30 @@ function lowerOwnDynamicModuleImport(lowerer, call, arg) {
|
|
|
2234
2256
|
type: JSVAL,
|
|
2235
2257
|
loc,
|
|
2236
2258
|
};
|
|
2237
|
-
const chained = {
|
|
2259
|
+
const chained = {
|
|
2260
|
+
kind: "jsOp",
|
|
2261
|
+
op: "callMethod",
|
|
2262
|
+
name: "then",
|
|
2263
|
+
args: [resolved, marshaled],
|
|
2264
|
+
type: JSVAL,
|
|
2265
|
+
loc,
|
|
2266
|
+
};
|
|
2238
2267
|
return { kind: "jsBridgePromise", value: chained, type: { kind: "promise", inner: JSVAL }, loc };
|
|
2239
2268
|
}
|
|
2240
2269
|
/** The checker-resolved program source behind one literal import(). */
|
|
2241
2270
|
function programImportTarget(lowerer, arg) {
|
|
2242
2271
|
const modSym = lowerer.checker.getSymbolAtLocation(arg);
|
|
2243
|
-
for (const d of
|
|
2272
|
+
for (const d of modSym ? lowerer.checker.declarationsOf(modSym) : []) {
|
|
2244
2273
|
if (ts.isSourceFile(d) && !d.isDeclarationFile)
|
|
2245
2274
|
return d;
|
|
2246
2275
|
}
|
|
2247
2276
|
return null;
|
|
2248
2277
|
}
|
|
2249
2278
|
/** Static literal import of one compiled ESM module. The async helper's
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2279
|
+
* first operation is an await of an already-settled promise: evaluation
|
|
2280
|
+
* therefore starts on a microtask, after the importer's synchronous
|
|
2281
|
+
* tail, matching import(). Its result is the module's singleton nominal
|
|
2282
|
+
* namespace token; member reads resolve separately to live exports. */
|
|
2254
2283
|
function lowerOwnStaticModuleImport(lowerer, call, arg) {
|
|
2255
2284
|
const dep = programImportTarget(lowerer, arg);
|
|
2256
2285
|
if (dep !== null && (dep.fileName.endsWith(".cts") || isCjsJsFile(dep, lowerer.program))) {
|
|
@@ -2264,7 +2293,7 @@ function lowerOwnStaticModuleImport(lowerer, call, arg) {
|
|
|
2264
2293
|
}
|
|
2265
2294
|
const ns = {
|
|
2266
2295
|
kind: "moduleNs",
|
|
2267
|
-
moduleId: `file:${dep === null ? "" : lowerer.moduleNamespaceIdOfType(lowerer.typeOf(call))?.replace(/^file:/, "") ?? dep.fileName}`,
|
|
2296
|
+
moduleId: `file:${dep === null ? "" : (lowerer.moduleNamespaceIdOfType(lowerer.typeOf(call))?.replace(/^file:/, "") ?? dep.fileName)}`,
|
|
2268
2297
|
};
|
|
2269
2298
|
// The call's type is Promise<typeof import(...)>; prefer the mapper's
|
|
2270
2299
|
// canonical normalized id when available.
|
|
@@ -2273,8 +2302,8 @@ function lowerOwnStaticModuleImport(lowerer, call, arg) {
|
|
|
2273
2302
|
return lowerStaticNamespaceImport(lowerer, call, inner, dep);
|
|
2274
2303
|
}
|
|
2275
2304
|
/** Builds a fresh native promise for a static module namespace. Source
|
|
2276
|
-
|
|
2277
|
-
|
|
2305
|
+
* modules run/await their guarded initializer after the mandatory hop;
|
|
2306
|
+
* builtins only take the hop and resolve their immortal token. */
|
|
2278
2307
|
function lowerStaticNamespaceImport(lowerer, call, ns, dep = null) {
|
|
2279
2308
|
const loc = locOf(call);
|
|
2280
2309
|
const resultT = { kind: "promise", inner: ns };
|
|
@@ -2328,7 +2357,7 @@ function lowerStaticNamespaceImport(lowerer, call, ns, dep = null) {
|
|
|
2328
2357
|
};
|
|
2329
2358
|
}
|
|
2330
2359
|
/** Appends Node's lazy source-module link/evaluation work to a static
|
|
2331
|
-
|
|
2360
|
+
* import helper. This is the native twin of dynNsBuilderOf's prelude. */
|
|
2332
2361
|
function appendStaticModuleInit(lowerer, dep, body, loc) {
|
|
2333
2362
|
const linkCrash = esmNamedImportLinkCrash(lowerer.program, dep);
|
|
2334
2363
|
if (linkCrash !== null) {
|
|
@@ -2381,12 +2410,12 @@ function appendStaticModuleInit(lowerer, dep, body, loc) {
|
|
|
2381
2410
|
});
|
|
2382
2411
|
}
|
|
2383
2412
|
/** The namespace-BUILDER function for one program module, synthesized on
|
|
2384
|
-
|
|
2385
|
-
|
|
2386
|
-
|
|
2387
|
-
|
|
2388
|
-
|
|
2389
|
-
|
|
2413
|
+
* first demand and shared by every import() of that module (deterministic
|
|
2414
|
+
* name per file tag, so the discovery and emit passes agree). Body: the
|
|
2415
|
+
* module's guarded %init (skipped for the entry — it is running or ran),
|
|
2416
|
+
* then `return { <sorted exports> }` as an engine object. Null when the
|
|
2417
|
+
* module never joined the compiled graph (no %init exists — an empty
|
|
2418
|
+
* preflight order or a cycle the extension refused). */
|
|
2390
2419
|
function dynNsBuilderOf(lowerer, dep, loc) {
|
|
2391
2420
|
const cached = lowerer.dynNsBuilders.get(dep);
|
|
2392
2421
|
if (cached !== undefined)
|
|
@@ -2460,9 +2489,7 @@ function dynNsBuilderOf(lowerer, dep, loc) {
|
|
|
2460
2489
|
else {
|
|
2461
2490
|
body.push({
|
|
2462
2491
|
kind: "exprStmt",
|
|
2463
|
-
expr: isAsync
|
|
2464
|
-
? { kind: "awaitExpr", value: call, type: VOID, loc }
|
|
2465
|
-
: call,
|
|
2492
|
+
expr: isAsync ? { kind: "awaitExpr", value: call, type: VOID, loc } : call,
|
|
2466
2493
|
loc,
|
|
2467
2494
|
});
|
|
2468
2495
|
}
|
|
@@ -2482,9 +2509,18 @@ function dynNsBuilderOf(lowerer, dep, loc) {
|
|
|
2482
2509
|
const value = exportJsvalValue(lowerer, exportName, sym, loc);
|
|
2483
2510
|
if (value === null)
|
|
2484
2511
|
continue;
|
|
2485
|
-
args.push({
|
|
2512
|
+
args.push({
|
|
2513
|
+
kind: "jsMarshal",
|
|
2514
|
+
value: { kind: "strLit", value: exportName, type: STRING, loc },
|
|
2515
|
+
type: JSVAL,
|
|
2516
|
+
loc,
|
|
2517
|
+
}, value);
|
|
2486
2518
|
}
|
|
2487
|
-
body.push({
|
|
2519
|
+
body.push({
|
|
2520
|
+
kind: "return",
|
|
2521
|
+
value: { kind: "jsOp", op: "objLit", args, type: JSVAL, loc },
|
|
2522
|
+
loc,
|
|
2523
|
+
});
|
|
2488
2524
|
const ctx = lowerer.ctx;
|
|
2489
2525
|
lowerer.liftedFns.push({
|
|
2490
2526
|
name,
|
|
@@ -2503,13 +2539,13 @@ function dynNsBuilderOf(lowerer, dep, loc) {
|
|
|
2503
2539
|
return name;
|
|
2504
2540
|
}
|
|
2505
2541
|
/** One export's island value for the namespace object — the jsvalIn
|
|
2506
|
-
|
|
2507
|
-
|
|
2508
|
-
|
|
2509
|
-
|
|
2510
|
-
|
|
2511
|
-
|
|
2512
|
-
|
|
2542
|
+
* marshal set (primitives and JSON-safe composites by deep copy, units as
|
|
2543
|
+
* the engine's own, marshalable closures as host functions, jsval-bearing
|
|
2544
|
+
* composites through the per-field lift), with every UN-marshalable
|
|
2545
|
+
* export crossing as a trap function that throws a pointed TypeError when
|
|
2546
|
+
* called or constructed — the namespace still builds (Node resolves it;
|
|
2547
|
+
* only the USE has no compiled story). Null for exports that do not exist
|
|
2548
|
+
* at runtime (type-only). */
|
|
2513
2549
|
function exportJsvalValue(lowerer, name, sym, loc) {
|
|
2514
2550
|
const trap = (what) => islandTrapFnValue(lowerer, `the '${name}' export is ${what} of the compiled program, which cannot cross into dynamically-executed code yet`, loc);
|
|
2515
2551
|
let resolved = sym;
|
|
@@ -2523,7 +2559,8 @@ function exportJsvalValue(lowerer, name, sym, loc) {
|
|
|
2523
2559
|
}
|
|
2524
2560
|
if (ts.isImportSpecifier(d)) {
|
|
2525
2561
|
const clause = d.parent?.parent;
|
|
2526
|
-
if (d.isTypeOnly ||
|
|
2562
|
+
if (d.isTypeOnly ||
|
|
2563
|
+
(ts.isImportClause(clause) && clause.phaseModifier === ts.SyntaxKind.TypeKeyword))
|
|
2527
2564
|
return null;
|
|
2528
2565
|
}
|
|
2529
2566
|
}
|
|
@@ -2537,7 +2574,13 @@ function exportJsvalValue(lowerer, name, sym, loc) {
|
|
|
2537
2574
|
if (ref.type.kind === "jsval")
|
|
2538
2575
|
return ref;
|
|
2539
2576
|
if (isUnitType(ref.type)) {
|
|
2540
|
-
return {
|
|
2577
|
+
return {
|
|
2578
|
+
kind: "jsOp",
|
|
2579
|
+
op: ref.type.kind === "undefinedT" ? "undefLit" : "nullLit",
|
|
2580
|
+
args: [],
|
|
2581
|
+
type: JSVAL,
|
|
2582
|
+
loc,
|
|
2583
|
+
};
|
|
2541
2584
|
}
|
|
2542
2585
|
if (ref.type.kind === "func") {
|
|
2543
2586
|
return canMarshalTypedFuncIntoIsland(ref.type, (id) => lowerer.shapes.get(id), (id) => lowerer.unions.get(id))
|
|
@@ -2551,7 +2594,11 @@ function exportJsvalValue(lowerer, name, sym, loc) {
|
|
|
2551
2594
|
return trap(`a value of type '${lowerer.fmt(ref.type)}'`);
|
|
2552
2595
|
}
|
|
2553
2596
|
const sig = lowerer.fnSigsBySymbol.get(resolved);
|
|
2554
|
-
const decl0 = lowerer.checker
|
|
2597
|
+
const decl0 = lowerer.checker
|
|
2598
|
+
.declarationsOf(resolved)
|
|
2599
|
+
.find((d) => ts.isFunctionDeclaration(d) &&
|
|
2600
|
+
(ts.isSourceFile(d.parent) ||
|
|
2601
|
+
(d.parent !== undefined && lowerer.nsBlocks.get(d.parent) === "flattened")));
|
|
2555
2602
|
if (sig && decl0) {
|
|
2556
2603
|
if (!sig.params.every((p) => p.mode === "required")) {
|
|
2557
2604
|
return trap("a function with optional, default, or rest parameters");
|
|
@@ -2585,10 +2632,10 @@ function exportJsvalValue(lowerer, name, sym, loc) {
|
|
|
2585
2632
|
return trap("a binding");
|
|
2586
2633
|
}
|
|
2587
2634
|
/** An engine value whose any USE throws: `new Function("<throw>")` — a
|
|
2588
|
-
|
|
2589
|
-
|
|
2590
|
-
|
|
2591
|
-
|
|
2635
|
+
* real engine function, so the namespace member reads back fine (Node's
|
|
2636
|
+
* namespace holds the value too), property probes answer like a
|
|
2637
|
+
* function's, and calling or `new`-ing it runs the body, which throws
|
|
2638
|
+
* the pointed TypeError. */
|
|
2592
2639
|
function islandTrapFnValue(lowerer, message, loc) {
|
|
2593
2640
|
void lowerer;
|
|
2594
2641
|
const code = `throw new TypeError(${JSON.stringify(message)})`;
|
|
@@ -2597,22 +2644,27 @@ function islandTrapFnValue(lowerer, message, loc) {
|
|
|
2597
2644
|
op: "construct",
|
|
2598
2645
|
args: [
|
|
2599
2646
|
{ kind: "jsOp", op: "globalGet", name: "Function", args: [], type: JSVAL, loc },
|
|
2600
|
-
{
|
|
2647
|
+
{
|
|
2648
|
+
kind: "jsMarshal",
|
|
2649
|
+
value: { kind: "strLit", value: code, type: STRING, loc },
|
|
2650
|
+
type: JSVAL,
|
|
2651
|
+
loc,
|
|
2652
|
+
},
|
|
2601
2653
|
],
|
|
2602
2654
|
type: JSVAL,
|
|
2603
2655
|
loc,
|
|
2604
2656
|
};
|
|
2605
2657
|
}
|
|
2606
2658
|
/** An object literal built NATIVELY in the island — one engine object,
|
|
2607
|
-
|
|
2608
|
-
|
|
2609
|
-
|
|
2610
|
-
|
|
2611
|
-
|
|
2612
|
-
|
|
2613
|
-
|
|
2614
|
-
|
|
2615
|
-
|
|
2659
|
+
* each field marshaled individually (nested object/array literals
|
|
2660
|
+
* recurse, island handles pass straight through, everything else takes
|
|
2661
|
+
* the JSON-safe copy-marshal). The same jsOp the 'any'-contextual
|
|
2662
|
+
* literal path emits, callable from lowerings that KNOW the literal is
|
|
2663
|
+
* island-bound (fetch's init) even when the contextual type is a union
|
|
2664
|
+
* the generic path declines. Spelled and pure const-folded computed keys
|
|
2665
|
+
* are admitted; engine property names have no identifier restriction. Plain
|
|
2666
|
+
* spreads copy through the engine's CopyDataProperties operation in
|
|
2667
|
+
* source order, including nested RequestInit/header dictionaries. */
|
|
2616
2668
|
function lowerIslandObjectLiteral(lowerer, expr) {
|
|
2617
2669
|
const loc = locOf(expr);
|
|
2618
2670
|
let args = [];
|
|
@@ -2621,9 +2673,10 @@ function lowerIslandObjectLiteral(lowerer, expr) {
|
|
|
2621
2673
|
if (args.length === 0)
|
|
2622
2674
|
return;
|
|
2623
2675
|
const chunk = { kind: "jsOp", op: "objLit", args, type: JSVAL, loc };
|
|
2624
|
-
acc =
|
|
2625
|
-
|
|
2626
|
-
|
|
2676
|
+
acc =
|
|
2677
|
+
acc === null
|
|
2678
|
+
? chunk
|
|
2679
|
+
: { kind: "jsOp", op: "objSpread", args: [acc, chunk], type: JSVAL, loc };
|
|
2627
2680
|
args = [];
|
|
2628
2681
|
};
|
|
2629
2682
|
for (const prop of expr.properties) {
|
|
@@ -2649,7 +2702,8 @@ function lowerIslandObjectLiteral(lowerer, expr) {
|
|
|
2649
2702
|
args.push({
|
|
2650
2703
|
kind: "jsMarshal",
|
|
2651
2704
|
value: { kind: "strLit", value: propertyName, type: STRING, loc: nameLoc },
|
|
2652
|
-
type: JSVAL,
|
|
2705
|
+
type: JSVAL,
|
|
2706
|
+
loc: nameLoc,
|
|
2653
2707
|
});
|
|
2654
2708
|
const valueNode = ts.isPropertyAssignment(prop)
|
|
2655
2709
|
? prop.initializer
|
|
@@ -2666,7 +2720,8 @@ function lowerIslandObjectLiteral(lowerer, expr) {
|
|
|
2666
2720
|
}
|
|
2667
2721
|
else {
|
|
2668
2722
|
const value = ts.isMethodDeclaration(valueNode)
|
|
2669
|
-
? (lowerer.rejectThisInObjectMethod(valueNode.body ?? valueNode),
|
|
2723
|
+
? (lowerer.rejectThisInObjectMethod(valueNode.body ?? valueNode),
|
|
2724
|
+
lowerer.lowerLambda(valueNode))
|
|
2670
2725
|
: lowerer.lowerExpr(valueNode);
|
|
2671
2726
|
args.push(lowerer.jsvalIn(value, valueNode));
|
|
2672
2727
|
}
|
|
@@ -2675,15 +2730,15 @@ function lowerIslandObjectLiteral(lowerer, expr) {
|
|
|
2675
2730
|
return acc ?? { kind: "jsOp", op: "objLit", args: [], type: JSVAL, loc };
|
|
2676
2731
|
}
|
|
2677
2732
|
/** Method calls on the island-backed ambient surface: `Math.<fn>(...)`
|
|
2678
|
-
|
|
2679
|
-
|
|
2680
|
-
|
|
2681
|
-
|
|
2682
|
-
|
|
2683
|
-
|
|
2684
|
-
|
|
2685
|
-
|
|
2686
|
-
|
|
2733
|
+
* (the engine's own Math object executes) and the number/string methods
|
|
2734
|
+
* the static runtime doesn't implement (`x.toPrecision(2)`,
|
|
2735
|
+
* `s.replace("a", "b")`, ...). Each site is self-contained — the receiver
|
|
2736
|
+
* and arguments marshal in, the engine executes with JS-exact semantics,
|
|
2737
|
+
* and the result exits (validated) to the DECLARED static return type,
|
|
2738
|
+
* so no jsval leaks into the program's types. tsc has already checked
|
|
2739
|
+
* receiver, arity, and argument types against ambient/scriptc.d.ts; an
|
|
2740
|
+
* ambient member missing from ISLAND_SURFACE returns null into the
|
|
2741
|
+
* existing generic rejections. */
|
|
2687
2742
|
export function lowerIslandMethodCall(lowerer, call, access) {
|
|
2688
2743
|
if (lowerer.chainBlocked(access, call))
|
|
2689
2744
|
return null;
|
|
@@ -2692,7 +2747,12 @@ export function lowerIslandMethodCall(lowerer, call, access) {
|
|
|
2692
2747
|
const finish = (receiver, entry) => {
|
|
2693
2748
|
const args = call.arguments.map((a) => lowerer.jsvalIn(lowerer.lowerExpr(a), a));
|
|
2694
2749
|
const result = {
|
|
2695
|
-
kind: "jsOp",
|
|
2750
|
+
kind: "jsOp",
|
|
2751
|
+
op: "callMethod",
|
|
2752
|
+
name,
|
|
2753
|
+
args: [receiver, ...args],
|
|
2754
|
+
type: JSVAL,
|
|
2755
|
+
loc,
|
|
2696
2756
|
};
|
|
2697
2757
|
return { kind: "jsExit", value: result, type: entry.ret, loc };
|
|
2698
2758
|
};
|
|
@@ -2709,11 +2769,20 @@ export function lowerIslandMethodCall(lowerer, call, access) {
|
|
|
2709
2769
|
lowerer.requireDynamicApi(`'AbortSignal.${sigMember}'`, call);
|
|
2710
2770
|
const args = call.arguments.map((a) => lowerer.jsvalIn(lowerer.lowerExpr(a), a));
|
|
2711
2771
|
const signalGlobal = {
|
|
2712
|
-
kind: "jsOp",
|
|
2772
|
+
kind: "jsOp",
|
|
2773
|
+
op: "globalGet",
|
|
2774
|
+
name: "AbortSignal",
|
|
2775
|
+
args: [],
|
|
2776
|
+
type: JSVAL,
|
|
2777
|
+
loc,
|
|
2713
2778
|
};
|
|
2714
2779
|
return {
|
|
2715
|
-
kind: "jsOp",
|
|
2716
|
-
|
|
2780
|
+
kind: "jsOp",
|
|
2781
|
+
op: "callMethod",
|
|
2782
|
+
name: sigMember,
|
|
2783
|
+
args: [signalGlobal, ...args],
|
|
2784
|
+
type: JSVAL,
|
|
2785
|
+
loc,
|
|
2717
2786
|
};
|
|
2718
2787
|
}
|
|
2719
2788
|
}
|
|
@@ -2748,12 +2817,17 @@ export function lowerIslandMethodCall(lowerer, call, access) {
|
|
|
2748
2817
|
const elems = call.arguments.map((a) => ts.isSpreadElement(a)
|
|
2749
2818
|
? lowerer.lowerExprExpecting(a.expression, arrayOf(F64))
|
|
2750
2819
|
: lowerer.lowerExprExpecting(a, F64));
|
|
2751
|
-
const spreads = call.arguments.flatMap((a, i) => ts.isSpreadElement(a) ? [i] : []);
|
|
2752
|
-
const packed = {
|
|
2820
|
+
const spreads = call.arguments.flatMap((a, i) => (ts.isSpreadElement(a) ? [i] : []));
|
|
2821
|
+
const packed = {
|
|
2822
|
+
kind: "arrayLit",
|
|
2823
|
+
elems,
|
|
2824
|
+
...(spreads.length > 0 ? { spreads } : {}),
|
|
2825
|
+
type: arrayOf(F64),
|
|
2826
|
+
loc,
|
|
2827
|
+
};
|
|
2753
2828
|
return { kind: "libCall", fn: staticMath.fn, args: [packed], type: F64, loc };
|
|
2754
2829
|
}
|
|
2755
|
-
if (staticMath &&
|
|
2756
|
-
call.arguments.every((a) => !ts.isSpreadElement(a))) {
|
|
2830
|
+
if (staticMath && call.arguments.every((a) => !ts.isSpreadElement(a))) {
|
|
2757
2831
|
// Math.max/Math.min at ANY plain arity — Node's are variadic. The
|
|
2758
2832
|
// spec's reduction is a left fold of the same NaN-poisoning
|
|
2759
2833
|
// ±0-ordered scalar compare the two-arg form lowers to, so n
|
|
@@ -2843,20 +2917,38 @@ export function lowerMathProperty(lowerer, expr) {
|
|
|
2843
2917
|
if (native && (member === "min" || member === "max" || member === "hypot"))
|
|
2844
2918
|
return lowerer.lowerNativeCallableValue({
|
|
2845
2919
|
fn: member === "min" ? "math.minArr" : member === "max" ? "math.maxArr" : "math.hypotArr",
|
|
2846
|
-
params: [arrayOf(F64)],
|
|
2920
|
+
params: [arrayOf(F64)],
|
|
2921
|
+
result: F64,
|
|
2922
|
+
valueParams: [{ mode: "rest", type: F64 }],
|
|
2847
2923
|
}, `Math.${member}`, loc);
|
|
2848
2924
|
if (native && member !== "min" && member !== "max" && member !== "hypot") {
|
|
2849
2925
|
const params = Array.from({ length: native.arity }, () => F64);
|
|
2850
2926
|
return lowerer.lowerNativeCallableValue({
|
|
2851
|
-
fn: native.fn,
|
|
2927
|
+
fn: native.fn,
|
|
2928
|
+
params,
|
|
2929
|
+
result: F64,
|
|
2852
2930
|
valueParams: params.map((type) => ({ mode: "required", type })),
|
|
2853
2931
|
}, `Math.${member}`, loc);
|
|
2854
2932
|
}
|
|
2855
2933
|
const propType = own(ISLAND_SURFACE.math.props, member);
|
|
2856
2934
|
if (propType !== undefined) {
|
|
2857
2935
|
lowerer.requireDynamicApi(`'Math.${member}'`, expr);
|
|
2858
|
-
const math = {
|
|
2859
|
-
|
|
2936
|
+
const math = {
|
|
2937
|
+
kind: "jsOp",
|
|
2938
|
+
op: "globalGet",
|
|
2939
|
+
name: "Math",
|
|
2940
|
+
args: [],
|
|
2941
|
+
type: JSVAL,
|
|
2942
|
+
loc,
|
|
2943
|
+
};
|
|
2944
|
+
const read = {
|
|
2945
|
+
kind: "jsOp",
|
|
2946
|
+
op: "getProp",
|
|
2947
|
+
name: member,
|
|
2948
|
+
args: [math],
|
|
2949
|
+
type: JSVAL,
|
|
2950
|
+
loc,
|
|
2951
|
+
};
|
|
2860
2952
|
return { kind: "jsExit", value: read, type: propType, loc };
|
|
2861
2953
|
}
|
|
2862
2954
|
if (own(ISLAND_SURFACE.math.fns, member) !== undefined ||
|
|
@@ -2866,9 +2958,9 @@ export function lowerMathProperty(lowerer, expr) {
|
|
|
2866
2958
|
return null; // declared-but-untabled members fall through generically
|
|
2867
2959
|
}
|
|
2868
2960
|
/** The npm package a type is declared by ("commander", "@scope/pkg"),
|
|
2869
|
-
|
|
2870
|
-
|
|
2871
|
-
|
|
2961
|
+
* or null when the type isn't package-declared. Union parts are searched
|
|
2962
|
+
* too: `string | Command` fails mapping as a whole, but the blame (and
|
|
2963
|
+
* the --dynamic attribution) belongs to the package-declared part. */
|
|
2872
2964
|
export function npmPackageOf(lowerer, type) {
|
|
2873
2965
|
const pkg = lowerer.npmPackageOfSymbol(type.getAliasSymbol() ?? type.getSymbol());
|
|
2874
2966
|
if (pkg)
|
|
@@ -2883,11 +2975,11 @@ export function npmPackageOf(lowerer, type) {
|
|
|
2883
2975
|
return null;
|
|
2884
2976
|
}
|
|
2885
2977
|
/** The npm chokepoint for member reads and method calls in a STATIC
|
|
2886
|
-
|
|
2887
|
-
|
|
2888
|
-
|
|
2889
|
-
|
|
2890
|
-
|
|
2978
|
+
* build: a receiver whose type (or member whose symbol) a package's
|
|
2979
|
+
* .d.ts declares means the operation runs in the embedded engine —
|
|
2980
|
+
* attribute the site to the package instead of the generic property/
|
|
2981
|
+
* method rejection. No-op under --dynamic (the island paths claimed
|
|
2982
|
+
* these) and for non-package receivers, so callers' fallbacks apply. */
|
|
2891
2983
|
export function npmMemberFence(lowerer, access) {
|
|
2892
2984
|
if (lowerer.dynamic)
|
|
2893
2985
|
return;
|
|
@@ -2899,8 +2991,8 @@ export function npmMemberFence(lowerer, access) {
|
|
|
2899
2991
|
throw new PoisonError();
|
|
2900
2992
|
}
|
|
2901
2993
|
/** The npm package a SYMBOL is declared by, or null. The symbol half of
|
|
2902
|
-
|
|
2903
|
-
|
|
2994
|
+
* npmPackageOf, also asked directly for import-alias bindings (whose
|
|
2995
|
+
* aliased symbol is the package's export). */
|
|
2904
2996
|
export function npmPackageOfSymbol(lowerer, sym) {
|
|
2905
2997
|
const decls = sym ? lowerer.checker.declarationsOf(sym) : undefined;
|
|
2906
2998
|
if (!decls || decls.length === 0)
|