@scriptc/compiler 0.4.2 → 0.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ambient/scriptc-node-fallback.d.ts +470 -66
- package/dist/backend/cycle-analysis.d.ts +4 -1
- package/dist/backend/cycle-analysis.js +6 -4
- package/dist/backend/cycle-analysis.js.map +1 -1
- package/dist/backend/cycle-analysis.test.js +55 -0
- package/dist/backend/cycle-analysis.test.js.map +1 -1
- package/dist/backend/cycle-mutability.d.ts +7 -0
- package/dist/backend/cycle-mutability.js +19 -1
- package/dist/backend/cycle-mutability.js.map +1 -1
- package/dist/backend/executable-features.js +2 -0
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/immutability.d.ts +6 -3
- package/dist/backend/immutability.js +33 -29
- package/dist/backend/immutability.js.map +1 -1
- package/dist/backend/library-pack.js +1 -0
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/llvm/alloc.d.ts +16 -1
- package/dist/backend/llvm/alloc.js +54 -4
- package/dist/backend/llvm/alloc.js.map +1 -1
- package/dist/backend/llvm/appended-array-literals.d.ts +2 -1
- package/dist/backend/llvm/appended-array-literals.js +44 -36
- package/dist/backend/llvm/appended-array-literals.js.map +1 -1
- package/dist/backend/llvm/appended-array-literals.test.js +4 -3
- package/dist/backend/llvm/appended-array-literals.test.js.map +1 -1
- package/dist/backend/llvm/array-search.d.ts +4 -3
- package/dist/backend/llvm/array-search.js +21 -9
- package/dist/backend/llvm/array-search.js.map +1 -1
- package/dist/backend/llvm/blocks.d.ts +1 -1
- package/dist/backend/llvm/blocks.js +2 -2
- package/dist/backend/llvm/blocks.js.map +1 -1
- package/dist/backend/llvm/byte-windows.js +2 -0
- package/dist/backend/llvm/byte-windows.js.map +1 -1
- package/dist/backend/llvm/bytes-alias.d.ts +6 -1
- package/dist/backend/llvm/bytes-alias.js +8 -2
- package/dist/backend/llvm/bytes-alias.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.d.ts +47 -5
- package/dist/backend/llvm/bytes-loop-versions.js +479 -32
- package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.test.js +263 -2
- package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
- package/dist/backend/llvm/checked-value-lifetimes.js +2 -0
- package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
- package/dist/backend/llvm/classes.d.ts +7 -5
- package/dist/backend/llvm/classes.js +44 -20
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +167 -7
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +9 -3
- package/dist/backend/llvm/common.js +9 -3
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.d.ts +2 -1
- package/dist/backend/llvm/constant-callbacks.js +83 -52
- package/dist/backend/llvm/constant-callbacks.js.map +1 -1
- package/dist/backend/llvm/counted-loops.d.ts +7 -0
- package/dist/backend/llvm/counted-loops.js +18 -0
- package/dist/backend/llvm/counted-loops.js.map +1 -1
- package/dist/backend/llvm/debug-info.js +2 -5
- package/dist/backend/llvm/debug-info.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.d.ts +39 -8
- package/dist/backend/llvm/dense-array-access.js +222 -52
- package/dist/backend/llvm/dense-array-access.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.test.js +36 -0
- package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
- package/dist/backend/llvm/dense-array-loops.d.ts +17 -1
- package/dist/backend/llvm/dense-array-loops.js +194 -5
- package/dist/backend/llvm/dense-array-loops.js.map +1 -1
- package/dist/backend/llvm/dense-array-loops.test.js +90 -1
- package/dist/backend/llvm/dense-array-loops.test.js.map +1 -1
- package/dist/backend/llvm/dyn-handle-tags.test.js +6 -1
- package/dist/backend/llvm/dyn-handle-tags.test.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +30 -0
- package/dist/backend/llvm/dyn.js +373 -70
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.js +13 -28
- package/dist/backend/llvm/emit-function.js.map +1 -1
- package/dist/backend/llvm/emit-journal.d.ts +93 -0
- package/dist/backend/llvm/emit-journal.js +170 -0
- package/dist/backend/llvm/emit-journal.js.map +1 -0
- package/dist/backend/llvm/emit-module.js +211 -33
- package/dist/backend/llvm/emit-module.js.map +1 -1
- package/dist/backend/llvm/emit-statements.d.ts +0 -4
- package/dist/backend/llvm/emit-statements.js +268 -84
- package/dist/backend/llvm/emit-statements.js.map +1 -1
- package/dist/backend/llvm/emitter-state.d.ts +7 -0
- package/dist/backend/llvm/emitter-state.js +14 -0
- package/dist/backend/llvm/emitter-state.js.map +1 -0
- package/dist/backend/llvm/emitter.d.ts +186 -37
- package/dist/backend/llvm/emitter.js +733 -90
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +65 -7
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +11 -13
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.js +48 -20
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-callbacks.js +47 -0
- package/dist/backend/llvm/expr-callbacks.js.map +1 -1
- package/dist/backend/llvm/expr-calls.js +28 -14
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.d.ts +14 -2
- package/dist/backend/llvm/expr-containers.js +143 -37
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-context.d.ts +14 -0
- package/dist/backend/llvm/expr-dynamic.js +18 -11
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +119 -38
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.test.js +11 -6
- package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
- package/dist/backend/llvm/expr-records.d.ts +12 -0
- package/dist/backend/llvm/expr-records.js +106 -0
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.d.ts +2 -2
- package/dist/backend/llvm/expr-stream-bridges.js +210 -69
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.test.js +1 -1
- package/dist/backend/llvm/expr-stream-bridges.test.js.map +1 -1
- package/dist/backend/llvm/expr-stream-callbacks.d.ts +2 -2
- package/dist/backend/llvm/expr-stream-callbacks.js +74 -20
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/int32-kind-loops.d.ts +39 -0
- package/dist/backend/llvm/int32-kind-loops.js +106 -0
- package/dist/backend/llvm/int32-kind-loops.js.map +1 -0
- package/dist/backend/llvm/integer-or-nan-indexes.test.d.ts +1 -0
- package/dist/backend/llvm/integer-or-nan-indexes.test.js +118 -0
- package/dist/backend/llvm/integer-or-nan-indexes.test.js.map +1 -0
- package/dist/backend/llvm/integer-values.d.ts +25 -1
- package/dist/backend/llvm/integer-values.js +95 -0
- package/dist/backend/llvm/integer-values.js.map +1 -1
- package/dist/backend/llvm/js-ic.d.ts +1 -1
- package/dist/backend/llvm/js-ic.js +1 -1
- package/dist/backend/llvm/js-ic.js.map +1 -1
- package/dist/backend/llvm/key-orders.d.ts +7 -0
- package/dist/backend/llvm/key-orders.js +33 -0
- package/dist/backend/llvm/key-orders.js.map +1 -0
- package/dist/backend/llvm/lib-connect.js +4 -0
- package/dist/backend/llvm/lib-connect.js.map +1 -1
- package/dist/backend/llvm/lib-datagram.js +11 -0
- package/dist/backend/llvm/lib-datagram.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +213 -5
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +4 -4
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-http2.js +4 -0
- package/dist/backend/llvm/lib-http2.js.map +1 -1
- package/dist/backend/llvm/lib-lookup.js +16 -6
- package/dist/backend/llvm/lib-lookup.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +37 -1
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +94 -2
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +35 -5
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +115 -19
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.test.js +14 -0
- package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
- package/dist/backend/llvm/loop-state.d.ts +33 -0
- package/dist/backend/llvm/loop-state.js +42 -0
- package/dist/backend/llvm/loop-state.js.map +1 -0
- package/dist/backend/llvm/map-number-lookup.d.ts +26 -8
- package/dist/backend/llvm/map-number-lookup.js +91 -31
- package/dist/backend/llvm/map-number-lookup.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.test.js +55 -0
- package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.js +4 -2
- package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.d.ts +2 -1
- package/dist/backend/llvm/nullable-unions.js +15 -3
- package/dist/backend/llvm/nullable-unions.js.map +1 -1
- package/dist/backend/llvm/publish.d.ts +10 -0
- package/dist/backend/llvm/publish.js +15 -3
- package/dist/backend/llvm/publish.js.map +1 -1
- package/dist/backend/llvm/receivers.js +6 -1
- package/dist/backend/llvm/receivers.js.map +1 -1
- package/dist/backend/llvm/record-results.d.ts +1 -9
- package/dist/backend/llvm/record-results.js +2 -11
- package/dist/backend/llvm/record-results.js.map +1 -1
- package/dist/backend/llvm/reference-effects.js +3 -0
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- package/dist/backend/llvm/reference-writes.d.ts +7 -2
- package/dist/backend/llvm/reference-writes.js +89 -72
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/running-extrema.d.ts +11 -0
- package/dist/backend/llvm/running-extrema.js +115 -0
- package/dist/backend/llvm/running-extrema.js.map +1 -0
- package/dist/backend/llvm/running-extrema.test.d.ts +1 -0
- package/dist/backend/llvm/running-extrema.test.js +89 -0
- package/dist/backend/llvm/running-extrema.test.js.map +1 -0
- package/dist/backend/llvm/shapes.d.ts +71 -15
- package/dist/backend/llvm/shapes.js +224 -40
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +53 -7
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/speculative-integers.d.ts +6 -0
- package/dist/backend/llvm/speculative-integers.js +2 -2
- package/dist/backend/llvm/speculative-integers.js.map +1 -1
- package/dist/backend/llvm/stack-captures.js +1 -5
- package/dist/backend/llvm/stack-captures.js.map +1 -1
- package/dist/backend/llvm/stack-objects.d.ts +3 -2
- package/dist/backend/llvm/stack-objects.js +5 -2
- package/dist/backend/llvm/stack-objects.js.map +1 -1
- package/dist/backend/llvm/string-reads.d.ts +12 -0
- package/dist/backend/llvm/string-reads.js +44 -0
- package/dist/backend/llvm/string-reads.js.map +1 -1
- package/dist/backend/llvm/union-repr.d.ts +4 -3
- package/dist/backend/llvm/union-repr.js +6 -5
- package/dist/backend/llvm/union-repr.js.map +1 -1
- package/dist/backend/llvm/walk-borrows.d.ts +3 -0
- package/dist/backend/llvm/walk-borrows.js +46 -41
- package/dist/backend/llvm/walk-borrows.js.map +1 -1
- package/dist/backend/llvm/walkers.d.ts +3 -0
- package/dist/backend/llvm/walkers.js +101 -65
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/llvm/wrapping-sums.d.ts +16 -1
- package/dist/backend/llvm/wrapping-sums.js +126 -0
- package/dist/backend/llvm/wrapping-sums.js.map +1 -1
- package/dist/backend/may-throw.d.ts +8 -10
- package/dist/backend/may-throw.js +14 -10
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +5 -0
- package/dist/backend/native/executable.js +7 -0
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/runtime-inputs.d.ts +1 -1
- package/dist/backend/native/runtime-inputs.js +1 -0
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native-codegen-core.d.ts +5 -3
- package/dist/backend/native-codegen-core.js +13 -6
- package/dist/backend/native-codegen-core.js.map +1 -1
- package/dist/backend/native-codegen.test.js +6 -4
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +4 -0
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/publication.d.ts +12 -1
- package/dist/backend/publication.js +37 -14
- package/dist/backend/publication.js.map +1 -1
- package/dist/backend/publication.test.js +30 -0
- package/dist/backend/publication.test.js.map +1 -1
- package/dist/backend/result-slots.d.ts +16 -0
- package/dist/backend/result-slots.js +23 -0
- package/dist/backend/result-slots.js.map +1 -0
- package/dist/backend/runtime-abi.d.ts +2 -2
- package/dist/backend/runtime-abi.js +2 -2
- package/dist/backend/runtime-pack-core.d.ts +1 -0
- package/dist/backend/runtime-pack-core.js +1 -0
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +2 -1
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +2 -1
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/stack-observations.d.ts +2 -1
- package/dist/backend/stack-observations.js +67 -42
- package/dist/backend/stack-observations.js.map +1 -1
- package/dist/backend/target-cpu.d.ts +26 -0
- package/dist/backend/target-cpu.js +98 -0
- package/dist/backend/target-cpu.js.map +1 -0
- package/dist/backend/target-cpu.test.d.ts +1 -0
- package/dist/backend/target-cpu.test.js +38 -0
- package/dist/backend/target-cpu.test.js.map +1 -0
- package/dist/backend/target-diagnostics.js +5 -3
- package/dist/backend/target-diagnostics.js.map +1 -1
- package/dist/backend/warm-cache.js +1 -0
- package/dist/backend/warm-cache.js.map +1 -1
- package/dist/cli/command.js +20 -1
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/usage.d.ts +4 -1
- package/dist/cli/usage.js +10 -3
- package/dist/cli/usage.js.map +1 -1
- package/dist/compat/fetch-profile.js +1 -1
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/compile-types.d.ts +7 -0
- package/dist/contracts/check.js +4 -3
- package/dist/contracts/check.js.map +1 -1
- package/dist/contracts/int32-elements.js +10 -2
- package/dist/contracts/int32-elements.js.map +1 -1
- package/dist/coverage/report.js +12 -3
- package/dist/coverage/report.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +4 -0
- package/dist/diagnostics/diagnostic.js +1 -1
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/envelope.d.ts +3 -0
- package/dist/diagnostics/envelope.js +1 -0
- package/dist/diagnostics/envelope.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +5 -0
- package/dist/executable/executable-cache.js +5 -0
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +3 -0
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/frontend/decl-projection.d.ts +41 -0
- package/dist/frontend/decl-projection.js +949 -0
- package/dist/frontend/decl-projection.js.map +1 -0
- package/dist/frontend/decl-projection.test.d.ts +1 -0
- package/dist/frontend/decl-projection.test.js +30 -0
- package/dist/frontend/decl-projection.test.js.map +1 -0
- package/dist/frontend/dts-paths.d.ts +15 -0
- package/dist/frontend/dts-paths.js +25 -0
- package/dist/frontend/dts-paths.js.map +1 -1
- package/dist/frontend/input-tracker.d.ts +6 -0
- package/dist/frontend/input-tracker.js +51 -28
- package/dist/frontend/input-tracker.js.map +1 -1
- package/dist/frontend/input-tracker.test.js +19 -0
- package/dist/frontend/input-tracker.test.js.map +1 -1
- package/dist/frontend/lowering/array-values.js +100 -2
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/builtins/async-context.d.ts +8 -2
- package/dist/frontend/lowering/builtins/async-context.js +62 -3
- package/dist/frontend/lowering/builtins/async-context.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-methods.js +46 -15
- package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process.js +13 -2
- package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
- package/dist/frontend/lowering/builtins/crypto.js +87 -10
- package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
- package/dist/frontend/lowering/builtins/dates.js +4 -1
- package/dist/frontend/lowering/builtins/dates.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.js +3 -3
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-glob.js +6 -3
- package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-paths.d.ts +43 -5
- package/dist/frontend/lowering/builtins/fs-paths.js +245 -93
- package/dist/frontend/lowering/builtins/fs-paths.js.map +1 -1
- package/dist/frontend/lowering/builtins/global-namespace-keys.d.ts +3 -0
- package/dist/frontend/lowering/builtins/global-namespace-keys.js +122 -0
- package/dist/frontend/lowering/builtins/global-namespace-keys.js.map +1 -0
- package/dist/frontend/lowering/builtins/module-calls.js +6 -3
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/numbers.js +9 -1
- package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.d.ts +7 -1
- package/dist/frontend/lowering/builtins/promises.js +236 -139
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +5 -1
- package/dist/frontend/lowering/builtins/readline.js +35 -3
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/url.js +24 -1
- package/dist/frontend/lowering/builtins/url.js.map +1 -1
- package/dist/frontend/lowering/builtins/webassembly.js +6 -3
- package/dist/frontend/lowering/builtins/webassembly.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.js +0 -1
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/cjs-exports-object.js +1 -1
- package/dist/frontend/lowering/cjs-exports-object.js.map +1 -1
- package/dist/frontend/lowering/cjs-inline-require.d.ts +32 -0
- package/dist/frontend/lowering/cjs-inline-require.js +307 -4
- package/dist/frontend/lowering/cjs-inline-require.js.map +1 -1
- package/dist/frontend/lowering/class-callbacks.d.ts +5 -2
- package/dist/frontend/lowering/class-callbacks.js +82 -12
- package/dist/frontend/lowering/class-callbacks.js.map +1 -1
- package/dist/frontend/lowering/class-construction.d.ts +4 -1
- package/dist/frontend/lowering/class-construction.js +17 -3
- package/dist/frontend/lowering/class-construction.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +49 -2
- package/dist/frontend/lowering/class-dynamic-dispatch.js +880 -108
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js +47 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
- package/dist/frontend/lowering/class-iterables.d.ts +2 -1
- package/dist/frontend/lowering/class-iterables.js +9 -1
- package/dist/frontend/lowering/class-iterables.js.map +1 -1
- package/dist/frontend/lowering/class-method-mutations.js +83 -24
- package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
- package/dist/frontend/lowering/class-protocols.d.ts +25 -0
- package/dist/frontend/lowering/class-protocols.js +183 -1
- package/dist/frontend/lowering/class-protocols.js.map +1 -1
- package/dist/frontend/lowering/class-prototypes.js +31 -2
- package/dist/frontend/lowering/class-prototypes.js.map +1 -1
- package/dist/frontend/lowering/class-runtime-statics.d.ts +9 -3
- package/dist/frontend/lowering/class-runtime-statics.js +29 -4
- package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural-plans.js +48 -1
- package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +91 -1
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/completion-callbacks.d.ts +4 -0
- package/dist/frontend/lowering/completion-callbacks.js +146 -0
- package/dist/frontend/lowering/completion-callbacks.js.map +1 -0
- package/dist/frontend/lowering/containers/array-callback-call.js +2 -2
- package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.d.ts +5 -4
- package/dist/frontend/lowering/containers/array-callbacks.js +345 -24
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-concat.js +10 -0
- package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.js +5 -0
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +26 -3
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/array-pipelines.js +19 -8
- package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.d.ts +25 -17
- package/dist/frontend/lowering/containers/bytes.js +455 -46
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.js +3 -0
- package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +7 -2
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/filter-predicates.d.ts +6 -0
- package/dist/frontend/lowering/containers/filter-predicates.js +205 -0
- package/dist/frontend/lowering/containers/filter-predicates.js.map +1 -0
- package/dist/frontend/lowering/containers/indexed-objects.d.ts +0 -12
- package/dist/frontend/lowering/containers/indexed-objects.js +46 -7
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/containers/string-and-regexp.js +55 -9
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/containers/string-replacement.js +43 -19
- package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
- package/dist/frontend/lowering/date-values.d.ts +11 -0
- package/dist/frontend/lowering/date-values.js +207 -0
- package/dist/frontend/lowering/date-values.js.map +1 -0
- package/dist/frontend/lowering/dispatch-sites.js +15 -1
- package/dist/frontend/lowering/dispatch-sites.js.map +1 -1
- package/dist/frontend/lowering/divergences.js +9 -1
- package/dist/frontend/lowering/divergences.js.map +1 -1
- package/dist/frontend/lowering/error-methods.js +47 -2
- package/dist/frontend/lowering/error-methods.js.map +1 -1
- package/dist/frontend/lowering/expressions/array-literals.js +53 -0
- package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/binary.js +100 -28
- package/dist/frontend/lowering/expressions/binary.js.map +1 -1
- package/dist/frontend/lowering/expressions/element-access.js +169 -13
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/identifiers.js +64 -5
- package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
- package/dist/frontend/lowering/expressions/narrowing.js +95 -1
- package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/nullish-assignment.js +3 -1
- package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.d.ts +10 -0
- package/dist/frontend/lowering/expressions/object-literals.js +138 -51
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.js +12 -0
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.js +168 -10
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/relational.js +212 -33
- package/dist/frontend/lowering/expressions/relational.js.map +1 -1
- package/dist/frontend/lowering/expressions/typeof.js +6 -0
- package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
- package/dist/frontend/lowering/expressions/union-fields.js +4 -0
- package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
- package/dist/frontend/lowering/expressions/updates.js +39 -3
- package/dist/frontend/lowering/expressions/updates.js.map +1 -1
- package/dist/frontend/lowering/frozen-records.d.ts +28 -0
- package/dist/frontend/lowering/frozen-records.js +322 -0
- package/dist/frontend/lowering/frozen-records.js.map +1 -0
- package/dist/frontend/lowering/function-returns.js +64 -0
- package/dist/frontend/lowering/function-returns.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.js +7 -2
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/indexed-unions.d.ts +54 -0
- package/dist/frontend/lowering/indexed-unions.js +401 -0
- package/dist/frontend/lowering/indexed-unions.js.map +1 -0
- package/dist/frontend/lowering/iterable-values.d.ts +49 -0
- package/dist/frontend/lowering/iterable-values.js +297 -0
- package/dist/frontend/lowering/iterable-values.js.map +1 -0
- package/dist/frontend/lowering/iterator-adapters.js +186 -1
- package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
- package/dist/frontend/lowering/js-class-fields.d.ts +8 -0
- package/dist/frontend/lowering/js-class-fields.js +45 -10
- package/dist/frontend/lowering/js-class-fields.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.d.ts +18 -3
- package/dist/frontend/lowering/key-order-witness.js +974 -48
- package/dist/frontend/lowering/key-order-witness.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.test.js +530 -10
- package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +15 -3
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-async-iteration.js +4 -1
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +7 -0
- package/dist/frontend/lowering/lower-calls.js +462 -44
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +11 -2
- package/dist/frontend/lowering/lower-classes.js +324 -69
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-dgram.js +3 -1
- package/dist/frontend/lowering/lower-dgram.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.js +215 -3
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.d.ts +11 -0
- package/dist/frontend/lowering/lower-functions.js +83 -0
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.js +42 -32
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-global-value.js +6 -3
- package/dist/frontend/lowering/lower-global-value.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.d.ts +1 -1
- package/dist/frontend/lowering/lower-inspect.js +53 -17
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +53 -5
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.js +5 -1
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-server.js +2 -2
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.d.ts +5 -0
- package/dist/frontend/lowering/lower-stdlib.js +30 -0
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +23 -0
- package/dist/frontend/lowering/lower-stmts.js +553 -81
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.d.ts +20 -2
- package/dist/frontend/lowering/lower-stream.js +1483 -156
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +107 -8
- package/dist/frontend/lowering/lowerer.js +381 -36
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/module-namespace-elements.d.ts +11 -1
- package/dist/frontend/lowering/module-namespace-elements.js +82 -5
- package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
- package/dist/frontend/lowering/new-target.d.ts +12 -0
- package/dist/frontend/lowering/new-target.js +280 -0
- package/dist/frontend/lowering/new-target.js.map +1 -0
- package/dist/frontend/lowering/object-factory-new.d.ts +5 -0
- package/dist/frontend/lowering/object-factory-new.js +20 -6
- package/dist/frontend/lowering/object-factory-new.js.map +1 -1
- package/dist/frontend/lowering/overload-choice.d.ts +33 -0
- package/dist/frontend/lowering/overload-choice.js +190 -0
- package/dist/frontend/lowering/overload-choice.js.map +1 -0
- package/dist/frontend/lowering/surfaces.d.ts +3 -0
- package/dist/frontend/lowering/surfaces.js +73 -8
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/undefined-index.d.ts +27 -0
- package/dist/frontend/lowering/undefined-index.js +82 -0
- package/dist/frontend/lowering/undefined-index.js.map +1 -0
- package/dist/frontend/lowering/var-hoisting.js +29 -13
- package/dist/frontend/lowering/var-hoisting.js.map +1 -1
- package/dist/frontend/lowering/width-lift.d.ts +18 -0
- package/dist/frontend/npm-static-bundled-chunks.js +9 -11
- package/dist/frontend/npm-static-bundled-chunks.js.map +1 -1
- package/dist/frontend/npm-static-bundled-chunks.test.js +6 -5
- package/dist/frontend/npm-static-bundled-chunks.test.js.map +1 -1
- package/dist/frontend/npm-static-rewrite-syntax.js +9 -1
- package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
- package/dist/frontend/npm-static.js +4 -20
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/package-shims.d.ts +3 -0
- package/dist/frontend/package-shims.js +71 -8
- package/dist/frontend/package-shims.js.map +1 -1
- package/dist/frontend/pipeline.js +19 -11
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/process-fork.d.ts +25 -0
- package/dist/frontend/process-fork.js +2 -0
- package/dist/frontend/process-fork.js.map +1 -0
- package/dist/frontend/program-analysis.d.ts +5 -1
- package/dist/frontend/program-analysis.js +5 -0
- package/dist/frontend/program-analysis.js.map +1 -1
- package/dist/frontend/program.d.ts +21 -6
- package/dist/frontend/program.js +681 -83
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +43 -3
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/token-equivalence.d.ts +3 -0
- package/dist/frontend/token-equivalence.js +409 -0
- package/dist/frontend/token-equivalence.js.map +1 -0
- package/dist/frontend/token-equivalence.test.d.ts +1 -0
- package/dist/frontend/token-equivalence.test.js +67 -0
- package/dist/frontend/token-equivalence.test.js.map +1 -0
- package/dist/frontend/ts7/ast-node.d.ts +22 -0
- package/dist/frontend/ts7/ast-node.js +1048 -103
- package/dist/frontend/ts7/ast-node.js.map +1 -1
- package/dist/frontend/ts7/ast-node.test.js +24 -0
- package/dist/frontend/ts7/ast-node.test.js.map +1 -1
- package/dist/frontend/ts7/ast-wire.d.ts +4 -3
- package/dist/frontend/ts7/ast-wire.js +34 -24
- package/dist/frontend/ts7/ast-wire.js.map +1 -1
- package/dist/frontend/ts7/ast-wire.test.js +23 -0
- package/dist/frontend/ts7/ast-wire.test.js.map +1 -1
- package/dist/frontend/ts7/checker-backend.d.ts +3 -4
- package/dist/frontend/ts7/checker-backend.js +2 -2
- package/dist/frontend/ts7/checker-backend.js.map +1 -1
- package/dist/frontend/ts7/checker-backend.test.js +5 -9
- package/dist/frontend/ts7/checker-backend.test.js.map +1 -1
- package/dist/frontend/ts7/checker.d.ts +4 -0
- package/dist/frontend/ts7/checker.js +7 -0
- package/dist/frontend/ts7/checker.js.map +1 -1
- package/dist/frontend/ts7/lib-diagnostics.d.ts +24 -0
- package/dist/frontend/ts7/lib-diagnostics.js +307 -0
- package/dist/frontend/ts7/lib-diagnostics.js.map +1 -0
- package/dist/frontend/ts7/lib-diagnostics.test.d.ts +1 -0
- package/dist/frontend/ts7/lib-diagnostics.test.js +199 -0
- package/dist/frontend/ts7/lib-diagnostics.test.js.map +1 -0
- package/dist/frontend/ts7/program-host.d.ts +7 -0
- package/dist/frontend/ts7/program-host.js +25 -2
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.d.ts +3 -0
- package/dist/frontend/ts7/semantic-model.js +5 -0
- package/dist/frontend/ts7/semantic-model.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.test.js +6 -1
- package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
- package/dist/frontend/ts7/semantic-types.d.ts +1 -1
- package/dist/frontend/ts7/semantic-types.js +1 -1
- package/dist/frontend/ts7/semantic-types.js.map +1 -1
- package/dist/frontend/ts7/session.d.ts +14 -1
- package/dist/frontend/ts7/session.js +22 -0
- package/dist/frontend/ts7/session.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +13 -1
- package/dist/frontend/type-mapper.js +229 -20
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.d.ts +0 -5
- package/dist/index.js +46 -4
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.js +5 -3
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/array-length-stability.d.ts +4 -0
- package/dist/ir/array-length-stability.js +19 -6
- package/dist/ir/array-length-stability.js.map +1 -1
- package/dist/ir/array-length-stability.test.js +24 -0
- package/dist/ir/array-length-stability.test.js.map +1 -1
- package/dist/ir/builtin-effects.d.ts +7 -0
- package/dist/ir/builtin-effects.js +60 -0
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +6 -4
- package/dist/ir/builtin-signatures.js +222 -13
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/callback-specialization.d.ts +2 -1
- package/dist/ir/callback-specialization.js +23 -18
- package/dist/ir/callback-specialization.js.map +1 -1
- package/dist/ir/char-unit-locals.d.ts +19 -0
- package/dist/ir/char-unit-locals.js +185 -0
- package/dist/ir/char-unit-locals.js.map +1 -0
- package/dist/ir/char-unit-locals.test.d.ts +1 -0
- package/dist/ir/char-unit-locals.test.js +94 -0
- package/dist/ir/char-unit-locals.test.js.map +1 -0
- package/dist/ir/final-fields.d.ts +2 -1
- package/dist/ir/final-fields.js +14 -16
- package/dist/ir/final-fields.js.map +1 -1
- package/dist/ir/function-references.d.ts +2 -0
- package/dist/ir/function-references.js +2 -0
- package/dist/ir/function-references.js.map +1 -1
- package/dist/ir/function-references.test.js +3 -0
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/initializer-bindings.d.ts +2 -1
- package/dist/ir/initializer-bindings.js +27 -20
- package/dist/ir/initializer-bindings.js.map +1 -1
- package/dist/ir/int32-arrays.d.ts +108 -0
- package/dist/ir/int32-arrays.js +831 -0
- package/dist/ir/int32-arrays.js.map +1 -0
- package/dist/ir/int32-slots.d.ts +24 -2
- package/dist/ir/int32-slots.js +266 -57
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/int32-slots.test.js +33 -0
- package/dist/ir/int32-slots.test.js.map +1 -1
- package/dist/ir/integer-loops.d.ts +3 -3
- package/dist/ir/integer-loops.js +28 -10
- package/dist/ir/integer-loops.js.map +1 -1
- package/dist/ir/integer-loops.test.js +10 -0
- package/dist/ir/integer-loops.test.js.map +1 -1
- package/dist/ir/integer-ranges.d.ts +5 -0
- package/dist/ir/integer-ranges.js +125 -12
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +30 -0
- package/dist/ir/integer-ranges.test.js.map +1 -1
- package/dist/ir/ir.d.ts +83 -10
- package/dist/ir/ir.js +77 -6
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/ir.test.js +23 -2
- package/dist/ir/ir.test.js.map +1 -1
- package/dist/ir/js-ic.d.ts +4 -0
- package/dist/ir/js-ic.js +17 -1
- package/dist/ir/js-ic.js.map +1 -1
- package/dist/ir/js-ic.test.js +46 -0
- package/dist/ir/js-ic.test.js.map +1 -1
- package/dist/ir/node-index.d.ts +57 -0
- package/dist/ir/node-index.js +215 -0
- package/dist/ir/node-index.js.map +1 -0
- package/dist/ir/paired-while-loops.d.ts +25 -0
- package/dist/ir/paired-while-loops.js +335 -0
- package/dist/ir/paired-while-loops.js.map +1 -0
- package/dist/ir/paired-while-loops.test.d.ts +1 -0
- package/dist/ir/paired-while-loops.test.js +163 -0
- package/dist/ir/paired-while-loops.test.js.map +1 -0
- package/dist/ir/parameter-versions.d.ts +25 -0
- package/dist/ir/parameter-versions.js +300 -0
- package/dist/ir/parameter-versions.js.map +1 -0
- package/dist/ir/runtime-features.d.ts +34 -13
- package/dist/ir/runtime-features.js +177 -39
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/serialize.d.ts +12 -2
- package/dist/ir/serialize.js +16 -3
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/serialize.test.js +17 -0
- package/dist/ir/serialize.test.js.map +1 -1
- package/dist/ir/traverse.js +18 -6
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/validate.js +167 -40
- package/dist/ir/validate.js.map +1 -1
- package/dist/library/ir-policy.js +3 -0
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/native/cache.d.ts +6 -1
- package/dist/native/cache.js +28 -5
- package/dist/native/cache.js.map +1 -1
- package/dist/native/cache.test.js +16 -2
- package/dist/native/cache.test.js.map +1 -1
- package/dist/native/cli.js +21 -1
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.js +8 -6
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/executable-cache.d.ts +1 -1
- package/dist/native/executable-cache.js +2 -2
- package/dist/native/executable-cache.js.map +1 -1
- package/dist/native/prepare.d.ts +4 -2
- package/dist/native/prepare.js +130 -32
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/prepare.test.js +96 -20
- package/dist/native/prepare.test.js.map +1 -1
- package/dist/native/sanitizer.test.js +2 -0
- package/dist/native/sanitizer.test.js.map +1 -1
- package/dist/native/text-file.d.ts +13 -3
- package/dist/native/text-file.js +63 -9
- package/dist/native/text-file.js.map +1 -1
- package/dist/native/text-file.test.d.ts +1 -0
- package/dist/native/text-file.test.js +49 -0
- package/dist/native/text-file.test.js.map +1 -0
- package/dist/native/toolchain.js +4 -4
- package/dist/native/toolchain.js.map +1 -1
- package/dist/native/toolchain.test.js +3 -3
- package/dist/native/toolchain.test.js.map +1 -1
- package/package.json +21 -21
- package/shims/chalk/v5.ts +688 -0
- package/shims/hono-node-server/v2.ts +645 -0
- package/shims/hot-shots/client.ts +1126 -0
- package/shims/hot-shots/v8-unix-dgram.ts +8 -0
- package/shims/hot-shots/v8.ts +8 -0
- package/surface-manifest.json +27 -7
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
import { keyedHelperName } from "../stable-names.js";
|
|
2
|
-
import {
|
|
2
|
+
import { allBytesArms, indexedUnionArms, lowerIndexedUnionMethod } from "../indexed-unions.js";
|
|
3
|
+
import { boolLit, dynUndefinedExpr, nodeThrowExpr, numLit, varRef } from "../../../ir/build.js";
|
|
3
4
|
import { BUF_NUM_METHODS } from "./buffer-numeric-methods.js";
|
|
4
5
|
import * as ts from "../../ts7/adapter.js";
|
|
6
|
+
import { constituentTypes } from "../../ts7/checker.js";
|
|
5
7
|
import { BIGINT_T, BOOL, BYTES_ELEMENT_NAME, BYTES_U8, DYN, F64, STRING, UNDEFINED_T, VOID, arrayOf, bytesOf, funcOf, isUnitType, typeEquals, } from "../../../ir/ir.js";
|
|
6
8
|
import { isJsSourceFile, locOf } from "../../program.js";
|
|
7
9
|
import { stdlibGlobalNameOf } from "../surfaces.js";
|
|
8
|
-
import { newFnCtx, own } from "../lowerer.js";
|
|
10
|
+
import { ENTRY_NAME, newFnCtx, own } from "../lowerer.js";
|
|
11
|
+
import { everyStmt } from "../../../ir/traverse.js";
|
|
9
12
|
import { buildBytesSortFn, closureKeyOrder } from "../lower-array-sort.js";
|
|
10
13
|
import { isSafeToDiscard } from "../expressions/evaluation-safety.js";
|
|
11
14
|
import { lowerDynObjectLiteral } from "../expressions/object-literals.js";
|
|
12
15
|
import { defaultAfterUndefined, lowerOptionalArgument, lowerStaticallyUndefinedArgument, } from "../optional-arguments.js";
|
|
13
16
|
import { lowerArraySpreadItems, lowerCheckedArrayFrom } from "./array-construction.js";
|
|
14
|
-
import { lowerToNumberArgument } from "../lower-exprs.js";
|
|
17
|
+
import { lowerOptionalNumber, lowerToNumberArgument } from "../lower-exprs.js";
|
|
15
18
|
import { lowerBytesIteratorValue } from "../iterator-adapters.js";
|
|
16
19
|
import { lowerArrayCallback } from "./callback-arguments.js";
|
|
17
20
|
import { callbackSite, findPredicateOk, predicateToBoolean } from "./array-callbacks.js";
|
|
@@ -726,6 +729,109 @@ function lowerDataViewNew(lowerer, expr) {
|
|
|
726
729
|
lowerer.noLowering("DataView constructor argument count", expr);
|
|
727
730
|
return lowerArrayBufferView(lowerer, args, "dv", locOf(expr));
|
|
728
731
|
}
|
|
732
|
+
/** `receiver.set(src, offset?)` on a lowered typed-array receiver. */
|
|
733
|
+
function bytesSetIntrinsic(lowerer, receiver, argNodes, loc) {
|
|
734
|
+
const src = lowerer.lowerExpr(argNodes[0]);
|
|
735
|
+
const method = src.type.kind === "bytes" ? "setFrom" : "setFromDyn";
|
|
736
|
+
const args = [src.type.kind === "bytes" ? src : lowerer.coerceInto(argNodes[0], src, DYN)];
|
|
737
|
+
if (argNodes.length === 2)
|
|
738
|
+
args.push(lowerOptionalArgument(lowerer, argNodes[1], F64, {
|
|
739
|
+
kind: "numLit",
|
|
740
|
+
value: 0,
|
|
741
|
+
type: F64,
|
|
742
|
+
loc,
|
|
743
|
+
}));
|
|
744
|
+
return { kind: "bytesIntrinsic", method, receiver, args, type: VOID, loc };
|
|
745
|
+
}
|
|
746
|
+
/** `Uint8Array.prototype.set.call(target, src, offset?)`, through any typed
|
|
747
|
+
* array constructor's prototype (they share %TypedArray%.prototype.set). A
|
|
748
|
+
* target the checker types as a typed array or Buffer lowers like
|
|
749
|
+
* `target.set(src, offset)`. Any other target, a DataView included, is
|
|
750
|
+
* checked at run time: a typed array calls its `set`, and
|
|
751
|
+
* anything else throws Node's TypeError "this is not a typed array.",
|
|
752
|
+
* after every argument is evaluated. */
|
|
753
|
+
export function lowerBytesPrototypeSetCall(lowerer, call, access) {
|
|
754
|
+
if (call.questionDotToken ||
|
|
755
|
+
access.questionDotToken ||
|
|
756
|
+
access.name.text !== "call" ||
|
|
757
|
+
!ts.isPropertyAccessExpression(access.expression))
|
|
758
|
+
return null;
|
|
759
|
+
const method = access.expression;
|
|
760
|
+
const proto = method.expression;
|
|
761
|
+
if (method.questionDotToken ||
|
|
762
|
+
method.name.text !== "set" ||
|
|
763
|
+
!ts.isPropertyAccessExpression(proto) ||
|
|
764
|
+
proto.questionDotToken ||
|
|
765
|
+
proto.name.text !== "prototype" ||
|
|
766
|
+
!ts.isIdentifier(proto.expression) ||
|
|
767
|
+
!lowerer.isStdlibMember(method))
|
|
768
|
+
return null;
|
|
769
|
+
const ctor = lowerer.resolveValueSymbol(proto.expression);
|
|
770
|
+
if (!ctor || !lowerer.isStdlibSymbol(ctor) || !own(BYTES_CTORS, ts.symbolName(ctor)))
|
|
771
|
+
return null;
|
|
772
|
+
const argNodes = call.arguments.nodes;
|
|
773
|
+
if (argNodes.length < 2 || argNodes.length > 3 || argNodes.some(ts.isSpreadElement))
|
|
774
|
+
return null;
|
|
775
|
+
const loc = locOf(call);
|
|
776
|
+
const target = lowerer.lowerExpr(argNodes[0]);
|
|
777
|
+
// A DataView lowers to the same bytes type, so the checker type decides:
|
|
778
|
+
// only a typed array (or a Buffer) takes the method's path.
|
|
779
|
+
const targetSymbol = lowerer.typeOf(argNodes[0]).getSymbol();
|
|
780
|
+
if (target.type.kind === "bytes" &&
|
|
781
|
+
targetSymbol !== undefined &&
|
|
782
|
+
lowerer.isStdlibSymbol(targetSymbol) &&
|
|
783
|
+
(own(BYTES_CTORS, ts.symbolName(targetSymbol)) !== undefined ||
|
|
784
|
+
ts.symbolName(targetSymbol) === "Buffer"))
|
|
785
|
+
return bytesSetIntrinsic(lowerer, target, argNodes.slice(1), loc);
|
|
786
|
+
const slot = (value) => {
|
|
787
|
+
const local = lowerer.declareHiddenLocal("%setArg", DYN);
|
|
788
|
+
return {
|
|
789
|
+
decl: { kind: "varDecl", localId: local.id, init: value, loc },
|
|
790
|
+
read: varRef(local.id, DYN, loc),
|
|
791
|
+
};
|
|
792
|
+
};
|
|
793
|
+
const slots = [
|
|
794
|
+
slot(lowerer.coerceInto(argNodes[0], target, DYN)),
|
|
795
|
+
...argNodes.slice(1).map((arg) => slot(lowerer.lowerExprExpecting(arg, DYN))),
|
|
796
|
+
];
|
|
797
|
+
const isTypedArray = {
|
|
798
|
+
kind: "libCall",
|
|
799
|
+
fn: "util.typeIs",
|
|
800
|
+
args: [slots[0].read, { kind: "strLit", value: "isTypedArray", type: STRING, loc }],
|
|
801
|
+
type: BOOL,
|
|
802
|
+
loc,
|
|
803
|
+
};
|
|
804
|
+
return {
|
|
805
|
+
kind: "seqExpr",
|
|
806
|
+
stmts: [
|
|
807
|
+
...slots.map((s) => s.decl),
|
|
808
|
+
{
|
|
809
|
+
kind: "if",
|
|
810
|
+
cond: { kind: "unary", op: "!", operand: isTypedArray, type: BOOL, loc },
|
|
811
|
+
then: [
|
|
812
|
+
{
|
|
813
|
+
kind: "exprStmt",
|
|
814
|
+
expr: nodeThrowExpr(1, "", "this is not a typed array.", VOID, loc),
|
|
815
|
+
loc,
|
|
816
|
+
},
|
|
817
|
+
],
|
|
818
|
+
else_: null,
|
|
819
|
+
loc,
|
|
820
|
+
},
|
|
821
|
+
],
|
|
822
|
+
result: {
|
|
823
|
+
kind: "dynInvoke",
|
|
824
|
+
recv: slots[0].read,
|
|
825
|
+
method: "set",
|
|
826
|
+
calleeName: ts.getTextOfNode(method),
|
|
827
|
+
args: slots.slice(1).map((s) => s.read),
|
|
828
|
+
type: DYN,
|
|
829
|
+
loc,
|
|
830
|
+
},
|
|
831
|
+
type: DYN,
|
|
832
|
+
loc,
|
|
833
|
+
};
|
|
834
|
+
}
|
|
729
835
|
/** Method calls on typed-array/Buffer receivers: slice (copy), subarray
|
|
730
836
|
* (shared view), toReversed, copyWithin, set(src,
|
|
731
837
|
* offset?), and the u8-only Buffer surface: toString(enc?) plus the
|
|
@@ -733,11 +839,131 @@ function lowerDataViewNew(lowerer, expr) {
|
|
|
733
839
|
* variable-width read/writeUIntLE quartet — BUF_NUM_METHODS). Everything
|
|
734
840
|
* else the lib declares (fill, indexOf, reverse, ...) falls through to
|
|
735
841
|
* the SC2020 member fence. Null when this isn't a bytes method call. */
|
|
842
|
+
/** The [needle, fromIndex] arguments of TypedArray indexOf, lastIndexOf
|
|
843
|
+
* and includes. A present fromIndex converts even when it is undefined
|
|
844
|
+
* (NaN, which ToIntegerOrInfinity makes 0); an absent one is 0, or
|
|
845
|
+
* +Infinity for lastIndexOf, which starts at the last element. */
|
|
846
|
+
function elementSearchArgs(lowerer, call, name) {
|
|
847
|
+
const nodes = call.arguments.nodes;
|
|
848
|
+
const loc = locOf(call);
|
|
849
|
+
const needle = lowerer.lowerExprExpecting(nodes[0], F64);
|
|
850
|
+
const from = nodes[1]
|
|
851
|
+
? lowerOptionalNumber(lowerer, lowerer.lowerExpr(nodes[1]), locOf(nodes[1]), nodes[1])
|
|
852
|
+
: {
|
|
853
|
+
kind: "numLit",
|
|
854
|
+
value: name === "lastIndexOf" ? Infinity : 0,
|
|
855
|
+
type: F64,
|
|
856
|
+
loc,
|
|
857
|
+
};
|
|
858
|
+
// An undefined fromIndex is NaN once converted, which starts at 0.
|
|
859
|
+
if (from.kind === "unitLit")
|
|
860
|
+
return [needle, { kind: "numLit", value: NaN, type: F64, loc }];
|
|
861
|
+
if (from.type.kind === "undefinedT" || from.type.kind === "void")
|
|
862
|
+
return [
|
|
863
|
+
needle,
|
|
864
|
+
{
|
|
865
|
+
kind: "seqExpr",
|
|
866
|
+
stmts: [{ kind: "exprStmt", expr: from, loc }],
|
|
867
|
+
result: { kind: "numLit", value: NaN, type: F64, loc },
|
|
868
|
+
type: F64,
|
|
869
|
+
loc,
|
|
870
|
+
},
|
|
871
|
+
];
|
|
872
|
+
if (from.type.kind !== "f64")
|
|
873
|
+
lowerer.noLowering(`.${name} with a non-number fromIndex`, call);
|
|
874
|
+
return [needle, from];
|
|
875
|
+
}
|
|
876
|
+
const ELEMENT_SEARCHES = {
|
|
877
|
+
indexOf: "indexOfElem",
|
|
878
|
+
lastIndexOf: "lastIndexOfElem",
|
|
879
|
+
includes: "includesElem",
|
|
880
|
+
};
|
|
881
|
+
/** Whether a union has a Buffer arm, under any alias name: each arm's own
|
|
882
|
+
* symbol names it. */
|
|
883
|
+
function hasBufferArm(type) {
|
|
884
|
+
const arms = type.flags & ts.TypeFlags.Union ? constituentTypes(type) : [type];
|
|
885
|
+
return arms.some((arm) => {
|
|
886
|
+
const symbol = arm.getSymbol();
|
|
887
|
+
return symbol !== undefined && ts.symbolName(symbol) === "Buffer";
|
|
888
|
+
});
|
|
889
|
+
}
|
|
890
|
+
/** The element-kind-generic typed-array methods on a union of typed
|
|
891
|
+
* arrays (indexed-unions.ts): the arguments lower as for one typed array,
|
|
892
|
+
* and each arm runs the method on its own receiver. Null for the methods
|
|
893
|
+
* that need a narrowing to one kind first. */
|
|
894
|
+
function lowerUnionBytesMethodCall(lowerer, call, access, name) {
|
|
895
|
+
if (isJsSourceFile(ts.getSourceFileOfNode(call)))
|
|
896
|
+
return null;
|
|
897
|
+
// A Buffer arm's methods differ from a typed array's (slice aliases, fill
|
|
898
|
+
// checks its range, searches take strings and wrap numbers), so such a
|
|
899
|
+
// union narrows to its arms first.
|
|
900
|
+
if (hasBufferArm(lowerer.typeOf(access.expression)))
|
|
901
|
+
return null;
|
|
902
|
+
const nodes = call.arguments.nodes;
|
|
903
|
+
if (nodes.some(ts.isSpreadElement))
|
|
904
|
+
return null;
|
|
905
|
+
const loc = locOf(call);
|
|
906
|
+
const num = (value) => ({ kind: "numLit", value, type: F64, loc });
|
|
907
|
+
const optional = (i, fallback, type = F64) => nodes[i] ? lowerOptionalArgument(lowerer, nodes[i], type, fallback) : fallback;
|
|
908
|
+
let method;
|
|
909
|
+
let args;
|
|
910
|
+
let result;
|
|
911
|
+
if ((name === "slice" || name === "subarray") && nodes.length <= 2) {
|
|
912
|
+
method = name;
|
|
913
|
+
args = () => [optional(0, num(0)), optional(1, num(Infinity))];
|
|
914
|
+
result = "receiver";
|
|
915
|
+
}
|
|
916
|
+
else if (name === "fill" && nodes.length <= 3) {
|
|
917
|
+
method = "fillElem";
|
|
918
|
+
args = () => [optional(0, num(0)), optional(1, num(0)), optional(2, num(Infinity))];
|
|
919
|
+
result = "receiver";
|
|
920
|
+
}
|
|
921
|
+
else if (name === "copyWithin" && nodes.length <= 3) {
|
|
922
|
+
method = "copyWithin";
|
|
923
|
+
args = () => [optional(0, num(0)), optional(1, num(0)), optional(2, num(Infinity))];
|
|
924
|
+
result = "receiver";
|
|
925
|
+
}
|
|
926
|
+
else if (name === "toReversed" && nodes.length === 0) {
|
|
927
|
+
method = "toReversed";
|
|
928
|
+
args = () => [];
|
|
929
|
+
result = "receiver";
|
|
930
|
+
}
|
|
931
|
+
else if (Object.hasOwn(ELEMENT_SEARCHES, name) && (nodes.length === 1 || nodes.length === 2)) {
|
|
932
|
+
method = ELEMENT_SEARCHES[name];
|
|
933
|
+
args = () => elementSearchArgs(lowerer, call, name);
|
|
934
|
+
result = name === "includes" ? BOOL : F64;
|
|
935
|
+
}
|
|
936
|
+
else if (name === "join" && nodes.length <= 1) {
|
|
937
|
+
method = "join";
|
|
938
|
+
args = () => [optional(0, { kind: "strLit", value: ",", type: STRING, loc }, STRING)];
|
|
939
|
+
result = STRING;
|
|
940
|
+
}
|
|
941
|
+
else if (name === "set" && (nodes.length === 1 || nodes.length === 2)) {
|
|
942
|
+
const source = lowerer.mapTypeOf(lowerer.typeOf(nodes[0]));
|
|
943
|
+
method = source?.kind === "bytes" ? "setFrom" : "setFromDyn";
|
|
944
|
+
args = () => {
|
|
945
|
+
const src = lowerer.lowerExpr(nodes[0]);
|
|
946
|
+
const first = src.type.kind === "bytes" ? src : lowerer.coerceInto(nodes[0], src, DYN);
|
|
947
|
+
return nodes.length === 2 ? [first, optional(1, num(0))] : [first];
|
|
948
|
+
};
|
|
949
|
+
result = VOID;
|
|
950
|
+
}
|
|
951
|
+
else
|
|
952
|
+
return null;
|
|
953
|
+
const receiver = lowerer.lowerExpr(access.expression);
|
|
954
|
+
const arms = indexedUnionArms(lowerer, receiver.type);
|
|
955
|
+
if (!arms || !allBytesArms(arms))
|
|
956
|
+
return null;
|
|
957
|
+
return lowerIndexedUnionMethod(lowerer, receiver, arms, method, args(), result, loc);
|
|
958
|
+
}
|
|
736
959
|
export function lowerBytesMethodCall(lowerer, call, access) {
|
|
737
960
|
if (lowerer.chainBlocked(access, call))
|
|
738
961
|
return null;
|
|
739
962
|
const name = access.name.text;
|
|
740
963
|
const receiverIr = lowerer.mapTypeOf(lowerer.typeOf(access.expression));
|
|
964
|
+
const unionArms = receiverIr ? indexedUnionArms(lowerer, receiverIr) : null;
|
|
965
|
+
if (unionArms && allBytesArms(unionArms) && lowerer.isStdlibMember(access))
|
|
966
|
+
return lowerUnionBytesMethodCall(lowerer, call, access, name);
|
|
741
967
|
if (receiverIr?.kind !== "bytes")
|
|
742
968
|
return null;
|
|
743
969
|
if (!lowerer.isStdlibMember(access))
|
|
@@ -780,6 +1006,25 @@ export function lowerBytesMethodCall(lowerer, call, access) {
|
|
|
780
1006
|
return value;
|
|
781
1007
|
}
|
|
782
1008
|
}
|
|
1009
|
+
// TypedArray indexOf / lastIndexOf / includes (the Buffer-declared forms,
|
|
1010
|
+
// which also take string and Buffer needles, lowered above).
|
|
1011
|
+
if (Object.hasOwn(ELEMENT_SEARCHES, name) &&
|
|
1012
|
+
!lowerer.checker
|
|
1013
|
+
.getSymbolAtLocation(access.name)
|
|
1014
|
+
?.declarations.some((d) => ts.isInterfaceDeclaration(d.parent) && d.parent.name.text === "Buffer")) {
|
|
1015
|
+
if (nArgs < 1 || nArgs > 2 || call.arguments.nodes.some(ts.isSpreadElement)) {
|
|
1016
|
+
lowerer.noLowering(`.${name} with ${nArgs} arguments on typed arrays`, call);
|
|
1017
|
+
}
|
|
1018
|
+
const receiver = lowerer.lowerExprExpecting(access.expression, receiverIr);
|
|
1019
|
+
return {
|
|
1020
|
+
kind: "bytesIntrinsic",
|
|
1021
|
+
method: ELEMENT_SEARCHES[name],
|
|
1022
|
+
receiver,
|
|
1023
|
+
args: elementSearchArgs(lowerer, call, name),
|
|
1024
|
+
type: name === "includes" ? BOOL : F64,
|
|
1025
|
+
loc,
|
|
1026
|
+
};
|
|
1027
|
+
}
|
|
783
1028
|
if (name === "toReversed") {
|
|
784
1029
|
if (nArgs !== 0) {
|
|
785
1030
|
lowerer.noLowering(`.toReversed with ${nArgs} arguments on typed arrays`, call);
|
|
@@ -906,19 +1151,7 @@ export function lowerBytesMethodCall(lowerer, call, access) {
|
|
|
906
1151
|
lowerer.noLowering(`.set with ${nArgs} arguments on typed arrays`, call);
|
|
907
1152
|
}
|
|
908
1153
|
const receiver = lowerer.lowerExprExpecting(access.expression, receiverIr);
|
|
909
|
-
|
|
910
|
-
const method = src.type.kind === "bytes" ? "setFrom" : "setFromDyn";
|
|
911
|
-
const args = [
|
|
912
|
-
src.type.kind === "bytes" ? src : lowerer.coerceInto(call.arguments.nodes[0], src, DYN),
|
|
913
|
-
];
|
|
914
|
-
if (nArgs === 2)
|
|
915
|
-
args.push(lowerOptionalArgument(lowerer, call.arguments.nodes[1], F64, {
|
|
916
|
-
kind: "numLit",
|
|
917
|
-
value: 0,
|
|
918
|
-
type: F64,
|
|
919
|
-
loc,
|
|
920
|
-
}));
|
|
921
|
-
return { kind: "bytesIntrinsic", method, receiver, args, type: VOID, loc };
|
|
1154
|
+
return bytesSetIntrinsic(lowerer, receiver, call.arguments.nodes, loc);
|
|
922
1155
|
}
|
|
923
1156
|
if (name === "toString") {
|
|
924
1157
|
// Buffer's toString(encoding?) — utf8 by default. A 0-arg toString
|
|
@@ -1055,6 +1288,8 @@ export function lowerBytesMethodCall(lowerer, call, access) {
|
|
|
1055
1288
|
if (receiverIr.elem !== "u8") {
|
|
1056
1289
|
lowerer.noLowering(`.${name} on a '${lowerer.fmt(receiverIr)}'`, call, "the numeric families read/write Buffer bytes");
|
|
1057
1290
|
}
|
|
1291
|
+
if (!numericArguments(lowerer, call))
|
|
1292
|
+
return dynNumericCall(lowerer, call, access, name, receiverIr, loc);
|
|
1058
1293
|
const write = name.startsWith("write");
|
|
1059
1294
|
const required = write ? 1 : 0; // value; offset defaults to 0
|
|
1060
1295
|
if (nArgs < required || nArgs > required + 1) {
|
|
@@ -1196,7 +1431,8 @@ const BUF_ENCODINGS = {
|
|
|
1196
1431
|
* does not know — the ladder callers (stream options) turn unknown
|
|
1197
1432
|
* literals into Node's runtime ERR_UNKNOWN_ENCODING throw. */
|
|
1198
1433
|
export function knownBufEncoding(name) {
|
|
1199
|
-
|
|
1434
|
+
// Buffer.isEncoding: any letter case
|
|
1435
|
+
return own(BUF_ENCODINGS, name) ?? own(BUF_ENCODINGS, name.toLowerCase());
|
|
1200
1436
|
}
|
|
1201
1437
|
/** The literal encoding argument of a Buffer surface, normalized — or a
|
|
1202
1438
|
* fence when it isn't a literal alias Node knows. */
|
|
@@ -1222,6 +1458,30 @@ const BUF_BIGINT_METHODS = {
|
|
|
1222
1458
|
writeBigUint64BE: { sign: false, le: false },
|
|
1223
1459
|
writeBigUint64LE: { sign: false, le: true },
|
|
1224
1460
|
};
|
|
1461
|
+
/** Whether every argument of a numeric read/write is statically a number. */
|
|
1462
|
+
function numericArguments(lowerer, call) {
|
|
1463
|
+
return call.arguments.nodes.every((a) => lowerer.mapTypeOf(lowerer.typeOf(a))?.kind === "f64");
|
|
1464
|
+
}
|
|
1465
|
+
/** A numeric read/write with an argument that is not a number (a string
|
|
1466
|
+
* offset from untyped JavaScript): the checked-dynamic Buffer method runs
|
|
1467
|
+
* Node's argument validation at runtime. */
|
|
1468
|
+
function dynNumericCall(lowerer, call, access, name, receiverIr, loc) {
|
|
1469
|
+
const receiver = lowerer.lowerExprExpecting(access.expression, receiverIr);
|
|
1470
|
+
return {
|
|
1471
|
+
kind: "dynCheck",
|
|
1472
|
+
value: {
|
|
1473
|
+
kind: "dynInvoke",
|
|
1474
|
+
recv: { kind: "dynFrom", value: receiver, type: DYN, loc, liveRef: true },
|
|
1475
|
+
method: name,
|
|
1476
|
+
calleeName: ts.getTextOfNode(access),
|
|
1477
|
+
args: call.arguments.nodes.map((a) => lowerer.lowerExprExpecting(a, DYN)),
|
|
1478
|
+
type: DYN,
|
|
1479
|
+
loc,
|
|
1480
|
+
},
|
|
1481
|
+
type: F64,
|
|
1482
|
+
loc,
|
|
1483
|
+
};
|
|
1484
|
+
}
|
|
1225
1485
|
/** The variable-width quartet (offset + byteLength) → sign/endian token. */
|
|
1226
1486
|
const BUF_NUM_VAR_METHODS = {
|
|
1227
1487
|
readUIntBE: "ube",
|
|
@@ -1564,7 +1824,7 @@ function knownBufferProducer(lowerer, source, seen = new Set()) {
|
|
|
1564
1824
|
* or empty encoding and throws ERR_UNKNOWN_ENCODING for an unknown name; an
|
|
1565
1825
|
* ArrayBuffer takes the second argument as its byte offset; other sources
|
|
1566
1826
|
* ignore it. */
|
|
1567
|
-
function dynBufferFromParts(source, encoding, loc) {
|
|
1827
|
+
function dynBufferFromParts(source, encoding, loc, length) {
|
|
1568
1828
|
const utf8 = { kind: "strLit", value: "utf8", type: STRING, loc };
|
|
1569
1829
|
const isString = (x) => ({
|
|
1570
1830
|
kind: "dynTest",
|
|
@@ -1605,19 +1865,39 @@ function dynBufferFromParts(source, encoding, loc) {
|
|
|
1605
1865
|
type: BYTES_U8,
|
|
1606
1866
|
loc,
|
|
1607
1867
|
},
|
|
1608
|
-
// An ArrayBuffer takes the second argument as its byte offset
|
|
1609
|
-
// (
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1868
|
+
// An ArrayBuffer takes the second argument as its byte offset and the
|
|
1869
|
+
// third as its length (scr_buffer_from_dyn_range_pooled); other values
|
|
1870
|
+
// convert with utf8.
|
|
1871
|
+
else_: length
|
|
1872
|
+
? {
|
|
1873
|
+
kind: "libCall",
|
|
1874
|
+
fn: "buffer.poolFromDynRange",
|
|
1875
|
+
args: [source, encoding, length],
|
|
1876
|
+
type: BYTES_U8,
|
|
1877
|
+
loc,
|
|
1878
|
+
}
|
|
1879
|
+
: {
|
|
1880
|
+
kind: "libCall",
|
|
1881
|
+
fn: "buffer.poolFromDynOffset",
|
|
1882
|
+
args: [source, encoding],
|
|
1883
|
+
type: BYTES_U8,
|
|
1884
|
+
loc,
|
|
1885
|
+
},
|
|
1617
1886
|
type: BYTES_U8,
|
|
1618
1887
|
loc,
|
|
1619
1888
|
};
|
|
1620
1889
|
}
|
|
1890
|
+
/** Buffer.from(arrayBuffer, byteOffset[, length]): each argument in order
|
|
1891
|
+
* as a checked-dynamic value, read by the runtime as Node's
|
|
1892
|
+
* fromArrayBuffer reads them. */
|
|
1893
|
+
function bufferFromArrayBufferRange(lowerer, args, loc, first) {
|
|
1894
|
+
const operands = [0, 1, 2].map((i) => i === 0 && first
|
|
1895
|
+
? first
|
|
1896
|
+
: args[i]
|
|
1897
|
+
? lowerer.lowerExprExpecting(args[i], DYN)
|
|
1898
|
+
: dynUndefinedExpr(loc));
|
|
1899
|
+
return { kind: "libCall", fn: "buffer.poolFromDynRange", args: operands, type: BYTES_U8, loc };
|
|
1900
|
+
}
|
|
1621
1901
|
/** Lowers `source` and `encNode` (or undefined) into hidden dyn locals, in
|
|
1622
1902
|
* source order, and builds the result from their references. */
|
|
1623
1903
|
function withDynBufferArguments(lowerer, source, encNode, loc, build) {
|
|
@@ -1650,30 +1930,37 @@ function dynBufferFromRuntimeEncoding(lowerer, value, encNode, loc) {
|
|
|
1650
1930
|
return null;
|
|
1651
1931
|
return withDynBufferArguments(lowerer, value, encNode, loc, (source, encoding) => dynBufferFromParts(source, encoding, loc));
|
|
1652
1932
|
}
|
|
1653
|
-
/** The deprecated `
|
|
1654
|
-
*
|
|
1655
|
-
*
|
|
1656
|
-
*
|
|
1657
|
-
*
|
|
1658
|
-
*
|
|
1659
|
-
* converts as Buffer.from does.
|
|
1660
|
-
*
|
|
1661
|
-
export function
|
|
1662
|
-
|
|
1663
|
-
if (!isJsSourceFile(sf) || !/[\\/]node_modules[\\/]/.test(sf.fileName))
|
|
1933
|
+
/** The deprecated `Buffer(arg[, encodingOrOffset[, length]])`, called or
|
|
1934
|
+
* constructed through the global or an alias of it, as Node's Buffer
|
|
1935
|
+
* function runs it: the arguments evaluate in order, DEP0005 is reported
|
|
1936
|
+
* on the next tick (once, and never for a call made from node_modules,
|
|
1937
|
+
* which only counts toward Node's 10000-call check), then a number
|
|
1938
|
+
* allocates zero-filled bytes (and throws ERR_INVALID_ARG_TYPE beside a
|
|
1939
|
+
* string second argument) and anything else converts as Buffer.from does.
|
|
1940
|
+
* Null for spread arguments and more than three. */
|
|
1941
|
+
export function lowerBufferConstruct(lowerer, expr) {
|
|
1942
|
+
if (ts.isCallExpression(expr) && expr.questionDotToken)
|
|
1664
1943
|
return null;
|
|
1665
1944
|
const args = expr.arguments?.nodes ?? [];
|
|
1666
|
-
if (args.length
|
|
1945
|
+
if (args.length > 3 || args.some(ts.isSpreadElement))
|
|
1667
1946
|
return null;
|
|
1668
1947
|
if (stdlibGlobalNameOf(lowerer, expr.expression) !== "Buffer")
|
|
1669
1948
|
return null;
|
|
1670
1949
|
const loc = locOf(expr);
|
|
1671
|
-
const
|
|
1950
|
+
const locals = [0, 1, 2].slice(0, Math.max(args.length, 2)).map((i) => {
|
|
1951
|
+
const local = lowerer.declareHiddenLocal("%bufferArgument", DYN);
|
|
1952
|
+
const node = args[i];
|
|
1953
|
+
const init = node === undefined ? dynUndefinedExpr(loc) : lowerer.lowerExprExpecting(node, DYN);
|
|
1954
|
+
return { local, init };
|
|
1955
|
+
});
|
|
1956
|
+
const [source, second, third] = locals.map(({ local }) => varRef(local.id, DYN, loc));
|
|
1957
|
+
const inNodeModules = /[\\/]node_modules[\\/]/.test(expr.getSourceFile().fileName);
|
|
1958
|
+
const value = {
|
|
1672
1959
|
kind: "ternary",
|
|
1673
1960
|
cond: { kind: "dynTest", test: "number", value: source, type: BOOL, loc },
|
|
1674
1961
|
then: {
|
|
1675
1962
|
kind: "ternary",
|
|
1676
|
-
cond: { kind: "dynTest", test: "string", value:
|
|
1963
|
+
cond: { kind: "dynTest", test: "string", value: second, type: BOOL, loc },
|
|
1677
1964
|
then: { kind: "libCall", fn: "buffer.newStringFail", args: [source], type: BYTES_U8, loc },
|
|
1678
1965
|
else_: {
|
|
1679
1966
|
kind: "libCall",
|
|
@@ -1685,11 +1972,35 @@ export function lowerNodeModulesBufferConstruct(lowerer, expr) {
|
|
|
1685
1972
|
type: BYTES_U8,
|
|
1686
1973
|
loc,
|
|
1687
1974
|
},
|
|
1688
|
-
else_: dynBufferFromParts(source,
|
|
1975
|
+
else_: dynBufferFromParts(source, second, loc, third),
|
|
1689
1976
|
type: BYTES_U8,
|
|
1690
1977
|
loc,
|
|
1691
|
-
}
|
|
1692
|
-
return {
|
|
1978
|
+
};
|
|
1979
|
+
return {
|
|
1980
|
+
kind: "seqExpr",
|
|
1981
|
+
stmts: [
|
|
1982
|
+
...locals.map(({ local, init }) => ({
|
|
1983
|
+
kind: "varDecl",
|
|
1984
|
+
localId: local.id,
|
|
1985
|
+
init,
|
|
1986
|
+
loc,
|
|
1987
|
+
})),
|
|
1988
|
+
{
|
|
1989
|
+
kind: "exprStmt",
|
|
1990
|
+
expr: {
|
|
1991
|
+
kind: "libCall",
|
|
1992
|
+
fn: inNodeModules ? "buffer.deprecationCount" : "buffer.deprecation",
|
|
1993
|
+
args: [],
|
|
1994
|
+
type: VOID,
|
|
1995
|
+
loc,
|
|
1996
|
+
},
|
|
1997
|
+
loc,
|
|
1998
|
+
},
|
|
1999
|
+
],
|
|
2000
|
+
result: { kind: "libCall", fn: "buffer.brand", args: [value], type: BYTES_U8, loc },
|
|
2001
|
+
type: BYTES_U8,
|
|
2002
|
+
loc,
|
|
2003
|
+
};
|
|
1693
2004
|
}
|
|
1694
2005
|
/** Buffer.from(array or bytes, extra): Node copies an array-like source and
|
|
1695
2006
|
* ignores the encoding/offset argument (yazl passes its `encoding` through
|
|
@@ -1736,7 +2047,18 @@ function lowerBufferStaticValue(lowerer, call, access) {
|
|
|
1736
2047
|
!args.some(ts.isSpreadElement) &&
|
|
1737
2048
|
((symbol) => symbol != null &&
|
|
1738
2049
|
(ts.symbolName(symbol) === "ArrayBuffer" || ts.symbolName(symbol) === "SharedArrayBuffer"))(lowerer.typeOf(args[0]).getSymbol())) {
|
|
1739
|
-
|
|
2050
|
+
// A byte offset or length follows Node's fromArrayBuffer (its
|
|
2051
|
+
// conversions and ERR_BUFFER_OUT_OF_BOUNDS), not the typed-array view.
|
|
2052
|
+
if (args.length === 1)
|
|
2053
|
+
return lowerArrayBufferView(lowerer, args, "u8", loc);
|
|
2054
|
+
return bufferFromArrayBufferRange(lowerer, args, loc);
|
|
2055
|
+
}
|
|
2056
|
+
// Buffer.from(value, byteOffset, length) over an untyped value: an
|
|
2057
|
+
// ArrayBuffer's range, or the two-argument conversion of other values.
|
|
2058
|
+
if (args.length === 3 && !args.some(ts.isSpreadElement)) {
|
|
2059
|
+
const first = lowerer.lowerExpr(args[0]);
|
|
2060
|
+
if (first.type.kind === "dyn")
|
|
2061
|
+
return bufferFromArrayBufferRange(lowerer, args, loc, first);
|
|
1740
2062
|
}
|
|
1741
2063
|
// Buffer.from(x.buffer[, byteOffset[, length]]): a u8 VIEW sharing
|
|
1742
2064
|
// x's storage (Node shares the ArrayBuffer; length is in BYTES).
|
|
@@ -2131,8 +2453,95 @@ function lowerBufferStaticValue(lowerer, call, access) {
|
|
|
2131
2453
|
const s = lowerer.lowerExprExpecting(args[0], STRING);
|
|
2132
2454
|
return { kind: "libCall", fn: "buffer.isEncoding", args: [s], type: BOOL, loc };
|
|
2133
2455
|
}
|
|
2134
|
-
|
|
2456
|
+
// Any other single argument: Node answers false for non-strings.
|
|
2457
|
+
if (args.length === 1 && !ts.isSpreadElement(args[0])) {
|
|
2458
|
+
const value = lowerer.declareHiddenLocal("%bufferEncoding", DYN);
|
|
2459
|
+
const ref = varRef(value.id, DYN, loc);
|
|
2460
|
+
return {
|
|
2461
|
+
kind: "seqExpr",
|
|
2462
|
+
stmts: [
|
|
2463
|
+
{
|
|
2464
|
+
kind: "varDecl",
|
|
2465
|
+
localId: value.id,
|
|
2466
|
+
init: lowerer.lowerExprExpecting(args[0], DYN),
|
|
2467
|
+
loc,
|
|
2468
|
+
},
|
|
2469
|
+
],
|
|
2470
|
+
result: {
|
|
2471
|
+
kind: "logical",
|
|
2472
|
+
op: "&&",
|
|
2473
|
+
left: { kind: "dynTest", test: "string", value: ref, type: BOOL, loc },
|
|
2474
|
+
right: {
|
|
2475
|
+
kind: "libCall",
|
|
2476
|
+
fn: "buffer.isEncoding",
|
|
2477
|
+
args: [{ kind: "dynCheck", value: ref, type: STRING, loc }],
|
|
2478
|
+
type: BOOL,
|
|
2479
|
+
loc,
|
|
2480
|
+
},
|
|
2481
|
+
type: BOOL,
|
|
2482
|
+
loc,
|
|
2483
|
+
},
|
|
2484
|
+
type: BOOL,
|
|
2485
|
+
loc,
|
|
2486
|
+
};
|
|
2487
|
+
}
|
|
2488
|
+
lowerer.noLowering("Buffer.isEncoding with this argument shape", call, "one argument is the lowered form");
|
|
2135
2489
|
}
|
|
2136
2490
|
return null; // of, copyBytesFrom, ... → the SC2020 member fence
|
|
2137
2491
|
}
|
|
2492
|
+
/** `Buffer.prototype.<name>` or `Buffer.prototype[key]` read in JavaScript
|
|
2493
|
+
* (smart-buffer's `typeof Buffer.prototype[method]` probe): the member as
|
|
2494
|
+
* scr_buffer_prototype_member answers it. Null for other expressions. */
|
|
2495
|
+
export function lowerBufferPrototypeMember(lowerer, expr) {
|
|
2496
|
+
if (expr.questionDotToken || !isJsSourceFile(expr.getSourceFile()))
|
|
2497
|
+
return null;
|
|
2498
|
+
const receiver = expr.expression;
|
|
2499
|
+
if (!ts.isPropertyAccessExpression(receiver) ||
|
|
2500
|
+
receiver.questionDotToken ||
|
|
2501
|
+
receiver.name.text !== "prototype" ||
|
|
2502
|
+
stdlibGlobalNameOf(lowerer, receiver.expression) !== "Buffer")
|
|
2503
|
+
return null;
|
|
2504
|
+
const loc = locOf(expr);
|
|
2505
|
+
const key = ts.isPropertyAccessExpression(expr)
|
|
2506
|
+
? {
|
|
2507
|
+
kind: "dynFrom",
|
|
2508
|
+
value: { kind: "strLit", value: expr.name.text, type: STRING, loc },
|
|
2509
|
+
type: DYN,
|
|
2510
|
+
loc,
|
|
2511
|
+
}
|
|
2512
|
+
: lowerer.lowerExprExpecting(expr.argumentExpression, DYN);
|
|
2513
|
+
return { kind: "libCall", fn: "buffer.prototypeMember", args: [key], type: DYN, loc };
|
|
2514
|
+
}
|
|
2515
|
+
const BUFFER_VALUE_FNS = new Set([
|
|
2516
|
+
"buffer.constructor",
|
|
2517
|
+
"buffer.staticValue",
|
|
2518
|
+
"buffer.prototypeMember",
|
|
2519
|
+
]);
|
|
2520
|
+
/** A program that reads the Buffer function's value installs it in %main,
|
|
2521
|
+
* so a Buffer's `.constructor` answers the same function. */
|
|
2522
|
+
export function installBufferValue(functions) {
|
|
2523
|
+
let found = false;
|
|
2524
|
+
const visitor = {
|
|
2525
|
+
expr: (e) => {
|
|
2526
|
+
if (e.kind === "libCall" && BUFFER_VALUE_FNS.has(e.fn))
|
|
2527
|
+
found = true;
|
|
2528
|
+
return !found;
|
|
2529
|
+
},
|
|
2530
|
+
stmt: () => !found,
|
|
2531
|
+
};
|
|
2532
|
+
for (const fn of functions) {
|
|
2533
|
+
for (const s of fn.body)
|
|
2534
|
+
everyStmt(s, visitor);
|
|
2535
|
+
if (found)
|
|
2536
|
+
break;
|
|
2537
|
+
}
|
|
2538
|
+
const main = functions.find((fn) => fn.name === ENTRY_NAME);
|
|
2539
|
+
if (!found || !main)
|
|
2540
|
+
return;
|
|
2541
|
+
main.body.unshift({
|
|
2542
|
+
kind: "exprStmt",
|
|
2543
|
+
expr: { kind: "libCall", fn: "buffer.installValue", args: [], type: VOID, loc: main.loc },
|
|
2544
|
+
loc: main.loc,
|
|
2545
|
+
});
|
|
2546
|
+
}
|
|
2138
2547
|
//# sourceMappingURL=bytes.js.map
|