@scriptc/compiler 0.3.5 → 0.4.0
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 +960 -82
- package/ambient/scriptc.d.ts +134 -0
- package/dist/backend/cycle-analysis.d.ts +1 -1
- package/dist/backend/cycle-analysis.js +1 -0
- package/dist/backend/cycle-analysis.js.map +1 -1
- package/dist/backend/cycle-analysis.test.js +13 -1
- package/dist/backend/cycle-analysis.test.js.map +1 -1
- package/dist/backend/cycle-mutability.js +16 -5
- package/dist/backend/cycle-mutability.js.map +1 -1
- package/dist/backend/executable-features.js +13 -0
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/immutability.test.js +1 -1
- package/dist/backend/library-pack.js +6 -0
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/llvm/alloc.d.ts +41 -4
- package/dist/backend/llvm/alloc.js +138 -7
- package/dist/backend/llvm/alloc.js.map +1 -1
- package/dist/backend/llvm/alloc.test.js +30 -1
- package/dist/backend/llvm/alloc.test.js.map +1 -1
- package/dist/backend/llvm/appended-array-literals.test.js +1 -1
- package/dist/backend/llvm/array-search.test.js +1 -1
- package/dist/backend/llvm/blocks.d.ts +8 -0
- package/dist/backend/llvm/blocks.js +43 -1
- package/dist/backend/llvm/blocks.js.map +1 -1
- package/dist/backend/llvm/blocks.test.js +22 -1
- package/dist/backend/llvm/blocks.test.js.map +1 -1
- package/dist/backend/llvm/byte-numbers.js +15 -5
- package/dist/backend/llvm/byte-numbers.js.map +1 -1
- package/dist/backend/llvm/bytes-alias.d.ts +14 -0
- package/dist/backend/llvm/bytes-alias.js +20 -0
- package/dist/backend/llvm/bytes-alias.js.map +1 -0
- package/dist/backend/llvm/bytes-loop-versions.d.ts +86 -0
- package/dist/backend/llvm/bytes-loop-versions.js +506 -0
- package/dist/backend/llvm/bytes-loop-versions.js.map +1 -0
- package/dist/backend/llvm/bytes-loop-versions.test.d.ts +1 -0
- package/dist/backend/llvm/bytes-loop-versions.test.js +244 -0
- package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -0
- package/dist/backend/llvm/call-lifetimes.js +50 -1
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.test.js +34 -0
- package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/checked-narrows.test.js +1 -1
- package/dist/backend/llvm/checked-value-lifetimes.js +4 -1
- package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
- package/dist/backend/llvm/classes.d.ts +11 -0
- package/dist/backend/llvm/classes.js +71 -14
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +58 -8
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/common.js +1 -0
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.d.ts +5 -1
- package/dist/backend/llvm/constant-callbacks.js +55 -12
- package/dist/backend/llvm/constant-callbacks.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.test.js +88 -1
- package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
- package/dist/backend/llvm/counted-loops.d.ts +4 -0
- package/dist/backend/llvm/counted-loops.js +37 -0
- package/dist/backend/llvm/counted-loops.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.d.ts +12 -3
- package/dist/backend/llvm/dense-array-access.js +72 -14
- package/dist/backend/llvm/dense-array-access.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.test.js +59 -3
- package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
- package/dist/backend/llvm/dense-array-loops.d.ts +51 -0
- package/dist/backend/llvm/dense-array-loops.js +162 -0
- package/dist/backend/llvm/dense-array-loops.js.map +1 -0
- package/dist/backend/llvm/dense-array-loops.test.d.ts +1 -0
- package/dist/backend/llvm/dense-array-loops.test.js +128 -0
- package/dist/backend/llvm/dense-array-loops.test.js.map +1 -0
- package/dist/backend/llvm/dyn-handle-tags.test.d.ts +1 -0
- package/dist/backend/llvm/dyn-handle-tags.test.js +38 -0
- package/dist/backend/llvm/dyn-handle-tags.test.js.map +1 -0
- package/dist/backend/llvm/dyn.d.ts +28 -4
- package/dist/backend/llvm/dyn.js +324 -179
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.d.ts +64 -0
- package/dist/backend/llvm/emit-function.js +1190 -0
- package/dist/backend/llvm/emit-function.js.map +1 -0
- package/dist/backend/llvm/emit-module.d.ts +24 -0
- package/dist/backend/llvm/emit-module.js +1535 -0
- package/dist/backend/llvm/emit-module.js.map +1 -0
- package/dist/backend/llvm/emit-statements.d.ts +58 -0
- package/dist/backend/llvm/emit-statements.js +1964 -0
- package/dist/backend/llvm/emit-statements.js.map +1 -0
- package/dist/backend/llvm/emitter.d.ts +576 -268
- package/dist/backend/llvm/emitter.js +801 -4447
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +57 -3
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +73 -46
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-async.test.js +1 -1
- package/dist/backend/llvm/expr-bytes.d.ts +2 -0
- package/dist/backend/llvm/expr-bytes.js +76 -29
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-callbacks.d.ts +6 -2
- package/dist/backend/llvm/expr-callbacks.js +48 -11
- package/dist/backend/llvm/expr-callbacks.js.map +1 -1
- package/dist/backend/llvm/expr-calls.d.ts +1 -1
- package/dist/backend/llvm/expr-calls.js +71 -53
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-calls.test.js +1 -1
- package/dist/backend/llvm/expr-containers.js +39 -15
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-control.js +16 -16
- package/dist/backend/llvm/expr-control.js.map +1 -1
- package/dist/backend/llvm/expr-dispatch.js +1 -0
- package/dist/backend/llvm/expr-dispatch.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.d.ts +3 -0
- package/dist/backend/llvm/expr-dynamic.js +92 -63
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.d.ts +1 -1
- package/dist/backend/llvm/expr-primitives.js +132 -25
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.test.js +2 -2
- package/dist/backend/llvm/expr-records.d.ts +1 -1
- package/dist/backend/llvm/expr-records.js +32 -11
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +54 -12
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.test.js +2 -2
- package/dist/backend/llvm/expr-stream-callbacks.js +22 -1
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/int32-abi.test.js +2 -2
- package/dist/backend/llvm/integer-clones.test.js +3 -3
- package/dist/backend/llvm/integer-remainder.d.ts +34 -13
- package/dist/backend/llvm/integer-remainder.js +156 -22
- package/dist/backend/llvm/integer-remainder.js.map +1 -1
- package/dist/backend/llvm/intern-tables.test.js +1 -1
- package/dist/backend/llvm/jsval-encoding.d.ts +21 -0
- package/dist/backend/llvm/jsval-encoding.js +20 -0
- package/dist/backend/llvm/jsval-encoding.js.map +1 -0
- package/dist/backend/llvm/jsval.d.ts +12 -0
- package/dist/backend/llvm/jsval.js +488 -0
- package/dist/backend/llvm/jsval.js.map +1 -0
- package/dist/backend/llvm/lazy-captures.d.ts +12 -2
- package/dist/backend/llvm/lazy-captures.js +39 -17
- package/dist/backend/llvm/lazy-captures.js.map +1 -1
- package/dist/backend/llvm/lib-abi.js +1 -1
- package/dist/backend/llvm/lib-abi.js.map +1 -1
- package/dist/backend/llvm/lib-connect.js +1 -1
- package/dist/backend/llvm/lib-connect.js.map +1 -1
- package/dist/backend/llvm/lib-datagram.js +14 -8
- package/dist/backend/llvm/lib-datagram.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +217 -24
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +102 -13
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-http2.js +3 -3
- package/dist/backend/llvm/lib-http2.js.map +1 -1
- package/dist/backend/llvm/lib-lookup.js +2 -2
- package/dist/backend/llvm/lib-lookup.js.map +1 -1
- package/dist/backend/llvm/lib-network.js +77 -25
- package/dist/backend/llvm/lib-network.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +100 -50
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.d.ts +12 -0
- package/dist/backend/llvm/lib-shared.js +229 -5
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +46 -16
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/lib-test.js +57 -8
- package/dist/backend/llvm/lib-test.js.map +1 -1
- package/dist/backend/llvm/lib-tls.js +4 -9
- package/dist/backend/llvm/lib-tls.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +2 -2
- package/dist/backend/llvm/local-array-reads.test.js +1 -1
- package/dist/backend/llvm/local-extents.d.ts +19 -0
- package/dist/backend/llvm/local-extents.js +169 -0
- package/dist/backend/llvm/local-extents.js.map +1 -0
- package/dist/backend/llvm/local-extents.test.d.ts +1 -0
- package/dist/backend/llvm/local-extents.test.js +92 -0
- package/dist/backend/llvm/local-extents.test.js.map +1 -0
- package/dist/backend/llvm/local-union-storage.js +7 -7
- package/dist/backend/llvm/local-union-storage.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.test.js +2 -2
- package/dist/backend/llvm/map-entry-fusion.test.js +1 -1
- package/dist/backend/llvm/map-number-lookup.js +2 -2
- package/dist/backend/llvm/map-number-lookup.test.js +2 -2
- package/dist/backend/llvm/map-read-lifetimes.test.js +2 -2
- package/dist/backend/llvm/narrow-guards.d.ts +38 -0
- package/dist/backend/llvm/narrow-guards.js +151 -0
- package/dist/backend/llvm/narrow-guards.js.map +1 -0
- package/dist/backend/llvm/nullable-unions.d.ts +70 -9
- package/dist/backend/llvm/nullable-unions.js +105 -6
- package/dist/backend/llvm/nullable-unions.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.test.d.ts +1 -0
- package/dist/backend/llvm/nullable-unions.test.js +65 -0
- package/dist/backend/llvm/nullable-unions.test.js.map +1 -0
- package/dist/backend/llvm/publish.d.ts +4 -0
- package/dist/backend/llvm/publish.js +14 -2
- package/dist/backend/llvm/publish.js.map +1 -1
- package/dist/backend/llvm/publish.test.js +1 -1
- package/dist/backend/llvm/receivers.d.ts +31 -0
- package/dist/backend/llvm/receivers.js +395 -0
- package/dist/backend/llvm/receivers.js.map +1 -0
- package/dist/backend/llvm/record-results.d.ts +13 -2
- package/dist/backend/llvm/record-results.js +66 -6
- package/dist/backend/llvm/record-results.js.map +1 -1
- package/dist/backend/llvm/reference-effects.js +9 -0
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- package/dist/backend/llvm/reference-writes.d.ts +4 -0
- package/dist/backend/llvm/reference-writes.js +143 -6
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/reference-writes.test.d.ts +1 -0
- package/dist/backend/llvm/reference-writes.test.js +88 -0
- package/dist/backend/llvm/reference-writes.test.js.map +1 -0
- package/dist/backend/llvm/regex-matchers.d.ts +8 -0
- package/dist/backend/llvm/regex-matchers.js +33 -0
- package/dist/backend/llvm/regex-matchers.js.map +1 -1
- package/dist/backend/llvm/regex-matchers.test.js +23 -1
- package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
- package/dist/backend/llvm/regions.d.ts +1 -1
- package/dist/backend/llvm/regions.js +9 -6
- package/dist/backend/llvm/regions.js.map +1 -1
- package/dist/backend/llvm/regions.test.js +1 -1
- package/dist/backend/llvm/shapes.d.ts +69 -43
- package/dist/backend/llvm/shapes.js +285 -21
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +37 -3
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/speculative-integers.d.ts +74 -0
- package/dist/backend/llvm/speculative-integers.js +571 -0
- package/dist/backend/llvm/speculative-integers.js.map +1 -0
- package/dist/backend/llvm/speculative-integers.test.d.ts +1 -0
- package/dist/backend/llvm/speculative-integers.test.js +148 -0
- package/dist/backend/llvm/speculative-integers.test.js.map +1 -0
- package/dist/backend/llvm/split-loops.js +2 -2
- package/dist/backend/llvm/split-loops.js.map +1 -1
- package/dist/backend/llvm/stack-objects.d.ts +26 -6
- package/dist/backend/llvm/stack-objects.js +133 -10
- package/dist/backend/llvm/stack-objects.js.map +1 -1
- package/dist/backend/llvm/stack-objects.test.js +55 -1
- package/dist/backend/llvm/stack-objects.test.js.map +1 -1
- package/dist/backend/llvm/stack-unions.test.js +1 -1
- package/dist/backend/llvm/string-construction.test.js +1 -1
- package/dist/backend/llvm/string-lifetimes.test.js +15 -14
- package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/string-slices.d.ts +25 -0
- package/dist/backend/llvm/string-slices.js +207 -1
- package/dist/backend/llvm/string-slices.js.map +1 -1
- package/dist/backend/llvm/string-slices.test.js +139 -2
- package/dist/backend/llvm/string-slices.test.js.map +1 -1
- package/dist/backend/llvm/switch-dispatch.test.js +2 -2
- package/dist/backend/llvm/thread-slots.d.ts +5 -0
- package/dist/backend/llvm/thread-slots.js +142 -0
- package/dist/backend/llvm/thread-slots.js.map +1 -0
- package/dist/backend/llvm/thread-slots.test.d.ts +1 -0
- package/dist/backend/llvm/thread-slots.test.js +110 -0
- package/dist/backend/llvm/thread-slots.test.js.map +1 -0
- package/dist/backend/llvm/union-repr.d.ts +7 -7
- package/dist/backend/llvm/union-repr.js +18 -2
- package/dist/backend/llvm/union-repr.js.map +1 -1
- package/dist/backend/llvm/union-retype.test.js +17 -3
- package/dist/backend/llvm/union-retype.test.js.map +1 -1
- package/dist/backend/llvm/walkers.d.ts +2 -2
- package/dist/backend/llvm/walkers.js +51 -26
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/llvm/wasm-modules.d.ts +16 -0
- package/dist/backend/llvm/wasm-modules.js +66 -0
- package/dist/backend/llvm/wasm-modules.js.map +1 -0
- package/dist/backend/llvm/wrapping-sums.d.ts +7 -0
- package/dist/backend/llvm/wrapping-sums.js +11 -3
- package/dist/backend/llvm/wrapping-sums.js.map +1 -1
- package/dist/backend/mangle.d.ts +7 -0
- package/dist/backend/mangle.js +11 -0
- package/dist/backend/mangle.js.map +1 -1
- package/dist/backend/may-throw.d.ts +3 -0
- package/dist/backend/may-throw.js +6 -2
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/may-throw.test.js +1 -1
- package/dist/backend/native/contracts.d.ts +37 -0
- package/dist/backend/native/executable.js +192 -134
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/library.js +1 -0
- package/dist/backend/native/library.js.map +1 -1
- package/dist/backend/native/runtime-inputs.d.ts +1 -1
- package/dist/backend/native/runtime-inputs.js +2 -0
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +30 -0
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/publication.test.js +1 -1
- package/dist/backend/runtime-pack-core.d.ts +9 -1
- package/dist/backend/runtime-pack-core.js +10 -1
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-native.js +1 -1
- package/dist/backend/runtime-pack-native.js.map +1 -1
- package/dist/backend/runtime-pack-native.test.d.ts +1 -0
- package/dist/backend/runtime-pack-native.test.js +31 -0
- package/dist/backend/runtime-pack-native.test.js.map +1 -0
- package/dist/backend/runtime-pack-targets.test.js +5 -0
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.d.ts +7 -3
- package/dist/backend/runtime-pack.js +12 -6
- package/dist/backend/runtime-pack.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +20 -6
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/stack-observations.d.ts +22 -0
- package/dist/backend/stack-observations.js +382 -0
- package/dist/backend/stack-observations.js.map +1 -0
- package/dist/backend/stack-observations.test.d.ts +1 -0
- package/dist/backend/stack-observations.test.js +233 -0
- package/dist/backend/stack-observations.test.js.map +1 -0
- package/dist/backend/target-diagnostics.js +8 -0
- package/dist/backend/target-diagnostics.js.map +1 -1
- package/dist/backend/target-diagnostics.test.js +1 -1
- package/dist/backend/warm-cache.js +5 -0
- package/dist/backend/warm-cache.js.map +1 -1
- package/dist/backend/young-nursery.d.ts +7 -0
- package/dist/backend/young-nursery.js +10 -0
- package/dist/backend/young-nursery.js.map +1 -0
- package/dist/cli/command.js +44 -4
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/usage.d.ts +11 -1
- package/dist/cli/usage.js +20 -1
- package/dist/cli/usage.js.map +1 -1
- package/dist/compat/fetch-profile.js +10 -1
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/compile-types.d.ts +13 -0
- package/dist/contracts/check.js +25 -6
- package/dist/contracts/check.js.map +1 -1
- package/dist/contracts/int32-elements.d.ts +115 -0
- package/dist/contracts/int32-elements.js +1179 -0
- package/dist/contracts/int32-elements.js.map +1 -0
- package/dist/coverage/report.d.ts +16 -0
- package/dist/coverage/report.js +182 -1
- package/dist/coverage/report.js.map +1 -1
- package/dist/coverage/surface-manifest.js +19 -6
- package/dist/coverage/surface-manifest.js.map +1 -1
- package/dist/coverage/verdict-cache.d.ts +2 -0
- package/dist/coverage/verdict-cache.js +12 -0
- package/dist/coverage/verdict-cache.js.map +1 -1
- package/dist/coverage/verdict-cache.test.js +2 -1
- package/dist/coverage/verdict-cache.test.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +11 -7
- package/dist/diagnostics/diagnostic.js +35 -23
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/envelope.d.ts +39 -2
- package/dist/diagnostics/envelope.js.map +1 -1
- package/dist/diagnostics/render.d.ts +7 -0
- package/dist/diagnostics/render.js +50 -13
- package/dist/diagnostics/render.js.map +1 -1
- package/dist/diagnostics/render.test.d.ts +1 -0
- package/dist/diagnostics/render.test.js +49 -0
- package/dist/diagnostics/render.test.js.map +1 -0
- package/dist/executable/executable-cache.d.ts +17 -0
- package/dist/executable/executable-cache.js +13 -1
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +7 -1
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/executable/prepare.js +2 -1
- package/dist/executable/prepare.js.map +1 -1
- package/dist/frontend/analysis.js +6 -1
- package/dist/frontend/analysis.js.map +1 -1
- package/dist/frontend/builtin-modules.d.ts +16 -2
- package/dist/frontend/builtin-modules.js +40 -7
- package/dist/frontend/builtin-modules.js.map +1 -1
- package/dist/frontend/cjs-syntax.js +52 -51
- package/dist/frontend/cjs-syntax.js.map +1 -1
- package/dist/frontend/contract-types.d.ts +3 -0
- package/dist/frontend/contract-types.js +36 -7
- package/dist/frontend/contract-types.js.map +1 -1
- package/dist/frontend/experimental-import.d.ts +5 -1
- package/dist/frontend/experimental-import.js +26 -7
- package/dist/frontend/experimental-import.js.map +1 -1
- package/dist/frontend/fork-target.js +20 -22
- package/dist/frontend/fork-target.js.map +1 -1
- package/dist/frontend/fork-target.test.js +2 -1
- package/dist/frontend/fork-target.test.js.map +1 -1
- package/dist/frontend/function-completion.js +6 -6
- package/dist/frontend/function-completion.js.map +1 -1
- package/dist/frontend/helper-tokens.js +15 -3
- package/dist/frontend/helper-tokens.js.map +1 -1
- package/dist/frontend/helper-tokens.test.js +7 -1
- package/dist/frontend/helper-tokens.test.js.map +1 -1
- package/dist/frontend/inferred-js-diagnostics.js +14 -17
- package/dist/frontend/inferred-js-diagnostics.js.map +1 -1
- package/dist/frontend/input-tracker.d.ts +3 -0
- package/dist/frontend/input-tracker.js +32 -3
- package/dist/frontend/input-tracker.js.map +1 -1
- package/dist/frontend/lib-contract.js +36 -32
- package/dist/frontend/lib-contract.js.map +1 -1
- package/dist/frontend/lib-exports.js +3 -3
- package/dist/frontend/lib-exports.js.map +1 -1
- package/dist/frontend/lowering/array-values.d.ts +8 -3
- package/dist/frontend/lowering/array-values.js +60 -11
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/assert-instances.js +4 -4
- package/dist/frontend/lowering/assert-instances.js.map +1 -1
- package/dist/frontend/lowering/assertion-identity.d.ts +12 -0
- package/dist/frontend/lowering/assertion-identity.js +70 -0
- package/dist/frontend/lowering/assertion-identity.js.map +1 -0
- package/dist/frontend/lowering/assertion-members.d.ts +28 -0
- package/dist/frontend/lowering/assertion-members.js +185 -0
- package/dist/frontend/lowering/assertion-members.js.map +1 -0
- package/dist/frontend/lowering/binding-analysis.js +27 -20
- package/dist/frontend/lowering/binding-analysis.js.map +1 -1
- package/dist/frontend/lowering/builtin-calls.js +72 -4
- package/dist/frontend/lowering/builtin-calls.js.map +1 -1
- package/dist/frontend/lowering/builtin-function-fences.d.ts +14 -0
- package/dist/frontend/lowering/builtin-function-fences.js +42 -0
- package/dist/frontend/lowering/builtin-function-fences.js.map +1 -0
- package/dist/frontend/lowering/builtins/arguments.js +1 -1
- package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
- package/dist/frontend/lowering/builtins/async-context.js +53 -52
- package/dist/frontend/lowering/builtins/async-context.js.map +1 -1
- package/dist/frontend/lowering/builtins/atomics.js +6 -6
- package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
- package/dist/frontend/lowering/builtins/blob.js +8 -6
- package/dist/frontend/lowering/builtins/blob.js.map +1 -1
- package/dist/frontend/lowering/builtins/builtin-class-dyn.d.ts +23 -0
- package/dist/frontend/lowering/builtins/builtin-class-dyn.js +156 -0
- package/dist/frontend/lowering/builtins/builtin-class-dyn.js.map +1 -0
- package/dist/frontend/lowering/builtins/callable-aliases.js +45 -6
- package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-async.js +7 -7
- package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-methods.d.ts +6 -4
- package/dist/frontend/lowering/builtins/child-process-methods.js +310 -57
- package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-sync.js +16 -10
- package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process.d.ts +6 -4
- package/dist/frontend/lowering/builtins/child-process.js +85 -61
- package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
- package/dist/frontend/lowering/builtins/class-values.d.ts +60 -0
- package/dist/frontend/lowering/builtins/class-values.js +226 -0
- package/dist/frontend/lowering/builtins/class-values.js.map +1 -0
- package/dist/frontend/lowering/builtins/compression.d.ts +18 -0
- package/dist/frontend/lowering/builtins/compression.js +230 -52
- package/dist/frontend/lowering/builtins/compression.js.map +1 -1
- package/dist/frontend/lowering/builtins/constants.d.ts +9 -1
- package/dist/frontend/lowering/builtins/constants.js +28 -7
- package/dist/frontend/lowering/builtins/constants.js.map +1 -1
- package/dist/frontend/lowering/builtins/crypto.d.ts +19 -0
- package/dist/frontend/lowering/builtins/crypto.js +223 -38
- package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
- package/dist/frontend/lowering/builtins/dates.d.ts +7 -1
- package/dist/frontend/lowering/builtins/dates.js +92 -16
- package/dist/frontend/lowering/builtins/dates.js.map +1 -1
- package/dist/frontend/lowering/builtins/disposable-stack.d.ts +18 -0
- package/dist/frontend/lowering/builtins/disposable-stack.js +137 -0
- package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -0
- package/dist/frontend/lowering/builtins/environment.js +3 -3
- package/dist/frontend/lowering/builtins/environment.js.map +1 -1
- package/dist/frontend/lowering/builtins/errors.d.ts +14 -10
- package/dist/frontend/lowering/builtins/errors.js +174 -6
- package/dist/frontend/lowering/builtins/errors.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +4 -0
- package/dist/frontend/lowering/builtins/filesystem-calls.js +136 -113
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem.d.ts +8 -0
- package/dist/frontend/lowering/builtins/filesystem.js +213 -76
- package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-glob.js +3 -3
- package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-streams.js +10 -11
- package/dist/frontend/lowering/builtins/fs-streams.js.map +1 -1
- package/dist/frontend/lowering/builtins/hash-stream.d.ts +12 -0
- package/dist/frontend/lowering/builtins/hash-stream.js +80 -0
- package/dist/frontend/lowering/builtins/hash-stream.js.map +1 -0
- package/dist/frontend/lowering/builtins/ipc.js +45 -8
- package/dist/frontend/lowering/builtins/ipc.js.map +1 -1
- package/dist/frontend/lowering/builtins/json.js +232 -24
- package/dist/frontend/lowering/builtins/json.js.map +1 -1
- package/dist/frontend/lowering/builtins/key-object.js +4 -4
- package/dist/frontend/lowering/builtins/key-object.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-bindings.d.ts +8 -0
- package/dist/frontend/lowering/builtins/module-bindings.js +71 -22
- package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-calls.js +67 -46
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-resolution.d.ts +4 -3
- package/dist/frontend/lowering/builtins/module-resolution.js +24 -23
- package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
- package/dist/frontend/lowering/builtins/navigator.d.ts +13 -0
- package/dist/frontend/lowering/builtins/navigator.js +40 -0
- package/dist/frontend/lowering/builtins/navigator.js.map +1 -0
- package/dist/frontend/lowering/builtins/net-address.d.ts +19 -0
- package/dist/frontend/lowering/builtins/net-address.js +156 -0
- package/dist/frontend/lowering/builtins/net-address.js.map +1 -0
- package/dist/frontend/lowering/builtins/numbers.js +25 -9
- package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
- package/dist/frontend/lowering/builtins/operating-system.d.ts +4 -0
- package/dist/frontend/lowering/builtins/operating-system.js +25 -12
- package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
- package/dist/frontend/lowering/builtins/performance.d.ts +12 -0
- package/dist/frontend/lowering/builtins/performance.js +259 -8
- package/dist/frontend/lowering/builtins/performance.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.d.ts +32 -1
- package/dist/frontend/lowering/builtins/process.js +468 -99
- package/dist/frontend/lowering/builtins/process.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.d.ts +5 -1
- package/dist/frontend/lowering/builtins/promises.js +326 -43
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/builtins/promisify-callback.d.ts +37 -0
- package/dist/frontend/lowering/builtins/promisify-callback.js +320 -0
- package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -0
- package/dist/frontend/lowering/builtins/properties.js +37 -1
- package/dist/frontend/lowering/builtins/properties.js.map +1 -1
- package/dist/frontend/lowering/builtins/querystring.js +14 -14
- package/dist/frontend/lowering/builtins/querystring.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +55 -13
- package/dist/frontend/lowering/builtins/readline.js +931 -69
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/receiver-types.js +3 -5
- package/dist/frontend/lowering/builtins/receiver-types.js.map +1 -1
- package/dist/frontend/lowering/builtins/reflection.js +16 -14
- package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
- package/dist/frontend/lowering/builtins/runtime-constructor.d.ts +26 -0
- package/dist/frontend/lowering/builtins/runtime-constructor.js +165 -0
- package/dist/frontend/lowering/builtins/runtime-constructor.js.map +1 -0
- package/dist/frontend/lowering/builtins/strings.js +101 -12
- package/dist/frontend/lowering/builtins/strings.js.map +1 -1
- package/dist/frontend/lowering/builtins/text-codecs.js +41 -38
- package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
- package/dist/frontend/lowering/builtins/timers.js +75 -30
- package/dist/frontend/lowering/builtins/timers.js.map +1 -1
- package/dist/frontend/lowering/builtins/url.d.ts +3 -0
- package/dist/frontend/lowering/builtins/url.js +120 -17
- package/dist/frontend/lowering/builtins/url.js.map +1 -1
- package/dist/frontend/lowering/builtins/util-types.js +20 -4
- package/dist/frontend/lowering/builtins/util-types.js.map +1 -1
- package/dist/frontend/lowering/builtins/v8.d.ts +11 -0
- package/dist/frontend/lowering/builtins/v8.js +105 -0
- package/dist/frontend/lowering/builtins/v8.js.map +1 -0
- package/dist/frontend/lowering/builtins/webassembly.d.ts +33 -0
- package/dist/frontend/lowering/builtins/webassembly.js +388 -0
- package/dist/frontend/lowering/builtins/webassembly.js.map +1 -0
- package/dist/frontend/lowering/builtins/webcrypto.d.ts +20 -0
- package/dist/frontend/lowering/builtins/webcrypto.js +112 -0
- package/dist/frontend/lowering/builtins/webcrypto.js.map +1 -0
- package/dist/frontend/lowering/builtins/workers.d.ts +16 -0
- package/dist/frontend/lowering/builtins/workers.js +246 -3
- package/dist/frontend/lowering/builtins/workers.js.map +1 -1
- package/dist/frontend/lowering/call-arguments.js +69 -14
- package/dist/frontend/lowering/call-arguments.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.d.ts +19 -1
- package/dist/frontend/lowering/call-signatures.js +254 -47
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/checked-promise-all.d.ts +3 -0
- package/dist/frontend/lowering/checked-promise-all.js +1 -1
- package/dist/frontend/lowering/checked-promise-all.js.map +1 -1
- package/dist/frontend/lowering/cjs-exports-object.d.ts +53 -0
- package/dist/frontend/lowering/cjs-exports-object.js +528 -0
- package/dist/frontend/lowering/cjs-exports-object.js.map +1 -0
- package/dist/frontend/lowering/cjs-inline-require.d.ts +86 -0
- package/dist/frontend/lowering/cjs-inline-require.js +314 -0
- package/dist/frontend/lowering/cjs-inline-require.js.map +1 -0
- package/dist/frontend/lowering/cjs-tsc-interop.d.ts +28 -0
- package/dist/frontend/lowering/cjs-tsc-interop.js +208 -0
- package/dist/frontend/lowering/cjs-tsc-interop.js.map +1 -0
- package/dist/frontend/lowering/class-attributes.d.ts +19 -0
- package/dist/frontend/lowering/class-attributes.js +378 -0
- package/dist/frontend/lowering/class-attributes.js.map +1 -0
- package/dist/frontend/lowering/class-callbacks.d.ts +3 -1
- package/dist/frontend/lowering/class-callbacks.js +21 -10
- package/dist/frontend/lowering/class-callbacks.js.map +1 -1
- package/dist/frontend/lowering/class-construction.js +49 -4
- package/dist/frontend/lowering/class-construction.js.map +1 -1
- package/dist/frontend/lowering/class-descriptors.d.ts +2 -0
- package/dist/frontend/lowering/class-descriptors.js +8 -8
- package/dist/frontend/lowering/class-descriptors.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +64 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +1115 -89
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-instance-constructor.js +1 -1
- package/dist/frontend/lowering/class-instance-constructor.js.map +1 -1
- package/dist/frontend/lowering/class-iterables.d.ts +11 -0
- package/dist/frontend/lowering/class-iterables.js +31 -0
- package/dist/frontend/lowering/class-iterables.js.map +1 -0
- package/dist/frontend/lowering/class-method-mutations.js +73 -35
- package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
- package/dist/frontend/lowering/class-method-values.js +56 -10
- package/dist/frontend/lowering/class-method-values.js.map +1 -1
- package/dist/frontend/lowering/class-protocol-dispatch.js +24 -22
- package/dist/frontend/lowering/class-protocol-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-protocols.d.ts +55 -0
- package/dist/frontend/lowering/class-protocols.js +738 -22
- package/dist/frontend/lowering/class-protocols.js.map +1 -1
- package/dist/frontend/lowering/class-prototypes.d.ts +6 -0
- package/dist/frontend/lowering/class-prototypes.js +80 -18
- package/dist/frontend/lowering/class-prototypes.js.map +1 -1
- package/dist/frontend/lowering/class-runtime-statics.js +1 -1
- package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
- package/dist/frontend/lowering/class-static-data.js +2 -2
- package/dist/frontend/lowering/class-static-data.js.map +1 -1
- package/dist/frontend/lowering/class-to-primitive.d.ts +25 -0
- package/dist/frontend/lowering/class-to-primitive.js +261 -0
- package/dist/frontend/lowering/class-to-primitive.js.map +1 -0
- package/dist/frontend/lowering/class-unions.d.ts +25 -0
- package/dist/frontend/lowering/class-unions.js +102 -1
- package/dist/frontend/lowering/class-unions.js.map +1 -1
- package/dist/frontend/lowering/code-generation.d.ts +14 -0
- package/dist/frontend/lowering/code-generation.js +127 -0
- package/dist/frontend/lowering/code-generation.js.map +1 -0
- package/dist/frontend/lowering/coercions/function-adapters.d.ts +16 -2
- package/dist/frontend/lowering/coercions/function-adapters.js +145 -3
- package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural-plans.js +25 -3
- package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +35 -3
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/coercions/unions.d.ts +15 -0
- package/dist/frontend/lowering/coercions/unions.js +57 -1
- package/dist/frontend/lowering/coercions/unions.js.map +1 -1
- package/dist/frontend/lowering/collection-ingestion.js +2 -2
- package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
- package/dist/frontend/lowering/collection-narrowing.js +2 -4
- package/dist/frontend/lowering/collection-narrowing.js.map +1 -1
- package/dist/frontend/lowering/construction-escapes.js +8 -8
- package/dist/frontend/lowering/construction-escapes.js.map +1 -1
- package/dist/frontend/lowering/construction-escapes.test.js +4 -4
- package/dist/frontend/lowering/construction-escapes.test.js.map +1 -1
- package/dist/frontend/lowering/constructor-returns.d.ts +61 -0
- package/dist/frontend/lowering/constructor-returns.js +477 -0
- package/dist/frontend/lowering/constructor-returns.js.map +1 -0
- package/dist/frontend/lowering/containers/array-callback-call.js +1 -1
- package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.d.ts +9 -0
- package/dist/frontend/lowering/containers/array-callbacks.js +266 -100
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-concat.js +1 -1
- package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.d.ts +0 -1
- package/dist/frontend/lowering/containers/array-construction.js +51 -13
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-from-async.d.ts +19 -0
- package/dist/frontend/lowering/containers/array-from-async.js +427 -0
- package/dist/frontend/lowering/containers/array-from-async.js.map +1 -0
- package/dist/frontend/lowering/containers/array-methods.js +89 -77
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/array-pipelines.js +1 -0
- package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.js +161 -101
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.d.ts +9 -1
- package/dist/frontend/lowering/containers/callback-arguments.js +55 -5
- package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-grouping.d.ts +7 -8
- package/dist/frontend/lowering/containers/collection-grouping.js +219 -27
- package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +81 -48
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/dynamic-receivers.js +1 -1
- package/dist/frontend/lowering/containers/dynamic-receivers.js.map +1 -1
- package/dist/frontend/lowering/containers/exec-result-uses.js +2 -2
- package/dist/frontend/lowering/containers/exec-result-uses.js.map +1 -1
- package/dist/frontend/lowering/containers/for-of.d.ts +6 -0
- package/dist/frontend/lowering/containers/for-of.js +19 -19
- package/dist/frontend/lowering/containers/for-of.js.map +1 -1
- package/dist/frontend/lowering/containers/indexed-objects.js +142 -57
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/containers/iterator-helpers.d.ts +53 -4
- package/dist/frontend/lowering/containers/iterator-helpers.js +1581 -462
- package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
- package/dist/frontend/lowering/containers/match-row-uses.d.ts +17 -0
- package/dist/frontend/lowering/containers/match-row-uses.js +264 -0
- package/dist/frontend/lowering/containers/match-row-uses.js.map +1 -0
- package/dist/frontend/lowering/containers/string-and-regexp.d.ts +14 -0
- package/dist/frontend/lowering/containers/string-and-regexp.js +419 -30
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/containers/string-replacement.js +1 -1
- package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
- package/dist/frontend/lowering/cycle-initialization.d.ts +4 -0
- package/dist/frontend/lowering/cycle-initialization.js +39 -0
- package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
- package/dist/frontend/lowering/deferred-module-initializers.js +47 -43
- package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
- package/dist/frontend/lowering/devirtualize.d.ts +1 -1
- package/dist/frontend/lowering/devirtualize.js +27 -7
- package/dist/frontend/lowering/devirtualize.js.map +1 -1
- package/dist/frontend/lowering/divergences.d.ts +0 -5
- package/dist/frontend/lowering/divergences.js +238 -128
- package/dist/frontend/lowering/divergences.js.map +1 -1
- package/dist/frontend/lowering/dyn-streams.d.ts +25 -0
- package/dist/frontend/lowering/dyn-streams.js +257 -0
- package/dist/frontend/lowering/dyn-streams.js.map +1 -0
- package/dist/frontend/lowering/error-methods.js +4 -1
- package/dist/frontend/lowering/error-methods.js.map +1 -1
- package/dist/frontend/lowering/error-name-order.d.ts +19 -0
- package/dist/frontend/lowering/error-name-order.js +93 -0
- package/dist/frontend/lowering/error-name-order.js.map +1 -0
- package/dist/frontend/lowering/expressions/array-literals.d.ts +21 -0
- package/dist/frontend/lowering/expressions/array-literals.js +703 -0
- package/dist/frontend/lowering/expressions/array-literals.js.map +1 -0
- package/dist/frontend/lowering/expressions/binary.d.ts +35 -0
- package/dist/frontend/lowering/expressions/binary.js +2483 -0
- package/dist/frontend/lowering/expressions/binary.js.map +1 -0
- package/dist/frontend/lowering/expressions/element-access.d.ts +31 -0
- package/dist/frontend/lowering/expressions/element-access.js +1797 -0
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -0
- package/dist/frontend/lowering/expressions/evaluation-safety.js +4 -3
- package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
- package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +38 -0
- package/dist/frontend/lowering/expressions/hosted-narrowing.js +160 -0
- package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -0
- package/dist/frontend/lowering/expressions/identifiers.d.ts +4 -0
- package/dist/frontend/lowering/expressions/identifiers.js +830 -0
- package/dist/frontend/lowering/expressions/identifiers.js.map +1 -0
- package/dist/frontend/lowering/expressions/keyed-field-targets.d.ts +40 -0
- package/dist/frontend/lowering/expressions/keyed-field-targets.js +226 -0
- package/dist/frontend/lowering/expressions/keyed-field-targets.js.map +1 -0
- package/dist/frontend/lowering/expressions/narrowing.d.ts +37 -0
- package/dist/frontend/lowering/expressions/narrowing.js +1322 -0
- package/dist/frontend/lowering/expressions/narrowing.js.map +1 -0
- package/dist/frontend/lowering/expressions/native-proxy.js +4 -4
- package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -1
- package/dist/frontend/lowering/expressions/nullish-assignment.js +45 -0
- 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 +253 -85
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.d.ts +2 -1
- package/dist/frontend/lowering/expressions/optional-chains.js +91 -14
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.d.ts +110 -0
- package/dist/frontend/lowering/expressions/property-access.js +3544 -0
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -0
- package/dist/frontend/lowering/expressions/relational.d.ts +28 -0
- package/dist/frontend/lowering/expressions/relational.js +1679 -0
- package/dist/frontend/lowering/expressions/relational.js.map +1 -0
- package/dist/frontend/lowering/expressions/typeof.d.ts +22 -0
- package/dist/frontend/lowering/expressions/typeof.js +538 -0
- package/dist/frontend/lowering/expressions/typeof.js.map +1 -0
- package/dist/frontend/lowering/expressions/union-fields.js +1 -1
- package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
- package/dist/frontend/lowering/expressions/updates.d.ts +21 -0
- package/dist/frontend/lowering/expressions/updates.js +780 -0
- package/dist/frontend/lowering/expressions/updates.js.map +1 -0
- package/dist/frontend/lowering/function-context.d.ts +10 -0
- package/dist/frontend/lowering/function-context.js +11 -1
- package/dist/frontend/lowering/function-context.js.map +1 -1
- package/dist/frontend/lowering/function-returns.js +52 -28
- package/dist/frontend/lowering/function-returns.js.map +1 -1
- package/dist/frontend/lowering/general-streams.d.ts +25 -0
- package/dist/frontend/lowering/general-streams.js +108 -0
- package/dist/frontend/lowering/general-streams.js.map +1 -0
- package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +7 -0
- package/dist/frontend/lowering/generator-dynamic-dispatch.js +172 -69
- package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.d.ts +39 -0
- package/dist/frontend/lowering/generic-functions.js +393 -75
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/import-meta.js +2 -2
- package/dist/frontend/lowering/import-meta.js.map +1 -1
- package/dist/frontend/lowering/intern-tables.js +10 -9
- package/dist/frontend/lowering/intern-tables.js.map +1 -1
- package/dist/frontend/lowering/iterator-adapters.d.ts +19 -0
- package/dist/frontend/lowering/iterator-adapters.js +331 -3
- package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
- package/dist/frontend/lowering/js-class-fields.d.ts +28 -0
- package/dist/frontend/lowering/js-class-fields.js +170 -0
- package/dist/frontend/lowering/js-class-fields.js.map +1 -0
- package/dist/frontend/lowering/js-dynamic-objects.d.ts +15 -0
- package/dist/frontend/lowering/js-dynamic-objects.js +299 -0
- package/dist/frontend/lowering/js-dynamic-objects.js.map +1 -0
- package/dist/frontend/lowering/js-dynamic-objects.test.d.ts +1 -0
- package/dist/frontend/lowering/js-dynamic-objects.test.js +35 -0
- package/dist/frontend/lowering/js-dynamic-objects.test.js.map +1 -0
- package/dist/frontend/lowering/json-require.d.ts +22 -0
- package/dist/frontend/lowering/json-require.js +131 -0
- package/dist/frontend/lowering/json-require.js.map +1 -0
- package/dist/frontend/lowering/key-order-witness.d.ts +44 -0
- package/dist/frontend/lowering/key-order-witness.js +641 -0
- package/dist/frontend/lowering/key-order-witness.js.map +1 -0
- package/dist/frontend/lowering/key-order-witness.test.d.ts +1 -0
- package/dist/frontend/lowering/key-order-witness.test.js +239 -0
- package/dist/frontend/lowering/key-order-witness.test.js.map +1 -0
- package/dist/frontend/lowering/lifetime-regions.js +7 -7
- package/dist/frontend/lowering/lifetime-regions.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +61 -60
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-async-iteration.d.ts +10 -1
- package/dist/frontend/lowering/lower-async-iteration.js +34 -6
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-builtin-values.d.ts +5 -0
- package/dist/frontend/lowering/lower-builtin-values.js +32 -3
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.js +1298 -452
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +50 -3
- package/dist/frontend/lowering/lower-classes.js +1499 -456
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-comptime.d.ts +4 -2
- package/dist/frontend/lowering/lower-comptime.js +111 -13
- package/dist/frontend/lowering/lower-comptime.js.map +1 -1
- package/dist/frontend/lowering/lower-console.js +13 -11
- package/dist/frontend/lowering/lower-console.js.map +1 -1
- package/dist/frontend/lowering/lower-dgram.d.ts +10 -0
- package/dist/frontend/lowering/lower-dgram.js +179 -8
- package/dist/frontend/lowering/lower-dgram.js.map +1 -1
- package/dist/frontend/lowering/lower-enums.js +113 -14
- package/dist/frontend/lowering/lower-enums.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.d.ts +16 -7
- package/dist/frontend/lowering/lower-event-emitter.js +268 -71
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-event-target.js +2 -2
- package/dist/frontend/lowering/lower-event-target.js.map +1 -1
- package/dist/frontend/lowering/lower-expando.js +17 -13
- package/dist/frontend/lowering/lower-expando.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +188 -186
- package/dist/frontend/lowering/lower-exprs.js +1493 -12407
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +68 -22
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.d.ts +6 -0
- package/dist/frontend/lowering/lower-generators.js +29 -16
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-global-value.js +5 -1
- package/dist/frontend/lowering/lower-global-value.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +354 -99
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-mixins.js +23 -20
- package/dist/frontend/lowering/lower-mixins.js.map +1 -1
- package/dist/frontend/lowering/lower-mock.d.ts +19 -2
- package/dist/frontend/lowering/lower-mock.js +557 -74
- package/dist/frontend/lowering/lower-mock.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +268 -61
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.d.ts +6 -0
- package/dist/frontend/lowering/lower-namespaces.js +45 -33
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-node-module.d.ts +16 -0
- package/dist/frontend/lowering/lower-node-module.js +147 -14
- package/dist/frontend/lowering/lower-node-module.js.map +1 -1
- package/dist/frontend/lowering/lower-server.d.ts +6 -6
- package/dist/frontend/lowering/lower-server.js +638 -105
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.d.ts +4 -0
- package/dist/frontend/lowering/lower-stdlib.js +151 -109
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +28 -2
- package/dist/frontend/lowering/lower-stmts.js +1589 -398
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.d.ts +4 -3
- package/dist/frontend/lowering/lower-stream.js +714 -75
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-test.d.ts +3 -0
- package/dist/frontend/lowering/lower-test.js +574 -100
- package/dist/frontend/lowering/lower-test.js.map +1 -1
- package/dist/frontend/lowering/lower-timers.js +80 -32
- package/dist/frontend/lowering/lower-timers.js.map +1 -1
- package/dist/frontend/lowering/lower-url.js +1 -1
- package/dist/frontend/lowering/lower-url.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +409 -26
- package/dist/frontend/lowering/lowerer.js +1918 -305
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/lowerer.test.js +10 -4
- package/dist/frontend/lowering/lowerer.test.js.map +1 -1
- package/dist/frontend/lowering/maybe-promise.d.ts +46 -0
- package/dist/frontend/lowering/maybe-promise.js +249 -0
- package/dist/frontend/lowering/maybe-promise.js.map +1 -0
- package/dist/frontend/lowering/module-member-this.d.ts +3 -0
- package/dist/frontend/lowering/module-member-this.js +262 -0
- package/dist/frontend/lowering/module-member-this.js.map +1 -0
- package/dist/frontend/lowering/module-namespace-elements.js +1 -1
- package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
- package/dist/frontend/lowering/nan-coded-reads.d.ts +3 -0
- package/dist/frontend/lowering/nan-coded-reads.js +45 -32
- package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
- package/dist/frontend/lowering/narrowing-stability.d.ts +18 -3
- package/dist/frontend/lowering/narrowing-stability.js +104 -32
- package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
- package/dist/frontend/lowering/native-ffi.js +11 -11
- package/dist/frontend/lowering/native-ffi.js.map +1 -1
- package/dist/frontend/lowering/null-prototype.d.ts +13 -0
- package/dist/frontend/lowering/null-prototype.js +33 -0
- package/dist/frontend/lowering/null-prototype.js.map +1 -0
- package/dist/frontend/lowering/object-factory-new.js +6 -8
- package/dist/frontend/lowering/object-factory-new.js.map +1 -1
- package/dist/frontend/lowering/private-brands.d.ts +46 -0
- package/dist/frontend/lowering/private-brands.js +265 -0
- package/dist/frontend/lowering/private-brands.js.map +1 -0
- package/dist/frontend/lowering/promise-executor-adapter.d.ts +11 -0
- package/dist/frontend/lowering/promise-executor-adapter.js +87 -0
- package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -0
- package/dist/frontend/lowering/require-initialization.d.ts +32 -0
- package/dist/frontend/lowering/require-initialization.js +246 -0
- package/dist/frontend/lowering/require-initialization.js.map +1 -0
- package/dist/frontend/lowering/runtime-optional-bounds.js +7 -7
- package/dist/frontend/lowering/runtime-optional-bounds.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-elements.js +12 -12
- package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-guards.js +10 -10
- package/dist/frontend/lowering/runtime-optional-guards.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-guards.test.js +1 -1
- package/dist/frontend/lowering/runtime-optional-guards.test.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-ownership.js +10 -9
- package/dist/frontend/lowering/runtime-optional-ownership.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-provenance.js +2 -2
- package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-records.d.ts +35 -0
- package/dist/frontend/lowering/runtime-optional-records.js +205 -32
- package/dist/frontend/lowering/runtime-optional-records.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-records.test.js +19 -1
- package/dist/frontend/lowering/runtime-optional-records.test.js.map +1 -1
- package/dist/frontend/lowering/sanitize-class-types.test.js +2 -2
- package/dist/frontend/lowering/split-consumers.js +4 -4
- package/dist/frontend/lowering/split-consumers.js.map +1 -1
- package/dist/frontend/lowering/static-function-names.d.ts +28 -0
- package/dist/frontend/lowering/static-function-names.js +212 -0
- package/dist/frontend/lowering/static-function-names.js.map +1 -0
- package/dist/frontend/lowering/static-this.js +6 -6
- package/dist/frontend/lowering/static-this.js.map +1 -1
- package/dist/frontend/lowering/strict-mode.d.ts +5 -0
- package/dist/frontend/lowering/strict-mode.js +31 -0
- package/dist/frontend/lowering/strict-mode.js.map +1 -0
- package/dist/frontend/lowering/string-index-bounds.js +10 -10
- package/dist/frontend/lowering/string-index-bounds.js.map +1 -1
- package/dist/frontend/lowering/string-index.d.ts +12 -0
- package/dist/frontend/lowering/string-index.js +72 -1
- package/dist/frontend/lowering/string-index.js.map +1 -1
- package/dist/frontend/lowering/surfaces.d.ts +15 -6
- package/dist/frontend/lowering/surfaces.js +278 -45
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/symbol-fields.d.ts +7 -0
- package/dist/frontend/lowering/symbol-fields.js +204 -36
- package/dist/frontend/lowering/symbol-fields.js.map +1 -1
- package/dist/frontend/lowering/symbol-methods.d.ts +2 -1
- package/dist/frontend/lowering/symbol-methods.js +24 -6
- package/dist/frontend/lowering/symbol-methods.js.map +1 -1
- package/dist/frontend/lowering/thread-slots.d.ts +13 -0
- package/dist/frontend/lowering/thread-slots.js +208 -0
- package/dist/frontend/lowering/thread-slots.js.map +1 -0
- package/dist/frontend/lowering/typed-arguments.d.ts +74 -0
- package/dist/frontend/lowering/typed-arguments.js +472 -0
- package/dist/frontend/lowering/typed-arguments.js.map +1 -0
- package/dist/frontend/lowering/union-retag.d.ts +8 -0
- package/dist/frontend/lowering/union-retag.js +27 -0
- package/dist/frontend/lowering/union-retag.js.map +1 -1
- package/dist/frontend/lowering/union-retag.test.js +24 -1
- package/dist/frontend/lowering/union-retag.test.js.map +1 -1
- package/dist/frontend/lowering/var-hoisting.js +6 -6
- package/dist/frontend/lowering/var-hoisting.js.map +1 -1
- package/dist/frontend/lowering/width-lift.d.ts +4 -0
- package/dist/frontend/mock-shapes.d.ts +5 -0
- package/dist/frontend/mock-shapes.js +39 -7
- package/dist/frontend/mock-shapes.js.map +1 -1
- package/dist/frontend/module-source-candidates.js +1 -1
- package/dist/frontend/module-source-candidates.js.map +1 -1
- package/dist/frontend/module-source-candidates.test.js +2 -1
- package/dist/frontend/module-source-candidates.test.js.map +1 -1
- package/dist/frontend/module-syntax.js +8 -8
- package/dist/frontend/module-syntax.js.map +1 -1
- package/dist/frontend/npm-static-bundled-chunks.d.ts +51 -0
- package/dist/frontend/npm-static-bundled-chunks.js +810 -0
- package/dist/frontend/npm-static-bundled-chunks.js.map +1 -0
- package/dist/frontend/npm-static-bundled-chunks.test.d.ts +1 -0
- package/dist/frontend/npm-static-bundled-chunks.test.js +287 -0
- package/dist/frontend/npm-static-bundled-chunks.test.js.map +1 -0
- package/dist/frontend/npm-static-bundled-cjs.js +24 -23
- package/dist/frontend/npm-static-bundled-cjs.js.map +1 -1
- package/dist/frontend/npm-static-bundled-esm.d.ts +9 -0
- package/dist/frontend/npm-static-bundled-esm.js +768 -0
- package/dist/frontend/npm-static-bundled-esm.js.map +1 -0
- package/dist/frontend/npm-static-bundled-esm.test.d.ts +1 -0
- package/dist/frontend/npm-static-bundled-esm.test.js +207 -0
- package/dist/frontend/npm-static-bundled-esm.test.js.map +1 -0
- package/dist/frontend/npm-static-cjs-exports-alias.d.ts +2 -0
- package/dist/frontend/npm-static-cjs-exports-alias.js +186 -0
- package/dist/frontend/npm-static-cjs-exports-alias.js.map +1 -0
- package/dist/frontend/npm-static-cjs-exports-alias.test.d.ts +1 -0
- package/dist/frontend/npm-static-cjs-exports-alias.test.js +73 -0
- package/dist/frontend/npm-static-cjs-exports-alias.test.js.map +1 -0
- package/dist/frontend/npm-static-cjs-exports-var.d.ts +2 -0
- package/dist/frontend/npm-static-cjs-exports-var.js +236 -0
- package/dist/frontend/npm-static-cjs-exports-var.js.map +1 -0
- package/dist/frontend/npm-static-declaration-syntax.js +102 -101
- package/dist/frontend/npm-static-declaration-syntax.js.map +1 -1
- package/dist/frontend/npm-static-prune.js +36 -24
- package/dist/frontend/npm-static-prune.js.map +1 -1
- package/dist/frontend/npm-static-rewrite-host.d.ts +4 -1
- package/dist/frontend/npm-static-rewrite-host.js +14 -3
- package/dist/frontend/npm-static-rewrite-host.js.map +1 -1
- package/dist/frontend/npm-static-rewrite-syntax.d.ts +19 -0
- package/dist/frontend/npm-static-rewrite-syntax.js +274 -101
- package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
- package/dist/frontend/npm-static-subtyping.js +7 -9
- package/dist/frontend/npm-static-subtyping.js.map +1 -1
- package/dist/frontend/npm-static.d.ts +17 -1
- package/dist/frontend/npm-static.js +167 -16
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/npm-static.test.js +22 -1
- package/dist/frontend/npm-static.test.js.map +1 -1
- package/dist/frontend/pipeline.js +164 -26
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/pipeline.test.js +22 -1
- package/dist/frontend/pipeline.test.js.map +1 -1
- package/dist/frontend/program-analysis.d.ts +6 -1
- package/dist/frontend/program-analysis.js +7 -0
- package/dist/frontend/program-analysis.js.map +1 -1
- package/dist/frontend/program.d.ts +92 -2
- package/dist/frontend/program.js +1557 -254
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +76 -6
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/resolve.js +36 -2
- package/dist/frontend/resolve.js.map +1 -1
- package/dist/frontend/resolve.test.js +49 -0
- package/dist/frontend/resolve.test.js.map +1 -1
- package/dist/frontend/services.d.ts +20 -1
- package/dist/frontend/services.js +40 -3
- package/dist/frontend/services.js.map +1 -1
- package/dist/frontend/services.test.js +2 -1
- package/dist/frontend/services.test.js.map +1 -1
- package/dist/frontend/threads-import.js +1 -1
- package/dist/frontend/threads-import.js.map +1 -1
- package/dist/frontend/tier-analysis.d.ts +71 -0
- package/dist/frontend/tier-analysis.js +522 -0
- package/dist/frontend/tier-analysis.js.map +1 -0
- package/dist/frontend/ts7/api-conformance.d.ts +234 -0
- package/dist/frontend/ts7/api-conformance.js +7 -0
- package/dist/frontend/ts7/api-conformance.js.map +1 -0
- package/dist/frontend/ts7/ast-guards.generated.js +2 -1
- package/dist/frontend/ts7/ast-guards.generated.js.map +1 -1
- package/dist/frontend/ts7/ast-node.d.ts +47 -25
- package/dist/frontend/ts7/ast-node.js +64 -18
- package/dist/frontend/ts7/ast-node.js.map +1 -1
- package/dist/frontend/ts7/ast-node.test.js +36 -12
- package/dist/frontend/ts7/ast-node.test.js.map +1 -1
- package/dist/frontend/ts7/ast-types.d.ts +10 -3
- package/dist/frontend/ts7/ast-types.generated.d.ts +39 -39
- package/dist/frontend/ts7/ast.d.ts +1 -0
- package/dist/frontend/ts7/ast.js +3 -2
- package/dist/frontend/ts7/ast.js.map +1 -1
- package/dist/frontend/ts7/checker-backend.d.ts +23 -0
- package/dist/frontend/ts7/checker-backend.js +88 -0
- package/dist/frontend/ts7/checker-backend.js.map +1 -0
- package/dist/frontend/ts7/checker-backend.test.d.ts +1 -0
- package/dist/frontend/ts7/checker-backend.test.js +63 -0
- package/dist/frontend/ts7/checker-backend.test.js.map +1 -0
- package/dist/frontend/ts7/checker-cache.d.ts +0 -3
- package/dist/frontend/ts7/checker-cache.js +0 -6
- package/dist/frontend/ts7/checker-cache.js.map +1 -1
- package/dist/frontend/ts7/checker.d.ts +18 -11
- package/dist/frontend/ts7/checker.js +42 -55
- package/dist/frontend/ts7/checker.js.map +1 -1
- package/dist/frontend/ts7/checker.test.js +10 -7
- package/dist/frontend/ts7/checker.test.js.map +1 -1
- package/dist/frontend/ts7/diagnostic.d.ts +19 -0
- package/dist/frontend/ts7/diagnostic.js +22 -0
- package/dist/frontend/ts7/diagnostic.js.map +1 -0
- package/dist/frontend/ts7/node-functions.d.ts +8 -0
- package/dist/frontend/ts7/node-functions.js +18 -0
- package/dist/frontend/ts7/node-functions.js.map +1 -0
- package/dist/frontend/ts7/program-host.d.ts +5 -1
- package/dist/frontend/ts7/program-host.js +12 -0
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/rpc-api.d.ts +5 -1
- package/dist/frontend/ts7/rpc-api.js +8 -1
- package/dist/frontend/ts7/rpc-api.js.map +1 -1
- package/dist/frontend/ts7/semantic-checker.d.ts +13 -6
- package/dist/frontend/ts7/semantic-checker.js +26 -8
- package/dist/frontend/ts7/semantic-checker.js.map +1 -1
- package/dist/frontend/ts7/semantic-checker.test.js +12 -9
- package/dist/frontend/ts7/semantic-checker.test.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.d.ts +54 -24
- package/dist/frontend/ts7/semantic-model.js +88 -16
- package/dist/frontend/ts7/semantic-model.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.test.js +4 -4
- package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
- package/dist/frontend/ts7/semantic-types.d.ts +7 -3
- 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 +11 -11
- package/dist/frontend/ts7/session.js +8 -5
- package/dist/frontend/ts7/session.js.map +1 -1
- package/dist/frontend/ts7/session.test.js +9 -5
- package/dist/frontend/ts7/session.test.js.map +1 -1
- package/dist/frontend/ts7/source-parser.d.ts +6 -2
- package/dist/frontend/ts7/source-parser.js +24 -3
- package/dist/frontend/ts7/source-parser.js.map +1 -1
- package/dist/frontend/ts7/source-parser.test.js +38 -17
- package/dist/frontend/ts7/source-parser.test.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +122 -2
- package/dist/frontend/type-mapper.js +2612 -695
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/frontend/type-only-imports.d.ts +28 -0
- package/dist/frontend/type-only-imports.js +122 -0
- package/dist/frontend/type-only-imports.js.map +1 -0
- package/dist/frontend/worker-target.js +8 -8
- package/dist/frontend/worker-target.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +47 -10
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.js +4 -2
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/api.d.ts +1 -1
- package/dist/ir/api.js +1 -1
- package/dist/ir/api.js.map +1 -1
- package/dist/ir/array-length-stability.d.ts +30 -0
- package/dist/ir/array-length-stability.js +236 -0
- package/dist/ir/array-length-stability.js.map +1 -0
- package/dist/ir/array-length-stability.test.d.ts +1 -0
- package/dist/ir/array-length-stability.test.js +113 -0
- package/dist/ir/array-length-stability.test.js.map +1 -0
- package/dist/ir/build.d.ts +2 -2
- package/dist/ir/build.js +1 -1
- package/dist/ir/build.js.map +1 -1
- package/dist/ir/builtin-effects.js +139 -0
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +1 -1
- package/dist/ir/builtin-signatures.js +655 -25
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/byte-numbers.js +3 -0
- package/dist/ir/byte-numbers.js.map +1 -1
- package/dist/ir/callback-specialization.d.ts +37 -0
- package/dist/ir/callback-specialization.js +459 -0
- package/dist/ir/callback-specialization.js.map +1 -0
- package/dist/ir/callback-specialization.test.d.ts +1 -0
- package/dist/ir/callback-specialization.test.js +208 -0
- package/dist/ir/callback-specialization.test.js.map +1 -0
- package/dist/ir/capture-values.d.ts +0 -1
- package/dist/ir/capture-values.js +51 -40
- package/dist/ir/capture-values.js.map +1 -1
- package/dist/ir/constant-globals.test.js +1 -1
- package/dist/ir/constant-tables.test.js +1 -1
- package/dist/ir/field-values.test.js +1 -1
- package/dist/ir/final-fields.test.js +1 -1
- package/dist/ir/function-references.test.js +10 -1
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/init-only-globals.test.js +1 -1
- package/dist/ir/initializer-bindings.test.js +1 -1
- package/dist/ir/int32-slots.d.ts +14 -0
- package/dist/ir/int32-slots.js +119 -14
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/int32-slots.test.js +29 -1
- package/dist/ir/int32-slots.test.js.map +1 -1
- package/dist/ir/integer-loop-facts.d.ts +16 -6
- package/dist/ir/integer-loop-facts.js +143 -38
- package/dist/ir/integer-loop-facts.js.map +1 -1
- package/dist/ir/integer-loops.d.ts +1 -1
- package/dist/ir/integer-loops.js +39 -9
- package/dist/ir/integer-loops.js.map +1 -1
- package/dist/ir/integer-loops.test.js +104 -0
- package/dist/ir/integer-loops.test.js.map +1 -1
- package/dist/ir/integer-ranges.d.ts +3 -0
- package/dist/ir/integer-ranges.js +4 -6
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +142 -1
- package/dist/ir/integer-ranges.test.js.map +1 -1
- package/dist/ir/intrinsic-signatures.js +6 -0
- package/dist/ir/intrinsic-signatures.js.map +1 -1
- package/dist/ir/ir.d.ts +234 -58
- package/dist/ir/ir.js +123 -12
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/ir.test.js +10 -0
- package/dist/ir/ir.test.js.map +1 -1
- package/dist/ir/jsval.d.ts +8 -0
- package/dist/ir/jsval.js +365 -0
- package/dist/ir/jsval.js.map +1 -0
- package/dist/ir/jsval.test.d.ts +1 -0
- package/dist/ir/jsval.test.js +239 -0
- package/dist/ir/jsval.test.js.map +1 -0
- package/dist/ir/runtime-features.d.ts +150 -33
- package/dist/ir/runtime-features.js +672 -339
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/runtime-features.test.js +62 -0
- package/dist/ir/runtime-features.test.js.map +1 -1
- package/dist/ir/scalar-records.test.js +1 -1
- package/dist/ir/self-captures.d.ts +33 -0
- package/dist/ir/self-captures.js +245 -0
- package/dist/ir/self-captures.js.map +1 -0
- package/dist/ir/self-captures.test.d.ts +1 -0
- package/dist/ir/self-captures.test.js +135 -0
- package/dist/ir/self-captures.test.js.map +1 -0
- package/dist/ir/serialize.d.ts +1 -1
- package/dist/ir/serialize.js +7 -4
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/tiers.d.ts +26 -0
- package/dist/ir/tiers.js +101 -0
- package/dist/ir/tiers.js.map +1 -0
- package/dist/ir/tiers.test.d.ts +1 -0
- package/dist/ir/tiers.test.js +140 -0
- package/dist/ir/tiers.test.js.map +1 -0
- package/dist/ir/traverse.js +107 -94
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/traverse.test.js +33 -30
- package/dist/ir/traverse.test.js.map +1 -1
- package/dist/ir/unshare.js +65 -3
- package/dist/ir/unshare.js.map +1 -1
- package/dist/ir/unshare.test.js +1 -1
- package/dist/ir/validate.js +220 -71
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +64 -9
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/library/fence-eval.test.js +1 -1
- package/dist/library/int-infer.test.js +4 -4
- package/dist/library/ir-policy.js +18 -0
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/library/library-cache.d.ts +1 -0
- package/dist/library/library-cache.js.map +1 -1
- package/dist/library/library-cache.test.js +5 -5
- package/dist/library/library-profile.d.ts +4 -4
- package/dist/library/library-profile.js +35 -7
- package/dist/library/library-profile.js.map +1 -1
- package/dist/library/prepare.js +13 -1
- package/dist/library/prepare.js.map +1 -1
- package/dist/native/cli.js +5 -0
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.js +2 -2
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/compiler.test.js +2 -2
- package/dist/native/prepare.js +7 -0
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/sanitizer.test.js +12 -0
- package/dist/native/sanitizer.test.js.map +1 -1
- package/dist/native/toolchain.d.ts +2 -0
- package/dist/native/toolchain.js +10 -1
- package/dist/native/toolchain.js.map +1 -1
- package/dist/native/toolchain.test.js +39 -1
- package/dist/native/toolchain.test.js.map +1 -1
- package/dist/startup-cache.d.ts +1 -0
- package/dist/startup-cache.js +1 -0
- package/dist/startup-cache.js.map +1 -1
- package/dist/wasm/base64.d.ts +5 -0
- package/dist/wasm/base64.js +62 -0
- package/dist/wasm/base64.js.map +1 -0
- package/dist/wasm/binary.d.ts +36 -0
- package/dist/wasm/binary.js +1976 -0
- package/dist/wasm/binary.js.map +1 -0
- package/dist/wasm/binary.test.d.ts +1 -0
- package/dist/wasm/binary.test.js +190 -0
- package/dist/wasm/binary.test.js.map +1 -0
- package/dist/wasm/discover.d.ts +38 -0
- package/dist/wasm/discover.js +377 -0
- package/dist/wasm/discover.js.map +1 -0
- package/dist/wasm/discover.test.d.ts +1 -0
- package/dist/wasm/discover.test.js +24 -0
- package/dist/wasm/discover.test.js.map +1 -0
- package/dist/wasm/module.d.ts +151 -0
- package/dist/wasm/module.js +575 -0
- package/dist/wasm/module.js.map +1 -0
- package/dist/wasm/translate.d.ts +48 -0
- package/dist/wasm/translate.js +2129 -0
- package/dist/wasm/translate.js.map +1 -0
- package/dist/wasm/translate.test.d.ts +1 -0
- package/dist/wasm/translate.test.js +207 -0
- package/dist/wasm/translate.test.js.map +1 -0
- package/package.json +21 -20
- package/surface-manifest.json +332 -36
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { nodeThrowExpr, boolLit, numLit, strLit } from "../../ir/build.js";
|
|
2
|
+
import { hashStreamOf, isHashValueType } from "./builtins/hash-stream.js";
|
|
2
3
|
import { InternalCompilerError } from "../../errors.js";
|
|
3
4
|
/* The node:stream lowering (the spoke-module pattern, like
|
|
4
5
|
* lower-event-emitter.ts): construction of the five runtime stream classes
|
|
@@ -30,6 +31,7 @@ import { InternalCompilerError } from "../../errors.js";
|
|
|
30
31
|
* its Node signature (the emitter listener rule). */
|
|
31
32
|
import * as ts from "../ts7/adapter.js";
|
|
32
33
|
import { dynFallbackType } from "./lowerer.js";
|
|
34
|
+
import { accessorCall, classIteratorNextCall, classIteratorOf, classIteratorOpenCall, } from "./lower-classes.js";
|
|
33
35
|
import { isJsSourceFile, locOf } from "../program.js";
|
|
34
36
|
import { newFnCtx, own } from "./lowerer.js";
|
|
35
37
|
import { appendImplicitUndefinedReturn } from "./function-returns.js";
|
|
@@ -39,6 +41,8 @@ import { sideEffectFreeOptionValue } from "./surfaces.js";
|
|
|
39
41
|
import { lowerDynObjectLiteral } from "./expressions/object-literals.js";
|
|
40
42
|
import { dynUndefinedExpr, varRef } from "../../ir/build.js";
|
|
41
43
|
import { genResultRecord } from "../type-mapper.js";
|
|
44
|
+
import { noteUntypedStreamFlow, requestGeneralStreamSurface } from "./general-streams.js";
|
|
45
|
+
import { dynNativeBranch } from "./dyn-streams.js";
|
|
42
46
|
import { extractIteratorValue, genStep, genValue, stepDrivable } from "./lower-generators.js";
|
|
43
47
|
import { BOOL, DYN, F64, RUNTIME_STREAM_CLASSES, STRING, VOID, arrayOf, BYTES_U8, canBoxFuncIntoDyn, canConvertToDyn, funcOf, typeEquals, typeKey, } from "../../ir/ir.js";
|
|
44
48
|
const BYTES = BYTES_U8;
|
|
@@ -127,6 +131,15 @@ export const UNDERSCORE_METHODS = new Map([
|
|
|
127
131
|
["transform", "_transform"],
|
|
128
132
|
["flush", "_flush"],
|
|
129
133
|
]);
|
|
134
|
+
/** The completion callback's parameter position in each underscore
|
|
135
|
+
* method that takes one (cbTuples' "fn" positions). */
|
|
136
|
+
export const STREAM_COMPLETION_CALLBACK_INDEX = new Map([
|
|
137
|
+
["_write", 2],
|
|
138
|
+
["_final", 0],
|
|
139
|
+
["_destroy", 1],
|
|
140
|
+
["_transform", 2],
|
|
141
|
+
["_flush", 0],
|
|
142
|
+
]);
|
|
130
143
|
/** The accepted option-callback names (canonical flag order) and the
|
|
131
144
|
* duplex-shaped-head answer for one runtime stream class. */
|
|
132
145
|
export function streamCtorShape(cls) {
|
|
@@ -161,6 +174,7 @@ export const STREAM_FORCED_EVENT_NAMES = new Set([
|
|
|
161
174
|
"unpipe",
|
|
162
175
|
"open",
|
|
163
176
|
"ready",
|
|
177
|
+
"keypress",
|
|
164
178
|
]);
|
|
165
179
|
/** The per-base FORCED event tuples (runtime-emitted payloads): consulted
|
|
166
180
|
* by the emitter spoke BEFORE the program-global table, so a stream's
|
|
@@ -181,6 +195,8 @@ export function streamForcedTuple(lowerer, info, name) {
|
|
|
181
195
|
resume: [],
|
|
182
196
|
open: [F64],
|
|
183
197
|
ready: [],
|
|
198
|
+
// readline.emitKeypressEvents' (str, key), as checked-dynamic values
|
|
199
|
+
keypress: [DYN, DYN],
|
|
184
200
|
};
|
|
185
201
|
const writable = {
|
|
186
202
|
open: [F64],
|
|
@@ -216,7 +232,7 @@ export function streamForcedTuple(lowerer, info, name) {
|
|
|
216
232
|
function lowerStreamCallback(lowerer, which, node, thisType, fullTuple) {
|
|
217
233
|
const loc = locOf(node);
|
|
218
234
|
const { shapes, funcType } = lowerer.lambdaSignature(node);
|
|
219
|
-
if (node.modifiers?.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword)) {
|
|
235
|
+
if (node.modifiers?.nodes.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword)) {
|
|
220
236
|
lowerer.unsupported("SC1090", node, `async stream '${which}' callbacks`);
|
|
221
237
|
}
|
|
222
238
|
if (funcType.params.length > fullTuple.length) {
|
|
@@ -243,10 +259,10 @@ function lowerStreamCallback(lowerer, which, node, thisType, fullTuple) {
|
|
|
243
259
|
const thisLocal = ts.isArrowFunction(node)
|
|
244
260
|
? lowerer.declareHiddenLocal("this", thisType)
|
|
245
261
|
: lowerer.declareThis(thisType);
|
|
246
|
-
const { params, prologue } = lowerer.declareParams(node.parameters, shapes);
|
|
262
|
+
const { params, prologue } = lowerer.declareParams(node.parameters.nodes, shapes);
|
|
247
263
|
let body;
|
|
248
264
|
if (node.body !== undefined && ts.isBlock(node.body)) {
|
|
249
|
-
body = lowerer.lowerStmts(node.body.statements);
|
|
265
|
+
body = lowerer.lowerStmts(node.body.statements.nodes);
|
|
250
266
|
}
|
|
251
267
|
else if (node.body !== undefined) {
|
|
252
268
|
// Bare-expression bodies (`read: () => this.push(null)`): the value
|
|
@@ -397,7 +413,7 @@ function followOptionsArg(lowerer, arg) {
|
|
|
397
413
|
catch {
|
|
398
414
|
return node;
|
|
399
415
|
}
|
|
400
|
-
const decl = sym ?
|
|
416
|
+
const decl = sym ? sym.valueDeclaration : undefined;
|
|
401
417
|
if (!sym || !decl || !ts.isVariableDeclaration(decl) || decl.initializer === undefined)
|
|
402
418
|
return node;
|
|
403
419
|
if ((ts.getCombinedNodeFlags(decl) & ts.NodeFlags.Const) === 0)
|
|
@@ -480,6 +496,28 @@ function dynOptionsValue(lowerer, arg) {
|
|
|
480
496
|
const v = lowerer.lowerExpr(followed);
|
|
481
497
|
return v.type.kind === "dyn" ? v : null;
|
|
482
498
|
}
|
|
499
|
+
/** @types/node declares the transform/flush completion callback as
|
|
500
|
+
* `(error?: Error | null, data?: any) => void`. Outside objectMode Node
|
|
501
|
+
* accepts only a Buffer, a string or nothing as `data`, so the callback
|
|
502
|
+
* parameter is typed with that union while the option callback lowers: a
|
|
503
|
+
* checked-dynamic value passed as `data` converts at the call. Returns the
|
|
504
|
+
* pinned parameter symbol (the caller unpins it), or null when the
|
|
505
|
+
* declared type needs no pin. */
|
|
506
|
+
function pinAnyDataCompletion(lowerer, which, fnNode) {
|
|
507
|
+
const index = which === "transform" ? 2 : which === "flush" ? 0 : -1;
|
|
508
|
+
const param = index < 0 ? undefined : fnNode.parameters.nodes[index];
|
|
509
|
+
if (param === undefined || !ts.isIdentifier(param.name) || param.dotDotDotToken)
|
|
510
|
+
return null;
|
|
511
|
+
const symbol = lowerer.checker.getSymbolAtLocation(param.name);
|
|
512
|
+
if (!symbol || lowerer.stageSourceTypes.has(symbol))
|
|
513
|
+
return null;
|
|
514
|
+
const declared = lowerer.paramShape(param).type;
|
|
515
|
+
if (declared.kind !== "func" || declared.rest || declared.params[1]?.kind !== "dyn")
|
|
516
|
+
return null;
|
|
517
|
+
const data = unionOf(lowerer, [BYTES, STRING, { kind: "undefinedT" }]);
|
|
518
|
+
lowerer.stageSourceTypes.set(symbol, funcOf([declared.params[0], data, ...declared.params.slice(2)], declared.ret));
|
|
519
|
+
return symbol;
|
|
520
|
+
}
|
|
483
521
|
/** Parses the options object literal of a stream constructor. `which`
|
|
484
522
|
* names the callbacks this class accepts, in canonical flag order. */
|
|
485
523
|
function parseStreamOptions(lowerer, ctorName, arg, thisType, accepted, loc,
|
|
@@ -510,7 +548,7 @@ fallbackCb) {
|
|
|
510
548
|
}
|
|
511
549
|
const tuples = cbTuples(lowerer);
|
|
512
550
|
const present = new Map();
|
|
513
|
-
for (const prop of optsLit?.properties ?? []) {
|
|
551
|
+
for (const prop of optsLit?.properties?.nodes ?? []) {
|
|
514
552
|
const propName = ts.isSpreadAssignment(prop) ? undefined : prop.name;
|
|
515
553
|
const name = propName && ts.isIdentifier(propName)
|
|
516
554
|
? propName.text
|
|
@@ -545,20 +583,27 @@ fallbackCb) {
|
|
|
545
583
|
continue;
|
|
546
584
|
}
|
|
547
585
|
const full = tuples[name].map((t) => (t === "fn" ? null : t));
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
586
|
+
const pinned = pinAnyDataCompletion(lowerer, name, fnNode);
|
|
587
|
+
try {
|
|
588
|
+
// The completion-callback tail: typed by the checker contextually;
|
|
589
|
+
// accept the user's declared func type as the tuple's entry so the
|
|
590
|
+
// prefix check compares like with like.
|
|
591
|
+
const { funcType } = lowerer.lambdaSignature(fnNode);
|
|
592
|
+
const tuple = full.map((t, i) => {
|
|
593
|
+
if (t !== null)
|
|
594
|
+
return t;
|
|
595
|
+
const declared = funcType.params[i];
|
|
596
|
+
if (declared !== undefined && declared.kind !== "func" && declared.kind !== "dyn") {
|
|
597
|
+
lowerer.noLowering(`a '${name}' callback whose parameter ${i} is '${lowerer.fmt(declared)}' where Node passes the completion callback`, fnNode);
|
|
598
|
+
}
|
|
599
|
+
return declared ?? funcOf([], VOID);
|
|
600
|
+
});
|
|
601
|
+
present.set(name, lowerStreamCallback(lowerer, name, fnNode, thisType, tuple));
|
|
602
|
+
}
|
|
603
|
+
finally {
|
|
604
|
+
if (pinned)
|
|
605
|
+
lowerer.stageSourceTypes.delete(pinned);
|
|
606
|
+
}
|
|
562
607
|
continue;
|
|
563
608
|
}
|
|
564
609
|
// `{ signal }` shorthand: the binding is the value.
|
|
@@ -753,7 +798,7 @@ export function lowerStreamNew(lowerer, expr, info) {
|
|
|
753
798
|
if (!RUNTIME_STREAM_CLASSES.has(cls))
|
|
754
799
|
lowerer.unsupported("SC1090", expr, `constructing ${cls}`);
|
|
755
800
|
const thisType = { kind: "object", className: cls };
|
|
756
|
-
const args = expr.arguments ?? [];
|
|
801
|
+
const args = expr.arguments?.nodes ?? [];
|
|
757
802
|
if (args.length > 1) {
|
|
758
803
|
lowerer.noLowering(`new ${info.def.name.slice(1)} with ${args.length} arguments`, expr, "the supported form takes one options object");
|
|
759
804
|
}
|
|
@@ -810,6 +855,15 @@ export function lowerStreamNew(lowerer, expr, info) {
|
|
|
810
855
|
loc,
|
|
811
856
|
};
|
|
812
857
|
}
|
|
858
|
+
/** True when a value of Node's argument type `passed` widens implicitly
|
|
859
|
+
* into the declared parameter type `declared` (one of its union arms, or a
|
|
860
|
+
* sub-union of it). */
|
|
861
|
+
function widensInto(lowerer, passed, declared, loc) {
|
|
862
|
+
if (declared.kind !== "union")
|
|
863
|
+
return false;
|
|
864
|
+
const probe = { kind: "varRef", localId: "%probe", type: passed, loc };
|
|
865
|
+
return typeEquals(lowerer.coerceToExpected(probe, declared).type, declared);
|
|
866
|
+
}
|
|
813
867
|
/* ── user subclasses (`extends Readable`, the underscore-override form) ── */
|
|
814
868
|
/** The wrapper closure binding one overridden underscore method as the
|
|
815
869
|
* runtime's option callback: a lifted (this, ...prefix) function whose
|
|
@@ -860,7 +914,14 @@ function streamMethodWrapper(lowerer, info, which, methodName, thisType, loc, bl
|
|
|
860
914
|
}
|
|
861
915
|
}
|
|
862
916
|
else if (!typeEquals(got.type, want)) {
|
|
863
|
-
|
|
917
|
+
// A declared supertype of what Node passes (`chunk: Buffer | string`)
|
|
918
|
+
// is sound: the wrapper takes Node's value and widens it into the
|
|
919
|
+
// declared parameter.
|
|
920
|
+
if (widensInto(lowerer, want, got.type, loc)) {
|
|
921
|
+
paramTypes.push(want);
|
|
922
|
+
continue;
|
|
923
|
+
}
|
|
924
|
+
lowerer.noLowering(`a '${methodName}' method whose parameter ${i} is '${lowerer.fmt(got.type)}' where Node passes '${lowerer.fmt(want)}'`, blame, "annotate the parameter with the Node signature's type or a supertype of it (chunks are Buffers here)");
|
|
864
925
|
}
|
|
865
926
|
paramTypes.push(got.type);
|
|
866
927
|
}
|
|
@@ -875,7 +936,9 @@ function streamMethodWrapper(lowerer, info, which, methodName, thisType, loc, bl
|
|
|
875
936
|
for (let i = 0; i < paramTypes.length; i++) {
|
|
876
937
|
const local = lowerer.declareHiddenLocal(`a${i}`, paramTypes[i]);
|
|
877
938
|
params.push({ localId: local.id, name: local.name, type: paramTypes[i] });
|
|
878
|
-
|
|
939
|
+
const arg = { kind: "varRef", localId: local.id, type: paramTypes[i], loc };
|
|
940
|
+
const declaredType = declared[i].type;
|
|
941
|
+
argRefs.push(typeEquals(arg.type, declaredType) ? arg : lowerer.coerceToExpected(arg, declaredType));
|
|
879
942
|
}
|
|
880
943
|
const thisRef = { kind: "varRef", localId: thisLocal.id, type: thisType, loc };
|
|
881
944
|
let call;
|
|
@@ -1159,14 +1222,14 @@ export function lowerStreamStaticCall(lowerer, call, access) {
|
|
|
1159
1222
|
// exists; valid shapes keep the fence — the web bridge has no lowering.
|
|
1160
1223
|
if (member === "toWeb" &&
|
|
1161
1224
|
cls === "%Readable" &&
|
|
1162
|
-
call.arguments.length === 2 &&
|
|
1163
|
-
isJsSourceFile(
|
|
1164
|
-
ts.isObjectLiteralExpression(call.arguments[1])) {
|
|
1165
|
-
for (const p of call.arguments[1].properties) {
|
|
1225
|
+
call.arguments.nodes.length === 2 &&
|
|
1226
|
+
isJsSourceFile(ts.getSourceFileOfNode(call)) &&
|
|
1227
|
+
ts.isObjectLiteralExpression(call.arguments.nodes[1])) {
|
|
1228
|
+
for (const p of call.arguments.nodes[1].properties.nodes) {
|
|
1166
1229
|
if (ts.isPropertyAssignment(p) && ts.isIdentifier(p.name) && p.name.text === "type") {
|
|
1167
1230
|
const t = lowerer.typeOf(p.initializer);
|
|
1168
1231
|
if (t.isStringLiteralType() && t.value !== "bytes") {
|
|
1169
|
-
lowerer.lowerExpr(call.arguments[0]); // evaluation order (the stream argument)
|
|
1232
|
+
lowerer.lowerExpr(call.arguments.nodes[0]); // evaluation order (the stream argument)
|
|
1170
1233
|
return nodeThrowExpr(1, "ERR_INVALID_ARG_VALUE", `The property 'options.type' must be one of: 'bytes', undefined. Received '${t.value}'`, lowerer.mapTypeOf(lowerer.typeOf(call)) ?? DYN, loc);
|
|
1171
1234
|
}
|
|
1172
1235
|
}
|
|
@@ -1178,12 +1241,12 @@ export function lowerStreamStaticCall(lowerer, call, access) {
|
|
|
1178
1241
|
if (cls !== "%Readable") {
|
|
1179
1242
|
lowerer.noLowering(`${cls.slice(1)}.from`, call, "Readable.from is the lowered form");
|
|
1180
1243
|
}
|
|
1181
|
-
const args = call.arguments;
|
|
1244
|
+
const args = call.arguments.nodes;
|
|
1182
1245
|
if (args.length > 2) {
|
|
1183
1246
|
lowerer.noLowering(`Readable.from with ${args.length} arguments`, call, "Readable.from(iterable, options) is the supported form");
|
|
1184
1247
|
}
|
|
1185
1248
|
const type = { kind: "object", className: "%Readable" };
|
|
1186
|
-
const js = isJsSourceFile(
|
|
1249
|
+
const js = isJsSourceFile(ts.getSourceFileOfNode(call));
|
|
1187
1250
|
const srcNode = args[0];
|
|
1188
1251
|
const optsNode = args[1];
|
|
1189
1252
|
const srcT = srcNode ? lowerer.mapTypeOf(lowerer.typeOf(srcNode)) : null;
|
|
@@ -1191,21 +1254,66 @@ export function lowerStreamStaticCall(lowerer, call, access) {
|
|
|
1191
1254
|
const single = typedElem(srcT);
|
|
1192
1255
|
const elem = srcT?.kind === "array" ? typedElem(srcT.elem) : null;
|
|
1193
1256
|
const opts = optsNode ? fromOptions(lowerer, optsNode) : { flags: 0, hwm: null };
|
|
1194
|
-
|
|
1257
|
+
// A class whose [Symbol.iterator]() or [Symbol.asyncIterator]() is a
|
|
1258
|
+
// generator method: from.js calls the method when the stream is built,
|
|
1259
|
+
// then reads the generator like any other.
|
|
1260
|
+
const genMethod = srcT?.kind === "object" ? classGeneratorMethodOf(lowerer, srcT) : null;
|
|
1261
|
+
const genT = srcT?.kind === "generator" ? srcT : (genMethod?.gen ?? null);
|
|
1262
|
+
if (srcNode && genT && opts && fromGenChunk(lowerer, genT.yieldT)) {
|
|
1195
1263
|
// A compiled generator: the runtime pulls it through interned helpers.
|
|
1196
|
-
const
|
|
1197
|
-
const
|
|
1264
|
+
const recv = lowerer.lowerExpr(srcNode);
|
|
1265
|
+
const gen = genMethod && srcT?.kind === "object"
|
|
1266
|
+
? accessorCall(lowerer, srcT.className, genMethod.method, recv, [], genT, loc)
|
|
1267
|
+
: recv;
|
|
1268
|
+
const helpers = fromGenHelpers(lowerer, genT, loc);
|
|
1198
1269
|
if (helpers) {
|
|
1199
1270
|
const hwm = opts.hwm ? lowerer.lowerExprExpecting(opts.hwm, F64) : numLit(0, loc);
|
|
1200
1271
|
return {
|
|
1201
1272
|
kind: "libCall",
|
|
1202
|
-
fn:
|
|
1273
|
+
fn: genT.async ? "readable.fromAsyncGen" : "readable.fromGen",
|
|
1203
1274
|
args: [gen, ...helpers, numLit(opts.flags, loc), hwm],
|
|
1204
1275
|
type,
|
|
1205
1276
|
loc,
|
|
1206
1277
|
};
|
|
1207
1278
|
}
|
|
1208
1279
|
}
|
|
1280
|
+
// from.js prefers Symbol.asyncIterator: a class declaring one takes the
|
|
1281
|
+
// async route.
|
|
1282
|
+
const asyncOpen = srcT?.kind === "object" &&
|
|
1283
|
+
lowerer.classes.has(srcT.className) &&
|
|
1284
|
+
lowerer.findMethodOn(lowerer.classes.get(srcT.className), "sym:asyncIterator") !== null;
|
|
1285
|
+
const cit = srcT?.kind === "object" && !asyncOpen ? classIteratorOf(lowerer, srcT) : null;
|
|
1286
|
+
if (srcNode && cit && opts && fromGenChunk(lowerer, cit.valueT)) {
|
|
1287
|
+
// A class iterable: from.js takes the iterator when the stream is
|
|
1288
|
+
// built (the typed [Symbol.iterator]() call here), and the runtime
|
|
1289
|
+
// pulls it through a checked-dynamic { next } object. Class iterators
|
|
1290
|
+
// declare no return() or throw(), so destroy calls neither.
|
|
1291
|
+
const recv = lowerer.lowerExpr(srcNode);
|
|
1292
|
+
const hwm = opts.hwm ? lowerer.lowerExprExpecting(opts.hwm, F64) : numLit(0, loc);
|
|
1293
|
+
return {
|
|
1294
|
+
kind: "libCall",
|
|
1295
|
+
fn: "readable.fromIter",
|
|
1296
|
+
args: [
|
|
1297
|
+
classIteratorObject(lowerer, cit, classIteratorOpenCall(lowerer, cit, recv, loc), loc),
|
|
1298
|
+
numLit(opts.flags, loc),
|
|
1299
|
+
hwm,
|
|
1300
|
+
],
|
|
1301
|
+
type,
|
|
1302
|
+
loc,
|
|
1303
|
+
};
|
|
1304
|
+
}
|
|
1305
|
+
const acit = srcT?.kind === "object" && asyncOpen ? classAsyncIteratorOf(lowerer, srcT) : null;
|
|
1306
|
+
if (srcNode && acit && opts && fromGenChunk(lowerer, acit.valueT)) {
|
|
1307
|
+
const recv = lowerer.lowerExpr(srcNode);
|
|
1308
|
+
const hwm = opts.hwm ? lowerer.lowerExprExpecting(opts.hwm, F64) : numLit(0, loc);
|
|
1309
|
+
return {
|
|
1310
|
+
kind: "libCall",
|
|
1311
|
+
fn: "readable.fromAsyncIter",
|
|
1312
|
+
args: [classAsyncIteratorObject(lowerer, acit, recv, loc), numLit(opts.flags, loc), hwm],
|
|
1313
|
+
type,
|
|
1314
|
+
loc,
|
|
1315
|
+
};
|
|
1316
|
+
}
|
|
1209
1317
|
if (srcNode && (single || elem) && opts) {
|
|
1210
1318
|
const v = lowerer.lowerExpr(srcNode);
|
|
1211
1319
|
const hwm = opts.hwm ? lowerer.lowerExprExpecting(opts.hwm, F64) : numLit(0, loc);
|
|
@@ -1222,6 +1330,7 @@ export function lowerStreamStaticCall(lowerer, call, access) {
|
|
|
1222
1330
|
};
|
|
1223
1331
|
}
|
|
1224
1332
|
const anySrc = srcT?.kind === "dyn" ||
|
|
1333
|
+
(srcT?.kind === "set" && typedElem(srcT.elem) !== null) ||
|
|
1225
1334
|
(srcNode !== undefined &&
|
|
1226
1335
|
srcT === null &&
|
|
1227
1336
|
(lowerer.typeOf(srcNode).flags & ts.TypeFlags.Any) !== 0);
|
|
@@ -1235,7 +1344,7 @@ export function lowerStreamStaticCall(lowerer, call, access) {
|
|
|
1235
1344
|
if (srcNode && (single || elem)) {
|
|
1236
1345
|
lowerer.noLowering("Readable.from with these options", optsNode, "an object literal with 'objectMode' (true or false) and a number 'highWaterMark' is supported");
|
|
1237
1346
|
}
|
|
1238
|
-
lowerer.noLowering(`Readable.from over a '${srcT ? lowerer.fmt(srcT) : "?"}' source`, srcNode ?? call, "
|
|
1347
|
+
lowerer.noLowering(`Readable.from over a '${srcT ? lowerer.fmt(srcT) : "?"}' source`, srcNode ?? call, "the supported sources are a string or Buffer, and arrays, Sets, generators and class iterables of strings or Buffers");
|
|
1239
1348
|
}
|
|
1240
1349
|
/** Whether a generator's yields are stream chunks: strings, Buffers, a
|
|
1241
1350
|
* union of them (null included: the runtime destroys the stream with
|
|
@@ -1363,6 +1472,210 @@ function fromGenHelpers(lowerer, gen, loc) {
|
|
|
1363
1472
|
define("throw", [g, e], DYN, viaRecord("throw"), [r]),
|
|
1364
1473
|
];
|
|
1365
1474
|
}
|
|
1475
|
+
/** `{ next() { const r = it.next(); return { value: r.value, done: r.done }; } }`
|
|
1476
|
+
* over a class iterator `it`, as a checked-dynamic object: an interned
|
|
1477
|
+
* lifted function per iterator class takes the iterator and answers the
|
|
1478
|
+
* object, whose `next` closure captures it. */
|
|
1479
|
+
function classIteratorObject(lowerer, cit, iter, loc) {
|
|
1480
|
+
const key = `streamFromIter:${cit.iterT.className}`;
|
|
1481
|
+
let name = lowerer.valueHelpers.get(key);
|
|
1482
|
+
if (!name) {
|
|
1483
|
+
name = `%stream.fromIter.${lowerer.valueHelpers.size}`;
|
|
1484
|
+
lowerer.valueHelpers.set(key, name);
|
|
1485
|
+
const nextName = `${name}.next`;
|
|
1486
|
+
const nextT = funcOf([], DYN);
|
|
1487
|
+
const it = { id: "it.0", name: "it", type: cit.iterT, mutable: false, boxed: true };
|
|
1488
|
+
const r = { id: "res.0", name: "res", type: cit.resultT, mutable: false };
|
|
1489
|
+
const field = (f, t) => ({
|
|
1490
|
+
kind: "recordGet",
|
|
1491
|
+
obj: varRef(r.id, cit.resultT, loc),
|
|
1492
|
+
shapeId: cit.resultT.shapeId,
|
|
1493
|
+
field: f,
|
|
1494
|
+
type: t,
|
|
1495
|
+
loc,
|
|
1496
|
+
});
|
|
1497
|
+
const str = (value) => ({ kind: "strLit", value, type: STRING, loc });
|
|
1498
|
+
lowerer.liftedFns.push({
|
|
1499
|
+
name: nextName,
|
|
1500
|
+
params: [],
|
|
1501
|
+
returnType: DYN,
|
|
1502
|
+
captures: [{ localId: it.id, name: it.name, type: it.type }],
|
|
1503
|
+
locals: [it, r],
|
|
1504
|
+
body: [
|
|
1505
|
+
{
|
|
1506
|
+
kind: "varDecl",
|
|
1507
|
+
localId: r.id,
|
|
1508
|
+
init: classIteratorNextCall(lowerer, cit, varRef(it.id, cit.iterT, loc), loc),
|
|
1509
|
+
loc,
|
|
1510
|
+
},
|
|
1511
|
+
{
|
|
1512
|
+
kind: "return",
|
|
1513
|
+
value: {
|
|
1514
|
+
kind: "dynObjLit",
|
|
1515
|
+
fields: [
|
|
1516
|
+
{
|
|
1517
|
+
key: str("value"),
|
|
1518
|
+
value: lowerer.coerceToExpected(field("value", cit.valueT), DYN),
|
|
1519
|
+
},
|
|
1520
|
+
{
|
|
1521
|
+
key: str("done"),
|
|
1522
|
+
value: {
|
|
1523
|
+
kind: "dynFrom",
|
|
1524
|
+
value: cit.hasDone ? field("done", BOOL) : boolLit(false, loc),
|
|
1525
|
+
type: DYN,
|
|
1526
|
+
loc,
|
|
1527
|
+
},
|
|
1528
|
+
},
|
|
1529
|
+
],
|
|
1530
|
+
type: DYN,
|
|
1531
|
+
loc,
|
|
1532
|
+
},
|
|
1533
|
+
loc,
|
|
1534
|
+
},
|
|
1535
|
+
],
|
|
1536
|
+
loc,
|
|
1537
|
+
});
|
|
1538
|
+
lowerer.liftedFns.push({
|
|
1539
|
+
name,
|
|
1540
|
+
params: [{ localId: it.id, name: it.name, type: it.type }],
|
|
1541
|
+
returnType: DYN,
|
|
1542
|
+
locals: [it],
|
|
1543
|
+
body: [
|
|
1544
|
+
{
|
|
1545
|
+
kind: "return",
|
|
1546
|
+
value: {
|
|
1547
|
+
kind: "dynObjLit",
|
|
1548
|
+
fields: [
|
|
1549
|
+
{
|
|
1550
|
+
key: str("next"),
|
|
1551
|
+
value: {
|
|
1552
|
+
kind: "dynFrom",
|
|
1553
|
+
value: { kind: "closure", fnName: nextName, captures: [it.id], type: nextT, loc },
|
|
1554
|
+
type: DYN,
|
|
1555
|
+
loc,
|
|
1556
|
+
},
|
|
1557
|
+
},
|
|
1558
|
+
],
|
|
1559
|
+
type: DYN,
|
|
1560
|
+
loc,
|
|
1561
|
+
},
|
|
1562
|
+
loc,
|
|
1563
|
+
},
|
|
1564
|
+
],
|
|
1565
|
+
loc,
|
|
1566
|
+
});
|
|
1567
|
+
}
|
|
1568
|
+
return { kind: "call", callee: name, args: [iter], type: DYN, loc };
|
|
1569
|
+
}
|
|
1570
|
+
/** A class's zero-parameter `[Symbol.asyncIterator]()` (checked first, as
|
|
1571
|
+
* from.js does) or `[Symbol.iterator]()` method that returns a generator,
|
|
1572
|
+
* with its method slot. */
|
|
1573
|
+
function classGeneratorMethodOf(lowerer, t) {
|
|
1574
|
+
const info = lowerer.classes.get(t.className);
|
|
1575
|
+
if (!info)
|
|
1576
|
+
return null;
|
|
1577
|
+
for (const method of ["sym:asyncIterator", "sym:iterator"]) {
|
|
1578
|
+
const m = lowerer.findMethodOn(info, method);
|
|
1579
|
+
if (!m)
|
|
1580
|
+
continue;
|
|
1581
|
+
const ret = m.sig.ret;
|
|
1582
|
+
if (m.sig.abstract === true || m.sig.params.length !== 0 || ret.kind !== "generator")
|
|
1583
|
+
return null;
|
|
1584
|
+
return { method, gen: ret };
|
|
1585
|
+
}
|
|
1586
|
+
return null;
|
|
1587
|
+
}
|
|
1588
|
+
function classAsyncIteratorOf(lowerer, t) {
|
|
1589
|
+
const info = lowerer.classes.get(t.className);
|
|
1590
|
+
const open = info ? lowerer.findMethodOn(info, "sym:asyncIterator") : null;
|
|
1591
|
+
if (!open || open.sig.abstract === true || open.sig.params.length !== 0)
|
|
1592
|
+
return null;
|
|
1593
|
+
const iterT = open.sig.ret;
|
|
1594
|
+
if (iterT.kind !== "object")
|
|
1595
|
+
return null;
|
|
1596
|
+
const itInfo = lowerer.classes.get(iterT.className);
|
|
1597
|
+
if (!itInfo || lowerer.findMethodOn(itInfo, "throw"))
|
|
1598
|
+
return null;
|
|
1599
|
+
const record = (name) => {
|
|
1600
|
+
const m = lowerer.findMethodOn(itInfo, name);
|
|
1601
|
+
if (!m || m.sig.abstract === true || m.sig.params.length !== 0)
|
|
1602
|
+
return null;
|
|
1603
|
+
const ret = m.sig.ret;
|
|
1604
|
+
return ret.kind === "promise" && ret.inner.kind === "record" ? ret.inner : null;
|
|
1605
|
+
};
|
|
1606
|
+
const resultT = record("next");
|
|
1607
|
+
if (!resultT)
|
|
1608
|
+
return null;
|
|
1609
|
+
const shape = lowerer.shapes.get(resultT.shapeId);
|
|
1610
|
+
const value = shape?.fields.find((f) => f.name === "value");
|
|
1611
|
+
const done = shape?.fields.find((f) => f.name === "done");
|
|
1612
|
+
if (!value || (done && done.type.kind !== "bool"))
|
|
1613
|
+
return null;
|
|
1614
|
+
const hasReturn = lowerer.findMethodOn(itInfo, "return") !== null;
|
|
1615
|
+
if (hasReturn && !record("return"))
|
|
1616
|
+
return null;
|
|
1617
|
+
return { className: t.className, iterT, resultT, valueT: value.type, hasReturn };
|
|
1618
|
+
}
|
|
1619
|
+
/** The checked-dynamic iterator object over an async class iterable:
|
|
1620
|
+
* `recv[Symbol.asyncIterator]()` runs when the stream is built, and the
|
|
1621
|
+
* object's `next` (and `return`, when the class declares one) answer the
|
|
1622
|
+
* iterator's own promises boxed. */
|
|
1623
|
+
function classAsyncIteratorObject(lowerer, cit, recv, loc) {
|
|
1624
|
+
const key = `streamFromAsyncIter:${cit.className}`;
|
|
1625
|
+
let name = lowerer.valueHelpers.get(key);
|
|
1626
|
+
if (!name) {
|
|
1627
|
+
name = `%stream.fromAsyncIter.${lowerer.valueHelpers.size}`;
|
|
1628
|
+
lowerer.valueHelpers.set(key, name);
|
|
1629
|
+
const it = { id: "it.0", name: "it", type: cit.iterT, mutable: false, boxed: true };
|
|
1630
|
+
const src = {
|
|
1631
|
+
id: "src.0",
|
|
1632
|
+
name: "src",
|
|
1633
|
+
type: { kind: "object", className: cit.className },
|
|
1634
|
+
mutable: false,
|
|
1635
|
+
};
|
|
1636
|
+
const str = (value) => ({ kind: "strLit", value, type: STRING, loc });
|
|
1637
|
+
const method = (m) => {
|
|
1638
|
+
const fnName = `${name}.${m}`;
|
|
1639
|
+
const call = accessorCall(lowerer, cit.iterT.className, m, varRef(it.id, cit.iterT, loc), [], { kind: "promise", inner: cit.resultT }, loc);
|
|
1640
|
+
lowerer.liftedFns.push({
|
|
1641
|
+
name: fnName,
|
|
1642
|
+
params: [],
|
|
1643
|
+
returnType: DYN,
|
|
1644
|
+
captures: [{ localId: it.id, name: it.name, type: it.type }],
|
|
1645
|
+
locals: [it],
|
|
1646
|
+
body: [{ kind: "return", value: { kind: "dynFrom", value: call, type: DYN, loc }, loc }],
|
|
1647
|
+
loc,
|
|
1648
|
+
});
|
|
1649
|
+
return {
|
|
1650
|
+
key: str(m),
|
|
1651
|
+
value: {
|
|
1652
|
+
kind: "dynFrom",
|
|
1653
|
+
value: { kind: "closure", fnName, captures: [it.id], type: funcOf([], DYN), loc },
|
|
1654
|
+
type: DYN,
|
|
1655
|
+
loc,
|
|
1656
|
+
},
|
|
1657
|
+
};
|
|
1658
|
+
};
|
|
1659
|
+
const fields = [method("next"), ...(cit.hasReturn ? [method("return")] : [])];
|
|
1660
|
+
lowerer.liftedFns.push({
|
|
1661
|
+
name,
|
|
1662
|
+
params: [{ localId: src.id, name: src.name, type: src.type }],
|
|
1663
|
+
returnType: DYN,
|
|
1664
|
+
locals: [src, it],
|
|
1665
|
+
body: [
|
|
1666
|
+
{
|
|
1667
|
+
kind: "varDecl",
|
|
1668
|
+
localId: it.id,
|
|
1669
|
+
init: accessorCall(lowerer, cit.className, "sym:asyncIterator", varRef(src.id, src.type, loc), [], cit.iterT, loc),
|
|
1670
|
+
loc,
|
|
1671
|
+
},
|
|
1672
|
+
{ kind: "return", value: { kind: "dynObjLit", fields, type: DYN, loc }, loc },
|
|
1673
|
+
],
|
|
1674
|
+
loc,
|
|
1675
|
+
});
|
|
1676
|
+
}
|
|
1677
|
+
return { kind: "call", callee: name, args: [recv], type: DYN, loc };
|
|
1678
|
+
}
|
|
1366
1679
|
/** Readable.from's typed options: an object literal of `objectMode`
|
|
1367
1680
|
* (a boolean literal) and `highWaterMark` (a number), as SCR_FROM_* flag
|
|
1368
1681
|
* bits and the hwm expression; null for any other shape. */
|
|
@@ -1371,7 +1684,7 @@ function fromOptions(lowerer, node) {
|
|
|
1371
1684
|
return null;
|
|
1372
1685
|
let flags = 0;
|
|
1373
1686
|
let hwm = null;
|
|
1374
|
-
for (const prop of node.properties) {
|
|
1687
|
+
for (const prop of node.properties.nodes) {
|
|
1375
1688
|
if (!ts.isPropertyAssignment(prop) ||
|
|
1376
1689
|
!(ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name))) {
|
|
1377
1690
|
return null;
|
|
@@ -1429,7 +1742,30 @@ const PIPELINE_STAGE_EXPECTED = "of type function or an instance of Blob, Readab
|
|
|
1429
1742
|
* { readable, writable } pairs — those shapes fence instead of throwing
|
|
1430
1743
|
* a ladder Node never throws. */
|
|
1431
1744
|
function lowerStreamArg(lowerer, node, what) {
|
|
1432
|
-
const
|
|
1745
|
+
const lowered = lowerer.lowerExpr(node);
|
|
1746
|
+
// A Hash or Hmac stage is its Transform; pipeline and compose stages
|
|
1747
|
+
// keep the value alive until the stream settles.
|
|
1748
|
+
const v = isHashValueType(lowered.type)
|
|
1749
|
+
? hashStreamOf(lowered, what === "pipeline" || what === "compose")
|
|
1750
|
+
: lowered;
|
|
1751
|
+
// A checked-dynamic pipeline stage (an untyped source or destination):
|
|
1752
|
+
// a boxed native stream unwraps at run time; other values (iterables,
|
|
1753
|
+
// functions) throw the not-supported Error there.
|
|
1754
|
+
if (v.type.kind === "dyn" && what === "pipeline") {
|
|
1755
|
+
noteUntypedStreamFlow(lowerer, null);
|
|
1756
|
+
return {
|
|
1757
|
+
kind: "libCall",
|
|
1758
|
+
fn: "stream.unboxDyn",
|
|
1759
|
+
args: [
|
|
1760
|
+
v,
|
|
1761
|
+
strLit(lowerer.dynNodeStreams
|
|
1762
|
+
? "pipeline stages other than native streams (JavaScript stream objects, iterables, generators, plain functions, and { readable, writable } pairs) are not supported yet"
|
|
1763
|
+
: "pipeline stages other than native streams (iterables, generators, plain functions, and { readable, writable } pairs) are not supported yet", locOf(node)),
|
|
1764
|
+
],
|
|
1765
|
+
type: { kind: "object", className: "%Duplex" },
|
|
1766
|
+
loc: locOf(node),
|
|
1767
|
+
};
|
|
1768
|
+
}
|
|
1433
1769
|
const info = v.type.kind === "object" ? lowerer.classes.get(v.type.className) : undefined;
|
|
1434
1770
|
if (!streamSidesOf(lowerer, info)) {
|
|
1435
1771
|
// A provably-non-stream value in a JS source (the invalid-input
|
|
@@ -1448,7 +1784,7 @@ function lowerStreamArg(lowerer, node, what) {
|
|
|
1448
1784
|
loc: locOf(node),
|
|
1449
1785
|
});
|
|
1450
1786
|
};
|
|
1451
|
-
if (isJsSourceFile(
|
|
1787
|
+
if (isJsSourceFile(ts.getSourceFileOfNode(node)) && lowerer.dynConvertible(v.type)) {
|
|
1452
1788
|
if (what === "pipeline") {
|
|
1453
1789
|
// Strings and arrays are iterables — VALID pipeline stages in
|
|
1454
1790
|
// Node — and a record carrying a readable/writable member may be
|
|
@@ -1463,7 +1799,7 @@ function lowerStreamArg(lowerer, node, what) {
|
|
|
1463
1799
|
argTypeThrow("body", PIPELINE_STAGE_EXPECTED);
|
|
1464
1800
|
}
|
|
1465
1801
|
}
|
|
1466
|
-
else if ((ts.isObjectLiteralExpression(node) && node.properties.length === 0) ||
|
|
1802
|
+
else if ((ts.isObjectLiteralExpression(node) && node.properties.nodes.length === 0) ||
|
|
1467
1803
|
v.type.kind === "record" ||
|
|
1468
1804
|
v.type.kind === "string" ||
|
|
1469
1805
|
v.type.kind === "f64" ||
|
|
@@ -1569,7 +1905,7 @@ function eosOptions(lowerer, node, promiseForm) {
|
|
|
1569
1905
|
return false;
|
|
1570
1906
|
lowerer.noLowering(`the finished option '${key}' with a non-literal value`, p.initializer, "pass true or false");
|
|
1571
1907
|
};
|
|
1572
|
-
for (const p of node.properties) {
|
|
1908
|
+
for (const p of node.properties.nodes) {
|
|
1573
1909
|
const key = (ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) && ts.isIdentifier(p.name)
|
|
1574
1910
|
? p.name.text
|
|
1575
1911
|
: null;
|
|
@@ -1603,7 +1939,7 @@ function eosOptions(lowerer, node, promiseForm) {
|
|
|
1603
1939
|
* any expression, end as a boolean literal. */
|
|
1604
1940
|
function pipelineOptions(lowerer, node) {
|
|
1605
1941
|
const out = { end: true, signal: null };
|
|
1606
|
-
for (const p of node.properties) {
|
|
1942
|
+
for (const p of node.properties.nodes) {
|
|
1607
1943
|
const key = (ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) && ts.isIdentifier(p.name)
|
|
1608
1944
|
? p.name.text
|
|
1609
1945
|
: null;
|
|
@@ -1632,7 +1968,7 @@ function pipelineOptions(lowerer, node) {
|
|
|
1632
1968
|
* does not own — the caller's module-qualified fence speaks. */
|
|
1633
1969
|
export function lowerStreamModuleCall(lowerer, call, bi, loc) {
|
|
1634
1970
|
if (bi.module === "stream/promises") {
|
|
1635
|
-
const args = call.arguments;
|
|
1971
|
+
const args = call.arguments.nodes;
|
|
1636
1972
|
// finished(stream) → a pending void promise the terminal watcher
|
|
1637
1973
|
// settles (rejected with the stream's error, or
|
|
1638
1974
|
// ERR_STREAM_PREMATURE_CLOSE — the callback form's status, boxed
|
|
@@ -1733,7 +2069,7 @@ export function lowerStreamModuleCall(lowerer, call, bi, loc) {
|
|
|
1733
2069
|
return null;
|
|
1734
2070
|
}
|
|
1735
2071
|
if (bi.module === "stream/consumers") {
|
|
1736
|
-
const args = call.arguments;
|
|
2072
|
+
const args = call.arguments.nodes;
|
|
1737
2073
|
// text/json/buffer/arrayBuffer(stream) → a pending promise the
|
|
1738
2074
|
// accumulate-and-settle machinery resolves at the terminal point (the
|
|
1739
2075
|
// utf8 decode / the parsed JSON dyn tree / the concatenated bytes / an
|
|
@@ -1774,7 +2110,7 @@ export function lowerStreamModuleCall(lowerer, call, bi, loc) {
|
|
|
1774
2110
|
}
|
|
1775
2111
|
if (bi.module !== "stream")
|
|
1776
2112
|
return null;
|
|
1777
|
-
const args = call.arguments;
|
|
2113
|
+
const args = call.arguments.nodes;
|
|
1778
2114
|
if (bi.member === "getDefaultHighWaterMark") {
|
|
1779
2115
|
// Node 24: 65536 bytes / 16 objects — compile-time literals only.
|
|
1780
2116
|
// The byte default is platform-split at Node's source
|
|
@@ -1946,7 +2282,7 @@ function lowerPipelineStages(lowerer, stageArgs, loc) {
|
|
|
1946
2282
|
for (let i = first; i < end; i++) {
|
|
1947
2283
|
const fn = stageArgs[i];
|
|
1948
2284
|
const isLast = destFn && i === end - 1;
|
|
1949
|
-
const isAsync = (fn.modifiers ?? []).some((m) => m.kind === ts.SyntaxKind.AsyncKeyword);
|
|
2285
|
+
const isAsync = (fn.modifiers?.nodes ?? []).some((m) => m.kind === ts.SyntaxKind.AsyncKeyword);
|
|
1950
2286
|
const isGen = ts.isFunctionExpression(fn) && fn.asteriskToken !== undefined;
|
|
1951
2287
|
if (isLast && isGen) {
|
|
1952
2288
|
// pipeline() pumps it into an object-mode PassThrough, whose
|
|
@@ -1961,14 +2297,14 @@ function lowerPipelineStages(lowerer, stageArgs, loc) {
|
|
|
1961
2297
|
: "pipeline stages that are not async generator functions", fn, "write the stage as async function* (source) { for await (const chunk of source) ... }");
|
|
1962
2298
|
}
|
|
1963
2299
|
const optionsAt = srcT === null ? 0 : 1;
|
|
1964
|
-
if (fn.parameters.length > optionsAt + 1) {
|
|
1965
|
-
lowerer.noLowering("pipeline stages with parameters after the options argument", fn.parameters[optionsAt + 1], "a stage takes the source and { signal }");
|
|
2300
|
+
if (fn.parameters.nodes.length > optionsAt + 1) {
|
|
2301
|
+
lowerer.noLowering("pipeline stages with parameters after the options argument", fn.parameters.nodes[optionsAt + 1], "a stage takes the source and { signal }");
|
|
1966
2302
|
}
|
|
1967
2303
|
const lowered = lowerStageFunction(lowerer, fn, srcT);
|
|
1968
2304
|
const params = lowered.closure.type.kind === "func" ? lowered.closure.type.params : [];
|
|
1969
2305
|
if (params.length > optionsAt) {
|
|
1970
2306
|
if (params[optionsAt].kind !== "dyn") {
|
|
1971
|
-
lowerer.noLowering("a pipeline stage's options argument with this type", fn.parameters[optionsAt], "type it as { signal: AbortSignal }");
|
|
2307
|
+
lowerer.noLowering("a pipeline stage's options argument with this type", fn.parameters.nodes[optionsAt], "type it as { signal: AbortSignal }");
|
|
1972
2308
|
}
|
|
1973
2309
|
mask |= 1 << (i - first);
|
|
1974
2310
|
}
|
|
@@ -2151,7 +2487,7 @@ function pipelineAbortHelper(lowerer, ac, loc) {
|
|
|
2151
2487
|
* `for await` loops. Answers the closure and what it returns: an async
|
|
2152
2488
|
* generator, or a promise for a destination async function. */
|
|
2153
2489
|
function lowerStageFunction(lowerer, fn, srcT) {
|
|
2154
|
-
const param = srcT === null ? undefined : fn.parameters[0];
|
|
2490
|
+
const param = srcT === null ? undefined : fn.parameters.nodes[0];
|
|
2155
2491
|
const symbol = param && ts.isIdentifier(param.name)
|
|
2156
2492
|
? lowerer.checker.getSymbolAtLocation(param.name)
|
|
2157
2493
|
: undefined;
|
|
@@ -2196,7 +2532,7 @@ function lowerStageFunction(lowerer, fn, srcT) {
|
|
|
2196
2532
|
* the wrong position, a single Readable or Writable (Duplex.from wraps
|
|
2197
2533
|
* those), and functions, iterables or web streams have no lowering. */
|
|
2198
2534
|
function lowerStreamCompose(lowerer, call, loc) {
|
|
2199
|
-
const args = call.arguments;
|
|
2535
|
+
const args = call.arguments.nodes;
|
|
2200
2536
|
const duplex = { kind: "object", className: "%Duplex" };
|
|
2201
2537
|
if (args.some((a) => ts.isSpreadElement(a))) {
|
|
2202
2538
|
lowerer.noLowering("compose with spread arguments", call, "pass the streams directly");
|
|
@@ -2260,14 +2596,14 @@ function lowerOperatorCallback(lowerer, node, member, maxParams) {
|
|
|
2260
2596
|
const loc = locOf(node);
|
|
2261
2597
|
const optionsParam = (at) => lowerer.noLowering(`${member} callbacks that declare the options argument`, at, "the { signal } argument has no lowering — take only the chunk");
|
|
2262
2598
|
if ((ts.isArrowFunction(node) || ts.isFunctionExpression(node)) &&
|
|
2263
|
-
node.parameters.length > maxParams) {
|
|
2264
|
-
optionsParam(node.parameters[maxParams]);
|
|
2599
|
+
node.parameters.nodes.length > maxParams) {
|
|
2600
|
+
optionsParam(node.parameters.nodes[maxParams]);
|
|
2265
2601
|
}
|
|
2266
2602
|
const v = lowerer.lowerExpr(node);
|
|
2267
2603
|
if (v.type.kind === "dyn")
|
|
2268
2604
|
return v;
|
|
2269
2605
|
if (v.type.kind !== "func" &&
|
|
2270
|
-
isJsSourceFile(
|
|
2606
|
+
isJsSourceFile(ts.getSourceFileOfNode(node)) &&
|
|
2271
2607
|
lowerer.dynConvertible(v.type)) {
|
|
2272
2608
|
// JavaScript passes any value; Node's validateFunction throws.
|
|
2273
2609
|
return { kind: "dynFrom", value: v, type: DYN, loc };
|
|
@@ -2317,7 +2653,7 @@ function lowerOperatorValue(lowerer, node, what, loc, literalObject) {
|
|
|
2317
2653
|
}
|
|
2318
2654
|
function lowerStreamOperator(lowerer, call, access, member) {
|
|
2319
2655
|
const loc = locOf(call);
|
|
2320
|
-
const args = call.arguments;
|
|
2656
|
+
const args = call.arguments.nodes;
|
|
2321
2657
|
const recv = lowerer.lowerExpr(access.expression);
|
|
2322
2658
|
const readable = { kind: "object", className: "%Readable" };
|
|
2323
2659
|
const opts = (i) => lowerOperatorValue(lowerer, args[i], `${member} options`, loc, true);
|
|
@@ -2420,6 +2756,226 @@ function checkUtf8Encoding(lowerer, member, arg) {
|
|
|
2420
2756
|
}
|
|
2421
2757
|
/** `recv.<member>(...)` over a stream-rooted receiver. Returns null only
|
|
2422
2758
|
* for members this spoke does not own. */
|
|
2759
|
+
/** pipe()'s `{ end }` option: true when absent. */
|
|
2760
|
+
function pipeEndOption(lowerer, options, loc) {
|
|
2761
|
+
let end = boolLit(true, loc);
|
|
2762
|
+
if (options === undefined)
|
|
2763
|
+
return end;
|
|
2764
|
+
if (!ts.isObjectLiteralExpression(options)) {
|
|
2765
|
+
lowerer.noLowering("pipe with a non-literal options argument", options, "{ end: <bool> } inline is the supported form");
|
|
2766
|
+
}
|
|
2767
|
+
for (const prop of options.properties.nodes) {
|
|
2768
|
+
if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name) || prop.name.text !== "end") {
|
|
2769
|
+
lowerer.noLowering("a pipe option other than 'end'", prop);
|
|
2770
|
+
}
|
|
2771
|
+
end = lowerer.lowerExprExpecting(prop.initializer, BOOL);
|
|
2772
|
+
}
|
|
2773
|
+
return end;
|
|
2774
|
+
}
|
|
2775
|
+
/** `readable.pipe(process.stdout)`: the process stream joins the pipe as
|
|
2776
|
+
* an fd-backed Writable (stream.stdioWritable), and — like Node, which
|
|
2777
|
+
* never ends process.stdout or process.stderr from a pipe — the source's
|
|
2778
|
+
* end does not end it. pipe() answers the process stream itself. */
|
|
2779
|
+
function pipeIntoStdio(lowerer, call, access, target) {
|
|
2780
|
+
const loc = locOf(call);
|
|
2781
|
+
// JS order: the receiver, then the destination, then the options.
|
|
2782
|
+
const receiverValue = lowerer.lowerExpr(access.expression);
|
|
2783
|
+
const source = lowerer.declareHiddenLocal("%pipeSource", receiverValue.type);
|
|
2784
|
+
const stdio = lowerer.declareHiddenLocal("%pipeStdio", target.type);
|
|
2785
|
+
const options = call.arguments.nodes[1];
|
|
2786
|
+
const stmts = [
|
|
2787
|
+
{ kind: "varDecl", localId: source.id, init: receiverValue, loc },
|
|
2788
|
+
{ kind: "varDecl", localId: stdio.id, init: target, loc },
|
|
2789
|
+
];
|
|
2790
|
+
// The options literal still evaluates; its end flag has no effect here.
|
|
2791
|
+
if (options !== undefined) {
|
|
2792
|
+
stmts.push({ kind: "exprStmt", expr: pipeEndOption(lowerer, options, loc), loc });
|
|
2793
|
+
}
|
|
2794
|
+
const receiver = { kind: "varRef", localId: source.id, type: receiverValue.type, loc };
|
|
2795
|
+
const writable = { kind: "object", className: "%Writable" };
|
|
2796
|
+
stmts.push({
|
|
2797
|
+
kind: "exprStmt",
|
|
2798
|
+
expr: {
|
|
2799
|
+
kind: "libCall",
|
|
2800
|
+
fn: "readable.pipe",
|
|
2801
|
+
args: [
|
|
2802
|
+
receiver,
|
|
2803
|
+
{
|
|
2804
|
+
kind: "libCall",
|
|
2805
|
+
fn: "stream.stdioWritable",
|
|
2806
|
+
args: [{ kind: "varRef", localId: stdio.id, type: target.type, loc }],
|
|
2807
|
+
type: writable,
|
|
2808
|
+
loc,
|
|
2809
|
+
},
|
|
2810
|
+
boolLit(false, loc),
|
|
2811
|
+
],
|
|
2812
|
+
type: writable,
|
|
2813
|
+
loc,
|
|
2814
|
+
},
|
|
2815
|
+
loc,
|
|
2816
|
+
});
|
|
2817
|
+
return {
|
|
2818
|
+
kind: "seqExpr",
|
|
2819
|
+
stmts,
|
|
2820
|
+
result: { kind: "varRef", localId: stdio.id, type: target.type, loc },
|
|
2821
|
+
type: target.type,
|
|
2822
|
+
loc,
|
|
2823
|
+
};
|
|
2824
|
+
}
|
|
2825
|
+
/** `readable.unpipe(untyped)`: a native destination (boxed) unpipes as a
|
|
2826
|
+
* typed one does; any other value unpipes the JavaScript destination a
|
|
2827
|
+
* pipe into it registered (scr_stream_dyn.c), or does nothing when there
|
|
2828
|
+
* is none, as Node's unpipe does for a destination it is not piped into.
|
|
2829
|
+
* The call answers the source. */
|
|
2830
|
+
function unpipeDyn(lowerer, receiver, dst, loc) {
|
|
2831
|
+
noteUntypedStreamFlow(lowerer, null);
|
|
2832
|
+
const source = lowerer.declareHiddenLocal("%unpipeSource", receiver.type);
|
|
2833
|
+
const destination = lowerer.declareHiddenLocal("%unpipeDestination", dst.type);
|
|
2834
|
+
const sourceRef = varRef(source.id, receiver.type, loc);
|
|
2835
|
+
const destinationRef = varRef(destination.id, dst.type, loc);
|
|
2836
|
+
const stmts = [
|
|
2837
|
+
{ kind: "varDecl", localId: source.id, init: receiver, loc },
|
|
2838
|
+
{ kind: "varDecl", localId: destination.id, init: dst, loc },
|
|
2839
|
+
];
|
|
2840
|
+
const unpipeNative = (native) => ({
|
|
2841
|
+
kind: "exprStmt",
|
|
2842
|
+
expr: {
|
|
2843
|
+
kind: "libCall",
|
|
2844
|
+
fn: "readable.unpipe",
|
|
2845
|
+
args: [sourceRef, native],
|
|
2846
|
+
type: receiver.type,
|
|
2847
|
+
loc,
|
|
2848
|
+
},
|
|
2849
|
+
loc,
|
|
2850
|
+
});
|
|
2851
|
+
if (lowerer.dynNodeStreams) {
|
|
2852
|
+
stmts.push(dynNativeBranch(lowerer, destinationRef, "w", unpipeNative, {
|
|
2853
|
+
kind: "exprStmt",
|
|
2854
|
+
expr: {
|
|
2855
|
+
kind: "libCall",
|
|
2856
|
+
fn: "stream.unpipeDyn",
|
|
2857
|
+
args: [sourceRef, destinationRef],
|
|
2858
|
+
type: VOID,
|
|
2859
|
+
loc,
|
|
2860
|
+
},
|
|
2861
|
+
loc,
|
|
2862
|
+
}));
|
|
2863
|
+
}
|
|
2864
|
+
else {
|
|
2865
|
+
stmts.push(unpipeNative({
|
|
2866
|
+
kind: "libCall",
|
|
2867
|
+
fn: "stream.unboxDyn",
|
|
2868
|
+
args: [
|
|
2869
|
+
destinationRef,
|
|
2870
|
+
strLit("unpipe destinations other than native streams are not supported yet", loc),
|
|
2871
|
+
],
|
|
2872
|
+
type: { kind: "object", className: "%Duplex" },
|
|
2873
|
+
loc,
|
|
2874
|
+
}));
|
|
2875
|
+
}
|
|
2876
|
+
return { kind: "seqExpr", stmts, result: sourceRef, type: receiver.type, loc };
|
|
2877
|
+
}
|
|
2878
|
+
/** The pipe() libCall for a destination of type `dst`. Under the general
|
|
2879
|
+
* stream representation a Writable slot can hold the converted
|
|
2880
|
+
* process.stdout / process.stderr, which a pipe never ends (as in Node), so
|
|
2881
|
+
* the pipe takes readable.pipeGeneral, which checks for them. */
|
|
2882
|
+
function generalPipe(lowerer, dst) {
|
|
2883
|
+
return lowerer.generalNodeStreams && dst.kind === "object" && dst.className === "%Writable"
|
|
2884
|
+
? "readable.pipeGeneral"
|
|
2885
|
+
: "readable.pipe";
|
|
2886
|
+
}
|
|
2887
|
+
/** `readable.pipe(untyped)`: a checked-dynamic destination unwraps a boxed
|
|
2888
|
+
* native stream at run time (stream.unboxDyn; other values throw the
|
|
2889
|
+
* not-supported Error), and pipe() answers the destination value itself. */
|
|
2890
|
+
function pipeIntoDyn(lowerer, call, access, target) {
|
|
2891
|
+
const loc = locOf(call);
|
|
2892
|
+
noteUntypedStreamFlow(lowerer, null);
|
|
2893
|
+
const receiverValue = lowerer.lowerExpr(access.expression);
|
|
2894
|
+
const source = lowerer.declareHiddenLocal("%pipeSource", receiverValue.type);
|
|
2895
|
+
const destination = lowerer.declareHiddenLocal("%pipeDestination", target.type);
|
|
2896
|
+
const stmts = [
|
|
2897
|
+
{ kind: "varDecl", localId: source.id, init: receiverValue, loc },
|
|
2898
|
+
{ kind: "varDecl", localId: destination.id, init: target, loc },
|
|
2899
|
+
];
|
|
2900
|
+
const end = pipeEndOption(lowerer, call.arguments.nodes[1], loc);
|
|
2901
|
+
const duplex = { kind: "object", className: "%Duplex" };
|
|
2902
|
+
// Checked-dynamic stream slots (dyn-streams.ts): a JavaScript stream
|
|
2903
|
+
// object is a destination too, piped with Node's listener protocol.
|
|
2904
|
+
if (lowerer.dynNodeStreams) {
|
|
2905
|
+
const sourceRef = { kind: "varRef", localId: source.id, type: receiverValue.type, loc };
|
|
2906
|
+
const destinationRef = {
|
|
2907
|
+
kind: "varRef",
|
|
2908
|
+
localId: destination.id,
|
|
2909
|
+
type: target.type,
|
|
2910
|
+
loc,
|
|
2911
|
+
};
|
|
2912
|
+
const ending = lowerer.declareHiddenLocal("%pipeEnd", BOOL);
|
|
2913
|
+
stmts.push({ kind: "varDecl", localId: ending.id, init: end, loc });
|
|
2914
|
+
const endRef = { kind: "varRef", localId: ending.id, type: BOOL, loc };
|
|
2915
|
+
stmts.push(dynNativeBranch(lowerer, destinationRef, "w", (native) => ({
|
|
2916
|
+
kind: "exprStmt",
|
|
2917
|
+
expr: {
|
|
2918
|
+
kind: "libCall",
|
|
2919
|
+
// Checked-dynamic slots come with the general representation,
|
|
2920
|
+
// where a boxed native destination can be the converted
|
|
2921
|
+
// process.stdout (generalPipe).
|
|
2922
|
+
fn: "readable.pipeGeneral",
|
|
2923
|
+
args: [sourceRef, native, endRef],
|
|
2924
|
+
type: native.type,
|
|
2925
|
+
loc,
|
|
2926
|
+
},
|
|
2927
|
+
loc,
|
|
2928
|
+
}), {
|
|
2929
|
+
kind: "exprStmt",
|
|
2930
|
+
expr: {
|
|
2931
|
+
kind: "libCall",
|
|
2932
|
+
fn: "stream.pipeDyn",
|
|
2933
|
+
args: [sourceRef, lowerer.coerceToExpected(sourceRef, DYN), destinationRef, endRef],
|
|
2934
|
+
type: VOID,
|
|
2935
|
+
loc,
|
|
2936
|
+
},
|
|
2937
|
+
loc,
|
|
2938
|
+
}));
|
|
2939
|
+
return {
|
|
2940
|
+
kind: "seqExpr",
|
|
2941
|
+
stmts,
|
|
2942
|
+
result: destinationRef,
|
|
2943
|
+
type: target.type,
|
|
2944
|
+
loc,
|
|
2945
|
+
};
|
|
2946
|
+
}
|
|
2947
|
+
stmts.push({
|
|
2948
|
+
kind: "exprStmt",
|
|
2949
|
+
expr: {
|
|
2950
|
+
kind: "libCall",
|
|
2951
|
+
fn: lowerer.generalNodeStreams ? "readable.pipeGeneral" : "readable.pipe",
|
|
2952
|
+
args: [
|
|
2953
|
+
{ kind: "varRef", localId: source.id, type: receiverValue.type, loc },
|
|
2954
|
+
{
|
|
2955
|
+
kind: "libCall",
|
|
2956
|
+
fn: "stream.unboxDyn",
|
|
2957
|
+
args: [
|
|
2958
|
+
{ kind: "varRef", localId: destination.id, type: target.type, loc },
|
|
2959
|
+
strLit("pipe destinations other than native streams are not supported yet", loc),
|
|
2960
|
+
],
|
|
2961
|
+
type: duplex,
|
|
2962
|
+
loc,
|
|
2963
|
+
},
|
|
2964
|
+
end,
|
|
2965
|
+
],
|
|
2966
|
+
type: duplex,
|
|
2967
|
+
loc,
|
|
2968
|
+
},
|
|
2969
|
+
loc,
|
|
2970
|
+
});
|
|
2971
|
+
return {
|
|
2972
|
+
kind: "seqExpr",
|
|
2973
|
+
stmts,
|
|
2974
|
+
result: { kind: "varRef", localId: destination.id, type: target.type, loc },
|
|
2975
|
+
type: target.type,
|
|
2976
|
+
loc,
|
|
2977
|
+
};
|
|
2978
|
+
}
|
|
2423
2979
|
export function lowerStreamMethodCall(lowerer, call, access, info) {
|
|
2424
2980
|
const member = access.name.text;
|
|
2425
2981
|
if (STREAM_OPERATORS.has(member)) {
|
|
@@ -2433,7 +2989,7 @@ export function lowerStreamMethodCall(lowerer, call, access, info) {
|
|
|
2433
2989
|
if (!sides)
|
|
2434
2990
|
return null;
|
|
2435
2991
|
const loc = locOf(call);
|
|
2436
|
-
const args = call.arguments;
|
|
2992
|
+
const args = call.arguments.nodes;
|
|
2437
2993
|
const readableSide = sides === "r" || sides === "rw";
|
|
2438
2994
|
const writableSide = sides === "w" || sides === "rw";
|
|
2439
2995
|
const cls = info.def.name.slice(1);
|
|
@@ -2604,30 +3160,57 @@ export function lowerStreamMethodCall(lowerer, call, access, info) {
|
|
|
2604
3160
|
if (args.length === 0 || args.length > 2) {
|
|
2605
3161
|
lowerer.noLowering(`pipe with ${args.length} arguments`, call, "the supported forms are (destination) and (destination, { end })");
|
|
2606
3162
|
}
|
|
2607
|
-
|
|
3163
|
+
// A Hash or Hmac destination pipes into its Transform, and pipe()
|
|
3164
|
+
// answers the Hash itself (the receiver evaluates first, as in JS).
|
|
3165
|
+
if (isHashValueType(lowerer.mapTypeOf(lowerer.typeOf(args[0])))) {
|
|
3166
|
+
const receiverValue = lowerer.lowerExpr(access.expression);
|
|
3167
|
+
const source = lowerer.declareHiddenLocal("%pipeSource", receiverValue.type);
|
|
3168
|
+
const hashValue = lowerer.lowerExpr(args[0]);
|
|
3169
|
+
const hash = lowerer.declareHiddenLocal("%pipeHash", hashValue.type);
|
|
3170
|
+
const end = pipeEndOption(lowerer, args[1], loc);
|
|
3171
|
+
return {
|
|
3172
|
+
kind: "seqExpr",
|
|
3173
|
+
stmts: [
|
|
3174
|
+
{ kind: "varDecl", localId: source.id, init: receiverValue, loc },
|
|
3175
|
+
{ kind: "varDecl", localId: hash.id, init: hashValue, loc },
|
|
3176
|
+
{
|
|
3177
|
+
kind: "exprStmt",
|
|
3178
|
+
expr: {
|
|
3179
|
+
kind: "libCall",
|
|
3180
|
+
fn: "readable.pipe",
|
|
3181
|
+
args: [
|
|
3182
|
+
{ kind: "varRef", localId: source.id, type: receiverValue.type, loc },
|
|
3183
|
+
hashStreamOf({ kind: "varRef", localId: hash.id, type: hashValue.type, loc }, true),
|
|
3184
|
+
end,
|
|
3185
|
+
],
|
|
3186
|
+
type: { kind: "object", className: "%Transform" },
|
|
3187
|
+
loc,
|
|
3188
|
+
},
|
|
3189
|
+
loc,
|
|
3190
|
+
},
|
|
3191
|
+
],
|
|
3192
|
+
result: { kind: "varRef", localId: hash.id, type: hashValue.type, loc },
|
|
3193
|
+
type: hashValue.type,
|
|
3194
|
+
loc,
|
|
3195
|
+
};
|
|
3196
|
+
}
|
|
3197
|
+
const target = lowerer.lowerExpr(args[0]);
|
|
3198
|
+
if (target.type.kind === "procStream")
|
|
3199
|
+
return pipeIntoStdio(lowerer, call, access, target);
|
|
3200
|
+
if (target.type.kind === "dyn")
|
|
3201
|
+
return pipeIntoDyn(lowerer, call, access, target);
|
|
3202
|
+
const dst = target;
|
|
2608
3203
|
const dstInfo = dst.type.kind === "object" ? lowerer.classes.get(dst.type.className) : undefined;
|
|
2609
3204
|
const dstSides = streamSidesOf(lowerer, dstInfo);
|
|
2610
3205
|
if (dstSides !== "w" && dstSides !== "rw") {
|
|
2611
|
-
|
|
2612
|
-
|
|
2613
|
-
let end = boolLit(true, loc);
|
|
2614
|
-
if (args[1] !== undefined) {
|
|
2615
|
-
if (!ts.isObjectLiteralExpression(args[1])) {
|
|
2616
|
-
lowerer.noLowering("pipe with a non-literal options argument", args[1], "{ end: <bool> } inline is the supported form");
|
|
2617
|
-
}
|
|
2618
|
-
for (const prop of args[1].properties) {
|
|
2619
|
-
if (!ts.isPropertyAssignment(prop) ||
|
|
2620
|
-
!ts.isIdentifier(prop.name) ||
|
|
2621
|
-
prop.name.text !== "end") {
|
|
2622
|
-
lowerer.noLowering("a pipe option other than 'end'", prop);
|
|
2623
|
-
}
|
|
2624
|
-
end = lowerer.lowerExprExpecting(prop.initializer, BOOL);
|
|
2625
|
-
}
|
|
3206
|
+
requestGeneralStreamSurface(lowerer, args[0]);
|
|
3207
|
+
lowerer.noLowering(`pipe into a '${lowerer.fmt(dst.type)}'`, args[0], "the destination must be a stream Writable/Duplex, process.stdout or process.stderr (sockets are not pipe destinations yet)");
|
|
2626
3208
|
}
|
|
3209
|
+
const end = pipeEndOption(lowerer, args[1], loc);
|
|
2627
3210
|
const receiver = lowerer.lowerExpr(access.expression);
|
|
2628
3211
|
return {
|
|
2629
3212
|
kind: "libCall",
|
|
2630
|
-
fn:
|
|
3213
|
+
fn: generalPipe(lowerer, dst.type),
|
|
2631
3214
|
args: [receiver, dst, end],
|
|
2632
3215
|
type: dst.type,
|
|
2633
3216
|
loc,
|
|
@@ -2640,6 +3223,8 @@ export function lowerStreamMethodCall(lowerer, call, access, info) {
|
|
|
2640
3223
|
const receiver = lowerer.lowerExpr(access.expression);
|
|
2641
3224
|
if (args[0] !== undefined) {
|
|
2642
3225
|
const dst = lowerer.lowerExpr(args[0]);
|
|
3226
|
+
if (dst.type.kind === "dyn")
|
|
3227
|
+
return unpipeDyn(lowerer, receiver, dst, loc);
|
|
2643
3228
|
const dstInfo = dst.type.kind === "object" ? lowerer.classes.get(dst.type.className) : undefined;
|
|
2644
3229
|
const dstSides = streamSidesOf(lowerer, dstInfo);
|
|
2645
3230
|
if (dstSides !== "w" && dstSides !== "rw") {
|
|
@@ -2653,6 +3238,44 @@ export function lowerStreamMethodCall(lowerer, call, access, info) {
|
|
|
2653
3238
|
loc,
|
|
2654
3239
|
};
|
|
2655
3240
|
}
|
|
3241
|
+
// Checked-dynamic slots: unpipe() also unpipes the JavaScript
|
|
3242
|
+
// destinations stream.pipeDyn registered (stream.unpipeDyn with an
|
|
3243
|
+
// undefined destination), as Node's unpipe() empties every pipe.
|
|
3244
|
+
if (lowerer.dynNodeStreams) {
|
|
3245
|
+
const source = lowerer.declareHiddenLocal("%unpipeSource", receiver.type);
|
|
3246
|
+
const sourceRef = varRef(source.id, receiver.type, loc);
|
|
3247
|
+
return {
|
|
3248
|
+
kind: "seqExpr",
|
|
3249
|
+
stmts: [
|
|
3250
|
+
{ kind: "varDecl", localId: source.id, init: receiver, loc },
|
|
3251
|
+
{
|
|
3252
|
+
kind: "exprStmt",
|
|
3253
|
+
expr: {
|
|
3254
|
+
kind: "libCall",
|
|
3255
|
+
fn: "readable.unpipe",
|
|
3256
|
+
args: [sourceRef],
|
|
3257
|
+
type: receiver.type,
|
|
3258
|
+
loc,
|
|
3259
|
+
},
|
|
3260
|
+
loc,
|
|
3261
|
+
},
|
|
3262
|
+
{
|
|
3263
|
+
kind: "exprStmt",
|
|
3264
|
+
expr: {
|
|
3265
|
+
kind: "libCall",
|
|
3266
|
+
fn: "stream.unpipeDyn",
|
|
3267
|
+
args: [sourceRef, dynUndefinedExpr(loc)],
|
|
3268
|
+
type: VOID,
|
|
3269
|
+
loc,
|
|
3270
|
+
},
|
|
3271
|
+
loc,
|
|
3272
|
+
},
|
|
3273
|
+
],
|
|
3274
|
+
result: sourceRef,
|
|
3275
|
+
type: receiver.type,
|
|
3276
|
+
loc,
|
|
3277
|
+
};
|
|
3278
|
+
}
|
|
2656
3279
|
return { kind: "libCall", fn: "readable.unpipe", args: [receiver], type: receiver.type, loc };
|
|
2657
3280
|
}
|
|
2658
3281
|
if (member === "destroy") {
|
|
@@ -2741,8 +3364,10 @@ export function lowerStreamMethodCall(lowerer, call, access, info) {
|
|
|
2741
3364
|
: lowerer.lowerExprExpecting(args[0], STRING);
|
|
2742
3365
|
const fn = kind === "bytes" ? "writable.write" : "writable.writeStr";
|
|
2743
3366
|
if (cbArg !== undefined) {
|
|
2744
|
-
const cb =
|
|
2745
|
-
|
|
3367
|
+
const cb = callbackDeclaresParameters(cbArg)
|
|
3368
|
+
? null
|
|
3369
|
+
: lowerer.lowerExprExpecting(cbArg, funcOf([], VOID));
|
|
3370
|
+
if (cb === null || cb.type.kind !== "func" || cb.type.params.length > 0) {
|
|
2746
3371
|
lowerer.noLowering("write completion callbacks taking the error argument", cbArg, "() => void callbacks are supported (listen for 'error' to observe failures)");
|
|
2747
3372
|
}
|
|
2748
3373
|
return { kind: "libCall", fn, args: [receiver, chunk, cb], type: BOOL, loc };
|
|
@@ -2802,8 +3427,10 @@ export function lowerStreamMethodCall(lowerer, call, access, info) {
|
|
|
2802
3427
|
: lowerer.lowerExprExpecting(chunkNode, STRING));
|
|
2803
3428
|
}
|
|
2804
3429
|
if (cbArg !== undefined) {
|
|
2805
|
-
const cb =
|
|
2806
|
-
|
|
3430
|
+
const cb = callbackDeclaresParameters(cbArg)
|
|
3431
|
+
? null
|
|
3432
|
+
: lowerer.lowerExprExpecting(cbArg, funcOf([], VOID));
|
|
3433
|
+
if (cb === null || cb.type.kind !== "func" || cb.type.params.length > 0) {
|
|
2807
3434
|
lowerer.noLowering("end callbacks with parameters", cbArg, "() => void callbacks are supported");
|
|
2808
3435
|
}
|
|
2809
3436
|
flags |= 4;
|
|
@@ -3037,4 +3664,16 @@ export function lowerStreamProperty(lowerer, expr, info) {
|
|
|
3037
3664
|
}
|
|
3038
3665
|
return null;
|
|
3039
3666
|
}
|
|
3667
|
+
/** Whether an inline completion callback declares a parameter. Node calls
|
|
3668
|
+
* write and end callbacks with an error argument (null on success), but the
|
|
3669
|
+
* native callback receives none, so the parameter would read undefined
|
|
3670
|
+
* where Node passes null or the error. A function literal with parameters
|
|
3671
|
+
* would otherwise adapt to the zero-parameter slot silently. */
|
|
3672
|
+
function callbackDeclaresParameters(node) {
|
|
3673
|
+
let callback = node;
|
|
3674
|
+
while (ts.isParenthesizedExpression(callback))
|
|
3675
|
+
callback = callback.expression;
|
|
3676
|
+
return ((ts.isArrowFunction(callback) || ts.isFunctionExpression(callback)) &&
|
|
3677
|
+
callback.parameters.nodes.length > 0);
|
|
3678
|
+
}
|
|
3040
3679
|
//# sourceMappingURL=lower-stream.js.map
|