@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,7 +1,10 @@
|
|
|
1
1
|
import { staticNameBindings } from "./static-function-names.js";
|
|
2
|
+
import { positionTag } from "./structural-positions.js";
|
|
3
|
+
import { keyedHelperName } from "./stable-names.js";
|
|
2
4
|
import * as ts from "../ts7/adapter.js";
|
|
3
5
|
import { bodyReadsArguments } from "../arguments-usage.js";
|
|
4
|
-
import { DYN, isUnitType, typeEquals, } from "../../ir/ir.js";
|
|
6
|
+
import { BOOL, DYN, STRING, VOID, isUnitType, typeEquals, } from "../../ir/ir.js";
|
|
7
|
+
import { helperLoc, nodeThrowExpr } from "../../ir/build.js";
|
|
5
8
|
import { isJsSourceFile, locOf } from "../program.js";
|
|
6
9
|
import { typeKey } from "../type-mapper.js";
|
|
7
10
|
import { functionCanReturnUndefined } from "../function-completion.js";
|
|
@@ -12,7 +15,7 @@ import { nsPathPrefix } from "./lower-namespaces.js";
|
|
|
12
15
|
import { declSymbolOf } from "./lower-modules.js";
|
|
13
16
|
import { npmStaticPackageOfPath } from "../npm-static.js";
|
|
14
17
|
import { rejectStaticThis } from "./static-this.js";
|
|
15
|
-
import { jsBindingHasOpenWrites } from "./lower-stmts.js";
|
|
18
|
+
import { isVarDeclared, jsBindingHasOpenWrites } from "./lower-stmts.js";
|
|
16
19
|
import { paramShapes, generatorMeta, funcTypeFromParamShapes, } from "./call-signatures.js";
|
|
17
20
|
import { fenceGenericSignatureResult, blockBodyOf, resolveInferredReturn, appendImplicitUndefinedReturn, hasExplicitJsDocReturn, promiseCarriesDyn, } from "./function-returns.js";
|
|
18
21
|
import { bindingNeverReassigned, stripValueWrappers } from "./binding-analysis.js";
|
|
@@ -63,7 +66,7 @@ export function collectGenericSignature(lowerer, decl) {
|
|
|
63
66
|
lowerer.genericFnsBySymbol.set(symbol, {
|
|
64
67
|
decl,
|
|
65
68
|
baseName: nameText,
|
|
66
|
-
qualifiedName: lowerer.qualify(ts.getSourceFileOfNode(decl), nsPathPrefix(decl) + nameText),
|
|
69
|
+
qualifiedName: lowerer.qualify(ts.getSourceFileOfNode(decl), nsPathPrefix(lowerer, decl) + nameText),
|
|
67
70
|
typeParams,
|
|
68
71
|
instances: new Map(),
|
|
69
72
|
});
|
|
@@ -85,7 +88,14 @@ export function lowerGenericCall(lowerer, expr, info) {
|
|
|
85
88
|
? implicitCallInstance(lowerer, expr, info)
|
|
86
89
|
: genericCallInstance(lowerer, expr, info);
|
|
87
90
|
const args = lowerer.completeArgs(expr.arguments.nodes, instance.params, loc, expr);
|
|
88
|
-
|
|
91
|
+
const call = {
|
|
92
|
+
kind: "call",
|
|
93
|
+
callee: instance.name,
|
|
94
|
+
args,
|
|
95
|
+
type: instance.returnType,
|
|
96
|
+
loc,
|
|
97
|
+
};
|
|
98
|
+
return guardEarlyBindingCall(lowerer, info, expr, call);
|
|
89
99
|
}
|
|
90
100
|
/** The instance a CALL of a generic function-like names: resolved
|
|
91
101
|
* signature → mapped param shapes/return → interned instance. Shared by
|
|
@@ -124,9 +134,14 @@ export function genericCallInstance(lowerer, expr, info) {
|
|
|
124
134
|
if (local)
|
|
125
135
|
return local;
|
|
126
136
|
// A result instantiated at `any` (a type argument inferred from an
|
|
127
|
-
// untyped value, such as an untyped forwarding call) is checked-dynamic
|
|
137
|
+
// untyped value, such as an untyped forwarding call) is checked-dynamic,
|
|
138
|
+
// and so is a JavaScript result whose JSDoc names a type the file never
|
|
139
|
+
// declares or imports (`@returns {MiddlewareHandler<E>}` in a published
|
|
140
|
+
// bundle): the checker's error type is documentation it could not
|
|
141
|
+
// resolve, not a contract.
|
|
128
142
|
const mappedReturn = lowerer.mapTypeOf(retTs) ??
|
|
129
|
-
((retTs.flags & ts.TypeFlags.Any) !== 0 &&
|
|
143
|
+
((retTs.flags & ts.TypeFlags.Any) !== 0 &&
|
|
144
|
+
(!isJsSourceFile(ts.getSourceFileOfNode(info.decl)) || retTs.isErrorType())
|
|
130
145
|
? DYN
|
|
131
146
|
: null);
|
|
132
147
|
if (!mappedReturn) {
|
|
@@ -255,7 +270,8 @@ function runtimeReturnType(lowerer, info, mapped) {
|
|
|
255
270
|
* the result maps inside it, where the local class takes the instance's
|
|
256
271
|
* name and bindings. */
|
|
257
272
|
function localClassResultInstance(lowerer, expr, info, rsig, params, retTs) {
|
|
258
|
-
|
|
273
|
+
const resultClass = localClassOfResult(lowerer, info, retTs);
|
|
274
|
+
if (!resultClass)
|
|
259
275
|
return null;
|
|
260
276
|
const tsBindings = new Map();
|
|
261
277
|
const bindings = lowerer.inferTypeParamBindings(expr, info, rsig, tsBindings);
|
|
@@ -272,12 +288,39 @@ function localClassResultInstance(lowerer, expr, info, rsig, params, retTs) {
|
|
|
272
288
|
});
|
|
273
289
|
if (inst.returnType !== pending)
|
|
274
290
|
return inst;
|
|
275
|
-
|
|
291
|
+
// A result typed by a declared constructor type rather than the class
|
|
292
|
+
// (`Struct<S>`) is the class value of the local class the body returns.
|
|
293
|
+
const declaredResult = info.decl.type
|
|
294
|
+
? lowerer.checker.getTypeFromTypeNode(info.decl.type)
|
|
295
|
+
: undefined;
|
|
296
|
+
const viaConstructorType = retTs.getSymbol()?.valueDeclaration !== resultClass;
|
|
297
|
+
const returnType = withInstanceScope(lowerer, info, inst, () => {
|
|
298
|
+
if (!viaConstructorType)
|
|
299
|
+
return lowerer.mapTypeOf(retTs);
|
|
300
|
+
// The local class's own constructor type: a class expression's type is
|
|
301
|
+
// its constructor type, named or not (`return class { ... } as Struct<S>`).
|
|
302
|
+
const classSymbol = !ts.isClassExpression(resultClass) && resultClass.name
|
|
303
|
+
? lowerer.checker.getSymbolAtLocation(resultClass.name)
|
|
304
|
+
: undefined;
|
|
305
|
+
const classType = ts.isClassExpression(resultClass)
|
|
306
|
+
? lowerer.checker.getTypeAtLocation(resultClass)
|
|
307
|
+
: classSymbol
|
|
308
|
+
? lowerer.checker.getTypeOfSymbol(classSymbol)
|
|
309
|
+
: undefined;
|
|
310
|
+
return classType ? lowerer.mapTypeOf(classType) : null;
|
|
311
|
+
});
|
|
276
312
|
if (!returnType) {
|
|
277
313
|
fenceGenericSignatureResult(lowerer, expr, retTs);
|
|
278
314
|
lowerer.badType(expr, retTs);
|
|
279
315
|
}
|
|
280
316
|
inst.returnType = returnType;
|
|
317
|
+
if (viaConstructorType && returnType.kind === "classval") {
|
|
318
|
+
if (declaredResult)
|
|
319
|
+
inst.resultClass = { declared: declaredResult.id, value: returnType };
|
|
320
|
+
if (lowerer.typeParamBindings === null)
|
|
321
|
+
lowerer.localClassValueTypes.set(retTs.id, returnType);
|
|
322
|
+
return inst;
|
|
323
|
+
}
|
|
281
324
|
// Values of the class outside the factory (`const b = new B()`, `b.read()`)
|
|
282
325
|
// carry the instantiated checker type; record which class it names. A
|
|
283
326
|
// call inside another generic instance can have a type that depends on
|
|
@@ -350,15 +393,103 @@ function insideGenericFunction(node) {
|
|
|
350
393
|
* constructor or instance type of, or null. */
|
|
351
394
|
function localClassOfResult(lowerer, info, type) {
|
|
352
395
|
const symbol = type.getSymbol();
|
|
353
|
-
|
|
396
|
+
const decl = symbol && symbol.flags & ts.SymbolFlags.Class ? symbol.valueDeclaration : undefined;
|
|
397
|
+
if (decl && (ts.isClassExpression(decl) || ts.isClassDeclaration(decl)))
|
|
398
|
+
return declaredInside(decl, info.decl) ? decl : null;
|
|
399
|
+
// A result typed by a constructor type (`Struct<S>`, `new () => S`) whose
|
|
400
|
+
// every return gives back the one local class, through parentheses and
|
|
401
|
+
// assertions (`return Base as Struct<S>`).
|
|
402
|
+
// A mixin (a class extending one of the function's parameters) keeps the
|
|
403
|
+
// mixin instantiation, which keys on the argument class.
|
|
404
|
+
if (lowerer.checker.getConstructSignatures(type).length === 0)
|
|
354
405
|
return null;
|
|
355
|
-
const
|
|
356
|
-
|
|
406
|
+
const returned = returnedLocalClass(lowerer, info);
|
|
407
|
+
return returned && !extendsParameter(lowerer, returned, info) ? returned : null;
|
|
408
|
+
}
|
|
409
|
+
function extendsParameter(lowerer, decl, info) {
|
|
410
|
+
const params = new Set();
|
|
411
|
+
const fn = info.decl;
|
|
412
|
+
for (const param of fn.parameters?.nodes ?? []) {
|
|
413
|
+
const symbol = ts.isIdentifier(param.name)
|
|
414
|
+
? lowerer.checker.getSymbolAtLocation(param.name)
|
|
415
|
+
: undefined;
|
|
416
|
+
if (symbol !== undefined)
|
|
417
|
+
params.add(symbol);
|
|
418
|
+
}
|
|
419
|
+
for (const clause of decl.heritageClauses?.nodes ?? [])
|
|
420
|
+
for (const base of clause.types.nodes) {
|
|
421
|
+
const symbol = ts.isIdentifier(base.expression)
|
|
422
|
+
? lowerer.checker.getSymbolAtLocation(base.expression)
|
|
423
|
+
: undefined;
|
|
424
|
+
if (symbol !== undefined && params.has(symbol))
|
|
425
|
+
return true;
|
|
426
|
+
}
|
|
427
|
+
return false;
|
|
428
|
+
}
|
|
429
|
+
function declaredInside(node, owner) {
|
|
430
|
+
for (let parent = node.parent; parent && !ts.isSourceFile(parent); parent = parent.parent)
|
|
431
|
+
if (parent === owner)
|
|
432
|
+
return true;
|
|
433
|
+
return false;
|
|
434
|
+
}
|
|
435
|
+
/** The local class every return of `info`'s body gives back, or null when a
|
|
436
|
+
* return gives anything else (or nothing). Nested functions and classes keep
|
|
437
|
+
* their own returns. */
|
|
438
|
+
function returnedLocalClass(lowerer, info) {
|
|
439
|
+
const fn = info.decl;
|
|
440
|
+
const body = fn.body;
|
|
441
|
+
if (!body)
|
|
357
442
|
return null;
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
443
|
+
const classOf = (node) => {
|
|
444
|
+
let expr = node;
|
|
445
|
+
while (ts.isParenthesizedExpression(expr) ||
|
|
446
|
+
ts.isAsExpression(expr) ||
|
|
447
|
+
ts.isSatisfiesExpression(expr) ||
|
|
448
|
+
ts.isNonNullExpression(expr))
|
|
449
|
+
expr = expr.expression;
|
|
450
|
+
if (ts.isClassExpression(expr))
|
|
451
|
+
return declaredInside(expr, info.decl) ? expr : null;
|
|
452
|
+
if (!ts.isIdentifier(expr))
|
|
453
|
+
return null;
|
|
454
|
+
const declaration = lowerer.checker.getSymbolAtLocation(expr)?.valueDeclaration;
|
|
455
|
+
if (!declaration || !declaredInside(declaration, info.decl))
|
|
456
|
+
return null;
|
|
457
|
+
if (ts.isClassDeclaration(declaration))
|
|
458
|
+
return declaration;
|
|
459
|
+
// A `const` bound to a class expression (`const C = class { ... }; return C`).
|
|
460
|
+
if (ts.isVariableDeclaration(declaration) &&
|
|
461
|
+
ts.getCombinedNodeFlags(declaration) & ts.NodeFlags.Const &&
|
|
462
|
+
declaration.initializer) {
|
|
463
|
+
let init = declaration.initializer;
|
|
464
|
+
while (ts.isParenthesizedExpression(init))
|
|
465
|
+
init = init.expression;
|
|
466
|
+
if (ts.isClassExpression(init))
|
|
467
|
+
return init;
|
|
468
|
+
}
|
|
469
|
+
return null;
|
|
470
|
+
};
|
|
471
|
+
if (!ts.isBlock(body))
|
|
472
|
+
return classOf(body);
|
|
473
|
+
let found = null;
|
|
474
|
+
let valid = true;
|
|
475
|
+
const visit = (node) => {
|
|
476
|
+
if (!valid ||
|
|
477
|
+
ts.isFunctionLike(node) ||
|
|
478
|
+
ts.isClassDeclaration(node) ||
|
|
479
|
+
ts.isClassExpression(node))
|
|
480
|
+
return;
|
|
481
|
+
if (ts.isReturnStatement(node)) {
|
|
482
|
+
const returned = node.expression ? classOf(node.expression) : null;
|
|
483
|
+
if (!returned || (found !== null && found !== returned))
|
|
484
|
+
valid = false;
|
|
485
|
+
else
|
|
486
|
+
found = returned;
|
|
487
|
+
return;
|
|
488
|
+
}
|
|
489
|
+
ts.forEachChild(node, visit);
|
|
490
|
+
};
|
|
491
|
+
ts.forEachChild(body, visit);
|
|
492
|
+
return valid ? found : null;
|
|
362
493
|
}
|
|
363
494
|
/** Runs `fn` under an instance's type bindings and local-class names, as
|
|
364
495
|
* its body lowers. */
|
|
@@ -367,15 +498,18 @@ function withInstanceScope(lowerer, info, inst, fn) {
|
|
|
367
498
|
const prevTsBindings = lowerer.typeParamTsBindings;
|
|
368
499
|
const previousPath = lowerer.genericInstantiationPath;
|
|
369
500
|
const prevContext = lowerer.instantiationContext;
|
|
501
|
+
const prevResultClass = lowerer.instanceResultClass;
|
|
370
502
|
lowerer.typeParamBindings = inst.bindings;
|
|
371
503
|
lowerer.typeParamTsBindings = inst.tsBindings ?? null;
|
|
372
504
|
lowerer.genericInstantiationPath = inst.path;
|
|
373
505
|
lowerer.instantiationContext = `instantiating '${info.baseName}' with ${inst.typeArgsText}`;
|
|
506
|
+
lowerer.instanceResultClass = inst.resultClass ?? null;
|
|
374
507
|
lowerer.localClassInstantiations.push({ owner: info.decl, name: inst.name });
|
|
375
508
|
try {
|
|
376
509
|
return fn();
|
|
377
510
|
}
|
|
378
511
|
finally {
|
|
512
|
+
lowerer.instanceResultClass = prevResultClass;
|
|
379
513
|
lowerer.localClassInstantiations.pop();
|
|
380
514
|
lowerer.typeParamBindings = prevBindings;
|
|
381
515
|
lowerer.typeParamTsBindings = prevTsBindings;
|
|
@@ -419,7 +553,7 @@ function internGenericInstance(lowerer, blame, info, params, returnType, makeBin
|
|
|
419
553
|
const typeArgsText = `<${rendered.length > 80 ? rendered.slice(0, 77) + "..." : rendered}>`;
|
|
420
554
|
inst = {
|
|
421
555
|
path,
|
|
422
|
-
name: `${info.qualifiedName}
|
|
556
|
+
name: keyedHelperName(lowerer, `${info.qualifiedName}%`, key, ""),
|
|
423
557
|
ordinal: info.instances.size,
|
|
424
558
|
params,
|
|
425
559
|
returnType,
|
|
@@ -944,6 +1078,78 @@ export function lowerGenericFnValue(lowerer, ref, info) {
|
|
|
944
1078
|
}
|
|
945
1079
|
if (!target)
|
|
946
1080
|
fenceUnpinned();
|
|
1081
|
+
return guardEarlyBindingValue(lowerer, info, ref, pinnedGenericClosure(lowerer, ref, info, target, fenceUnpinned));
|
|
1082
|
+
}
|
|
1083
|
+
/** The value a generic binding declared inside a function stores when a
|
|
1084
|
+
* nested function read it before the declaration lowered (`const read =
|
|
1085
|
+
* () => id; const id: (x: number) => number = <T>(x: T): T => x`): such
|
|
1086
|
+
* a read resolves to an ordinary TDZ local, so the declaration assigns it
|
|
1087
|
+
* the instance its concrete declared signature pins. Each evaluation of
|
|
1088
|
+
* the declaration makes a new function object, as in JavaScript: the
|
|
1089
|
+
* value is a closure over a forwarder to the instance, not the instance's
|
|
1090
|
+
* interned closure. */
|
|
1091
|
+
export function genericBindingStoredValue(lowerer, decl, info) {
|
|
1092
|
+
const name = decl.name;
|
|
1093
|
+
const fenceUnpinned = () => lowerer.unsupported("SC1090", name, `generic function bindings read before their declaration without a concrete declared signature (annotate '${info.baseName}' with one, or declare it before its uses)`);
|
|
1094
|
+
const sigs = lowerer.checker.getCallSignatures(lowerer.typeOf(name));
|
|
1095
|
+
if (sigs.length !== 1)
|
|
1096
|
+
fenceUnpinned();
|
|
1097
|
+
const pinned = pinnedGenericClosure(lowerer, name, info, sigs[0], fenceUnpinned);
|
|
1098
|
+
const async = ts.getModifiers(info.decl)?.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword);
|
|
1099
|
+
if (pinned.kind !== "closure" || pinned.type.kind !== "func" || pinned.type.rest || async)
|
|
1100
|
+
return lowerer.unsupported("SC1090", name, `async or rest-parameter generic function bindings read before their declaration (each evaluation of '${info.baseName}' makes a new function object)`);
|
|
1101
|
+
return {
|
|
1102
|
+
...pinned,
|
|
1103
|
+
fnName: genericValueForwarder(lowerer, info, pinned.fnName, pinned.type, pinned.loc),
|
|
1104
|
+
};
|
|
1105
|
+
}
|
|
1106
|
+
/** A lifted function that calls the instance `instance` (of type `type`)
|
|
1107
|
+
* with its own arguments. Lifted functions get a new closure object per
|
|
1108
|
+
* evaluation; module functions, which instances are, get one interned
|
|
1109
|
+
* closure. */
|
|
1110
|
+
function genericValueForwarder(lowerer, info, instance, type, at) {
|
|
1111
|
+
info.valueForwarders ??= new Map();
|
|
1112
|
+
const existing = info.valueForwarders.get(instance);
|
|
1113
|
+
if (existing !== undefined)
|
|
1114
|
+
return existing;
|
|
1115
|
+
const name = `${instance}%value`;
|
|
1116
|
+
const loc = helperLoc(at);
|
|
1117
|
+
const params = type.params.map((paramType, i) => ({
|
|
1118
|
+
localId: `%arg${i}.0`,
|
|
1119
|
+
name: `%arg${i}`,
|
|
1120
|
+
type: paramType,
|
|
1121
|
+
}));
|
|
1122
|
+
const call = {
|
|
1123
|
+
kind: "call",
|
|
1124
|
+
callee: instance,
|
|
1125
|
+
args: params.map((p) => ({ kind: "varRef", localId: p.localId, type: p.type, loc })),
|
|
1126
|
+
type: type.ret,
|
|
1127
|
+
loc,
|
|
1128
|
+
};
|
|
1129
|
+
lowerer.liftedFns.push({
|
|
1130
|
+
name,
|
|
1131
|
+
params,
|
|
1132
|
+
returnType: type.ret,
|
|
1133
|
+
locals: params.map((p) => ({ id: p.localId, name: p.name, type: p.type, mutable: false })),
|
|
1134
|
+
captures: [],
|
|
1135
|
+
...(ts.isFunctionExpression(info.decl) ? { ownsPrototype: true } : {}),
|
|
1136
|
+
body: type.ret.kind === "void"
|
|
1137
|
+
? [
|
|
1138
|
+
{ kind: "exprStmt", expr: call, loc },
|
|
1139
|
+
{ kind: "return", value: null, loc },
|
|
1140
|
+
]
|
|
1141
|
+
: [{ kind: "return", value: call, loc }],
|
|
1142
|
+
loc,
|
|
1143
|
+
});
|
|
1144
|
+
lowerer.noteEdge(name);
|
|
1145
|
+
info.valueForwarders.set(instance, name);
|
|
1146
|
+
return name;
|
|
1147
|
+
}
|
|
1148
|
+
/** The closure of the instance of `info` that `target` pins, for a value
|
|
1149
|
+
* read at `ref`. `fenceUnpinned` reports a signature that leaves a type
|
|
1150
|
+
* parameter unbound. */
|
|
1151
|
+
function pinnedGenericClosure(lowerer, ref, info, target, fenceUnpinned) {
|
|
1152
|
+
const loc = locOf(ref);
|
|
947
1153
|
const bindings = new Map();
|
|
948
1154
|
unifySignatureBindings(lowerer, info, target, bindings);
|
|
949
1155
|
const hofBinding = runtimeOptionalHofGenericBinding(lowerer, ref, info);
|
|
@@ -1740,7 +1946,7 @@ function internImplicitInstance(lowerer, blame, info, shapes, argTypes, patternK
|
|
|
1740
1946
|
const declared = dynamicBroadPromise ? null : implicitDeclaredReturn(lowerer, info);
|
|
1741
1947
|
inst = {
|
|
1742
1948
|
path,
|
|
1743
|
-
name: `${info.qualifiedName}
|
|
1949
|
+
name: keyedHelperName(lowerer, `${info.qualifiedName}%`, key, ""),
|
|
1744
1950
|
ordinal: info.instances.size,
|
|
1745
1951
|
params: shapes,
|
|
1746
1952
|
// The promise callers rely on before the body settles it: the
|
|
@@ -1921,7 +2127,7 @@ export function implicitLocalFnInfoOf(lowerer, decl, fnNode) {
|
|
|
1921
2127
|
const info = {
|
|
1922
2128
|
decl: fnNode,
|
|
1923
2129
|
baseName: name,
|
|
1924
|
-
qualifiedName: lowerer.qualify(ts.getSourceFileOfNode(decl), nsPathPrefix(stmt ?? decl, decl) + `${name}%l${
|
|
2130
|
+
qualifiedName: lowerer.qualify(ts.getSourceFileOfNode(decl), nsPathPrefix(lowerer, stmt ?? decl, decl) + `${name}%l${positionTag(lowerer, decl)}`),
|
|
1925
2131
|
typeParams: [],
|
|
1926
2132
|
instances: new Map(),
|
|
1927
2133
|
implicitParams: implicit,
|
|
@@ -1993,7 +2199,7 @@ export function objLitGenericFnInfoOf(lowerer, blame, name, found) {
|
|
|
1993
2199
|
const info = {
|
|
1994
2200
|
decl: fnNode,
|
|
1995
2201
|
baseName: name,
|
|
1996
|
-
qualifiedName: lowerer.qualify(ts.getSourceFileOfNode(fnNode), `%ol${
|
|
2202
|
+
qualifiedName: lowerer.qualify(ts.getSourceFileOfNode(fnNode), `%ol${positionTag(lowerer, fnNode)}.${name}`),
|
|
1997
2203
|
typeParams,
|
|
1998
2204
|
instances: new Map(),
|
|
1999
2205
|
objectLiteral: true,
|
|
@@ -2114,14 +2320,24 @@ export function bindingGenericFnInfoOf(lowerer, decl, fnNode) {
|
|
|
2114
2320
|
const info = {
|
|
2115
2321
|
decl: fnNode,
|
|
2116
2322
|
baseName: name,
|
|
2117
|
-
qualifiedName: lowerer.qualify(ts.getSourceFileOfNode(decl), nsPathPrefix(stmt ?? decl, decl) +
|
|
2323
|
+
qualifiedName: lowerer.qualify(ts.getSourceFileOfNode(decl), nsPathPrefix(lowerer, stmt ?? decl, decl) +
|
|
2118
2324
|
(topLevel ? name : `${name}%l${ts.tokenStartOfNode(decl)}`)),
|
|
2119
2325
|
typeParams,
|
|
2120
2326
|
instances: new Map(),
|
|
2121
2327
|
...(functionScoped ? { functionScoped: true } : {}),
|
|
2328
|
+
bindingDecl: decl,
|
|
2122
2329
|
};
|
|
2123
2330
|
lowerer.bindingGenericFns.set(fnNode, info);
|
|
2124
2331
|
lowerer.genericFnsBySymbol.set(sym, info);
|
|
2332
|
+
// Module-scope uses resolve to the instances from the start, so those
|
|
2333
|
+
// that can run first need the flag. Inside a function the declaration
|
|
2334
|
+
// registers before any later use lowers, and earlier uses read a TDZ
|
|
2335
|
+
// box (genericBindingStoredValue).
|
|
2336
|
+
if (!functionScoped) {
|
|
2337
|
+
const presence = bindingPresenceOf(lowerer, info, decl, sym);
|
|
2338
|
+
if (presence !== undefined)
|
|
2339
|
+
info.presence = presence;
|
|
2340
|
+
}
|
|
2125
2341
|
if (ts.isFunctionExpression(fnNode) && fnNode.name !== undefined) {
|
|
2126
2342
|
const inner = lowerer.checker.getSymbolAtLocation(fnNode.name);
|
|
2127
2343
|
if (inner)
|
|
@@ -2129,6 +2345,225 @@ export function bindingGenericFnInfoOf(lowerer, decl, fnNode) {
|
|
|
2129
2345
|
}
|
|
2130
2346
|
return info;
|
|
2131
2347
|
}
|
|
2348
|
+
/** Whether `use`, a reference to the binding `info` declares, can only
|
|
2349
|
+
* run after the declaration has run: it follows the declaration in its
|
|
2350
|
+
* statement list (closures count where they are created), sits inside the
|
|
2351
|
+
* initializer itself, or is inside a function declaration whose every
|
|
2352
|
+
* reference does. References from other modules run after this module's
|
|
2353
|
+
* body, and export specifiers only export. A use the check cannot place
|
|
2354
|
+
* answers false. */
|
|
2355
|
+
export function runsAfterDeclaration(lowerer, info, use) {
|
|
2356
|
+
const decl = info.bindingDecl;
|
|
2357
|
+
if (decl === undefined)
|
|
2358
|
+
return true;
|
|
2359
|
+
info.ordering ??= new Map();
|
|
2360
|
+
return useRunsAfter(lowerer, decl, use, info.ordering, new Set());
|
|
2361
|
+
}
|
|
2362
|
+
function useRunsAfter(lowerer, decl, use, memo, inProgress) {
|
|
2363
|
+
if (ts.getSourceFileOfNode(use) !== ts.getSourceFileOfNode(decl))
|
|
2364
|
+
return true;
|
|
2365
|
+
const init = decl.initializer;
|
|
2366
|
+
if (init !== undefined && use.pos >= init.pos && use.end <= init.end)
|
|
2367
|
+
return true;
|
|
2368
|
+
const stmt = decl.parent?.parent;
|
|
2369
|
+
const list = stmt?.parent;
|
|
2370
|
+
if (stmt === undefined || list === undefined)
|
|
2371
|
+
return false;
|
|
2372
|
+
for (let n = use; n.parent !== undefined; n = n.parent) {
|
|
2373
|
+
if (n.parent === list)
|
|
2374
|
+
return n === stmt ? use.pos >= decl.end : n.pos >= stmt.end;
|
|
2375
|
+
if (ts.isFunctionDeclaration(n))
|
|
2376
|
+
return functionRunsAfter(lowerer, decl, n, memo, inProgress);
|
|
2377
|
+
}
|
|
2378
|
+
return false;
|
|
2379
|
+
}
|
|
2380
|
+
/** Whether every call of the function declaration `fn` runs after `decl`
|
|
2381
|
+
* has run. A function in progress counts as running after: its calls of
|
|
2382
|
+
* itself, directly or through other functions, add no earlier caller.
|
|
2383
|
+
* Only answers that depend on no function in progress are memoized. */
|
|
2384
|
+
function functionRunsAfter(lowerer, decl, fn, memo, inProgress) {
|
|
2385
|
+
const known = memo.get(fn);
|
|
2386
|
+
if (known !== undefined)
|
|
2387
|
+
return known;
|
|
2388
|
+
if (inProgress.has(fn))
|
|
2389
|
+
return true;
|
|
2390
|
+
// `export default function () {}`: only importers call it, after this
|
|
2391
|
+
// module's body has run.
|
|
2392
|
+
if (fn.name === undefined)
|
|
2393
|
+
return true;
|
|
2394
|
+
inProgress.add(fn);
|
|
2395
|
+
let result = true;
|
|
2396
|
+
try {
|
|
2397
|
+
const symbol = lowerer.checker.getSymbolAtLocation(fn.name);
|
|
2398
|
+
if (symbol === undefined)
|
|
2399
|
+
result = false;
|
|
2400
|
+
else {
|
|
2401
|
+
for (const ref of bindingReferences(lowerer, ts.getSourceFileOfNode(fn), symbol, fn.name)) {
|
|
2402
|
+
if (ref.pos >= fn.pos && ref.end <= fn.end)
|
|
2403
|
+
continue;
|
|
2404
|
+
if (!useRunsAfter(lowerer, decl, ref, memo, inProgress)) {
|
|
2405
|
+
result = false;
|
|
2406
|
+
break;
|
|
2407
|
+
}
|
|
2408
|
+
}
|
|
2409
|
+
}
|
|
2410
|
+
}
|
|
2411
|
+
finally {
|
|
2412
|
+
inProgress.delete(fn);
|
|
2413
|
+
}
|
|
2414
|
+
if (inProgress.size === 0)
|
|
2415
|
+
memo.set(fn, result);
|
|
2416
|
+
return result;
|
|
2417
|
+
}
|
|
2418
|
+
/** The value references of `symbol` in `file` other than `name` (its
|
|
2419
|
+
* declaration name): identifiers spelled like it that resolve to it,
|
|
2420
|
+
* outside type positions and export specifiers. */
|
|
2421
|
+
function bindingReferences(lowerer, file, symbol, name) {
|
|
2422
|
+
let byName = lowerer.bindingIdentifiers.get(file);
|
|
2423
|
+
if (byName === undefined) {
|
|
2424
|
+
byName = new Map();
|
|
2425
|
+
lowerer.bindingIdentifiers.set(file, byName);
|
|
2426
|
+
}
|
|
2427
|
+
let idents = byName.get(name.text);
|
|
2428
|
+
if (idents === undefined) {
|
|
2429
|
+
const found = [];
|
|
2430
|
+
ts.walkPreorder(file, (node) => {
|
|
2431
|
+
if (ts.isIdentifier(node) && node.text === name.text)
|
|
2432
|
+
found.push(node);
|
|
2433
|
+
return undefined;
|
|
2434
|
+
});
|
|
2435
|
+
lowerer.checker.prefetchSymbolNodesExact(found);
|
|
2436
|
+
byName.set(name.text, found);
|
|
2437
|
+
idents = found;
|
|
2438
|
+
}
|
|
2439
|
+
return idents.filter((ident) => {
|
|
2440
|
+
if (ident === name)
|
|
2441
|
+
return false;
|
|
2442
|
+
const parent = ident.parent;
|
|
2443
|
+
if (parent === undefined || ts.isExportSpecifier(parent) || ts.isExportAssignment(parent))
|
|
2444
|
+
return false;
|
|
2445
|
+
let resolved = lowerer.checker.getSymbolAtLocation(ident);
|
|
2446
|
+
if (ts.isShorthandPropertyAssignment(parent) && parent.name === ident)
|
|
2447
|
+
resolved = lowerer.checker.getShorthandAssignmentValueSymbol(parent) ?? resolved;
|
|
2448
|
+
if (resolved !== symbol)
|
|
2449
|
+
return false;
|
|
2450
|
+
for (let p = parent; p !== undefined; p = p.parent) {
|
|
2451
|
+
if (ts.isTypeNode(p) && p.kind !== ts.SyntaxKind.ExpressionWithTypeArguments)
|
|
2452
|
+
return false;
|
|
2453
|
+
if (ts.isStatement(p) || ts.isFunctionLike(p))
|
|
2454
|
+
break;
|
|
2455
|
+
}
|
|
2456
|
+
return true;
|
|
2457
|
+
});
|
|
2458
|
+
}
|
|
2459
|
+
/** The presence flag of a module-scope generic binding that code can use
|
|
2460
|
+
* before its declaration runs (a hoisted function or an earlier closure
|
|
2461
|
+
* called during module evaluation), or undefined when every use runs
|
|
2462
|
+
* after it. The declaration statement sets the flag. */
|
|
2463
|
+
function bindingPresenceOf(lowerer, info, decl, symbol) {
|
|
2464
|
+
const name = decl.name;
|
|
2465
|
+
const early = bindingReferences(lowerer, ts.getSourceFileOfNode(decl), symbol, name).some((ref) => !runsAfterDeclaration(lowerer, info, ref));
|
|
2466
|
+
if (!early)
|
|
2467
|
+
return undefined;
|
|
2468
|
+
const flagId = `%g.${info.qualifiedName}%initialized`;
|
|
2469
|
+
lowerer.globalsList.push({ id: flagId, name: "%initialized", type: BOOL, mutable: true });
|
|
2470
|
+
return { flagId, lexical: !isVarDeclared(decl) };
|
|
2471
|
+
}
|
|
2472
|
+
/** The statement that records a generic binding's declaration as run,
|
|
2473
|
+
* for a binding with a presence flag. */
|
|
2474
|
+
export function genericBindingPresenceStore(info, decl) {
|
|
2475
|
+
if (info.presence === undefined)
|
|
2476
|
+
return null;
|
|
2477
|
+
const loc = locOf(decl);
|
|
2478
|
+
return {
|
|
2479
|
+
kind: "assign",
|
|
2480
|
+
localId: info.presence.flagId,
|
|
2481
|
+
value: { kind: "boolLit", value: true, type: BOOL, loc },
|
|
2482
|
+
loc,
|
|
2483
|
+
};
|
|
2484
|
+
}
|
|
2485
|
+
/** A call of a generic binding where the binding may not be initialized
|
|
2486
|
+
* yet. A `let`/`const` binding in its temporal dead zone throws Node's
|
|
2487
|
+
* ReferenceError before the arguments run; an unassigned `var` is
|
|
2488
|
+
* undefined, so the arguments run and the call throws "is not a
|
|
2489
|
+
* function". Calls that run after the declaration stay direct. */
|
|
2490
|
+
function guardEarlyBindingCall(lowerer, info, expr, call) {
|
|
2491
|
+
if (info.bindingDecl === undefined || runsAfterDeclaration(lowerer, info, expr))
|
|
2492
|
+
return call;
|
|
2493
|
+
const loc = call.loc;
|
|
2494
|
+
const presence = requirePresence(lowerer, info, expr.expression);
|
|
2495
|
+
const flag = { kind: "varRef", localId: presence.flagId, type: BOOL, loc };
|
|
2496
|
+
if (presence.lexical)
|
|
2497
|
+
return {
|
|
2498
|
+
kind: "seqExpr",
|
|
2499
|
+
stmts: [tdzCheck(flag, info.baseName, loc)],
|
|
2500
|
+
result: call,
|
|
2501
|
+
type: call.type,
|
|
2502
|
+
loc,
|
|
2503
|
+
};
|
|
2504
|
+
// Arguments first, in order, then the check: Node evaluates them
|
|
2505
|
+
// before it finds the callee is not callable.
|
|
2506
|
+
const stmts = [];
|
|
2507
|
+
const args = call.args.map((arg) => {
|
|
2508
|
+
const id = `%earlyCallArg.${lowerer.ctx.locals.length}`;
|
|
2509
|
+
lowerer.ctx.locals.push({ id, name: "%earlyCallArg", type: arg.type, mutable: false });
|
|
2510
|
+
stmts.push({ kind: "varDecl", localId: id, init: arg, loc });
|
|
2511
|
+
return { kind: "varRef", localId: id, type: arg.type, loc };
|
|
2512
|
+
});
|
|
2513
|
+
return {
|
|
2514
|
+
kind: "seqExpr",
|
|
2515
|
+
stmts,
|
|
2516
|
+
result: {
|
|
2517
|
+
kind: "ternary",
|
|
2518
|
+
cond: flag,
|
|
2519
|
+
then: { ...call, args },
|
|
2520
|
+
else_: nodeThrowExpr(1, "", `${info.baseName} is not a function`, call.type, loc),
|
|
2521
|
+
type: call.type,
|
|
2522
|
+
loc,
|
|
2523
|
+
},
|
|
2524
|
+
type: call.type,
|
|
2525
|
+
loc,
|
|
2526
|
+
};
|
|
2527
|
+
}
|
|
2528
|
+
/** A generic binding read as a value where it may not be initialized
|
|
2529
|
+
* yet: a `let`/`const` binding checks its temporal dead zone first. */
|
|
2530
|
+
function guardEarlyBindingValue(lowerer, info, ref, value) {
|
|
2531
|
+
if (info.bindingDecl === undefined || runsAfterDeclaration(lowerer, info, ref))
|
|
2532
|
+
return value;
|
|
2533
|
+
const presence = requirePresence(lowerer, info, ref);
|
|
2534
|
+
if (!presence.lexical)
|
|
2535
|
+
lowerer.unsupported("SC1090", ref, `generic 'var' bindings read as values before their declaration runs (Node reads undefined there; declare '${info.baseName}' with const)`);
|
|
2536
|
+
const loc = value.loc;
|
|
2537
|
+
const flag = { kind: "varRef", localId: presence.flagId, type: BOOL, loc };
|
|
2538
|
+
return {
|
|
2539
|
+
kind: "seqExpr",
|
|
2540
|
+
stmts: [tdzCheck(flag, info.baseName, loc)],
|
|
2541
|
+
result: value,
|
|
2542
|
+
type: value.type,
|
|
2543
|
+
loc,
|
|
2544
|
+
};
|
|
2545
|
+
}
|
|
2546
|
+
/** The presence flag a use that can run before the declaration checks.
|
|
2547
|
+
* Only module-scope bindings have one: a binding inside a function would
|
|
2548
|
+
* need a per-call flag that its closures share. */
|
|
2549
|
+
function requirePresence(lowerer, info, blame) {
|
|
2550
|
+
if (info.presence !== undefined)
|
|
2551
|
+
return info.presence;
|
|
2552
|
+
return lowerer.unsupported("SC1090", blame, `generic arrow/function-expression bindings declared inside functions that code can call before their declaration runs (the binding '${info.baseName}' is a 'var' in a branch or block, or is called from a place that can run first — declare it with const before its uses)`);
|
|
2553
|
+
}
|
|
2554
|
+
function tdzCheck(flag, name, loc) {
|
|
2555
|
+
return {
|
|
2556
|
+
kind: "exprStmt",
|
|
2557
|
+
expr: {
|
|
2558
|
+
kind: "intrinsic",
|
|
2559
|
+
name: "module.tdzCheck",
|
|
2560
|
+
args: [flag, { kind: "strLit", value: name, type: STRING, loc }],
|
|
2561
|
+
type: VOID,
|
|
2562
|
+
loc,
|
|
2563
|
+
},
|
|
2564
|
+
loc,
|
|
2565
|
+
};
|
|
2566
|
+
}
|
|
2132
2567
|
/** `const h = id` — a binding ALIASING a generic function (a top-level
|
|
2133
2568
|
* declaration, a registered generic binding, or another alias — resolved
|
|
2134
2569
|
* left to right in declaration order). The alias registers the SAME info
|