@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
|
@@ -14,6 +14,7 @@ import { lowerArrayCallback, requireProducedArrayElement, callbackArrayElement,
|
|
|
14
14
|
import { reverseArrayLoop, arrayLengthDeclaration, arrayCallbackParams, arrayCallbackLocals, callArrayCallback, } from "./array-iteration.js";
|
|
15
15
|
import { dynamicReceiverThrows } from "./dynamic-receivers.js";
|
|
16
16
|
import { defaultAfterUndefined, lowerStaticallyUndefinedArgument } from "../optional-arguments.js";
|
|
17
|
+
import { checkedFilterNarrowing } from "./filter-predicates.js";
|
|
17
18
|
/** `a.map(fn)` / `a.filter(fn)` / `a.forEach(fn)` desugar to a direct
|
|
18
19
|
* call of a synthetic module function — one per method + element/result
|
|
19
20
|
* type + callback-arity combination, interned — whose body is a plain
|
|
@@ -69,28 +70,65 @@ export function lowerArrayHofCall(lowerer, call, access, method, elem) {
|
|
|
69
70
|
}
|
|
70
71
|
lowerer.badType(argNode, lowerer.typeOf(argNode));
|
|
71
72
|
}
|
|
72
|
-
const
|
|
73
|
+
const filtered = method === "filter"
|
|
73
74
|
? filterResultElem(lowerer, call, argNode, elem, valueT, booleanFilter)
|
|
74
|
-
:
|
|
75
|
+
: null;
|
|
76
|
+
const outElem = filtered !== null ? filtered.elem : callbackArrayElement(lowerer, call, fnRet);
|
|
75
77
|
// A filter that re-tags its elements keeps the single union-typed visit.
|
|
76
78
|
const fast = present || booleanFilter || (method === "filter" && !typeEquals(outElem, elem))
|
|
77
79
|
? null
|
|
78
80
|
: lowerFastCallback(lowerer, argNode, [valueT], 0, elem, arrayOf(elem), callback);
|
|
79
81
|
const helper = arrayHofHelper(lowerer, method, elem, fnRet, arity, loc, outElem, callbackSite(fast ?? fnArg), fast?.type ?? null, present);
|
|
80
82
|
const resultType = method === "map" || method === "filter" ? arrayOf(outElem) : VOID;
|
|
81
|
-
|
|
83
|
+
const result = {
|
|
82
84
|
kind: "call",
|
|
83
85
|
callee: helper,
|
|
84
86
|
args: [receiver, fnArg, ...(fast ? [fast] : [])],
|
|
85
87
|
type: resultType,
|
|
86
88
|
loc,
|
|
87
89
|
};
|
|
90
|
+
const narrowing = filtered?.narrowing ?? null;
|
|
91
|
+
if (narrowing === null)
|
|
92
|
+
return result;
|
|
93
|
+
return {
|
|
94
|
+
kind: "call",
|
|
95
|
+
callee: narrowing.helper,
|
|
96
|
+
args: [result],
|
|
97
|
+
type: arrayOf(narrowing.elem),
|
|
98
|
+
loc,
|
|
99
|
+
};
|
|
88
100
|
}
|
|
89
|
-
/** The
|
|
90
|
-
*
|
|
91
|
-
* predicate
|
|
92
|
-
*
|
|
101
|
+
/** The element a filter keeps, and the checked conversion of the result
|
|
102
|
+
* to the checker's narrower element when the predicate does not prove it.
|
|
103
|
+
* An inferred inline type predicate proves one source arm, or a class
|
|
104
|
+
* view, so the loop keeps that type directly. A written predicate (`(p): p
|
|
105
|
+
* is Cat => ...`, a guard function passed as a value) is an assertion
|
|
106
|
+
* TypeScript does not check, and an inferred predicate that keeps several
|
|
107
|
+
* arms has no single arm to re-tag: the loop keeps the receiver's element
|
|
108
|
+
* and `narrowing` (checkedFilterNarrowing) converts each kept element.
|
|
109
|
+
* Boolean is safe when every discarded arm is a nullish unit. */
|
|
93
110
|
function filterResultElem(lowerer, call, argNode, elem, valueT, booleanFilter) {
|
|
111
|
+
const kept = filterKeptElem(lowerer, call, argNode, elem, valueT, booleanFilter);
|
|
112
|
+
if (typeof kept !== "string")
|
|
113
|
+
return { elem: kept, narrowing: null };
|
|
114
|
+
return { elem, narrowing: { helper: kept, elem: filterCheckerElem(lowerer, call, elem) } };
|
|
115
|
+
}
|
|
116
|
+
/** The checker's spelling of a filter result's element type. */
|
|
117
|
+
function filterTypeText(lowerer, call) {
|
|
118
|
+
const result = lowerer.typeOf(call);
|
|
119
|
+
const element = lowerer.checker.isArrayType(result)
|
|
120
|
+
? lowerer.checker.getTypeArguments(result)[0]
|
|
121
|
+
: undefined;
|
|
122
|
+
return element === undefined ? "" : lowerer.checker.typeToString(element);
|
|
123
|
+
}
|
|
124
|
+
/** The checker's element of a filter result, or the receiver's when the
|
|
125
|
+
* filter introduces no refinement. */
|
|
126
|
+
function filterCheckerElem(lowerer, call, elem) {
|
|
127
|
+
const result = lowerer.mapTypeOf(lowerer.typeOf(call));
|
|
128
|
+
return result?.kind === "array" ? result.elem : elem;
|
|
129
|
+
}
|
|
130
|
+
/** filterResultElem's element, or the name of the checked narrowing helper. */
|
|
131
|
+
function filterKeptElem(lowerer, call, argNode, elem, valueT, booleanFilter) {
|
|
94
132
|
const callT = lowerer.typeOf(call);
|
|
95
133
|
const result = lowerer.mapTypeOf(callT);
|
|
96
134
|
let outElem = result?.kind === "array" ? result.elem : elem;
|
|
@@ -114,19 +152,29 @@ function filterResultElem(lowerer, call, argNode, elem, valueT, booleanFilter) {
|
|
|
114
152
|
const annotateEscape = "keep the receiver's element type instead — annotate the callback's return ': boolean' " +
|
|
115
153
|
"(the checker then skips the predicate) or annotate the result with the receiver's own " +
|
|
116
154
|
"element type — and narrow the elements after";
|
|
117
|
-
|
|
155
|
+
const written = !booleanFilter &&
|
|
156
|
+
((!ts.isArrowFunction(argNode) && !ts.isFunctionExpression(argNode)) ||
|
|
157
|
+
argNode.type !== undefined);
|
|
158
|
+
const narrowing = booleanFilter
|
|
159
|
+
? null
|
|
160
|
+
: () => checkedFilterNarrowing(lowerer, elem, outElem, filterTypeText(lowerer, call), locOf(call));
|
|
161
|
+
if (written) {
|
|
162
|
+
const helper = narrowing();
|
|
163
|
+
if (helper !== null)
|
|
164
|
+
return helper;
|
|
118
165
|
if (!ts.isArrowFunction(argNode) && !ts.isFunctionExpression(argNode)) {
|
|
119
|
-
lowerer.unsupported("SC1090", argNode, `narrowing '.filter' through a callback VALUE (
|
|
120
|
-
`
|
|
121
|
-
}
|
|
122
|
-
if (argNode.type) {
|
|
123
|
-
lowerer.unsupported("SC1090", argNode, `narrowing '.filter' with a hand-written type predicate (a written 'x is T' is an ` +
|
|
124
|
-
`unchecked assertion nothing validates at runtime — ${annotateEscape})`);
|
|
166
|
+
lowerer.unsupported("SC1090", argNode, `narrowing '.filter' to '${lowerer.fmt(outElem)}' through a callback VALUE (no checked ` +
|
|
167
|
+
`conversion from '${lowerer.fmt(elem)}' — ${annotateEscape})`);
|
|
125
168
|
}
|
|
169
|
+
lowerer.unsupported("SC1090", argNode, `narrowing '.filter' to '${lowerer.fmt(outElem)}' with a hand-written type predicate (no ` +
|
|
170
|
+
`checked conversion from '${lowerer.fmt(elem)}' — ${annotateEscape})`);
|
|
126
171
|
}
|
|
127
172
|
const classRefinement = !booleanFilter && outElem.kind === "object" && canAssertClassValue(lowerer, valueT, outElem);
|
|
128
173
|
if (!classRefinement &&
|
|
129
174
|
(valueT.kind !== "union" || lowerer.armTag(valueT.unionId, outElem) < 0)) {
|
|
175
|
+
const helper = narrowing?.() ?? null;
|
|
176
|
+
if (helper !== null)
|
|
177
|
+
return helper;
|
|
130
178
|
const multiArm = outElem.kind === "union";
|
|
131
179
|
lowerer.unsupported("SC1090", call, `'.filter' narrowing '${lowerer.fmt(elem)}' elements to ` +
|
|
132
180
|
`${multiArm ? `the multi-arm '${lowerer.fmt(outElem)}'` : `'${lowerer.fmt(outElem)}'`} ` +
|
|
@@ -591,6 +639,10 @@ function buildArrayHofFn(lowerer, name, method, elem, fnRet, arity, loc, outElem
|
|
|
591
639
|
loc,
|
|
592
640
|
},
|
|
593
641
|
readLen,
|
|
642
|
+
// map's result has the receiver's length, holes where the receiver
|
|
643
|
+
// has them. Storage for it is reserved first and the length is set
|
|
644
|
+
// after the loop, so a result without holes is filled by appends and
|
|
645
|
+
// gets no state bytes.
|
|
594
646
|
...(method === "map"
|
|
595
647
|
? [
|
|
596
648
|
{
|
|
@@ -598,6 +650,7 @@ function buildArrayHofFn(lowerer, name, method, elem, fnRet, arity, loc, outElem
|
|
|
598
650
|
arr: varRef("out.0", outT, loc),
|
|
599
651
|
length: varRef("n.0", F64, loc),
|
|
600
652
|
loc,
|
|
653
|
+
reserve: true,
|
|
601
654
|
},
|
|
602
655
|
]
|
|
603
656
|
: []),
|
|
@@ -622,6 +675,16 @@ function buildArrayHofFn(lowerer, name, method, elem, fnRet, arity, loc, outElem
|
|
|
622
675
|
loc,
|
|
623
676
|
},
|
|
624
677
|
]),
|
|
678
|
+
...(method === "map"
|
|
679
|
+
? [
|
|
680
|
+
{
|
|
681
|
+
kind: "arraySetLength",
|
|
682
|
+
arr: varRef("out.0", outT, loc),
|
|
683
|
+
length: varRef("n.0", F64, loc),
|
|
684
|
+
loc,
|
|
685
|
+
},
|
|
686
|
+
]
|
|
687
|
+
: []),
|
|
625
688
|
{ kind: "return", value: varRef("out.0", outT, loc), loc },
|
|
626
689
|
];
|
|
627
690
|
}
|
|
@@ -1104,6 +1167,19 @@ export function lowerArrayFlatMapCall(lowerer, call, access, elem) {
|
|
|
1104
1167
|
}
|
|
1105
1168
|
if (fnRet.kind === "union") {
|
|
1106
1169
|
const def = lowerer.unions.get(fnRet.unionId);
|
|
1170
|
+
const plan = def?.arms.some((a) => a.kind === "array")
|
|
1171
|
+
? flatMapUnionPlan(lowerer, call, argNode, fnRet)
|
|
1172
|
+
: null;
|
|
1173
|
+
if (plan) {
|
|
1174
|
+
const helper = flatMapUnionHelper(lowerer, elem, fnRet, arity, plan, loc, present);
|
|
1175
|
+
return {
|
|
1176
|
+
kind: "call",
|
|
1177
|
+
callee: helper,
|
|
1178
|
+
args: [receiver, fnArg],
|
|
1179
|
+
type: arrayOf(plan.outElem),
|
|
1180
|
+
loc,
|
|
1181
|
+
};
|
|
1182
|
+
}
|
|
1107
1183
|
if (def?.arms.some((a) => a.kind === "array")) {
|
|
1108
1184
|
lowerer.unsupported("SC1090", argNode, "'.flatMap' callbacks returning a union with an array arm (whether one value flattens " +
|
|
1109
1185
|
"would be a per-element decision — return an array from every path instead)");
|
|
@@ -1145,6 +1221,232 @@ export function lowerArrayFlatMapCall(lowerer, call, access, elem) {
|
|
|
1145
1221
|
loc,
|
|
1146
1222
|
};
|
|
1147
1223
|
}
|
|
1224
|
+
/** The plan for a callback returning `T | U[]`: every non-array arm must
|
|
1225
|
+
* convert into the result's element type without a check, and every
|
|
1226
|
+
* array arm's element type must be the result's. Null when an arm does
|
|
1227
|
+
* not. */
|
|
1228
|
+
function flatMapUnionPlan(lowerer, call, argNode, fnRet) {
|
|
1229
|
+
const out = lowerer.mapTypeOf(lowerer.typeOf(call));
|
|
1230
|
+
if (out?.kind !== "array")
|
|
1231
|
+
return null;
|
|
1232
|
+
const outElem = out.elem;
|
|
1233
|
+
const arms = lowerer.unions.get(fnRet.unionId)?.arms;
|
|
1234
|
+
if (!arms)
|
|
1235
|
+
return null;
|
|
1236
|
+
// The `never[]` constituents of the callback's checked result.
|
|
1237
|
+
const emptyArms = [];
|
|
1238
|
+
const signature = lowerer.checker.getCallSignatures(lowerer.typeOf(argNode))[0];
|
|
1239
|
+
if (signature) {
|
|
1240
|
+
const ret = lowerer.checker.getReturnTypeOfSignature(signature);
|
|
1241
|
+
for (const part of ret.isUnionType() ? ts.constituentTypes(ret) : [ret]) {
|
|
1242
|
+
if (!lowerer.checker.isArrayType(part))
|
|
1243
|
+
continue;
|
|
1244
|
+
const [element] = lowerer.checker.getTypeArguments(part);
|
|
1245
|
+
if (element === undefined || (element.flags & ts.TypeFlags.Never) === 0)
|
|
1246
|
+
continue;
|
|
1247
|
+
const mapped = lowerer.mapTypeOf(part);
|
|
1248
|
+
if (mapped)
|
|
1249
|
+
emptyArms.push(mapped);
|
|
1250
|
+
}
|
|
1251
|
+
}
|
|
1252
|
+
const converts = (t) => {
|
|
1253
|
+
if (typeEquals(t, outElem))
|
|
1254
|
+
return true;
|
|
1255
|
+
if (outElem.kind !== "union")
|
|
1256
|
+
return false;
|
|
1257
|
+
return lowerer.armTag(outElem.unionId, t) >= 0;
|
|
1258
|
+
};
|
|
1259
|
+
const plan = [];
|
|
1260
|
+
for (const arm of arms) {
|
|
1261
|
+
if (arm.kind === "array" && emptyArms.some((e) => typeEquals(e, arm)))
|
|
1262
|
+
plan.push("empty");
|
|
1263
|
+
// An array arm copies its elements as they are stored, a present
|
|
1264
|
+
// undefined included, so its element type is the result's.
|
|
1265
|
+
else if (arm.kind === "array" && typeEquals(arm.elem, outElem))
|
|
1266
|
+
plan.push("spread");
|
|
1267
|
+
else if (arm.kind !== "array" && converts(arm))
|
|
1268
|
+
plan.push("value");
|
|
1269
|
+
else
|
|
1270
|
+
return null;
|
|
1271
|
+
}
|
|
1272
|
+
return { outElem, arms: plan };
|
|
1273
|
+
}
|
|
1274
|
+
/** The flatMap loop over a union-returning callback: each result tests
|
|
1275
|
+
* its arm and appends its elements, nothing, or itself (Node's
|
|
1276
|
+
* IsArray decision per value). */
|
|
1277
|
+
function flatMapUnionHelper(lowerer, elem, fnRet, arity, plan, loc, present) {
|
|
1278
|
+
// The plan is part of the key: one union result type can carry an empty
|
|
1279
|
+
// `never[]` arm in one callback and a populated array arm in another.
|
|
1280
|
+
const key = `flatMapUnion:${typeKey(elem)}:${typeKey(fnRet)}:${typeKey(plan.outElem)}:${plan.arms.join(",")}:${arity}${present ? ":present" : ""}`;
|
|
1281
|
+
const existing = lowerer.arrHofHelpers.get(key);
|
|
1282
|
+
if (existing)
|
|
1283
|
+
return existing;
|
|
1284
|
+
const name = `%arr.flatMap.${lowerer.arrHofHelpers.size}`;
|
|
1285
|
+
lowerer.arrHofHelpers.set(key, name);
|
|
1286
|
+
const arrT = arrayOf(elem);
|
|
1287
|
+
const outT = arrayOf(plan.outElem);
|
|
1288
|
+
const fnT = funcOf([callbackValueType(lowerer, elem, present), F64, arrT].slice(0, arity), fnRet);
|
|
1289
|
+
const arms = lowerer.unions.get(fnRet.unionId).arms;
|
|
1290
|
+
const outRef = () => varRef("out.0", outT, loc);
|
|
1291
|
+
const resultRef = () => varRef("r.0", fnRet, loc);
|
|
1292
|
+
const outLength = () => ({
|
|
1293
|
+
kind: "arrIntrinsic",
|
|
1294
|
+
method: "length",
|
|
1295
|
+
receiver: outRef(),
|
|
1296
|
+
args: [],
|
|
1297
|
+
type: F64,
|
|
1298
|
+
loc,
|
|
1299
|
+
});
|
|
1300
|
+
const locals = [
|
|
1301
|
+
...arrayCallbackLocals(arrT, fnT),
|
|
1302
|
+
{ id: "out.0", name: "out", type: outT, mutable: false },
|
|
1303
|
+
{ id: "r.0", name: "r", type: fnRet, mutable: false },
|
|
1304
|
+
];
|
|
1305
|
+
const armBody = (tag) => {
|
|
1306
|
+
const arm = arms[tag];
|
|
1307
|
+
const narrowed = {
|
|
1308
|
+
kind: "unionNarrow",
|
|
1309
|
+
unionId: fnRet.unionId,
|
|
1310
|
+
tag,
|
|
1311
|
+
value: resultRef(),
|
|
1312
|
+
type: arm,
|
|
1313
|
+
loc,
|
|
1314
|
+
};
|
|
1315
|
+
if (plan.arms[tag] === "empty")
|
|
1316
|
+
return [];
|
|
1317
|
+
if (plan.arms[tag] === "value") {
|
|
1318
|
+
return [
|
|
1319
|
+
arrayValueStore(lowerer, outRef(), outLength(), lowerer.coerceToExpected(
|
|
1320
|
+
// A unit arm's value is the unit itself, which has no
|
|
1321
|
+
// narrowed representation.
|
|
1322
|
+
isUnitType(arm)
|
|
1323
|
+
? {
|
|
1324
|
+
kind: "unitLit",
|
|
1325
|
+
unit: arm.kind === "nullT" ? "null" : "undefined",
|
|
1326
|
+
type: arm,
|
|
1327
|
+
loc,
|
|
1328
|
+
}
|
|
1329
|
+
: narrowed, plan.outElem), plan.outElem, loc),
|
|
1330
|
+
];
|
|
1331
|
+
}
|
|
1332
|
+
const innerT = arm;
|
|
1333
|
+
const listId = `list.${tag}`;
|
|
1334
|
+
const lengthId = `m.${tag}`;
|
|
1335
|
+
const indexId = `j.${tag}`;
|
|
1336
|
+
const itemId = `inner.${tag}`;
|
|
1337
|
+
locals.push({ id: listId, name: "list", type: innerT, mutable: false }, { id: lengthId, name: "m", type: F64, mutable: false }, { id: indexId, name: "j", type: F64, mutable: true }, { id: itemId, name: "inner", type: arrayValueType(lowerer, innerT.elem), mutable: false });
|
|
1338
|
+
const list = () => varRef(listId, innerT, loc);
|
|
1339
|
+
const index = () => varRef(indexId, F64, loc);
|
|
1340
|
+
return [
|
|
1341
|
+
{ kind: "varDecl", localId: listId, init: narrowed, loc },
|
|
1342
|
+
{
|
|
1343
|
+
kind: "varDecl",
|
|
1344
|
+
localId: lengthId,
|
|
1345
|
+
init: {
|
|
1346
|
+
kind: "arrIntrinsic",
|
|
1347
|
+
method: "length",
|
|
1348
|
+
receiver: list(),
|
|
1349
|
+
args: [],
|
|
1350
|
+
type: F64,
|
|
1351
|
+
loc,
|
|
1352
|
+
},
|
|
1353
|
+
loc,
|
|
1354
|
+
},
|
|
1355
|
+
{
|
|
1356
|
+
kind: "for",
|
|
1357
|
+
init: { kind: "varDecl", localId: indexId, init: numLit(0, loc), loc },
|
|
1358
|
+
cond: {
|
|
1359
|
+
kind: "bin",
|
|
1360
|
+
op: "<",
|
|
1361
|
+
left: index(),
|
|
1362
|
+
right: varRef(lengthId, F64, loc),
|
|
1363
|
+
type: BOOL,
|
|
1364
|
+
loc,
|
|
1365
|
+
},
|
|
1366
|
+
update: {
|
|
1367
|
+
kind: "assign",
|
|
1368
|
+
localId: indexId,
|
|
1369
|
+
value: { kind: "bin", op: "+", left: index(), right: numLit(1, loc), type: F64, loc },
|
|
1370
|
+
loc,
|
|
1371
|
+
},
|
|
1372
|
+
body: [
|
|
1373
|
+
{
|
|
1374
|
+
kind: "if",
|
|
1375
|
+
cond: arrayIndexPresent(list(), index(), loc),
|
|
1376
|
+
then: [
|
|
1377
|
+
{
|
|
1378
|
+
kind: "varDecl",
|
|
1379
|
+
localId: itemId,
|
|
1380
|
+
init: arrayValueRead(lowerer, list(), index(), innerT.elem, loc),
|
|
1381
|
+
loc,
|
|
1382
|
+
},
|
|
1383
|
+
arrayValueStore(lowerer, outRef(), outLength(), varRef(itemId, arrayValueType(lowerer, innerT.elem), loc), plan.outElem, loc),
|
|
1384
|
+
],
|
|
1385
|
+
else_: null,
|
|
1386
|
+
loc,
|
|
1387
|
+
},
|
|
1388
|
+
],
|
|
1389
|
+
loc,
|
|
1390
|
+
},
|
|
1391
|
+
];
|
|
1392
|
+
};
|
|
1393
|
+
let dispatch = armBody(arms.length - 1);
|
|
1394
|
+
for (let tag = arms.length - 2; tag >= 0; tag--) {
|
|
1395
|
+
dispatch = [
|
|
1396
|
+
{
|
|
1397
|
+
kind: "if",
|
|
1398
|
+
cond: {
|
|
1399
|
+
kind: "unionIsTag",
|
|
1400
|
+
unionId: fnRet.unionId,
|
|
1401
|
+
tag,
|
|
1402
|
+
value: resultRef(),
|
|
1403
|
+
negated: false,
|
|
1404
|
+
type: BOOL,
|
|
1405
|
+
loc,
|
|
1406
|
+
},
|
|
1407
|
+
then: armBody(tag),
|
|
1408
|
+
else_: dispatch,
|
|
1409
|
+
loc,
|
|
1410
|
+
},
|
|
1411
|
+
];
|
|
1412
|
+
}
|
|
1413
|
+
const body = [
|
|
1414
|
+
{
|
|
1415
|
+
kind: "varDecl",
|
|
1416
|
+
localId: "out.0",
|
|
1417
|
+
init: { kind: "arrayLit", elems: [], type: outT, loc },
|
|
1418
|
+
loc,
|
|
1419
|
+
},
|
|
1420
|
+
arrayLengthDeclaration(arrT, loc),
|
|
1421
|
+
countedFor(loc, varRef("n.0", F64, loc), () => [
|
|
1422
|
+
{
|
|
1423
|
+
kind: "if",
|
|
1424
|
+
cond: currentArrayIndexPresent(arrT, loc),
|
|
1425
|
+
then: [
|
|
1426
|
+
{
|
|
1427
|
+
kind: "varDecl",
|
|
1428
|
+
localId: "r.0",
|
|
1429
|
+
init: callArrayCallback(arrT, fnT, fnRet, arity, callbackValueRead(lowerer, varRef("a.0", arrT, loc), varRef("i.0", F64, loc), elem, present, loc), loc),
|
|
1430
|
+
loc,
|
|
1431
|
+
},
|
|
1432
|
+
...dispatch,
|
|
1433
|
+
],
|
|
1434
|
+
else_: null,
|
|
1435
|
+
loc,
|
|
1436
|
+
},
|
|
1437
|
+
]),
|
|
1438
|
+
{ kind: "return", value: outRef(), loc },
|
|
1439
|
+
];
|
|
1440
|
+
lowerer.liftedFns.push({
|
|
1441
|
+
name,
|
|
1442
|
+
params: arrayCallbackParams(arrT, fnT),
|
|
1443
|
+
returnType: outT,
|
|
1444
|
+
locals,
|
|
1445
|
+
body,
|
|
1446
|
+
loc,
|
|
1447
|
+
});
|
|
1448
|
+
return name;
|
|
1449
|
+
}
|
|
1148
1450
|
/** The flatMap loop (array-returning callback), from existing IR nodes:
|
|
1149
1451
|
*
|
|
1150
1452
|
* out = []; n = a.length;
|
|
@@ -1485,16 +1787,17 @@ function reduceHelper(lowerer, method, elem, accT, fnRet, arity, hasInit, loc, s
|
|
|
1485
1787
|
* the left element first. Undefined values sink without reaching the user
|
|
1486
1788
|
* comparator. The callback sequence differs from V8's TimSort, so exact
|
|
1487
1789
|
* order and count parity are not claimed; results agree for consistent
|
|
1488
|
-
* comparators. Without a comparator, string, number
|
|
1489
|
-
* native stable ordering: their String conversions cannot call
|
|
1490
|
-
* Strings compare UTF-16 units; numbers compare their decimal
|
|
1491
|
-
* ([10, 9, 1] → [1, 10, 9])
|
|
1790
|
+
* comparators. Without a comparator, string, number, boolean and Date
|
|
1791
|
+
* arrays use native stable ordering: their String conversions cannot call
|
|
1792
|
+
* user code. Strings compare UTF-16 units; numbers compare their decimal
|
|
1793
|
+
* spellings ([10, 9, 1] → [1, 10, 9]); Dates compare their toString() text.
|
|
1794
|
+
* Other element types still need a comparator. */
|
|
1492
1795
|
export function lowerArraySortCall(lowerer, call, access, elem, arrT) {
|
|
1493
1796
|
const loc = locOf(call);
|
|
1494
1797
|
const method = access.name.text === "toSorted" ? "toSorted" : "sort";
|
|
1495
1798
|
const copyFirst = method === "toSorted";
|
|
1496
1799
|
if (call.arguments.nodes.length === 0 &&
|
|
1497
|
-
(elem.kind === "string" || elem.kind === "f64" || elem.kind === "bool")) {
|
|
1800
|
+
(elem.kind === "string" || elem.kind === "f64" || elem.kind === "bool" || elem.kind === "date")) {
|
|
1498
1801
|
return {
|
|
1499
1802
|
kind: "arrIntrinsic",
|
|
1500
1803
|
method: copyFirst ? "toSortedPrimitive" : "sortPrimitive",
|
|
@@ -1505,7 +1808,7 @@ export function lowerArraySortCall(lowerer, call, access, elem, arrT) {
|
|
|
1505
1808
|
};
|
|
1506
1809
|
}
|
|
1507
1810
|
if (call.arguments.nodes.length !== 1) {
|
|
1508
|
-
lowerer.noLowering(`.${method} with ${call.arguments.nodes.length} arguments`, call, "default ordering supports string[], number[] and
|
|
1811
|
+
lowerer.noLowering(`.${method} with ${call.arguments.nodes.length} arguments`, call, "default ordering supports string[], number[], boolean[] and Date[]; other element types need a comparator");
|
|
1509
1812
|
}
|
|
1510
1813
|
const receiver = lowerer.lowerExpr(access.expression);
|
|
1511
1814
|
const argNode = call.arguments.nodes[0];
|
|
@@ -2047,6 +2350,7 @@ export function lowerTuplePredicateCall(lowerer, call, method, receiver, elem, r
|
|
|
2047
2350
|
// the value type an array find narrows from.
|
|
2048
2351
|
let foundT = elem;
|
|
2049
2352
|
let retag = null;
|
|
2353
|
+
let narrowing = null;
|
|
2050
2354
|
if (method === "filter") {
|
|
2051
2355
|
// The element union is built in position order, so the checker's
|
|
2052
2356
|
// result element can list the same arms in another order.
|
|
@@ -2055,9 +2359,11 @@ export function lowerTuplePredicateCall(lowerer, call, method, receiver, elem, r
|
|
|
2055
2359
|
const unchanged = checkerResult?.kind === "array" &&
|
|
2056
2360
|
arms(checkerResult.elem).length === arms(elem).length &&
|
|
2057
2361
|
arms(checkerResult.elem).every((arm) => arms(elem).some((other) => typeEquals(arm, other)));
|
|
2058
|
-
|
|
2059
|
-
|
|
2060
|
-
|
|
2362
|
+
if (!unchanged) {
|
|
2363
|
+
const filtered = filterResultElem(lowerer, call, argNode, elem, elem, booleanFilter);
|
|
2364
|
+
outElem = filtered.elem;
|
|
2365
|
+
narrowing = filtered.narrowing;
|
|
2366
|
+
}
|
|
2061
2367
|
resultT = arrayOf(outElem);
|
|
2062
2368
|
}
|
|
2063
2369
|
else if (method === "find") {
|
|
@@ -2175,6 +2481,21 @@ export function lowerTuplePredicateCall(lowerer, call, method, receiver, elem, r
|
|
|
2175
2481
|
loc,
|
|
2176
2482
|
});
|
|
2177
2483
|
}
|
|
2178
|
-
|
|
2484
|
+
const result = {
|
|
2485
|
+
kind: "call",
|
|
2486
|
+
callee: helper,
|
|
2487
|
+
args: [receiver, fnArg],
|
|
2488
|
+
type: resultT,
|
|
2489
|
+
loc,
|
|
2490
|
+
};
|
|
2491
|
+
if (narrowing === null)
|
|
2492
|
+
return result;
|
|
2493
|
+
return {
|
|
2494
|
+
kind: "call",
|
|
2495
|
+
callee: narrowing.helper,
|
|
2496
|
+
args: [result],
|
|
2497
|
+
type: arrayOf(narrowing.elem),
|
|
2498
|
+
loc,
|
|
2499
|
+
};
|
|
2179
2500
|
}
|
|
2180
2501
|
//# sourceMappingURL=array-callbacks.js.map
|