@scriptc/compiler 0.4.2 → 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 +397 -37
- package/dist/backend/cycle-analysis.d.ts +4 -1
- package/dist/backend/cycle-analysis.js +6 -4
- package/dist/backend/cycle-analysis.js.map +1 -1
- package/dist/backend/cycle-analysis.test.js +55 -0
- package/dist/backend/cycle-analysis.test.js.map +1 -1
- package/dist/backend/cycle-mutability.d.ts +7 -0
- package/dist/backend/cycle-mutability.js +19 -1
- package/dist/backend/cycle-mutability.js.map +1 -1
- package/dist/backend/executable-features.js +2 -0
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/immutability.d.ts +6 -3
- package/dist/backend/immutability.js +33 -29
- package/dist/backend/immutability.js.map +1 -1
- package/dist/backend/library-pack.js +1 -0
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/llvm/alloc.d.ts +16 -1
- package/dist/backend/llvm/alloc.js +54 -4
- package/dist/backend/llvm/alloc.js.map +1 -1
- package/dist/backend/llvm/appended-array-literals.d.ts +2 -1
- package/dist/backend/llvm/appended-array-literals.js +44 -36
- package/dist/backend/llvm/appended-array-literals.js.map +1 -1
- package/dist/backend/llvm/appended-array-literals.test.js +4 -3
- package/dist/backend/llvm/appended-array-literals.test.js.map +1 -1
- package/dist/backend/llvm/array-search.d.ts +4 -3
- package/dist/backend/llvm/array-search.js +21 -9
- package/dist/backend/llvm/array-search.js.map +1 -1
- package/dist/backend/llvm/blocks.d.ts +1 -1
- package/dist/backend/llvm/blocks.js +2 -2
- package/dist/backend/llvm/blocks.js.map +1 -1
- package/dist/backend/llvm/byte-windows.js +2 -0
- package/dist/backend/llvm/byte-windows.js.map +1 -1
- package/dist/backend/llvm/bytes-alias.d.ts +6 -1
- package/dist/backend/llvm/bytes-alias.js +8 -2
- package/dist/backend/llvm/bytes-alias.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.d.ts +47 -5
- package/dist/backend/llvm/bytes-loop-versions.js +473 -32
- package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.test.js +258 -2
- package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
- package/dist/backend/llvm/checked-value-lifetimes.js +2 -0
- package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
- package/dist/backend/llvm/classes.d.ts +7 -5
- package/dist/backend/llvm/classes.js +44 -20
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +167 -7
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +9 -3
- package/dist/backend/llvm/common.js +9 -3
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.d.ts +2 -1
- package/dist/backend/llvm/constant-callbacks.js +83 -52
- package/dist/backend/llvm/constant-callbacks.js.map +1 -1
- package/dist/backend/llvm/counted-loops.d.ts +7 -0
- package/dist/backend/llvm/counted-loops.js +18 -0
- package/dist/backend/llvm/counted-loops.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.d.ts +39 -8
- package/dist/backend/llvm/dense-array-access.js +222 -52
- package/dist/backend/llvm/dense-array-access.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.test.js +36 -0
- package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
- package/dist/backend/llvm/dense-array-loops.d.ts +17 -1
- package/dist/backend/llvm/dense-array-loops.js +194 -5
- package/dist/backend/llvm/dense-array-loops.js.map +1 -1
- package/dist/backend/llvm/dense-array-loops.test.js +90 -1
- package/dist/backend/llvm/dense-array-loops.test.js.map +1 -1
- package/dist/backend/llvm/dyn-handle-tags.test.js +6 -1
- package/dist/backend/llvm/dyn-handle-tags.test.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +26 -0
- package/dist/backend/llvm/dyn.js +352 -61
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.js +11 -20
- 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 +195 -27
- package/dist/backend/llvm/emit-module.js.map +1 -1
- package/dist/backend/llvm/emit-statements.d.ts +0 -4
- package/dist/backend/llvm/emit-statements.js +268 -84
- package/dist/backend/llvm/emit-statements.js.map +1 -1
- package/dist/backend/llvm/emitter-state.d.ts +7 -0
- package/dist/backend/llvm/emitter-state.js +14 -0
- package/dist/backend/llvm/emitter-state.js.map +1 -0
- package/dist/backend/llvm/emitter.d.ts +176 -37
- package/dist/backend/llvm/emitter.js +724 -85
- 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-bytes.js +34 -12
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-callbacks.js +47 -0
- package/dist/backend/llvm/expr-callbacks.js.map +1 -1
- package/dist/backend/llvm/expr-calls.js +28 -14
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.d.ts +14 -2
- package/dist/backend/llvm/expr-containers.js +129 -37
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-context.d.ts +14 -0
- package/dist/backend/llvm/expr-dynamic.js +18 -11
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +100 -28
- 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 +194 -65
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.test.js +1 -1
- package/dist/backend/llvm/expr-stream-bridges.test.js.map +1 -1
- package/dist/backend/llvm/expr-stream-callbacks.d.ts +2 -2
- package/dist/backend/llvm/expr-stream-callbacks.js +74 -20
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/int32-kind-loops.d.ts +39 -0
- package/dist/backend/llvm/int32-kind-loops.js +106 -0
- package/dist/backend/llvm/int32-kind-loops.js.map +1 -0
- package/dist/backend/llvm/integer-or-nan-indexes.test.d.ts +1 -0
- package/dist/backend/llvm/integer-or-nan-indexes.test.js +118 -0
- package/dist/backend/llvm/integer-or-nan-indexes.test.js.map +1 -0
- package/dist/backend/llvm/integer-values.d.ts +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 +80 -2
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +4 -4
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-http2.js +4 -0
- package/dist/backend/llvm/lib-http2.js.map +1 -1
- package/dist/backend/llvm/lib-lookup.js +16 -6
- package/dist/backend/llvm/lib-lookup.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +73 -2
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +35 -5
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +115 -19
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.test.js +14 -0
- package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
- package/dist/backend/llvm/loop-state.d.ts +33 -0
- package/dist/backend/llvm/loop-state.js +42 -0
- package/dist/backend/llvm/loop-state.js.map +1 -0
- package/dist/backend/llvm/map-number-lookup.d.ts +26 -8
- package/dist/backend/llvm/map-number-lookup.js +91 -31
- package/dist/backend/llvm/map-number-lookup.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.test.js +55 -0
- package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.js +4 -2
- package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.d.ts +2 -1
- package/dist/backend/llvm/nullable-unions.js +15 -3
- package/dist/backend/llvm/nullable-unions.js.map +1 -1
- package/dist/backend/llvm/publish.d.ts +10 -0
- package/dist/backend/llvm/publish.js +12 -0
- package/dist/backend/llvm/publish.js.map +1 -1
- package/dist/backend/llvm/receivers.js +6 -1
- package/dist/backend/llvm/receivers.js.map +1 -1
- package/dist/backend/llvm/record-results.d.ts +1 -9
- package/dist/backend/llvm/record-results.js +2 -11
- package/dist/backend/llvm/record-results.js.map +1 -1
- package/dist/backend/llvm/reference-writes.d.ts +7 -2
- package/dist/backend/llvm/reference-writes.js +89 -72
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/running-extrema.d.ts +11 -0
- package/dist/backend/llvm/running-extrema.js +115 -0
- package/dist/backend/llvm/running-extrema.js.map +1 -0
- package/dist/backend/llvm/running-extrema.test.d.ts +1 -0
- package/dist/backend/llvm/running-extrema.test.js +89 -0
- package/dist/backend/llvm/running-extrema.test.js.map +1 -0
- package/dist/backend/llvm/shapes.d.ts +71 -15
- package/dist/backend/llvm/shapes.js +222 -33
- 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-reads.d.ts +12 -0
- package/dist/backend/llvm/string-reads.js +44 -0
- package/dist/backend/llvm/string-reads.js.map +1 -1
- package/dist/backend/llvm/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/wrapping-sums.d.ts +16 -1
- package/dist/backend/llvm/wrapping-sums.js +126 -0
- package/dist/backend/llvm/wrapping-sums.js.map +1 -1
- package/dist/backend/may-throw.d.ts +8 -10
- package/dist/backend/may-throw.js +14 -10
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +5 -0
- package/dist/backend/native/executable.js +7 -0
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/runtime-inputs.d.ts +1 -1
- package/dist/backend/native/runtime-inputs.js +1 -0
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +4 -0
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/publication.d.ts +12 -1
- package/dist/backend/publication.js +37 -14
- package/dist/backend/publication.js.map +1 -1
- package/dist/backend/publication.test.js +30 -0
- package/dist/backend/publication.test.js.map +1 -1
- package/dist/backend/result-slots.d.ts +16 -0
- package/dist/backend/result-slots.js +23 -0
- package/dist/backend/result-slots.js.map +1 -0
- package/dist/backend/runtime-abi.d.ts +2 -2
- package/dist/backend/runtime-abi.js +2 -2
- package/dist/backend/runtime-pack-core.d.ts +1 -0
- package/dist/backend/runtime-pack-core.js +1 -0
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +2 -1
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +2 -1
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/stack-observations.d.ts +2 -1
- package/dist/backend/stack-observations.js +67 -42
- package/dist/backend/stack-observations.js.map +1 -1
- package/dist/backend/target-diagnostics.js +5 -3
- package/dist/backend/target-diagnostics.js.map +1 -1
- package/dist/backend/warm-cache.js +1 -0
- package/dist/backend/warm-cache.js.map +1 -1
- package/dist/cli/usage.d.ts +1 -1
- package/dist/cli/usage.js +3 -3
- package/dist/compat/fetch-profile.js +1 -1
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/contracts/check.js +4 -3
- package/dist/contracts/check.js.map +1 -1
- package/dist/contracts/int32-elements.js +10 -2
- package/dist/contracts/int32-elements.js.map +1 -1
- package/dist/coverage/report.js +12 -3
- package/dist/coverage/report.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +4 -0
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/envelope.d.ts +3 -0
- package/dist/diagnostics/envelope.js +1 -0
- package/dist/diagnostics/envelope.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +2 -0
- package/dist/executable/executable-cache.js +1 -0
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +1 -0
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/frontend/decl-projection.d.ts +41 -0
- package/dist/frontend/decl-projection.js +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/dts-paths.d.ts +15 -0
- package/dist/frontend/dts-paths.js +25 -0
- package/dist/frontend/dts-paths.js.map +1 -1
- package/dist/frontend/input-tracker.d.ts +6 -0
- package/dist/frontend/input-tracker.js +51 -28
- package/dist/frontend/input-tracker.js.map +1 -1
- package/dist/frontend/input-tracker.test.js +19 -0
- package/dist/frontend/input-tracker.test.js.map +1 -1
- package/dist/frontend/lowering/array-values.js +100 -2
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-methods.js +46 -15
- package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process.js +13 -2
- package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
- package/dist/frontend/lowering/builtins/crypto.js +84 -9
- package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
- package/dist/frontend/lowering/builtins/global-namespace-keys.d.ts +3 -0
- package/dist/frontend/lowering/builtins/global-namespace-keys.js +122 -0
- package/dist/frontend/lowering/builtins/global-namespace-keys.js.map +1 -0
- package/dist/frontend/lowering/builtins/numbers.js +9 -1
- package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.d.ts +6 -0
- package/dist/frontend/lowering/builtins/promises.js +88 -2
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +5 -1
- package/dist/frontend/lowering/builtins/readline.js +35 -3
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/url.js +24 -1
- package/dist/frontend/lowering/builtins/url.js.map +1 -1
- package/dist/frontend/lowering/builtins/webassembly.js +6 -3
- package/dist/frontend/lowering/builtins/webassembly.js.map +1 -1
- package/dist/frontend/lowering/class-callbacks.d.ts +5 -2
- package/dist/frontend/lowering/class-callbacks.js +82 -12
- package/dist/frontend/lowering/class-callbacks.js.map +1 -1
- package/dist/frontend/lowering/class-construction.d.ts +4 -1
- package/dist/frontend/lowering/class-construction.js +17 -3
- package/dist/frontend/lowering/class-construction.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +39 -2
- package/dist/frontend/lowering/class-dynamic-dispatch.js +766 -108
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js +47 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
- package/dist/frontend/lowering/class-iterables.d.ts +2 -1
- package/dist/frontend/lowering/class-iterables.js +9 -1
- package/dist/frontend/lowering/class-iterables.js.map +1 -1
- package/dist/frontend/lowering/class-method-mutations.js +32 -9
- package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
- package/dist/frontend/lowering/class-prototypes.js +31 -2
- package/dist/frontend/lowering/class-prototypes.js.map +1 -1
- package/dist/frontend/lowering/class-runtime-statics.d.ts +9 -3
- package/dist/frontend/lowering/class-runtime-statics.js +29 -4
- package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural-plans.js +48 -1
- package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +91 -1
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/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.js +338 -18
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-concat.js +10 -0
- package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +15 -0
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/array-pipelines.js +19 -8
- package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.js +2 -1
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.js +3 -0
- package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +7 -2
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/filter-predicates.d.ts +6 -0
- package/dist/frontend/lowering/containers/filter-predicates.js +205 -0
- package/dist/frontend/lowering/containers/filter-predicates.js.map +1 -0
- package/dist/frontend/lowering/containers/indexed-objects.d.ts +0 -12
- package/dist/frontend/lowering/containers/indexed-objects.js +46 -7
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/containers/string-and-regexp.js +55 -9
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/containers/string-replacement.js +43 -19
- package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
- package/dist/frontend/lowering/dispatch-sites.js +15 -1
- package/dist/frontend/lowering/dispatch-sites.js.map +1 -1
- package/dist/frontend/lowering/divergences.js +9 -1
- package/dist/frontend/lowering/divergences.js.map +1 -1
- package/dist/frontend/lowering/error-methods.js +47 -2
- package/dist/frontend/lowering/error-methods.js.map +1 -1
- package/dist/frontend/lowering/expressions/array-literals.js +47 -0
- package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/binary.js +36 -2
- package/dist/frontend/lowering/expressions/binary.js.map +1 -1
- package/dist/frontend/lowering/expressions/element-access.js +90 -13
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/identifiers.js +33 -4
- package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
- package/dist/frontend/lowering/expressions/narrowing.js +95 -1
- package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/nullish-assignment.js +3 -1
- package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.d.ts +10 -0
- package/dist/frontend/lowering/expressions/object-literals.js +138 -51
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.js +12 -0
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.js +113 -11
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/relational.js +212 -33
- package/dist/frontend/lowering/expressions/relational.js.map +1 -1
- package/dist/frontend/lowering/expressions/union-fields.js +4 -0
- package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
- package/dist/frontend/lowering/expressions/updates.js +22 -3
- package/dist/frontend/lowering/expressions/updates.js.map +1 -1
- package/dist/frontend/lowering/frozen-records.d.ts +28 -0
- package/dist/frontend/lowering/frozen-records.js +322 -0
- package/dist/frontend/lowering/frozen-records.js.map +1 -0
- package/dist/frontend/lowering/function-returns.js +49 -0
- package/dist/frontend/lowering/function-returns.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.js +7 -2
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/iterable-values.d.ts +49 -0
- package/dist/frontend/lowering/iterable-values.js +297 -0
- package/dist/frontend/lowering/iterable-values.js.map +1 -0
- package/dist/frontend/lowering/iterator-adapters.js +186 -1
- package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
- package/dist/frontend/lowering/js-class-fields.d.ts +8 -0
- package/dist/frontend/lowering/js-class-fields.js +45 -10
- package/dist/frontend/lowering/js-class-fields.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.d.ts +18 -3
- package/dist/frontend/lowering/key-order-witness.js +770 -22
- package/dist/frontend/lowering/key-order-witness.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.test.js +428 -8
- package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
- package/dist/frontend/lowering/lower-async-iteration.js +4 -1
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +7 -0
- package/dist/frontend/lowering/lower-calls.js +443 -41
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +11 -2
- package/dist/frontend/lowering/lower-classes.js +302 -22
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-dgram.js +3 -1
- package/dist/frontend/lowering/lower-dgram.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.js +10 -2
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.d.ts +11 -0
- package/dist/frontend/lowering/lower-functions.js +83 -0
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.js +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 +18 -6
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +32 -0
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.js +5 -1
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-server.js +2 -2
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.d.ts +5 -0
- package/dist/frontend/lowering/lower-stdlib.js +30 -0
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +23 -0
- package/dist/frontend/lowering/lower-stmts.js +454 -48
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.d.ts +20 -2
- package/dist/frontend/lowering/lower-stream.js +1483 -156
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +77 -6
- package/dist/frontend/lowering/lowerer.js +313 -29
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/module-namespace-elements.d.ts +11 -1
- package/dist/frontend/lowering/module-namespace-elements.js +82 -5
- package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
- package/dist/frontend/lowering/new-target.d.ts +12 -0
- package/dist/frontend/lowering/new-target.js +280 -0
- package/dist/frontend/lowering/new-target.js.map +1 -0
- package/dist/frontend/lowering/surfaces.d.ts +3 -0
- package/dist/frontend/lowering/surfaces.js +18 -6
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/undefined-index.d.ts +27 -0
- package/dist/frontend/lowering/undefined-index.js +82 -0
- package/dist/frontend/lowering/undefined-index.js.map +1 -0
- package/dist/frontend/lowering/var-hoisting.js +29 -13
- package/dist/frontend/lowering/var-hoisting.js.map +1 -1
- package/dist/frontend/lowering/width-lift.d.ts +18 -0
- package/dist/frontend/npm-static-bundled-chunks.js +9 -11
- package/dist/frontend/npm-static-bundled-chunks.js.map +1 -1
- package/dist/frontend/npm-static-bundled-chunks.test.js +6 -5
- package/dist/frontend/npm-static-bundled-chunks.test.js.map +1 -1
- package/dist/frontend/npm-static-rewrite-syntax.js +9 -1
- package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
- package/dist/frontend/npm-static.js +4 -20
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/package-shims.d.ts +3 -0
- package/dist/frontend/package-shims.js +71 -8
- package/dist/frontend/package-shims.js.map +1 -1
- package/dist/frontend/pipeline.js +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 +8 -1
- package/dist/frontend/program.js +484 -69
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +43 -3
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/token-equivalence.d.ts +3 -0
- package/dist/frontend/token-equivalence.js +409 -0
- package/dist/frontend/token-equivalence.js.map +1 -0
- package/dist/frontend/token-equivalence.test.d.ts +1 -0
- package/dist/frontend/token-equivalence.test.js +67 -0
- package/dist/frontend/token-equivalence.test.js.map +1 -0
- package/dist/frontend/ts7/ast-node.d.ts +22 -0
- package/dist/frontend/ts7/ast-node.js +1048 -103
- package/dist/frontend/ts7/ast-node.js.map +1 -1
- package/dist/frontend/ts7/ast-node.test.js +24 -0
- package/dist/frontend/ts7/ast-node.test.js.map +1 -1
- package/dist/frontend/ts7/ast-wire.d.ts +4 -3
- package/dist/frontend/ts7/ast-wire.js +34 -24
- package/dist/frontend/ts7/ast-wire.js.map +1 -1
- package/dist/frontend/ts7/ast-wire.test.js +23 -0
- package/dist/frontend/ts7/ast-wire.test.js.map +1 -1
- package/dist/frontend/ts7/checker-backend.d.ts +3 -4
- package/dist/frontend/ts7/checker-backend.js +2 -2
- package/dist/frontend/ts7/checker-backend.js.map +1 -1
- package/dist/frontend/ts7/checker-backend.test.js +5 -9
- package/dist/frontend/ts7/checker-backend.test.js.map +1 -1
- package/dist/frontend/ts7/checker.d.ts +4 -0
- package/dist/frontend/ts7/checker.js +7 -0
- package/dist/frontend/ts7/checker.js.map +1 -1
- package/dist/frontend/ts7/lib-diagnostics.d.ts +24 -0
- package/dist/frontend/ts7/lib-diagnostics.js +307 -0
- package/dist/frontend/ts7/lib-diagnostics.js.map +1 -0
- package/dist/frontend/ts7/lib-diagnostics.test.d.ts +1 -0
- package/dist/frontend/ts7/lib-diagnostics.test.js +199 -0
- package/dist/frontend/ts7/lib-diagnostics.test.js.map +1 -0
- package/dist/frontend/ts7/program-host.d.ts +7 -0
- package/dist/frontend/ts7/program-host.js +25 -2
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/session.d.ts +14 -1
- package/dist/frontend/ts7/session.js +22 -0
- package/dist/frontend/ts7/session.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +13 -1
- package/dist/frontend/type-mapper.js +191 -11
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.d.ts +0 -5
- package/dist/index.js +34 -4
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.js +5 -3
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/array-length-stability.d.ts +4 -0
- package/dist/ir/array-length-stability.js +19 -6
- package/dist/ir/array-length-stability.js.map +1 -1
- package/dist/ir/array-length-stability.test.js +24 -0
- package/dist/ir/array-length-stability.test.js.map +1 -1
- package/dist/ir/builtin-effects.d.ts +7 -0
- package/dist/ir/builtin-effects.js +52 -0
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +6 -4
- package/dist/ir/builtin-signatures.js +166 -13
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/callback-specialization.d.ts +2 -1
- package/dist/ir/callback-specialization.js +23 -18
- package/dist/ir/callback-specialization.js.map +1 -1
- package/dist/ir/char-unit-locals.d.ts +19 -0
- package/dist/ir/char-unit-locals.js +185 -0
- package/dist/ir/char-unit-locals.js.map +1 -0
- package/dist/ir/char-unit-locals.test.d.ts +1 -0
- package/dist/ir/char-unit-locals.test.js +94 -0
- package/dist/ir/char-unit-locals.test.js.map +1 -0
- package/dist/ir/final-fields.d.ts +2 -1
- package/dist/ir/final-fields.js +14 -16
- package/dist/ir/final-fields.js.map +1 -1
- package/dist/ir/function-references.d.ts +2 -0
- package/dist/ir/function-references.js +2 -0
- package/dist/ir/function-references.js.map +1 -1
- package/dist/ir/function-references.test.js +3 -0
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/initializer-bindings.d.ts +2 -1
- package/dist/ir/initializer-bindings.js +27 -20
- package/dist/ir/initializer-bindings.js.map +1 -1
- package/dist/ir/int32-arrays.d.ts +108 -0
- package/dist/ir/int32-arrays.js +831 -0
- package/dist/ir/int32-arrays.js.map +1 -0
- package/dist/ir/int32-slots.d.ts +24 -2
- package/dist/ir/int32-slots.js +259 -57
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/integer-loops.d.ts +3 -3
- package/dist/ir/integer-loops.js +14 -6
- package/dist/ir/integer-loops.js.map +1 -1
- package/dist/ir/integer-loops.test.js +10 -0
- package/dist/ir/integer-loops.test.js.map +1 -1
- package/dist/ir/integer-ranges.d.ts +5 -0
- package/dist/ir/integer-ranges.js +125 -12
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +30 -0
- package/dist/ir/integer-ranges.test.js.map +1 -1
- package/dist/ir/ir.d.ts +70 -7
- package/dist/ir/ir.js +58 -1
- 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 +34 -13
- package/dist/ir/runtime-features.js +152 -38
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/serialize.d.ts +12 -2
- package/dist/ir/serialize.js +16 -3
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/serialize.test.js +17 -0
- package/dist/ir/serialize.test.js.map +1 -1
- package/dist/ir/traverse.js +18 -6
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/validate.js +122 -36
- package/dist/ir/validate.js.map +1 -1
- package/dist/library/ir-policy.js +2 -0
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/native/cache.d.ts +6 -1
- package/dist/native/cache.js +28 -5
- package/dist/native/cache.js.map +1 -1
- package/dist/native/cache.test.js +16 -2
- package/dist/native/cache.test.js.map +1 -1
- package/dist/native/cli.js +21 -1
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.js +8 -6
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/executable-cache.d.ts +1 -1
- package/dist/native/executable-cache.js +2 -2
- package/dist/native/executable-cache.js.map +1 -1
- package/dist/native/prepare.d.ts +3 -1
- package/dist/native/prepare.js +119 -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 +2 -0
- package/dist/native/sanitizer.test.js.map +1 -1
- package/dist/native/text-file.d.ts +13 -3
- package/dist/native/text-file.js +63 -9
- package/dist/native/text-file.js.map +1 -1
- package/dist/native/text-file.test.d.ts +1 -0
- package/dist/native/text-file.test.js +49 -0
- package/dist/native/text-file.test.js.map +1 -0
- package/dist/native/toolchain.js +4 -4
- package/dist/native/toolchain.js.map +1 -1
- package/dist/native/toolchain.test.js +3 -3
- package/dist/native/toolchain.test.js.map +1 -1
- package/package.json +21 -21
- package/shims/chalk/v5.ts +688 -0
- package/shims/hono-node-server/v2.ts +645 -0
- package/shims/hot-shots/client.ts +1126 -0
- package/shims/hot-shots/v8-unix-dgram.ts +8 -0
- package/shims/hot-shots/v8.ts +8 -0
- package/surface-manifest.json +26 -4
|
@@ -13,6 +13,7 @@ export declare function returnsOnlyThis(member: ts.MethodDeclaration): boolean;
|
|
|
13
13
|
* claim setters). Used only to narrow a call's result back to the
|
|
14
14
|
* receiver's class. */
|
|
15
15
|
export declare function returnsOnlyThisValue(member: ts.MethodDeclaration): boolean;
|
|
16
|
+
export declare function functionLocalClass(decl: ts.ClassLikeDeclaration): boolean;
|
|
16
17
|
export declare function storedClassValueType(lowerer: Lowerer, expression: ts.Expression, visiting?: Set<import("../ts7/ast-node.js").AstNode>): IrType | null;
|
|
17
18
|
export interface ClassMethodSignature {
|
|
18
19
|
params: ParamShape[];
|
|
@@ -33,6 +34,10 @@ export interface ClassInfo {
|
|
|
33
34
|
prototypeMethodValues?: Map<string, IrExpr>;
|
|
34
35
|
prototypeReflectionReady?: true;
|
|
35
36
|
prototypeObservedMethodsReady?: true;
|
|
37
|
+
/** The globals holding each observed method's original prototype value
|
|
38
|
+
* (set when the prototype data is built), by method name. A typed call
|
|
39
|
+
* whose slot still holds that value calls the method natively. */
|
|
40
|
+
prototypeOriginals?: Map<string, string>;
|
|
36
41
|
prototypeReflectionRefusal?: string;
|
|
37
42
|
localClass?: {
|
|
38
43
|
context: FnCtx | null;
|
|
@@ -582,8 +587,12 @@ export declare function lowerClassExpressionInfo(lowerer: Lowerer, expr: ts.Clas
|
|
|
582
587
|
* mints a class at all: evaluating the expression IS the
|
|
583
588
|
* ReferenceError, so it lowers to exactly that read — every evaluation
|
|
584
589
|
* throws identically, which is why the once-evaluated restriction and
|
|
585
|
-
* the member fences don't apply.
|
|
586
|
-
|
|
590
|
+
* the member fences don't apply.
|
|
591
|
+
*
|
|
592
|
+
* `binding` is the local of a function-local class declaration's name,
|
|
593
|
+
* declared without a value; the class value assigns it before the class's
|
|
594
|
+
* static members are defined (see initializeRuntimeStatics). */
|
|
595
|
+
export declare function lowerClassExpression(lowerer: Lowerer, expr: ts.ClassLikeDeclaration, binding?: IrLocal): IrExpr;
|
|
587
596
|
/** The EXACT class a receiver expression is statically known to BE (not
|
|
588
597
|
* merely be typed by): the class name itself, or a `const` binding
|
|
589
598
|
* whose initializer is a class expression / class name. Such receivers
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { DATE_TIME_FIELD, dateRootOf, dateSuperCall, isDatePrototypeMethod, lowerDateSuperMethodCall, } from "./builtins/date-classes.js";
|
|
2
|
+
import { predeclareForwardClass } from "./lower-stmts.js";
|
|
2
3
|
import { lowerDateStaticCall } from "./builtins/dates.js";
|
|
3
4
|
import { keyedHelperName } from "./stable-names.js";
|
|
4
5
|
import { lowerValueReturningConstructorNew } from "./js-dynamic-objects.js";
|
|
@@ -46,7 +47,7 @@ import { lowerSearchParamsNew } from "./builtins/url.js";
|
|
|
46
47
|
import { lowerTextCodecNew } from "./builtins/text-codecs.js";
|
|
47
48
|
import { lowerBroadcastChannelNew, lowerMessageChannelNew, lowerWorkerNew, } from "./builtins/workers.js";
|
|
48
49
|
import { unsupportedPackageValueDiag, unsupportedDiag, } from "../../diagnostics/diagnostic.js";
|
|
49
|
-
import { STREAM_API_MEMBERS, STREAM_PROP_MEMBERS, STREAM_COMPLETION_CALLBACK_INDEX, UNDERSCORE_METHODS, lowerStreamNew, lowerStreamSuperCall, streamCtorShape, } from "./lower-stream.js";
|
|
50
|
+
import { STREAM_API_MEMBERS, STREAM_PROP_MEMBERS, STREAM_COMPLETION_CALLBACK_INDEX, UNDERSCORE_METHODS, streamExtraCallbacks, lowerStreamNew, lowerStreamSuperCall, streamCtorShape, } from "./lower-stream.js";
|
|
50
51
|
import { builtinEventTargetBaseOf, eventTargetApiMembers, eventTargetApiMethod, eventTargetRootOf, eventTargetSuperCall, lowerEventTargetMethodCall, } from "./lower-event-target.js";
|
|
51
52
|
import { emitOverrideShapeReason, emitSpecSuperForward, emitterRooted, lowerEmitterSuperCall, } from "./lower-event-emitter.js";
|
|
52
53
|
import { declSymbolOf } from "./lower-modules.js";
|
|
@@ -58,7 +59,7 @@ import { hasLexicalPrivateReference, hasStaticThis, rejectStaticThis } from "./s
|
|
|
58
59
|
import { lowerUrlNew } from "./lower-url.js";
|
|
59
60
|
import { isNativeProxyInitializer, lowerNativeProxy } from "./expressions/native-proxy.js";
|
|
60
61
|
import { classStaticDataFor } from "./class-static-data.js";
|
|
61
|
-
import { construction, constructionPrefix } from "./js-class-fields.js";
|
|
62
|
+
import { accessorInterceptsBase, accessorNames, construction, constructionPrefix, } from "./js-class-fields.js";
|
|
62
63
|
import { lowerObjectFactoryNew } from "./object-factory-new.js";
|
|
63
64
|
import { tryLowerExpression } from "./expressions/try-lower-expression.js";
|
|
64
65
|
import { lowerInstanceConstructorNew } from "./class-instance-constructor.js";
|
|
@@ -67,6 +68,7 @@ import { constructionEscape } from "./construction-escapes.js";
|
|
|
67
68
|
import { checkedClassConstruction, checkedClassConstructionPacked } from "./class-construction.js";
|
|
68
69
|
import { initializeRuntimeStatics, hasRuntimeStatics } from "./class-runtime-statics.js";
|
|
69
70
|
import { reflectedClassStaticMethodValue } from "./class-method-values.js";
|
|
71
|
+
import { identifierReadSymbol } from "./surfaces.js";
|
|
70
72
|
export function returnsOnlyThis(member) {
|
|
71
73
|
const body = member.body;
|
|
72
74
|
const last = body?.statements?.nodes.at(-1);
|
|
@@ -122,7 +124,7 @@ export function returnsOnlyThisValue(member) {
|
|
|
122
124
|
ts.forEachChild(body, visit);
|
|
123
125
|
return valid;
|
|
124
126
|
}
|
|
125
|
-
function functionLocalClass(decl) {
|
|
127
|
+
export function functionLocalClass(decl) {
|
|
126
128
|
for (let parent = decl.parent; parent && !ts.isSourceFile(parent); parent = parent.parent) {
|
|
127
129
|
if (ts.isFunctionLike(parent))
|
|
128
130
|
return true;
|
|
@@ -1693,6 +1695,7 @@ mixin) {
|
|
|
1693
1695
|
// receiver-sensitive getters and setters inherited by subclasses.
|
|
1694
1696
|
const checkedStatics = isJsSourceFile(ts.getSourceFileOfNode(decl)) &&
|
|
1695
1697
|
((base && hasRuntimeStatics(base)) ||
|
|
1698
|
+
definedThroughReflection(lowerer, decl) ||
|
|
1696
1699
|
decl.members.nodes.some((member) => ts.isAccessor(member) &&
|
|
1697
1700
|
!ts.isPrivateIdentifier(member.name) &&
|
|
1698
1701
|
member.modifiers?.nodes.some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword))) &&
|
|
@@ -2007,8 +2010,8 @@ mixin) {
|
|
|
2007
2010
|
// state, so an override or shadowing field would split-brain.
|
|
2008
2011
|
// Underscore methods are the SUPPORTED override form — but only
|
|
2009
2012
|
// the ones the class's own base consumes (a `_read` on a
|
|
2010
|
-
// Transform, or `_writev
|
|
2011
|
-
//
|
|
2013
|
+
// Transform, or `_writev` on a Readable, would be consumed by Node
|
|
2014
|
+
// machinery that has no lowering here).
|
|
2012
2015
|
if (memberName && ts.isIdentifier(memberName)) {
|
|
2013
2016
|
const streamBase = (() => {
|
|
2014
2017
|
for (let c = base; c; c = c.base)
|
|
@@ -2021,8 +2024,8 @@ mixin) {
|
|
|
2021
2024
|
if (STREAM_API_MEMBERS.has(name) || STREAM_PROP_MEMBERS.has(name)) {
|
|
2022
2025
|
lowerer.unsupported("SC1090", memberName, `overriding the stream member '${name}' (the runtime owns the stream surface)`);
|
|
2023
2026
|
}
|
|
2024
|
-
if (name === "_writev"
|
|
2025
|
-
lowerer.unsupported("SC1090", memberName, `declaring '
|
|
2027
|
+
if (name === "_writev" && !streamExtraCallbacks(streamBase.def.name).includes("writev")) {
|
|
2028
|
+
lowerer.unsupported("SC1090", memberName, `declaring '_writev' on a ${streamBase.def.name.slice(1)} subclass (a Readable has no writable side)`);
|
|
2026
2029
|
}
|
|
2027
2030
|
const accepted = streamCtorShape(streamBase.def.name).accepted;
|
|
2028
2031
|
for (const [option, methodName] of UNDERSCORE_METHODS) {
|
|
@@ -3167,7 +3170,7 @@ mixin) {
|
|
|
3167
3170
|
}
|
|
3168
3171
|
// A subclass field created before anything can observe the instance
|
|
3169
3172
|
// keeps its type: super() cannot run code that reads it earlier.
|
|
3170
|
-
const baseConstruction = base && !
|
|
3173
|
+
const baseConstruction = base && !accessorInterceptsBase(accessorNames(methods.keys()), base)
|
|
3171
3174
|
? construction(base)
|
|
3172
3175
|
: null;
|
|
3173
3176
|
const sealedPrefix = baseConstruction
|
|
@@ -3195,7 +3198,7 @@ mixin) {
|
|
|
3195
3198
|
// An own JS callable shadows its prototype declaration.
|
|
3196
3199
|
// Keep the method in the prototype and store the assigned
|
|
3197
3200
|
// value in the instance property bag.
|
|
3198
|
-
lowerer.
|
|
3201
|
+
lowerer.noteMethodAccess(name, assign);
|
|
3199
3202
|
continue;
|
|
3200
3203
|
}
|
|
3201
3204
|
const sym = lowerer.checker.getSymbolAtLocation(assign);
|
|
@@ -3272,7 +3275,7 @@ mixin) {
|
|
|
3272
3275
|
if (!key && (fields.has(fieldName) || hasAccessor(fieldName)))
|
|
3273
3276
|
continue;
|
|
3274
3277
|
if (!key && (methods.has(fieldName) || lowerer.findMethodOn(base, fieldName))) {
|
|
3275
|
-
lowerer.
|
|
3278
|
+
lowerer.noteMethodAccess(fieldName, lhs);
|
|
3276
3279
|
continue;
|
|
3277
3280
|
}
|
|
3278
3281
|
// A key already declared (own or inherited) makes later
|
|
@@ -4429,7 +4432,13 @@ export function classValueRef(lowerer, info, blame) {
|
|
|
4429
4432
|
const display = info.def.name.replace(/^%|^%m\d+\./, "");
|
|
4430
4433
|
fenceDecorationThrows(lowerer, info, blame);
|
|
4431
4434
|
if (info.localClass && ts.isIdentifier(blame)) {
|
|
4432
|
-
|
|
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
|
+
}
|
|
4433
4442
|
if (stored)
|
|
4434
4443
|
return lowerer.coerceToExpected({ kind: "varRef", localId: stored.id, type: stored.type, loc: locOf(blame) }, { kind: "classval", className: info.def.name });
|
|
4435
4444
|
}
|
|
@@ -4917,6 +4926,31 @@ export function lowerClassExpressionInfo(lowerer, expr) {
|
|
|
4917
4926
|
}
|
|
4918
4927
|
return info;
|
|
4919
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
|
+
}
|
|
4920
4954
|
/** `class {…}` in expression position: a class definition bound to no
|
|
4921
4955
|
* statement — once the static side is a value, the expression IS the
|
|
4922
4956
|
* definition plus a classRef over it. A DECORATED class expression
|
|
@@ -4924,8 +4958,12 @@ export function lowerClassExpressionInfo(lowerer, expr) {
|
|
|
4924
4958
|
* mints a class at all: evaluating the expression IS the
|
|
4925
4959
|
* ReferenceError, so it lowers to exactly that read — every evaluation
|
|
4926
4960
|
* throws identically, which is why the once-evaluated restriction and
|
|
4927
|
-
* the member fences don't apply.
|
|
4928
|
-
|
|
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) {
|
|
4929
4967
|
if (decoratorNodesOf(expr).length > 0 ||
|
|
4930
4968
|
expr.members.nodes.some((m) => decoratorNodesOf(m).length > 0)) {
|
|
4931
4969
|
if (!isJsSourceFile(ts.getSourceFileOfNode(expr)) && expr.typeParameters === undefined) {
|
|
@@ -4939,6 +4977,28 @@ export function lowerClassExpression(lowerer, expr) {
|
|
|
4939
4977
|
}
|
|
4940
4978
|
}
|
|
4941
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) {
|
|
4942
5002
|
if (!info.localClass &&
|
|
4943
5003
|
!info.expressionInitializationEmitted &&
|
|
4944
5004
|
(info.callableBase ||
|
|
@@ -4985,7 +5045,7 @@ export function lowerClassExpression(lowerer, expr) {
|
|
|
4985
5045
|
const clsRef = { kind: "varRef", localId: clsLocal.id, type: value.type, loc };
|
|
4986
5046
|
const boxed = { kind: "dynFrom", value: clsRef, type: DYN, loc };
|
|
4987
5047
|
info.localPrototypeData = true;
|
|
4988
|
-
|
|
5048
|
+
const built = {
|
|
4989
5049
|
kind: "seqExpr",
|
|
4990
5050
|
stmts: [
|
|
4991
5051
|
{ kind: "varDecl", localId: baseLocal.id, init: base, loc },
|
|
@@ -5018,7 +5078,8 @@ export function lowerClassExpression(lowerer, expr) {
|
|
|
5018
5078
|
result: clsRef,
|
|
5019
5079
|
type: value.type,
|
|
5020
5080
|
loc,
|
|
5021
|
-
}
|
|
5081
|
+
};
|
|
5082
|
+
return initializeRuntimeStatics(lowerer, info, built, binding);
|
|
5022
5083
|
}
|
|
5023
5084
|
if (info.localClass?.baseExpression && info.base && value.kind === "classRef") {
|
|
5024
5085
|
const loc = locOf(expr);
|
|
@@ -5033,7 +5094,7 @@ export function lowerClassExpression(lowerer, expr) {
|
|
|
5033
5094
|
const clsRef = { kind: "varRef", localId: clsLocal.id, type: value.type, loc };
|
|
5034
5095
|
const basePrototype = classPrototypeData(lowerer, info.base, loc, baseRef);
|
|
5035
5096
|
info.localPrototypeData = true;
|
|
5036
|
-
|
|
5097
|
+
const built = {
|
|
5037
5098
|
kind: "seqExpr",
|
|
5038
5099
|
stmts: [
|
|
5039
5100
|
{ kind: "varDecl", localId: baseLocal.id, init: base, loc },
|
|
@@ -5072,11 +5133,12 @@ export function lowerClassExpression(lowerer, expr) {
|
|
|
5072
5133
|
result: clsRef,
|
|
5073
5134
|
type: value.type,
|
|
5074
5135
|
loc,
|
|
5075
|
-
}
|
|
5136
|
+
};
|
|
5137
|
+
return initializeRuntimeStatics(lowerer, info, built, binding);
|
|
5076
5138
|
}
|
|
5077
5139
|
if (!info.localClass)
|
|
5078
5140
|
return value;
|
|
5079
|
-
const classValue = initializeRuntimeStatics(lowerer, info, value.kind === "classRef" ? { ...value, captures: info.localClass.captureSources } : value);
|
|
5141
|
+
const classValue = initializeRuntimeStatics(lowerer, info, value.kind === "classRef" ? { ...value, captures: info.localClass.captureSources } : value, binding);
|
|
5080
5142
|
// The base resolves statically here, but Node still evaluates the
|
|
5081
5143
|
// heritage expression each time the class definition runs, first.
|
|
5082
5144
|
const heritage = heritageWithEffects(expr);
|
|
@@ -5418,7 +5480,7 @@ function staticCallOn(lowerer, call, access, info, throughValue) {
|
|
|
5418
5480
|
// through-a-VALUE shadowing fence as plain statics.
|
|
5419
5481
|
const gfound = findGenericStaticOn(lowerer, info, access.name.text);
|
|
5420
5482
|
if (!gfound)
|
|
5421
|
-
return
|
|
5483
|
+
return classConstructorCall(lowerer, call, access, info);
|
|
5422
5484
|
if (throughValue && staticShadowBelow(info, access.name.text)) {
|
|
5423
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)`);
|
|
5424
5486
|
}
|
|
@@ -5487,6 +5549,74 @@ function staticCallOn(lowerer, call, access, info, throughValue) {
|
|
|
5487
5549
|
const args = lowerer.completeArgs(call.arguments.nodes, found.method.params, loc, call);
|
|
5488
5550
|
return { kind: "call", callee: fnName, args, type: found.method.ret, loc };
|
|
5489
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
|
+
}
|
|
5490
5620
|
/** `C.m(...)` where `m` is a static method that a function-local
|
|
5491
5621
|
* JavaScript class defines at runtime (a factory's `class extends base`),
|
|
5492
5622
|
* inherited by `C` through its statically known base chain. When the body
|
|
@@ -5874,11 +6004,94 @@ export function inHierarchy(lowerer, info) {
|
|
|
5874
6004
|
* dynamically. Abstract re-declarations don't count (they carry no
|
|
5875
6005
|
* implementation; the concrete ones below them do, via the recursion). */
|
|
5876
6006
|
export function overrideBelow(lowerer, info, name) {
|
|
6007
|
+
if (info.decl !== null && localOverrideBelow(lowerer, info.decl, name))
|
|
6008
|
+
return true;
|
|
5877
6009
|
return info.subclasses.some((s) => {
|
|
5878
6010
|
const m = s.methods.get(name);
|
|
5879
6011
|
return (m !== undefined && m.abstract !== true) || lowerer.overrideBelow(s, name);
|
|
5880
6012
|
});
|
|
5881
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
|
+
}
|
|
5882
6095
|
/** The nearest GENERIC-method declaration of `name` at/above `info` —
|
|
5883
6096
|
* findMethodOn's twin over the genericMethods tables. */
|
|
5884
6097
|
export function findGenericMethodOn(lowerer, info, name) {
|
|
@@ -7571,8 +7784,10 @@ export function superCallStmt(lowerer, info, thisLocal, args, loc) {
|
|
|
7571
7784
|
// The SYNTHESIZED constructor of a ctor-less stream subclass:
|
|
7572
7785
|
// super() with default options (underscore methods still bind; a
|
|
7573
7786
|
// construction passing options requires a declared constructor —
|
|
7574
|
-
// lowerNew fences that). Zero options ⇒
|
|
7575
|
-
|
|
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 };
|
|
7576
7791
|
}
|
|
7577
7792
|
lowerer.noteSuperConstructorEdge(`%${base.def.name}.constructor`);
|
|
7578
7793
|
const call = {
|
|
@@ -8810,6 +9025,40 @@ export function lowerNew(lowerer, expr) {
|
|
|
8810
9025
|
loc,
|
|
8811
9026
|
};
|
|
8812
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
|
+
}
|
|
8813
9062
|
// `new Set<T>()`: construct + bulk add from supported values,
|
|
8814
9063
|
// including live collection cursors. Duplicates collapse in insertion order.
|
|
8815
9064
|
if (ts.isIdentifier(identifier) && lowerer.isStdlibGlobal(identifier, "Set")) {
|
|
@@ -8990,7 +9239,6 @@ export function lowerNew(lowerer, expr) {
|
|
|
8990
9239
|
Number: "boxed wrapper objects have no lowering — use the number primitive",
|
|
8991
9240
|
Boolean: "boxed wrapper objects have no lowering — use the boolean primitive",
|
|
8992
9241
|
WeakRef: "deref()-after-collect exposes GC timing — genuinely dynamic; hold a strong reference instead",
|
|
8993
|
-
FinalizationRegistry: "finalization callbacks expose GC timing — genuinely dynamic; release resources explicitly instead",
|
|
8994
9242
|
SharedArrayBuffer: "no shared-memory threads exist in a compiled program — Uint8Array is the byte storage",
|
|
8995
9243
|
ArrayBuffer: "native ArrayBuffer construction supports fixed-length storage; resizable buffers remain unsupported",
|
|
8996
9244
|
Proxy: "native Proxy construction requires checked-native plain targets and handlers",
|
|
@@ -9279,4 +9527,36 @@ function genericFieldFnNodeOf(member) {
|
|
|
9279
9527
|
}
|
|
9280
9528
|
return null;
|
|
9281
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
|
+
}
|
|
9282
9562
|
//# sourceMappingURL=lower-classes.js.map
|