@scriptc/compiler 0.4.2 → 0.4.4
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 +470 -66
- package/dist/backend/cycle-analysis.d.ts +4 -1
- package/dist/backend/cycle-analysis.js +6 -4
- package/dist/backend/cycle-analysis.js.map +1 -1
- package/dist/backend/cycle-analysis.test.js +55 -0
- package/dist/backend/cycle-analysis.test.js.map +1 -1
- package/dist/backend/cycle-mutability.d.ts +7 -0
- package/dist/backend/cycle-mutability.js +19 -1
- package/dist/backend/cycle-mutability.js.map +1 -1
- package/dist/backend/executable-features.js +2 -0
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/immutability.d.ts +6 -3
- package/dist/backend/immutability.js +33 -29
- package/dist/backend/immutability.js.map +1 -1
- package/dist/backend/library-pack.js +1 -0
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/llvm/alloc.d.ts +16 -1
- package/dist/backend/llvm/alloc.js +54 -4
- package/dist/backend/llvm/alloc.js.map +1 -1
- package/dist/backend/llvm/appended-array-literals.d.ts +2 -1
- package/dist/backend/llvm/appended-array-literals.js +44 -36
- package/dist/backend/llvm/appended-array-literals.js.map +1 -1
- package/dist/backend/llvm/appended-array-literals.test.js +4 -3
- package/dist/backend/llvm/appended-array-literals.test.js.map +1 -1
- package/dist/backend/llvm/array-search.d.ts +4 -3
- package/dist/backend/llvm/array-search.js +21 -9
- package/dist/backend/llvm/array-search.js.map +1 -1
- package/dist/backend/llvm/blocks.d.ts +1 -1
- package/dist/backend/llvm/blocks.js +2 -2
- package/dist/backend/llvm/blocks.js.map +1 -1
- package/dist/backend/llvm/byte-windows.js +2 -0
- package/dist/backend/llvm/byte-windows.js.map +1 -1
- package/dist/backend/llvm/bytes-alias.d.ts +6 -1
- package/dist/backend/llvm/bytes-alias.js +8 -2
- package/dist/backend/llvm/bytes-alias.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.d.ts +47 -5
- package/dist/backend/llvm/bytes-loop-versions.js +479 -32
- package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.test.js +263 -2
- package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
- package/dist/backend/llvm/checked-value-lifetimes.js +2 -0
- package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
- package/dist/backend/llvm/classes.d.ts +7 -5
- package/dist/backend/llvm/classes.js +44 -20
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +167 -7
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +9 -3
- package/dist/backend/llvm/common.js +9 -3
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.d.ts +2 -1
- package/dist/backend/llvm/constant-callbacks.js +83 -52
- package/dist/backend/llvm/constant-callbacks.js.map +1 -1
- package/dist/backend/llvm/counted-loops.d.ts +7 -0
- package/dist/backend/llvm/counted-loops.js +18 -0
- package/dist/backend/llvm/counted-loops.js.map +1 -1
- package/dist/backend/llvm/debug-info.js +2 -5
- package/dist/backend/llvm/debug-info.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.d.ts +39 -8
- package/dist/backend/llvm/dense-array-access.js +222 -52
- package/dist/backend/llvm/dense-array-access.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.test.js +36 -0
- package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
- package/dist/backend/llvm/dense-array-loops.d.ts +17 -1
- package/dist/backend/llvm/dense-array-loops.js +194 -5
- package/dist/backend/llvm/dense-array-loops.js.map +1 -1
- package/dist/backend/llvm/dense-array-loops.test.js +90 -1
- package/dist/backend/llvm/dense-array-loops.test.js.map +1 -1
- package/dist/backend/llvm/dyn-handle-tags.test.js +6 -1
- package/dist/backend/llvm/dyn-handle-tags.test.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +30 -0
- package/dist/backend/llvm/dyn.js +373 -70
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.js +13 -28
- package/dist/backend/llvm/emit-function.js.map +1 -1
- package/dist/backend/llvm/emit-journal.d.ts +93 -0
- package/dist/backend/llvm/emit-journal.js +170 -0
- package/dist/backend/llvm/emit-journal.js.map +1 -0
- package/dist/backend/llvm/emit-module.js +211 -33
- package/dist/backend/llvm/emit-module.js.map +1 -1
- package/dist/backend/llvm/emit-statements.d.ts +0 -4
- package/dist/backend/llvm/emit-statements.js +268 -84
- package/dist/backend/llvm/emit-statements.js.map +1 -1
- package/dist/backend/llvm/emitter-state.d.ts +7 -0
- package/dist/backend/llvm/emitter-state.js +14 -0
- package/dist/backend/llvm/emitter-state.js.map +1 -0
- package/dist/backend/llvm/emitter.d.ts +186 -37
- package/dist/backend/llvm/emitter.js +733 -90
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +65 -7
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +11 -13
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.js +48 -20
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-callbacks.js +47 -0
- package/dist/backend/llvm/expr-callbacks.js.map +1 -1
- package/dist/backend/llvm/expr-calls.js +28 -14
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.d.ts +14 -2
- package/dist/backend/llvm/expr-containers.js +143 -37
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-context.d.ts +14 -0
- package/dist/backend/llvm/expr-dynamic.js +18 -11
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +119 -38
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.test.js +11 -6
- package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
- package/dist/backend/llvm/expr-records.d.ts +12 -0
- package/dist/backend/llvm/expr-records.js +106 -0
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.d.ts +2 -2
- package/dist/backend/llvm/expr-stream-bridges.js +210 -69
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.test.js +1 -1
- package/dist/backend/llvm/expr-stream-bridges.test.js.map +1 -1
- package/dist/backend/llvm/expr-stream-callbacks.d.ts +2 -2
- package/dist/backend/llvm/expr-stream-callbacks.js +74 -20
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/int32-kind-loops.d.ts +39 -0
- package/dist/backend/llvm/int32-kind-loops.js +106 -0
- package/dist/backend/llvm/int32-kind-loops.js.map +1 -0
- package/dist/backend/llvm/integer-or-nan-indexes.test.d.ts +1 -0
- package/dist/backend/llvm/integer-or-nan-indexes.test.js +118 -0
- package/dist/backend/llvm/integer-or-nan-indexes.test.js.map +1 -0
- package/dist/backend/llvm/integer-values.d.ts +25 -1
- package/dist/backend/llvm/integer-values.js +95 -0
- package/dist/backend/llvm/integer-values.js.map +1 -1
- package/dist/backend/llvm/js-ic.d.ts +1 -1
- package/dist/backend/llvm/js-ic.js +1 -1
- package/dist/backend/llvm/js-ic.js.map +1 -1
- package/dist/backend/llvm/key-orders.d.ts +7 -0
- package/dist/backend/llvm/key-orders.js +33 -0
- package/dist/backend/llvm/key-orders.js.map +1 -0
- package/dist/backend/llvm/lib-connect.js +4 -0
- package/dist/backend/llvm/lib-connect.js.map +1 -1
- package/dist/backend/llvm/lib-datagram.js +11 -0
- package/dist/backend/llvm/lib-datagram.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +213 -5
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +4 -4
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-http2.js +4 -0
- package/dist/backend/llvm/lib-http2.js.map +1 -1
- package/dist/backend/llvm/lib-lookup.js +16 -6
- package/dist/backend/llvm/lib-lookup.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +37 -1
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +94 -2
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +35 -5
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +115 -19
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.test.js +14 -0
- package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
- package/dist/backend/llvm/loop-state.d.ts +33 -0
- package/dist/backend/llvm/loop-state.js +42 -0
- package/dist/backend/llvm/loop-state.js.map +1 -0
- package/dist/backend/llvm/map-number-lookup.d.ts +26 -8
- package/dist/backend/llvm/map-number-lookup.js +91 -31
- package/dist/backend/llvm/map-number-lookup.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.test.js +55 -0
- package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.js +4 -2
- package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.d.ts +2 -1
- package/dist/backend/llvm/nullable-unions.js +15 -3
- package/dist/backend/llvm/nullable-unions.js.map +1 -1
- package/dist/backend/llvm/publish.d.ts +10 -0
- package/dist/backend/llvm/publish.js +15 -3
- package/dist/backend/llvm/publish.js.map +1 -1
- package/dist/backend/llvm/receivers.js +6 -1
- package/dist/backend/llvm/receivers.js.map +1 -1
- package/dist/backend/llvm/record-results.d.ts +1 -9
- package/dist/backend/llvm/record-results.js +2 -11
- package/dist/backend/llvm/record-results.js.map +1 -1
- package/dist/backend/llvm/reference-effects.js +3 -0
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- package/dist/backend/llvm/reference-writes.d.ts +7 -2
- package/dist/backend/llvm/reference-writes.js +89 -72
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/running-extrema.d.ts +11 -0
- package/dist/backend/llvm/running-extrema.js +115 -0
- package/dist/backend/llvm/running-extrema.js.map +1 -0
- package/dist/backend/llvm/running-extrema.test.d.ts +1 -0
- package/dist/backend/llvm/running-extrema.test.js +89 -0
- package/dist/backend/llvm/running-extrema.test.js.map +1 -0
- package/dist/backend/llvm/shapes.d.ts +71 -15
- package/dist/backend/llvm/shapes.js +224 -40
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +53 -7
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/speculative-integers.d.ts +6 -0
- package/dist/backend/llvm/speculative-integers.js +2 -2
- package/dist/backend/llvm/speculative-integers.js.map +1 -1
- package/dist/backend/llvm/stack-captures.js +1 -5
- package/dist/backend/llvm/stack-captures.js.map +1 -1
- package/dist/backend/llvm/stack-objects.d.ts +3 -2
- package/dist/backend/llvm/stack-objects.js +5 -2
- package/dist/backend/llvm/stack-objects.js.map +1 -1
- package/dist/backend/llvm/string-reads.d.ts +12 -0
- package/dist/backend/llvm/string-reads.js +44 -0
- package/dist/backend/llvm/string-reads.js.map +1 -1
- package/dist/backend/llvm/union-repr.d.ts +4 -3
- package/dist/backend/llvm/union-repr.js +6 -5
- package/dist/backend/llvm/union-repr.js.map +1 -1
- package/dist/backend/llvm/walk-borrows.d.ts +3 -0
- package/dist/backend/llvm/walk-borrows.js +46 -41
- package/dist/backend/llvm/walk-borrows.js.map +1 -1
- package/dist/backend/llvm/walkers.d.ts +3 -0
- package/dist/backend/llvm/walkers.js +101 -65
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/llvm/wrapping-sums.d.ts +16 -1
- package/dist/backend/llvm/wrapping-sums.js +126 -0
- package/dist/backend/llvm/wrapping-sums.js.map +1 -1
- package/dist/backend/may-throw.d.ts +8 -10
- package/dist/backend/may-throw.js +14 -10
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +5 -0
- package/dist/backend/native/executable.js +7 -0
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/runtime-inputs.d.ts +1 -1
- package/dist/backend/native/runtime-inputs.js +1 -0
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native-codegen-core.d.ts +5 -3
- package/dist/backend/native-codegen-core.js +13 -6
- package/dist/backend/native-codegen-core.js.map +1 -1
- package/dist/backend/native-codegen.test.js +6 -4
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +4 -0
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/publication.d.ts +12 -1
- package/dist/backend/publication.js +37 -14
- package/dist/backend/publication.js.map +1 -1
- package/dist/backend/publication.test.js +30 -0
- package/dist/backend/publication.test.js.map +1 -1
- package/dist/backend/result-slots.d.ts +16 -0
- package/dist/backend/result-slots.js +23 -0
- package/dist/backend/result-slots.js.map +1 -0
- package/dist/backend/runtime-abi.d.ts +2 -2
- package/dist/backend/runtime-abi.js +2 -2
- package/dist/backend/runtime-pack-core.d.ts +1 -0
- package/dist/backend/runtime-pack-core.js +1 -0
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +2 -1
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +2 -1
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/stack-observations.d.ts +2 -1
- package/dist/backend/stack-observations.js +67 -42
- package/dist/backend/stack-observations.js.map +1 -1
- package/dist/backend/target-cpu.d.ts +26 -0
- package/dist/backend/target-cpu.js +98 -0
- package/dist/backend/target-cpu.js.map +1 -0
- package/dist/backend/target-cpu.test.d.ts +1 -0
- package/dist/backend/target-cpu.test.js +38 -0
- package/dist/backend/target-cpu.test.js.map +1 -0
- package/dist/backend/target-diagnostics.js +5 -3
- package/dist/backend/target-diagnostics.js.map +1 -1
- package/dist/backend/warm-cache.js +1 -0
- package/dist/backend/warm-cache.js.map +1 -1
- package/dist/cli/command.js +20 -1
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/usage.d.ts +4 -1
- package/dist/cli/usage.js +10 -3
- package/dist/cli/usage.js.map +1 -1
- package/dist/compat/fetch-profile.js +1 -1
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/compile-types.d.ts +7 -0
- package/dist/contracts/check.js +4 -3
- package/dist/contracts/check.js.map +1 -1
- package/dist/contracts/int32-elements.js +10 -2
- package/dist/contracts/int32-elements.js.map +1 -1
- package/dist/coverage/report.js +12 -3
- package/dist/coverage/report.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +4 -0
- package/dist/diagnostics/diagnostic.js +1 -1
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/envelope.d.ts +3 -0
- package/dist/diagnostics/envelope.js +1 -0
- package/dist/diagnostics/envelope.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +5 -0
- package/dist/executable/executable-cache.js +5 -0
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +3 -0
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/frontend/decl-projection.d.ts +41 -0
- package/dist/frontend/decl-projection.js +949 -0
- package/dist/frontend/decl-projection.js.map +1 -0
- package/dist/frontend/decl-projection.test.d.ts +1 -0
- package/dist/frontend/decl-projection.test.js +30 -0
- package/dist/frontend/decl-projection.test.js.map +1 -0
- package/dist/frontend/dts-paths.d.ts +15 -0
- package/dist/frontend/dts-paths.js +25 -0
- package/dist/frontend/dts-paths.js.map +1 -1
- package/dist/frontend/input-tracker.d.ts +6 -0
- package/dist/frontend/input-tracker.js +51 -28
- package/dist/frontend/input-tracker.js.map +1 -1
- package/dist/frontend/input-tracker.test.js +19 -0
- package/dist/frontend/input-tracker.test.js.map +1 -1
- package/dist/frontend/lowering/array-values.js +100 -2
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/builtins/async-context.d.ts +8 -2
- package/dist/frontend/lowering/builtins/async-context.js +62 -3
- package/dist/frontend/lowering/builtins/async-context.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-methods.js +46 -15
- package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process.js +13 -2
- package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
- package/dist/frontend/lowering/builtins/crypto.js +87 -10
- package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
- package/dist/frontend/lowering/builtins/dates.js +4 -1
- package/dist/frontend/lowering/builtins/dates.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.js +3 -3
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-glob.js +6 -3
- package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-paths.d.ts +43 -5
- package/dist/frontend/lowering/builtins/fs-paths.js +245 -93
- package/dist/frontend/lowering/builtins/fs-paths.js.map +1 -1
- package/dist/frontend/lowering/builtins/global-namespace-keys.d.ts +3 -0
- package/dist/frontend/lowering/builtins/global-namespace-keys.js +122 -0
- package/dist/frontend/lowering/builtins/global-namespace-keys.js.map +1 -0
- package/dist/frontend/lowering/builtins/module-calls.js +6 -3
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/numbers.js +9 -1
- package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.d.ts +7 -1
- package/dist/frontend/lowering/builtins/promises.js +236 -139
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +5 -1
- package/dist/frontend/lowering/builtins/readline.js +35 -3
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/url.js +24 -1
- package/dist/frontend/lowering/builtins/url.js.map +1 -1
- package/dist/frontend/lowering/builtins/webassembly.js +6 -3
- package/dist/frontend/lowering/builtins/webassembly.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.js +0 -1
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/cjs-exports-object.js +1 -1
- package/dist/frontend/lowering/cjs-exports-object.js.map +1 -1
- package/dist/frontend/lowering/cjs-inline-require.d.ts +32 -0
- package/dist/frontend/lowering/cjs-inline-require.js +307 -4
- package/dist/frontend/lowering/cjs-inline-require.js.map +1 -1
- package/dist/frontend/lowering/class-callbacks.d.ts +5 -2
- package/dist/frontend/lowering/class-callbacks.js +82 -12
- package/dist/frontend/lowering/class-callbacks.js.map +1 -1
- package/dist/frontend/lowering/class-construction.d.ts +4 -1
- package/dist/frontend/lowering/class-construction.js +17 -3
- package/dist/frontend/lowering/class-construction.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +49 -2
- package/dist/frontend/lowering/class-dynamic-dispatch.js +880 -108
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js +47 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
- package/dist/frontend/lowering/class-iterables.d.ts +2 -1
- package/dist/frontend/lowering/class-iterables.js +9 -1
- package/dist/frontend/lowering/class-iterables.js.map +1 -1
- package/dist/frontend/lowering/class-method-mutations.js +83 -24
- package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
- package/dist/frontend/lowering/class-protocols.d.ts +25 -0
- package/dist/frontend/lowering/class-protocols.js +183 -1
- package/dist/frontend/lowering/class-protocols.js.map +1 -1
- package/dist/frontend/lowering/class-prototypes.js +31 -2
- package/dist/frontend/lowering/class-prototypes.js.map +1 -1
- package/dist/frontend/lowering/class-runtime-statics.d.ts +9 -3
- package/dist/frontend/lowering/class-runtime-statics.js +29 -4
- package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural-plans.js +48 -1
- package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +91 -1
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/completion-callbacks.d.ts +4 -0
- package/dist/frontend/lowering/completion-callbacks.js +146 -0
- package/dist/frontend/lowering/completion-callbacks.js.map +1 -0
- package/dist/frontend/lowering/containers/array-callback-call.js +2 -2
- package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.d.ts +5 -4
- package/dist/frontend/lowering/containers/array-callbacks.js +345 -24
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-concat.js +10 -0
- package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.js +5 -0
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +26 -3
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/array-pipelines.js +19 -8
- package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.d.ts +25 -17
- package/dist/frontend/lowering/containers/bytes.js +455 -46
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.js +3 -0
- package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +7 -2
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/filter-predicates.d.ts +6 -0
- package/dist/frontend/lowering/containers/filter-predicates.js +205 -0
- package/dist/frontend/lowering/containers/filter-predicates.js.map +1 -0
- package/dist/frontend/lowering/containers/indexed-objects.d.ts +0 -12
- package/dist/frontend/lowering/containers/indexed-objects.js +46 -7
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/containers/string-and-regexp.js +55 -9
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/containers/string-replacement.js +43 -19
- package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
- package/dist/frontend/lowering/date-values.d.ts +11 -0
- package/dist/frontend/lowering/date-values.js +207 -0
- package/dist/frontend/lowering/date-values.js.map +1 -0
- package/dist/frontend/lowering/dispatch-sites.js +15 -1
- package/dist/frontend/lowering/dispatch-sites.js.map +1 -1
- package/dist/frontend/lowering/divergences.js +9 -1
- package/dist/frontend/lowering/divergences.js.map +1 -1
- package/dist/frontend/lowering/error-methods.js +47 -2
- package/dist/frontend/lowering/error-methods.js.map +1 -1
- package/dist/frontend/lowering/expressions/array-literals.js +53 -0
- package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/binary.js +100 -28
- package/dist/frontend/lowering/expressions/binary.js.map +1 -1
- package/dist/frontend/lowering/expressions/element-access.js +169 -13
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/identifiers.js +64 -5
- package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
- package/dist/frontend/lowering/expressions/narrowing.js +95 -1
- package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/nullish-assignment.js +3 -1
- package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.d.ts +10 -0
- package/dist/frontend/lowering/expressions/object-literals.js +138 -51
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.js +12 -0
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.js +168 -10
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/relational.js +212 -33
- package/dist/frontend/lowering/expressions/relational.js.map +1 -1
- package/dist/frontend/lowering/expressions/typeof.js +6 -0
- package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
- package/dist/frontend/lowering/expressions/union-fields.js +4 -0
- package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
- package/dist/frontend/lowering/expressions/updates.js +39 -3
- package/dist/frontend/lowering/expressions/updates.js.map +1 -1
- package/dist/frontend/lowering/frozen-records.d.ts +28 -0
- package/dist/frontend/lowering/frozen-records.js +322 -0
- package/dist/frontend/lowering/frozen-records.js.map +1 -0
- package/dist/frontend/lowering/function-returns.js +64 -0
- package/dist/frontend/lowering/function-returns.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.js +7 -2
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/indexed-unions.d.ts +54 -0
- package/dist/frontend/lowering/indexed-unions.js +401 -0
- package/dist/frontend/lowering/indexed-unions.js.map +1 -0
- package/dist/frontend/lowering/iterable-values.d.ts +49 -0
- package/dist/frontend/lowering/iterable-values.js +297 -0
- package/dist/frontend/lowering/iterable-values.js.map +1 -0
- package/dist/frontend/lowering/iterator-adapters.js +186 -1
- package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
- package/dist/frontend/lowering/js-class-fields.d.ts +8 -0
- package/dist/frontend/lowering/js-class-fields.js +45 -10
- package/dist/frontend/lowering/js-class-fields.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.d.ts +18 -3
- package/dist/frontend/lowering/key-order-witness.js +974 -48
- package/dist/frontend/lowering/key-order-witness.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.test.js +530 -10
- package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +15 -3
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-async-iteration.js +4 -1
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +7 -0
- package/dist/frontend/lowering/lower-calls.js +462 -44
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +11 -2
- package/dist/frontend/lowering/lower-classes.js +324 -69
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-dgram.js +3 -1
- package/dist/frontend/lowering/lower-dgram.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.js +215 -3
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.d.ts +11 -0
- package/dist/frontend/lowering/lower-functions.js +83 -0
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.js +42 -32
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-global-value.js +6 -3
- package/dist/frontend/lowering/lower-global-value.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.d.ts +1 -1
- package/dist/frontend/lowering/lower-inspect.js +53 -17
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +53 -5
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.js +5 -1
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-server.js +2 -2
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.d.ts +5 -0
- package/dist/frontend/lowering/lower-stdlib.js +30 -0
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +23 -0
- package/dist/frontend/lowering/lower-stmts.js +553 -81
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.d.ts +20 -2
- package/dist/frontend/lowering/lower-stream.js +1483 -156
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +107 -8
- package/dist/frontend/lowering/lowerer.js +381 -36
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/module-namespace-elements.d.ts +11 -1
- package/dist/frontend/lowering/module-namespace-elements.js +82 -5
- package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
- package/dist/frontend/lowering/new-target.d.ts +12 -0
- package/dist/frontend/lowering/new-target.js +280 -0
- package/dist/frontend/lowering/new-target.js.map +1 -0
- package/dist/frontend/lowering/object-factory-new.d.ts +5 -0
- package/dist/frontend/lowering/object-factory-new.js +20 -6
- package/dist/frontend/lowering/object-factory-new.js.map +1 -1
- package/dist/frontend/lowering/overload-choice.d.ts +33 -0
- package/dist/frontend/lowering/overload-choice.js +190 -0
- package/dist/frontend/lowering/overload-choice.js.map +1 -0
- package/dist/frontend/lowering/surfaces.d.ts +3 -0
- package/dist/frontend/lowering/surfaces.js +73 -8
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/undefined-index.d.ts +27 -0
- package/dist/frontend/lowering/undefined-index.js +82 -0
- package/dist/frontend/lowering/undefined-index.js.map +1 -0
- package/dist/frontend/lowering/var-hoisting.js +29 -13
- package/dist/frontend/lowering/var-hoisting.js.map +1 -1
- package/dist/frontend/lowering/width-lift.d.ts +18 -0
- package/dist/frontend/npm-static-bundled-chunks.js +9 -11
- package/dist/frontend/npm-static-bundled-chunks.js.map +1 -1
- package/dist/frontend/npm-static-bundled-chunks.test.js +6 -5
- package/dist/frontend/npm-static-bundled-chunks.test.js.map +1 -1
- package/dist/frontend/npm-static-rewrite-syntax.js +9 -1
- package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
- package/dist/frontend/npm-static.js +4 -20
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/package-shims.d.ts +3 -0
- package/dist/frontend/package-shims.js +71 -8
- package/dist/frontend/package-shims.js.map +1 -1
- package/dist/frontend/pipeline.js +19 -11
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/process-fork.d.ts +25 -0
- package/dist/frontend/process-fork.js +2 -0
- package/dist/frontend/process-fork.js.map +1 -0
- package/dist/frontend/program-analysis.d.ts +5 -1
- package/dist/frontend/program-analysis.js +5 -0
- package/dist/frontend/program-analysis.js.map +1 -1
- package/dist/frontend/program.d.ts +21 -6
- package/dist/frontend/program.js +681 -83
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +43 -3
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/token-equivalence.d.ts +3 -0
- package/dist/frontend/token-equivalence.js +409 -0
- package/dist/frontend/token-equivalence.js.map +1 -0
- package/dist/frontend/token-equivalence.test.d.ts +1 -0
- package/dist/frontend/token-equivalence.test.js +67 -0
- package/dist/frontend/token-equivalence.test.js.map +1 -0
- package/dist/frontend/ts7/ast-node.d.ts +22 -0
- package/dist/frontend/ts7/ast-node.js +1048 -103
- package/dist/frontend/ts7/ast-node.js.map +1 -1
- package/dist/frontend/ts7/ast-node.test.js +24 -0
- package/dist/frontend/ts7/ast-node.test.js.map +1 -1
- package/dist/frontend/ts7/ast-wire.d.ts +4 -3
- package/dist/frontend/ts7/ast-wire.js +34 -24
- package/dist/frontend/ts7/ast-wire.js.map +1 -1
- package/dist/frontend/ts7/ast-wire.test.js +23 -0
- package/dist/frontend/ts7/ast-wire.test.js.map +1 -1
- package/dist/frontend/ts7/checker-backend.d.ts +3 -4
- package/dist/frontend/ts7/checker-backend.js +2 -2
- package/dist/frontend/ts7/checker-backend.js.map +1 -1
- package/dist/frontend/ts7/checker-backend.test.js +5 -9
- package/dist/frontend/ts7/checker-backend.test.js.map +1 -1
- package/dist/frontend/ts7/checker.d.ts +4 -0
- package/dist/frontend/ts7/checker.js +7 -0
- package/dist/frontend/ts7/checker.js.map +1 -1
- package/dist/frontend/ts7/lib-diagnostics.d.ts +24 -0
- package/dist/frontend/ts7/lib-diagnostics.js +307 -0
- package/dist/frontend/ts7/lib-diagnostics.js.map +1 -0
- package/dist/frontend/ts7/lib-diagnostics.test.d.ts +1 -0
- package/dist/frontend/ts7/lib-diagnostics.test.js +199 -0
- package/dist/frontend/ts7/lib-diagnostics.test.js.map +1 -0
- package/dist/frontend/ts7/program-host.d.ts +7 -0
- package/dist/frontend/ts7/program-host.js +25 -2
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.d.ts +3 -0
- package/dist/frontend/ts7/semantic-model.js +5 -0
- package/dist/frontend/ts7/semantic-model.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.test.js +6 -1
- package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
- package/dist/frontend/ts7/semantic-types.d.ts +1 -1
- package/dist/frontend/ts7/semantic-types.js +1 -1
- package/dist/frontend/ts7/semantic-types.js.map +1 -1
- package/dist/frontend/ts7/session.d.ts +14 -1
- package/dist/frontend/ts7/session.js +22 -0
- package/dist/frontend/ts7/session.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +13 -1
- package/dist/frontend/type-mapper.js +229 -20
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.d.ts +0 -5
- package/dist/index.js +46 -4
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.js +5 -3
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/array-length-stability.d.ts +4 -0
- package/dist/ir/array-length-stability.js +19 -6
- package/dist/ir/array-length-stability.js.map +1 -1
- package/dist/ir/array-length-stability.test.js +24 -0
- package/dist/ir/array-length-stability.test.js.map +1 -1
- package/dist/ir/builtin-effects.d.ts +7 -0
- package/dist/ir/builtin-effects.js +60 -0
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +6 -4
- package/dist/ir/builtin-signatures.js +222 -13
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/callback-specialization.d.ts +2 -1
- package/dist/ir/callback-specialization.js +23 -18
- package/dist/ir/callback-specialization.js.map +1 -1
- package/dist/ir/char-unit-locals.d.ts +19 -0
- package/dist/ir/char-unit-locals.js +185 -0
- package/dist/ir/char-unit-locals.js.map +1 -0
- package/dist/ir/char-unit-locals.test.d.ts +1 -0
- package/dist/ir/char-unit-locals.test.js +94 -0
- package/dist/ir/char-unit-locals.test.js.map +1 -0
- package/dist/ir/final-fields.d.ts +2 -1
- package/dist/ir/final-fields.js +14 -16
- package/dist/ir/final-fields.js.map +1 -1
- package/dist/ir/function-references.d.ts +2 -0
- package/dist/ir/function-references.js +2 -0
- package/dist/ir/function-references.js.map +1 -1
- package/dist/ir/function-references.test.js +3 -0
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/initializer-bindings.d.ts +2 -1
- package/dist/ir/initializer-bindings.js +27 -20
- package/dist/ir/initializer-bindings.js.map +1 -1
- package/dist/ir/int32-arrays.d.ts +108 -0
- package/dist/ir/int32-arrays.js +831 -0
- package/dist/ir/int32-arrays.js.map +1 -0
- package/dist/ir/int32-slots.d.ts +24 -2
- package/dist/ir/int32-slots.js +266 -57
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/int32-slots.test.js +33 -0
- package/dist/ir/int32-slots.test.js.map +1 -1
- package/dist/ir/integer-loops.d.ts +3 -3
- package/dist/ir/integer-loops.js +28 -10
- package/dist/ir/integer-loops.js.map +1 -1
- package/dist/ir/integer-loops.test.js +10 -0
- package/dist/ir/integer-loops.test.js.map +1 -1
- package/dist/ir/integer-ranges.d.ts +5 -0
- package/dist/ir/integer-ranges.js +125 -12
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +30 -0
- package/dist/ir/integer-ranges.test.js.map +1 -1
- package/dist/ir/ir.d.ts +83 -10
- package/dist/ir/ir.js +77 -6
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/ir.test.js +23 -2
- package/dist/ir/ir.test.js.map +1 -1
- package/dist/ir/js-ic.d.ts +4 -0
- package/dist/ir/js-ic.js +17 -1
- package/dist/ir/js-ic.js.map +1 -1
- package/dist/ir/js-ic.test.js +46 -0
- package/dist/ir/js-ic.test.js.map +1 -1
- package/dist/ir/node-index.d.ts +57 -0
- package/dist/ir/node-index.js +215 -0
- package/dist/ir/node-index.js.map +1 -0
- package/dist/ir/paired-while-loops.d.ts +25 -0
- package/dist/ir/paired-while-loops.js +335 -0
- package/dist/ir/paired-while-loops.js.map +1 -0
- package/dist/ir/paired-while-loops.test.d.ts +1 -0
- package/dist/ir/paired-while-loops.test.js +163 -0
- package/dist/ir/paired-while-loops.test.js.map +1 -0
- package/dist/ir/parameter-versions.d.ts +25 -0
- package/dist/ir/parameter-versions.js +300 -0
- package/dist/ir/parameter-versions.js.map +1 -0
- package/dist/ir/runtime-features.d.ts +34 -13
- package/dist/ir/runtime-features.js +177 -39
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/serialize.d.ts +12 -2
- package/dist/ir/serialize.js +16 -3
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/serialize.test.js +17 -0
- package/dist/ir/serialize.test.js.map +1 -1
- package/dist/ir/traverse.js +18 -6
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/validate.js +167 -40
- package/dist/ir/validate.js.map +1 -1
- package/dist/library/ir-policy.js +3 -0
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/native/cache.d.ts +6 -1
- package/dist/native/cache.js +28 -5
- package/dist/native/cache.js.map +1 -1
- package/dist/native/cache.test.js +16 -2
- package/dist/native/cache.test.js.map +1 -1
- package/dist/native/cli.js +21 -1
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.js +8 -6
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/executable-cache.d.ts +1 -1
- package/dist/native/executable-cache.js +2 -2
- package/dist/native/executable-cache.js.map +1 -1
- package/dist/native/prepare.d.ts +4 -2
- package/dist/native/prepare.js +130 -32
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/prepare.test.js +96 -20
- package/dist/native/prepare.test.js.map +1 -1
- package/dist/native/sanitizer.test.js +2 -0
- package/dist/native/sanitizer.test.js.map +1 -1
- package/dist/native/text-file.d.ts +13 -3
- package/dist/native/text-file.js +63 -9
- package/dist/native/text-file.js.map +1 -1
- package/dist/native/text-file.test.d.ts +1 -0
- package/dist/native/text-file.test.js +49 -0
- package/dist/native/text-file.test.js.map +1 -0
- package/dist/native/toolchain.js +4 -4
- package/dist/native/toolchain.js.map +1 -1
- package/dist/native/toolchain.test.js +3 -3
- package/dist/native/toolchain.test.js.map +1 -1
- package/package.json +21 -21
- package/shims/chalk/v5.ts +688 -0
- package/shims/hono-node-server/v2.ts +645 -0
- package/shims/hot-shots/client.ts +1126 -0
- package/shims/hot-shots/v8-unix-dgram.ts +8 -0
- package/shims/hot-shots/v8.ts +8 -0
- package/surface-manifest.json +27 -7
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { keyedHelperName } from "./stable-names.js";
|
|
2
|
+
import { perKeyOrder } from "./key-order-witness.js";
|
|
2
3
|
import { isForwardedTupleSpread, lowerForwardingApply } from "./typed-arguments.js";
|
|
3
4
|
import { guardNullProto, nullProtoRecordShape } from "./null-prototype.js";
|
|
4
5
|
import { lowerDynStreamMemberCall } from "./dyn-streams.js";
|
|
@@ -29,9 +30,10 @@ import { lowerClassSymbolMethodCall } from "./symbol-methods.js";
|
|
|
29
30
|
import { lowerReadlineDisposeCall } from "./builtins/readline.js";
|
|
30
31
|
import { errorToStringCall } from "./error-methods.js";
|
|
31
32
|
import { lowerClassPrototypeAssign, lowerClassPrototypeDescriptors } from "./class-prototypes.js";
|
|
32
|
-
import { BYTES_ELEMENT_NAME, BIGINT_T, BOOL, CAUGHT, DYN, DYN_HANDLE_KINDS, F64, NULL_T, STRING, SYMBOL_T, UNDEFINED_T, VOID, arrayOf, canBoxFuncIntoDyn, canConvertToDyn, canDynCheckTo, funcOf, isDynTypedRefType, isUnitType, shapeHasAccessorSlots, typeEquals, RUNTIME_EMITTER_CLASS, } from "../../ir/ir.js";
|
|
33
|
+
import { BYTES_ELEMENT_NAME, BYTES_U8, BIGINT_T, BOOL, CAUGHT, DYN, DYN_HANDLE_KINDS, F64, NULL_T, STRING, SYMBOL_T, UNDEFINED_T, VOID, arrayOf, canBoxFuncIntoDyn, canConvertToDyn, canDynCheckTo, funcOf, isDynTypedRefType, isUnitType, shapeHasAccessorSlots, shapeKeyOrders, typeEquals, RUNTIME_EMITTER_CLASS, } from "../../ir/ir.js";
|
|
33
34
|
import { lowerProtocolMethodCall } from "./class-protocol-dispatch.js";
|
|
34
35
|
import { isJsSourceFile, locOf, requireSpecOf } from "../program.js";
|
|
36
|
+
import { isPackageShimFile, isShimIntrinsicName } from "../package-shims.js";
|
|
35
37
|
import { lowerJsonRequireCall } from "./json-require.js";
|
|
36
38
|
import { lowerAssertInstanceCall } from "./assert-instances.js";
|
|
37
39
|
import { isGenericCallableMemberType, isOverloadedCallableMemberType, typeKey, } from "../type-mapper.js";
|
|
@@ -46,7 +48,7 @@ import { lowerGeneratorHelperCall, lowerHelperReturnCall, lowerIteratorFromCall,
|
|
|
46
48
|
import { lowerObjectAssignIndexShape, lowerObjectConstructor, lowerObjectFromEntriesCall, lowerObjectIterOverIndexShape, } from "./containers/indexed-objects.js";
|
|
47
49
|
import { lowerTupleReadMethodCall } from "./containers/array-methods.js";
|
|
48
50
|
import { tryFuseIndexRead } from "./array-values.js";
|
|
49
|
-
import { lowerBytesStaticCall } from "./containers/bytes.js";
|
|
51
|
+
import { lowerBufferConstruct, lowerBytesPrototypeSetCall, lowerBytesStaticCall, } from "./containers/bytes.js";
|
|
50
52
|
import { lowerRegexMethodCall, lowerStringIndexCall, lowerStringMethodCall, lowerStringPaddingCall, lowerStringSplitCall, isDynPrimitiveKindMethod, lowerDynPrimitiveMethodCall, lowerExtraNumberMethodCall, } from "./containers/string-and-regexp.js";
|
|
51
53
|
import { createRequireSpecOf } from "./builtins/module-bindings.js";
|
|
52
54
|
import { lowerChildStreamMethodCall, lowerChildWriterMethodCall, } from "./builtins/child-process-methods.js";
|
|
@@ -82,19 +84,72 @@ import { defaultAfterUndefined, lowerOptionalArgument, lowerStaticallyUndefinedA
|
|
|
82
84
|
import { fenceSymbolFieldCopy } from "./symbol-fields.js";
|
|
83
85
|
import { lowerClassDataDescriptor, lowerClassDescriptorRead } from "./class-descriptors.js";
|
|
84
86
|
import { lowerClassFieldDefine, lowerClassIntegrity } from "./class-attributes.js";
|
|
87
|
+
import { freezableRecordType, lowerNativeFreeze } from "./frozen-records.js";
|
|
85
88
|
import { classStaticDataFor } from "./class-static-data.js";
|
|
86
89
|
import { lowerUrlFactory } from "./lower-url.js";
|
|
87
90
|
import { nullishValueUnitOf } from "./binding-analysis.js";
|
|
88
91
|
import { spreadNeedsRuntimeArity, completeFuncValueArgs, lowerSpreadArgsCall, completeArgs, } from "./call-arguments.js";
|
|
89
92
|
import { isThisParameter } from "./call-signatures.js";
|
|
93
|
+
import { dynamicOverloadChoice } from "./overload-choice.js";
|
|
90
94
|
import { lowerStringIteratorValue } from "./iterator-adapters.js";
|
|
91
95
|
import { checkedArmExtraction } from "./coercions/unions.js";
|
|
92
96
|
import { maybePromiseReturnStmt, promiseArmedUnionOf } from "./maybe-promise.js";
|
|
93
97
|
import { requireObjLitGenericReceiver, objLitGenericFnNodeOf, objLitGenericFnInfoOf, genericCallInstance, } from "./generic-functions.js";
|
|
94
98
|
import { codeGenerationCalleeOf, lowerCodeGenerationCall } from "./code-generation.js";
|
|
95
99
|
const ZLIB_STREAM_METHODS = new Set(["flush", "params", "close", "reset"]);
|
|
100
|
+
/** `Object.defineProperty(target, ...)`, `Object.defineProperties`,
|
|
101
|
+
* `Reflect.defineProperty`, and `target.__defineGetter__/__defineSetter__`
|
|
102
|
+
* over a target that may hold an Error can install an accessor over an
|
|
103
|
+
* error's `name` or `message` (error-methods.ts). */
|
|
104
|
+
function noteErrorAccessorReflection(lowerer, expr) {
|
|
105
|
+
const callee = expr.expression;
|
|
106
|
+
if (!ts.isPropertyAccessExpression(callee))
|
|
107
|
+
return;
|
|
108
|
+
const member = callee.name.text;
|
|
109
|
+
const target = member === "defineProperty" || member === "defineProperties"
|
|
110
|
+
? expr.arguments.nodes[0]
|
|
111
|
+
: member === "__defineGetter__" || member === "__defineSetter__"
|
|
112
|
+
? callee.expression
|
|
113
|
+
: undefined;
|
|
114
|
+
if (!target)
|
|
115
|
+
return;
|
|
116
|
+
const error = lowerer.checker.resolveName("Error", ts.SymbolFlags.Type, target, false);
|
|
117
|
+
const errorType = error ? lowerer.checker.getDeclaredTypeOfSymbol(error) : null;
|
|
118
|
+
if (mayHoldError(lowerer, lowerer.checker.getTypeAtLocation(target), errorType))
|
|
119
|
+
lowerer.errorAccessorReflection = locOf(expr);
|
|
120
|
+
}
|
|
121
|
+
/** An untyped or generic type, a type Error is assignable to (`object`,
|
|
122
|
+
* `{}`, `Object`, `{ message?: string }`), or
|
|
123
|
+
* an Error-shaped type with both `name` and `message`, alone or in a
|
|
124
|
+
* union or intersection. */
|
|
125
|
+
function mayHoldError(lowerer, type, errorType) {
|
|
126
|
+
if (type.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown | ts.TypeFlags.Instantiable))
|
|
127
|
+
return true;
|
|
128
|
+
if (type.flags & (ts.TypeFlags.Union | ts.TypeFlags.Intersection))
|
|
129
|
+
return ts.constituentTypes(type).some((part) => mayHoldError(lowerer, part, errorType));
|
|
130
|
+
return ((lowerer.checker.getPropertyOfType(type, "message") !== undefined &&
|
|
131
|
+
lowerer.checker.getPropertyOfType(type, "name") !== undefined) ||
|
|
132
|
+
(errorType !== null && lowerer.checker.isTypeAssignableTo(errorType, type)));
|
|
133
|
+
}
|
|
134
|
+
/** The `f` of a `(0, f)` callee (a numeric left operand, so dropping it
|
|
135
|
+
* changes only the call's receiver), or null. */
|
|
136
|
+
function receiverlessCalleeOf(callee) {
|
|
137
|
+
let e = callee;
|
|
138
|
+
while (ts.isParenthesizedExpression(e))
|
|
139
|
+
e = e.expression;
|
|
140
|
+
if (!ts.isBinaryExpression(e) ||
|
|
141
|
+
e.operatorToken.kind !== ts.SyntaxKind.CommaToken ||
|
|
142
|
+
!ts.isNumericLiteral(e.left))
|
|
143
|
+
return null;
|
|
144
|
+
let right = e.right;
|
|
145
|
+
while (ts.isParenthesizedExpression(right))
|
|
146
|
+
right = right.expression;
|
|
147
|
+
return right;
|
|
148
|
+
}
|
|
96
149
|
export function lowerCall(lowerer, expr) {
|
|
97
150
|
const loc = locOf(expr);
|
|
151
|
+
if (lowerer.errorAccessorReflection === null)
|
|
152
|
+
noteErrorAccessorReflection(lowerer, expr);
|
|
98
153
|
// Object's checker return type is `any`. Claim known object inputs
|
|
99
154
|
// before generic checked-dynamic dispatch tries to load the constructor.
|
|
100
155
|
if (ts.isIdentifier(expr.expression) &&
|
|
@@ -113,6 +168,17 @@ export function lowerCall(lowerer, expr) {
|
|
|
113
168
|
const json = lowerJsonRequireCall(lowerer, expr);
|
|
114
169
|
if (json)
|
|
115
170
|
return json;
|
|
171
|
+
// `(0, ns.member)(...)` over a builtin module (tsc's and esbuild's call
|
|
172
|
+
// without a receiver): Node's module functions do not read `this`, so it
|
|
173
|
+
// is the member call.
|
|
174
|
+
{
|
|
175
|
+
const member = receiverlessCalleeOf(expr.expression);
|
|
176
|
+
if (member !== null && ts.isPropertyAccessExpression(member)) {
|
|
177
|
+
const builtin = lowerer.lowerNamespaceBuiltinCall(expr, member);
|
|
178
|
+
if (builtin)
|
|
179
|
+
return builtin;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
116
182
|
// eval(...) and Function(...): Node's EvalError under
|
|
117
183
|
// --disallow-code-generation-from-strings (code-generation.ts).
|
|
118
184
|
{
|
|
@@ -120,6 +186,21 @@ export function lowerCall(lowerer, expr) {
|
|
|
120
186
|
if (codeGeneration !== null)
|
|
121
187
|
return lowerCodeGenerationCall(lowerer, expr, codeGeneration);
|
|
122
188
|
}
|
|
189
|
+
// The deprecated Buffer(...) call (containers/bytes.ts). The checker
|
|
190
|
+
// types it `any`, so the bytes cross as a checked-dynamic value, which
|
|
191
|
+
// keeps the Buffer brand for inspection.
|
|
192
|
+
{
|
|
193
|
+
const buffer = lowerBufferConstruct(lowerer, expr);
|
|
194
|
+
if (buffer)
|
|
195
|
+
return { kind: "dynFrom", value: buffer, type: DYN, loc };
|
|
196
|
+
}
|
|
197
|
+
// A package shim's runtime intrinsic (a bodiless `declare function`
|
|
198
|
+
// named scriptcUnixDgram* in a shipped shim): a direct runtime call.
|
|
199
|
+
if (ts.isIdentifier(expr.expression) && isShimIntrinsicName(expr.expression.text)) {
|
|
200
|
+
const intrinsic = lowerShimIntrinsicCall(lowerer, expr, expr.expression, loc);
|
|
201
|
+
if (intrinsic)
|
|
202
|
+
return intrinsic;
|
|
203
|
+
}
|
|
123
204
|
// Inline require() of a program module (cjs-inline-require.ts): a
|
|
124
205
|
// member call over its export table resolves like a binding's member
|
|
125
206
|
// call after the module's %init at this position; the require itself
|
|
@@ -1195,6 +1276,7 @@ export function lowerCall(lowerer, expr) {
|
|
|
1195
1276
|
lowerer.lowerTestMethodCall(expr, expr.expression) ??
|
|
1196
1277
|
lowerer.lowerTimeoutMethodCall(expr, expr.expression) ??
|
|
1197
1278
|
lowerArrayPrototypeBorrowCall(lowerer, expr, expr.expression) ??
|
|
1279
|
+
lowerBytesPrototypeSetCall(lowerer, expr, expr.expression) ??
|
|
1198
1280
|
lowerObjectOwnPrototypeCall(lowerer, expr, expr.expression) ??
|
|
1199
1281
|
lowerObjectPrototypeCall(lowerer, expr, expr.expression) ??
|
|
1200
1282
|
lowerStringPrototypeCall(lowerer, expr, expr.expression) ??
|
|
@@ -1305,7 +1387,17 @@ export function lowerCall(lowerer, expr) {
|
|
|
1305
1387
|
}
|
|
1306
1388
|
const accessorTarget = lowerer.fieldTarget(expr.expression);
|
|
1307
1389
|
if (accessorTarget?.container === "accessor") {
|
|
1308
|
-
|
|
1390
|
+
let callee = lowerer.fieldGetExpr(accessorTarget, locOf(expr.expression), expr.expression);
|
|
1391
|
+
// A getter returning a callable class instance (chalk's
|
|
1392
|
+
// `chalk.red("x")`): call through its `%call` field.
|
|
1393
|
+
if (callee.type.kind === "object") {
|
|
1394
|
+
const direct = callableInstanceStringCall(lowerer, expr, callee, locOf(expr));
|
|
1395
|
+
if (direct)
|
|
1396
|
+
return direct;
|
|
1397
|
+
callee = lowerer.hybridCallUnwrap(callee);
|
|
1398
|
+
if (callee.type.kind === "func")
|
|
1399
|
+
return lowerCallThroughValue(lowerer, expr, callee, locOf(expr));
|
|
1400
|
+
}
|
|
1309
1401
|
if (callee.type.kind === "func") {
|
|
1310
1402
|
const args = completeFuncValueArgs(lowerer, expr, callee.type, locOf(expr));
|
|
1311
1403
|
return { kind: "callValue", callee, args, type: callee.type.ret, loc: locOf(expr) };
|
|
@@ -1522,8 +1614,47 @@ export function lowerCall(lowerer, expr) {
|
|
|
1522
1614
|
// a non-func IR type was already rejected while lowering the callee.
|
|
1523
1615
|
// HYBRID (function-with-properties) values call through their %call slot.
|
|
1524
1616
|
let callee = lowerer.lowerExpr(expr.expression);
|
|
1525
|
-
|
|
1617
|
+
{
|
|
1618
|
+
const direct = callableInstanceStringCall(lowerer, expr, callee, loc);
|
|
1619
|
+
if (direct)
|
|
1620
|
+
return direct;
|
|
1621
|
+
}
|
|
1622
|
+
if (callee.type.kind === "record" || callee.type.kind === "object")
|
|
1526
1623
|
callee = lowerer.hybridCallUnwrap(callee);
|
|
1624
|
+
return lowerCallThroughValue(lowerer, expr, callee, loc);
|
|
1625
|
+
}
|
|
1626
|
+
/** A callable class instance called with one string: its `%call1` method
|
|
1627
|
+
* when the class has one (the chalk shim's typed fast path), skipping the
|
|
1628
|
+
* variadic closure's checked-dynamic arguments. */
|
|
1629
|
+
function callableInstanceStringCall(lowerer, expr, callee, loc) {
|
|
1630
|
+
if (callee.type.kind !== "object" || expr.arguments.nodes.length !== 1)
|
|
1631
|
+
return null;
|
|
1632
|
+
const arg = expr.arguments.nodes[0];
|
|
1633
|
+
if (ts.isSpreadElement(arg))
|
|
1634
|
+
return null;
|
|
1635
|
+
const info = lowerer.classes.get(callee.type.className);
|
|
1636
|
+
if (info === undefined || !info.fields.has("%call") || !lowerer.findMethodOn(info, "%call1"))
|
|
1637
|
+
return null;
|
|
1638
|
+
const value = lowerer.lowerExpr(arg);
|
|
1639
|
+
if (value.type.kind === "string")
|
|
1640
|
+
return lowerer.accessorCall(callee.type.className, "%call1", callee, [value], STRING, loc);
|
|
1641
|
+
// Any other argument (a number behind a cast): the variadic closure,
|
|
1642
|
+
// through the checked-dynamic call as lowerCallThroughValue would.
|
|
1643
|
+
const closure = lowerer.hybridCallUnwrap(callee);
|
|
1644
|
+
if (closure.type.kind !== "func")
|
|
1645
|
+
return null;
|
|
1646
|
+
return {
|
|
1647
|
+
kind: "dynCall",
|
|
1648
|
+
callee: { kind: "dynFrom", value: closure, type: DYN, loc },
|
|
1649
|
+
calleeName: ts.isIdentifier(expr.expression) ? expr.expression.text : "value",
|
|
1650
|
+
args: [lowerer.coerceToExpected(value, DYN)],
|
|
1651
|
+
type: DYN,
|
|
1652
|
+
loc,
|
|
1653
|
+
};
|
|
1654
|
+
}
|
|
1655
|
+
/** A call through an evaluated callee value: checked-dynamic callees,
|
|
1656
|
+
* function unions, typed-rest and runtime-arity closures. */
|
|
1657
|
+
function lowerCallThroughValue(lowerer, expr, callee, loc) {
|
|
1527
1658
|
// A CHECKED-DYNAMIC callee — `fn(a, b)` where fn is an implicit-any
|
|
1528
1659
|
// JS binding (the mustCall body's `fn(...args)`), a dyn capture, or a
|
|
1529
1660
|
// keyed read off a dyn value: the dynCall boundary. Arguments convert
|
|
@@ -1917,6 +2048,20 @@ function lowerBigIntConstructorValue(lowerer, arg, loc) {
|
|
|
1917
2048
|
return { kind: "libCall", fn: "bigint.parse", args: [arg], type: BIGINT_T, loc };
|
|
1918
2049
|
if (arg.type.kind === "f64")
|
|
1919
2050
|
return { kind: "libCall", fn: "bigint.fromF64", args: [arg], type: BIGINT_T, loc };
|
|
2051
|
+
// Byte storage converts through ToPrimitive, which BigInt then parses: a
|
|
2052
|
+
// typed array's text is its elements joined with "," (one element reads
|
|
2053
|
+
// as that element, none as 0n, several throw the SyntaxError for the
|
|
2054
|
+
// joined text), a Buffer's is its UTF-8 decoding and a DataView's is
|
|
2055
|
+
// "[object DataView]". The runtime value tells them apart, as for String.
|
|
2056
|
+
if (arg.type.kind === "bytes") {
|
|
2057
|
+
const text = {
|
|
2058
|
+
kind: "toString",
|
|
2059
|
+
operand: { kind: "dynFrom", value: arg, type: DYN, loc },
|
|
2060
|
+
type: STRING,
|
|
2061
|
+
loc,
|
|
2062
|
+
};
|
|
2063
|
+
return { kind: "libCall", fn: "bigint.parse", args: [text], type: BIGINT_T, loc };
|
|
2064
|
+
}
|
|
1920
2065
|
if (arg.type.kind === "bool") {
|
|
1921
2066
|
return {
|
|
1922
2067
|
kind: "ternary",
|
|
@@ -1952,6 +2097,7 @@ function lowerBigIntConstructorValue(lowerer, arg, loc) {
|
|
|
1952
2097
|
arm.kind === "string" ||
|
|
1953
2098
|
arm.kind === "f64" ||
|
|
1954
2099
|
arm.kind === "bool" ||
|
|
2100
|
+
arm.kind === "bytes" ||
|
|
1955
2101
|
isUnitType(arm)))
|
|
1956
2102
|
return null;
|
|
1957
2103
|
const key = `bigint.scalar:${unionId}`;
|
|
@@ -2989,6 +3135,15 @@ function lowerDynReceiverMethodCall(lowerer, call, access, boxTypedTemporary = f
|
|
|
2989
3135
|
// 'unknown' slot does.
|
|
2990
3136
|
if (checkerUntyped && DYN_HANDLE_KINDS.has(recv.type.kind))
|
|
2991
3137
|
recv = lowerer.coerceToExpected(recv, DYN);
|
|
3138
|
+
// A typed array whose checker type collapsed to `any` (a JS binding
|
|
3139
|
+
// referenced in its own initializer's inference — hono's etag digest
|
|
3140
|
+
// `const nextChunk = new Uint8Array(new ArrayBuffer(f(chunk)))` beside
|
|
3141
|
+
// `chunk = nextChunk`) still lowered to its native bytes. The typed
|
|
3142
|
+
// lowerings key on the checker type and decline it, so it boxes by
|
|
3143
|
+
// reference (the box shares the native storage, so writes through the
|
|
3144
|
+
// call stay visible) and the call dispatches on the runtime kind.
|
|
3145
|
+
if (checkerUntyped && recv.type.kind === "bytes")
|
|
3146
|
+
recv = lowerer.coerceToExpected(recv, DYN);
|
|
2992
3147
|
// The last-resort retry (boxTypedTemporary — every other lowering
|
|
2993
3148
|
// already declined): a checker-`any` receiver whose value is a FRESH
|
|
2994
3149
|
// typed result of an earlier step in the chain (`out.split("\n")`
|
|
@@ -3108,17 +3263,21 @@ function lowerDynReceiverMethodCall(lowerer, call, access, boxTypedTemporary = f
|
|
|
3108
3263
|
if (access.name.text === "flatMap")
|
|
3109
3264
|
return lowerDynArrayFlatMapCall(lowerer, call, access, recv);
|
|
3110
3265
|
// String methods claim only names NO other dyn-representable kind's
|
|
3111
|
-
// prototype declares (Array carries includes/indexOf/slice too)
|
|
3112
|
-
//
|
|
3113
|
-
//
|
|
3114
|
-
// need a receiver-kind dispatch — they keep the fence.
|
|
3266
|
+
// prototype declares (Array carries includes/indexOf/slice too), so no
|
|
3267
|
+
// other kind inherits them. Shared names would need a receiver-kind
|
|
3268
|
+
// dispatch — they keep the fence.
|
|
3115
3269
|
if (DYN_STRING_ONLY_METHODS.has(access.name.text) && !ownCallable) {
|
|
3116
|
-
//
|
|
3117
|
-
//
|
|
3118
|
-
// `
|
|
3119
|
-
//
|
|
3120
|
-
|
|
3121
|
-
|
|
3270
|
+
// A checked-dynamic object can still carry its OWN member of that
|
|
3271
|
+
// name: zod's schemas assign `trim`, `toLowerCase` and `startsWith`
|
|
3272
|
+
// in their constructors (`z.string().trim().min(1)`), an object's
|
|
3273
|
+
// prototype can define `trim`, and a JavaScript module object can
|
|
3274
|
+
// assign `repeat` in a function body (`common.repeat(" ", n)`, an
|
|
3275
|
+
// object-typed receiver the member is missing from). An untyped
|
|
3276
|
+
// receiver, or a member the checker cannot type, dispatches on the
|
|
3277
|
+
// receiver's runtime kind: a string runs the string lowering, anything
|
|
3278
|
+
// else calls its member as Node does.
|
|
3279
|
+
if ((checkerUntyped ||
|
|
3280
|
+
(lowerer.typeOf(access).flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) !== 0) &&
|
|
3122
3281
|
!call.questionDotToken &&
|
|
3123
3282
|
!access.questionDotToken &&
|
|
3124
3283
|
!call.arguments.nodes.some(ts.isSpreadElement))
|
|
@@ -3142,7 +3301,12 @@ function lowerDynReceiverMethodCall(lowerer, call, access, boxTypedTemporary = f
|
|
|
3142
3301
|
}
|
|
3143
3302
|
// The argument is a radix for bigint and an encoding for Buffer.
|
|
3144
3303
|
// Preserve its runtime value so receiver dispatch can choose correctly.
|
|
3145
|
-
|
|
3304
|
+
// An authored own `toString` member (zod's `errorUtil.toString`, which
|
|
3305
|
+
// answers string | undefined) is an ordinary method call instead.
|
|
3306
|
+
if (access.name.text === "toString" &&
|
|
3307
|
+
call.arguments.nodes.length <= 1 &&
|
|
3308
|
+
!ownCallable &&
|
|
3309
|
+
!(checkerUntyped && jsAssignsOwnToString(lowerer, access.expression))) {
|
|
3146
3310
|
const argument = call.arguments.nodes[0];
|
|
3147
3311
|
return {
|
|
3148
3312
|
kind: "libCall",
|
|
@@ -3244,11 +3408,17 @@ function lowerDynReceiverMethodCall(lowerer, call, access, boxTypedTemporary = f
|
|
|
3244
3408
|
// The same holds when only the MEMBER is checker-untyped: TypeScript
|
|
3245
3409
|
// importing chalk's JavaScript source types the default export as a
|
|
3246
3410
|
// plain function, so `chalk.bold` reads as `any` on a typed receiver.
|
|
3411
|
+
const ownToString = access.name.text === "toString" &&
|
|
3412
|
+
checkerUntyped &&
|
|
3413
|
+
jsAssignsOwnToString(lowerer, access.expression);
|
|
3247
3414
|
const stringOnlyName = (checkerUntyped ||
|
|
3248
3415
|
(lowerer.typeOf(access).flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) !== 0) &&
|
|
3249
3416
|
!ownCallable &&
|
|
3250
3417
|
DYN_STRING_PROTO_ONLY_NAMES.has(access.name.text);
|
|
3251
|
-
if (DYN_PROTO_METHOD_NAMES.has(access.name.text) &&
|
|
3418
|
+
if (DYN_PROTO_METHOD_NAMES.has(access.name.text) &&
|
|
3419
|
+
!ownCallable &&
|
|
3420
|
+
!ownToString &&
|
|
3421
|
+
!stringOnlyName)
|
|
3252
3422
|
return null;
|
|
3253
3423
|
// Optional forms (`obj.cb?.()`, `obj?.cb()`) belong to the chain
|
|
3254
3424
|
// machinery's short-circuit semantics — not modeled here yet.
|
|
@@ -3509,6 +3679,7 @@ const DYN_DISPATCH_METHODS = new Set([
|
|
|
3509
3679
|
"shift",
|
|
3510
3680
|
"unshift",
|
|
3511
3681
|
"slice",
|
|
3682
|
+
"splice",
|
|
3512
3683
|
"at",
|
|
3513
3684
|
"indexOf",
|
|
3514
3685
|
"lastIndexOf",
|
|
@@ -3650,6 +3821,9 @@ const DYN_DISPATCH_METHODS = new Set([
|
|
|
3650
3821
|
"additionalHeaders",
|
|
3651
3822
|
"altsvc",
|
|
3652
3823
|
"origin",
|
|
3824
|
+
// FinalizationRegistry's methods (scr_finalization_registry_new).
|
|
3825
|
+
"register",
|
|
3826
|
+
"unregister",
|
|
3653
3827
|
// Worker and MessagePort methods use the owning context's handle adapter.
|
|
3654
3828
|
"postMessage",
|
|
3655
3829
|
"terminate",
|
|
@@ -3661,6 +3835,15 @@ export function lowerDynDispatchMethodCall(lowerer, call, access, recv, arrayRec
|
|
|
3661
3835
|
if ((!DYN_DISPATCH_METHODS.has(method) && !isJsSourceFile(ts.getSourceFileOfNode(call))) ||
|
|
3662
3836
|
lowerer.chainBlocked(call, access))
|
|
3663
3837
|
return null;
|
|
3838
|
+
// readable.compose lowers its stages from their syntax, so it needs the
|
|
3839
|
+
// stream's class: a stream a JavaScript function returns untyped has none.
|
|
3840
|
+
if (method === "compose") {
|
|
3841
|
+
const recvT = lowerer.mapTypeOf(lowerer.typeOf(access.expression));
|
|
3842
|
+
if (recvT?.kind === "object" &&
|
|
3843
|
+
streamSidesOf(lowerer, lowerer.classes.get(recvT.className)) !== null) {
|
|
3844
|
+
lowerer.noLowering("readable.compose on a stream held as a checked-dynamic value", call, "type the stream where it comes from, such as a JSDoc @returns {Readable} on the function that returns it");
|
|
3845
|
+
}
|
|
3846
|
+
}
|
|
3664
3847
|
if (call.arguments.nodes.some((arg) => ts.isSpreadElement(arg))) {
|
|
3665
3848
|
const loc = locOf(call);
|
|
3666
3849
|
const local = lowerer.declareHiddenLocal("%spreadReceiver", DYN);
|
|
@@ -4531,6 +4714,10 @@ function isSoleAbstractMethod(decl) {
|
|
|
4531
4714
|
return !owner.members.nodes.some((member) => member !== decl && ts.isMethodDeclaration(member) && ts.getTextOfNode(member.name) === name);
|
|
4532
4715
|
}
|
|
4533
4716
|
function reconcileOverloadReturn(lowerer, expr, call) {
|
|
4717
|
+
// The checker's overload is a guess for a checked-dynamic argument
|
|
4718
|
+
// another overload accepts: the implementation's value stands.
|
|
4719
|
+
if (ts.isCallExpression(expr) && dynamicOverloadChoice(lowerer, expr))
|
|
4720
|
+
return call;
|
|
4534
4721
|
const rsig = lowerer.checker.getResolvedSignature(expr);
|
|
4535
4722
|
const rdecl = rsig ? rsig.declaration : undefined;
|
|
4536
4723
|
// Nominal covariant overrides share the base's return ABI, but retain
|
|
@@ -5315,7 +5502,19 @@ export function lowerPromiseMethodCall(lowerer, call, access) {
|
|
|
5315
5502
|
!(param.kind === "dyn" && (inner.kind === "void" || lowerer.dynConvertible(inner)))) {
|
|
5316
5503
|
lowerer.unsupported("SC1090", call.arguments.nodes[0], `then handlers whose parameter is not the settled value's type (expected '${lowerer.fmt(inner)}', got '${lowerer.fmt(param)}')`);
|
|
5317
5504
|
}
|
|
5318
|
-
|
|
5505
|
+
let resultT = lowerer.mapTypeOf(lowerer.typeOf(call));
|
|
5506
|
+
// JavaScript whose declared result type has no mapping (zod's
|
|
5507
|
+
// `Promise.all(items).then((r) => ParseStatus.mergeArray(status, r))`,
|
|
5508
|
+
// typed by a .d.ts union): the handler's value settles the promise as
|
|
5509
|
+
// a checked-dynamic value, checked where it is used.
|
|
5510
|
+
if (resultT?.kind !== "promise" &&
|
|
5511
|
+
isJsSourceFile(ts.getSourceFileOfNode(call)) &&
|
|
5512
|
+
cb.type.kind === "func" &&
|
|
5513
|
+
cb.type.ret.kind !== "promise" &&
|
|
5514
|
+
cb.type.ret.kind !== "void" &&
|
|
5515
|
+
(cb.type.ret.kind === "dyn" || lowerer.dynConvertible(cb.type.ret))) {
|
|
5516
|
+
resultT = { kind: "promise", inner: DYN };
|
|
5517
|
+
}
|
|
5319
5518
|
if (resultT?.kind !== "promise") {
|
|
5320
5519
|
lowerer.noLowering("then with this handler's result type", call, "the combined result must be a representable promise");
|
|
5321
5520
|
}
|
|
@@ -5790,6 +5989,13 @@ export function lowerFilterNarrowCall(lowerer, call, access) {
|
|
|
5790
5989
|
const narrowed = outElem !== null && !typeEquals(outElem, elem);
|
|
5791
5990
|
if (!narrowed && !isBooleanArg)
|
|
5792
5991
|
return null;
|
|
5992
|
+
// A written predicate (`(p): p is Cat => ...`, a guard function value)
|
|
5993
|
+
// proves nothing at run time: the generic array HOF path filters the
|
|
5994
|
+
// receiver's elements and converts the kept ones checked
|
|
5995
|
+
// (filterResultElem).
|
|
5996
|
+
if (!isBooleanArg &&
|
|
5997
|
+
((!ts.isArrowFunction(argNode) && !ts.isFunctionExpression(argNode)) || argNode.type))
|
|
5998
|
+
return null;
|
|
5793
5999
|
const annotateEscape = "keep the receiver's element type instead — annotate the callback's return ': boolean' " +
|
|
5794
6000
|
"(the checker then skips the predicate) or annotate the result with the receiver's own " +
|
|
5795
6001
|
"element type — and narrow the elements after";
|
|
@@ -5799,6 +6005,10 @@ export function lowerFilterNarrowCall(lowerer, call, access) {
|
|
|
5799
6005
|
lowerer.badType(call, callT); // defensive: a narrowed non-union receiver
|
|
5800
6006
|
}
|
|
5801
6007
|
tag = lowerer.armTag(elem.unionId, outElem);
|
|
6008
|
+
// Several kept arms: the generic path converts the kept elements to
|
|
6009
|
+
// the narrower union (filterResultElem).
|
|
6010
|
+
if (tag < 0 && !isBooleanArg)
|
|
6011
|
+
return null;
|
|
5802
6012
|
if (tag < 0) {
|
|
5803
6013
|
lowerer.unsupported("SC1090", call, `'.filter' narrowing '${lowerer.fmt(elem)}' elements to the multi-arm '${lowerer.fmt(outElem)}' ` +
|
|
5804
6014
|
`(only a SINGLE arm re-tags — ${annotateEscape})`);
|
|
@@ -5815,17 +6025,8 @@ export function lowerFilterNarrowCall(lowerer, call, access) {
|
|
|
5815
6025
|
const helper = filterNarrowHelper(lowerer, "truthy", elem, outElem ?? elem, tag, loc);
|
|
5816
6026
|
return { kind: "call", callee: helper, args: [receiver], type: arrayOf(outElem ?? elem), loc };
|
|
5817
6027
|
}
|
|
5818
|
-
//
|
|
5819
|
-
// annotation
|
|
5820
|
-
// checker reports a predicate over parameter 0.
|
|
5821
|
-
if (!ts.isArrowFunction(argNode) && !ts.isFunctionExpression(argNode)) {
|
|
5822
|
-
lowerer.unsupported("SC1090", argNode, `narrowing '.filter' through a callback VALUE ` +
|
|
5823
|
-
`(only an inline callback whose predicate the checker inferred can re-tag — ${annotateEscape})`);
|
|
5824
|
-
}
|
|
5825
|
-
if (argNode.type) {
|
|
5826
|
-
lowerer.unsupported("SC1090", argNode, `narrowing '.filter' with a hand-written type predicate ` +
|
|
5827
|
-
`(a written 'x is T' is an unchecked assertion nothing validates at runtime — ${annotateEscape})`);
|
|
5828
|
-
}
|
|
6028
|
+
// An inferred type predicate: an inline function literal with no return
|
|
6029
|
+
// annotation, over parameter 0 (written predicates returned above).
|
|
5829
6030
|
// The receiver evaluates FIRST, in the enclosing function, like JS.
|
|
5830
6031
|
const receiver = lowerer.lowerExpr(access.expression);
|
|
5831
6032
|
const fnArg = lowerer.lowerExpr(argNode);
|
|
@@ -6103,8 +6304,10 @@ export function recordKeysArrayCall(lowerer, receiver, argIr, shape, loc) {
|
|
|
6103
6304
|
loc,
|
|
6104
6305
|
},
|
|
6105
6306
|
];
|
|
6106
|
-
|
|
6107
|
-
|
|
6307
|
+
// One walk per key order (see perKeyOrder).
|
|
6308
|
+
const orders = shapeKeyOrders(current);
|
|
6309
|
+
const walks = orders.map(() => []);
|
|
6310
|
+
for (const [k, name] of orders.flatMap((order, k) => order.map((name) => [k, name]))) {
|
|
6108
6311
|
const f = current.fields.find((x) => x.name === name);
|
|
6109
6312
|
const pushStmt = {
|
|
6110
6313
|
kind: "exprStmt",
|
|
@@ -6121,10 +6324,11 @@ export function recordKeysArrayCall(lowerer, receiver, argIr, shape, loc) {
|
|
|
6121
6324
|
// Fields that can be absent push behind their presence test (the
|
|
6122
6325
|
// key exists exactly when Object.keys would list it).
|
|
6123
6326
|
const present = lowerer.recordFieldPresent(ref, argIr.shapeId, f.name, loc);
|
|
6124
|
-
|
|
6327
|
+
walks[k].push(present.kind === "recordHas"
|
|
6125
6328
|
? { kind: "if", cond: present, then: [pushStmt], else_: null, loc }
|
|
6126
6329
|
: pushStmt);
|
|
6127
6330
|
}
|
|
6331
|
+
body.push(...perKeyOrder(current, ref, walks, loc));
|
|
6128
6332
|
body.push({ kind: "return", value: outRef, loc });
|
|
6129
6333
|
fn.body = body;
|
|
6130
6334
|
};
|
|
@@ -6140,7 +6344,7 @@ export function recordKeysArrayCall(lowerer, receiver, argIr, shape, loc) {
|
|
|
6140
6344
|
* (a key is own exactly when Object.keys would list it — the two share
|
|
6141
6345
|
* the test), everything else true. Unmatched keys probe the overflow
|
|
6142
6346
|
* map when present, so explicit undefined values remain own keys. */
|
|
6143
|
-
function recordHasOwnHelper(lowerer, shapeId, loc) {
|
|
6347
|
+
export function recordHasOwnHelper(lowerer, shapeId, loc) {
|
|
6144
6348
|
const key = `obj.hasOwn:${shapeId}`;
|
|
6145
6349
|
const existing = lowerer.arrHofHelpers.get(key);
|
|
6146
6350
|
if (existing)
|
|
@@ -7107,6 +7311,12 @@ function lowerObjectStaticCall(lowerer, call, access) {
|
|
|
7107
7311
|
...(fnName !== null ? { fnName } : {}),
|
|
7108
7312
|
};
|
|
7109
7313
|
}
|
|
7314
|
+
// A class value (`Object.defineProperty(Definition, "name", { value })`)
|
|
7315
|
+
// boxes to its constructor function, whose own-property table holds the
|
|
7316
|
+
// definition for every alias of the class.
|
|
7317
|
+
if (target?.type.kind === "classval" && lowerer.dynConvertible(target.type)) {
|
|
7318
|
+
target = { kind: "dynFrom", value: target, type: DYN, loc: locOf(call.arguments.nodes[0]) };
|
|
7319
|
+
}
|
|
7110
7320
|
const descriptorPrimitive = member === "getOwnPropertyDescriptor" &&
|
|
7111
7321
|
target &&
|
|
7112
7322
|
(target.type.kind === "bool" || target.type.kind === "f64" || target.type.kind === "string");
|
|
@@ -7215,6 +7425,22 @@ function lowerObjectStaticCall(lowerer, call, access) {
|
|
|
7215
7425
|
const fnIntegrity = functionIntegrity(lowerer, member, value, call.arguments.nodes[0], locOf(call));
|
|
7216
7426
|
if (fnIntegrity)
|
|
7217
7427
|
return fnIntegrity;
|
|
7428
|
+
// A Map or Set has no own properties: freeze, seal and preventExtensions
|
|
7429
|
+
// all only make it not extensible.
|
|
7430
|
+
if (value.type.kind === "map" || value.type.kind === "set") {
|
|
7431
|
+
if (member === "preventExtensions" || member === "seal")
|
|
7432
|
+
return lowerNativeFreeze(lowerer, "collection.preventExtensions", value, locOf(call));
|
|
7433
|
+
const extensible = {
|
|
7434
|
+
kind: "libCall",
|
|
7435
|
+
fn: "collection.isExtensible",
|
|
7436
|
+
args: [value],
|
|
7437
|
+
type: BOOL,
|
|
7438
|
+
loc: locOf(call),
|
|
7439
|
+
};
|
|
7440
|
+
return member === "isExtensible"
|
|
7441
|
+
? extensible
|
|
7442
|
+
: { kind: "unary", op: "!", operand: extensible, type: BOOL, loc: locOf(call) };
|
|
7443
|
+
}
|
|
7218
7444
|
if (member === "preventExtensions" || member === "seal") {
|
|
7219
7445
|
const integrity = lowerClassIntegrity(lowerer, call, member, value);
|
|
7220
7446
|
if (integrity)
|
|
@@ -7251,10 +7477,42 @@ function lowerObjectStaticCall(lowerer, call, access) {
|
|
|
7251
7477
|
// the argument — no alias exists, so the frozen bit is unobservable
|
|
7252
7478
|
// (writes through the Readonly<T> result are compile errors, and no
|
|
7253
7479
|
// other reference can write). Primitives pass through per ES2015.
|
|
7254
|
-
// Aliased
|
|
7255
|
-
//
|
|
7480
|
+
// Aliased records get the frozen bit of their rc word (frozen-records.ts);
|
|
7481
|
+
// other aliased objects keep a fence: a later write through the original
|
|
7482
|
+
// reference would need a runtime frozen bit (strict mode throws).
|
|
7256
7483
|
if (member === "isFrozen" && call.arguments.nodes.length === 1) {
|
|
7257
|
-
const
|
|
7484
|
+
const argNode = call.arguments.nodes[0];
|
|
7485
|
+
const probedKind = tryLowerExpression(lowerer, argNode)?.type.kind;
|
|
7486
|
+
if (probedKind === "record" ||
|
|
7487
|
+
probedKind === "array" ||
|
|
7488
|
+
probedKind === "map" ||
|
|
7489
|
+
probedKind === "set") {
|
|
7490
|
+
const native = lowerer.lowerExpr(argNode);
|
|
7491
|
+
const loc = locOf(call);
|
|
7492
|
+
if (native.type.kind === "record" || native.type.kind === "array")
|
|
7493
|
+
return {
|
|
7494
|
+
kind: "libCall",
|
|
7495
|
+
fn: native.type.kind === "record" ? "record.isFrozen" : "array.isFrozen",
|
|
7496
|
+
args: [native],
|
|
7497
|
+
type: BOOL,
|
|
7498
|
+
loc,
|
|
7499
|
+
};
|
|
7500
|
+
if (native.type.kind === "map" || native.type.kind === "set")
|
|
7501
|
+
return {
|
|
7502
|
+
kind: "unary",
|
|
7503
|
+
op: "!",
|
|
7504
|
+
operand: {
|
|
7505
|
+
kind: "libCall",
|
|
7506
|
+
fn: "collection.isExtensible",
|
|
7507
|
+
args: [native],
|
|
7508
|
+
type: BOOL,
|
|
7509
|
+
loc,
|
|
7510
|
+
},
|
|
7511
|
+
type: BOOL,
|
|
7512
|
+
loc,
|
|
7513
|
+
};
|
|
7514
|
+
}
|
|
7515
|
+
const value = lowerer.lowerExprExpecting(argNode, DYN);
|
|
7258
7516
|
return { kind: "libCall", fn: "dyn.isFrozen", args: [value], type: BOOL, loc: locOf(call) };
|
|
7259
7517
|
}
|
|
7260
7518
|
if (member === "freeze") {
|
|
@@ -7298,6 +7556,12 @@ function lowerObjectStaticCall(lowerer, call, access) {
|
|
|
7298
7556
|
const integrity = lowerClassIntegrity(lowerer, call, "freeze", value);
|
|
7299
7557
|
if (integrity)
|
|
7300
7558
|
return integrity;
|
|
7559
|
+
if (freezableRecordType(lowerer, value.type))
|
|
7560
|
+
return lowerNativeFreeze(lowerer, "record.freeze", value, locOf(call));
|
|
7561
|
+
if (value.type.kind === "array")
|
|
7562
|
+
return lowerNativeFreeze(lowerer, "array.freeze", value, locOf(call));
|
|
7563
|
+
if (value.type.kind === "map" || value.type.kind === "set")
|
|
7564
|
+
return lowerNativeFreeze(lowerer, "collection.preventExtensions", value, locOf(call));
|
|
7301
7565
|
lowerer.noLowering("Object.freeze of a possibly-aliased value", call, "freeze of a FRESH object/array literal (and of primitives) compiles — frozen-ness is unobservable there; an aliased target's later writes would need the runtime frozen bit");
|
|
7302
7566
|
}
|
|
7303
7567
|
// `Object.hasOwn(r, k)` over a RECORD receiver: a record's own-key set
|
|
@@ -7418,12 +7682,14 @@ function lowerObjectStaticCall(lowerer, call, access) {
|
|
|
7418
7682
|
const moduleSymbol = source ? lowerer.checker.getSymbolAtLocation(source) : undefined;
|
|
7419
7683
|
const names = [];
|
|
7420
7684
|
moduleSymbol?.getExports().forEach((symbol, key) => {
|
|
7685
|
+
// Internal names (`__export`) start with `__`; an exported name that
|
|
7686
|
+
// does is keyed with an extra `_` (escapedSymbolName).
|
|
7421
7687
|
const name = String(key);
|
|
7422
|
-
if (name.startsWith("__") || name === "export=")
|
|
7688
|
+
if ((name.startsWith("__") && !name.startsWith("___")) || name === "export=")
|
|
7423
7689
|
return;
|
|
7424
7690
|
const target = symbol.flags & ts.SymbolFlags.Alias ? lowerer.checker.getAliasedSymbol(symbol) : symbol;
|
|
7425
7691
|
if (target.flags & ts.SymbolFlags.Value)
|
|
7426
|
-
names.push(
|
|
7692
|
+
names.push(ts.symbolName(symbol));
|
|
7427
7693
|
});
|
|
7428
7694
|
names.sort();
|
|
7429
7695
|
const loc = locOf(call);
|
|
@@ -7465,10 +7731,14 @@ function lowerObjectStaticCall(lowerer, call, access) {
|
|
|
7465
7731
|
const isJsUnion = probed?.type.kind === "union" &&
|
|
7466
7732
|
isJsSourceFile(ts.getSourceFileOfNode(call)) &&
|
|
7467
7733
|
lowerer.dynConvertible(probed.type);
|
|
7734
|
+
// An array walks its live view: the present indices, then its numeric
|
|
7735
|
+
// and named properties.
|
|
7736
|
+
const isArray = probed?.type.kind === "array" && lowerer.dynConvertible(probed.type);
|
|
7468
7737
|
if (isDyn ||
|
|
7469
7738
|
isPrimitive ||
|
|
7470
7739
|
isFunction ||
|
|
7471
7740
|
isJsUnion ||
|
|
7741
|
+
isArray ||
|
|
7472
7742
|
(probed && isDynTypedRefType(probed.type))) {
|
|
7473
7743
|
const fn = member === "keys"
|
|
7474
7744
|
? "dyn.objKeys"
|
|
@@ -7477,7 +7747,13 @@ function lowerObjectStaticCall(lowerer, call, access) {
|
|
|
7477
7747
|
: "dyn.objEntries";
|
|
7478
7748
|
let v = lowerer.lowerExpr(argNode);
|
|
7479
7749
|
if (v.type.kind !== "dyn")
|
|
7480
|
-
v = {
|
|
7750
|
+
v = {
|
|
7751
|
+
kind: "dynFrom",
|
|
7752
|
+
value: v,
|
|
7753
|
+
...(isArray ? { liveRef: true } : {}),
|
|
7754
|
+
type: DYN,
|
|
7755
|
+
loc: locOf(call),
|
|
7756
|
+
};
|
|
7481
7757
|
// In TypeScript the keys come back as a native string[] and the
|
|
7482
7758
|
// entries as a native [string, any][]: the checker keeps every later
|
|
7483
7759
|
// write to the arrays well typed. JavaScript may store anything into
|
|
@@ -7640,8 +7916,10 @@ function lowerObjectStaticCall(lowerer, call, access) {
|
|
|
7640
7916
|
loc,
|
|
7641
7917
|
},
|
|
7642
7918
|
];
|
|
7643
|
-
|
|
7644
|
-
|
|
7919
|
+
// One walk per key order (see perKeyOrder).
|
|
7920
|
+
const orders = shapeKeyOrders(current);
|
|
7921
|
+
const walks = orders.map(() => []);
|
|
7922
|
+
for (const [k, name] of orders.flatMap((order, k) => order.map((name) => [k, name]))) {
|
|
7645
7923
|
const f = current.fields.find((x) => x.name === name);
|
|
7646
7924
|
const raw = {
|
|
7647
7925
|
kind: "recordGet",
|
|
@@ -7796,8 +8074,9 @@ function lowerObjectStaticCall(lowerer, call, access) {
|
|
|
7796
8074
|
loc,
|
|
7797
8075
|
};
|
|
7798
8076
|
}
|
|
7799
|
-
|
|
8077
|
+
walks[k].push(stmt);
|
|
7800
8078
|
}
|
|
8079
|
+
body.push(...perKeyOrder(current, ref, walks, loc));
|
|
7801
8080
|
body.push({ kind: "return", value: outRef, loc });
|
|
7802
8081
|
fn.body = body;
|
|
7803
8082
|
};
|
|
@@ -8032,7 +8311,17 @@ export function lowerRecordFieldCall(lowerer, call, access) {
|
|
|
8032
8311
|
// A HYBRID (function-with-properties) field is callable through its
|
|
8033
8312
|
// reserved %call slot — `colors.blue("x")` where blue also carries
|
|
8034
8313
|
// `.bold` (the chalk shape).
|
|
8035
|
-
if (callee.type.kind === "
|
|
8314
|
+
if (callee.type.kind === "object" && !init) {
|
|
8315
|
+
const direct = callableInstanceStringCall(lowerer, call, callee, loc);
|
|
8316
|
+
if (direct)
|
|
8317
|
+
return direct;
|
|
8318
|
+
// Other argument counts call the %call closure through its value, as
|
|
8319
|
+
// a call on the builder itself does (`theme.error("a", "b")`).
|
|
8320
|
+
const closure = lowerer.hybridCallUnwrap(callee);
|
|
8321
|
+
if (closure !== callee)
|
|
8322
|
+
return lowerCallThroughValue(lowerer, call, closure, loc);
|
|
8323
|
+
}
|
|
8324
|
+
if (callee.type.kind === "record" || callee.type.kind === "object")
|
|
8036
8325
|
callee = lowerer.hybridCallUnwrap(callee);
|
|
8037
8326
|
// Inferred JavaScript option records can retain checked callables in
|
|
8038
8327
|
// fields even when the checker only describes those members as any.
|
|
@@ -8608,7 +8897,9 @@ export function lowerObjectMethodCall(lowerer, call, access) {
|
|
|
8608
8897
|
// so both guards would pass an emitter-named call).
|
|
8609
8898
|
if (info &&
|
|
8610
8899
|
!found &&
|
|
8611
|
-
(STREAM_API_MEMBERS.has(access.name.text) ||
|
|
8900
|
+
(STREAM_API_MEMBERS.has(access.name.text) ||
|
|
8901
|
+
STREAM_OPERATORS.has(access.name.text) ||
|
|
8902
|
+
access.name.text === "compose") &&
|
|
8612
8903
|
streamSidesOf(lowerer, info) !== null) {
|
|
8613
8904
|
const stream = lowerStreamMethodCall(lowerer, call, access, info);
|
|
8614
8905
|
if (stream)
|
|
@@ -8809,7 +9100,23 @@ export function lowerObjectMethodCall(lowerer, call, access) {
|
|
|
8809
9100
|
type: found.sig.ret,
|
|
8810
9101
|
loc,
|
|
8811
9102
|
};
|
|
8812
|
-
|
|
9103
|
+
// The declaring class's original value, built with the observed slot.
|
|
9104
|
+
// An override below (a virtual call) keeps the dynamic call: a slot
|
|
9105
|
+
// reassigned to an ancestor's method must not reach the override. So do
|
|
9106
|
+
// methods declared in unchecked JavaScript, whose results are inferred,
|
|
9107
|
+
// and calls with a spread argument: the dynamic call drains the spread
|
|
9108
|
+
// through the iterator's current `next`, which may be a replacement.
|
|
9109
|
+
const declarerFile = found.declarer.decl ? ts.getSourceFileOfNode(found.declarer.decl) : null;
|
|
9110
|
+
const original = virtual ||
|
|
9111
|
+
call.arguments.nodes.some(ts.isSpreadElement) ||
|
|
9112
|
+
!declarerFile ||
|
|
9113
|
+
(isJsSourceFile(declarerFile) && !lowerer.checkedJsFile(declarerFile))
|
|
9114
|
+
? undefined
|
|
9115
|
+
: {
|
|
9116
|
+
originalId: () => found.declarer.prototypeOriginals?.get(method),
|
|
9117
|
+
directCall: () => fallback,
|
|
9118
|
+
};
|
|
9119
|
+
const result = classCallbackCall(lowerer, value, method, call.arguments.nodes, fallback, loc, ts.getTextOfNode(access), original);
|
|
8813
9120
|
return {
|
|
8814
9121
|
kind: "seqExpr",
|
|
8815
9122
|
stmts: [{ kind: "varDecl", localId: local.id, init: receiver, loc }],
|
|
@@ -9541,4 +9848,115 @@ function fenceClassCopyIntoFreshObject(lowerer, call, srcNode, rawSource) {
|
|
|
9541
9848
|
return;
|
|
9542
9849
|
lowerer.unsupported("SC1090", srcNode, `Object.assign copying a '${lowerer.fmt(rawSource.type)}' instance into a fresh object typed as the class (the copy is a plain object holding the instance's own fields, not an instance — build the object literal from the fields you need)`);
|
|
9543
9850
|
}
|
|
9851
|
+
/** True when an untyped JavaScript receiver names a binding whose declaring
|
|
9852
|
+
* file assigns it an own `toString` (the TypeScript namespace downlevel
|
|
9853
|
+
* `errorUtil.toString = (message) => ...` in zod): its calls answer what
|
|
9854
|
+
* that function returns, not Object.prototype.toString's string. */
|
|
9855
|
+
function jsAssignsOwnToString(lowerer, receiver) {
|
|
9856
|
+
if (!ts.isIdentifier(receiver))
|
|
9857
|
+
return false;
|
|
9858
|
+
const decl = bindingDeclaration(lowerer, receiver);
|
|
9859
|
+
if (decl === undefined)
|
|
9860
|
+
return false;
|
|
9861
|
+
const sf = ts.getSourceFileOfNode(decl);
|
|
9862
|
+
if (!isJsSourceFile(sf))
|
|
9863
|
+
return false;
|
|
9864
|
+
let targets = lowerer.ownToStringTargets.get(sf);
|
|
9865
|
+
if (targets === undefined) {
|
|
9866
|
+
targets = ownToStringTargets(lowerer, sf);
|
|
9867
|
+
lowerer.ownToStringTargets.set(sf, targets);
|
|
9868
|
+
}
|
|
9869
|
+
return targets.has(decl);
|
|
9870
|
+
}
|
|
9871
|
+
const unparenthesized = (e) => {
|
|
9872
|
+
let out = e;
|
|
9873
|
+
while (ts.isParenthesizedExpression(out))
|
|
9874
|
+
out = out.expression;
|
|
9875
|
+
return out;
|
|
9876
|
+
};
|
|
9877
|
+
/** The declaration of the binding an identifier names, through imports. */
|
|
9878
|
+
function bindingDeclaration(lowerer, id) {
|
|
9879
|
+
let sym = lowerer.checker.getSymbolAtLocation(id);
|
|
9880
|
+
if (sym !== undefined && (sym.flags & ts.SymbolFlags.Alias) !== 0)
|
|
9881
|
+
sym = lowerer.checker.getAliasedSymbol(sym);
|
|
9882
|
+
return sym?.valueDeclaration ?? sym?.declarations?.[0];
|
|
9883
|
+
}
|
|
9884
|
+
/** The declarations of the bindings a file's assignments `x.toString = ...`
|
|
9885
|
+
* (or `x["toString"] = ...`) give an own `toString`. An assignment through
|
|
9886
|
+
* the parameter of an immediately called function counts for the binding
|
|
9887
|
+
* the call passes (`(function (ns) { ns.toString = f; })(ns || (ns = {}))`). */
|
|
9888
|
+
function ownToStringTargets(lowerer, sf) {
|
|
9889
|
+
const targets = new Set();
|
|
9890
|
+
const visit = (node) => {
|
|
9891
|
+
if (ts.isBinaryExpression(node) && node.operatorToken.kind === ts.SyntaxKind.EqualsToken) {
|
|
9892
|
+
const left = unparenthesized(node.left);
|
|
9893
|
+
const named = (ts.isPropertyAccessExpression(left) && left.name.text === "toString") ||
|
|
9894
|
+
(ts.isElementAccessExpression(left) &&
|
|
9895
|
+
ts.isStringLiteralLike(left.argumentExpression) &&
|
|
9896
|
+
left.argumentExpression.text === "toString");
|
|
9897
|
+
const target = named
|
|
9898
|
+
? unparenthesized(left.expression)
|
|
9899
|
+
: undefined;
|
|
9900
|
+
if (target !== undefined && ts.isIdentifier(target)) {
|
|
9901
|
+
const decl = bindingDeclaration(lowerer, target);
|
|
9902
|
+
if (decl !== undefined) {
|
|
9903
|
+
targets.add(decl);
|
|
9904
|
+
const passed = iifeArgumentDeclaration(lowerer, decl);
|
|
9905
|
+
if (passed !== undefined)
|
|
9906
|
+
targets.add(passed);
|
|
9907
|
+
}
|
|
9908
|
+
}
|
|
9909
|
+
}
|
|
9910
|
+
ts.forEachChild(node, visit);
|
|
9911
|
+
};
|
|
9912
|
+
visit(sf);
|
|
9913
|
+
return targets;
|
|
9914
|
+
}
|
|
9915
|
+
/** For a parameter of an immediately called function, the declaration of
|
|
9916
|
+
* the binding its argument names: `x`, `x || (x = {})` or `(x = {})`. */
|
|
9917
|
+
function iifeArgumentDeclaration(lowerer, param) {
|
|
9918
|
+
if (!ts.isParameter(param))
|
|
9919
|
+
return undefined;
|
|
9920
|
+
const fn = param.parent;
|
|
9921
|
+
if (!ts.isFunctionExpression(fn) && !ts.isArrowFunction(fn))
|
|
9922
|
+
return undefined;
|
|
9923
|
+
let callee = fn;
|
|
9924
|
+
while (ts.isParenthesizedExpression(callee.parent))
|
|
9925
|
+
callee = callee.parent;
|
|
9926
|
+
const call = callee.parent;
|
|
9927
|
+
if (!ts.isCallExpression(call) || call.expression !== callee)
|
|
9928
|
+
return undefined;
|
|
9929
|
+
const index = fn.parameters.nodes.indexOf(param);
|
|
9930
|
+
let arg = index < 0 ? undefined : call.arguments.nodes[index];
|
|
9931
|
+
if (arg === undefined)
|
|
9932
|
+
return undefined;
|
|
9933
|
+
arg = unparenthesized(arg);
|
|
9934
|
+
if (ts.isBinaryExpression(arg) && arg.operatorToken.kind === ts.SyntaxKind.BarBarToken)
|
|
9935
|
+
arg = unparenthesized(arg.left);
|
|
9936
|
+
if (ts.isBinaryExpression(arg) && arg.operatorToken.kind === ts.SyntaxKind.EqualsToken)
|
|
9937
|
+
arg = unparenthesized(arg.left);
|
|
9938
|
+
return ts.isIdentifier(arg) ? bindingDeclaration(lowerer, arg) : undefined;
|
|
9939
|
+
}
|
|
9940
|
+
/** The runtime calls package shims declare as bodiless functions. */
|
|
9941
|
+
const SHIM_INTRINSICS = new Map([
|
|
9942
|
+
["scriptcUnixDgramSocket", { fn: "dgram.unixSocket", args: [], ret: F64 }],
|
|
9943
|
+
["scriptcUnixDgramConnect", { fn: "dgram.unixConnect", args: [F64, STRING], ret: F64 }],
|
|
9944
|
+
["scriptcUnixDgramSend", { fn: "dgram.unixSend", args: [F64, BYTES_U8], ret: F64 }],
|
|
9945
|
+
["scriptcUnixDgramClose", { fn: "dgram.unixClose", args: [F64], ret: F64 }],
|
|
9946
|
+
["scriptcResponseLight", { fn: "fetch.responseLight", args: [DYN], ret: arrayOf(STRING) }],
|
|
9947
|
+
]);
|
|
9948
|
+
function lowerShimIntrinsicCall(lowerer, expr, callee, loc) {
|
|
9949
|
+
const intrinsic = SHIM_INTRINSICS.get(callee.text);
|
|
9950
|
+
if (intrinsic === undefined)
|
|
9951
|
+
return null;
|
|
9952
|
+
const decl = lowerer.checker.getSymbolAtLocation(callee)?.valueDeclaration;
|
|
9953
|
+
if (decl === undefined ||
|
|
9954
|
+
!ts.isFunctionDeclaration(decl) ||
|
|
9955
|
+
decl.body ||
|
|
9956
|
+
!isPackageShimFile(ts.getSourceFileOfNode(decl).fileName) ||
|
|
9957
|
+
expr.arguments.nodes.length !== intrinsic.args.length)
|
|
9958
|
+
return null;
|
|
9959
|
+
const args = expr.arguments.nodes.map((arg, i) => lowerer.lowerExprExpecting(arg, intrinsic.args[i]));
|
|
9960
|
+
return { kind: "libCall", fn: intrinsic.fn, args, type: intrinsic.ret, loc };
|
|
9961
|
+
}
|
|
9544
9962
|
//# sourceMappingURL=lower-calls.js.map
|