@scriptc/compiler 0.4.1 → 0.4.3
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 +977 -113
- package/dist/backend/cycle-analysis.d.ts +5 -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 +9 -1
- package/dist/backend/cycle-mutability.js +21 -3
- package/dist/backend/cycle-mutability.js.map +1 -1
- package/dist/backend/executable-features.js +6 -1
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/immutability.d.ts +7 -3
- package/dist/backend/immutability.js +33 -29
- package/dist/backend/immutability.js.map +1 -1
- package/dist/backend/library-pack.js +5 -0
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/llvm/alloc.d.ts +23 -4
- package/dist/backend/llvm/alloc.js +61 -8
- 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 +23 -10
- 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 +70 -7
- package/dist/backend/llvm/bytes-loop-versions.js +567 -30
- package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.test.js +389 -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 +74 -1
- package/dist/backend/llvm/classes.js +364 -54
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +384 -17
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +10 -6
- package/dist/backend/llvm/common.js +10 -6
- 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 +91 -56
- package/dist/backend/llvm/constant-callbacks.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.test.js +4 -4
- package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
- package/dist/backend/llvm/counted-loops.d.ts +11 -1
- package/dist/backend/llvm/counted-loops.js +80 -23
- package/dist/backend/llvm/counted-loops.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 +35 -16
- package/dist/backend/llvm/dense-array-loops.js +237 -12
- package/dist/backend/llvm/dense-array-loops.js.map +1 -1
- package/dist/backend/llvm/dense-array-loops.test.js +140 -15
- 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 +51 -1
- package/dist/backend/llvm/dyn.js +683 -69
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.js +33 -26
- 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 +208 -34
- package/dist/backend/llvm/emit-module.js.map +1 -1
- package/dist/backend/llvm/emit-statements.d.ts +0 -27
- package/dist/backend/llvm/emit-statements.js +577 -93
- 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 +314 -49
- package/dist/backend/llvm/emitter.js +1241 -129
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +54 -5
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +19 -0
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.d.ts +5 -2
- package/dist/backend/llvm/expr-bytes.js +144 -52
- 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.d.ts +1 -1
- package/dist/backend/llvm/expr-calls.js +62 -36
- 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 +148 -40
- 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-control.js +2 -3
- package/dist/backend/llvm/expr-control.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +71 -16
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +126 -36
- 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 +225 -64
- 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 +200 -50
- 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 +20 -1
- package/dist/backend/llvm/integer-values.js +71 -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 +90 -2
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +65 -4
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-http2.d.ts +4 -0
- package/dist/backend/llvm/lib-http2.js +24 -17
- 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 +65 -14
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +126 -3
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +97 -30
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/lib-tls.js +23 -0
- package/dist/backend/llvm/lib-tls.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +181 -64
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.test.js +28 -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 +18 -1
- package/dist/backend/llvm/publish.js +76 -25
- package/dist/backend/llvm/publish.js.map +1 -1
- package/dist/backend/llvm/publish.test.js +3 -0
- package/dist/backend/llvm/publish.test.js.map +1 -1
- package/dist/backend/llvm/receivers.js +7 -2
- 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-writes.d.ts +7 -2
- package/dist/backend/llvm/reference-writes.js +91 -72
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/regex-matchers.js +161 -14
- package/dist/backend/llvm/regex-matchers.js.map +1 -1
- package/dist/backend/llvm/regex-matchers.test.js +18 -0
- package/dist/backend/llvm/regex-matchers.test.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 +79 -21
- package/dist/backend/llvm/shapes.js +233 -42
- 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-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-lifetimes.test.js +2 -1
- package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/string-reads.d.ts +15 -0
- package/dist/backend/llvm/string-reads.js +128 -0
- package/dist/backend/llvm/string-reads.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 +88 -65
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/llvm/wasm-modules.d.ts +6 -5
- package/dist/backend/llvm/wasm-modules.js +32 -9
- package/dist/backend/llvm/wasm-modules.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/mangle.d.ts +3 -0
- package/dist/backend/mangle.js +5 -0
- package/dist/backend/mangle.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 +27 -4
- package/dist/backend/native/executable.js +31 -8
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/library.js +1 -0
- package/dist/backend/native/library.js.map +1 -1
- package/dist/backend/native/runtime-inputs.d.ts +1 -1
- package/dist/backend/native/runtime-inputs.js +1 -0
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native-codegen.d.ts +11 -6
- package/dist/backend/native-codegen.js +36 -9
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +0 -23
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +18 -4
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/optimization.d.ts +2 -2
- 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 +2 -1
- package/dist/backend/runtime-pack-core.js +2 -1
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +5 -1
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.d.ts +0 -21
- package/dist/backend/runtime-pack.js +0 -29
- package/dist/backend/runtime-pack.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +10 -69
- 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-diagnostics.js +33 -1
- package/dist/backend/target-diagnostics.js.map +1 -1
- package/dist/backend/warm-cache.js +4 -0
- package/dist/backend/warm-cache.js.map +1 -1
- package/dist/cli/command.js +26 -6
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/usage.d.ts +5 -1
- package/dist/cli/usage.js +10 -5
- 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/contracts/check.js +5 -4
- 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.d.ts +7 -2
- package/dist/coverage/report.js +30 -3
- package/dist/coverage/report.js.map +1 -1
- package/dist/coverage/verdict-cache.d.ts +1 -0
- package/dist/coverage/verdict-cache.js +4 -0
- package/dist/coverage/verdict-cache.js.map +1 -1
- package/dist/coverage/verdict-semantic.js +4 -0
- package/dist/coverage/verdict-semantic.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +4 -0
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/dynamic-tier.d.ts +40 -0
- package/dist/diagnostics/dynamic-tier.js +57 -0
- package/dist/diagnostics/dynamic-tier.js.map +1 -0
- package/dist/diagnostics/envelope.d.ts +5 -1
- package/dist/diagnostics/envelope.js +6 -2
- package/dist/diagnostics/envelope.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +25 -1
- package/dist/executable/executable-cache.js +60 -7
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +46 -3
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/executable/prepare.js +3 -1
- package/dist/executable/prepare.js.map +1 -1
- package/dist/frontend/analysis.js +1 -0
- package/dist/frontend/analysis.js.map +1 -1
- package/dist/frontend/decl-projection.d.ts +41 -0
- package/dist/frontend/decl-projection.js +854 -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/dispose-hook.d.ts +2 -0
- package/dist/frontend/dispose-hook.js +14 -0
- package/dist/frontend/dispose-hook.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/jsx-entities.d.ts +4 -0
- package/dist/frontend/jsx-entities.js +259 -0
- package/dist/frontend/jsx-entities.js.map +1 -0
- package/dist/frontend/jsx-source.d.ts +71 -0
- package/dist/frontend/jsx-source.js +781 -0
- package/dist/frontend/jsx-source.js.map +1 -0
- package/dist/frontend/jsx-source.test.d.ts +1 -0
- package/dist/frontend/jsx-source.test.js +200 -0
- package/dist/frontend/jsx-source.test.js.map +1 -0
- package/dist/frontend/literal-values.test.js +8 -9
- package/dist/frontend/literal-values.test.js.map +1 -1
- package/dist/frontend/lowering/array-indexed-mutation.js +2 -1
- package/dist/frontend/lowering/array-indexed-mutation.js.map +1 -1
- package/dist/frontend/lowering/array-values.js +103 -4
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/binding-analysis.d.ts +1 -1
- package/dist/frontend/lowering/binding-analysis.js +2 -2
- package/dist/frontend/lowering/binding-analysis.js.map +1 -1
- package/dist/frontend/lowering/builtins/arguments.d.ts +3 -0
- package/dist/frontend/lowering/builtins/arguments.js +30 -15
- package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
- package/dist/frontend/lowering/builtins/atomics.js +10 -6
- package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-async.js +2 -1
- package/dist/frontend/lowering/builtins/child-process-async.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-sync.js +2 -1
- package/dist/frontend/lowering/builtins/child-process-sync.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.d.ts +4 -2
- package/dist/frontend/lowering/builtins/crypto.js +136 -5
- package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
- package/dist/frontend/lowering/builtins/date-classes.d.ts +46 -0
- package/dist/frontend/lowering/builtins/date-classes.js +477 -0
- package/dist/frontend/lowering/builtins/date-classes.js.map +1 -0
- package/dist/frontend/lowering/builtins/dates.d.ts +11 -1
- package/dist/frontend/lowering/builtins/dates.js +55 -26
- package/dist/frontend/lowering/builtins/dates.js.map +1 -1
- package/dist/frontend/lowering/builtins/dh.d.ts +15 -0
- package/dist/frontend/lowering/builtins/dh.js +151 -0
- package/dist/frontend/lowering/builtins/dh.js.map +1 -0
- package/dist/frontend/lowering/builtins/disposable-stack.js +2 -1
- package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -1
- package/dist/frontend/lowering/builtins/ecdh.d.ts +12 -1
- package/dist/frontend/lowering/builtins/ecdh.js +7 -7
- package/dist/frontend/lowering/builtins/ecdh.js.map +1 -1
- package/dist/frontend/lowering/builtins/errors.d.ts +15 -0
- package/dist/frontend/lowering/builtins/errors.js +110 -0
- package/dist/frontend/lowering/builtins/errors.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.js +23 -17
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem.js +6 -4
- package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-paths.d.ts +15 -0
- package/dist/frontend/lowering/builtins/fs-paths.js +209 -0
- package/dist/frontend/lowering/builtins/fs-paths.js.map +1 -0
- 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/hash-stream.d.ts +16 -4
- package/dist/frontend/lowering/builtins/hash-stream.js +86 -23
- package/dist/frontend/lowering/builtins/hash-stream.js.map +1 -1
- package/dist/frontend/lowering/builtins/json.js +2 -1
- package/dist/frontend/lowering/builtins/json.js.map +1 -1
- package/dist/frontend/lowering/builtins/key-object.d.ts +2 -1
- package/dist/frontend/lowering/builtins/key-object.js +20 -7
- package/dist/frontend/lowering/builtins/key-object.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-calls.js +11 -4
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/numbers.js +18 -6
- package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
- package/dist/frontend/lowering/builtins/operating-system.js +4 -3
- package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
- package/dist/frontend/lowering/builtins/performance.js +3 -2
- package/dist/frontend/lowering/builtins/performance.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.js +3 -2
- package/dist/frontend/lowering/builtins/process.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.d.ts +6 -0
- package/dist/frontend/lowering/builtins/promises.js +91 -4
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/builtins/promisify-callback.js +2 -1
- package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +7 -2
- package/dist/frontend/lowering/builtins/readline.js +58 -9
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/strings.js +13 -5
- package/dist/frontend/lowering/builtins/strings.js.map +1 -1
- package/dist/frontend/lowering/builtins/text-codecs.js +2 -1
- package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
- package/dist/frontend/lowering/builtins/timers.js +1 -1
- package/dist/frontend/lowering/builtins/timers.js.map +1 -1
- package/dist/frontend/lowering/builtins/url.js +28 -4
- package/dist/frontend/lowering/builtins/url.js.map +1 -1
- package/dist/frontend/lowering/builtins/v8.js +2 -1
- package/dist/frontend/lowering/builtins/v8.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/builtins/webcrypto.js +39 -20
- package/dist/frontend/lowering/builtins/webcrypto.js.map +1 -1
- package/dist/frontend/lowering/call-arguments.js +2 -1
- package/dist/frontend/lowering/call-arguments.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.js +13 -6
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/caught-value-dispatch.d.ts +18 -1
- package/dist/frontend/lowering/caught-value-dispatch.js +201 -32
- package/dist/frontend/lowering/caught-value-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-assertions.js +3 -2
- package/dist/frontend/lowering/class-assertions.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 +6 -2
- package/dist/frontend/lowering/class-construction.js +25 -16
- package/dist/frontend/lowering/class-construction.js.map +1 -1
- package/dist/frontend/lowering/class-descriptors.js +1 -1
- package/dist/frontend/lowering/class-descriptors.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +73 -2
- package/dist/frontend/lowering/class-dynamic-dispatch.js +1334 -259
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js +124 -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 +35 -9
- package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
- package/dist/frontend/lowering/class-method-values.js +1 -1
- package/dist/frontend/lowering/class-method-values.js.map +1 -1
- package/dist/frontend/lowering/class-protocols.d.ts +7 -0
- package/dist/frontend/lowering/class-protocols.js +64 -4
- package/dist/frontend/lowering/class-protocols.js.map +1 -1
- package/dist/frontend/lowering/class-prototypes.d.ts +5 -0
- package/dist/frontend/lowering/class-prototypes.js +67 -5
- 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/class-to-primitive.js +25 -5
- package/dist/frontend/lowering/class-to-primitive.js.map +1 -1
- package/dist/frontend/lowering/class-unions.js +2 -1
- package/dist/frontend/lowering/class-unions.js.map +1 -1
- package/dist/frontend/lowering/coercions/function-adapters.js +6 -5
- package/dist/frontend/lowering/coercions/function-adapters.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 +99 -8
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/coercions/unions.js +8 -7
- package/dist/frontend/lowering/coercions/unions.js.map +1 -1
- package/dist/frontend/lowering/collection-ingestion.js +2 -1
- package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
- 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 +7 -0
- package/dist/frontend/lowering/containers/array-callbacks.js +352 -31
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-concat.js +12 -1
- package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.js +25 -4
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +21 -5
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/array-pipelines.js +21 -9
- package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.d.ts +1 -1
- package/dist/frontend/lowering/containers/bytes.js +131 -29
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.js +55 -2
- package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-grouping.js +3 -2
- package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +15 -9
- 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 +54 -14
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/containers/iterator-helpers.d.ts +32 -1
- package/dist/frontend/lowering/containers/iterator-helpers.js +6 -5
- package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
- package/dist/frontend/lowering/containers/string-and-regexp.js +87 -14
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/containers/string-replacement.js +45 -20
- package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
- package/dist/frontend/lowering/cycle-initialization.js +25 -4
- package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
- package/dist/frontend/lowering/deferred-module-initializers.d.ts +18 -1
- package/dist/frontend/lowering/deferred-module-initializers.js +226 -115
- package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
- package/dist/frontend/lowering/deferred-module-initializers.test.js +28 -0
- package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -1
- package/dist/frontend/lowering/dispatch-sites.d.ts +59 -0
- package/dist/frontend/lowering/dispatch-sites.js +218 -0
- package/dist/frontend/lowering/dispatch-sites.js.map +1 -0
- package/dist/frontend/lowering/dispatch-sites.test.d.ts +1 -0
- package/dist/frontend/lowering/dispatch-sites.test.js +59 -0
- package/dist/frontend/lowering/dispatch-sites.test.js.map +1 -0
- package/dist/frontend/lowering/divergences.js +9 -1
- package/dist/frontend/lowering/divergences.js.map +1 -1
- package/dist/frontend/lowering/dyn-streams.d.ts +3 -0
- package/dist/frontend/lowering/dyn-streams.js +1 -1
- package/dist/frontend/lowering/dyn-streams.js.map +1 -1
- package/dist/frontend/lowering/dynamic-tier.d.ts +25 -0
- package/dist/frontend/lowering/dynamic-tier.js +327 -0
- package/dist/frontend/lowering/dynamic-tier.js.map +1 -0
- package/dist/frontend/lowering/error-methods.js +51 -2
- package/dist/frontend/lowering/error-methods.js.map +1 -1
- package/dist/frontend/lowering/expressions/array-literals.js +62 -0
- package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/binary.js +81 -5
- package/dist/frontend/lowering/expressions/binary.js.map +1 -1
- package/dist/frontend/lowering/expressions/element-access.js +107 -14
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/identifiers.js +79 -11
- package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
- package/dist/frontend/lowering/expressions/narrowing.js +130 -6
- 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 -3
- package/dist/frontend/lowering/expressions/object-literals.js +164 -56
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.js +17 -5
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.d.ts +0 -4
- package/dist/frontend/lowering/expressions/property-access.js +211 -17
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/relational.js +267 -30
- package/dist/frontend/lowering/expressions/relational.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 +85 -12
- 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 +49 -0
- package/dist/frontend/lowering/function-returns.js.map +1 -1
- package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +6 -1
- package/dist/frontend/lowering/generator-dynamic-dispatch.js +20 -30
- package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.d.ts +42 -1
- package/dist/frontend/lowering/generic-functions.js +455 -20
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/intern-tables.js +2 -1
- package/dist/frontend/lowering/intern-tables.js.map +1 -1
- 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 +195 -9
- 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/js-dynamic-objects.js +3 -2
- package/dist/frontend/lowering/js-dynamic-objects.js.map +1 -1
- package/dist/frontend/lowering/json-require.js +2 -1
- package/dist/frontend/lowering/json-require.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.d.ts +24 -4
- package/dist/frontend/lowering/key-order-witness.js +790 -25
- package/dist/frontend/lowering/key-order-witness.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.test.js +466 -10
- package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
- package/dist/frontend/lowering/lifetime-regions.js +2 -1
- package/dist/frontend/lowering/lifetime-regions.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +6 -5
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-async-iteration.js +7 -2
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +11 -0
- package/dist/frontend/lowering/lower-calls.js +776 -126
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +29 -2
- package/dist/frontend/lowering/lower-classes.js +581 -46
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-dgram.js +6 -3
- package/dist/frontend/lowering/lower-dgram.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.d.ts +14 -0
- package/dist/frontend/lowering/lower-event-emitter.js +267 -20
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +19 -2
- package/dist/frontend/lowering/lower-exprs.js +126 -13
- 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 +387 -72
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.js +41 -31
- 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.js +28 -12
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-mixins.js +2 -1
- package/dist/frontend/lowering/lower-mixins.js.map +1 -1
- package/dist/frontend/lowering/lower-mock.js +2 -1
- package/dist/frontend/lowering/lower-mock.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +47 -5
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.test.js +2 -2
- package/dist/frontend/lowering/lower-modules.test.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.d.ts +2 -1
- package/dist/frontend/lowering/lower-namespaces.js +9 -4
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-server.d.ts +10 -0
- package/dist/frontend/lowering/lower-server.js +239 -61
- 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 +42 -10
- 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 +622 -68
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.test.js +1 -1
- package/dist/frontend/lowering/lower-stmts.test.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.d.ts +20 -2
- package/dist/frontend/lowering/lower-stream.js +2055 -318
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-timers.js +4 -3
- package/dist/frontend/lowering/lower-timers.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +197 -29
- package/dist/frontend/lowering/lowerer.js +862 -84
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/lowerer.test.js +21 -9
- package/dist/frontend/lowering/lowerer.test.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/narrowing-stability.js +5 -0
- package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
- package/dist/frontend/lowering/native-ffi.js +1 -1
- package/dist/frontend/lowering/native-ffi.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-enumeration-receiver.js +2 -1
- package/dist/frontend/lowering/object-enumeration-receiver.js.map +1 -1
- package/dist/frontend/lowering/pairs-snapshot.js +2 -1
- package/dist/frontend/lowering/pairs-snapshot.js.map +1 -1
- package/dist/frontend/lowering/private-brands.d.ts +9 -0
- package/dist/frontend/lowering/private-brands.js +66 -15
- package/dist/frontend/lowering/private-brands.js.map +1 -1
- package/dist/frontend/lowering/promise-executor-adapter.js +2 -1
- package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -1
- package/dist/frontend/lowering/require-initialization.js +2 -1
- package/dist/frontend/lowering/require-initialization.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-elements.d.ts +5 -0
- package/dist/frontend/lowering/runtime-optional-elements.js +17 -1
- package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-records.d.ts +2 -0
- package/dist/frontend/lowering/runtime-optional-records.js +18 -5
- package/dist/frontend/lowering/runtime-optional-records.js.map +1 -1
- package/dist/frontend/lowering/site-dependencies.d.ts +35 -0
- package/dist/frontend/lowering/site-dependencies.js +84 -0
- package/dist/frontend/lowering/site-dependencies.js.map +1 -0
- package/dist/frontend/lowering/site-dependencies.test.d.ts +1 -0
- package/dist/frontend/lowering/site-dependencies.test.js +53 -0
- package/dist/frontend/lowering/site-dependencies.test.js.map +1 -0
- package/dist/frontend/lowering/stable-names.d.ts +11 -0
- package/dist/frontend/lowering/stable-names.js +35 -0
- package/dist/frontend/lowering/stable-names.js.map +1 -0
- package/dist/frontend/lowering/static-typeof.d.ts +2 -2
- package/dist/frontend/lowering/static-typeof.js +42 -3
- package/dist/frontend/lowering/static-typeof.js.map +1 -1
- package/dist/frontend/lowering/strict-equality.js +2 -1
- package/dist/frontend/lowering/strict-equality.js.map +1 -1
- package/dist/frontend/lowering/structural-positions.d.ts +32 -0
- package/dist/frontend/lowering/structural-positions.js +108 -0
- package/dist/frontend/lowering/structural-positions.js.map +1 -0
- package/dist/frontend/lowering/surfaces.d.ts +3 -0
- package/dist/frontend/lowering/surfaces.js +60 -32
- 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 +66 -16
- 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-tsc-helpers.d.ts +5 -0
- package/dist/frontend/npm-static-tsc-helpers.js +106 -0
- package/dist/frontend/npm-static-tsc-helpers.js.map +1 -0
- package/dist/frontend/npm-static-tsc-helpers.test.d.ts +1 -0
- package/dist/frontend/npm-static-tsc-helpers.test.js +58 -0
- package/dist/frontend/npm-static-tsc-helpers.test.js.map +1 -0
- package/dist/frontend/npm-static-type-exports-host.d.ts +8 -0
- package/dist/frontend/npm-static-type-exports-host.js +214 -0
- package/dist/frontend/npm-static-type-exports-host.js.map +1 -0
- package/dist/frontend/npm-static-type-exports-host.test.d.ts +1 -0
- package/dist/frontend/npm-static-type-exports-host.test.js +53 -0
- package/dist/frontend/npm-static-type-exports-host.test.js.map +1 -0
- package/dist/frontend/npm-static-type-exports.d.ts +52 -0
- package/dist/frontend/npm-static-type-exports.js +261 -0
- package/dist/frontend/npm-static-type-exports.js.map +1 -0
- package/dist/frontend/npm-static-type-exports.test.d.ts +1 -0
- package/dist/frontend/npm-static-type-exports.test.js +103 -0
- package/dist/frontend/npm-static-type-exports.test.js.map +1 -0
- package/dist/frontend/npm-static-umd.d.ts +6 -0
- package/dist/frontend/npm-static-umd.js +203 -0
- package/dist/frontend/npm-static-umd.js.map +1 -0
- package/dist/frontend/npm-static-umd.test.d.ts +1 -0
- package/dist/frontend/npm-static-umd.test.js +105 -0
- package/dist/frontend/npm-static-umd.test.js.map +1 -0
- package/dist/frontend/npm-static.d.ts +8 -0
- package/dist/frontend/npm-static.js +51 -22
- 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 +18 -10
- 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.d.ts +21 -1
- package/dist/frontend/program.js +586 -74
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +44 -4
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/services.d.ts +6 -0
- package/dist/frontend/services.js +18 -0
- package/dist/frontend/services.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 +43 -7
- package/dist/frontend/ts7/ast-node.js +1176 -129
- package/dist/frontend/ts7/ast-node.js.map +1 -1
- package/dist/frontend/ts7/ast-node.test.js +84 -0
- package/dist/frontend/ts7/ast-node.test.js.map +1 -1
- package/dist/frontend/ts7/ast-wire.d.ts +29 -3
- package/dist/frontend/ts7/ast-wire.js +144 -31
- 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/ast.d.ts +23 -2
- package/dist/frontend/ts7/ast.js +143 -2
- package/dist/frontend/ts7/ast.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 +17 -1
- package/dist/frontend/ts7/checker.js +82 -1
- package/dist/frontend/ts7/checker.js.map +1 -1
- package/dist/frontend/ts7/checker.test.js +9 -6
- package/dist/frontend/ts7/checker.test.js.map +1 -1
- package/dist/frontend/ts7/enums.d.ts +3 -3
- package/dist/frontend/ts7/enums.generated.d.ts +10 -0
- package/dist/frontend/ts7/enums.generated.js +21 -0
- package/dist/frontend/ts7/enums.generated.js.map +1 -1
- package/dist/frontend/ts7/enums.js +19 -0
- package/dist/frontend/ts7/enums.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 +30 -4
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/semantic-checker.d.ts +10 -0
- package/dist/frontend/ts7/semantic-checker.js +25 -20
- package/dist/frontend/ts7/semantic-checker.js.map +1 -1
- package/dist/frontend/ts7/semantic-json.d.ts +13 -0
- package/dist/frontend/ts7/semantic-json.js +146 -0
- package/dist/frontend/ts7/semantic-json.js.map +1 -1
- package/dist/frontend/ts7/semantic-json.test.js +57 -1
- package/dist/frontend/ts7/semantic-json.test.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.d.ts +15 -0
- package/dist/frontend/ts7/semantic-model.js +67 -19
- package/dist/frontend/ts7/semantic-model.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.test.js +3 -2
- package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
- package/dist/frontend/ts7/session.d.ts +14 -1
- package/dist/frontend/ts7/session.js +23 -1
- package/dist/frontend/ts7/session.js.map +1 -1
- package/dist/frontend/tsc-codes.d.ts +1 -1
- package/dist/frontend/tsc-codes.js +7 -0
- package/dist/frontend/tsc-codes.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +51 -7
- package/dist/frontend/type-mapper.js +456 -43
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/frontend/type-mapper.test.js +1 -1
- package/dist/frontend/type-mapper.test.js.map +1 -1
- package/dist/frontend-process-args.d.ts +4 -0
- package/dist/frontend-process-args.js +52 -0
- package/dist/frontend-process-args.js.map +1 -0
- package/dist/frontend-process-args.test.d.ts +1 -0
- package/dist/frontend-process-args.test.js +47 -0
- package/dist/frontend-process-args.test.js.map +1 -0
- package/dist/frontend-process.d.ts +1 -0
- package/dist/frontend-process.js +23 -0
- package/dist/frontend-process.js.map +1 -0
- package/dist/heap-collection.d.ts +16 -0
- package/dist/heap-collection.js +42 -0
- package/dist/heap-collection.js.map +1 -0
- package/dist/heap-collection.test.d.ts +1 -0
- package/dist/heap-collection.test.js +59 -0
- package/dist/heap-collection.test.js.map +1 -0
- package/dist/heap-pressure.d.ts +2 -0
- package/dist/heap-pressure.js +12 -0
- package/dist/heap-pressure.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +435 -89
- 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 +26 -6
- package/dist/ir/array-length-stability.js.map +1 -1
- package/dist/ir/array-length-stability.test.js +49 -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 +80 -0
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +7 -1
- package/dist/ir/builtin-signatures.js +303 -21
- 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 +3 -1
- package/dist/ir/final-fields.js +15 -17
- 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 +5 -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 +36 -6
- package/dist/ir/int32-slots.js +370 -171
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/int32-slots.test.js +3 -1
- package/dist/ir/int32-slots.test.js.map +1 -1
- package/dist/ir/integer-loop-facts.d.ts +9 -4
- package/dist/ir/integer-loop-facts.js +93 -18
- package/dist/ir/integer-loop-facts.js.map +1 -1
- package/dist/ir/integer-loops.d.ts +49 -0
- package/dist/ir/integer-loops.js +202 -40
- package/dist/ir/integer-loops.js.map +1 -1
- package/dist/ir/integer-loops.test.js +211 -1
- 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 +94 -0
- package/dist/ir/integer-ranges.test.js.map +1 -1
- package/dist/ir/ir.d.ts +87 -9
- package/dist/ir/ir.js +61 -2
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/ir.test.js +21 -1
- package/dist/ir/ir.test.js.map +1 -1
- package/dist/ir/js-ic.d.ts +19 -2
- package/dist/ir/js-ic.js +95 -11
- package/dist/ir/js-ic.js.map +1 -1
- package/dist/ir/js-ic.test.js +188 -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 +60 -15
- package/dist/ir/runtime-features.js +276 -35
- 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/tiers.js +1 -0
- package/dist/ir/tiers.js.map +1 -1
- package/dist/ir/traverse.d.ts +2 -0
- package/dist/ir/traverse.js +29 -5
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/validate.js +171 -45
- package/dist/ir/validate.js.map +1 -1
- package/dist/library/ir-policy.js +12 -0
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/library/library-cache.d.ts +2 -0
- package/dist/library/library-cache.js.map +1 -1
- package/dist/library/prepare.js +2 -0
- package/dist/library/prepare.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 +26 -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 +3 -1
- package/dist/native/prepare.js +123 -31
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/prepare.test.js +78 -18
- package/dist/native/prepare.test.js.map +1 -1
- package/dist/native/sanitizer.test.js +6 -1
- 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/dist/startup-cache.d.ts +1 -0
- package/dist/startup-cache.js +1 -0
- package/dist/startup-cache.js.map +1 -1
- package/dist/text-parts.d.ts +7 -0
- package/dist/text-parts.js +44 -0
- package/dist/text-parts.js.map +1 -1
- package/dist/text-parts.test.d.ts +1 -0
- package/dist/text-parts.test.js +46 -0
- package/dist/text-parts.test.js.map +1 -0
- package/dist/timing.d.ts +9 -2
- package/dist/timing.js +7 -4
- package/dist/timing.js.map +1 -1
- package/dist/wasm/translate.d.ts +4 -0
- package/dist/wasm/translate.js +2 -2
- package/dist/wasm/translate.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/shims/undici/core/client.ts +4 -4
- package/surface-manifest.json +44 -52
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import { DATE_TIME_FIELD, dateRootOf, dateSuperCall, isDatePrototypeMethod, lowerDateSuperMethodCall, } from "./builtins/date-classes.js";
|
|
2
|
+
import { predeclareForwardClass } from "./lower-stmts.js";
|
|
3
|
+
import { lowerDateStaticCall } from "./builtins/dates.js";
|
|
4
|
+
import { keyedHelperName } from "./stable-names.js";
|
|
1
5
|
import { lowerValueReturningConstructorNew } from "./js-dynamic-objects.js";
|
|
2
6
|
import { adaptPromiseExecutor } from "./promise-executor-adapter.js";
|
|
3
7
|
import { dynUndefinedExpr, nodeThrowExpr, varRef } from "../../ir/build.js";
|
|
@@ -29,7 +33,7 @@ import { bodyReadsArguments } from "../arguments-usage.js";
|
|
|
29
33
|
import { errorNameAfterField, errorViewFields } from "./error-name-order.js";
|
|
30
34
|
import { checkedJsDocumentedParameter, documentedParameter, generatorMeta, } from "./call-signatures.js";
|
|
31
35
|
import { omittedArgFor } from "./call-arguments.js";
|
|
32
|
-
import { isGenericCallableMemberType, jsOpenObjectType, typeKey, withUnitArm, } from "../type-mapper.js";
|
|
36
|
+
import { checkerTypeDescription, isGenericCallableMemberType, jsOpenObjectType, typeKey, withUnitArm, } from "../type-mapper.js";
|
|
33
37
|
import { canonicalBuiltinModule, cjsClassExprWholeExportOf, isCjsJsFile, isJsSourceFile, isModuleExportsAccess, locOf, requireSpecOf, } from "../program.js";
|
|
34
38
|
import { PoisonError, dynFallbackType, jsFuncNameOf, newFnCtx, own } from "./lowerer.js";
|
|
35
39
|
import { isAssertClassNew } from "./assert-instances.js";
|
|
@@ -43,19 +47,19 @@ import { lowerSearchParamsNew } from "./builtins/url.js";
|
|
|
43
47
|
import { lowerTextCodecNew } from "./builtins/text-codecs.js";
|
|
44
48
|
import { lowerBroadcastChannelNew, lowerMessageChannelNew, lowerWorkerNew, } from "./builtins/workers.js";
|
|
45
49
|
import { unsupportedPackageValueDiag, unsupportedDiag, } from "../../diagnostics/diagnostic.js";
|
|
46
|
-
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";
|
|
47
51
|
import { builtinEventTargetBaseOf, eventTargetApiMembers, eventTargetApiMethod, eventTargetRootOf, eventTargetSuperCall, lowerEventTargetMethodCall, } from "./lower-event-target.js";
|
|
48
52
|
import { emitOverrideShapeReason, emitSpecSuperForward, emitterRooted, lowerEmitterSuperCall, } from "./lower-event-emitter.js";
|
|
49
53
|
import { declSymbolOf } from "./lower-modules.js";
|
|
50
54
|
import { classSymbolKeyOf, classSymbolKeyOfSymbol, symbolFieldDisplayName, } from "./symbol-fields.js";
|
|
51
|
-
import { lowerHttpAgentNew, lowerHttpServerNew } from "./lower-server.js";
|
|
55
|
+
import { lowerHttpAgentNew, lowerHttpServerNew, lowerTlsSocketNew } from "./lower-server.js";
|
|
52
56
|
import { ambientNsRootOf, ambientUndefReadType, ambientUndefVarRootOf, ambientUndefinedFnSymbolOf, contextualUndefReadType, fenceEarlyAliasUse, fenceEarlyNsMemberRef, nsMemberIdentOf, nsUndefRead, } from "./lower-namespaces.js";
|
|
53
57
|
import { mixinResultBindingClassOf } from "./lower-mixins.js";
|
|
54
58
|
import { hasLexicalPrivateReference, hasStaticThis, rejectStaticThis } from "./static-this.js";
|
|
55
59
|
import { lowerUrlNew } from "./lower-url.js";
|
|
56
60
|
import { isNativeProxyInitializer, lowerNativeProxy } from "./expressions/native-proxy.js";
|
|
57
61
|
import { classStaticDataFor } from "./class-static-data.js";
|
|
58
|
-
import { construction, constructionPrefix } from "./js-class-fields.js";
|
|
62
|
+
import { accessorInterceptsBase, accessorNames, construction, constructionPrefix, } from "./js-class-fields.js";
|
|
59
63
|
import { lowerObjectFactoryNew } from "./object-factory-new.js";
|
|
60
64
|
import { tryLowerExpression } from "./expressions/try-lower-expression.js";
|
|
61
65
|
import { lowerInstanceConstructorNew } from "./class-instance-constructor.js";
|
|
@@ -64,6 +68,7 @@ import { constructionEscape } from "./construction-escapes.js";
|
|
|
64
68
|
import { checkedClassConstruction, checkedClassConstructionPacked } from "./class-construction.js";
|
|
65
69
|
import { initializeRuntimeStatics, hasRuntimeStatics } from "./class-runtime-statics.js";
|
|
66
70
|
import { reflectedClassStaticMethodValue } from "./class-method-values.js";
|
|
71
|
+
import { identifierReadSymbol } from "./surfaces.js";
|
|
67
72
|
export function returnsOnlyThis(member) {
|
|
68
73
|
const body = member.body;
|
|
69
74
|
const last = body?.statements?.nodes.at(-1);
|
|
@@ -119,7 +124,7 @@ export function returnsOnlyThisValue(member) {
|
|
|
119
124
|
ts.forEachChild(body, visit);
|
|
120
125
|
return valid;
|
|
121
126
|
}
|
|
122
|
-
function functionLocalClass(decl) {
|
|
127
|
+
export function functionLocalClass(decl) {
|
|
123
128
|
for (let parent = decl.parent; parent && !ts.isSourceFile(parent); parent = parent.parent) {
|
|
124
129
|
if (ts.isFunctionLike(parent))
|
|
125
130
|
return true;
|
|
@@ -493,8 +498,10 @@ export function registerBuiltinErrorClasses(lowerer) {
|
|
|
493
498
|
throwingSetters: [],
|
|
494
499
|
staticFields: [],
|
|
495
500
|
};
|
|
496
|
-
if (base)
|
|
501
|
+
if (base) {
|
|
497
502
|
base.subclasses.push(info);
|
|
503
|
+
lowerer.subclassLinks++;
|
|
504
|
+
}
|
|
498
505
|
lowerer.classes.set(irName, info);
|
|
499
506
|
}
|
|
500
507
|
}
|
|
@@ -575,8 +582,10 @@ export function registerBuiltinStreamClasses(lowerer) {
|
|
|
575
582
|
throwingSetters: [],
|
|
576
583
|
staticFields: [],
|
|
577
584
|
};
|
|
578
|
-
if (base)
|
|
585
|
+
if (base) {
|
|
579
586
|
base.subclasses.push(info);
|
|
587
|
+
lowerer.subclassLinks++;
|
|
588
|
+
}
|
|
580
589
|
lowerer.classes.set(irName, info);
|
|
581
590
|
}
|
|
582
591
|
}
|
|
@@ -1358,6 +1367,7 @@ mixin) {
|
|
|
1358
1367
|
: (computedBase?.classInfo ?? null);
|
|
1359
1368
|
let genericBase;
|
|
1360
1369
|
let callableBase;
|
|
1370
|
+
let extendsDate = false;
|
|
1361
1371
|
let factoryBaseExpression;
|
|
1362
1372
|
const adoptCallableBase = (expression) => {
|
|
1363
1373
|
if (familyMode || inst || mixin)
|
|
@@ -1538,6 +1548,12 @@ mixin) {
|
|
|
1538
1548
|
continue;
|
|
1539
1549
|
lowerer.unsupported("SC1090", clause, "extending computed expressions");
|
|
1540
1550
|
}
|
|
1551
|
+
if (!familyMode && !inst && !mixin && lowerer.isStdlibGlobal(t.expression, "Date")) {
|
|
1552
|
+
if (t.typeArguments?.nodes)
|
|
1553
|
+
lowerer.unsupported("SC1090", t, "extending generic classes");
|
|
1554
|
+
extendsDate = true;
|
|
1555
|
+
continue;
|
|
1556
|
+
}
|
|
1541
1557
|
const symbol = lowerer.resolveValueSymbol(t.expression);
|
|
1542
1558
|
// Extending a REBINDABLE decorated class (analysis already ran —
|
|
1543
1559
|
// this collection is a class expression or a generic
|
|
@@ -1679,6 +1695,7 @@ mixin) {
|
|
|
1679
1695
|
// receiver-sensitive getters and setters inherited by subclasses.
|
|
1680
1696
|
const checkedStatics = isJsSourceFile(ts.getSourceFileOfNode(decl)) &&
|
|
1681
1697
|
((base && hasRuntimeStatics(base)) ||
|
|
1698
|
+
definedThroughReflection(lowerer, decl) ||
|
|
1682
1699
|
decl.members.nodes.some((member) => ts.isAccessor(member) &&
|
|
1683
1700
|
!ts.isPrivateIdentifier(member.name) &&
|
|
1684
1701
|
member.modifiers?.nodes.some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword))) &&
|
|
@@ -1738,7 +1755,8 @@ mixin) {
|
|
|
1738
1755
|
};
|
|
1739
1756
|
for (const member of decl.members.nodes) {
|
|
1740
1757
|
if ((functionLocalClass(decl) || checkedStatics) &&
|
|
1741
|
-
isJsSourceFile(ts.getSourceFileOfNode(decl))
|
|
1758
|
+
(isJsSourceFile(ts.getSourceFileOfNode(decl)) ||
|
|
1759
|
+
(functionLocalClass(decl) && ts.isMethodDeclaration(member))) &&
|
|
1742
1760
|
(ts.isClassStaticBlockDeclaration(member) ||
|
|
1743
1761
|
ts
|
|
1744
1762
|
.getModifiers(member)
|
|
@@ -1992,8 +2010,8 @@ mixin) {
|
|
|
1992
2010
|
// state, so an override or shadowing field would split-brain.
|
|
1993
2011
|
// Underscore methods are the SUPPORTED override form — but only
|
|
1994
2012
|
// the ones the class's own base consumes (a `_read` on a
|
|
1995
|
-
// Transform, or `_writev
|
|
1996
|
-
//
|
|
2013
|
+
// Transform, or `_writev` on a Readable, would be consumed by Node
|
|
2014
|
+
// machinery that has no lowering here).
|
|
1997
2015
|
if (memberName && ts.isIdentifier(memberName)) {
|
|
1998
2016
|
const streamBase = (() => {
|
|
1999
2017
|
for (let c = base; c; c = c.base)
|
|
@@ -2006,8 +2024,8 @@ mixin) {
|
|
|
2006
2024
|
if (STREAM_API_MEMBERS.has(name) || STREAM_PROP_MEMBERS.has(name)) {
|
|
2007
2025
|
lowerer.unsupported("SC1090", memberName, `overriding the stream member '${name}' (the runtime owns the stream surface)`);
|
|
2008
2026
|
}
|
|
2009
|
-
if (name === "_writev"
|
|
2010
|
-
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)`);
|
|
2011
2029
|
}
|
|
2012
2030
|
const accepted = streamCtorShape(streamBase.def.name).accepted;
|
|
2013
2031
|
for (const [option, methodName] of UNDERSCORE_METHODS) {
|
|
@@ -3152,7 +3170,7 @@ mixin) {
|
|
|
3152
3170
|
}
|
|
3153
3171
|
// A subclass field created before anything can observe the instance
|
|
3154
3172
|
// keeps its type: super() cannot run code that reads it earlier.
|
|
3155
|
-
const baseConstruction = base && !
|
|
3173
|
+
const baseConstruction = base && !accessorInterceptsBase(accessorNames(methods.keys()), base)
|
|
3156
3174
|
? construction(base)
|
|
3157
3175
|
: null;
|
|
3158
3176
|
const sealedPrefix = baseConstruction
|
|
@@ -3180,7 +3198,7 @@ mixin) {
|
|
|
3180
3198
|
// An own JS callable shadows its prototype declaration.
|
|
3181
3199
|
// Keep the method in the prototype and store the assigned
|
|
3182
3200
|
// value in the instance property bag.
|
|
3183
|
-
lowerer.
|
|
3201
|
+
lowerer.noteMethodAccess(name, assign);
|
|
3184
3202
|
continue;
|
|
3185
3203
|
}
|
|
3186
3204
|
const sym = lowerer.checker.getSymbolAtLocation(assign);
|
|
@@ -3257,7 +3275,7 @@ mixin) {
|
|
|
3257
3275
|
if (!key && (fields.has(fieldName) || hasAccessor(fieldName)))
|
|
3258
3276
|
continue;
|
|
3259
3277
|
if (!key && (methods.has(fieldName) || lowerer.findMethodOn(base, fieldName))) {
|
|
3260
|
-
lowerer.
|
|
3278
|
+
lowerer.noteMethodAccess(fieldName, lhs);
|
|
3261
3279
|
continue;
|
|
3262
3280
|
}
|
|
3263
3281
|
// A key already declared (own or inherited) makes later
|
|
@@ -3394,7 +3412,8 @@ mixin) {
|
|
|
3394
3412
|
// synthesized constructor forwards the same params to super).
|
|
3395
3413
|
const ctorParams = ctor && !mixinForwarding
|
|
3396
3414
|
? lowerer.paramShapes(ctor.parameters.nodes)
|
|
3397
|
-
: (base?.ctorParams ??
|
|
3415
|
+
: (base?.ctorParams ??
|
|
3416
|
+
(callableBase || extendsDate ? [{ type: DYN, mode: "dynRest" }] : []));
|
|
3398
3417
|
if (ctor &&
|
|
3399
3418
|
!mixinForwarding &&
|
|
3400
3419
|
isJsSourceFile(ts.getSourceFileOfNode(ctor)) &&
|
|
@@ -3421,6 +3440,7 @@ mixin) {
|
|
|
3421
3440
|
// Redeclared INHERITED fields contribute no slot (their
|
|
3422
3441
|
// initializers assign the prefix slot).
|
|
3423
3442
|
fields: [
|
|
3443
|
+
...(extendsDate ? [{ name: DATE_TIME_FIELD, type: DATE_T }] : []),
|
|
3424
3444
|
...(base?.def.fields ?? []),
|
|
3425
3445
|
...fieldOrder
|
|
3426
3446
|
.filter((f) => f.redeclared !== true)
|
|
@@ -3452,6 +3472,7 @@ mixin) {
|
|
|
3452
3472
|
base,
|
|
3453
3473
|
...(genericBase ? { genericBase } : {}),
|
|
3454
3474
|
...(callableBase ? { callableBase } : {}),
|
|
3475
|
+
...(extendsDate ? { extendsDate: true } : {}),
|
|
3455
3476
|
...(factoryBaseExpression ? { factoryBaseExpression } : {}),
|
|
3456
3477
|
subclasses: [],
|
|
3457
3478
|
throwingSetters,
|
|
@@ -3492,6 +3513,7 @@ mixin) {
|
|
|
3492
3513
|
path: inst.path,
|
|
3493
3514
|
family: inst.family,
|
|
3494
3515
|
bindings: inst.bindings,
|
|
3516
|
+
tsBindings: inst.tsBindings,
|
|
3495
3517
|
typeArgsText: inst.typeArgsText,
|
|
3496
3518
|
ordinal: inst.ordinal,
|
|
3497
3519
|
};
|
|
@@ -3522,8 +3544,10 @@ mixin) {
|
|
|
3522
3544
|
};
|
|
3523
3545
|
lowerer.genericClassByDecl.set(decl, info.generic);
|
|
3524
3546
|
}
|
|
3525
|
-
if (base)
|
|
3547
|
+
if (base) {
|
|
3526
3548
|
base.subclasses.push(info);
|
|
3549
|
+
lowerer.subclassLinks++;
|
|
3550
|
+
}
|
|
3527
3551
|
lowerer.classes.set(className, info);
|
|
3528
3552
|
if (computedBase && !functionLocalClass(decl)) {
|
|
3529
3553
|
info.def.baseValueGlobal = `%g.${className}.computedBase`;
|
|
@@ -3625,8 +3649,10 @@ export function genericClassInstanceType(lowerer, decl, ref, mapArgument) {
|
|
|
3625
3649
|
.getTypeArguments(ref)
|
|
3626
3650
|
.slice(0, gci.typeParams.length);
|
|
3627
3651
|
const mapped = [];
|
|
3652
|
+
const tsArgs = [];
|
|
3628
3653
|
if (args.length === gci.typeParams.length) {
|
|
3629
3654
|
for (const a of args) {
|
|
3655
|
+
tsArgs.push(lowerer.typeParamTsResolver(a) ?? a);
|
|
3630
3656
|
const m = lowerer.mapTypeOf(a, mapArgument);
|
|
3631
3657
|
if (!m || m.kind === "void") {
|
|
3632
3658
|
// An UNBOUND type parameter argument (`Box<T>` outside any
|
|
@@ -3647,9 +3673,34 @@ export function genericClassInstanceType(lowerer, decl, ref, mapArgument) {
|
|
|
3647
3673
|
if (!b)
|
|
3648
3674
|
return null;
|
|
3649
3675
|
mapped.push(b);
|
|
3650
|
-
|
|
3651
|
-
|
|
3652
|
-
|
|
3676
|
+
const bound = lowerer.typeParamTsBindings?.get(tp);
|
|
3677
|
+
if (bound)
|
|
3678
|
+
tsArgs.push(bound);
|
|
3679
|
+
}
|
|
3680
|
+
}
|
|
3681
|
+
// A type parameter that a conditional type in the class depends on
|
|
3682
|
+
// (`K extends "required" ? T : T | undefined`) is bound to its checker
|
|
3683
|
+
// type for the members, and that type keys the instance: mapType alone
|
|
3684
|
+
// widens a literal, so Field<string, "required"> and Field<string,
|
|
3685
|
+
// "optional"> would otherwise share one layout. The other parameters get
|
|
3686
|
+
// no checker binding, so nothing in the members depends on a literal
|
|
3687
|
+
// the key does not carry.
|
|
3688
|
+
gci.literalSensitive ??= literalSensitiveTypeParams(lowerer, gci);
|
|
3689
|
+
const sensitive = (i) => tsArgs.length === gci.typeParams.length && gci.literalSensitive.has(gci.typeParams[i]);
|
|
3690
|
+
const checkerKey = gci.typeParams
|
|
3691
|
+
.map((_, i) => (sensitive(i) ? `#${tsArgs[i].id}` : "*"))
|
|
3692
|
+
.join(",");
|
|
3693
|
+
const key = mapped.map(typeKey).join(",") + (gci.literalSensitive.size > 0 ? `@${checkerKey}` : "");
|
|
3694
|
+
const literalText = (i) => {
|
|
3695
|
+
const arg = sensitive(i) ? tsArgs[i] : undefined;
|
|
3696
|
+
if (arg?.isStringLiteralType())
|
|
3697
|
+
return JSON.stringify(arg.value);
|
|
3698
|
+
if (arg?.isNumberLiteralType())
|
|
3699
|
+
return String(arg.value);
|
|
3700
|
+
if (arg && arg.flags & ts.TypeFlags.BooleanLiteral)
|
|
3701
|
+
return lowerer.checker.typeToString(arg);
|
|
3702
|
+
return null;
|
|
3703
|
+
};
|
|
3653
3704
|
const existing = gci.instances.get(key);
|
|
3654
3705
|
if (existing) {
|
|
3655
3706
|
if (existing.info)
|
|
@@ -3663,18 +3714,40 @@ export function genericClassInstanceType(lowerer, decl, ref, mapArgument) {
|
|
|
3663
3714
|
lowerer.unsupported("SC1090", decl, `unbounded generic class instantiation ('${gci.baseName}' exceeded ${MAX_INSTANTIATION_RECURSION} recursive specializations on one demand path)`);
|
|
3664
3715
|
}
|
|
3665
3716
|
const ordinal = gci.instances.size;
|
|
3666
|
-
|
|
3717
|
+
// The name does not take the checker type ids of the key: a literal
|
|
3718
|
+
// argument is named by its text, another checker type by its
|
|
3719
|
+
// description. Two keys that still describe alike number the later one.
|
|
3720
|
+
const nameKey = mapped.map(typeKey).join(",") +
|
|
3721
|
+
(gci.literalSensitive.size > 0
|
|
3722
|
+
? `@${gci.typeParams
|
|
3723
|
+
.map((_, i) => sensitive(i)
|
|
3724
|
+
? (literalText(i) ?? checkerTypeDescription(tsArgs[i], lowerer.typeCtx))
|
|
3725
|
+
: "*")
|
|
3726
|
+
.join(",")}`
|
|
3727
|
+
: "");
|
|
3728
|
+
const prefix = `${gci.family.def.name}%`;
|
|
3729
|
+
const taken = new Set([...gci.instances.values()].map((instance) => instance.name));
|
|
3730
|
+
let name = keyedHelperName(lowerer, prefix, nameKey, "");
|
|
3731
|
+
for (let n = 1; taken.has(name); n++)
|
|
3732
|
+
name = keyedHelperName(lowerer, prefix, `${nameKey}#${n}`, "");
|
|
3667
3733
|
const entry = { name, info: null };
|
|
3668
3734
|
gci.instances.set(key, entry);
|
|
3669
3735
|
const bindings = new Map();
|
|
3670
3736
|
gci.typeParams.forEach((tp, i) => bindings.set(tp, mapped[i]));
|
|
3671
|
-
const
|
|
3737
|
+
const tsBindings = new Map();
|
|
3738
|
+
gci.typeParams.forEach((tp, i) => {
|
|
3739
|
+
if (sensitive(i))
|
|
3740
|
+
tsBindings.set(tp, tsArgs[i]);
|
|
3741
|
+
});
|
|
3742
|
+
const rendered = mapped.map((m, i) => literalText(i) ?? lowerer.fmt(m)).join(", ");
|
|
3672
3743
|
const typeArgsText = `<${rendered.length > 80 ? rendered.slice(0, 77) + "..." : rendered}>`;
|
|
3673
3744
|
const prevBindings = lowerer.typeParamBindings;
|
|
3745
|
+
const prevTsBindings = lowerer.typeParamTsBindings;
|
|
3674
3746
|
const prevContext = lowerer.instantiationContext;
|
|
3675
3747
|
const previousPath = lowerer.genericInstantiationPath;
|
|
3676
3748
|
lowerer.genericInstantiationPath = path;
|
|
3677
3749
|
lowerer.typeParamBindings = bindings;
|
|
3750
|
+
lowerer.typeParamTsBindings = tsBindings;
|
|
3678
3751
|
lowerer.instantiationContext = `instantiating class '${gci.baseName}' with ${typeArgsText}`;
|
|
3679
3752
|
try {
|
|
3680
3753
|
lowerer.collectClassShapeInner(decl, undefined, {
|
|
@@ -3682,6 +3755,7 @@ export function genericClassInstanceType(lowerer, decl, ref, mapArgument) {
|
|
|
3682
3755
|
family: gci.family,
|
|
3683
3756
|
name,
|
|
3684
3757
|
bindings,
|
|
3758
|
+
tsBindings,
|
|
3685
3759
|
typeArgsText,
|
|
3686
3760
|
ordinal,
|
|
3687
3761
|
});
|
|
@@ -3696,6 +3770,7 @@ export function genericClassInstanceType(lowerer, decl, ref, mapArgument) {
|
|
|
3696
3770
|
}
|
|
3697
3771
|
finally {
|
|
3698
3772
|
lowerer.typeParamBindings = prevBindings;
|
|
3773
|
+
lowerer.typeParamTsBindings = prevTsBindings;
|
|
3699
3774
|
lowerer.instantiationContext = prevContext;
|
|
3700
3775
|
lowerer.genericInstantiationPath = previousPath;
|
|
3701
3776
|
}
|
|
@@ -3710,6 +3785,65 @@ export function genericClassInstanceType(lowerer, decl, ref, mapArgument) {
|
|
|
3710
3785
|
lowerer.onLateClassCollected?.(info);
|
|
3711
3786
|
return { kind: "object", className: name };
|
|
3712
3787
|
}
|
|
3788
|
+
/** The class's type parameters that a conditional type inside it depends
|
|
3789
|
+
* on: the parameters named within a type node that is a conditional type
|
|
3790
|
+
* or reaches one through the type aliases and interfaces it refers to
|
|
3791
|
+
* (`get(): Value<T, K>` with `type Value<T, K> = K extends "required" ? T
|
|
3792
|
+
* : T | undefined`, also when the alias wraps the conditional in a union
|
|
3793
|
+
* or another alias). Their arguments pick the conditional's branch. */
|
|
3794
|
+
function literalSensitiveTypeParams(lowerer, gci) {
|
|
3795
|
+
const params = new Set(gci.typeParams);
|
|
3796
|
+
const found = new Set();
|
|
3797
|
+
const reaches = new Map();
|
|
3798
|
+
const declarationsReach = (symbol) => {
|
|
3799
|
+
const target = symbol.flags & ts.SymbolFlags.Alias ? lowerer.checker.getAliasedSymbol(symbol) : symbol;
|
|
3800
|
+
const known = reaches.get(target);
|
|
3801
|
+
if (known !== undefined)
|
|
3802
|
+
return known;
|
|
3803
|
+
reaches.set(target, false); // a recursive alias reaches through its other parts
|
|
3804
|
+
const result = target.declarations.some((d) => ts.isTypeAliasDeclaration(d)
|
|
3805
|
+
? reachesConditional(d.type)
|
|
3806
|
+
: ts.isInterfaceDeclaration(d)
|
|
3807
|
+
? d.members.nodes.some(reachesConditional)
|
|
3808
|
+
: false);
|
|
3809
|
+
reaches.set(target, result);
|
|
3810
|
+
return result;
|
|
3811
|
+
};
|
|
3812
|
+
const reachesConditional = (node) => {
|
|
3813
|
+
if (ts.isConditionalTypeNode(node))
|
|
3814
|
+
return true;
|
|
3815
|
+
if (ts.isTypeReferenceNode(node)) {
|
|
3816
|
+
const name = ts.isIdentifier(node.typeName) ? node.typeName : node.typeName.right;
|
|
3817
|
+
const symbol = lowerer.checker.getSymbolAtLocation(name);
|
|
3818
|
+
if (symbol && !params.has(symbol) && declarationsReach(symbol))
|
|
3819
|
+
return true;
|
|
3820
|
+
}
|
|
3821
|
+
let found = false;
|
|
3822
|
+
ts.forEachChild(node, (child) => {
|
|
3823
|
+
if (!found && reachesConditional(child))
|
|
3824
|
+
found = true;
|
|
3825
|
+
});
|
|
3826
|
+
return found;
|
|
3827
|
+
};
|
|
3828
|
+
const collect = (node) => {
|
|
3829
|
+
if (ts.isTypeReferenceNode(node) && ts.isIdentifier(node.typeName)) {
|
|
3830
|
+
const symbol = lowerer.checker.getSymbolAtLocation(node.typeName);
|
|
3831
|
+
if (symbol && params.has(symbol))
|
|
3832
|
+
found.add(symbol);
|
|
3833
|
+
}
|
|
3834
|
+
ts.forEachChild(node, collect);
|
|
3835
|
+
};
|
|
3836
|
+
const visit = (node) => {
|
|
3837
|
+
if (ts.isTypeNode(node) && reachesConditional(node)) {
|
|
3838
|
+
collect(node);
|
|
3839
|
+
return;
|
|
3840
|
+
}
|
|
3841
|
+
ts.forEachChild(node, visit);
|
|
3842
|
+
};
|
|
3843
|
+
for (const member of gci.decl.members.nodes)
|
|
3844
|
+
visit(member);
|
|
3845
|
+
return found;
|
|
3846
|
+
}
|
|
3713
3847
|
/** Runs a member-lowering thunk under an INSTANTIATION's type-parameter
|
|
3714
3848
|
* bindings (the generic-fn typeParamResolver mechanism) — the checker
|
|
3715
3849
|
* keeps reporting the unsubstituted `T`s inside the shared body AST.
|
|
@@ -3745,11 +3879,13 @@ function withInstanceBindings(lowerer, info, fn) {
|
|
|
3745
3879
|
}
|
|
3746
3880
|
}
|
|
3747
3881
|
const prevBindings = lowerer.typeParamBindings;
|
|
3882
|
+
const prevTsBindings = lowerer.typeParamTsBindings;
|
|
3748
3883
|
const prevContext = lowerer.instantiationContext;
|
|
3749
3884
|
const prevSuppress = lowerer.suppressStats;
|
|
3750
3885
|
const previousPath = lowerer.genericInstantiationPath;
|
|
3751
3886
|
lowerer.genericInstantiationPath = gi.path;
|
|
3752
3887
|
lowerer.typeParamBindings = gi.bindings;
|
|
3888
|
+
lowerer.typeParamTsBindings = gi.tsBindings;
|
|
3753
3889
|
lowerer.instantiationContext = `instantiating class '${gi.family.generic?.baseName ?? info.def.jsName ?? ""}' with ${gi.typeArgsText}`;
|
|
3754
3890
|
lowerer.suppressStats = prevSuppress || gi.ordinal > 0;
|
|
3755
3891
|
try {
|
|
@@ -3757,6 +3893,7 @@ function withInstanceBindings(lowerer, info, fn) {
|
|
|
3757
3893
|
}
|
|
3758
3894
|
finally {
|
|
3759
3895
|
lowerer.typeParamBindings = prevBindings;
|
|
3896
|
+
lowerer.typeParamTsBindings = prevTsBindings;
|
|
3760
3897
|
lowerer.instantiationContext = prevContext;
|
|
3761
3898
|
lowerer.suppressStats = prevSuppress;
|
|
3762
3899
|
lowerer.genericInstantiationPath = previousPath;
|
|
@@ -4295,7 +4432,13 @@ export function classValueRef(lowerer, info, blame) {
|
|
|
4295
4432
|
const display = info.def.name.replace(/^%|^%m\d+\./, "");
|
|
4296
4433
|
fenceDecorationThrows(lowerer, info, blame);
|
|
4297
4434
|
if (info.localClass && ts.isIdentifier(blame)) {
|
|
4298
|
-
|
|
4435
|
+
let stored = lowerer.resolveLocal(blame);
|
|
4436
|
+
// A reference from a function hoisted above the class statement.
|
|
4437
|
+
if (!stored) {
|
|
4438
|
+
const symbol = lowerer.resolveValueSymbol(blame);
|
|
4439
|
+
if (symbol && predeclareForwardClass(lowerer, symbol))
|
|
4440
|
+
stored = lowerer.resolveLocal(blame);
|
|
4441
|
+
}
|
|
4299
4442
|
if (stored)
|
|
4300
4443
|
return lowerer.coerceToExpected({ kind: "varRef", localId: stored.id, type: stored.type, loc: locOf(blame) }, { kind: "classval", className: info.def.name });
|
|
4301
4444
|
}
|
|
@@ -4484,6 +4627,13 @@ export function lowerStaticFieldRead(lowerer, expr) {
|
|
|
4484
4627
|
return null;
|
|
4485
4628
|
const loc = locOf(expr);
|
|
4486
4629
|
const found = findStaticOn(lowerer, info, expr.name.text);
|
|
4630
|
+
// A Date static read as a value through a class declared `extends Date`:
|
|
4631
|
+
// the statics lower only as calls.
|
|
4632
|
+
if (!found &&
|
|
4633
|
+
dateRootOf(info) &&
|
|
4634
|
+
["now", "parse", "UTC"].includes(expr.name.text) &&
|
|
4635
|
+
!(ts.isCallExpression(expr.parent) && expr.parent.expression === expr))
|
|
4636
|
+
lowerer.noLowering(`Date.${expr.name.text} read through a class that extends Date`, expr);
|
|
4487
4637
|
if (hasRuntimeStatics(info) && !found?.field)
|
|
4488
4638
|
return {
|
|
4489
4639
|
kind: "dynKeyGet",
|
|
@@ -4687,9 +4837,10 @@ export function lowerClassExpressionInfo(lowerer, expr) {
|
|
|
4687
4837
|
expr.members.nodes.some((member) => decoratorNodesOf(member).length ||
|
|
4688
4838
|
(!isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
|
|
4689
4839
|
(ts.isClassStaticBlockDeclaration(member) ||
|
|
4690
|
-
ts
|
|
4691
|
-
|
|
4692
|
-
|
|
4840
|
+
(!ts.isMethodDeclaration(member) &&
|
|
4841
|
+
ts
|
|
4842
|
+
.getModifiers(member)
|
|
4843
|
+
?.some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword)))) ||
|
|
4693
4844
|
(ts.isMethodDeclaration(member) && member.typeParameters?.nodes.length)))) {
|
|
4694
4845
|
lowerer.unsupported("SC1090", expr, "function-local classes with statics, decorators, or generic members");
|
|
4695
4846
|
}
|
|
@@ -4775,6 +4926,31 @@ export function lowerClassExpressionInfo(lowerer, expr) {
|
|
|
4775
4926
|
}
|
|
4776
4927
|
return info;
|
|
4777
4928
|
}
|
|
4929
|
+
/** True when a named class expression's body refers to the class value by
|
|
4930
|
+
* its own name (`class Box { static of() { return new Box(); } }`, a
|
|
4931
|
+
* shorthand property `{ Box }` included); type annotations naming it
|
|
4932
|
+
* (`again(): Box`) do not count. */
|
|
4933
|
+
function classExpressionNamesItself(lowerer, expr) {
|
|
4934
|
+
const name = expr.name;
|
|
4935
|
+
if (!name)
|
|
4936
|
+
return false;
|
|
4937
|
+
const symbol = lowerer.checker.getSymbolAtLocation(name);
|
|
4938
|
+
if (!symbol)
|
|
4939
|
+
return false;
|
|
4940
|
+
let found = false;
|
|
4941
|
+
for (const member of expr.members.nodes) {
|
|
4942
|
+
ts.walkPreorder(member, (n) => {
|
|
4943
|
+
if (found || ts.isTypeNode(n))
|
|
4944
|
+
return "skip";
|
|
4945
|
+
if (ts.isIdentifier(n) && n.text === name.text && identifierReadSymbol(lowerer, n) === symbol)
|
|
4946
|
+
found = true;
|
|
4947
|
+
return undefined;
|
|
4948
|
+
});
|
|
4949
|
+
if (found)
|
|
4950
|
+
return true;
|
|
4951
|
+
}
|
|
4952
|
+
return false;
|
|
4953
|
+
}
|
|
4778
4954
|
/** `class {…}` in expression position: a class definition bound to no
|
|
4779
4955
|
* statement — once the static side is a value, the expression IS the
|
|
4780
4956
|
* definition plus a classRef over it. A DECORATED class expression
|
|
@@ -4782,8 +4958,12 @@ export function lowerClassExpressionInfo(lowerer, expr) {
|
|
|
4782
4958
|
* mints a class at all: evaluating the expression IS the
|
|
4783
4959
|
* ReferenceError, so it lowers to exactly that read — every evaluation
|
|
4784
4960
|
* throws identically, which is why the once-evaluated restriction and
|
|
4785
|
-
* the member fences don't apply.
|
|
4786
|
-
|
|
4961
|
+
* the member fences don't apply.
|
|
4962
|
+
*
|
|
4963
|
+
* `binding` is the local of a function-local class declaration's name,
|
|
4964
|
+
* declared without a value; the class value assigns it before the class's
|
|
4965
|
+
* static members are defined (see initializeRuntimeStatics). */
|
|
4966
|
+
export function lowerClassExpression(lowerer, expr, binding) {
|
|
4787
4967
|
if (decoratorNodesOf(expr).length > 0 ||
|
|
4788
4968
|
expr.members.nodes.some((m) => decoratorNodesOf(m).length > 0)) {
|
|
4789
4969
|
if (!isJsSourceFile(ts.getSourceFileOfNode(expr)) && expr.typeParameters === undefined) {
|
|
@@ -4797,6 +4977,28 @@ export function lowerClassExpression(lowerer, expr) {
|
|
|
4797
4977
|
}
|
|
4798
4978
|
}
|
|
4799
4979
|
const info = lowerClassExpressionInfo(lowerer, expr);
|
|
4980
|
+
// A function-local class expression's own name is a binding of its body:
|
|
4981
|
+
// declared before the members lower, so their references to the name
|
|
4982
|
+
// resolve to it. The class value captures it before it is assigned, as
|
|
4983
|
+
// it captures a class declaration's binding.
|
|
4984
|
+
if (!binding &&
|
|
4985
|
+
info.localClass &&
|
|
4986
|
+
ts.isClassExpression(expr) &&
|
|
4987
|
+
expr.name &&
|
|
4988
|
+
classExpressionNamesItself(lowerer, expr)) {
|
|
4989
|
+
const own = lowerer.declareLocal(expr.name, expr.name.text, { kind: "classval", className: info.def.name }, true);
|
|
4990
|
+
const value = lowerClassValue(lowerer, expr, info, own);
|
|
4991
|
+
return {
|
|
4992
|
+
kind: "seqExpr",
|
|
4993
|
+
stmts: [{ kind: "varDecl", localId: own.id, init: null, loc: value.loc }],
|
|
4994
|
+
result: value,
|
|
4995
|
+
type: value.type,
|
|
4996
|
+
loc: value.loc,
|
|
4997
|
+
};
|
|
4998
|
+
}
|
|
4999
|
+
return lowerClassValue(lowerer, expr, info, binding);
|
|
5000
|
+
}
|
|
5001
|
+
function lowerClassValue(lowerer, expr, info, binding) {
|
|
4800
5002
|
if (!info.localClass &&
|
|
4801
5003
|
!info.expressionInitializationEmitted &&
|
|
4802
5004
|
(info.callableBase ||
|
|
@@ -4843,7 +5045,7 @@ export function lowerClassExpression(lowerer, expr) {
|
|
|
4843
5045
|
const clsRef = { kind: "varRef", localId: clsLocal.id, type: value.type, loc };
|
|
4844
5046
|
const boxed = { kind: "dynFrom", value: clsRef, type: DYN, loc };
|
|
4845
5047
|
info.localPrototypeData = true;
|
|
4846
|
-
|
|
5048
|
+
const built = {
|
|
4847
5049
|
kind: "seqExpr",
|
|
4848
5050
|
stmts: [
|
|
4849
5051
|
{ kind: "varDecl", localId: baseLocal.id, init: base, loc },
|
|
@@ -4876,7 +5078,8 @@ export function lowerClassExpression(lowerer, expr) {
|
|
|
4876
5078
|
result: clsRef,
|
|
4877
5079
|
type: value.type,
|
|
4878
5080
|
loc,
|
|
4879
|
-
}
|
|
5081
|
+
};
|
|
5082
|
+
return initializeRuntimeStatics(lowerer, info, built, binding);
|
|
4880
5083
|
}
|
|
4881
5084
|
if (info.localClass?.baseExpression && info.base && value.kind === "classRef") {
|
|
4882
5085
|
const loc = locOf(expr);
|
|
@@ -4891,7 +5094,7 @@ export function lowerClassExpression(lowerer, expr) {
|
|
|
4891
5094
|
const clsRef = { kind: "varRef", localId: clsLocal.id, type: value.type, loc };
|
|
4892
5095
|
const basePrototype = classPrototypeData(lowerer, info.base, loc, baseRef);
|
|
4893
5096
|
info.localPrototypeData = true;
|
|
4894
|
-
|
|
5097
|
+
const built = {
|
|
4895
5098
|
kind: "seqExpr",
|
|
4896
5099
|
stmts: [
|
|
4897
5100
|
{ kind: "varDecl", localId: baseLocal.id, init: base, loc },
|
|
@@ -4930,11 +5133,52 @@ export function lowerClassExpression(lowerer, expr) {
|
|
|
4930
5133
|
result: clsRef,
|
|
4931
5134
|
type: value.type,
|
|
4932
5135
|
loc,
|
|
4933
|
-
}
|
|
5136
|
+
};
|
|
5137
|
+
return initializeRuntimeStatics(lowerer, info, built, binding);
|
|
4934
5138
|
}
|
|
4935
|
-
|
|
4936
|
-
|
|
4937
|
-
|
|
5139
|
+
if (!info.localClass)
|
|
5140
|
+
return value;
|
|
5141
|
+
const classValue = initializeRuntimeStatics(lowerer, info, value.kind === "classRef" ? { ...value, captures: info.localClass.captureSources } : value, binding);
|
|
5142
|
+
// The base resolves statically here, but Node still evaluates the
|
|
5143
|
+
// heritage expression each time the class definition runs, first.
|
|
5144
|
+
const heritage = heritageWithEffects(expr);
|
|
5145
|
+
if (heritage === undefined)
|
|
5146
|
+
return classValue;
|
|
5147
|
+
return {
|
|
5148
|
+
kind: "seqExpr",
|
|
5149
|
+
stmts: [lowerer.lowerExprStatement(heritage)],
|
|
5150
|
+
result: classValue,
|
|
5151
|
+
type: classValue.type,
|
|
5152
|
+
loc: classValue.loc,
|
|
5153
|
+
};
|
|
5154
|
+
}
|
|
5155
|
+
/** The `extends` expression of `decl` when evaluating it can have effects
|
|
5156
|
+
* (a call, construction, assignment, update, delete, await or yield
|
|
5157
|
+
* outside nested functions). */
|
|
5158
|
+
function heritageWithEffects(decl) {
|
|
5159
|
+
const heritage = decl.heritageClauses?.nodes.find((clause) => clause.token === ts.SyntaxKind.ExtendsKeyword)?.types?.nodes[0]?.expression;
|
|
5160
|
+
if (heritage === undefined)
|
|
5161
|
+
return undefined;
|
|
5162
|
+
const effects = (node) => {
|
|
5163
|
+
if (ts.isFunctionLike(node) || ts.isClassDeclaration(node) || ts.isClassExpression(node))
|
|
5164
|
+
return false;
|
|
5165
|
+
if (ts.isCallExpression(node) ||
|
|
5166
|
+
ts.isNewExpression(node) ||
|
|
5167
|
+
ts.isTaggedTemplateExpression(node) ||
|
|
5168
|
+
ts.isDeleteExpression(node) ||
|
|
5169
|
+
ts.isAwaitExpression(node) ||
|
|
5170
|
+
ts.isYieldExpression(node) ||
|
|
5171
|
+
(ts.isPrefixUnaryExpression(node) &&
|
|
5172
|
+
(node.operator === ts.SyntaxKind.PlusPlusToken ||
|
|
5173
|
+
node.operator === ts.SyntaxKind.MinusMinusToken)) ||
|
|
5174
|
+
ts.isPostfixUnaryExpression(node) ||
|
|
5175
|
+
(ts.isBinaryExpression(node) &&
|
|
5176
|
+
node.operatorToken.kind >= ts.SyntaxKind.FirstAssignment &&
|
|
5177
|
+
node.operatorToken.kind <= ts.SyntaxKind.LastAssignment))
|
|
5178
|
+
return true;
|
|
5179
|
+
return ts.forEachChild(node, (child) => effects(child) || undefined) ?? false;
|
|
5180
|
+
};
|
|
5181
|
+
return effects(heritage) ? heritage : undefined;
|
|
4938
5182
|
}
|
|
4939
5183
|
/** The EXACT class a receiver expression is statically known to BE (not
|
|
4940
5184
|
* merely be typed by): the class name itself, or a `const` binding
|
|
@@ -5195,6 +5439,13 @@ function staticCallOn(lowerer, call, access, info, throughValue) {
|
|
|
5195
5439
|
const runtimeStatic = directRuntimeStaticCall(lowerer, call, access, info, throughValue);
|
|
5196
5440
|
if (runtimeStatic)
|
|
5197
5441
|
return runtimeStatic;
|
|
5442
|
+
// Date's statics through a class declared `extends Date`
|
|
5443
|
+
// (`Moment.UTC(...)`), which inherits them.
|
|
5444
|
+
if (dateRootOf(info) && !findStaticOn(lowerer, info, access.name.text)) {
|
|
5445
|
+
const date = lowerDateStaticCall(lowerer, call, access.name.text);
|
|
5446
|
+
if (date)
|
|
5447
|
+
return date;
|
|
5448
|
+
}
|
|
5198
5449
|
if ((hasRuntimeStatics(info) && !findStaticOn(lowerer, info, access.name.text)?.field) ||
|
|
5199
5450
|
(info.callableBase &&
|
|
5200
5451
|
!findStaticOn(lowerer, info, access.name.text) &&
|
|
@@ -5229,7 +5480,7 @@ function staticCallOn(lowerer, call, access, info, throughValue) {
|
|
|
5229
5480
|
// through-a-VALUE shadowing fence as plain statics.
|
|
5230
5481
|
const gfound = findGenericStaticOn(lowerer, info, access.name.text);
|
|
5231
5482
|
if (!gfound)
|
|
5232
|
-
return
|
|
5483
|
+
return classConstructorCall(lowerer, call, access, info);
|
|
5233
5484
|
if (throughValue && staticShadowBelow(info, access.name.text)) {
|
|
5234
5485
|
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)`);
|
|
5235
5486
|
}
|
|
@@ -5298,6 +5549,74 @@ function staticCallOn(lowerer, call, access, info, throughValue) {
|
|
|
5298
5549
|
const args = lowerer.completeArgs(call.arguments.nodes, found.method.params, loc, call);
|
|
5299
5550
|
return { kind: "call", callee: fnName, args, type: found.method.ret, loc };
|
|
5300
5551
|
}
|
|
5552
|
+
/** `C.call(thisArg, ...)` / `C.apply(thisArg, args)` on a program class that
|
|
5553
|
+
* declares no such static: Function.prototype.call/apply invoke the class
|
|
5554
|
+
* constructor without `new`, which throws Node's TypeError "Class
|
|
5555
|
+
* constructor C cannot be invoked without 'new'" after the arguments are
|
|
5556
|
+
* evaluated (and, for apply, after the argument list is read). The boxed
|
|
5557
|
+
* class value's call path throws exactly that. Neither expando statics nor
|
|
5558
|
+
* writes through untyped values can give a class an own `call` or `apply`.
|
|
5559
|
+
* A receiver that may hold a subclass at run time (a class value, `this` in
|
|
5560
|
+
* a static method) needs every subclass to lack such a static too. The
|
|
5561
|
+
* receiver must be one the caller does not evaluate again (a name, `this`,
|
|
5562
|
+
* or a namespace member). Null otherwise. */
|
|
5563
|
+
function classConstructorCall(lowerer, call, access, info) {
|
|
5564
|
+
const name = access.name.text;
|
|
5565
|
+
const receiver = access.expression;
|
|
5566
|
+
if ((name !== "call" && name !== "apply") ||
|
|
5567
|
+
!info.decl ||
|
|
5568
|
+
info.def.runtime ||
|
|
5569
|
+
info.builtinError ||
|
|
5570
|
+
info.builtinEmitter ||
|
|
5571
|
+
info.builtinStream ||
|
|
5572
|
+
info.builtinEventTarget ||
|
|
5573
|
+
info.runtimeStatics?.length ||
|
|
5574
|
+
declaresStaticAbove(info, name) ||
|
|
5575
|
+
(exactClassOfReceiver(lowerer, receiver) !== info &&
|
|
5576
|
+
info.subclasses.some((subclass) => declaresStaticBelow(subclass, name))) ||
|
|
5577
|
+
call.arguments.nodes.some(ts.isSpreadElement) ||
|
|
5578
|
+
!(ts.isIdentifier(receiver) ||
|
|
5579
|
+
receiver.kind === ts.SyntaxKind.ThisKeyword ||
|
|
5580
|
+
(ts.isPropertyAccessExpression(receiver) && nsMemberIdentOf(lowerer, receiver) !== null)))
|
|
5581
|
+
return null;
|
|
5582
|
+
return {
|
|
5583
|
+
kind: "dynInvoke",
|
|
5584
|
+
recv: lowerer.lowerExprExpecting(receiver, DYN),
|
|
5585
|
+
method: name,
|
|
5586
|
+
calleeName: ts.getTextOfNode(access),
|
|
5587
|
+
args: call.arguments.nodes.map((argument) => lowerer.lowerExprExpecting(argument, DYN)),
|
|
5588
|
+
type: DYN,
|
|
5589
|
+
loc: locOf(call),
|
|
5590
|
+
};
|
|
5591
|
+
}
|
|
5592
|
+
/** Whether `info`'s declaration has a static member that may be named `name`
|
|
5593
|
+
* (a method, field or accessor of that name, or a computed name), or `info`
|
|
5594
|
+
* has no declaration to tell. */
|
|
5595
|
+
function declaresStatic(info, name) {
|
|
5596
|
+
if (!info.decl)
|
|
5597
|
+
return true;
|
|
5598
|
+
return info.decl.members.nodes.some((member) => member.name !== undefined &&
|
|
5599
|
+
ts.canHaveModifiers(member) &&
|
|
5600
|
+
ts.getModifiers(member)?.some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword) ===
|
|
5601
|
+
true &&
|
|
5602
|
+
(ts.isComputedPropertyName(member.name) ||
|
|
5603
|
+
((ts.isIdentifier(member.name) || ts.isStringLiteral(member.name)) &&
|
|
5604
|
+
member.name.text === name)));
|
|
5605
|
+
}
|
|
5606
|
+
/** declaresStatic over `info` and its bases, which it inherits statics from. */
|
|
5607
|
+
function declaresStaticAbove(info, name) {
|
|
5608
|
+
for (let c = info; c; c = c.base)
|
|
5609
|
+
if (declaresStatic(c, name))
|
|
5610
|
+
return true;
|
|
5611
|
+
return false;
|
|
5612
|
+
}
|
|
5613
|
+
/** declaresStatic over `info` and its subclasses, or runtime statics, which a
|
|
5614
|
+
* function-local JavaScript class defines at run time. */
|
|
5615
|
+
function declaresStaticBelow(info, name) {
|
|
5616
|
+
return (declaresStatic(info, name) ||
|
|
5617
|
+
!!info.runtimeStatics?.length ||
|
|
5618
|
+
info.subclasses.some((subclass) => declaresStaticBelow(subclass, name)));
|
|
5619
|
+
}
|
|
5301
5620
|
/** `C.m(...)` where `m` is a static method that a function-local
|
|
5302
5621
|
* JavaScript class defines at runtime (a factory's `class extends base`),
|
|
5303
5622
|
* inherited by `C` through its statically known base chain. When the body
|
|
@@ -5685,11 +6004,94 @@ export function inHierarchy(lowerer, info) {
|
|
|
5685
6004
|
* dynamically. Abstract re-declarations don't count (they carry no
|
|
5686
6005
|
* implementation; the concrete ones below them do, via the recursion). */
|
|
5687
6006
|
export function overrideBelow(lowerer, info, name) {
|
|
6007
|
+
if (info.decl !== null && localOverrideBelow(lowerer, info.decl, name))
|
|
6008
|
+
return true;
|
|
5688
6009
|
return info.subclasses.some((s) => {
|
|
5689
6010
|
const m = s.methods.get(name);
|
|
5690
6011
|
return (m !== undefined && m.abstract !== true) || lowerer.overrideBelow(s, name);
|
|
5691
6012
|
});
|
|
5692
6013
|
}
|
|
6014
|
+
/** The class node an `extends` clause names: a class declaration, or the
|
|
6015
|
+
* class expression a variable is initialized with. */
|
|
6016
|
+
function extendedClassNode(lowerer, decl) {
|
|
6017
|
+
const heritage = decl.heritageClauses?.nodes.find((clause) => clause.token === ts.SyntaxKind.ExtendsKeyword)?.types?.nodes[0]?.expression;
|
|
6018
|
+
if (!heritage || !ts.isIdentifier(heritage))
|
|
6019
|
+
return null;
|
|
6020
|
+
let symbol = lowerer.checker.getSymbolAtLocation(heritage);
|
|
6021
|
+
if (symbol && symbol.flags & ts.SymbolFlags.Alias)
|
|
6022
|
+
symbol = lowerer.checker.getAliasedSymbol(symbol);
|
|
6023
|
+
const target = symbol?.valueDeclaration;
|
|
6024
|
+
if (!target)
|
|
6025
|
+
return null;
|
|
6026
|
+
if (ts.isClassDeclaration(target) || ts.isClassExpression(target))
|
|
6027
|
+
return target;
|
|
6028
|
+
if (ts.isVariableDeclaration(target) && target.initializer) {
|
|
6029
|
+
let init = target.initializer;
|
|
6030
|
+
while (ts.isParenthesizedExpression(init))
|
|
6031
|
+
init = init.expression;
|
|
6032
|
+
if (ts.isClassExpression(init))
|
|
6033
|
+
return init;
|
|
6034
|
+
}
|
|
6035
|
+
return null;
|
|
6036
|
+
}
|
|
6037
|
+
/** The function-local classes that extend the class node `base`. Function
|
|
6038
|
+
* bodies lower on demand, after code that may already call methods of a
|
|
6039
|
+
* class their local classes extend, so such a subclass is not yet in its
|
|
6040
|
+
* base's `subclasses` when those calls lower. */
|
|
6041
|
+
function localSubclassesOf(lowerer, base) {
|
|
6042
|
+
let index = lowerer.localSubclassIndex;
|
|
6043
|
+
if (index === null) {
|
|
6044
|
+
index = new Map();
|
|
6045
|
+
const files = lowerer.moduleOrder.length > 0 ? lowerer.moduleOrder : [lowerer.entry];
|
|
6046
|
+
for (const sf of files) {
|
|
6047
|
+
if (!sf.text.includes("extends"))
|
|
6048
|
+
continue;
|
|
6049
|
+
ts.walkPreorder(sf, (node) => {
|
|
6050
|
+
if ((ts.isClassDeclaration(node) || ts.isClassExpression(node)) &&
|
|
6051
|
+
node.heritageClauses !== undefined &&
|
|
6052
|
+
functionLocalClass(node)) {
|
|
6053
|
+
const extended = extendedClassNode(lowerer, node);
|
|
6054
|
+
if (extended) {
|
|
6055
|
+
const list = index.get(extended);
|
|
6056
|
+
if (list)
|
|
6057
|
+
list.push(node);
|
|
6058
|
+
else
|
|
6059
|
+
index.set(extended, [node]);
|
|
6060
|
+
}
|
|
6061
|
+
}
|
|
6062
|
+
return undefined;
|
|
6063
|
+
});
|
|
6064
|
+
}
|
|
6065
|
+
lowerer.localSubclassIndex = index;
|
|
6066
|
+
}
|
|
6067
|
+
return index.get(base) ?? [];
|
|
6068
|
+
}
|
|
6069
|
+
/** True when a function-local class below the class node `base` declares
|
|
6070
|
+
* a concrete instance method or accessor `name` (accessors are keyed
|
|
6071
|
+
* `get:x` and `set:x`). A call on `base`'s class then dispatches on the
|
|
6072
|
+
* receiver; devirtualization turns it back into a direct call when no such
|
|
6073
|
+
* override is reachable. */
|
|
6074
|
+
function localOverrideBelow(lowerer, base, name, visited) {
|
|
6075
|
+
const subclasses = localSubclassesOf(lowerer, base);
|
|
6076
|
+
if (subclasses.length === 0)
|
|
6077
|
+
return false;
|
|
6078
|
+
visited ??= new Set();
|
|
6079
|
+
if (visited.has(base))
|
|
6080
|
+
return false;
|
|
6081
|
+
visited.add(base);
|
|
6082
|
+
const accessor = name.startsWith("get:") ? "get" : name.startsWith("set:") ? "set" : null;
|
|
6083
|
+
const member = accessor ? name.slice(4) : name;
|
|
6084
|
+
return subclasses.some((sub) => sub.members.nodes.some((m) => (accessor === null
|
|
6085
|
+
? ts.isMethodDeclaration(m)
|
|
6086
|
+
: accessor === "get"
|
|
6087
|
+
? ts.isGetAccessorDeclaration(m)
|
|
6088
|
+
: ts.isSetAccessorDeclaration(m)) &&
|
|
6089
|
+
m.body !== undefined &&
|
|
6090
|
+
m.name !== undefined &&
|
|
6091
|
+
(ts.isIdentifier(m.name) || ts.isStringLiteral(m.name)) &&
|
|
6092
|
+
m.name.text === member &&
|
|
6093
|
+
!ts.getModifiers(m)?.some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword)) || localOverrideBelow(lowerer, sub, name, visited));
|
|
6094
|
+
}
|
|
5693
6095
|
/** The nearest GENERIC-method declaration of `name` at/above `info` —
|
|
5694
6096
|
* findMethodOn's twin over the genericMethods tables. */
|
|
5695
6097
|
export function findGenericMethodOn(lowerer, info, name) {
|
|
@@ -6288,7 +6690,7 @@ function lowerClassCtorInner(lowerer, info) {
|
|
|
6288
6690
|
lowerer.ctx.argumentsLocal = local;
|
|
6289
6691
|
}
|
|
6290
6692
|
body.push(...declared.prologue);
|
|
6291
|
-
if (!ctorBase && !info.callableBase) {
|
|
6693
|
+
if (!ctorBase && !info.callableBase && !info.extendsDate) {
|
|
6292
6694
|
// Node's base-class order: field initializers run at the start
|
|
6293
6695
|
// of construction, the parameter-property assignments open the
|
|
6294
6696
|
// constructor body (probed — a field initializer reading a
|
|
@@ -6303,7 +6705,7 @@ function lowerClassCtorInner(lowerer, info) {
|
|
|
6303
6705
|
}
|
|
6304
6706
|
}
|
|
6305
6707
|
else {
|
|
6306
|
-
if (ctorBase || info.callableBase) {
|
|
6708
|
+
if (ctorBase || info.callableBase || info.extendsDate) {
|
|
6307
6709
|
// Synthetic forwarding params (the inherited ABI signature).
|
|
6308
6710
|
// Nothing references them by symbol — only the super call below,
|
|
6309
6711
|
// which forwards the already-completed values UNCHANGED (defaults
|
|
@@ -6486,7 +6888,7 @@ export function classIteratorDrainCall(lowerer, src, loc, elemT) {
|
|
|
6486
6888
|
const key = `${cit.className}:${typeKey(outElem)}`;
|
|
6487
6889
|
let name = lowerer.iterDrainHelpers.get(key);
|
|
6488
6890
|
if (!name) {
|
|
6489
|
-
name =
|
|
6891
|
+
name = keyedHelperName(lowerer, "%iter.drain", key);
|
|
6490
6892
|
lowerer.iterDrainHelpers.set(key, name);
|
|
6491
6893
|
const recvT = { kind: "object", className: cit.className };
|
|
6492
6894
|
const recvRef = { kind: "varRef", localId: "r.0", type: recvT, loc };
|
|
@@ -6594,7 +6996,7 @@ export function classIteratorRestDrainCall(lowerer, cit, itVal, loc) {
|
|
|
6594
6996
|
const key = `it:${cit.iterT.className}`;
|
|
6595
6997
|
let name = lowerer.iterDrainHelpers.get(key);
|
|
6596
6998
|
if (!name) {
|
|
6597
|
-
name =
|
|
6999
|
+
name = keyedHelperName(lowerer, "%iter.drain", key);
|
|
6598
7000
|
lowerer.iterDrainHelpers.set(key, name);
|
|
6599
7001
|
const itRef = { kind: "varRef", localId: "it.0", type: cit.iterT, loc };
|
|
6600
7002
|
const outRef = { kind: "varRef", localId: "out.0", type: outT, loc };
|
|
@@ -7089,12 +7491,39 @@ function superCallInStatementPosition(call) {
|
|
|
7089
7491
|
const parent = node.parent;
|
|
7090
7492
|
if (ts.isExpressionStatement(parent))
|
|
7091
7493
|
return true;
|
|
7494
|
+
if (ts.isIfStatement(parent)) {
|
|
7495
|
+
const lead = superConditionLead(parent.expression);
|
|
7496
|
+
return lead !== null && call.pos >= lead.left.pos && call.end <= lead.left.end;
|
|
7497
|
+
}
|
|
7092
7498
|
const comma = ts.isBinaryExpression(parent) && parent.operatorToken.kind === ts.SyntaxKind.CommaToken;
|
|
7093
7499
|
if (!comma && !ts.isParenthesizedExpression(parent))
|
|
7094
7500
|
return false;
|
|
7095
7501
|
node = parent;
|
|
7096
7502
|
}
|
|
7097
7503
|
}
|
|
7504
|
+
/** The comma chain of an `if` condition whose leading operands hold a
|
|
7505
|
+
* super() call (`if (super(), r === 0) throw ...`, as minifiers join a
|
|
7506
|
+
* super statement with the next test), or null. The if statement runs the
|
|
7507
|
+
* chain's left operand as a statement first and tests its right operand,
|
|
7508
|
+
* which is what the comma evaluates. */
|
|
7509
|
+
export function superConditionLead(cond) {
|
|
7510
|
+
let expr = cond;
|
|
7511
|
+
while (ts.isParenthesizedExpression(expr))
|
|
7512
|
+
expr = expr.expression;
|
|
7513
|
+
if (!ts.isBinaryExpression(expr) || expr.operatorToken.kind !== ts.SyntaxKind.CommaToken)
|
|
7514
|
+
return null;
|
|
7515
|
+
const holdsSuperCall = (operand) => {
|
|
7516
|
+
let e = operand;
|
|
7517
|
+
while (ts.isParenthesizedExpression(e))
|
|
7518
|
+
e = e.expression;
|
|
7519
|
+
if (ts.isCallExpression(e))
|
|
7520
|
+
return e.expression.kind === ts.SyntaxKind.SuperKeyword;
|
|
7521
|
+
return (ts.isBinaryExpression(e) &&
|
|
7522
|
+
e.operatorToken.kind === ts.SyntaxKind.CommaToken &&
|
|
7523
|
+
(holdsSuperCall(e.left) || holdsSuperCall(e.right)));
|
|
7524
|
+
};
|
|
7525
|
+
return holdsSuperCall(expr.left) ? expr : null;
|
|
7526
|
+
}
|
|
7098
7527
|
/** Super statements initialize the base and then the derived fields on
|
|
7099
7528
|
* whichever control-flow path executes. Repeated calls are explicitly
|
|
7100
7529
|
* refused until native layouts can allocate a second receiver. */
|
|
@@ -7126,9 +7555,11 @@ export function lowerDerivedCtorBody(lowerer, info, thisLocal, forward) {
|
|
|
7126
7555
|
loc,
|
|
7127
7556
|
},
|
|
7128
7557
|
];
|
|
7129
|
-
if (info.callableBase) {
|
|
7558
|
+
if (info.callableBase || info.extendsDate) {
|
|
7130
7559
|
if (superCall.arguments.nodes.some(ts.isSpreadElement))
|
|
7131
|
-
lowerer.unsupported("SC1090", superCall,
|
|
7560
|
+
lowerer.unsupported("SC1090", superCall, info.extendsDate
|
|
7561
|
+
? "spreading super arguments into the Date constructor"
|
|
7562
|
+
: "spreading explicit super arguments into an ordinary constructor");
|
|
7132
7563
|
const pack = {
|
|
7133
7564
|
kind: "dynArrLit",
|
|
7134
7565
|
elems: superCall.arguments.nodes.map((arg) => lowerer.lowerExprExpecting(arg, DYN)),
|
|
@@ -7271,6 +7702,8 @@ export function superCallStmt(lowerer, info, thisLocal, args, loc) {
|
|
|
7271
7702
|
type: { kind: "object", className: info.def.name },
|
|
7272
7703
|
loc,
|
|
7273
7704
|
};
|
|
7705
|
+
if (info.extendsDate)
|
|
7706
|
+
return dateSuperCall(thisRef, info, args[0], loc);
|
|
7274
7707
|
if (info.callableBase)
|
|
7275
7708
|
return {
|
|
7276
7709
|
kind: "exprStmt",
|
|
@@ -7351,8 +7784,10 @@ export function superCallStmt(lowerer, info, thisLocal, args, loc) {
|
|
|
7351
7784
|
// The SYNTHESIZED constructor of a ctor-less stream subclass:
|
|
7352
7785
|
// super() with default options (underscore methods still bind; a
|
|
7353
7786
|
// construction passing options requires a declared constructor —
|
|
7354
|
-
// lowerNew fences that). Zero options ⇒
|
|
7355
|
-
|
|
7787
|
+
// lowerNew fences that). Zero options ⇒ the init stmt, then the
|
|
7788
|
+
// class's _writev/_construct follow-ups.
|
|
7789
|
+
const stmts = lowerStreamSuperCall(lowerer, info, base, [], thisLocal, loc, info.decl ?? info.ctor);
|
|
7790
|
+
return stmts.length === 1 ? stmts[0] : { kind: "block", body: stmts, loc };
|
|
7356
7791
|
}
|
|
7357
7792
|
lowerer.noteSuperConstructorEdge(`%${base.def.name}.constructor`);
|
|
7358
7793
|
const call = {
|
|
@@ -7373,6 +7808,22 @@ export function superCallStmt(lowerer, info, thisLocal, args, loc) {
|
|
|
7373
7808
|
* super dispatch is static in JS too, never through the dynamic class. */
|
|
7374
7809
|
export function lowerSuperMethodCall(lowerer, call, access) {
|
|
7375
7810
|
const cls = lowerer.currentClass;
|
|
7811
|
+
// `super.toISOString()` in a class declared `extends Date`.
|
|
7812
|
+
if (cls?.extendsDate && !cls.base) {
|
|
7813
|
+
const thisL = lowerer.resolveThis();
|
|
7814
|
+
if (!thisL)
|
|
7815
|
+
lowerer.unsupported("SC1080", access);
|
|
7816
|
+
const thisRef = {
|
|
7817
|
+
kind: "varRef",
|
|
7818
|
+
localId: thisL.id,
|
|
7819
|
+
type: thisL.type,
|
|
7820
|
+
loc: locOf(call),
|
|
7821
|
+
};
|
|
7822
|
+
const date = lowerDateSuperMethodCall(lowerer, call, access.name.text, cls, thisRef);
|
|
7823
|
+
if (date)
|
|
7824
|
+
return date;
|
|
7825
|
+
lowerer.unsupported("SC1090", access, `'super.${access.name.text}' (Date.prototype does not declare it)`);
|
|
7826
|
+
}
|
|
7376
7827
|
if (!cls?.base) {
|
|
7377
7828
|
// tsc rejects super outside derived-class bodies first; defensive.
|
|
7378
7829
|
lowerer.unsupported("SC1090", access, "'super' outside a derived class");
|
|
@@ -7420,6 +7871,18 @@ export function lowerSuperMethodCall(lowerer, call, access) {
|
|
|
7420
7871
|
// `super.dispatchEvent(e)`, `super.preventDefault()`: the inherited
|
|
7421
7872
|
// runtime members over this method's own `this` (subclasses cannot
|
|
7422
7873
|
// override them, so the static answer is the runtime's).
|
|
7874
|
+
if (dateRootOf(cls.base) && isDatePrototypeMethod(access.name.text)) {
|
|
7875
|
+
const thisL = lowerer.resolveThis();
|
|
7876
|
+
if (!thisL)
|
|
7877
|
+
lowerer.unsupported("SC1080", access);
|
|
7878
|
+
const thisRef = {
|
|
7879
|
+
kind: "varRef",
|
|
7880
|
+
localId: thisL.id,
|
|
7881
|
+
type: thisL.type,
|
|
7882
|
+
loc: locOf(call),
|
|
7883
|
+
};
|
|
7884
|
+
return lowerDateSuperMethodCall(lowerer, call, access.name.text, cls.base, thisRef);
|
|
7885
|
+
}
|
|
7423
7886
|
if (eventTargetApiMethod(cls.base, access.name.text)) {
|
|
7424
7887
|
const thisL = lowerer.resolveThis();
|
|
7425
7888
|
if (!thisL)
|
|
@@ -8057,6 +8520,13 @@ export function lowerNew(lowerer, expr) {
|
|
|
8057
8520
|
if (httpServer)
|
|
8058
8521
|
return httpServer;
|
|
8059
8522
|
}
|
|
8523
|
+
// `new tls.TLSSocket(socket, options)` — the server-mode wrap of an open
|
|
8524
|
+
// socket (lower-server).
|
|
8525
|
+
{
|
|
8526
|
+
const tlsSocket = lowerTlsSocketNew(lowerer, expr);
|
|
8527
|
+
if (tlsSocket)
|
|
8528
|
+
return tlsSocket;
|
|
8529
|
+
}
|
|
8060
8530
|
// `new http.Agent(opts?)` / `new https.Agent(opts?)` — the Agent
|
|
8061
8531
|
// handle (lower-server): getName/destroy/counters through the dyn
|
|
8062
8532
|
// handle ops, requests thread it via the agent option.
|
|
@@ -8555,6 +9025,40 @@ export function lowerNew(lowerer, expr) {
|
|
|
8555
9025
|
loc,
|
|
8556
9026
|
};
|
|
8557
9027
|
}
|
|
9028
|
+
// A FinalizationRegistry construction: register and unregister keep
|
|
9029
|
+
// their bookkeeping, and the cleanup callback never runs, which
|
|
9030
|
+
// ECMAScript allows (scr_finalization_registry_new).
|
|
9031
|
+
if (symbol !== null &&
|
|
9032
|
+
ts.symbolName(symbol) === "FinalizationRegistry" &&
|
|
9033
|
+
lowerer.isStdlibSymbol(symbol)) {
|
|
9034
|
+
const args = expr.arguments?.nodes ?? [];
|
|
9035
|
+
if (args.some(ts.isSpreadElement)) {
|
|
9036
|
+
lowerer.unsupported("SC1090", expr, "FinalizationRegistry construction with spread arguments");
|
|
9037
|
+
}
|
|
9038
|
+
const cleanup = args[0] ? lowerer.lowerExprExpecting(args[0], DYN) : dynUndefinedExpr(loc);
|
|
9039
|
+
const surplus = args.slice(1).map((arg) => lowerer.lowerExpr(arg));
|
|
9040
|
+
const created = {
|
|
9041
|
+
kind: "libCall",
|
|
9042
|
+
fn: "finalizationRegistry.new",
|
|
9043
|
+
args: [cleanup],
|
|
9044
|
+
type: DYN,
|
|
9045
|
+
loc,
|
|
9046
|
+
};
|
|
9047
|
+
if (surplus.length === 0)
|
|
9048
|
+
return created;
|
|
9049
|
+
// Surplus arguments evaluate after the cleanup argument and are ignored.
|
|
9050
|
+
const local = lowerer.declareHiddenLocal("%finalizationCleanup", DYN);
|
|
9051
|
+
return {
|
|
9052
|
+
kind: "seqExpr",
|
|
9053
|
+
stmts: [
|
|
9054
|
+
{ kind: "varDecl", localId: local.id, init: cleanup, loc },
|
|
9055
|
+
...surplus.map((value) => ({ kind: "exprStmt", expr: value, loc })),
|
|
9056
|
+
],
|
|
9057
|
+
result: { ...created, args: [varRef(local.id, DYN, loc)] },
|
|
9058
|
+
type: DYN,
|
|
9059
|
+
loc,
|
|
9060
|
+
};
|
|
9061
|
+
}
|
|
8558
9062
|
// `new Set<T>()`: construct + bulk add from supported values,
|
|
8559
9063
|
// including live collection cursors. Duplicates collapse in insertion order.
|
|
8560
9064
|
if (ts.isIdentifier(identifier) && lowerer.isStdlibGlobal(identifier, "Set")) {
|
|
@@ -8735,7 +9239,6 @@ export function lowerNew(lowerer, expr) {
|
|
|
8735
9239
|
Number: "boxed wrapper objects have no lowering — use the number primitive",
|
|
8736
9240
|
Boolean: "boxed wrapper objects have no lowering — use the boolean primitive",
|
|
8737
9241
|
WeakRef: "deref()-after-collect exposes GC timing — genuinely dynamic; hold a strong reference instead",
|
|
8738
|
-
FinalizationRegistry: "finalization callbacks expose GC timing — genuinely dynamic; release resources explicitly instead",
|
|
8739
9242
|
SharedArrayBuffer: "no shared-memory threads exist in a compiled program — Uint8Array is the byte storage",
|
|
8740
9243
|
ArrayBuffer: "native ArrayBuffer construction supports fixed-length storage; resizable buffers remain unsupported",
|
|
8741
9244
|
Proxy: "native Proxy construction requires checked-native plain targets and handlers",
|
|
@@ -8782,7 +9285,7 @@ export function lowerNew(lowerer, expr) {
|
|
|
8782
9285
|
const key = `x509.record:${isBytes ? "bytes" : "str"}`;
|
|
8783
9286
|
let helper = lowerer.valueHelpers.get(key);
|
|
8784
9287
|
if (!helper) {
|
|
8785
|
-
helper =
|
|
9288
|
+
helper = keyedHelperName(lowerer, "%x509.record", key);
|
|
8786
9289
|
lowerer.valueHelpers.set(key, helper);
|
|
8787
9290
|
const dataT = data.type;
|
|
8788
9291
|
const dRef = { kind: "varRef", localId: "d.0", type: dataT, loc };
|
|
@@ -9024,4 +9527,36 @@ function genericFieldFnNodeOf(member) {
|
|
|
9024
9527
|
}
|
|
9025
9528
|
return null;
|
|
9026
9529
|
}
|
|
9530
|
+
/** Whether a JavaScript class's own binding is the target of
|
|
9531
|
+
* `Object.defineProperty`/`defineProperties` in its file
|
|
9532
|
+
* (`Object.defineProperty(Definition, "name", { value })`): its constructor
|
|
9533
|
+
* then needs a live own-property table. */
|
|
9534
|
+
function definedThroughReflection(lowerer, decl) {
|
|
9535
|
+
const name = decl.name;
|
|
9536
|
+
const sf = ts.getSourceFileOfNode(decl);
|
|
9537
|
+
if (name === undefined || !sf.text.includes("definePropert"))
|
|
9538
|
+
return false;
|
|
9539
|
+
const symbol = lowerer.checker.getSymbolAtLocation(name);
|
|
9540
|
+
if (symbol === undefined)
|
|
9541
|
+
return false;
|
|
9542
|
+
let found = false;
|
|
9543
|
+
ts.walkPreorder(sf, (node) => {
|
|
9544
|
+
if (found)
|
|
9545
|
+
return "stop";
|
|
9546
|
+
if (ts.isCallExpression(node) &&
|
|
9547
|
+
ts.isPropertyAccessExpression(node.expression) &&
|
|
9548
|
+
(node.expression.name.text === "defineProperty" ||
|
|
9549
|
+
node.expression.name.text === "defineProperties") &&
|
|
9550
|
+
lowerer.stdlibGlobalMember(node.expression, "Object") !== null) {
|
|
9551
|
+
const target = node.arguments.nodes[0];
|
|
9552
|
+
if (target !== undefined &&
|
|
9553
|
+
ts.isIdentifier(target) &&
|
|
9554
|
+
target.text === name.text &&
|
|
9555
|
+
lowerer.checker.getSymbolAtLocation(target) === symbol)
|
|
9556
|
+
found = true;
|
|
9557
|
+
}
|
|
9558
|
+
return undefined;
|
|
9559
|
+
});
|
|
9560
|
+
return found;
|
|
9561
|
+
}
|
|
9027
9562
|
//# sourceMappingURL=lower-classes.js.map
|