@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
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import * as ts from "../ts7/adapter.js";
|
|
2
|
+
import { typeEquals } from "../../ir/ir.js";
|
|
3
|
+
import { isJsSourceFile } from "../program.js";
|
|
4
|
+
import { isThisParameter } from "./call-signatures.js";
|
|
5
|
+
import { hasExplicitJsDocReturn } from "./function-returns.js";
|
|
6
|
+
import { hasJsTypeAnnotation } from "./lower-stmts.js";
|
|
7
|
+
/** Whether a checked-dynamic argument leaves a JS call's overload
|
|
8
|
+
* undecided.
|
|
9
|
+
*
|
|
10
|
+
* The checker resolves an overloaded call whose argument is `any` (an
|
|
11
|
+
* untyped parameter, a value read from one) to the FIRST overload that
|
|
12
|
+
* argument satisfies, but the value can match any overload at run time:
|
|
13
|
+
* `generateKeyPairSync("ec", options)` answers KeyObjects or encoded
|
|
14
|
+
* strings by the options' contents, `digest(encoding)` a Buffer when the
|
|
15
|
+
* encoding is undefined. When another overload the call could take at
|
|
16
|
+
* run time returns a different type, the resolved overload's return is a
|
|
17
|
+
* guess, and the result is checked-dynamic instead.
|
|
18
|
+
*
|
|
19
|
+
* An overload is reachable when the arguments fit its arity (trailing
|
|
20
|
+
* checked-dynamic or `undefined` arguments may be absent) and every
|
|
21
|
+
* statically typed argument is assignable to its parameter. Generic
|
|
22
|
+
* overloads whose return cannot be mapped without instantiation do not
|
|
23
|
+
* count, so the resolved instantiation stands for them. */
|
|
24
|
+
export function dynamicOverloadChoice(lowerer, expr) {
|
|
25
|
+
return cachedAnswer(lowerer, expr, () => computeDynamicOverloadChoice(lowerer, expr));
|
|
26
|
+
}
|
|
27
|
+
/** Whether a JavaScript value's checker type rests on an undecided
|
|
28
|
+
* overload (dynamicOverloadChoice): the call itself, an awaited one, a
|
|
29
|
+
* call to an unannotated JS function returning such a value, or a read of
|
|
30
|
+
* an unannotated JS binding initialized with one (destructured or not).
|
|
31
|
+
* Such a value is checked-dynamic wherever the checker's inference would
|
|
32
|
+
* otherwise carry the guess into a binding or a return. */
|
|
33
|
+
export function guessedOverloadValue(lowerer, expr) {
|
|
34
|
+
while (ts.isParenthesizedExpression(expr) || ts.isAwaitExpression(expr))
|
|
35
|
+
expr = expr.expression;
|
|
36
|
+
if (ts.isCallExpression(expr) || ts.isNewExpression(expr)) {
|
|
37
|
+
if (!isJsSourceFile(ts.getSourceFileOfNode(expr)))
|
|
38
|
+
return false;
|
|
39
|
+
if (dynamicOverloadChoice(lowerer, expr))
|
|
40
|
+
return true;
|
|
41
|
+
const decl = lowerer.checker.getResolvedSignature(expr)?.declaration;
|
|
42
|
+
return (decl !== undefined &&
|
|
43
|
+
(ts.isFunctionDeclaration(decl) ||
|
|
44
|
+
ts.isFunctionExpression(decl) ||
|
|
45
|
+
ts.isArrowFunction(decl)) &&
|
|
46
|
+
isJsSourceFile(ts.getSourceFileOfNode(decl)) &&
|
|
47
|
+
returnsGuessedOverloadValue(lowerer, decl));
|
|
48
|
+
}
|
|
49
|
+
return ts.isIdentifier(expr) && guessedOverloadIdentifier(lowerer, expr);
|
|
50
|
+
}
|
|
51
|
+
/** Whether a JS identifier, as a binding's declared name or as a read,
|
|
52
|
+
* names a guessedOverloadBinding. */
|
|
53
|
+
export function guessedOverloadIdentifier(lowerer, node) {
|
|
54
|
+
return cachedAnswer(lowerer, node, () => {
|
|
55
|
+
const parent = node.parent;
|
|
56
|
+
if (parent !== undefined &&
|
|
57
|
+
(ts.isVariableDeclaration(parent) || ts.isBindingElement(parent)) &&
|
|
58
|
+
parent.name === node)
|
|
59
|
+
return guessedOverloadBinding(lowerer, parent);
|
|
60
|
+
const decl = lowerer.checker.getSymbolAtLocation(node)?.valueDeclaration;
|
|
61
|
+
return decl !== undefined && guessedOverloadBinding(lowerer, decl);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
/** Whether `decl` is an unannotated JS variable or destructured binding
|
|
65
|
+
* whose declaration's initializer is a guessedOverloadValue. */
|
|
66
|
+
function guessedOverloadBinding(lowerer, decl) {
|
|
67
|
+
let root = decl;
|
|
68
|
+
while (root && ts.isBindingElement(root) && root.parent && ts.isBindingPattern(root.parent)) {
|
|
69
|
+
root = root.parent.parent;
|
|
70
|
+
}
|
|
71
|
+
if (!root)
|
|
72
|
+
return false;
|
|
73
|
+
if (!ts.isVariableDeclaration(root) || !root.initializer || root.type)
|
|
74
|
+
return false;
|
|
75
|
+
if (!isJsSourceFile(ts.getSourceFileOfNode(root)) || hasJsTypeAnnotation(root))
|
|
76
|
+
return false;
|
|
77
|
+
const init = root.initializer;
|
|
78
|
+
return cachedAnswer(lowerer, root, () => guessedOverloadValue(lowerer, init));
|
|
79
|
+
}
|
|
80
|
+
/** Whether a return of the unannotated JS function `decl` itself is a
|
|
81
|
+
* guessedOverloadValue. */
|
|
82
|
+
export function returnsGuessedOverloadValue(lowerer, decl) {
|
|
83
|
+
if (decl.type || decl.asteriskToken || hasExplicitJsDocReturn(decl))
|
|
84
|
+
return false;
|
|
85
|
+
return cachedAnswer(lowerer, decl, () => {
|
|
86
|
+
if (ts.isArrowFunction(decl) && decl.body && !ts.isBlock(decl.body)) {
|
|
87
|
+
return guessedOverloadValue(lowerer, decl.body);
|
|
88
|
+
}
|
|
89
|
+
let found = false;
|
|
90
|
+
const scan = (node) => {
|
|
91
|
+
if (found || (node !== decl && ts.isFunctionLike(node)))
|
|
92
|
+
return;
|
|
93
|
+
if (ts.isReturnStatement(node) && node.expression) {
|
|
94
|
+
found = guessedOverloadValue(lowerer, node.expression);
|
|
95
|
+
}
|
|
96
|
+
ts.forEachChild(node, scan);
|
|
97
|
+
};
|
|
98
|
+
scan(decl);
|
|
99
|
+
return found;
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
/** One answer per node; a node asked again while its answer is being
|
|
103
|
+
* computed (recursive functions, self-referencing bindings) answers
|
|
104
|
+
* false. */
|
|
105
|
+
function cachedAnswer(lowerer, node, compute) {
|
|
106
|
+
const cached = lowerer.dynamicOverloadAnswers.get(node);
|
|
107
|
+
if (cached !== undefined)
|
|
108
|
+
return cached;
|
|
109
|
+
lowerer.dynamicOverloadAnswers.set(node, false);
|
|
110
|
+
const answer = compute();
|
|
111
|
+
lowerer.dynamicOverloadAnswers.set(node, answer);
|
|
112
|
+
return answer;
|
|
113
|
+
}
|
|
114
|
+
function computeDynamicOverloadChoice(lowerer, expr) {
|
|
115
|
+
// TypeScript sources keep the resolved overload: their reads validate
|
|
116
|
+
// the value against it where it is used.
|
|
117
|
+
if (!isJsSourceFile(ts.getSourceFileOfNode(expr)))
|
|
118
|
+
return false;
|
|
119
|
+
const args = expr.arguments?.nodes ?? [];
|
|
120
|
+
if (args.length === 0 || args.some(ts.isSpreadElement))
|
|
121
|
+
return false;
|
|
122
|
+
const dynamic = args.map((arg) => checkedDynamicArgument(lowerer, arg));
|
|
123
|
+
if (!dynamic.includes(true))
|
|
124
|
+
return false;
|
|
125
|
+
const checker = lowerer.checker;
|
|
126
|
+
const calleeType = checker.getTypeAtLocation(expr.expression);
|
|
127
|
+
const signatures = ts.isNewExpression(expr)
|
|
128
|
+
? checker.getConstructSignatures(calleeType)
|
|
129
|
+
: checker.getCallSignatures(calleeType);
|
|
130
|
+
if (signatures.length < 2)
|
|
131
|
+
return false;
|
|
132
|
+
const resolved = checker.getResolvedSignature(expr);
|
|
133
|
+
if (!resolved)
|
|
134
|
+
return false;
|
|
135
|
+
const resolvedReturn = lowerer.mapTypeOf(checker.getReturnTypeOfSignature(resolved));
|
|
136
|
+
if (resolvedReturn === null)
|
|
137
|
+
return false;
|
|
138
|
+
// Arguments that may be absent at run time: the trailing run of
|
|
139
|
+
// checked-dynamic and `undefined` arguments.
|
|
140
|
+
let present = args.length;
|
|
141
|
+
while (present > 0 && (dynamic[present - 1] || isUndefinedArgument(args[present - 1]))) {
|
|
142
|
+
present--;
|
|
143
|
+
}
|
|
144
|
+
for (const signature of signatures) {
|
|
145
|
+
const decl = signature.declaration;
|
|
146
|
+
if (!decl || decl === resolved.declaration || !ts.isFunctionLike(decl))
|
|
147
|
+
continue;
|
|
148
|
+
const generic = signature.getTypeParameters().length > 0;
|
|
149
|
+
const params = decl.parameters.nodes.filter((param) => !isThisParameter(param));
|
|
150
|
+
const required = params.filter((param) => !param.questionToken && !param.initializer && !param.dotDotDotToken).length;
|
|
151
|
+
const maximum = params.some((param) => param.dotDotDotToken) ? Infinity : params.length;
|
|
152
|
+
if (required > args.length || present > maximum)
|
|
153
|
+
continue;
|
|
154
|
+
const symbols = signature.getParameters();
|
|
155
|
+
let fits = true;
|
|
156
|
+
for (let i = 0; i < args.length && i < params.length && fits; i++) {
|
|
157
|
+
if (dynamic[i] || generic || params[i].dotDotDotToken)
|
|
158
|
+
continue;
|
|
159
|
+
const symbol = symbols[i];
|
|
160
|
+
if (!symbol)
|
|
161
|
+
continue;
|
|
162
|
+
fits = checker.isTypeAssignableTo(checker.getTypeAtLocation(args[i]), checker.getTypeOfSymbol(symbol));
|
|
163
|
+
}
|
|
164
|
+
if (!fits)
|
|
165
|
+
continue;
|
|
166
|
+
const candidate = lowerer.mapTypeOf(checker.getReturnTypeOfSignature(signature));
|
|
167
|
+
if (candidate !== null && !holdsResult(resolvedReturn, candidate))
|
|
168
|
+
return true;
|
|
169
|
+
}
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
/** Whether a value of the resolved overload's mapped return also holds
|
|
173
|
+
* every value of `candidate`: the same type, or a checked-dynamic one (a
|
|
174
|
+
* promise of one fulfills with anything). */
|
|
175
|
+
function holdsResult(resolved, candidate) {
|
|
176
|
+
if (resolved.kind === "dyn" || typeEquals(resolved, candidate))
|
|
177
|
+
return true;
|
|
178
|
+
return (resolved.kind === "promise" &&
|
|
179
|
+
candidate.kind === "promise" &&
|
|
180
|
+
holdsResult(resolved.inner, candidate.inner));
|
|
181
|
+
}
|
|
182
|
+
function checkedDynamicArgument(lowerer, arg) {
|
|
183
|
+
if (lowerer.checker.getTypeAtLocation(arg).flags & ts.TypeFlags.Any)
|
|
184
|
+
return true;
|
|
185
|
+
return (lowerer.typeOf(arg).flags & ts.TypeFlags.Any) !== 0;
|
|
186
|
+
}
|
|
187
|
+
function isUndefinedArgument(arg) {
|
|
188
|
+
return (ts.isIdentifier(arg) && arg.text === "undefined") || ts.isVoidExpression(arg);
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=overload-choice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overload-choice.js","sourceRoot":"","sources":["../../../src/frontend/lowering/overload-choice.ts"],"names":[],"mappings":"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"}
|
|
@@ -302,6 +302,9 @@ export declare function isStdlibSymbol(lowerer: Lowerer, symbol: ts.Symbol | und
|
|
|
302
302
|
* tamper-guard prologue) registered in stdlibGlobalAliases;
|
|
303
303
|
* - a const binding of the Map or Set constructor (`const M = Map`,
|
|
304
304
|
* builtinClassAliasOf). */
|
|
305
|
+
/** The symbol an identifier reads. A shorthand property's name (`{ Date }`)
|
|
306
|
+
* reads the binding of the same name, not the property it declares. */
|
|
307
|
+
export declare function identifierReadSymbol(lowerer: Lowerer, expr: ts.Identifier): ts.Symbol | undefined;
|
|
305
308
|
export declare function stdlibGlobalNameOf(lowerer: Lowerer, expr: ts.Expression): string | null;
|
|
306
309
|
/** True iff `expr` denotes THE standard-library global `name` — name AND
|
|
307
310
|
* provenance, because neither alone suffices: several globals share
|
|
@@ -5,6 +5,17 @@ function unparenthesized(e) {
|
|
|
5
5
|
e = e.expression;
|
|
6
6
|
return e;
|
|
7
7
|
}
|
|
8
|
+
/** `e` without parentheses and type-only wrappers (as, satisfies, type
|
|
9
|
+
* assertions, non-null assertions), which change no runtime value. */
|
|
10
|
+
function withoutTypeCasts(e) {
|
|
11
|
+
while (ts.isParenthesizedExpression(e) ||
|
|
12
|
+
ts.isAsExpression(e) ||
|
|
13
|
+
ts.isSatisfiesExpression(e) ||
|
|
14
|
+
ts.isTypeAssertion(e) ||
|
|
15
|
+
ts.isNonNullExpression(e))
|
|
16
|
+
e = e.expression;
|
|
17
|
+
return e;
|
|
18
|
+
}
|
|
8
19
|
import { UNSUPPORTED } from "../../diagnostics/diagnostic.js";
|
|
9
20
|
import { BOOL, BYTES_U8, CHILD_T, CRYPTOHASH_T, CRYPTOHMAC_T, DIR_T, DYN, F64, FILEHANDLE_T, SPAWNRES_T, STATS_T, STRING, URL_T, VOID, arrayOf, } from "../../ir/ir.js";
|
|
10
21
|
import { isJsSourceFile, isNodeTypesPath, requireSpecOf } from "../program.js";
|
|
@@ -1419,6 +1430,7 @@ export const BUILTIN_MODULE_FNS = {
|
|
|
1419
1430
|
generateKeyPair: { fn: "crypto.generateKeyPairCb", params: [], result: VOID },
|
|
1420
1431
|
sign: { fn: "crypto.signOneshot", params: [], result: DYN },
|
|
1421
1432
|
verify: { fn: "crypto.verifyOneshot", params: [], result: DYN },
|
|
1433
|
+
diffieHellman: { fn: "crypto.diffieHellman", params: [], result: DYN },
|
|
1422
1434
|
pbkdf2Sync: {
|
|
1423
1435
|
fn: "crypto.pbkdf2",
|
|
1424
1436
|
params: [BYTES_U8, BYTES_U8, F64, F64, STRING],
|
|
@@ -1446,6 +1458,15 @@ export const BUILTIN_MODULE_FNS = {
|
|
|
1446
1458
|
createDiffieHellman: { fn: "crypto.dhNew", params: [DYN, DYN, DYN, DYN], result: DYN },
|
|
1447
1459
|
getDiffieHellman: { fn: "crypto.dhGroupNew", params: [DYN], result: DYN },
|
|
1448
1460
|
createDiffieHellmanGroup: { fn: "crypto.dhGroupNew", params: [DYN], result: DYN },
|
|
1461
|
+
// Prime checks and generation (lowerPrimeCall): checked-dynamic
|
|
1462
|
+
// arguments, results converted to the call site's type.
|
|
1463
|
+
checkPrimeSync: { fn: "crypto.checkPrimeSync", params: [], result: DYN },
|
|
1464
|
+
// Checked-dynamic arguments, the result converted to the call site's
|
|
1465
|
+
// type (lowerPrimeCall).
|
|
1466
|
+
getCipherInfo: { fn: "crypto.getCipherInfo", params: [], result: DYN },
|
|
1467
|
+
checkPrime: { fn: "crypto.checkPrimeCb", params: [], result: VOID },
|
|
1468
|
+
generatePrimeSync: { fn: "crypto.generatePrimeSync", params: [], result: DYN },
|
|
1469
|
+
generatePrime: { fn: "crypto.generatePrimeCb", params: [], result: VOID },
|
|
1449
1470
|
},
|
|
1450
1471
|
zlib: {
|
|
1451
1472
|
// The default-options convenience family is special-cased in
|
|
@@ -1907,7 +1928,16 @@ export const BUILTIN_MODULE_FN_ALIASES = {
|
|
|
1907
1928
|
"fs.readFdEncoded",
|
|
1908
1929
|
"fs.readFdSync",
|
|
1909
1930
|
"fs.readFdSyncBytes",
|
|
1931
|
+
// The runtime encoding's check before a URL path converts
|
|
1932
|
+
// (fs-paths.ts).
|
|
1933
|
+
"fs.checkReadEncoding",
|
|
1910
1934
|
],
|
|
1935
|
+
// The string source's check before a URL destination converts
|
|
1936
|
+
// (fs-paths.ts).
|
|
1937
|
+
copyFileSync: ["fs.checkPath"],
|
|
1938
|
+
renameSync: ["fs.checkPath"],
|
|
1939
|
+
copyFile: ["fs.checkPath"],
|
|
1940
|
+
rename: ["fs.checkPath"],
|
|
1911
1941
|
readlinkSync: ["fs.readlinkSyncStr", "fs.readlinkSyncBuffer"],
|
|
1912
1942
|
// The bytes-data form and the { mode } options form.
|
|
1913
1943
|
writeFileSync: ["fs.writeFileSyncBytes", "fs.writeFileModeSync"],
|
|
@@ -2877,13 +2907,6 @@ export const BUILTIN_MODULE_FENCE_HINTS = {
|
|
|
2877
2907
|
"RSA and EC KeyObjects (generateKeyPair, createPrivateKey, createPublicKey), sign, verify, " +
|
|
2878
2908
|
"createSign, createVerify, createECDH, and createDiffieHellman",
|
|
2879
2909
|
])),
|
|
2880
|
-
diffieHellman: "crypto.diffieHellman takes DH, EC or X25519 KeyObjects and has no lowering; " +
|
|
2881
|
-
"the objects of createDiffieHellman, getDiffieHellman and createECDH compute shared secrets",
|
|
2882
|
-
...Object.fromEntries(["getCipherInfo"].map((m) => [
|
|
2883
|
-
m,
|
|
2884
|
-
"cipher metadata has no lowering — createCipheriv and createDecipheriv support " +
|
|
2885
|
-
"aes-128/192/256 in cbc, ctr, and gcm modes and chacha20-poly1305",
|
|
2886
|
-
])),
|
|
2887
2910
|
setFips: "a compiled binary has no FIPS provider to enable, and Node itself throws on setFips(true) " +
|
|
2888
2911
|
"in a non-FIPS build — getFips() answers 0 here",
|
|
2889
2912
|
},
|
|
@@ -3141,6 +3164,14 @@ export function isStdlibSymbol(lowerer, symbol) {
|
|
|
3141
3164
|
* tamper-guard prologue) registered in stdlibGlobalAliases;
|
|
3142
3165
|
* - a const binding of the Map or Set constructor (`const M = Map`,
|
|
3143
3166
|
* builtinClassAliasOf). */
|
|
3167
|
+
/** The symbol an identifier reads. A shorthand property's name (`{ Date }`)
|
|
3168
|
+
* reads the binding of the same name, not the property it declares. */
|
|
3169
|
+
export function identifierReadSymbol(lowerer, expr) {
|
|
3170
|
+
if (expr.parent && ts.isShorthandPropertyAssignment(expr.parent) && expr.parent.name === expr)
|
|
3171
|
+
return (lowerer.checker.getShorthandAssignmentValueSymbol(expr.parent) ??
|
|
3172
|
+
lowerer.checker.getSymbolAtLocation(expr));
|
|
3173
|
+
return lowerer.checker.getSymbolAtLocation(expr);
|
|
3174
|
+
}
|
|
3144
3175
|
export function stdlibGlobalNameOf(lowerer, expr) {
|
|
3145
3176
|
if (ts.isParenthesizedExpression(expr))
|
|
3146
3177
|
return stdlibGlobalNameOf(lowerer, expr.expression);
|
|
@@ -3154,7 +3185,7 @@ export function stdlibGlobalNameOf(lowerer, expr) {
|
|
|
3154
3185
|
return stdlibGlobalNameOf(lowerer, taken ? expr.whenTrue : expr.whenFalse);
|
|
3155
3186
|
}
|
|
3156
3187
|
if (ts.isIdentifier(expr)) {
|
|
3157
|
-
const symbol = lowerer
|
|
3188
|
+
const symbol = identifierReadSymbol(lowerer, expr);
|
|
3158
3189
|
// `globalThis` itself: a reserved intrinsic — tsc rejects user
|
|
3159
3190
|
// global bindings, but local parameters can shadow it. Its special
|
|
3160
3191
|
// symbol has no ordinary declarations for the provenance check.
|
|
@@ -3202,6 +3233,22 @@ export function stdlibGlobalNameOf(lowerer, expr) {
|
|
|
3202
3233
|
return ts.symbolName(resolved) === "global" ? "globalThis" : ts.symbolName(resolved);
|
|
3203
3234
|
}
|
|
3204
3235
|
if (ts.isPropertyAccessExpression(expr) && !expr.questionDotToken) {
|
|
3236
|
+
// The buffer module's Buffer (`require("buffer").Buffer`, `buffer_1.Buffer`)
|
|
3237
|
+
// is the global constructor.
|
|
3238
|
+
if (bufferNamespaceMember(lowerer, expr))
|
|
3239
|
+
return "Buffer";
|
|
3240
|
+
// A cast of the global object (`(globalThis as { Buffer?: B }).Buffer`,
|
|
3241
|
+
// `(globalThis as any).Buffer`) changes only its static type: the
|
|
3242
|
+
// member is the global object's own.
|
|
3243
|
+
const uncast = withoutTypeCasts(expr.expression);
|
|
3244
|
+
if (uncast !== unparenthesized(expr.expression)) {
|
|
3245
|
+
if (!ts.isIdentifier(uncast) || stdlibGlobalNameOf(lowerer, uncast) !== "globalThis")
|
|
3246
|
+
return null;
|
|
3247
|
+
const member = lowerer.checker.getPropertyOfType(lowerer.typeOf(uncast), expr.name.text);
|
|
3248
|
+
if (!member || !lowerer.isStdlibSymbol(member))
|
|
3249
|
+
return null;
|
|
3250
|
+
return ts.symbolName(member) === "global" ? "globalThis" : ts.symbolName(member);
|
|
3251
|
+
}
|
|
3205
3252
|
if (stdlibGlobalNameOf(lowerer, expr.expression) !== "globalThis")
|
|
3206
3253
|
return null;
|
|
3207
3254
|
// Through a detection chain the checker types the receiver as the
|
|
@@ -3322,8 +3369,26 @@ export function stdlibGlobalAliasDecl(lowerer, nameNode, init) {
|
|
|
3322
3369
|
if (!symbol)
|
|
3323
3370
|
return false;
|
|
3324
3371
|
lowerer.stdlibGlobalAliases.set(symbol, name);
|
|
3372
|
+
if (init !== undefined && castGlobalAliasSource(lowerer, init))
|
|
3373
|
+
lowerer.castGlobalAliases.add(symbol);
|
|
3325
3374
|
return true;
|
|
3326
3375
|
}
|
|
3376
|
+
/** True when an alias initializer reads its global through a cast of the
|
|
3377
|
+
* global object (`(globalThis as { Buffer?: B }).Buffer`), directly or as
|
|
3378
|
+
* the left operand of `||` (stdlibGlobalAliasNameOf's guard), or copies an
|
|
3379
|
+
* alias made that way. Such an alias carries the cast's static type. */
|
|
3380
|
+
function castGlobalAliasSource(lowerer, init) {
|
|
3381
|
+
let source = unparenthesized(init);
|
|
3382
|
+
if (ts.isBinaryExpression(source) && source.operatorToken.kind === ts.SyntaxKind.BarBarToken)
|
|
3383
|
+
source = unparenthesized(source.left);
|
|
3384
|
+
if (ts.isPropertyAccessExpression(source))
|
|
3385
|
+
return withoutTypeCasts(source.expression) !== unparenthesized(source.expression);
|
|
3386
|
+
if (ts.isIdentifier(source)) {
|
|
3387
|
+
const symbol = lowerer.checker.getSymbolAtLocation(source);
|
|
3388
|
+
return symbol !== undefined && lowerer.castGlobalAliases.has(symbol);
|
|
3389
|
+
}
|
|
3390
|
+
return false;
|
|
3391
|
+
}
|
|
3327
3392
|
/** True iff the symbol is declared ONLY by the adopted @types/node
|
|
3328
3393
|
* surface (no es-lib or shipped-ambient declaration merges in) — chooses
|
|
3329
3394
|
* the SC2020 fence's wording: "typed by @types/node", not "standard
|