@scriptc/compiler 0.4.2 → 0.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ambient/scriptc-node-fallback.d.ts +470 -66
- package/dist/backend/cycle-analysis.d.ts +4 -1
- package/dist/backend/cycle-analysis.js +6 -4
- package/dist/backend/cycle-analysis.js.map +1 -1
- package/dist/backend/cycle-analysis.test.js +55 -0
- package/dist/backend/cycle-analysis.test.js.map +1 -1
- package/dist/backend/cycle-mutability.d.ts +7 -0
- package/dist/backend/cycle-mutability.js +19 -1
- package/dist/backend/cycle-mutability.js.map +1 -1
- package/dist/backend/executable-features.js +2 -0
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/immutability.d.ts +6 -3
- package/dist/backend/immutability.js +33 -29
- package/dist/backend/immutability.js.map +1 -1
- package/dist/backend/library-pack.js +1 -0
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/llvm/alloc.d.ts +16 -1
- package/dist/backend/llvm/alloc.js +54 -4
- package/dist/backend/llvm/alloc.js.map +1 -1
- package/dist/backend/llvm/appended-array-literals.d.ts +2 -1
- package/dist/backend/llvm/appended-array-literals.js +44 -36
- package/dist/backend/llvm/appended-array-literals.js.map +1 -1
- package/dist/backend/llvm/appended-array-literals.test.js +4 -3
- package/dist/backend/llvm/appended-array-literals.test.js.map +1 -1
- package/dist/backend/llvm/array-search.d.ts +4 -3
- package/dist/backend/llvm/array-search.js +21 -9
- package/dist/backend/llvm/array-search.js.map +1 -1
- package/dist/backend/llvm/blocks.d.ts +1 -1
- package/dist/backend/llvm/blocks.js +2 -2
- package/dist/backend/llvm/blocks.js.map +1 -1
- package/dist/backend/llvm/byte-windows.js +2 -0
- package/dist/backend/llvm/byte-windows.js.map +1 -1
- package/dist/backend/llvm/bytes-alias.d.ts +6 -1
- package/dist/backend/llvm/bytes-alias.js +8 -2
- package/dist/backend/llvm/bytes-alias.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.d.ts +47 -5
- package/dist/backend/llvm/bytes-loop-versions.js +479 -32
- package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.test.js +263 -2
- package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
- package/dist/backend/llvm/checked-value-lifetimes.js +2 -0
- package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
- package/dist/backend/llvm/classes.d.ts +7 -5
- package/dist/backend/llvm/classes.js +44 -20
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +167 -7
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +9 -3
- package/dist/backend/llvm/common.js +9 -3
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.d.ts +2 -1
- package/dist/backend/llvm/constant-callbacks.js +83 -52
- package/dist/backend/llvm/constant-callbacks.js.map +1 -1
- package/dist/backend/llvm/counted-loops.d.ts +7 -0
- package/dist/backend/llvm/counted-loops.js +18 -0
- package/dist/backend/llvm/counted-loops.js.map +1 -1
- package/dist/backend/llvm/debug-info.js +2 -5
- package/dist/backend/llvm/debug-info.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.d.ts +39 -8
- package/dist/backend/llvm/dense-array-access.js +222 -52
- package/dist/backend/llvm/dense-array-access.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.test.js +36 -0
- package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
- package/dist/backend/llvm/dense-array-loops.d.ts +17 -1
- package/dist/backend/llvm/dense-array-loops.js +194 -5
- package/dist/backend/llvm/dense-array-loops.js.map +1 -1
- package/dist/backend/llvm/dense-array-loops.test.js +90 -1
- package/dist/backend/llvm/dense-array-loops.test.js.map +1 -1
- package/dist/backend/llvm/dyn-handle-tags.test.js +6 -1
- package/dist/backend/llvm/dyn-handle-tags.test.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +30 -0
- package/dist/backend/llvm/dyn.js +373 -70
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.js +13 -28
- package/dist/backend/llvm/emit-function.js.map +1 -1
- package/dist/backend/llvm/emit-journal.d.ts +93 -0
- package/dist/backend/llvm/emit-journal.js +170 -0
- package/dist/backend/llvm/emit-journal.js.map +1 -0
- package/dist/backend/llvm/emit-module.js +211 -33
- package/dist/backend/llvm/emit-module.js.map +1 -1
- package/dist/backend/llvm/emit-statements.d.ts +0 -4
- package/dist/backend/llvm/emit-statements.js +268 -84
- package/dist/backend/llvm/emit-statements.js.map +1 -1
- package/dist/backend/llvm/emitter-state.d.ts +7 -0
- package/dist/backend/llvm/emitter-state.js +14 -0
- package/dist/backend/llvm/emitter-state.js.map +1 -0
- package/dist/backend/llvm/emitter.d.ts +186 -37
- package/dist/backend/llvm/emitter.js +733 -90
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +65 -7
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +11 -13
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.js +48 -20
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-callbacks.js +47 -0
- package/dist/backend/llvm/expr-callbacks.js.map +1 -1
- package/dist/backend/llvm/expr-calls.js +28 -14
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.d.ts +14 -2
- package/dist/backend/llvm/expr-containers.js +143 -37
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-context.d.ts +14 -0
- package/dist/backend/llvm/expr-dynamic.js +18 -11
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +119 -38
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.test.js +11 -6
- package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
- package/dist/backend/llvm/expr-records.d.ts +12 -0
- package/dist/backend/llvm/expr-records.js +106 -0
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.d.ts +2 -2
- package/dist/backend/llvm/expr-stream-bridges.js +210 -69
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.test.js +1 -1
- package/dist/backend/llvm/expr-stream-bridges.test.js.map +1 -1
- package/dist/backend/llvm/expr-stream-callbacks.d.ts +2 -2
- package/dist/backend/llvm/expr-stream-callbacks.js +74 -20
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/int32-kind-loops.d.ts +39 -0
- package/dist/backend/llvm/int32-kind-loops.js +106 -0
- package/dist/backend/llvm/int32-kind-loops.js.map +1 -0
- package/dist/backend/llvm/integer-or-nan-indexes.test.d.ts +1 -0
- package/dist/backend/llvm/integer-or-nan-indexes.test.js +118 -0
- package/dist/backend/llvm/integer-or-nan-indexes.test.js.map +1 -0
- package/dist/backend/llvm/integer-values.d.ts +25 -1
- package/dist/backend/llvm/integer-values.js +95 -0
- package/dist/backend/llvm/integer-values.js.map +1 -1
- package/dist/backend/llvm/js-ic.d.ts +1 -1
- package/dist/backend/llvm/js-ic.js +1 -1
- package/dist/backend/llvm/js-ic.js.map +1 -1
- package/dist/backend/llvm/key-orders.d.ts +7 -0
- package/dist/backend/llvm/key-orders.js +33 -0
- package/dist/backend/llvm/key-orders.js.map +1 -0
- package/dist/backend/llvm/lib-connect.js +4 -0
- package/dist/backend/llvm/lib-connect.js.map +1 -1
- package/dist/backend/llvm/lib-datagram.js +11 -0
- package/dist/backend/llvm/lib-datagram.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +213 -5
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +4 -4
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-http2.js +4 -0
- package/dist/backend/llvm/lib-http2.js.map +1 -1
- package/dist/backend/llvm/lib-lookup.js +16 -6
- package/dist/backend/llvm/lib-lookup.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +37 -1
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +94 -2
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +35 -5
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +115 -19
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.test.js +14 -0
- package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
- package/dist/backend/llvm/loop-state.d.ts +33 -0
- package/dist/backend/llvm/loop-state.js +42 -0
- package/dist/backend/llvm/loop-state.js.map +1 -0
- package/dist/backend/llvm/map-number-lookup.d.ts +26 -8
- package/dist/backend/llvm/map-number-lookup.js +91 -31
- package/dist/backend/llvm/map-number-lookup.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.test.js +55 -0
- package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.js +4 -2
- package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.d.ts +2 -1
- package/dist/backend/llvm/nullable-unions.js +15 -3
- package/dist/backend/llvm/nullable-unions.js.map +1 -1
- package/dist/backend/llvm/publish.d.ts +10 -0
- package/dist/backend/llvm/publish.js +15 -3
- package/dist/backend/llvm/publish.js.map +1 -1
- package/dist/backend/llvm/receivers.js +6 -1
- package/dist/backend/llvm/receivers.js.map +1 -1
- package/dist/backend/llvm/record-results.d.ts +1 -9
- package/dist/backend/llvm/record-results.js +2 -11
- package/dist/backend/llvm/record-results.js.map +1 -1
- package/dist/backend/llvm/reference-effects.js +3 -0
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- package/dist/backend/llvm/reference-writes.d.ts +7 -2
- package/dist/backend/llvm/reference-writes.js +89 -72
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/running-extrema.d.ts +11 -0
- package/dist/backend/llvm/running-extrema.js +115 -0
- package/dist/backend/llvm/running-extrema.js.map +1 -0
- package/dist/backend/llvm/running-extrema.test.d.ts +1 -0
- package/dist/backend/llvm/running-extrema.test.js +89 -0
- package/dist/backend/llvm/running-extrema.test.js.map +1 -0
- package/dist/backend/llvm/shapes.d.ts +71 -15
- package/dist/backend/llvm/shapes.js +224 -40
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +53 -7
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/speculative-integers.d.ts +6 -0
- package/dist/backend/llvm/speculative-integers.js +2 -2
- package/dist/backend/llvm/speculative-integers.js.map +1 -1
- package/dist/backend/llvm/stack-captures.js +1 -5
- package/dist/backend/llvm/stack-captures.js.map +1 -1
- package/dist/backend/llvm/stack-objects.d.ts +3 -2
- package/dist/backend/llvm/stack-objects.js +5 -2
- package/dist/backend/llvm/stack-objects.js.map +1 -1
- package/dist/backend/llvm/string-reads.d.ts +12 -0
- package/dist/backend/llvm/string-reads.js +44 -0
- package/dist/backend/llvm/string-reads.js.map +1 -1
- package/dist/backend/llvm/union-repr.d.ts +4 -3
- package/dist/backend/llvm/union-repr.js +6 -5
- package/dist/backend/llvm/union-repr.js.map +1 -1
- package/dist/backend/llvm/walk-borrows.d.ts +3 -0
- package/dist/backend/llvm/walk-borrows.js +46 -41
- package/dist/backend/llvm/walk-borrows.js.map +1 -1
- package/dist/backend/llvm/walkers.d.ts +3 -0
- package/dist/backend/llvm/walkers.js +101 -65
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/llvm/wrapping-sums.d.ts +16 -1
- package/dist/backend/llvm/wrapping-sums.js +126 -0
- package/dist/backend/llvm/wrapping-sums.js.map +1 -1
- package/dist/backend/may-throw.d.ts +8 -10
- package/dist/backend/may-throw.js +14 -10
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +5 -0
- package/dist/backend/native/executable.js +7 -0
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/runtime-inputs.d.ts +1 -1
- package/dist/backend/native/runtime-inputs.js +1 -0
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native-codegen-core.d.ts +5 -3
- package/dist/backend/native-codegen-core.js +13 -6
- package/dist/backend/native-codegen-core.js.map +1 -1
- package/dist/backend/native-codegen.test.js +6 -4
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +4 -0
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/publication.d.ts +12 -1
- package/dist/backend/publication.js +37 -14
- package/dist/backend/publication.js.map +1 -1
- package/dist/backend/publication.test.js +30 -0
- package/dist/backend/publication.test.js.map +1 -1
- package/dist/backend/result-slots.d.ts +16 -0
- package/dist/backend/result-slots.js +23 -0
- package/dist/backend/result-slots.js.map +1 -0
- package/dist/backend/runtime-abi.d.ts +2 -2
- package/dist/backend/runtime-abi.js +2 -2
- package/dist/backend/runtime-pack-core.d.ts +1 -0
- package/dist/backend/runtime-pack-core.js +1 -0
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +2 -1
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +2 -1
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/stack-observations.d.ts +2 -1
- package/dist/backend/stack-observations.js +67 -42
- package/dist/backend/stack-observations.js.map +1 -1
- package/dist/backend/target-cpu.d.ts +26 -0
- package/dist/backend/target-cpu.js +98 -0
- package/dist/backend/target-cpu.js.map +1 -0
- package/dist/backend/target-cpu.test.d.ts +1 -0
- package/dist/backend/target-cpu.test.js +38 -0
- package/dist/backend/target-cpu.test.js.map +1 -0
- package/dist/backend/target-diagnostics.js +5 -3
- package/dist/backend/target-diagnostics.js.map +1 -1
- package/dist/backend/warm-cache.js +1 -0
- package/dist/backend/warm-cache.js.map +1 -1
- package/dist/cli/command.js +20 -1
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/usage.d.ts +4 -1
- package/dist/cli/usage.js +10 -3
- package/dist/cli/usage.js.map +1 -1
- package/dist/compat/fetch-profile.js +1 -1
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/compile-types.d.ts +7 -0
- package/dist/contracts/check.js +4 -3
- package/dist/contracts/check.js.map +1 -1
- package/dist/contracts/int32-elements.js +10 -2
- package/dist/contracts/int32-elements.js.map +1 -1
- package/dist/coverage/report.js +12 -3
- package/dist/coverage/report.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +4 -0
- package/dist/diagnostics/diagnostic.js +1 -1
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/envelope.d.ts +3 -0
- package/dist/diagnostics/envelope.js +1 -0
- package/dist/diagnostics/envelope.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +5 -0
- package/dist/executable/executable-cache.js +5 -0
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +3 -0
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/frontend/decl-projection.d.ts +41 -0
- package/dist/frontend/decl-projection.js +949 -0
- package/dist/frontend/decl-projection.js.map +1 -0
- package/dist/frontend/decl-projection.test.d.ts +1 -0
- package/dist/frontend/decl-projection.test.js +30 -0
- package/dist/frontend/decl-projection.test.js.map +1 -0
- package/dist/frontend/dts-paths.d.ts +15 -0
- package/dist/frontend/dts-paths.js +25 -0
- package/dist/frontend/dts-paths.js.map +1 -1
- package/dist/frontend/input-tracker.d.ts +6 -0
- package/dist/frontend/input-tracker.js +51 -28
- package/dist/frontend/input-tracker.js.map +1 -1
- package/dist/frontend/input-tracker.test.js +19 -0
- package/dist/frontend/input-tracker.test.js.map +1 -1
- package/dist/frontend/lowering/array-values.js +100 -2
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/builtins/async-context.d.ts +8 -2
- package/dist/frontend/lowering/builtins/async-context.js +62 -3
- package/dist/frontend/lowering/builtins/async-context.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-methods.js +46 -15
- package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process.js +13 -2
- package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
- package/dist/frontend/lowering/builtins/crypto.js +87 -10
- package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
- package/dist/frontend/lowering/builtins/dates.js +4 -1
- package/dist/frontend/lowering/builtins/dates.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.js +3 -3
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-glob.js +6 -3
- package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-paths.d.ts +43 -5
- package/dist/frontend/lowering/builtins/fs-paths.js +245 -93
- package/dist/frontend/lowering/builtins/fs-paths.js.map +1 -1
- package/dist/frontend/lowering/builtins/global-namespace-keys.d.ts +3 -0
- package/dist/frontend/lowering/builtins/global-namespace-keys.js +122 -0
- package/dist/frontend/lowering/builtins/global-namespace-keys.js.map +1 -0
- package/dist/frontend/lowering/builtins/module-calls.js +6 -3
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/numbers.js +9 -1
- package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.d.ts +7 -1
- package/dist/frontend/lowering/builtins/promises.js +236 -139
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +5 -1
- package/dist/frontend/lowering/builtins/readline.js +35 -3
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/url.js +24 -1
- package/dist/frontend/lowering/builtins/url.js.map +1 -1
- package/dist/frontend/lowering/builtins/webassembly.js +6 -3
- package/dist/frontend/lowering/builtins/webassembly.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.js +0 -1
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/cjs-exports-object.js +1 -1
- package/dist/frontend/lowering/cjs-exports-object.js.map +1 -1
- package/dist/frontend/lowering/cjs-inline-require.d.ts +32 -0
- package/dist/frontend/lowering/cjs-inline-require.js +307 -4
- package/dist/frontend/lowering/cjs-inline-require.js.map +1 -1
- package/dist/frontend/lowering/class-callbacks.d.ts +5 -2
- package/dist/frontend/lowering/class-callbacks.js +82 -12
- package/dist/frontend/lowering/class-callbacks.js.map +1 -1
- package/dist/frontend/lowering/class-construction.d.ts +4 -1
- package/dist/frontend/lowering/class-construction.js +17 -3
- package/dist/frontend/lowering/class-construction.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +49 -2
- package/dist/frontend/lowering/class-dynamic-dispatch.js +880 -108
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js +47 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
- package/dist/frontend/lowering/class-iterables.d.ts +2 -1
- package/dist/frontend/lowering/class-iterables.js +9 -1
- package/dist/frontend/lowering/class-iterables.js.map +1 -1
- package/dist/frontend/lowering/class-method-mutations.js +83 -24
- package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
- package/dist/frontend/lowering/class-protocols.d.ts +25 -0
- package/dist/frontend/lowering/class-protocols.js +183 -1
- package/dist/frontend/lowering/class-protocols.js.map +1 -1
- package/dist/frontend/lowering/class-prototypes.js +31 -2
- package/dist/frontend/lowering/class-prototypes.js.map +1 -1
- package/dist/frontend/lowering/class-runtime-statics.d.ts +9 -3
- package/dist/frontend/lowering/class-runtime-statics.js +29 -4
- package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural-plans.js +48 -1
- package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +91 -1
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/completion-callbacks.d.ts +4 -0
- package/dist/frontend/lowering/completion-callbacks.js +146 -0
- package/dist/frontend/lowering/completion-callbacks.js.map +1 -0
- package/dist/frontend/lowering/containers/array-callback-call.js +2 -2
- package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.d.ts +5 -4
- package/dist/frontend/lowering/containers/array-callbacks.js +345 -24
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-concat.js +10 -0
- package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.js +5 -0
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +26 -3
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/array-pipelines.js +19 -8
- package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.d.ts +25 -17
- package/dist/frontend/lowering/containers/bytes.js +455 -46
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.js +3 -0
- package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +7 -2
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/filter-predicates.d.ts +6 -0
- package/dist/frontend/lowering/containers/filter-predicates.js +205 -0
- package/dist/frontend/lowering/containers/filter-predicates.js.map +1 -0
- package/dist/frontend/lowering/containers/indexed-objects.d.ts +0 -12
- package/dist/frontend/lowering/containers/indexed-objects.js +46 -7
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/containers/string-and-regexp.js +55 -9
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/containers/string-replacement.js +43 -19
- package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
- package/dist/frontend/lowering/date-values.d.ts +11 -0
- package/dist/frontend/lowering/date-values.js +207 -0
- package/dist/frontend/lowering/date-values.js.map +1 -0
- package/dist/frontend/lowering/dispatch-sites.js +15 -1
- package/dist/frontend/lowering/dispatch-sites.js.map +1 -1
- package/dist/frontend/lowering/divergences.js +9 -1
- package/dist/frontend/lowering/divergences.js.map +1 -1
- package/dist/frontend/lowering/error-methods.js +47 -2
- package/dist/frontend/lowering/error-methods.js.map +1 -1
- package/dist/frontend/lowering/expressions/array-literals.js +53 -0
- package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/binary.js +100 -28
- package/dist/frontend/lowering/expressions/binary.js.map +1 -1
- package/dist/frontend/lowering/expressions/element-access.js +169 -13
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/identifiers.js +64 -5
- package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
- package/dist/frontend/lowering/expressions/narrowing.js +95 -1
- package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/nullish-assignment.js +3 -1
- package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.d.ts +10 -0
- package/dist/frontend/lowering/expressions/object-literals.js +138 -51
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.js +12 -0
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.js +168 -10
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/relational.js +212 -33
- package/dist/frontend/lowering/expressions/relational.js.map +1 -1
- package/dist/frontend/lowering/expressions/typeof.js +6 -0
- package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
- package/dist/frontend/lowering/expressions/union-fields.js +4 -0
- package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
- package/dist/frontend/lowering/expressions/updates.js +39 -3
- package/dist/frontend/lowering/expressions/updates.js.map +1 -1
- package/dist/frontend/lowering/frozen-records.d.ts +28 -0
- package/dist/frontend/lowering/frozen-records.js +322 -0
- package/dist/frontend/lowering/frozen-records.js.map +1 -0
- package/dist/frontend/lowering/function-returns.js +64 -0
- package/dist/frontend/lowering/function-returns.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.js +7 -2
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/indexed-unions.d.ts +54 -0
- package/dist/frontend/lowering/indexed-unions.js +401 -0
- package/dist/frontend/lowering/indexed-unions.js.map +1 -0
- package/dist/frontend/lowering/iterable-values.d.ts +49 -0
- package/dist/frontend/lowering/iterable-values.js +297 -0
- package/dist/frontend/lowering/iterable-values.js.map +1 -0
- package/dist/frontend/lowering/iterator-adapters.js +186 -1
- package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
- package/dist/frontend/lowering/js-class-fields.d.ts +8 -0
- package/dist/frontend/lowering/js-class-fields.js +45 -10
- package/dist/frontend/lowering/js-class-fields.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.d.ts +18 -3
- package/dist/frontend/lowering/key-order-witness.js +974 -48
- package/dist/frontend/lowering/key-order-witness.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.test.js +530 -10
- package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +15 -3
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-async-iteration.js +4 -1
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +7 -0
- package/dist/frontend/lowering/lower-calls.js +462 -44
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +11 -2
- package/dist/frontend/lowering/lower-classes.js +324 -69
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-dgram.js +3 -1
- package/dist/frontend/lowering/lower-dgram.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.js +215 -3
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.d.ts +11 -0
- package/dist/frontend/lowering/lower-functions.js +83 -0
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.js +42 -32
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-global-value.js +6 -3
- package/dist/frontend/lowering/lower-global-value.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.d.ts +1 -1
- package/dist/frontend/lowering/lower-inspect.js +53 -17
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +53 -5
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.js +5 -1
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-server.js +2 -2
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.d.ts +5 -0
- package/dist/frontend/lowering/lower-stdlib.js +30 -0
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +23 -0
- package/dist/frontend/lowering/lower-stmts.js +553 -81
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.d.ts +20 -2
- package/dist/frontend/lowering/lower-stream.js +1483 -156
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +107 -8
- package/dist/frontend/lowering/lowerer.js +381 -36
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/module-namespace-elements.d.ts +11 -1
- package/dist/frontend/lowering/module-namespace-elements.js +82 -5
- package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
- package/dist/frontend/lowering/new-target.d.ts +12 -0
- package/dist/frontend/lowering/new-target.js +280 -0
- package/dist/frontend/lowering/new-target.js.map +1 -0
- package/dist/frontend/lowering/object-factory-new.d.ts +5 -0
- package/dist/frontend/lowering/object-factory-new.js +20 -6
- package/dist/frontend/lowering/object-factory-new.js.map +1 -1
- package/dist/frontend/lowering/overload-choice.d.ts +33 -0
- package/dist/frontend/lowering/overload-choice.js +190 -0
- package/dist/frontend/lowering/overload-choice.js.map +1 -0
- package/dist/frontend/lowering/surfaces.d.ts +3 -0
- package/dist/frontend/lowering/surfaces.js +73 -8
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/undefined-index.d.ts +27 -0
- package/dist/frontend/lowering/undefined-index.js +82 -0
- package/dist/frontend/lowering/undefined-index.js.map +1 -0
- package/dist/frontend/lowering/var-hoisting.js +29 -13
- package/dist/frontend/lowering/var-hoisting.js.map +1 -1
- package/dist/frontend/lowering/width-lift.d.ts +18 -0
- package/dist/frontend/npm-static-bundled-chunks.js +9 -11
- package/dist/frontend/npm-static-bundled-chunks.js.map +1 -1
- package/dist/frontend/npm-static-bundled-chunks.test.js +6 -5
- package/dist/frontend/npm-static-bundled-chunks.test.js.map +1 -1
- package/dist/frontend/npm-static-rewrite-syntax.js +9 -1
- package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
- package/dist/frontend/npm-static.js +4 -20
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/package-shims.d.ts +3 -0
- package/dist/frontend/package-shims.js +71 -8
- package/dist/frontend/package-shims.js.map +1 -1
- package/dist/frontend/pipeline.js +19 -11
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/process-fork.d.ts +25 -0
- package/dist/frontend/process-fork.js +2 -0
- package/dist/frontend/process-fork.js.map +1 -0
- package/dist/frontend/program-analysis.d.ts +5 -1
- package/dist/frontend/program-analysis.js +5 -0
- package/dist/frontend/program-analysis.js.map +1 -1
- package/dist/frontend/program.d.ts +21 -6
- package/dist/frontend/program.js +681 -83
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +43 -3
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/token-equivalence.d.ts +3 -0
- package/dist/frontend/token-equivalence.js +409 -0
- package/dist/frontend/token-equivalence.js.map +1 -0
- package/dist/frontend/token-equivalence.test.d.ts +1 -0
- package/dist/frontend/token-equivalence.test.js +67 -0
- package/dist/frontend/token-equivalence.test.js.map +1 -0
- package/dist/frontend/ts7/ast-node.d.ts +22 -0
- package/dist/frontend/ts7/ast-node.js +1048 -103
- package/dist/frontend/ts7/ast-node.js.map +1 -1
- package/dist/frontend/ts7/ast-node.test.js +24 -0
- package/dist/frontend/ts7/ast-node.test.js.map +1 -1
- package/dist/frontend/ts7/ast-wire.d.ts +4 -3
- package/dist/frontend/ts7/ast-wire.js +34 -24
- package/dist/frontend/ts7/ast-wire.js.map +1 -1
- package/dist/frontend/ts7/ast-wire.test.js +23 -0
- package/dist/frontend/ts7/ast-wire.test.js.map +1 -1
- package/dist/frontend/ts7/checker-backend.d.ts +3 -4
- package/dist/frontend/ts7/checker-backend.js +2 -2
- package/dist/frontend/ts7/checker-backend.js.map +1 -1
- package/dist/frontend/ts7/checker-backend.test.js +5 -9
- package/dist/frontend/ts7/checker-backend.test.js.map +1 -1
- package/dist/frontend/ts7/checker.d.ts +4 -0
- package/dist/frontend/ts7/checker.js +7 -0
- package/dist/frontend/ts7/checker.js.map +1 -1
- package/dist/frontend/ts7/lib-diagnostics.d.ts +24 -0
- package/dist/frontend/ts7/lib-diagnostics.js +307 -0
- package/dist/frontend/ts7/lib-diagnostics.js.map +1 -0
- package/dist/frontend/ts7/lib-diagnostics.test.d.ts +1 -0
- package/dist/frontend/ts7/lib-diagnostics.test.js +199 -0
- package/dist/frontend/ts7/lib-diagnostics.test.js.map +1 -0
- package/dist/frontend/ts7/program-host.d.ts +7 -0
- package/dist/frontend/ts7/program-host.js +25 -2
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.d.ts +3 -0
- package/dist/frontend/ts7/semantic-model.js +5 -0
- package/dist/frontend/ts7/semantic-model.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.test.js +6 -1
- package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
- package/dist/frontend/ts7/semantic-types.d.ts +1 -1
- package/dist/frontend/ts7/semantic-types.js +1 -1
- package/dist/frontend/ts7/semantic-types.js.map +1 -1
- package/dist/frontend/ts7/session.d.ts +14 -1
- package/dist/frontend/ts7/session.js +22 -0
- package/dist/frontend/ts7/session.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +13 -1
- package/dist/frontend/type-mapper.js +229 -20
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.d.ts +0 -5
- package/dist/index.js +46 -4
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.js +5 -3
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/array-length-stability.d.ts +4 -0
- package/dist/ir/array-length-stability.js +19 -6
- package/dist/ir/array-length-stability.js.map +1 -1
- package/dist/ir/array-length-stability.test.js +24 -0
- package/dist/ir/array-length-stability.test.js.map +1 -1
- package/dist/ir/builtin-effects.d.ts +7 -0
- package/dist/ir/builtin-effects.js +60 -0
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +6 -4
- package/dist/ir/builtin-signatures.js +222 -13
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/callback-specialization.d.ts +2 -1
- package/dist/ir/callback-specialization.js +23 -18
- package/dist/ir/callback-specialization.js.map +1 -1
- package/dist/ir/char-unit-locals.d.ts +19 -0
- package/dist/ir/char-unit-locals.js +185 -0
- package/dist/ir/char-unit-locals.js.map +1 -0
- package/dist/ir/char-unit-locals.test.d.ts +1 -0
- package/dist/ir/char-unit-locals.test.js +94 -0
- package/dist/ir/char-unit-locals.test.js.map +1 -0
- package/dist/ir/final-fields.d.ts +2 -1
- package/dist/ir/final-fields.js +14 -16
- package/dist/ir/final-fields.js.map +1 -1
- package/dist/ir/function-references.d.ts +2 -0
- package/dist/ir/function-references.js +2 -0
- package/dist/ir/function-references.js.map +1 -1
- package/dist/ir/function-references.test.js +3 -0
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/initializer-bindings.d.ts +2 -1
- package/dist/ir/initializer-bindings.js +27 -20
- package/dist/ir/initializer-bindings.js.map +1 -1
- package/dist/ir/int32-arrays.d.ts +108 -0
- package/dist/ir/int32-arrays.js +831 -0
- package/dist/ir/int32-arrays.js.map +1 -0
- package/dist/ir/int32-slots.d.ts +24 -2
- package/dist/ir/int32-slots.js +266 -57
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/int32-slots.test.js +33 -0
- package/dist/ir/int32-slots.test.js.map +1 -1
- package/dist/ir/integer-loops.d.ts +3 -3
- package/dist/ir/integer-loops.js +28 -10
- package/dist/ir/integer-loops.js.map +1 -1
- package/dist/ir/integer-loops.test.js +10 -0
- package/dist/ir/integer-loops.test.js.map +1 -1
- package/dist/ir/integer-ranges.d.ts +5 -0
- package/dist/ir/integer-ranges.js +125 -12
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +30 -0
- package/dist/ir/integer-ranges.test.js.map +1 -1
- package/dist/ir/ir.d.ts +83 -10
- package/dist/ir/ir.js +77 -6
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/ir.test.js +23 -2
- package/dist/ir/ir.test.js.map +1 -1
- package/dist/ir/js-ic.d.ts +4 -0
- package/dist/ir/js-ic.js +17 -1
- package/dist/ir/js-ic.js.map +1 -1
- package/dist/ir/js-ic.test.js +46 -0
- package/dist/ir/js-ic.test.js.map +1 -1
- package/dist/ir/node-index.d.ts +57 -0
- package/dist/ir/node-index.js +215 -0
- package/dist/ir/node-index.js.map +1 -0
- package/dist/ir/paired-while-loops.d.ts +25 -0
- package/dist/ir/paired-while-loops.js +335 -0
- package/dist/ir/paired-while-loops.js.map +1 -0
- package/dist/ir/paired-while-loops.test.d.ts +1 -0
- package/dist/ir/paired-while-loops.test.js +163 -0
- package/dist/ir/paired-while-loops.test.js.map +1 -0
- package/dist/ir/parameter-versions.d.ts +25 -0
- package/dist/ir/parameter-versions.js +300 -0
- package/dist/ir/parameter-versions.js.map +1 -0
- package/dist/ir/runtime-features.d.ts +34 -13
- package/dist/ir/runtime-features.js +177 -39
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/serialize.d.ts +12 -2
- package/dist/ir/serialize.js +16 -3
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/serialize.test.js +17 -0
- package/dist/ir/serialize.test.js.map +1 -1
- package/dist/ir/traverse.js +18 -6
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/validate.js +167 -40
- package/dist/ir/validate.js.map +1 -1
- package/dist/library/ir-policy.js +3 -0
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/native/cache.d.ts +6 -1
- package/dist/native/cache.js +28 -5
- package/dist/native/cache.js.map +1 -1
- package/dist/native/cache.test.js +16 -2
- package/dist/native/cache.test.js.map +1 -1
- package/dist/native/cli.js +21 -1
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.js +8 -6
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/executable-cache.d.ts +1 -1
- package/dist/native/executable-cache.js +2 -2
- package/dist/native/executable-cache.js.map +1 -1
- package/dist/native/prepare.d.ts +4 -2
- package/dist/native/prepare.js +130 -32
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/prepare.test.js +96 -20
- package/dist/native/prepare.test.js.map +1 -1
- package/dist/native/sanitizer.test.js +2 -0
- package/dist/native/sanitizer.test.js.map +1 -1
- package/dist/native/text-file.d.ts +13 -3
- package/dist/native/text-file.js +63 -9
- package/dist/native/text-file.js.map +1 -1
- package/dist/native/text-file.test.d.ts +1 -0
- package/dist/native/text-file.test.js +49 -0
- package/dist/native/text-file.test.js.map +1 -0
- package/dist/native/toolchain.js +4 -4
- package/dist/native/toolchain.js.map +1 -1
- package/dist/native/toolchain.test.js +3 -3
- package/dist/native/toolchain.test.js.map +1 -1
- package/package.json +21 -21
- package/shims/chalk/v5.ts +688 -0
- package/shims/hono-node-server/v2.ts +645 -0
- package/shims/hot-shots/client.ts +1126 -0
- package/shims/hot-shots/v8-unix-dgram.ts +8 -0
- package/shims/hot-shots/v8.ts +8 -0
- package/surface-manifest.json +27 -7
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { lowerAsyncLocalStorageOptions } from "./builtins/async-context.js";
|
|
1
2
|
import { DATE_TIME_FIELD, dateRootOf, dateSuperCall, isDatePrototypeMethod, lowerDateSuperMethodCall, } from "./builtins/date-classes.js";
|
|
3
|
+
import { predeclareForwardClass } from "./lower-stmts.js";
|
|
2
4
|
import { lowerDateStaticCall } from "./builtins/dates.js";
|
|
3
5
|
import { keyedHelperName } from "./stable-names.js";
|
|
4
6
|
import { lowerValueReturningConstructorNew } from "./js-dynamic-objects.js";
|
|
@@ -24,7 +26,7 @@ import { lowerZlibStreamNew, zlibClassName, zlibStreamModeOf } from "./builtins/
|
|
|
24
26
|
import { everyStmtList } from "../../ir/traverse.js";
|
|
25
27
|
import { builtinClassAliasOf, builtinClassRefOf, } from "./builtins/class-values.js";
|
|
26
28
|
import { inlineNamespaceRequireOf, lowerWithInlineRequireInit } from "./cjs-inline-require.js";
|
|
27
|
-
import { BOOL, canDynCheckTo, DATE_T, DYN, F64,
|
|
29
|
+
import { BOOL, canDynCheckTo, DATE_T, DYN, F64, RUNTIME_EMITTER_CLASS, RUNTIME_ERROR_CLASSES, RUNTIME_STREAM_CLASSES, STRING, classValueConstructor, UNDEFINED_T, VOID, arrayOf, isSupportedMapKey, isSupportedMapValue, isSupportedSetElem, isUnitType, typeEquals, } from "../../ir/ir.js";
|
|
28
30
|
import { genericCallInstance, implicitAnyParamSymbolsOf, implicitCallInstance, implicitMonoFile, genericLocalClassResult, } from "./generic-functions.js";
|
|
29
31
|
import { extendInstantiationPath, MAX_INSTANTIATION_RECURSION, } from "./instantiation-path.js";
|
|
30
32
|
import { appendImplicitUndefinedReturn, hasExplicitJsDocReturn } from "./function-returns.js";
|
|
@@ -40,13 +42,12 @@ import { isCjsRequireGlobal } from "./lower-node-module.js";
|
|
|
40
42
|
import { lowerArrayConstructor } from "./containers/array-construction.js";
|
|
41
43
|
import { lowerMapSeedNew, lowerSetSeedNew } from "./containers/collection-methods.js";
|
|
42
44
|
import { lowerObjectConstructor } from "./containers/indexed-objects.js";
|
|
43
|
-
import { knownBufEncoding,
|
|
44
|
-
import { isSafeToRepeat } from "./expressions/evaluation-safety.js";
|
|
45
|
+
import { knownBufEncoding, lowerBufferConstruct } from "./containers/bytes.js";
|
|
45
46
|
import { lowerSearchParamsNew } from "./builtins/url.js";
|
|
46
47
|
import { lowerTextCodecNew } from "./builtins/text-codecs.js";
|
|
47
48
|
import { lowerBroadcastChannelNew, lowerMessageChannelNew, lowerWorkerNew, } from "./builtins/workers.js";
|
|
48
49
|
import { unsupportedPackageValueDiag, unsupportedDiag, } from "../../diagnostics/diagnostic.js";
|
|
49
|
-
import { STREAM_API_MEMBERS, STREAM_PROP_MEMBERS, STREAM_COMPLETION_CALLBACK_INDEX, UNDERSCORE_METHODS, lowerStreamNew, lowerStreamSuperCall, streamCtorShape, } from "./lower-stream.js";
|
|
50
|
+
import { STREAM_API_MEMBERS, STREAM_PROP_MEMBERS, STREAM_COMPLETION_CALLBACK_INDEX, UNDERSCORE_METHODS, streamExtraCallbacks, lowerStreamNew, lowerStreamSuperCall, streamCtorShape, } from "./lower-stream.js";
|
|
50
51
|
import { builtinEventTargetBaseOf, eventTargetApiMembers, eventTargetApiMethod, eventTargetRootOf, eventTargetSuperCall, lowerEventTargetMethodCall, } from "./lower-event-target.js";
|
|
51
52
|
import { emitOverrideShapeReason, emitSpecSuperForward, emitterRooted, lowerEmitterSuperCall, } from "./lower-event-emitter.js";
|
|
52
53
|
import { declSymbolOf } from "./lower-modules.js";
|
|
@@ -58,7 +59,7 @@ import { hasLexicalPrivateReference, hasStaticThis, rejectStaticThis } from "./s
|
|
|
58
59
|
import { lowerUrlNew } from "./lower-url.js";
|
|
59
60
|
import { isNativeProxyInitializer, lowerNativeProxy } from "./expressions/native-proxy.js";
|
|
60
61
|
import { classStaticDataFor } from "./class-static-data.js";
|
|
61
|
-
import { construction, constructionPrefix } from "./js-class-fields.js";
|
|
62
|
+
import { accessorInterceptsBase, accessorNames, construction, constructionPrefix, } from "./js-class-fields.js";
|
|
62
63
|
import { lowerObjectFactoryNew } from "./object-factory-new.js";
|
|
63
64
|
import { tryLowerExpression } from "./expressions/try-lower-expression.js";
|
|
64
65
|
import { lowerInstanceConstructorNew } from "./class-instance-constructor.js";
|
|
@@ -67,6 +68,7 @@ import { constructionEscape } from "./construction-escapes.js";
|
|
|
67
68
|
import { checkedClassConstruction, checkedClassConstructionPacked } from "./class-construction.js";
|
|
68
69
|
import { initializeRuntimeStatics, hasRuntimeStatics } from "./class-runtime-statics.js";
|
|
69
70
|
import { reflectedClassStaticMethodValue } from "./class-method-values.js";
|
|
71
|
+
import { identifierReadSymbol } from "./surfaces.js";
|
|
70
72
|
export function returnsOnlyThis(member) {
|
|
71
73
|
const body = member.body;
|
|
72
74
|
const last = body?.statements?.nodes.at(-1);
|
|
@@ -122,7 +124,7 @@ export function returnsOnlyThisValue(member) {
|
|
|
122
124
|
ts.forEachChild(body, visit);
|
|
123
125
|
return valid;
|
|
124
126
|
}
|
|
125
|
-
function functionLocalClass(decl) {
|
|
127
|
+
export function functionLocalClass(decl) {
|
|
126
128
|
for (let parent = decl.parent; parent && !ts.isSourceFile(parent); parent = parent.parent) {
|
|
127
129
|
if (ts.isFunctionLike(parent))
|
|
128
130
|
return true;
|
|
@@ -889,7 +891,7 @@ function undefArmedFieldType(lowerer, p) {
|
|
|
889
891
|
const byKey = new Map();
|
|
890
892
|
const arms = mapped.kind === "union" ? (lowerer.unions.get(mapped.unionId)?.arms ?? []) : [mapped];
|
|
891
893
|
for (const a of arms) {
|
|
892
|
-
if (a.kind === "map" || a.kind === "regex" || a.kind === "
|
|
894
|
+
if (a.kind === "map" || a.kind === "regex" || a.kind === "generator") {
|
|
893
895
|
return null;
|
|
894
896
|
}
|
|
895
897
|
byKey.set(typeKey(a), a);
|
|
@@ -1693,6 +1695,7 @@ mixin) {
|
|
|
1693
1695
|
// receiver-sensitive getters and setters inherited by subclasses.
|
|
1694
1696
|
const checkedStatics = isJsSourceFile(ts.getSourceFileOfNode(decl)) &&
|
|
1695
1697
|
((base && hasRuntimeStatics(base)) ||
|
|
1698
|
+
definedThroughReflection(lowerer, decl) ||
|
|
1696
1699
|
decl.members.nodes.some((member) => ts.isAccessor(member) &&
|
|
1697
1700
|
!ts.isPrivateIdentifier(member.name) &&
|
|
1698
1701
|
member.modifiers?.nodes.some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword))) &&
|
|
@@ -2007,8 +2010,8 @@ mixin) {
|
|
|
2007
2010
|
// state, so an override or shadowing field would split-brain.
|
|
2008
2011
|
// Underscore methods are the SUPPORTED override form — but only
|
|
2009
2012
|
// the ones the class's own base consumes (a `_read` on a
|
|
2010
|
-
// Transform, or `_writev
|
|
2011
|
-
//
|
|
2013
|
+
// Transform, or `_writev` on a Readable, would be consumed by Node
|
|
2014
|
+
// machinery that has no lowering here).
|
|
2012
2015
|
if (memberName && ts.isIdentifier(memberName)) {
|
|
2013
2016
|
const streamBase = (() => {
|
|
2014
2017
|
for (let c = base; c; c = c.base)
|
|
@@ -2021,8 +2024,8 @@ mixin) {
|
|
|
2021
2024
|
if (STREAM_API_MEMBERS.has(name) || STREAM_PROP_MEMBERS.has(name)) {
|
|
2022
2025
|
lowerer.unsupported("SC1090", memberName, `overriding the stream member '${name}' (the runtime owns the stream surface)`);
|
|
2023
2026
|
}
|
|
2024
|
-
if (name === "_writev"
|
|
2025
|
-
lowerer.unsupported("SC1090", memberName, `declaring '
|
|
2027
|
+
if (name === "_writev" && !streamExtraCallbacks(streamBase.def.name).includes("writev")) {
|
|
2028
|
+
lowerer.unsupported("SC1090", memberName, `declaring '_writev' on a ${streamBase.def.name.slice(1)} subclass (a Readable has no writable side)`);
|
|
2026
2029
|
}
|
|
2027
2030
|
const accepted = streamCtorShape(streamBase.def.name).accepted;
|
|
2028
2031
|
for (const [option, methodName] of UNDERSCORE_METHODS) {
|
|
@@ -3039,7 +3042,6 @@ mixin) {
|
|
|
3039
3042
|
declared.kind !== "union" &&
|
|
3040
3043
|
declared.kind !== "dyn" &&
|
|
3041
3044
|
declared.kind !== "map" &&
|
|
3042
|
-
declared.kind !== "date" &&
|
|
3043
3045
|
declared.kind !== "generator" &&
|
|
3044
3046
|
declared.kind !== "void" &&
|
|
3045
3047
|
declared.kind !== "caught";
|
|
@@ -3167,7 +3169,7 @@ mixin) {
|
|
|
3167
3169
|
}
|
|
3168
3170
|
// A subclass field created before anything can observe the instance
|
|
3169
3171
|
// keeps its type: super() cannot run code that reads it earlier.
|
|
3170
|
-
const baseConstruction = base && !
|
|
3172
|
+
const baseConstruction = base && !accessorInterceptsBase(accessorNames(methods.keys()), base)
|
|
3171
3173
|
? construction(base)
|
|
3172
3174
|
: null;
|
|
3173
3175
|
const sealedPrefix = baseConstruction
|
|
@@ -3195,7 +3197,7 @@ mixin) {
|
|
|
3195
3197
|
// An own JS callable shadows its prototype declaration.
|
|
3196
3198
|
// Keep the method in the prototype and store the assigned
|
|
3197
3199
|
// value in the instance property bag.
|
|
3198
|
-
lowerer.
|
|
3200
|
+
lowerer.noteMethodAccess(name, assign);
|
|
3199
3201
|
continue;
|
|
3200
3202
|
}
|
|
3201
3203
|
const sym = lowerer.checker.getSymbolAtLocation(assign);
|
|
@@ -3272,7 +3274,7 @@ mixin) {
|
|
|
3272
3274
|
if (!key && (fields.has(fieldName) || hasAccessor(fieldName)))
|
|
3273
3275
|
continue;
|
|
3274
3276
|
if (!key && (methods.has(fieldName) || lowerer.findMethodOn(base, fieldName))) {
|
|
3275
|
-
lowerer.
|
|
3277
|
+
lowerer.noteMethodAccess(fieldName, lhs);
|
|
3276
3278
|
continue;
|
|
3277
3279
|
}
|
|
3278
3280
|
// A key already declared (own or inherited) makes later
|
|
@@ -4429,7 +4431,13 @@ export function classValueRef(lowerer, info, blame) {
|
|
|
4429
4431
|
const display = info.def.name.replace(/^%|^%m\d+\./, "");
|
|
4430
4432
|
fenceDecorationThrows(lowerer, info, blame);
|
|
4431
4433
|
if (info.localClass && ts.isIdentifier(blame)) {
|
|
4432
|
-
|
|
4434
|
+
let stored = lowerer.resolveLocal(blame);
|
|
4435
|
+
// A reference from a function hoisted above the class statement.
|
|
4436
|
+
if (!stored) {
|
|
4437
|
+
const symbol = lowerer.resolveValueSymbol(blame);
|
|
4438
|
+
if (symbol && predeclareForwardClass(lowerer, symbol))
|
|
4439
|
+
stored = lowerer.resolveLocal(blame);
|
|
4440
|
+
}
|
|
4433
4441
|
if (stored)
|
|
4434
4442
|
return lowerer.coerceToExpected({ kind: "varRef", localId: stored.id, type: stored.type, loc: locOf(blame) }, { kind: "classval", className: info.def.name });
|
|
4435
4443
|
}
|
|
@@ -4917,6 +4925,31 @@ export function lowerClassExpressionInfo(lowerer, expr) {
|
|
|
4917
4925
|
}
|
|
4918
4926
|
return info;
|
|
4919
4927
|
}
|
|
4928
|
+
/** True when a named class expression's body refers to the class value by
|
|
4929
|
+
* its own name (`class Box { static of() { return new Box(); } }`, a
|
|
4930
|
+
* shorthand property `{ Box }` included); type annotations naming it
|
|
4931
|
+
* (`again(): Box`) do not count. */
|
|
4932
|
+
function classExpressionNamesItself(lowerer, expr) {
|
|
4933
|
+
const name = expr.name;
|
|
4934
|
+
if (!name)
|
|
4935
|
+
return false;
|
|
4936
|
+
const symbol = lowerer.checker.getSymbolAtLocation(name);
|
|
4937
|
+
if (!symbol)
|
|
4938
|
+
return false;
|
|
4939
|
+
let found = false;
|
|
4940
|
+
for (const member of expr.members.nodes) {
|
|
4941
|
+
ts.walkPreorder(member, (n) => {
|
|
4942
|
+
if (found || ts.isTypeNode(n))
|
|
4943
|
+
return "skip";
|
|
4944
|
+
if (ts.isIdentifier(n) && n.text === name.text && identifierReadSymbol(lowerer, n) === symbol)
|
|
4945
|
+
found = true;
|
|
4946
|
+
return undefined;
|
|
4947
|
+
});
|
|
4948
|
+
if (found)
|
|
4949
|
+
return true;
|
|
4950
|
+
}
|
|
4951
|
+
return false;
|
|
4952
|
+
}
|
|
4920
4953
|
/** `class {…}` in expression position: a class definition bound to no
|
|
4921
4954
|
* statement — once the static side is a value, the expression IS the
|
|
4922
4955
|
* definition plus a classRef over it. A DECORATED class expression
|
|
@@ -4924,8 +4957,12 @@ export function lowerClassExpressionInfo(lowerer, expr) {
|
|
|
4924
4957
|
* mints a class at all: evaluating the expression IS the
|
|
4925
4958
|
* ReferenceError, so it lowers to exactly that read — every evaluation
|
|
4926
4959
|
* throws identically, which is why the once-evaluated restriction and
|
|
4927
|
-
* the member fences don't apply.
|
|
4928
|
-
|
|
4960
|
+
* the member fences don't apply.
|
|
4961
|
+
*
|
|
4962
|
+
* `binding` is the local of a function-local class declaration's name,
|
|
4963
|
+
* declared without a value; the class value assigns it before the class's
|
|
4964
|
+
* static members are defined (see initializeRuntimeStatics). */
|
|
4965
|
+
export function lowerClassExpression(lowerer, expr, binding) {
|
|
4929
4966
|
if (decoratorNodesOf(expr).length > 0 ||
|
|
4930
4967
|
expr.members.nodes.some((m) => decoratorNodesOf(m).length > 0)) {
|
|
4931
4968
|
if (!isJsSourceFile(ts.getSourceFileOfNode(expr)) && expr.typeParameters === undefined) {
|
|
@@ -4939,6 +4976,28 @@ export function lowerClassExpression(lowerer, expr) {
|
|
|
4939
4976
|
}
|
|
4940
4977
|
}
|
|
4941
4978
|
const info = lowerClassExpressionInfo(lowerer, expr);
|
|
4979
|
+
// A function-local class expression's own name is a binding of its body:
|
|
4980
|
+
// declared before the members lower, so their references to the name
|
|
4981
|
+
// resolve to it. The class value captures it before it is assigned, as
|
|
4982
|
+
// it captures a class declaration's binding.
|
|
4983
|
+
if (!binding &&
|
|
4984
|
+
info.localClass &&
|
|
4985
|
+
ts.isClassExpression(expr) &&
|
|
4986
|
+
expr.name &&
|
|
4987
|
+
classExpressionNamesItself(lowerer, expr)) {
|
|
4988
|
+
const own = lowerer.declareLocal(expr.name, expr.name.text, { kind: "classval", className: info.def.name }, true);
|
|
4989
|
+
const value = lowerClassValue(lowerer, expr, info, own);
|
|
4990
|
+
return {
|
|
4991
|
+
kind: "seqExpr",
|
|
4992
|
+
stmts: [{ kind: "varDecl", localId: own.id, init: null, loc: value.loc }],
|
|
4993
|
+
result: value,
|
|
4994
|
+
type: value.type,
|
|
4995
|
+
loc: value.loc,
|
|
4996
|
+
};
|
|
4997
|
+
}
|
|
4998
|
+
return lowerClassValue(lowerer, expr, info, binding);
|
|
4999
|
+
}
|
|
5000
|
+
function lowerClassValue(lowerer, expr, info, binding) {
|
|
4942
5001
|
if (!info.localClass &&
|
|
4943
5002
|
!info.expressionInitializationEmitted &&
|
|
4944
5003
|
(info.callableBase ||
|
|
@@ -4985,7 +5044,7 @@ export function lowerClassExpression(lowerer, expr) {
|
|
|
4985
5044
|
const clsRef = { kind: "varRef", localId: clsLocal.id, type: value.type, loc };
|
|
4986
5045
|
const boxed = { kind: "dynFrom", value: clsRef, type: DYN, loc };
|
|
4987
5046
|
info.localPrototypeData = true;
|
|
4988
|
-
|
|
5047
|
+
const built = {
|
|
4989
5048
|
kind: "seqExpr",
|
|
4990
5049
|
stmts: [
|
|
4991
5050
|
{ kind: "varDecl", localId: baseLocal.id, init: base, loc },
|
|
@@ -5018,7 +5077,8 @@ export function lowerClassExpression(lowerer, expr) {
|
|
|
5018
5077
|
result: clsRef,
|
|
5019
5078
|
type: value.type,
|
|
5020
5079
|
loc,
|
|
5021
|
-
}
|
|
5080
|
+
};
|
|
5081
|
+
return initializeRuntimeStatics(lowerer, info, built, binding);
|
|
5022
5082
|
}
|
|
5023
5083
|
if (info.localClass?.baseExpression && info.base && value.kind === "classRef") {
|
|
5024
5084
|
const loc = locOf(expr);
|
|
@@ -5033,7 +5093,7 @@ export function lowerClassExpression(lowerer, expr) {
|
|
|
5033
5093
|
const clsRef = { kind: "varRef", localId: clsLocal.id, type: value.type, loc };
|
|
5034
5094
|
const basePrototype = classPrototypeData(lowerer, info.base, loc, baseRef);
|
|
5035
5095
|
info.localPrototypeData = true;
|
|
5036
|
-
|
|
5096
|
+
const built = {
|
|
5037
5097
|
kind: "seqExpr",
|
|
5038
5098
|
stmts: [
|
|
5039
5099
|
{ kind: "varDecl", localId: baseLocal.id, init: base, loc },
|
|
@@ -5072,11 +5132,12 @@ export function lowerClassExpression(lowerer, expr) {
|
|
|
5072
5132
|
result: clsRef,
|
|
5073
5133
|
type: value.type,
|
|
5074
5134
|
loc,
|
|
5075
|
-
}
|
|
5135
|
+
};
|
|
5136
|
+
return initializeRuntimeStatics(lowerer, info, built, binding);
|
|
5076
5137
|
}
|
|
5077
5138
|
if (!info.localClass)
|
|
5078
5139
|
return value;
|
|
5079
|
-
const classValue = initializeRuntimeStatics(lowerer, info, value.kind === "classRef" ? { ...value, captures: info.localClass.captureSources } : value);
|
|
5140
|
+
const classValue = initializeRuntimeStatics(lowerer, info, value.kind === "classRef" ? { ...value, captures: info.localClass.captureSources } : value, binding);
|
|
5080
5141
|
// The base resolves statically here, but Node still evaluates the
|
|
5081
5142
|
// heritage expression each time the class definition runs, first.
|
|
5082
5143
|
const heritage = heritageWithEffects(expr);
|
|
@@ -5418,7 +5479,7 @@ function staticCallOn(lowerer, call, access, info, throughValue) {
|
|
|
5418
5479
|
// through-a-VALUE shadowing fence as plain statics.
|
|
5419
5480
|
const gfound = findGenericStaticOn(lowerer, info, access.name.text);
|
|
5420
5481
|
if (!gfound)
|
|
5421
|
-
return
|
|
5482
|
+
return classConstructorCall(lowerer, call, access, info);
|
|
5422
5483
|
if (throughValue && staticShadowBelow(info, access.name.text)) {
|
|
5423
5484
|
lowerer.unsupported("SC1090", call, `calling the static member '${access.name.text}' through a class value (a subclass of '${info.def.name.replace(/^%|^%m\d+\./, "")}' redeclares it, so the runtime class decides which declaration answers)`);
|
|
5424
5485
|
}
|
|
@@ -5487,6 +5548,74 @@ function staticCallOn(lowerer, call, access, info, throughValue) {
|
|
|
5487
5548
|
const args = lowerer.completeArgs(call.arguments.nodes, found.method.params, loc, call);
|
|
5488
5549
|
return { kind: "call", callee: fnName, args, type: found.method.ret, loc };
|
|
5489
5550
|
}
|
|
5551
|
+
/** `C.call(thisArg, ...)` / `C.apply(thisArg, args)` on a program class that
|
|
5552
|
+
* declares no such static: Function.prototype.call/apply invoke the class
|
|
5553
|
+
* constructor without `new`, which throws Node's TypeError "Class
|
|
5554
|
+
* constructor C cannot be invoked without 'new'" after the arguments are
|
|
5555
|
+
* evaluated (and, for apply, after the argument list is read). The boxed
|
|
5556
|
+
* class value's call path throws exactly that. Neither expando statics nor
|
|
5557
|
+
* writes through untyped values can give a class an own `call` or `apply`.
|
|
5558
|
+
* A receiver that may hold a subclass at run time (a class value, `this` in
|
|
5559
|
+
* a static method) needs every subclass to lack such a static too. The
|
|
5560
|
+
* receiver must be one the caller does not evaluate again (a name, `this`,
|
|
5561
|
+
* or a namespace member). Null otherwise. */
|
|
5562
|
+
function classConstructorCall(lowerer, call, access, info) {
|
|
5563
|
+
const name = access.name.text;
|
|
5564
|
+
const receiver = access.expression;
|
|
5565
|
+
if ((name !== "call" && name !== "apply") ||
|
|
5566
|
+
!info.decl ||
|
|
5567
|
+
info.def.runtime ||
|
|
5568
|
+
info.builtinError ||
|
|
5569
|
+
info.builtinEmitter ||
|
|
5570
|
+
info.builtinStream ||
|
|
5571
|
+
info.builtinEventTarget ||
|
|
5572
|
+
info.runtimeStatics?.length ||
|
|
5573
|
+
declaresStaticAbove(info, name) ||
|
|
5574
|
+
(exactClassOfReceiver(lowerer, receiver) !== info &&
|
|
5575
|
+
info.subclasses.some((subclass) => declaresStaticBelow(subclass, name))) ||
|
|
5576
|
+
call.arguments.nodes.some(ts.isSpreadElement) ||
|
|
5577
|
+
!(ts.isIdentifier(receiver) ||
|
|
5578
|
+
receiver.kind === ts.SyntaxKind.ThisKeyword ||
|
|
5579
|
+
(ts.isPropertyAccessExpression(receiver) && nsMemberIdentOf(lowerer, receiver) !== null)))
|
|
5580
|
+
return null;
|
|
5581
|
+
return {
|
|
5582
|
+
kind: "dynInvoke",
|
|
5583
|
+
recv: lowerer.lowerExprExpecting(receiver, DYN),
|
|
5584
|
+
method: name,
|
|
5585
|
+
calleeName: ts.getTextOfNode(access),
|
|
5586
|
+
args: call.arguments.nodes.map((argument) => lowerer.lowerExprExpecting(argument, DYN)),
|
|
5587
|
+
type: DYN,
|
|
5588
|
+
loc: locOf(call),
|
|
5589
|
+
};
|
|
5590
|
+
}
|
|
5591
|
+
/** Whether `info`'s declaration has a static member that may be named `name`
|
|
5592
|
+
* (a method, field or accessor of that name, or a computed name), or `info`
|
|
5593
|
+
* has no declaration to tell. */
|
|
5594
|
+
function declaresStatic(info, name) {
|
|
5595
|
+
if (!info.decl)
|
|
5596
|
+
return true;
|
|
5597
|
+
return info.decl.members.nodes.some((member) => member.name !== undefined &&
|
|
5598
|
+
ts.canHaveModifiers(member) &&
|
|
5599
|
+
ts.getModifiers(member)?.some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword) ===
|
|
5600
|
+
true &&
|
|
5601
|
+
(ts.isComputedPropertyName(member.name) ||
|
|
5602
|
+
((ts.isIdentifier(member.name) || ts.isStringLiteral(member.name)) &&
|
|
5603
|
+
member.name.text === name)));
|
|
5604
|
+
}
|
|
5605
|
+
/** declaresStatic over `info` and its bases, which it inherits statics from. */
|
|
5606
|
+
function declaresStaticAbove(info, name) {
|
|
5607
|
+
for (let c = info; c; c = c.base)
|
|
5608
|
+
if (declaresStatic(c, name))
|
|
5609
|
+
return true;
|
|
5610
|
+
return false;
|
|
5611
|
+
}
|
|
5612
|
+
/** declaresStatic over `info` and its subclasses, or runtime statics, which a
|
|
5613
|
+
* function-local JavaScript class defines at run time. */
|
|
5614
|
+
function declaresStaticBelow(info, name) {
|
|
5615
|
+
return (declaresStatic(info, name) ||
|
|
5616
|
+
!!info.runtimeStatics?.length ||
|
|
5617
|
+
info.subclasses.some((subclass) => declaresStaticBelow(subclass, name)));
|
|
5618
|
+
}
|
|
5490
5619
|
/** `C.m(...)` where `m` is a static method that a function-local
|
|
5491
5620
|
* JavaScript class defines at runtime (a factory's `class extends base`),
|
|
5492
5621
|
* inherited by `C` through its statically known base chain. When the body
|
|
@@ -5874,11 +6003,94 @@ export function inHierarchy(lowerer, info) {
|
|
|
5874
6003
|
* dynamically. Abstract re-declarations don't count (they carry no
|
|
5875
6004
|
* implementation; the concrete ones below them do, via the recursion). */
|
|
5876
6005
|
export function overrideBelow(lowerer, info, name) {
|
|
6006
|
+
if (info.decl !== null && localOverrideBelow(lowerer, info.decl, name))
|
|
6007
|
+
return true;
|
|
5877
6008
|
return info.subclasses.some((s) => {
|
|
5878
6009
|
const m = s.methods.get(name);
|
|
5879
6010
|
return (m !== undefined && m.abstract !== true) || lowerer.overrideBelow(s, name);
|
|
5880
6011
|
});
|
|
5881
6012
|
}
|
|
6013
|
+
/** The class node an `extends` clause names: a class declaration, or the
|
|
6014
|
+
* class expression a variable is initialized with. */
|
|
6015
|
+
function extendedClassNode(lowerer, decl) {
|
|
6016
|
+
const heritage = decl.heritageClauses?.nodes.find((clause) => clause.token === ts.SyntaxKind.ExtendsKeyword)?.types?.nodes[0]?.expression;
|
|
6017
|
+
if (!heritage || !ts.isIdentifier(heritage))
|
|
6018
|
+
return null;
|
|
6019
|
+
let symbol = lowerer.checker.getSymbolAtLocation(heritage);
|
|
6020
|
+
if (symbol && symbol.flags & ts.SymbolFlags.Alias)
|
|
6021
|
+
symbol = lowerer.checker.getAliasedSymbol(symbol);
|
|
6022
|
+
const target = symbol?.valueDeclaration;
|
|
6023
|
+
if (!target)
|
|
6024
|
+
return null;
|
|
6025
|
+
if (ts.isClassDeclaration(target) || ts.isClassExpression(target))
|
|
6026
|
+
return target;
|
|
6027
|
+
if (ts.isVariableDeclaration(target) && target.initializer) {
|
|
6028
|
+
let init = target.initializer;
|
|
6029
|
+
while (ts.isParenthesizedExpression(init))
|
|
6030
|
+
init = init.expression;
|
|
6031
|
+
if (ts.isClassExpression(init))
|
|
6032
|
+
return init;
|
|
6033
|
+
}
|
|
6034
|
+
return null;
|
|
6035
|
+
}
|
|
6036
|
+
/** The function-local classes that extend the class node `base`. Function
|
|
6037
|
+
* bodies lower on demand, after code that may already call methods of a
|
|
6038
|
+
* class their local classes extend, so such a subclass is not yet in its
|
|
6039
|
+
* base's `subclasses` when those calls lower. */
|
|
6040
|
+
function localSubclassesOf(lowerer, base) {
|
|
6041
|
+
let index = lowerer.localSubclassIndex;
|
|
6042
|
+
if (index === null) {
|
|
6043
|
+
index = new Map();
|
|
6044
|
+
const files = lowerer.moduleOrder.length > 0 ? lowerer.moduleOrder : [lowerer.entry];
|
|
6045
|
+
for (const sf of files) {
|
|
6046
|
+
if (!sf.text.includes("extends"))
|
|
6047
|
+
continue;
|
|
6048
|
+
ts.walkPreorder(sf, (node) => {
|
|
6049
|
+
if ((ts.isClassDeclaration(node) || ts.isClassExpression(node)) &&
|
|
6050
|
+
node.heritageClauses !== undefined &&
|
|
6051
|
+
functionLocalClass(node)) {
|
|
6052
|
+
const extended = extendedClassNode(lowerer, node);
|
|
6053
|
+
if (extended) {
|
|
6054
|
+
const list = index.get(extended);
|
|
6055
|
+
if (list)
|
|
6056
|
+
list.push(node);
|
|
6057
|
+
else
|
|
6058
|
+
index.set(extended, [node]);
|
|
6059
|
+
}
|
|
6060
|
+
}
|
|
6061
|
+
return undefined;
|
|
6062
|
+
});
|
|
6063
|
+
}
|
|
6064
|
+
lowerer.localSubclassIndex = index;
|
|
6065
|
+
}
|
|
6066
|
+
return index.get(base) ?? [];
|
|
6067
|
+
}
|
|
6068
|
+
/** True when a function-local class below the class node `base` declares
|
|
6069
|
+
* a concrete instance method or accessor `name` (accessors are keyed
|
|
6070
|
+
* `get:x` and `set:x`). A call on `base`'s class then dispatches on the
|
|
6071
|
+
* receiver; devirtualization turns it back into a direct call when no such
|
|
6072
|
+
* override is reachable. */
|
|
6073
|
+
function localOverrideBelow(lowerer, base, name, visited) {
|
|
6074
|
+
const subclasses = localSubclassesOf(lowerer, base);
|
|
6075
|
+
if (subclasses.length === 0)
|
|
6076
|
+
return false;
|
|
6077
|
+
visited ??= new Set();
|
|
6078
|
+
if (visited.has(base))
|
|
6079
|
+
return false;
|
|
6080
|
+
visited.add(base);
|
|
6081
|
+
const accessor = name.startsWith("get:") ? "get" : name.startsWith("set:") ? "set" : null;
|
|
6082
|
+
const member = accessor ? name.slice(4) : name;
|
|
6083
|
+
return subclasses.some((sub) => sub.members.nodes.some((m) => (accessor === null
|
|
6084
|
+
? ts.isMethodDeclaration(m)
|
|
6085
|
+
: accessor === "get"
|
|
6086
|
+
? ts.isGetAccessorDeclaration(m)
|
|
6087
|
+
: ts.isSetAccessorDeclaration(m)) &&
|
|
6088
|
+
m.body !== undefined &&
|
|
6089
|
+
m.name !== undefined &&
|
|
6090
|
+
(ts.isIdentifier(m.name) || ts.isStringLiteral(m.name)) &&
|
|
6091
|
+
m.name.text === member &&
|
|
6092
|
+
!ts.getModifiers(m)?.some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword)) || localOverrideBelow(lowerer, sub, name, visited));
|
|
6093
|
+
}
|
|
5882
6094
|
/** The nearest GENERIC-method declaration of `name` at/above `info` —
|
|
5883
6095
|
* findMethodOn's twin over the genericMethods tables. */
|
|
5884
6096
|
export function findGenericMethodOn(lowerer, info, name) {
|
|
@@ -7571,8 +7783,10 @@ export function superCallStmt(lowerer, info, thisLocal, args, loc) {
|
|
|
7571
7783
|
// The SYNTHESIZED constructor of a ctor-less stream subclass:
|
|
7572
7784
|
// super() with default options (underscore methods still bind; a
|
|
7573
7785
|
// construction passing options requires a declared constructor —
|
|
7574
|
-
// lowerNew fences that). Zero options ⇒
|
|
7575
|
-
|
|
7786
|
+
// lowerNew fences that). Zero options ⇒ the init stmt, then the
|
|
7787
|
+
// class's _writev/_construct follow-ups.
|
|
7788
|
+
const stmts = lowerStreamSuperCall(lowerer, info, base, [], thisLocal, loc, info.decl ?? info.ctor);
|
|
7789
|
+
return stmts.length === 1 ? stmts[0] : { kind: "block", body: stmts, loc };
|
|
7576
7790
|
}
|
|
7577
7791
|
lowerer.noteSuperConstructorEdge(`%${base.def.name}.constructor`);
|
|
7578
7792
|
const call = {
|
|
@@ -8032,9 +8246,9 @@ function isCollectionOrErrorClass(ref) {
|
|
|
8032
8246
|
}
|
|
8033
8247
|
export function lowerNew(lowerer, expr) {
|
|
8034
8248
|
const loc = locOf(expr);
|
|
8035
|
-
//
|
|
8249
|
+
// The deprecated `new Buffer(...)` (containers/bytes.ts).
|
|
8036
8250
|
{
|
|
8037
|
-
const buffer =
|
|
8251
|
+
const buffer = lowerBufferConstruct(lowerer, expr);
|
|
8038
8252
|
if (buffer)
|
|
8039
8253
|
return buffer;
|
|
8040
8254
|
}
|
|
@@ -8610,8 +8824,10 @@ export function lowerNew(lowerer, expr) {
|
|
|
8610
8824
|
if (arg.type.kind === "string") {
|
|
8611
8825
|
return { kind: "libCall", fn: "date.newString", args: [arg], type: DATE_T, loc };
|
|
8612
8826
|
}
|
|
8827
|
+
// new Date(date): a new Date object with the same time value.
|
|
8613
8828
|
if (arg.type.kind === "date") {
|
|
8614
|
-
|
|
8829
|
+
const time = { kind: "libCall", fn: "date.getTime", args: [arg], type: F64, loc };
|
|
8830
|
+
return { kind: "libCall", fn: "date.newMs", args: [time], type: DATE_T, loc };
|
|
8615
8831
|
}
|
|
8616
8832
|
lowerer.noLowering(`new Date of '${lowerer.fmt(arg.type)}' values`, args[0], "pass milliseconds, a date string, or another Date value", symbol);
|
|
8617
8833
|
}
|
|
@@ -8790,7 +9006,7 @@ export function lowerNew(lowerer, expr) {
|
|
|
8790
9006
|
if (targs[1]) {
|
|
8791
9007
|
lowerer.unsupported("SC1090", expr, `Map values of type '${lowerer.checker.typeToString(targs[1])}' ` +
|
|
8792
9008
|
`(Map values must be number, string, boolean, records, class instances, functions, ` +
|
|
8793
|
-
`typed arrays, arrays, promises, Maps, Sets, or supported unions and checked values)`);
|
|
9009
|
+
`typed arrays, arrays, promises, Dates, Maps, Sets, or supported unions and checked values)`);
|
|
8794
9010
|
}
|
|
8795
9011
|
lowerer.badType(expr, tsType);
|
|
8796
9012
|
}
|
|
@@ -8810,6 +9026,40 @@ export function lowerNew(lowerer, expr) {
|
|
|
8810
9026
|
loc,
|
|
8811
9027
|
};
|
|
8812
9028
|
}
|
|
9029
|
+
// A FinalizationRegistry construction: register and unregister keep
|
|
9030
|
+
// their bookkeeping, and the cleanup callback never runs, which
|
|
9031
|
+
// ECMAScript allows (scr_finalization_registry_new).
|
|
9032
|
+
if (symbol !== null &&
|
|
9033
|
+
ts.symbolName(symbol) === "FinalizationRegistry" &&
|
|
9034
|
+
lowerer.isStdlibSymbol(symbol)) {
|
|
9035
|
+
const args = expr.arguments?.nodes ?? [];
|
|
9036
|
+
if (args.some(ts.isSpreadElement)) {
|
|
9037
|
+
lowerer.unsupported("SC1090", expr, "FinalizationRegistry construction with spread arguments");
|
|
9038
|
+
}
|
|
9039
|
+
const cleanup = args[0] ? lowerer.lowerExprExpecting(args[0], DYN) : dynUndefinedExpr(loc);
|
|
9040
|
+
const surplus = args.slice(1).map((arg) => lowerer.lowerExpr(arg));
|
|
9041
|
+
const created = {
|
|
9042
|
+
kind: "libCall",
|
|
9043
|
+
fn: "finalizationRegistry.new",
|
|
9044
|
+
args: [cleanup],
|
|
9045
|
+
type: DYN,
|
|
9046
|
+
loc,
|
|
9047
|
+
};
|
|
9048
|
+
if (surplus.length === 0)
|
|
9049
|
+
return created;
|
|
9050
|
+
// Surplus arguments evaluate after the cleanup argument and are ignored.
|
|
9051
|
+
const local = lowerer.declareHiddenLocal("%finalizationCleanup", DYN);
|
|
9052
|
+
return {
|
|
9053
|
+
kind: "seqExpr",
|
|
9054
|
+
stmts: [
|
|
9055
|
+
{ kind: "varDecl", localId: local.id, init: cleanup, loc },
|
|
9056
|
+
...surplus.map((value) => ({ kind: "exprStmt", expr: value, loc })),
|
|
9057
|
+
],
|
|
9058
|
+
result: { ...created, args: [varRef(local.id, DYN, loc)] },
|
|
9059
|
+
type: DYN,
|
|
9060
|
+
loc,
|
|
9061
|
+
};
|
|
9062
|
+
}
|
|
8813
9063
|
// `new Set<T>()`: construct + bulk add from supported values,
|
|
8814
9064
|
// including live collection cursors. Duplicates collapse in insertion order.
|
|
8815
9065
|
if (ts.isIdentifier(identifier) && lowerer.isStdlibGlobal(identifier, "Set")) {
|
|
@@ -8874,15 +9124,21 @@ export function lowerNew(lowerer, expr) {
|
|
|
8874
9124
|
lowerer.badType(expr, tsType);
|
|
8875
9125
|
}
|
|
8876
9126
|
// `new AsyncLocalStorage()` (node:async_hooks): a fresh store id —
|
|
8877
|
-
// an f64 handle (type-mapper.ts), the Channel story.
|
|
8878
|
-
// ({ defaultValue, name })
|
|
9127
|
+
// an f64 handle (type-mapper.ts), the Channel story. The options form
|
|
9128
|
+
// ({ defaultValue, name }) passes the options object as a dyn value.
|
|
8879
9129
|
if (symbol !== null &&
|
|
8880
9130
|
ts.symbolName(symbol) === "AsyncLocalStorage" &&
|
|
8881
9131
|
lowerer.isStdlibSymbol(symbol)) {
|
|
8882
|
-
|
|
8883
|
-
|
|
8884
|
-
|
|
8885
|
-
return {
|
|
9132
|
+
const options = expr.arguments?.nodes[0];
|
|
9133
|
+
if (options === undefined)
|
|
9134
|
+
return { kind: "libCall", fn: "als.new", args: [], type: F64, loc };
|
|
9135
|
+
return {
|
|
9136
|
+
kind: "libCall",
|
|
9137
|
+
fn: "als.newOptions",
|
|
9138
|
+
args: [lowerAsyncLocalStorageOptions(lowerer, options)],
|
|
9139
|
+
type: F64,
|
|
9140
|
+
loc,
|
|
9141
|
+
};
|
|
8886
9142
|
}
|
|
8887
9143
|
// `new Promise<T>((resolve) => ...)`: the ambient Promise constructor.
|
|
8888
9144
|
if (symbol !== null && ts.symbolName(symbol) === "Promise" && lowerer.isStdlibSymbol(symbol)) {
|
|
@@ -8952,45 +9208,12 @@ export function lowerNew(lowerer, expr) {
|
|
|
8952
9208
|
// families carry pointed hints: each states WHY no honest static
|
|
8953
9209
|
// lowering exists (or what to use instead).
|
|
8954
9210
|
if (lowerer.isStdlibSymbol(symbol ?? undefined)) {
|
|
8955
|
-
// The deprecated `new Buffer(string, encoding?)` ctor's string arm
|
|
8956
|
-
// with a NON-STRING first argument and a string second: Node
|
|
8957
|
-
// throws ERR_INVALID_ARG_TYPE synchronously (and DEP0005 never
|
|
8958
|
-
// fires on this throwing path, so the compiled silence matches).
|
|
8959
|
-
// Every other new Buffer form keeps the fence below — the
|
|
8960
|
-
// constructing forms would owe the deprecation warning.
|
|
8961
|
-
if (expr.expression.text === "Buffer" &&
|
|
8962
|
-
expr.arguments?.nodes.length === 2 &&
|
|
8963
|
-
!expr.arguments.nodes.some(ts.isSpreadElement) &&
|
|
8964
|
-
lowerer.mapTypeOf(lowerer.typeOf(expr.arguments.nodes[0]))?.kind !== "string" &&
|
|
8965
|
-
lowerer.mapTypeOf(lowerer.typeOf(expr.arguments.nodes[1]))?.kind === "string") {
|
|
8966
|
-
const first = lowerer.lowerExpr(expr.arguments.nodes[0]);
|
|
8967
|
-
if (first.kind === "unitLit" ||
|
|
8968
|
-
first.type.kind === "dyn" ||
|
|
8969
|
-
lowerer.dynConvertible(first.type)) {
|
|
8970
|
-
const got = first.type.kind === "dyn" ? first : { kind: "dynFrom", value: first, type: DYN, loc };
|
|
8971
|
-
// The encoding argument still evaluates in Node before the
|
|
8972
|
-
// throw only via the ctor body's later reads — it does NOT
|
|
8973
|
-
// observe it before throwing, so dropping it is exact for
|
|
8974
|
-
// effect-free operands; effectful ones keep the fence.
|
|
8975
|
-
const enc = lowerer.lowerExpr(expr.arguments.nodes[1]);
|
|
8976
|
-
if (enc.kind === "strLit" || isSafeToRepeat(enc)) {
|
|
8977
|
-
return {
|
|
8978
|
-
kind: "libCall",
|
|
8979
|
-
fn: "buffer.newStringFail",
|
|
8980
|
-
args: [got],
|
|
8981
|
-
type: bytesOf("u8"),
|
|
8982
|
-
loc,
|
|
8983
|
-
};
|
|
8984
|
-
}
|
|
8985
|
-
}
|
|
8986
|
-
}
|
|
8987
9211
|
const ctorHints = {
|
|
8988
9212
|
RegExp: "use a regex literal (/pattern/flags) — constructed regexes have no lowering",
|
|
8989
9213
|
String: "boxed wrapper objects have no lowering — use the string primitive (the box is only distinguishable via typeof/identity, which nothing here can honor)",
|
|
8990
9214
|
Number: "boxed wrapper objects have no lowering — use the number primitive",
|
|
8991
9215
|
Boolean: "boxed wrapper objects have no lowering — use the boolean primitive",
|
|
8992
9216
|
WeakRef: "deref()-after-collect exposes GC timing — genuinely dynamic; hold a strong reference instead",
|
|
8993
|
-
FinalizationRegistry: "finalization callbacks expose GC timing — genuinely dynamic; release resources explicitly instead",
|
|
8994
9217
|
SharedArrayBuffer: "no shared-memory threads exist in a compiled program — Uint8Array is the byte storage",
|
|
8995
9218
|
ArrayBuffer: "native ArrayBuffer construction supports fixed-length storage; resizable buffers remain unsupported",
|
|
8996
9219
|
Proxy: "native Proxy construction requires checked-native plain targets and handlers",
|
|
@@ -9279,4 +9502,36 @@ function genericFieldFnNodeOf(member) {
|
|
|
9279
9502
|
}
|
|
9280
9503
|
return null;
|
|
9281
9504
|
}
|
|
9505
|
+
/** Whether a JavaScript class's own binding is the target of
|
|
9506
|
+
* `Object.defineProperty`/`defineProperties` in its file
|
|
9507
|
+
* (`Object.defineProperty(Definition, "name", { value })`): its constructor
|
|
9508
|
+
* then needs a live own-property table. */
|
|
9509
|
+
function definedThroughReflection(lowerer, decl) {
|
|
9510
|
+
const name = decl.name;
|
|
9511
|
+
const sf = ts.getSourceFileOfNode(decl);
|
|
9512
|
+
if (name === undefined || !sf.text.includes("definePropert"))
|
|
9513
|
+
return false;
|
|
9514
|
+
const symbol = lowerer.checker.getSymbolAtLocation(name);
|
|
9515
|
+
if (symbol === undefined)
|
|
9516
|
+
return false;
|
|
9517
|
+
let found = false;
|
|
9518
|
+
ts.walkPreorder(sf, (node) => {
|
|
9519
|
+
if (found)
|
|
9520
|
+
return "stop";
|
|
9521
|
+
if (ts.isCallExpression(node) &&
|
|
9522
|
+
ts.isPropertyAccessExpression(node.expression) &&
|
|
9523
|
+
(node.expression.name.text === "defineProperty" ||
|
|
9524
|
+
node.expression.name.text === "defineProperties") &&
|
|
9525
|
+
lowerer.stdlibGlobalMember(node.expression, "Object") !== null) {
|
|
9526
|
+
const target = node.arguments.nodes[0];
|
|
9527
|
+
if (target !== undefined &&
|
|
9528
|
+
ts.isIdentifier(target) &&
|
|
9529
|
+
target.text === name.text &&
|
|
9530
|
+
lowerer.checker.getSymbolAtLocation(target) === symbol)
|
|
9531
|
+
found = true;
|
|
9532
|
+
}
|
|
9533
|
+
return undefined;
|
|
9534
|
+
});
|
|
9535
|
+
return found;
|
|
9536
|
+
}
|
|
9282
9537
|
//# sourceMappingURL=lower-classes.js.map
|