@scriptc/compiler 0.3.6 → 0.4.0
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 +682 -50
- package/ambient/scriptc.d.ts +134 -0
- package/dist/backend/cycle-analysis.d.ts +1 -1
- package/dist/backend/cycle-analysis.js +1 -0
- package/dist/backend/cycle-analysis.js.map +1 -1
- package/dist/backend/cycle-analysis.test.js +13 -1
- package/dist/backend/cycle-analysis.test.js.map +1 -1
- package/dist/backend/cycle-mutability.js +16 -5
- package/dist/backend/cycle-mutability.js.map +1 -1
- package/dist/backend/executable-features.js +13 -0
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/immutability.test.js +1 -1
- package/dist/backend/library-pack.js +6 -0
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/llvm/alloc.d.ts +41 -4
- package/dist/backend/llvm/alloc.js +138 -7
- package/dist/backend/llvm/alloc.js.map +1 -1
- package/dist/backend/llvm/alloc.test.js +30 -1
- package/dist/backend/llvm/alloc.test.js.map +1 -1
- package/dist/backend/llvm/appended-array-literals.test.js +1 -1
- package/dist/backend/llvm/array-search.test.js +1 -1
- package/dist/backend/llvm/blocks.d.ts +8 -0
- package/dist/backend/llvm/blocks.js +43 -1
- package/dist/backend/llvm/blocks.js.map +1 -1
- package/dist/backend/llvm/blocks.test.js +22 -1
- package/dist/backend/llvm/blocks.test.js.map +1 -1
- package/dist/backend/llvm/byte-numbers.js +15 -5
- package/dist/backend/llvm/byte-numbers.js.map +1 -1
- package/dist/backend/llvm/bytes-alias.d.ts +14 -0
- package/dist/backend/llvm/bytes-alias.js +20 -0
- package/dist/backend/llvm/bytes-alias.js.map +1 -0
- package/dist/backend/llvm/bytes-loop-versions.d.ts +86 -0
- package/dist/backend/llvm/bytes-loop-versions.js +506 -0
- package/dist/backend/llvm/bytes-loop-versions.js.map +1 -0
- package/dist/backend/llvm/bytes-loop-versions.test.d.ts +1 -0
- package/dist/backend/llvm/bytes-loop-versions.test.js +244 -0
- package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -0
- package/dist/backend/llvm/call-lifetimes.js +50 -1
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.test.js +34 -0
- package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/checked-narrows.test.js +1 -1
- package/dist/backend/llvm/checked-value-lifetimes.js +4 -1
- package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
- package/dist/backend/llvm/classes.d.ts +11 -0
- package/dist/backend/llvm/classes.js +71 -14
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +58 -8
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/common.js +1 -0
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.d.ts +5 -1
- package/dist/backend/llvm/constant-callbacks.js +55 -12
- package/dist/backend/llvm/constant-callbacks.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.test.js +88 -1
- package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
- package/dist/backend/llvm/counted-loops.d.ts +4 -0
- package/dist/backend/llvm/counted-loops.js +37 -0
- package/dist/backend/llvm/counted-loops.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.d.ts +12 -3
- package/dist/backend/llvm/dense-array-access.js +72 -14
- package/dist/backend/llvm/dense-array-access.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.test.js +59 -3
- package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
- package/dist/backend/llvm/dense-array-loops.d.ts +51 -0
- package/dist/backend/llvm/dense-array-loops.js +162 -0
- package/dist/backend/llvm/dense-array-loops.js.map +1 -0
- package/dist/backend/llvm/dense-array-loops.test.d.ts +1 -0
- package/dist/backend/llvm/dense-array-loops.test.js +128 -0
- package/dist/backend/llvm/dense-array-loops.test.js.map +1 -0
- package/dist/backend/llvm/dyn-handle-tags.test.d.ts +1 -0
- package/dist/backend/llvm/dyn-handle-tags.test.js +38 -0
- package/dist/backend/llvm/dyn-handle-tags.test.js.map +1 -0
- package/dist/backend/llvm/dyn.d.ts +28 -4
- package/dist/backend/llvm/dyn.js +293 -178
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.d.ts +64 -0
- package/dist/backend/llvm/emit-function.js +1190 -0
- package/dist/backend/llvm/emit-function.js.map +1 -0
- package/dist/backend/llvm/emit-module.d.ts +24 -0
- package/dist/backend/llvm/emit-module.js +1535 -0
- package/dist/backend/llvm/emit-module.js.map +1 -0
- package/dist/backend/llvm/emit-statements.d.ts +58 -0
- package/dist/backend/llvm/emit-statements.js +1964 -0
- package/dist/backend/llvm/emit-statements.js.map +1 -0
- package/dist/backend/llvm/emitter.d.ts +547 -283
- package/dist/backend/llvm/emitter.js +689 -4643
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +57 -3
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +73 -46
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-async.test.js +1 -1
- package/dist/backend/llvm/expr-bytes.d.ts +2 -0
- package/dist/backend/llvm/expr-bytes.js +76 -29
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-callbacks.d.ts +6 -2
- package/dist/backend/llvm/expr-callbacks.js +48 -11
- 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 +71 -53
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-calls.test.js +1 -1
- package/dist/backend/llvm/expr-containers.js +39 -15
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-control.js +16 -16
- package/dist/backend/llvm/expr-control.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.d.ts +3 -0
- package/dist/backend/llvm/expr-dynamic.js +67 -62
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +121 -25
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.test.js +2 -2
- package/dist/backend/llvm/expr-records.d.ts +1 -1
- package/dist/backend/llvm/expr-records.js +32 -11
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +54 -12
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.test.js +2 -2
- package/dist/backend/llvm/expr-stream-callbacks.js +22 -1
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/int32-abi.test.js +2 -2
- package/dist/backend/llvm/integer-clones.test.js +3 -3
- package/dist/backend/llvm/integer-remainder.d.ts +34 -13
- package/dist/backend/llvm/integer-remainder.js +156 -22
- package/dist/backend/llvm/integer-remainder.js.map +1 -1
- package/dist/backend/llvm/intern-tables.test.js +1 -1
- package/dist/backend/llvm/jsval-encoding.d.ts +21 -0
- package/dist/backend/llvm/jsval-encoding.js +20 -0
- package/dist/backend/llvm/jsval-encoding.js.map +1 -0
- package/dist/backend/llvm/jsval.d.ts +12 -0
- package/dist/backend/llvm/jsval.js +488 -0
- package/dist/backend/llvm/jsval.js.map +1 -0
- package/dist/backend/llvm/lazy-captures.d.ts +12 -2
- package/dist/backend/llvm/lazy-captures.js +39 -17
- package/dist/backend/llvm/lazy-captures.js.map +1 -1
- package/dist/backend/llvm/lib-abi.js +1 -1
- package/dist/backend/llvm/lib-abi.js.map +1 -1
- package/dist/backend/llvm/lib-connect.js +1 -1
- package/dist/backend/llvm/lib-connect.js.map +1 -1
- package/dist/backend/llvm/lib-datagram.js +14 -8
- package/dist/backend/llvm/lib-datagram.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +189 -23
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +42 -13
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-http2.js +3 -3
- package/dist/backend/llvm/lib-http2.js.map +1 -1
- package/dist/backend/llvm/lib-lookup.js +2 -2
- package/dist/backend/llvm/lib-lookup.js.map +1 -1
- package/dist/backend/llvm/lib-network.js +56 -22
- package/dist/backend/llvm/lib-network.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +90 -50
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.d.ts +12 -0
- package/dist/backend/llvm/lib-shared.js +187 -6
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +46 -16
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/lib-test.js +43 -7
- package/dist/backend/llvm/lib-test.js.map +1 -1
- package/dist/backend/llvm/lib-tls.js +4 -9
- package/dist/backend/llvm/lib-tls.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +2 -2
- package/dist/backend/llvm/local-array-reads.test.js +1 -1
- package/dist/backend/llvm/local-extents.d.ts +19 -0
- package/dist/backend/llvm/local-extents.js +169 -0
- package/dist/backend/llvm/local-extents.js.map +1 -0
- package/dist/backend/llvm/local-extents.test.d.ts +1 -0
- package/dist/backend/llvm/local-extents.test.js +92 -0
- package/dist/backend/llvm/local-extents.test.js.map +1 -0
- package/dist/backend/llvm/local-union-storage.js +7 -7
- package/dist/backend/llvm/local-union-storage.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.test.js +2 -2
- package/dist/backend/llvm/map-entry-fusion.test.js +1 -1
- package/dist/backend/llvm/map-number-lookup.js +2 -2
- package/dist/backend/llvm/map-number-lookup.test.js +2 -2
- package/dist/backend/llvm/map-read-lifetimes.test.js +2 -2
- package/dist/backend/llvm/narrow-guards.d.ts +38 -0
- package/dist/backend/llvm/narrow-guards.js +151 -0
- package/dist/backend/llvm/narrow-guards.js.map +1 -0
- package/dist/backend/llvm/nullable-unions.d.ts +64 -6
- package/dist/backend/llvm/nullable-unions.js +103 -6
- package/dist/backend/llvm/nullable-unions.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.test.d.ts +1 -0
- package/dist/backend/llvm/nullable-unions.test.js +65 -0
- package/dist/backend/llvm/nullable-unions.test.js.map +1 -0
- package/dist/backend/llvm/publish.d.ts +4 -0
- package/dist/backend/llvm/publish.js +14 -2
- package/dist/backend/llvm/publish.js.map +1 -1
- package/dist/backend/llvm/publish.test.js +1 -1
- package/dist/backend/llvm/receivers.d.ts +31 -0
- package/dist/backend/llvm/receivers.js +395 -0
- package/dist/backend/llvm/receivers.js.map +1 -0
- package/dist/backend/llvm/record-results.d.ts +12 -1
- package/dist/backend/llvm/record-results.js +64 -4
- package/dist/backend/llvm/record-results.js.map +1 -1
- package/dist/backend/llvm/reference-effects.js +9 -0
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- package/dist/backend/llvm/reference-writes.d.ts +4 -0
- package/dist/backend/llvm/reference-writes.js +142 -6
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/reference-writes.test.d.ts +1 -0
- package/dist/backend/llvm/reference-writes.test.js +88 -0
- package/dist/backend/llvm/reference-writes.test.js.map +1 -0
- package/dist/backend/llvm/regex-matchers.d.ts +8 -0
- package/dist/backend/llvm/regex-matchers.js +33 -0
- package/dist/backend/llvm/regex-matchers.js.map +1 -1
- package/dist/backend/llvm/regex-matchers.test.js +23 -1
- package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
- package/dist/backend/llvm/regions.d.ts +1 -1
- package/dist/backend/llvm/regions.js +9 -6
- package/dist/backend/llvm/regions.js.map +1 -1
- package/dist/backend/llvm/regions.test.js +1 -1
- package/dist/backend/llvm/shapes.d.ts +66 -43
- package/dist/backend/llvm/shapes.js +280 -21
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +37 -3
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/split-loops.js +2 -2
- package/dist/backend/llvm/split-loops.js.map +1 -1
- package/dist/backend/llvm/stack-objects.d.ts +26 -6
- package/dist/backend/llvm/stack-objects.js +133 -10
- package/dist/backend/llvm/stack-objects.js.map +1 -1
- package/dist/backend/llvm/stack-objects.test.js +55 -1
- package/dist/backend/llvm/stack-objects.test.js.map +1 -1
- package/dist/backend/llvm/stack-unions.test.js +1 -1
- package/dist/backend/llvm/string-construction.test.js +1 -1
- package/dist/backend/llvm/string-lifetimes.test.js +15 -14
- package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/string-slices.d.ts +25 -0
- package/dist/backend/llvm/string-slices.js +207 -1
- package/dist/backend/llvm/string-slices.js.map +1 -1
- package/dist/backend/llvm/string-slices.test.js +139 -2
- package/dist/backend/llvm/string-slices.test.js.map +1 -1
- package/dist/backend/llvm/switch-dispatch.test.js +2 -2
- package/dist/backend/llvm/thread-slots.d.ts +5 -0
- package/dist/backend/llvm/thread-slots.js +142 -0
- package/dist/backend/llvm/thread-slots.js.map +1 -0
- package/dist/backend/llvm/thread-slots.test.d.ts +1 -0
- package/dist/backend/llvm/thread-slots.test.js +110 -0
- package/dist/backend/llvm/thread-slots.test.js.map +1 -0
- package/dist/backend/llvm/union-repr.d.ts +7 -7
- package/dist/backend/llvm/union-repr.js +18 -2
- package/dist/backend/llvm/union-repr.js.map +1 -1
- package/dist/backend/llvm/union-retype.test.js +17 -3
- package/dist/backend/llvm/union-retype.test.js.map +1 -1
- package/dist/backend/llvm/walkers.d.ts +2 -2
- package/dist/backend/llvm/walkers.js +51 -26
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/llvm/wasm-modules.d.ts +16 -0
- package/dist/backend/llvm/wasm-modules.js +66 -0
- package/dist/backend/llvm/wasm-modules.js.map +1 -0
- package/dist/backend/llvm/wrapping-sums.d.ts +7 -0
- package/dist/backend/llvm/wrapping-sums.js +11 -3
- package/dist/backend/llvm/wrapping-sums.js.map +1 -1
- package/dist/backend/mangle.d.ts +7 -0
- package/dist/backend/mangle.js +11 -0
- package/dist/backend/mangle.js.map +1 -1
- package/dist/backend/may-throw.d.ts +3 -0
- package/dist/backend/may-throw.js +4 -2
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/may-throw.test.js +1 -1
- package/dist/backend/native/contracts.d.ts +37 -0
- package/dist/backend/native/executable.js +192 -137
- 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-link-info-core.d.ts +30 -0
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/publication.test.js +1 -1
- package/dist/backend/runtime-pack-core.d.ts +9 -1
- package/dist/backend/runtime-pack-core.js +10 -1
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-native.js +1 -1
- package/dist/backend/runtime-pack-native.js.map +1 -1
- package/dist/backend/runtime-pack-native.test.d.ts +1 -0
- package/dist/backend/runtime-pack-native.test.js +31 -0
- package/dist/backend/runtime-pack-native.test.js.map +1 -0
- package/dist/backend/runtime-pack-targets.test.js +5 -0
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +5 -0
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/stack-observations.d.ts +22 -0
- package/dist/backend/stack-observations.js +382 -0
- package/dist/backend/stack-observations.js.map +1 -0
- package/dist/backend/stack-observations.test.d.ts +1 -0
- package/dist/backend/stack-observations.test.js +233 -0
- package/dist/backend/stack-observations.test.js.map +1 -0
- package/dist/backend/target-diagnostics.js +8 -0
- package/dist/backend/target-diagnostics.js.map +1 -1
- package/dist/backend/target-diagnostics.test.js +1 -1
- package/dist/backend/warm-cache.js +5 -0
- package/dist/backend/warm-cache.js.map +1 -1
- package/dist/backend/young-nursery.d.ts +7 -0
- package/dist/backend/young-nursery.js +10 -0
- package/dist/backend/young-nursery.js.map +1 -0
- package/dist/cli/command.js +44 -4
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/usage.d.ts +11 -1
- package/dist/cli/usage.js +20 -1
- package/dist/cli/usage.js.map +1 -1
- package/dist/compat/fetch-profile.js +10 -1
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/compile-types.d.ts +13 -0
- package/dist/contracts/check.js +24 -6
- package/dist/contracts/check.js.map +1 -1
- package/dist/contracts/int32-elements.d.ts +115 -0
- package/dist/contracts/int32-elements.js +1179 -0
- package/dist/contracts/int32-elements.js.map +1 -0
- package/dist/coverage/report.d.ts +16 -0
- package/dist/coverage/report.js +182 -1
- package/dist/coverage/report.js.map +1 -1
- package/dist/coverage/surface-manifest.js +16 -3
- package/dist/coverage/surface-manifest.js.map +1 -1
- package/dist/coverage/verdict-cache.d.ts +2 -0
- package/dist/coverage/verdict-cache.js +12 -0
- package/dist/coverage/verdict-cache.js.map +1 -1
- package/dist/coverage/verdict-cache.test.js +2 -1
- package/dist/coverage/verdict-cache.test.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +10 -6
- package/dist/diagnostics/diagnostic.js +29 -21
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/envelope.d.ts +39 -2
- package/dist/diagnostics/envelope.js.map +1 -1
- package/dist/diagnostics/render.d.ts +7 -0
- package/dist/diagnostics/render.js +50 -13
- package/dist/diagnostics/render.js.map +1 -1
- package/dist/diagnostics/render.test.d.ts +1 -0
- package/dist/diagnostics/render.test.js +49 -0
- package/dist/diagnostics/render.test.js.map +1 -0
- package/dist/executable/executable-cache.d.ts +17 -0
- package/dist/executable/executable-cache.js +13 -1
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +7 -1
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/executable/prepare.js +2 -1
- package/dist/executable/prepare.js.map +1 -1
- package/dist/frontend/analysis.js +6 -1
- package/dist/frontend/analysis.js.map +1 -1
- package/dist/frontend/builtin-modules.d.ts +16 -2
- package/dist/frontend/builtin-modules.js +40 -7
- package/dist/frontend/builtin-modules.js.map +1 -1
- package/dist/frontend/cjs-syntax.js +52 -51
- package/dist/frontend/cjs-syntax.js.map +1 -1
- package/dist/frontend/contract-types.d.ts +3 -0
- package/dist/frontend/contract-types.js +36 -7
- package/dist/frontend/contract-types.js.map +1 -1
- package/dist/frontend/experimental-import.d.ts +5 -1
- package/dist/frontend/experimental-import.js +26 -7
- package/dist/frontend/experimental-import.js.map +1 -1
- package/dist/frontend/fork-target.js +20 -22
- package/dist/frontend/fork-target.js.map +1 -1
- package/dist/frontend/fork-target.test.js +2 -1
- package/dist/frontend/fork-target.test.js.map +1 -1
- package/dist/frontend/function-completion.js +6 -6
- package/dist/frontend/function-completion.js.map +1 -1
- package/dist/frontend/helper-tokens.js +15 -3
- package/dist/frontend/helper-tokens.js.map +1 -1
- package/dist/frontend/helper-tokens.test.js +7 -1
- package/dist/frontend/helper-tokens.test.js.map +1 -1
- package/dist/frontend/inferred-js-diagnostics.js +14 -17
- package/dist/frontend/inferred-js-diagnostics.js.map +1 -1
- package/dist/frontend/input-tracker.d.ts +3 -0
- package/dist/frontend/input-tracker.js +32 -3
- package/dist/frontend/input-tracker.js.map +1 -1
- package/dist/frontend/lib-contract.js +36 -32
- package/dist/frontend/lib-contract.js.map +1 -1
- package/dist/frontend/lib-exports.js +3 -3
- package/dist/frontend/lib-exports.js.map +1 -1
- package/dist/frontend/lowering/array-values.d.ts +8 -3
- package/dist/frontend/lowering/array-values.js +60 -11
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/assert-instances.js +4 -4
- package/dist/frontend/lowering/assert-instances.js.map +1 -1
- package/dist/frontend/lowering/assertion-identity.d.ts +12 -0
- package/dist/frontend/lowering/assertion-identity.js +70 -0
- package/dist/frontend/lowering/assertion-identity.js.map +1 -0
- package/dist/frontend/lowering/assertion-members.d.ts +28 -0
- package/dist/frontend/lowering/assertion-members.js +185 -0
- package/dist/frontend/lowering/assertion-members.js.map +1 -0
- package/dist/frontend/lowering/binding-analysis.js +27 -20
- package/dist/frontend/lowering/binding-analysis.js.map +1 -1
- package/dist/frontend/lowering/builtin-calls.js +63 -5
- package/dist/frontend/lowering/builtin-calls.js.map +1 -1
- package/dist/frontend/lowering/builtin-function-fences.d.ts +14 -0
- package/dist/frontend/lowering/builtin-function-fences.js +42 -0
- package/dist/frontend/lowering/builtin-function-fences.js.map +1 -0
- package/dist/frontend/lowering/builtins/arguments.js +1 -1
- package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
- package/dist/frontend/lowering/builtins/async-context.js +53 -52
- package/dist/frontend/lowering/builtins/async-context.js.map +1 -1
- package/dist/frontend/lowering/builtins/atomics.js +6 -6
- package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
- package/dist/frontend/lowering/builtins/blob.js +8 -6
- package/dist/frontend/lowering/builtins/blob.js.map +1 -1
- package/dist/frontend/lowering/builtins/builtin-class-dyn.d.ts +23 -0
- package/dist/frontend/lowering/builtins/builtin-class-dyn.js +156 -0
- package/dist/frontend/lowering/builtins/builtin-class-dyn.js.map +1 -0
- package/dist/frontend/lowering/builtins/callable-aliases.js +16 -5
- package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-async.js +7 -7
- package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-methods.d.ts +6 -4
- package/dist/frontend/lowering/builtins/child-process-methods.js +310 -57
- package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-sync.js +16 -10
- package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process.d.ts +6 -4
- package/dist/frontend/lowering/builtins/child-process.js +85 -61
- package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
- package/dist/frontend/lowering/builtins/class-values.d.ts +60 -0
- package/dist/frontend/lowering/builtins/class-values.js +226 -0
- package/dist/frontend/lowering/builtins/class-values.js.map +1 -0
- package/dist/frontend/lowering/builtins/compression.d.ts +9 -0
- package/dist/frontend/lowering/builtins/compression.js +107 -44
- package/dist/frontend/lowering/builtins/compression.js.map +1 -1
- package/dist/frontend/lowering/builtins/constants.d.ts +9 -1
- package/dist/frontend/lowering/builtins/constants.js +28 -7
- package/dist/frontend/lowering/builtins/constants.js.map +1 -1
- package/dist/frontend/lowering/builtins/crypto.d.ts +19 -0
- package/dist/frontend/lowering/builtins/crypto.js +211 -37
- package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
- package/dist/frontend/lowering/builtins/dates.d.ts +7 -1
- package/dist/frontend/lowering/builtins/dates.js +92 -16
- package/dist/frontend/lowering/builtins/dates.js.map +1 -1
- package/dist/frontend/lowering/builtins/disposable-stack.d.ts +18 -0
- package/dist/frontend/lowering/builtins/disposable-stack.js +137 -0
- package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -0
- package/dist/frontend/lowering/builtins/environment.js +3 -3
- package/dist/frontend/lowering/builtins/environment.js.map +1 -1
- package/dist/frontend/lowering/builtins/errors.d.ts +14 -10
- package/dist/frontend/lowering/builtins/errors.js +169 -3
- package/dist/frontend/lowering/builtins/errors.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.js +128 -116
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem.js +77 -77
- package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-glob.js +3 -3
- package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-streams.js +10 -11
- package/dist/frontend/lowering/builtins/fs-streams.js.map +1 -1
- package/dist/frontend/lowering/builtins/ipc.js +45 -8
- package/dist/frontend/lowering/builtins/ipc.js.map +1 -1
- package/dist/frontend/lowering/builtins/json.js +232 -24
- package/dist/frontend/lowering/builtins/json.js.map +1 -1
- package/dist/frontend/lowering/builtins/key-object.js +4 -4
- package/dist/frontend/lowering/builtins/key-object.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-bindings.d.ts +8 -0
- package/dist/frontend/lowering/builtins/module-bindings.js +71 -22
- package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-calls.js +55 -44
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-resolution.d.ts +4 -3
- package/dist/frontend/lowering/builtins/module-resolution.js +24 -23
- package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
- package/dist/frontend/lowering/builtins/navigator.d.ts +13 -0
- package/dist/frontend/lowering/builtins/navigator.js +40 -0
- package/dist/frontend/lowering/builtins/navigator.js.map +1 -0
- package/dist/frontend/lowering/builtins/net-address.d.ts +19 -0
- package/dist/frontend/lowering/builtins/net-address.js +156 -0
- package/dist/frontend/lowering/builtins/net-address.js.map +1 -0
- package/dist/frontend/lowering/builtins/numbers.js +25 -9
- package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
- package/dist/frontend/lowering/builtins/operating-system.d.ts +4 -0
- package/dist/frontend/lowering/builtins/operating-system.js +25 -12
- package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
- package/dist/frontend/lowering/builtins/performance.d.ts +12 -0
- package/dist/frontend/lowering/builtins/performance.js +259 -8
- package/dist/frontend/lowering/builtins/performance.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.d.ts +32 -1
- package/dist/frontend/lowering/builtins/process.js +461 -99
- package/dist/frontend/lowering/builtins/process.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.d.ts +5 -1
- package/dist/frontend/lowering/builtins/promises.js +326 -43
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/builtins/promisify-callback.d.ts +37 -0
- package/dist/frontend/lowering/builtins/promisify-callback.js +320 -0
- package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -0
- package/dist/frontend/lowering/builtins/properties.js +37 -1
- package/dist/frontend/lowering/builtins/properties.js.map +1 -1
- package/dist/frontend/lowering/builtins/querystring.js +14 -14
- package/dist/frontend/lowering/builtins/querystring.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +12 -2
- package/dist/frontend/lowering/builtins/readline.js +136 -39
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/receiver-types.js +3 -5
- package/dist/frontend/lowering/builtins/receiver-types.js.map +1 -1
- package/dist/frontend/lowering/builtins/reflection.js +16 -14
- package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
- package/dist/frontend/lowering/builtins/runtime-constructor.d.ts +26 -0
- package/dist/frontend/lowering/builtins/runtime-constructor.js +165 -0
- package/dist/frontend/lowering/builtins/runtime-constructor.js.map +1 -0
- package/dist/frontend/lowering/builtins/strings.js +101 -12
- package/dist/frontend/lowering/builtins/strings.js.map +1 -1
- package/dist/frontend/lowering/builtins/text-codecs.js +41 -38
- package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
- package/dist/frontend/lowering/builtins/timers.js +75 -30
- package/dist/frontend/lowering/builtins/timers.js.map +1 -1
- package/dist/frontend/lowering/builtins/url.d.ts +3 -0
- package/dist/frontend/lowering/builtins/url.js +120 -17
- package/dist/frontend/lowering/builtins/url.js.map +1 -1
- package/dist/frontend/lowering/builtins/util-types.js +20 -4
- package/dist/frontend/lowering/builtins/util-types.js.map +1 -1
- package/dist/frontend/lowering/builtins/v8.d.ts +11 -0
- package/dist/frontend/lowering/builtins/v8.js +105 -0
- package/dist/frontend/lowering/builtins/v8.js.map +1 -0
- package/dist/frontend/lowering/builtins/webassembly.d.ts +33 -0
- package/dist/frontend/lowering/builtins/webassembly.js +388 -0
- package/dist/frontend/lowering/builtins/webassembly.js.map +1 -0
- package/dist/frontend/lowering/builtins/webcrypto.d.ts +20 -0
- package/dist/frontend/lowering/builtins/webcrypto.js +112 -0
- package/dist/frontend/lowering/builtins/webcrypto.js.map +1 -0
- package/dist/frontend/lowering/builtins/workers.d.ts +12 -0
- package/dist/frontend/lowering/builtins/workers.js +193 -8
- package/dist/frontend/lowering/builtins/workers.js.map +1 -1
- package/dist/frontend/lowering/call-arguments.js +69 -14
- package/dist/frontend/lowering/call-arguments.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.d.ts +19 -1
- package/dist/frontend/lowering/call-signatures.js +254 -47
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/checked-promise-all.d.ts +3 -0
- package/dist/frontend/lowering/checked-promise-all.js +1 -1
- package/dist/frontend/lowering/checked-promise-all.js.map +1 -1
- package/dist/frontend/lowering/cjs-exports-object.d.ts +53 -0
- package/dist/frontend/lowering/cjs-exports-object.js +528 -0
- package/dist/frontend/lowering/cjs-exports-object.js.map +1 -0
- package/dist/frontend/lowering/cjs-inline-require.d.ts +86 -0
- package/dist/frontend/lowering/cjs-inline-require.js +314 -0
- package/dist/frontend/lowering/cjs-inline-require.js.map +1 -0
- package/dist/frontend/lowering/cjs-tsc-interop.d.ts +28 -0
- package/dist/frontend/lowering/cjs-tsc-interop.js +208 -0
- package/dist/frontend/lowering/cjs-tsc-interop.js.map +1 -0
- package/dist/frontend/lowering/class-attributes.d.ts +19 -0
- package/dist/frontend/lowering/class-attributes.js +378 -0
- package/dist/frontend/lowering/class-attributes.js.map +1 -0
- package/dist/frontend/lowering/class-callbacks.d.ts +3 -1
- package/dist/frontend/lowering/class-callbacks.js +21 -10
- package/dist/frontend/lowering/class-callbacks.js.map +1 -1
- package/dist/frontend/lowering/class-construction.js +49 -4
- package/dist/frontend/lowering/class-construction.js.map +1 -1
- package/dist/frontend/lowering/class-descriptors.d.ts +2 -0
- package/dist/frontend/lowering/class-descriptors.js +8 -8
- package/dist/frontend/lowering/class-descriptors.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +64 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +1115 -89
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-instance-constructor.js +1 -1
- package/dist/frontend/lowering/class-instance-constructor.js.map +1 -1
- package/dist/frontend/lowering/class-iterables.d.ts +11 -0
- package/dist/frontend/lowering/class-iterables.js +31 -0
- package/dist/frontend/lowering/class-iterables.js.map +1 -0
- package/dist/frontend/lowering/class-method-mutations.js +73 -35
- package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
- package/dist/frontend/lowering/class-method-values.js +56 -10
- package/dist/frontend/lowering/class-method-values.js.map +1 -1
- package/dist/frontend/lowering/class-protocol-dispatch.js +24 -22
- package/dist/frontend/lowering/class-protocol-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-protocols.js +25 -44
- package/dist/frontend/lowering/class-protocols.js.map +1 -1
- package/dist/frontend/lowering/class-prototypes.d.ts +6 -0
- package/dist/frontend/lowering/class-prototypes.js +80 -18
- package/dist/frontend/lowering/class-prototypes.js.map +1 -1
- package/dist/frontend/lowering/class-runtime-statics.js +1 -1
- package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
- package/dist/frontend/lowering/class-static-data.js +2 -2
- package/dist/frontend/lowering/class-static-data.js.map +1 -1
- package/dist/frontend/lowering/class-to-primitive.d.ts +25 -0
- package/dist/frontend/lowering/class-to-primitive.js +261 -0
- package/dist/frontend/lowering/class-to-primitive.js.map +1 -0
- package/dist/frontend/lowering/class-unions.d.ts +25 -0
- package/dist/frontend/lowering/class-unions.js +102 -1
- package/dist/frontend/lowering/class-unions.js.map +1 -1
- package/dist/frontend/lowering/code-generation.d.ts +14 -0
- package/dist/frontend/lowering/code-generation.js +127 -0
- package/dist/frontend/lowering/code-generation.js.map +1 -0
- package/dist/frontend/lowering/coercions/function-adapters.d.ts +16 -2
- package/dist/frontend/lowering/coercions/function-adapters.js +145 -3
- package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural-plans.js +25 -3
- package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +35 -3
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/coercions/unions.d.ts +15 -0
- package/dist/frontend/lowering/coercions/unions.js +57 -1
- package/dist/frontend/lowering/coercions/unions.js.map +1 -1
- package/dist/frontend/lowering/collection-ingestion.js +2 -2
- package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
- package/dist/frontend/lowering/collection-narrowing.js +2 -4
- package/dist/frontend/lowering/collection-narrowing.js.map +1 -1
- package/dist/frontend/lowering/construction-escapes.js +8 -8
- package/dist/frontend/lowering/construction-escapes.js.map +1 -1
- package/dist/frontend/lowering/construction-escapes.test.js +4 -4
- package/dist/frontend/lowering/construction-escapes.test.js.map +1 -1
- package/dist/frontend/lowering/constructor-returns.d.ts +61 -0
- package/dist/frontend/lowering/constructor-returns.js +477 -0
- package/dist/frontend/lowering/constructor-returns.js.map +1 -0
- package/dist/frontend/lowering/containers/array-callback-call.js +1 -1
- package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.d.ts +9 -0
- package/dist/frontend/lowering/containers/array-callbacks.js +266 -100
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-concat.js +1 -1
- package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.d.ts +0 -1
- package/dist/frontend/lowering/containers/array-construction.js +51 -13
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-from-async.d.ts +6 -5
- package/dist/frontend/lowering/containers/array-from-async.js +159 -14
- package/dist/frontend/lowering/containers/array-from-async.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +89 -77
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/array-pipelines.js +1 -0
- package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.js +161 -101
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.d.ts +9 -1
- package/dist/frontend/lowering/containers/callback-arguments.js +55 -5
- package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-grouping.d.ts +7 -8
- package/dist/frontend/lowering/containers/collection-grouping.js +217 -26
- package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +54 -25
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/dynamic-receivers.js +1 -1
- package/dist/frontend/lowering/containers/dynamic-receivers.js.map +1 -1
- package/dist/frontend/lowering/containers/exec-result-uses.js +2 -2
- package/dist/frontend/lowering/containers/exec-result-uses.js.map +1 -1
- package/dist/frontend/lowering/containers/for-of.d.ts +6 -0
- package/dist/frontend/lowering/containers/for-of.js +19 -19
- package/dist/frontend/lowering/containers/for-of.js.map +1 -1
- package/dist/frontend/lowering/containers/indexed-objects.js +142 -57
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/containers/iterator-helpers.d.ts +53 -4
- package/dist/frontend/lowering/containers/iterator-helpers.js +1581 -462
- package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
- package/dist/frontend/lowering/containers/match-row-uses.d.ts +17 -0
- package/dist/frontend/lowering/containers/match-row-uses.js +264 -0
- package/dist/frontend/lowering/containers/match-row-uses.js.map +1 -0
- package/dist/frontend/lowering/containers/string-and-regexp.d.ts +14 -0
- package/dist/frontend/lowering/containers/string-and-regexp.js +419 -30
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/containers/string-replacement.js +1 -1
- package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
- package/dist/frontend/lowering/cycle-initialization.d.ts +4 -0
- package/dist/frontend/lowering/cycle-initialization.js +39 -0
- package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
- package/dist/frontend/lowering/deferred-module-initializers.js +47 -43
- package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
- package/dist/frontend/lowering/devirtualize.d.ts +1 -1
- package/dist/frontend/lowering/devirtualize.js +27 -7
- package/dist/frontend/lowering/devirtualize.js.map +1 -1
- package/dist/frontend/lowering/divergences.d.ts +0 -5
- package/dist/frontend/lowering/divergences.js +62 -125
- package/dist/frontend/lowering/divergences.js.map +1 -1
- package/dist/frontend/lowering/dyn-streams.d.ts +25 -0
- package/dist/frontend/lowering/dyn-streams.js +257 -0
- package/dist/frontend/lowering/dyn-streams.js.map +1 -0
- package/dist/frontend/lowering/error-methods.js +4 -1
- package/dist/frontend/lowering/error-methods.js.map +1 -1
- package/dist/frontend/lowering/error-name-order.d.ts +19 -0
- package/dist/frontend/lowering/error-name-order.js +93 -0
- package/dist/frontend/lowering/error-name-order.js.map +1 -0
- package/dist/frontend/lowering/expressions/array-literals.d.ts +21 -0
- package/dist/frontend/lowering/expressions/array-literals.js +703 -0
- package/dist/frontend/lowering/expressions/array-literals.js.map +1 -0
- package/dist/frontend/lowering/expressions/binary.d.ts +35 -0
- package/dist/frontend/lowering/expressions/binary.js +2483 -0
- package/dist/frontend/lowering/expressions/binary.js.map +1 -0
- package/dist/frontend/lowering/expressions/element-access.d.ts +31 -0
- package/dist/frontend/lowering/expressions/element-access.js +1797 -0
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -0
- package/dist/frontend/lowering/expressions/evaluation-safety.js +4 -3
- package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
- package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +38 -0
- package/dist/frontend/lowering/expressions/hosted-narrowing.js +160 -0
- package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -0
- package/dist/frontend/lowering/expressions/identifiers.d.ts +4 -0
- package/dist/frontend/lowering/expressions/identifiers.js +830 -0
- package/dist/frontend/lowering/expressions/identifiers.js.map +1 -0
- package/dist/frontend/lowering/expressions/keyed-field-targets.d.ts +40 -0
- package/dist/frontend/lowering/expressions/keyed-field-targets.js +226 -0
- package/dist/frontend/lowering/expressions/keyed-field-targets.js.map +1 -0
- package/dist/frontend/lowering/expressions/narrowing.d.ts +37 -0
- package/dist/frontend/lowering/expressions/narrowing.js +1322 -0
- package/dist/frontend/lowering/expressions/narrowing.js.map +1 -0
- package/dist/frontend/lowering/expressions/native-proxy.js +4 -4
- package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -1
- package/dist/frontend/lowering/expressions/nullish-assignment.js +45 -0
- 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 +253 -85
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.d.ts +2 -1
- package/dist/frontend/lowering/expressions/optional-chains.js +91 -14
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.d.ts +110 -0
- package/dist/frontend/lowering/expressions/property-access.js +3544 -0
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -0
- package/dist/frontend/lowering/expressions/relational.d.ts +28 -0
- package/dist/frontend/lowering/expressions/relational.js +1679 -0
- package/dist/frontend/lowering/expressions/relational.js.map +1 -0
- package/dist/frontend/lowering/expressions/typeof.d.ts +22 -0
- package/dist/frontend/lowering/expressions/typeof.js +538 -0
- package/dist/frontend/lowering/expressions/typeof.js.map +1 -0
- package/dist/frontend/lowering/expressions/union-fields.js +1 -1
- package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
- package/dist/frontend/lowering/expressions/updates.d.ts +21 -0
- package/dist/frontend/lowering/expressions/updates.js +780 -0
- package/dist/frontend/lowering/expressions/updates.js.map +1 -0
- package/dist/frontend/lowering/function-context.d.ts +10 -0
- package/dist/frontend/lowering/function-context.js +11 -1
- package/dist/frontend/lowering/function-context.js.map +1 -1
- package/dist/frontend/lowering/function-returns.js +52 -28
- package/dist/frontend/lowering/function-returns.js.map +1 -1
- package/dist/frontend/lowering/general-streams.d.ts +25 -0
- package/dist/frontend/lowering/general-streams.js +108 -0
- package/dist/frontend/lowering/general-streams.js.map +1 -0
- package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +7 -0
- package/dist/frontend/lowering/generator-dynamic-dispatch.js +172 -69
- package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.d.ts +39 -0
- package/dist/frontend/lowering/generic-functions.js +393 -75
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/import-meta.js +2 -2
- package/dist/frontend/lowering/import-meta.js.map +1 -1
- package/dist/frontend/lowering/intern-tables.js +10 -9
- package/dist/frontend/lowering/intern-tables.js.map +1 -1
- package/dist/frontend/lowering/iterator-adapters.d.ts +19 -0
- package/dist/frontend/lowering/iterator-adapters.js +331 -3
- package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
- package/dist/frontend/lowering/js-class-fields.d.ts +28 -0
- package/dist/frontend/lowering/js-class-fields.js +170 -0
- package/dist/frontend/lowering/js-class-fields.js.map +1 -0
- package/dist/frontend/lowering/js-dynamic-objects.d.ts +15 -0
- package/dist/frontend/lowering/js-dynamic-objects.js +299 -0
- package/dist/frontend/lowering/js-dynamic-objects.js.map +1 -0
- package/dist/frontend/lowering/js-dynamic-objects.test.d.ts +1 -0
- package/dist/frontend/lowering/js-dynamic-objects.test.js +35 -0
- package/dist/frontend/lowering/js-dynamic-objects.test.js.map +1 -0
- package/dist/frontend/lowering/json-require.d.ts +22 -0
- package/dist/frontend/lowering/json-require.js +131 -0
- package/dist/frontend/lowering/json-require.js.map +1 -0
- package/dist/frontend/lowering/key-order-witness.d.ts +44 -0
- package/dist/frontend/lowering/key-order-witness.js +641 -0
- package/dist/frontend/lowering/key-order-witness.js.map +1 -0
- package/dist/frontend/lowering/key-order-witness.test.d.ts +1 -0
- package/dist/frontend/lowering/key-order-witness.test.js +239 -0
- package/dist/frontend/lowering/key-order-witness.test.js.map +1 -0
- package/dist/frontend/lowering/lifetime-regions.js +7 -7
- package/dist/frontend/lowering/lifetime-regions.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +61 -60
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-async-iteration.d.ts +10 -1
- package/dist/frontend/lowering/lower-async-iteration.js +34 -6
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-builtin-values.d.ts +5 -0
- package/dist/frontend/lowering/lower-builtin-values.js +32 -3
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.js +1239 -442
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +50 -3
- package/dist/frontend/lowering/lower-classes.js +1473 -468
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-comptime.d.ts +4 -2
- package/dist/frontend/lowering/lower-comptime.js +111 -13
- package/dist/frontend/lowering/lower-comptime.js.map +1 -1
- package/dist/frontend/lowering/lower-console.js +13 -11
- package/dist/frontend/lowering/lower-console.js.map +1 -1
- package/dist/frontend/lowering/lower-dgram.d.ts +10 -0
- package/dist/frontend/lowering/lower-dgram.js +179 -8
- package/dist/frontend/lowering/lower-dgram.js.map +1 -1
- package/dist/frontend/lowering/lower-enums.js +113 -14
- package/dist/frontend/lowering/lower-enums.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.d.ts +16 -7
- package/dist/frontend/lowering/lower-event-emitter.js +258 -70
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-event-target.js +2 -2
- package/dist/frontend/lowering/lower-event-target.js.map +1 -1
- package/dist/frontend/lowering/lower-expando.js +17 -13
- package/dist/frontend/lowering/lower-expando.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +188 -186
- package/dist/frontend/lowering/lower-exprs.js +1481 -12489
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +68 -22
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.d.ts +6 -0
- package/dist/frontend/lowering/lower-generators.js +29 -16
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-global-value.js +5 -1
- package/dist/frontend/lowering/lower-global-value.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +331 -96
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-mixins.js +23 -20
- package/dist/frontend/lowering/lower-mixins.js.map +1 -1
- package/dist/frontend/lowering/lower-mock.d.ts +8 -1
- package/dist/frontend/lowering/lower-mock.js +185 -18
- package/dist/frontend/lowering/lower-mock.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +267 -61
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.d.ts +6 -0
- package/dist/frontend/lowering/lower-namespaces.js +45 -33
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-node-module.d.ts +16 -0
- package/dist/frontend/lowering/lower-node-module.js +147 -14
- package/dist/frontend/lowering/lower-node-module.js.map +1 -1
- package/dist/frontend/lowering/lower-server.d.ts +6 -6
- package/dist/frontend/lowering/lower-server.js +488 -100
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.d.ts +4 -0
- package/dist/frontend/lowering/lower-stdlib.js +151 -109
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +28 -2
- package/dist/frontend/lowering/lower-stmts.js +1541 -391
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.d.ts +3 -0
- package/dist/frontend/lowering/lower-stream.js +398 -56
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-test.d.ts +3 -0
- package/dist/frontend/lowering/lower-test.js +437 -62
- package/dist/frontend/lowering/lower-test.js.map +1 -1
- package/dist/frontend/lowering/lower-timers.js +80 -32
- package/dist/frontend/lowering/lower-timers.js.map +1 -1
- package/dist/frontend/lowering/lower-url.js +1 -1
- package/dist/frontend/lowering/lower-url.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +399 -26
- package/dist/frontend/lowering/lowerer.js +1910 -305
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/lowerer.test.js +10 -4
- package/dist/frontend/lowering/lowerer.test.js.map +1 -1
- package/dist/frontend/lowering/maybe-promise.d.ts +46 -0
- package/dist/frontend/lowering/maybe-promise.js +249 -0
- package/dist/frontend/lowering/maybe-promise.js.map +1 -0
- package/dist/frontend/lowering/module-member-this.d.ts +3 -0
- package/dist/frontend/lowering/module-member-this.js +262 -0
- package/dist/frontend/lowering/module-member-this.js.map +1 -0
- package/dist/frontend/lowering/module-namespace-elements.js +1 -1
- package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
- package/dist/frontend/lowering/nan-coded-reads.d.ts +3 -0
- package/dist/frontend/lowering/nan-coded-reads.js +45 -32
- package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
- package/dist/frontend/lowering/narrowing-stability.d.ts +18 -3
- package/dist/frontend/lowering/narrowing-stability.js +104 -32
- package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
- package/dist/frontend/lowering/native-ffi.js +11 -11
- package/dist/frontend/lowering/native-ffi.js.map +1 -1
- package/dist/frontend/lowering/object-factory-new.js +6 -8
- package/dist/frontend/lowering/object-factory-new.js.map +1 -1
- package/dist/frontend/lowering/private-brands.d.ts +46 -0
- package/dist/frontend/lowering/private-brands.js +265 -0
- package/dist/frontend/lowering/private-brands.js.map +1 -0
- package/dist/frontend/lowering/promise-executor-adapter.d.ts +11 -0
- package/dist/frontend/lowering/promise-executor-adapter.js +87 -0
- package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -0
- package/dist/frontend/lowering/require-initialization.d.ts +32 -0
- package/dist/frontend/lowering/require-initialization.js +246 -0
- package/dist/frontend/lowering/require-initialization.js.map +1 -0
- package/dist/frontend/lowering/runtime-optional-bounds.js +7 -7
- package/dist/frontend/lowering/runtime-optional-bounds.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-elements.js +12 -12
- package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-guards.js +10 -10
- package/dist/frontend/lowering/runtime-optional-guards.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-guards.test.js +1 -1
- package/dist/frontend/lowering/runtime-optional-guards.test.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-ownership.js +10 -9
- package/dist/frontend/lowering/runtime-optional-ownership.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-provenance.js +2 -2
- package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-records.d.ts +35 -0
- package/dist/frontend/lowering/runtime-optional-records.js +205 -32
- package/dist/frontend/lowering/runtime-optional-records.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-records.test.js +19 -1
- package/dist/frontend/lowering/runtime-optional-records.test.js.map +1 -1
- package/dist/frontend/lowering/sanitize-class-types.test.js +2 -2
- package/dist/frontend/lowering/split-consumers.js +4 -4
- package/dist/frontend/lowering/split-consumers.js.map +1 -1
- package/dist/frontend/lowering/static-function-names.d.ts +28 -0
- package/dist/frontend/lowering/static-function-names.js +212 -0
- package/dist/frontend/lowering/static-function-names.js.map +1 -0
- package/dist/frontend/lowering/static-this.js +6 -6
- package/dist/frontend/lowering/static-this.js.map +1 -1
- package/dist/frontend/lowering/strict-mode.d.ts +5 -0
- package/dist/frontend/lowering/strict-mode.js +31 -0
- package/dist/frontend/lowering/strict-mode.js.map +1 -0
- package/dist/frontend/lowering/string-index-bounds.js +10 -10
- package/dist/frontend/lowering/string-index-bounds.js.map +1 -1
- package/dist/frontend/lowering/string-index.d.ts +12 -0
- package/dist/frontend/lowering/string-index.js +72 -1
- package/dist/frontend/lowering/string-index.js.map +1 -1
- package/dist/frontend/lowering/surfaces.d.ts +12 -3
- package/dist/frontend/lowering/surfaces.js +252 -41
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/symbol-fields.d.ts +7 -0
- package/dist/frontend/lowering/symbol-fields.js +204 -36
- package/dist/frontend/lowering/symbol-fields.js.map +1 -1
- package/dist/frontend/lowering/symbol-methods.d.ts +2 -1
- package/dist/frontend/lowering/symbol-methods.js +24 -6
- package/dist/frontend/lowering/symbol-methods.js.map +1 -1
- package/dist/frontend/lowering/thread-slots.d.ts +13 -0
- package/dist/frontend/lowering/thread-slots.js +208 -0
- package/dist/frontend/lowering/thread-slots.js.map +1 -0
- package/dist/frontend/lowering/typed-arguments.d.ts +74 -0
- package/dist/frontend/lowering/typed-arguments.js +472 -0
- package/dist/frontend/lowering/typed-arguments.js.map +1 -0
- package/dist/frontend/lowering/union-retag.d.ts +8 -0
- package/dist/frontend/lowering/union-retag.js +27 -0
- package/dist/frontend/lowering/union-retag.js.map +1 -1
- package/dist/frontend/lowering/union-retag.test.js +24 -1
- package/dist/frontend/lowering/union-retag.test.js.map +1 -1
- package/dist/frontend/lowering/var-hoisting.js +6 -6
- package/dist/frontend/lowering/var-hoisting.js.map +1 -1
- package/dist/frontend/lowering/width-lift.d.ts +4 -0
- package/dist/frontend/mock-shapes.js +13 -6
- package/dist/frontend/mock-shapes.js.map +1 -1
- package/dist/frontend/module-source-candidates.js +1 -1
- package/dist/frontend/module-source-candidates.js.map +1 -1
- package/dist/frontend/module-source-candidates.test.js +2 -1
- package/dist/frontend/module-source-candidates.test.js.map +1 -1
- package/dist/frontend/module-syntax.js +8 -8
- package/dist/frontend/module-syntax.js.map +1 -1
- package/dist/frontend/npm-static-bundled-chunks.d.ts +51 -0
- package/dist/frontend/npm-static-bundled-chunks.js +810 -0
- package/dist/frontend/npm-static-bundled-chunks.js.map +1 -0
- package/dist/frontend/npm-static-bundled-chunks.test.d.ts +1 -0
- package/dist/frontend/npm-static-bundled-chunks.test.js +287 -0
- package/dist/frontend/npm-static-bundled-chunks.test.js.map +1 -0
- package/dist/frontend/npm-static-bundled-cjs.js +24 -23
- package/dist/frontend/npm-static-bundled-cjs.js.map +1 -1
- package/dist/frontend/npm-static-bundled-esm.d.ts +9 -0
- package/dist/frontend/npm-static-bundled-esm.js +768 -0
- package/dist/frontend/npm-static-bundled-esm.js.map +1 -0
- package/dist/frontend/npm-static-bundled-esm.test.d.ts +1 -0
- package/dist/frontend/npm-static-bundled-esm.test.js +207 -0
- package/dist/frontend/npm-static-bundled-esm.test.js.map +1 -0
- package/dist/frontend/npm-static-cjs-exports-alias.d.ts +2 -0
- package/dist/frontend/npm-static-cjs-exports-alias.js +186 -0
- package/dist/frontend/npm-static-cjs-exports-alias.js.map +1 -0
- package/dist/frontend/npm-static-cjs-exports-alias.test.d.ts +1 -0
- package/dist/frontend/npm-static-cjs-exports-alias.test.js +73 -0
- package/dist/frontend/npm-static-cjs-exports-alias.test.js.map +1 -0
- package/dist/frontend/npm-static-cjs-exports-var.d.ts +2 -0
- package/dist/frontend/npm-static-cjs-exports-var.js +236 -0
- package/dist/frontend/npm-static-cjs-exports-var.js.map +1 -0
- package/dist/frontend/npm-static-declaration-syntax.js +102 -101
- package/dist/frontend/npm-static-declaration-syntax.js.map +1 -1
- package/dist/frontend/npm-static-prune.js +36 -24
- package/dist/frontend/npm-static-prune.js.map +1 -1
- package/dist/frontend/npm-static-rewrite-host.d.ts +4 -1
- package/dist/frontend/npm-static-rewrite-host.js +14 -3
- package/dist/frontend/npm-static-rewrite-host.js.map +1 -1
- package/dist/frontend/npm-static-rewrite-syntax.d.ts +19 -0
- package/dist/frontend/npm-static-rewrite-syntax.js +274 -101
- package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
- package/dist/frontend/npm-static-subtyping.js +7 -9
- package/dist/frontend/npm-static-subtyping.js.map +1 -1
- package/dist/frontend/npm-static.d.ts +17 -1
- package/dist/frontend/npm-static.js +167 -16
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/npm-static.test.js +22 -1
- package/dist/frontend/npm-static.test.js.map +1 -1
- package/dist/frontend/pipeline.js +164 -26
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/pipeline.test.js +22 -1
- package/dist/frontend/pipeline.test.js.map +1 -1
- package/dist/frontend/program-analysis.d.ts +6 -1
- package/dist/frontend/program-analysis.js +7 -0
- package/dist/frontend/program-analysis.js.map +1 -1
- package/dist/frontend/program.d.ts +92 -2
- package/dist/frontend/program.js +1557 -255
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +76 -6
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/resolve.js +36 -2
- package/dist/frontend/resolve.js.map +1 -1
- package/dist/frontend/resolve.test.js +49 -0
- package/dist/frontend/resolve.test.js.map +1 -1
- package/dist/frontend/services.d.ts +20 -1
- package/dist/frontend/services.js +40 -3
- package/dist/frontend/services.js.map +1 -1
- package/dist/frontend/services.test.js +2 -1
- package/dist/frontend/services.test.js.map +1 -1
- package/dist/frontend/threads-import.js +1 -1
- package/dist/frontend/threads-import.js.map +1 -1
- package/dist/frontend/tier-analysis.d.ts +71 -0
- package/dist/frontend/tier-analysis.js +522 -0
- package/dist/frontend/tier-analysis.js.map +1 -0
- package/dist/frontend/ts7/api-conformance.d.ts +234 -0
- package/dist/frontend/ts7/api-conformance.js +7 -0
- package/dist/frontend/ts7/api-conformance.js.map +1 -0
- package/dist/frontend/ts7/ast-guards.generated.js +2 -1
- package/dist/frontend/ts7/ast-guards.generated.js.map +1 -1
- package/dist/frontend/ts7/ast-node.d.ts +47 -25
- package/dist/frontend/ts7/ast-node.js +64 -18
- package/dist/frontend/ts7/ast-node.js.map +1 -1
- package/dist/frontend/ts7/ast-node.test.js +36 -12
- package/dist/frontend/ts7/ast-node.test.js.map +1 -1
- package/dist/frontend/ts7/ast-types.d.ts +10 -3
- package/dist/frontend/ts7/ast-types.generated.d.ts +39 -39
- package/dist/frontend/ts7/ast.d.ts +1 -0
- package/dist/frontend/ts7/ast.js +3 -2
- package/dist/frontend/ts7/ast.js.map +1 -1
- package/dist/frontend/ts7/checker-backend.d.ts +23 -0
- package/dist/frontend/ts7/checker-backend.js +88 -0
- package/dist/frontend/ts7/checker-backend.js.map +1 -0
- package/dist/frontend/ts7/checker-backend.test.d.ts +1 -0
- package/dist/frontend/ts7/checker-backend.test.js +63 -0
- package/dist/frontend/ts7/checker-backend.test.js.map +1 -0
- package/dist/frontend/ts7/checker-cache.d.ts +0 -3
- package/dist/frontend/ts7/checker-cache.js +0 -6
- package/dist/frontend/ts7/checker-cache.js.map +1 -1
- package/dist/frontend/ts7/checker.d.ts +18 -11
- package/dist/frontend/ts7/checker.js +42 -55
- package/dist/frontend/ts7/checker.js.map +1 -1
- package/dist/frontend/ts7/checker.test.js +10 -7
- package/dist/frontend/ts7/checker.test.js.map +1 -1
- package/dist/frontend/ts7/diagnostic.d.ts +19 -0
- package/dist/frontend/ts7/diagnostic.js +22 -0
- package/dist/frontend/ts7/diagnostic.js.map +1 -0
- package/dist/frontend/ts7/node-functions.d.ts +8 -0
- package/dist/frontend/ts7/node-functions.js +18 -0
- package/dist/frontend/ts7/node-functions.js.map +1 -0
- package/dist/frontend/ts7/program-host.d.ts +5 -1
- package/dist/frontend/ts7/program-host.js +12 -0
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/rpc-api.d.ts +5 -1
- package/dist/frontend/ts7/rpc-api.js +8 -1
- package/dist/frontend/ts7/rpc-api.js.map +1 -1
- package/dist/frontend/ts7/semantic-checker.d.ts +13 -6
- package/dist/frontend/ts7/semantic-checker.js +26 -8
- package/dist/frontend/ts7/semantic-checker.js.map +1 -1
- package/dist/frontend/ts7/semantic-checker.test.js +12 -9
- package/dist/frontend/ts7/semantic-checker.test.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.d.ts +54 -24
- package/dist/frontend/ts7/semantic-model.js +88 -16
- package/dist/frontend/ts7/semantic-model.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.test.js +4 -4
- package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
- package/dist/frontend/ts7/semantic-types.d.ts +7 -3
- package/dist/frontend/ts7/semantic-types.js +1 -1
- package/dist/frontend/ts7/semantic-types.js.map +1 -1
- package/dist/frontend/ts7/session.d.ts +11 -11
- package/dist/frontend/ts7/session.js +8 -5
- package/dist/frontend/ts7/session.js.map +1 -1
- package/dist/frontend/ts7/session.test.js +9 -5
- package/dist/frontend/ts7/session.test.js.map +1 -1
- package/dist/frontend/ts7/source-parser.d.ts +6 -2
- package/dist/frontend/ts7/source-parser.js +24 -3
- package/dist/frontend/ts7/source-parser.js.map +1 -1
- package/dist/frontend/ts7/source-parser.test.js +38 -17
- package/dist/frontend/ts7/source-parser.test.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +122 -2
- package/dist/frontend/type-mapper.js +2545 -719
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/frontend/type-only-imports.d.ts +28 -0
- package/dist/frontend/type-only-imports.js +122 -0
- package/dist/frontend/type-only-imports.js.map +1 -0
- package/dist/frontend/worker-target.js +8 -8
- package/dist/frontend/worker-target.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +29 -2
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.js +4 -2
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/api.d.ts +1 -1
- package/dist/ir/api.js +1 -1
- package/dist/ir/api.js.map +1 -1
- package/dist/ir/array-length-stability.d.ts +30 -0
- package/dist/ir/array-length-stability.js +236 -0
- package/dist/ir/array-length-stability.js.map +1 -0
- package/dist/ir/array-length-stability.test.d.ts +1 -0
- package/dist/ir/array-length-stability.test.js +113 -0
- package/dist/ir/array-length-stability.test.js.map +1 -0
- package/dist/ir/build.d.ts +2 -2
- package/dist/ir/build.js +1 -1
- package/dist/ir/build.js.map +1 -1
- package/dist/ir/builtin-effects.js +103 -0
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +1 -1
- package/dist/ir/builtin-signatures.js +494 -25
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/byte-numbers.js +3 -0
- package/dist/ir/byte-numbers.js.map +1 -1
- package/dist/ir/callback-specialization.d.ts +37 -0
- package/dist/ir/callback-specialization.js +459 -0
- package/dist/ir/callback-specialization.js.map +1 -0
- package/dist/ir/callback-specialization.test.d.ts +1 -0
- package/dist/ir/callback-specialization.test.js +208 -0
- package/dist/ir/callback-specialization.test.js.map +1 -0
- package/dist/ir/capture-values.d.ts +0 -1
- package/dist/ir/capture-values.js +51 -40
- package/dist/ir/capture-values.js.map +1 -1
- package/dist/ir/constant-globals.test.js +1 -1
- package/dist/ir/constant-tables.test.js +1 -1
- package/dist/ir/field-values.test.js +1 -1
- package/dist/ir/final-fields.test.js +1 -1
- package/dist/ir/function-references.test.js +9 -1
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/init-only-globals.test.js +1 -1
- package/dist/ir/initializer-bindings.test.js +1 -1
- package/dist/ir/int32-slots.d.ts +14 -0
- package/dist/ir/int32-slots.js +97 -14
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/int32-slots.test.js +1 -1
- package/dist/ir/integer-loop-facts.d.ts +2 -0
- package/dist/ir/integer-loop-facts.js +24 -3
- package/dist/ir/integer-loop-facts.js.map +1 -1
- package/dist/ir/integer-loops.d.ts +1 -1
- package/dist/ir/integer-loops.js +39 -9
- package/dist/ir/integer-loops.js.map +1 -1
- package/dist/ir/integer-loops.test.js +104 -0
- package/dist/ir/integer-loops.test.js.map +1 -1
- package/dist/ir/integer-ranges.d.ts +3 -0
- package/dist/ir/integer-ranges.js +3 -1
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +82 -1
- package/dist/ir/integer-ranges.test.js.map +1 -1
- package/dist/ir/intrinsic-signatures.js +6 -0
- package/dist/ir/intrinsic-signatures.js.map +1 -1
- package/dist/ir/ir.d.ts +221 -58
- package/dist/ir/ir.js +119 -12
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/ir.test.js +10 -0
- package/dist/ir/ir.test.js.map +1 -1
- package/dist/ir/jsval.d.ts +8 -0
- package/dist/ir/jsval.js +365 -0
- package/dist/ir/jsval.js.map +1 -0
- package/dist/ir/jsval.test.d.ts +1 -0
- package/dist/ir/jsval.test.js +239 -0
- package/dist/ir/jsval.test.js.map +1 -0
- package/dist/ir/runtime-features.d.ts +148 -33
- package/dist/ir/runtime-features.js +629 -386
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/scalar-records.test.js +1 -1
- package/dist/ir/self-captures.d.ts +33 -0
- package/dist/ir/self-captures.js +245 -0
- package/dist/ir/self-captures.js.map +1 -0
- package/dist/ir/self-captures.test.d.ts +1 -0
- package/dist/ir/self-captures.test.js +135 -0
- package/dist/ir/self-captures.test.js.map +1 -0
- package/dist/ir/serialize.d.ts +1 -1
- package/dist/ir/serialize.js +7 -4
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/tiers.d.ts +26 -0
- package/dist/ir/tiers.js +101 -0
- package/dist/ir/tiers.js.map +1 -0
- package/dist/ir/tiers.test.d.ts +1 -0
- package/dist/ir/tiers.test.js +140 -0
- package/dist/ir/tiers.test.js.map +1 -0
- package/dist/ir/traverse.js +103 -94
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/traverse.test.js +33 -30
- package/dist/ir/traverse.test.js.map +1 -1
- package/dist/ir/unshare.js +65 -3
- package/dist/ir/unshare.js.map +1 -1
- package/dist/ir/unshare.test.js +1 -1
- package/dist/ir/validate.js +175 -68
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +26 -9
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/library/fence-eval.test.js +1 -1
- package/dist/library/int-infer.test.js +4 -4
- package/dist/library/ir-policy.js +13 -0
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/library/library-cache.d.ts +1 -0
- package/dist/library/library-cache.js.map +1 -1
- package/dist/library/library-cache.test.js +5 -5
- package/dist/library/library-profile.d.ts +4 -4
- package/dist/library/library-profile.js +35 -7
- package/dist/library/library-profile.js.map +1 -1
- package/dist/library/prepare.js +13 -1
- package/dist/library/prepare.js.map +1 -1
- package/dist/native/cli.js +5 -0
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.js +2 -2
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/compiler.test.js +2 -2
- package/dist/native/prepare.js +7 -0
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/sanitizer.test.js +12 -0
- package/dist/native/sanitizer.test.js.map +1 -1
- package/dist/native/toolchain.d.ts +2 -0
- package/dist/native/toolchain.js +10 -1
- package/dist/native/toolchain.js.map +1 -1
- package/dist/native/toolchain.test.js +39 -1
- 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/wasm/base64.d.ts +5 -0
- package/dist/wasm/base64.js +62 -0
- package/dist/wasm/base64.js.map +1 -0
- package/dist/wasm/binary.d.ts +36 -0
- package/dist/wasm/binary.js +1976 -0
- package/dist/wasm/binary.js.map +1 -0
- package/dist/wasm/binary.test.d.ts +1 -0
- package/dist/wasm/binary.test.js +190 -0
- package/dist/wasm/binary.test.js.map +1 -0
- package/dist/wasm/discover.d.ts +38 -0
- package/dist/wasm/discover.js +377 -0
- package/dist/wasm/discover.js.map +1 -0
- package/dist/wasm/discover.test.d.ts +1 -0
- package/dist/wasm/discover.test.js +24 -0
- package/dist/wasm/discover.test.js.map +1 -0
- package/dist/wasm/module.d.ts +151 -0
- package/dist/wasm/module.js +575 -0
- package/dist/wasm/module.js.map +1 -0
- package/dist/wasm/translate.d.ts +48 -0
- package/dist/wasm/translate.js +2129 -0
- package/dist/wasm/translate.js.map +1 -0
- package/dist/wasm/translate.test.d.ts +1 -0
- package/dist/wasm/translate.test.js +207 -0
- package/dist/wasm/translate.test.js.map +1 -0
- package/package.json +21 -20
- package/surface-manifest.json +303 -19
|
@@ -1,11 +1,13 @@
|
|
|
1
|
+
import { staticNameBindings } from "./static-function-names.js";
|
|
1
2
|
import * as ts from "../ts7/adapter.js";
|
|
2
3
|
import { bodyReadsArguments } from "../arguments-usage.js";
|
|
3
4
|
import { DYN, isUnitType, typeEquals, } from "../../ir/ir.js";
|
|
4
5
|
import { isJsSourceFile, locOf } from "../program.js";
|
|
5
6
|
import { typeKey } from "../type-mapper.js";
|
|
7
|
+
import { functionCanReturnUndefined } from "../function-completion.js";
|
|
6
8
|
import { PoisonError, dynFallbackType, neverTaintedJsType, newFnCtx } from "./lowerer.js";
|
|
7
9
|
import { tryLowerExpression } from "./expressions/try-lower-expression.js";
|
|
8
|
-
import { findGenericMethodOn } from "./lower-classes.js";
|
|
10
|
+
import { findGenericMethodOn, storedClassValueType } from "./lower-classes.js";
|
|
9
11
|
import { nsPathPrefix } from "./lower-namespaces.js";
|
|
10
12
|
import { declSymbolOf } from "./lower-modules.js";
|
|
11
13
|
import { npmStaticPackageOfPath } from "../npm-static.js";
|
|
@@ -41,9 +43,7 @@ function checkGenericParameterNames(lowerer, parameters, allowPatterns) {
|
|
|
41
43
|
* cannot see them; const bindings need no whole-file write scan. */
|
|
42
44
|
function requireStableGenericBinding(lowerer, decl, symbol, name) {
|
|
43
45
|
const isConst = (ts.getCombinedNodeFlags(decl) & ts.NodeFlags.Const) !== 0;
|
|
44
|
-
const redeclared =
|
|
45
|
-
.declarationsOf(symbol)
|
|
46
|
-
.some((d) => d !== decl && ts.isVariableDeclaration(d) && d.initializer !== undefined);
|
|
46
|
+
const redeclared = symbol.declarations.some((d) => d !== decl && ts.isVariableDeclaration(d) && d.initializer !== undefined);
|
|
47
47
|
if (!isConst && (redeclared || !bindingNeverReassigned(lowerer, symbol, decl))) {
|
|
48
48
|
lowerer.unsupported("SC1090", decl.name, `generic function values in reassigned bindings (calls of '${name}' resolve statically against this initializer, so the binding must provably hold it — a const, or a let/var nothing in its declaring file writes)`);
|
|
49
49
|
}
|
|
@@ -54,8 +54,8 @@ function requireStableGenericBinding(lowerer, decl, symbol, name) {
|
|
|
54
54
|
* generic function requires no body lowering). Called inside
|
|
55
55
|
* collectSignature's poison catch. */
|
|
56
56
|
export function collectGenericSignature(lowerer, decl) {
|
|
57
|
-
const typeParams = declaredTypeParameterSymbols(lowerer, decl.typeParameters, decl, "this function form");
|
|
58
|
-
checkGenericParameterNames(lowerer, decl.parameters, true);
|
|
57
|
+
const typeParams = declaredTypeParameterSymbols(lowerer, decl.typeParameters.nodes, decl, "this function form");
|
|
58
|
+
checkGenericParameterNames(lowerer, decl.parameters.nodes, true);
|
|
59
59
|
const nameText = decl.name?.text ?? "%default"; // nameless = the default export (checked by collectSignatureInner)
|
|
60
60
|
const symbol = declSymbolOf(lowerer, decl);
|
|
61
61
|
if (!symbol)
|
|
@@ -63,7 +63,7 @@ export function collectGenericSignature(lowerer, decl) {
|
|
|
63
63
|
lowerer.genericFnsBySymbol.set(symbol, {
|
|
64
64
|
decl,
|
|
65
65
|
baseName: nameText,
|
|
66
|
-
qualifiedName: lowerer.qualify(
|
|
66
|
+
qualifiedName: lowerer.qualify(ts.getSourceFileOfNode(decl), nsPathPrefix(decl) + nameText),
|
|
67
67
|
typeParams,
|
|
68
68
|
instances: new Map(),
|
|
69
69
|
});
|
|
@@ -84,7 +84,7 @@ export function lowerGenericCall(lowerer, expr, info) {
|
|
|
84
84
|
const instance = info.implicitParams
|
|
85
85
|
? implicitCallInstance(lowerer, expr, info)
|
|
86
86
|
: genericCallInstance(lowerer, expr, info);
|
|
87
|
-
const args = lowerer.completeArgs(expr.arguments, instance.params, loc, expr);
|
|
87
|
+
const args = lowerer.completeArgs(expr.arguments.nodes, instance.params, loc, expr);
|
|
88
88
|
return { kind: "call", callee: instance.name, args, type: instance.returnType, loc };
|
|
89
89
|
}
|
|
90
90
|
/** The instance a CALL of a generic function-like names: resolved
|
|
@@ -100,27 +100,43 @@ export function genericCallInstance(lowerer, expr, info) {
|
|
|
100
100
|
// honest story (monomorphize per implementation signature with the
|
|
101
101
|
// reconcile bridge, like the non-generic path).
|
|
102
102
|
{
|
|
103
|
-
const rdecl = rsig ?
|
|
103
|
+
const rdecl = rsig ? rsig.declaration : undefined;
|
|
104
104
|
if (rdecl &&
|
|
105
105
|
(ts.isFunctionDeclaration(rdecl) || ts.isMethodDeclaration(rdecl)) &&
|
|
106
106
|
!rdecl.body) {
|
|
107
107
|
lowerer.unsupported("SC1090", expr, `calls selecting an overload signature of a generic ${ts.isMethodDeclaration(rdecl) ? "method" : "function"} (only the implementation signature monomorphizes)`);
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
|
-
if (!rsig || rsig.getParameters().length !== info.decl.parameters.length) {
|
|
110
|
+
if (!rsig || rsig.getParameters().length !== info.decl.parameters.nodes.length) {
|
|
111
111
|
lowerer.unsupported("SC1090", expr, "this call form");
|
|
112
112
|
}
|
|
113
113
|
// Per-param shapes from the RESOLVED signature (types substituted) plus
|
|
114
114
|
// the declaration's modes: rest stays the resolved array, a default's
|
|
115
115
|
// ABI union is synthesized over the resolved body type — exactly the
|
|
116
116
|
// paramShape rules, applied to post-substitution types.
|
|
117
|
-
const params = paramShapes(lowerer, info.decl.parameters, rsig, (_param, i) => expr.arguments[i] ?? expr);
|
|
117
|
+
const params = paramShapes(lowerer, info.decl.parameters.nodes, rsig, (_param, i) => expr.arguments.nodes[i] ?? expr);
|
|
118
118
|
const retTs = lowerer.checker.getReturnTypeOfSignature(rsig);
|
|
119
|
-
const
|
|
120
|
-
if (
|
|
119
|
+
const local = localClassResultInstance(lowerer, expr, info, rsig, params, retTs);
|
|
120
|
+
if (local)
|
|
121
|
+
return local;
|
|
122
|
+
// A result instantiated at `any` (a type argument inferred from an
|
|
123
|
+
// untyped value, such as an untyped forwarding call) is checked-dynamic.
|
|
124
|
+
const mappedReturn = lowerer.mapTypeOf(retTs) ??
|
|
125
|
+
((retTs.flags & ts.TypeFlags.Any) !== 0 && !isJsSourceFile(ts.getSourceFileOfNode(info.decl))
|
|
126
|
+
? DYN
|
|
127
|
+
: null);
|
|
128
|
+
if (!mappedReturn) {
|
|
121
129
|
fenceGenericSignatureResult(lowerer, expr, retTs);
|
|
122
130
|
lowerer.badType(expr, retTs);
|
|
123
131
|
}
|
|
132
|
+
// A body that can return an indexed read that misses returns undefined
|
|
133
|
+
// there, as in JavaScript, whatever the declared result says. An async
|
|
134
|
+
// body's promise is always present and settles with undefined there.
|
|
135
|
+
const returnType = lowerer.runtimeOptionalGenericReturns.has(info.decl)
|
|
136
|
+
? mappedReturn.kind === "promise"
|
|
137
|
+
? { kind: "promise", inner: lowerer.runtimeOptionalType(mappedReturn.inner) }
|
|
138
|
+
: lowerer.runtimeOptionalType(mappedReturn)
|
|
139
|
+
: mappedReturn;
|
|
124
140
|
// keyof-constrained type parameters (`K extends keyof T`): the bound
|
|
125
141
|
// LITERAL is semantic — the instance body reads the named field — so
|
|
126
142
|
// the bindings compute EAGERLY (the key needs them) and each literal
|
|
@@ -129,6 +145,7 @@ export function genericCallInstance(lowerer, expr, info) {
|
|
|
129
145
|
// different fields). Non-literal bindings (a key union, plain string)
|
|
130
146
|
// share one runtime-keyed instance per IR signature, exactly the
|
|
131
147
|
// widened discipline.
|
|
148
|
+
const named = staticNameBindings(lowerer, expr, info);
|
|
132
149
|
const keyofTps = keyofConstrainedTypeParams(info);
|
|
133
150
|
if (keyofTps.size > 0) {
|
|
134
151
|
const tsBindings = new Map();
|
|
@@ -145,11 +162,146 @@ export function genericCallInstance(lowerer, expr, info) {
|
|
|
145
162
|
})
|
|
146
163
|
.join(",");
|
|
147
164
|
return internGenericInstance(lowerer, expr, info, params, returnType, () => bindings, {
|
|
148
|
-
extraKey: `@${litKey}`,
|
|
165
|
+
extraKey: `@${litKey}${named?.key ?? ""}`,
|
|
149
166
|
tsBindings,
|
|
167
|
+
...(named ? { staticFnNames: named.names } : {}),
|
|
150
168
|
});
|
|
151
169
|
}
|
|
152
|
-
return internGenericInstance(lowerer, expr, info, params, returnType, (tsBindings) => lowerer.inferTypeParamBindings(expr, info, rsig, tsBindings));
|
|
170
|
+
return internGenericInstance(lowerer, expr, info, params, returnType, (tsBindings) => lowerer.inferTypeParamBindings(expr, info, rsig, tsBindings), named ? { extraKey: named.key, staticFnNames: named.names } : undefined);
|
|
171
|
+
}
|
|
172
|
+
/** A generic factory whose result is one of its own local classes
|
|
173
|
+
* (`function base<T>(v: T) { return class { value: T = v }; }`). Each
|
|
174
|
+
* instance has its own class, so the instance is keyed on its bindings and
|
|
175
|
+
* the result maps inside it, where the local class takes the instance's
|
|
176
|
+
* name and bindings. */
|
|
177
|
+
function localClassResultInstance(lowerer, expr, info, rsig, params, retTs) {
|
|
178
|
+
if (!localClassOfResult(lowerer, info, retTs))
|
|
179
|
+
return null;
|
|
180
|
+
const tsBindings = new Map();
|
|
181
|
+
const bindings = lowerer.inferTypeParamBindings(expr, info, rsig, tsBindings);
|
|
182
|
+
const bindingKey = info.typeParams
|
|
183
|
+
.map((tp) => {
|
|
184
|
+
const bound = bindings.get(tp);
|
|
185
|
+
return bound ? typeKey(bound) : "?";
|
|
186
|
+
})
|
|
187
|
+
.join(",");
|
|
188
|
+
const pending = { kind: "void" };
|
|
189
|
+
const inst = internGenericInstance(lowerer, expr, info, params, pending, () => bindings, {
|
|
190
|
+
extraKey: `@class<${bindingKey}>`,
|
|
191
|
+
tsBindings,
|
|
192
|
+
});
|
|
193
|
+
if (inst.returnType !== pending)
|
|
194
|
+
return inst;
|
|
195
|
+
const returnType = withInstanceScope(lowerer, info, inst, () => lowerer.mapTypeOf(retTs));
|
|
196
|
+
if (!returnType) {
|
|
197
|
+
fenceGenericSignatureResult(lowerer, expr, retTs);
|
|
198
|
+
lowerer.badType(expr, retTs);
|
|
199
|
+
}
|
|
200
|
+
inst.returnType = returnType;
|
|
201
|
+
// Values of the class outside the factory (`const b = new B()`, `b.read()`)
|
|
202
|
+
// carry the instantiated checker type; record which class it names. A
|
|
203
|
+
// call inside another generic instance can have a type that depends on
|
|
204
|
+
// that instance's parameters, which no single class answers.
|
|
205
|
+
if (lowerer.typeParamBindings !== null)
|
|
206
|
+
return inst;
|
|
207
|
+
const instance = returnType.kind === "classval"
|
|
208
|
+
? lowerer.checker
|
|
209
|
+
.getConstructSignatures(retTs)
|
|
210
|
+
.map((sig) => lowerer.checker.getReturnTypeOfSignature(sig))
|
|
211
|
+
: [retTs];
|
|
212
|
+
const className = returnType.kind === "classval" || returnType.kind === "object" ? returnType.className : null;
|
|
213
|
+
if (className !== null)
|
|
214
|
+
for (const type of instance)
|
|
215
|
+
lowerer.localClassInstanceTypes.set(type.id, className);
|
|
216
|
+
return inst;
|
|
217
|
+
}
|
|
218
|
+
/** The class value a call of a generic factory returns when the result is
|
|
219
|
+
* one of the factory's local classes (`class C extends base(42) {}`), or
|
|
220
|
+
* null for any other call. */
|
|
221
|
+
export function genericLocalClassResult(lowerer, expr) {
|
|
222
|
+
if (!ts.isIdentifier(expr.expression))
|
|
223
|
+
return null;
|
|
224
|
+
const info = lowerer.genericFnOf(expr.expression);
|
|
225
|
+
if (!info || info.implicitParams)
|
|
226
|
+
return null;
|
|
227
|
+
const rsig = lowerer.checker.getResolvedSignature(expr);
|
|
228
|
+
if (!rsig || !localClassOfResult(lowerer, info, lowerer.checker.getReturnTypeOfSignature(rsig)))
|
|
229
|
+
return null;
|
|
230
|
+
return genericCallInstance(lowerer, expr, info).returnType;
|
|
231
|
+
}
|
|
232
|
+
/** The type of a `const` binding whose initializer calls a generic factory
|
|
233
|
+
* returning one of its local classes (`const B = base(7)`), or constructs
|
|
234
|
+
* such a class (`const b = new B()`); null for any other binding. */
|
|
235
|
+
export function genericLocalClassBinding(lowerer, node) {
|
|
236
|
+
const decl = node.parent;
|
|
237
|
+
if (!ts.isIdentifier(node) ||
|
|
238
|
+
!decl ||
|
|
239
|
+
!ts.isVariableDeclaration(decl) ||
|
|
240
|
+
decl.name !== node ||
|
|
241
|
+
!decl.initializer ||
|
|
242
|
+
(ts.getCombinedNodeFlags(decl) & ts.NodeFlags.Const) === 0)
|
|
243
|
+
return null;
|
|
244
|
+
// An `any` binding keeps the checked-dynamic representation.
|
|
245
|
+
if ((lowerer.typeOf(node).flags & ts.TypeFlags.Any) !== 0)
|
|
246
|
+
return null;
|
|
247
|
+
let init = decl.initializer;
|
|
248
|
+
while (ts.isParenthesizedExpression(init))
|
|
249
|
+
init = init.expression;
|
|
250
|
+
if (ts.isCallExpression(init))
|
|
251
|
+
return genericLocalClassResult(lowerer, init);
|
|
252
|
+
if (!ts.isNewExpression(init))
|
|
253
|
+
return null;
|
|
254
|
+
const constructed = storedClassValueType(lowerer, init.expression);
|
|
255
|
+
if (constructed?.kind !== "classval")
|
|
256
|
+
return null;
|
|
257
|
+
const classDecl = lowerer.classes.get(constructed.className)?.decl;
|
|
258
|
+
return classDecl && insideGenericFunction(classDecl)
|
|
259
|
+
? { kind: "object", className: constructed.className }
|
|
260
|
+
: null;
|
|
261
|
+
}
|
|
262
|
+
/** Whether `node` is declared inside a function with type parameters. */
|
|
263
|
+
function insideGenericFunction(node) {
|
|
264
|
+
for (let parent = node.parent; parent && !ts.isSourceFile(parent); parent = parent.parent)
|
|
265
|
+
if (ts.isFunctionLike(parent) && (parent.typeParameters?.nodes.length ?? 0) > 0)
|
|
266
|
+
return true;
|
|
267
|
+
return false;
|
|
268
|
+
}
|
|
269
|
+
/** The class declared inside a generic function that `type` is the
|
|
270
|
+
* constructor or instance type of, or null. */
|
|
271
|
+
function localClassOfResult(lowerer, info, type) {
|
|
272
|
+
const symbol = type.getSymbol();
|
|
273
|
+
if (!symbol || !(symbol.flags & ts.SymbolFlags.Class))
|
|
274
|
+
return null;
|
|
275
|
+
const decl = symbol.valueDeclaration;
|
|
276
|
+
if (!decl || !(ts.isClassExpression(decl) || ts.isClassDeclaration(decl)))
|
|
277
|
+
return null;
|
|
278
|
+
for (let parent = decl.parent; parent && !ts.isSourceFile(parent); parent = parent.parent)
|
|
279
|
+
if (parent === info.decl)
|
|
280
|
+
return decl;
|
|
281
|
+
return null;
|
|
282
|
+
}
|
|
283
|
+
/** Runs `fn` under an instance's type bindings and local-class names, as
|
|
284
|
+
* its body lowers. */
|
|
285
|
+
function withInstanceScope(lowerer, info, inst, fn) {
|
|
286
|
+
const prevBindings = lowerer.typeParamBindings;
|
|
287
|
+
const prevTsBindings = lowerer.typeParamTsBindings;
|
|
288
|
+
const previousPath = lowerer.genericInstantiationPath;
|
|
289
|
+
const prevContext = lowerer.instantiationContext;
|
|
290
|
+
lowerer.typeParamBindings = inst.bindings;
|
|
291
|
+
lowerer.typeParamTsBindings = inst.tsBindings ?? null;
|
|
292
|
+
lowerer.genericInstantiationPath = inst.path;
|
|
293
|
+
lowerer.instantiationContext = `instantiating '${info.baseName}' with ${inst.typeArgsText}`;
|
|
294
|
+
lowerer.localClassInstantiations.push({ owner: info.decl, name: inst.name });
|
|
295
|
+
try {
|
|
296
|
+
return fn();
|
|
297
|
+
}
|
|
298
|
+
finally {
|
|
299
|
+
lowerer.localClassInstantiations.pop();
|
|
300
|
+
lowerer.typeParamBindings = prevBindings;
|
|
301
|
+
lowerer.typeParamTsBindings = prevTsBindings;
|
|
302
|
+
lowerer.genericInstantiationPath = previousPath;
|
|
303
|
+
lowerer.instantiationContext = prevContext;
|
|
304
|
+
}
|
|
153
305
|
}
|
|
154
306
|
/** The one instance table both instantiation routes share: key identity IS
|
|
155
307
|
* signature identity, so a call (`identity(1)`) and a pinned VALUE
|
|
@@ -180,7 +332,7 @@ function internGenericInstance(lowerer, blame, info, params, returnType, makeBin
|
|
|
180
332
|
return JSON.stringify(tsBound.value);
|
|
181
333
|
}
|
|
182
334
|
const bound = bindings.get(tp);
|
|
183
|
-
return bound ? lowerer.fmt(bound) : tp
|
|
335
|
+
return bound ? lowerer.fmt(bound) : ts.symbolName(tp);
|
|
184
336
|
})
|
|
185
337
|
.join(", ");
|
|
186
338
|
// Deep polymorphic recursion renders unbounded types — keep messages sane.
|
|
@@ -194,6 +346,7 @@ function internGenericInstance(lowerer, blame, info, params, returnType, makeBin
|
|
|
194
346
|
bindings,
|
|
195
347
|
tsBindings,
|
|
196
348
|
typeArgsText,
|
|
349
|
+
...(opts?.staticFnNames ? { staticFnNames: opts.staticFnNames } : {}),
|
|
197
350
|
};
|
|
198
351
|
info.instances.set(key, inst);
|
|
199
352
|
lowerer.instantiationQueue.push({ info, inst });
|
|
@@ -209,7 +362,7 @@ function keyofConstrainedTypeParams(info) {
|
|
|
209
362
|
if (info.keyofTps)
|
|
210
363
|
return info.keyofTps;
|
|
211
364
|
const out = new Set();
|
|
212
|
-
info.decl.typeParameters?.forEach((tpDecl, i) => {
|
|
365
|
+
info.decl.typeParameters?.nodes.forEach((tpDecl, i) => {
|
|
213
366
|
const sym = info.typeParams[i];
|
|
214
367
|
if (!sym || tpDecl.constraint === undefined)
|
|
215
368
|
return;
|
|
@@ -231,7 +384,7 @@ function keyofConstrainedTypeParams(info) {
|
|
|
231
384
|
* (carrying the instantiation context). */
|
|
232
385
|
export function inferTypeParamBindings(lowerer, expr, info, rsig, tsBindings) {
|
|
233
386
|
const bindings = new Map();
|
|
234
|
-
expr.typeArguments?.forEach((ta, i) => {
|
|
387
|
+
expr.typeArguments?.nodes.forEach((ta, i) => {
|
|
235
388
|
const tp = info.typeParams[i];
|
|
236
389
|
if (!tp)
|
|
237
390
|
return;
|
|
@@ -243,7 +396,7 @@ export function inferTypeParamBindings(lowerer, expr, info, rsig, tsBindings) {
|
|
|
243
396
|
}
|
|
244
397
|
});
|
|
245
398
|
unifySignatureBindings(lowerer, info, rsig, bindings, tsBindings);
|
|
246
|
-
bindDefaultTypeParams(lowerer, info.typeParams, info.decl.typeParameters, bindings, tsBindings);
|
|
399
|
+
bindDefaultTypeParams(lowerer, info.typeParams, info.decl.typeParameters?.nodes, bindings, tsBindings);
|
|
247
400
|
return bindings;
|
|
248
401
|
}
|
|
249
402
|
/** Type parameters still unbound after unification take their declared
|
|
@@ -298,7 +451,11 @@ function unifySignatureBindings(lowerer, info, rsig, bindings, tsBindings) {
|
|
|
298
451
|
tsBindings.set(sym, lowerer.typeParamTsResolver(inst) ?? inst);
|
|
299
452
|
}
|
|
300
453
|
if (!bindings.has(sym)) {
|
|
301
|
-
const mapped = lowerer.mapTypeOf(inst)
|
|
454
|
+
const mapped = lowerer.mapTypeOf(inst) ??
|
|
455
|
+
((inst.flags & ts.TypeFlags.Any) !== 0 &&
|
|
456
|
+
!isJsSourceFile(ts.getSourceFileOfNode(info.decl))
|
|
457
|
+
? DYN
|
|
458
|
+
: null);
|
|
302
459
|
// A visitor's inferred T can be void. It still binds the
|
|
303
460
|
// return convention of `(node) => T`; discarding it leaves
|
|
304
461
|
// the callback's return type spuriously uninstantiated.
|
|
@@ -400,7 +557,7 @@ function unifySignatureBindings(lowerer, info, rsig, bindings, tsBindings) {
|
|
|
400
557
|
}
|
|
401
558
|
if (declared.flags & ts.TypeFlags.Object) {
|
|
402
559
|
for (const dp of lowerer.checker.getPropertiesOfType(declared)) {
|
|
403
|
-
const ip = lowerer.checker.getPropertyOfType(inst, dp
|
|
560
|
+
const ip = lowerer.checker.getPropertyOfType(inst, ts.symbolName(dp));
|
|
404
561
|
if (ip)
|
|
405
562
|
unify(lowerer.checker.getTypeOfSymbol(dp), lowerer.checker.getTypeOfSymbol(ip), depth + 1);
|
|
406
563
|
}
|
|
@@ -431,6 +588,8 @@ export function lowerGenericInstance(lowerer, info, inst) {
|
|
|
431
588
|
const prevSuppress = lowerer.suppressStats;
|
|
432
589
|
const prevClass = lowerer.currentClass;
|
|
433
590
|
const prevImplicit = lowerer.implicitParamTypes;
|
|
591
|
+
const prevStaticFnNames = lowerer.staticFnNames;
|
|
592
|
+
lowerer.staticFnNames = inst.staticFnNames ?? null;
|
|
434
593
|
// A generic METHOD of a generic-class INSTANTIATION lowers under BOTH
|
|
435
594
|
// binding sets: the receiver instantiation's class type parameters
|
|
436
595
|
// underneath, the method instantiation's own on top (disjoint symbol
|
|
@@ -460,7 +619,7 @@ export function lowerGenericInstance(lowerer, info, inst) {
|
|
|
460
619
|
// body returns the resolved promise's INNER type, calls enter through
|
|
461
620
|
// the instance's own spawn wrapper (the emitter routes by fn.async),
|
|
462
621
|
// and awaits park this instance's fibers.
|
|
463
|
-
const isAsync = decl.modifiers?.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword) === true;
|
|
622
|
+
const isAsync = decl.modifiers?.nodes.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword) === true;
|
|
464
623
|
const nameBlame = (ts.isArrowFunction(decl) ? undefined : decl.name) ?? decl;
|
|
465
624
|
const isGenerator = decl.asteriskToken !== undefined;
|
|
466
625
|
if (isAsync && !isGenerator && inst.returnType.kind !== "promise") {
|
|
@@ -478,6 +637,8 @@ export function lowerGenericInstance(lowerer, info, inst) {
|
|
|
478
637
|
: lowerer.bodyReturnType(isAsync, inst.returnType);
|
|
479
638
|
const fnCtx = newFnCtx(false, null, null, bodyReturn);
|
|
480
639
|
fnCtx.isAsync = isAsync;
|
|
640
|
+
// Instances lower on demand, on top of whichever caller reached them.
|
|
641
|
+
fnCtx.thisBoundary = true;
|
|
481
642
|
// Implicit-any instances whose declared return did not map lower in
|
|
482
643
|
// return-INFERENCE mode: `return` statements record here bare, and the
|
|
483
644
|
// post-pass (resolveInferredReturn) settles the type and wraps them.
|
|
@@ -491,6 +652,8 @@ export function lowerGenericInstance(lowerer, info, inst) {
|
|
|
491
652
|
lowerer.fnStack.push(fnCtx);
|
|
492
653
|
lowerer.localClassInstantiations.push({ owner: decl, name: inst.name });
|
|
493
654
|
lowerer.genericInstantiationPath = inst.path;
|
|
655
|
+
if (inst.erased)
|
|
656
|
+
lowerer.erasingDepth++;
|
|
494
657
|
try {
|
|
495
658
|
// Static specializations bind lexical this only when the caller
|
|
496
659
|
// proved its exact receiver. Other instances retain the fence;
|
|
@@ -514,12 +677,12 @@ export function lowerGenericInstance(lowerer, info, inst) {
|
|
|
514
677
|
}
|
|
515
678
|
// Default-param initializers lower per instance, with the bindings
|
|
516
679
|
// threaded — a default mentioning T resolves like any body expression.
|
|
517
|
-
const declared = lowerer.declareParams(decl.parameters, inst.params);
|
|
680
|
+
const declared = lowerer.declareParams(decl.parameters.nodes, inst.params);
|
|
518
681
|
params.push(...declared.params);
|
|
519
682
|
const body = [...receiverInit, ...declared.prologue];
|
|
520
683
|
const bodyBlock = blockBodyOf(decl);
|
|
521
684
|
if (bodyBlock) {
|
|
522
|
-
body.push(...lowerer.lowerStmts(bodyBlock.statements));
|
|
685
|
+
body.push(...lowerer.lowerStmts(bodyBlock.statements.nodes));
|
|
523
686
|
if (fnCtx.inferReturn) {
|
|
524
687
|
bodyReturn = resolveInferredReturn(lowerer, inst, fnCtx.inferReturn, body, decl);
|
|
525
688
|
inst.returnType = bodyReturn;
|
|
@@ -587,9 +750,12 @@ export function lowerGenericInstance(lowerer, info, inst) {
|
|
|
587
750
|
lowerer.typeParamBindings = prevBindings;
|
|
588
751
|
lowerer.typeParamTsBindings = prevTsBindings;
|
|
589
752
|
lowerer.implicitParamTypes = prevImplicit;
|
|
753
|
+
lowerer.staticFnNames = prevStaticFnNames;
|
|
590
754
|
lowerer.instantiationContext = prevContext;
|
|
591
755
|
lowerer.localClassInstantiations.pop();
|
|
592
756
|
lowerer.suppressStats = prevSuppress;
|
|
757
|
+
if (inst.erased)
|
|
758
|
+
lowerer.erasingDepth--;
|
|
593
759
|
}
|
|
594
760
|
}
|
|
595
761
|
/** A generic function taken as a VALUE, monomorphized by flow. A function
|
|
@@ -654,7 +820,7 @@ export function lowerGenericFnValue(lowerer, ref, info) {
|
|
|
654
820
|
const hofBinding = runtimeOptionalHofGenericBinding(lowerer, ref, info);
|
|
655
821
|
if (hofBinding)
|
|
656
822
|
bindings.set(hofBinding.typeParam, hofBinding.type);
|
|
657
|
-
bindDefaultTypeParams(lowerer, info.typeParams, info.decl.typeParameters, bindings);
|
|
823
|
+
bindDefaultTypeParams(lowerer, info.typeParams, info.decl.typeParameters?.nodes, bindings);
|
|
658
824
|
// A pinning signature that itself keeps type parameters (`let g: <T>(x:
|
|
659
825
|
// T) => T = identity` — storing the generic signature as such) binds
|
|
660
826
|
// nothing: mapType answers null for an unsubstituted parameter.
|
|
@@ -673,7 +839,7 @@ function runtimeOptionalHofGenericBinding(lowerer, ref, info) {
|
|
|
673
839
|
while (argument.parent && ts.isParenthesizedExpression(argument.parent))
|
|
674
840
|
argument = argument.parent;
|
|
675
841
|
const call = argument.parent;
|
|
676
|
-
if (!ts.isCallExpression(call) || call.arguments[0] !== argument)
|
|
842
|
+
if (!ts.isCallExpression(call) || call.arguments.nodes[0] !== argument)
|
|
677
843
|
return null;
|
|
678
844
|
if (!ts.isPropertyAccessExpression(call.expression) || call.expression.name.text !== "map")
|
|
679
845
|
return null;
|
|
@@ -682,7 +848,7 @@ function runtimeOptionalHofGenericBinding(lowerer, ref, info) {
|
|
|
682
848
|
const receiver = lowerer.mapTypeOf(lowerer.typeOf(call.expression.expression));
|
|
683
849
|
if (receiver?.kind !== "array")
|
|
684
850
|
return null;
|
|
685
|
-
const parameter = info.decl.parameters[0];
|
|
851
|
+
const parameter = info.decl.parameters.nodes[0];
|
|
686
852
|
if (!parameter || !ts.isIdentifier(parameter.name))
|
|
687
853
|
return null;
|
|
688
854
|
const parameterType = lowerer.typeOf(parameter.name);
|
|
@@ -693,6 +859,20 @@ function runtimeOptionalHofGenericBinding(lowerer, ref, info) {
|
|
|
693
859
|
return null;
|
|
694
860
|
return { typeParam, type: lowerer.runtimeOptionalType(receiver.elem) };
|
|
695
861
|
}
|
|
862
|
+
/** The erased instance of a generic declaration: every type parameter
|
|
863
|
+
* bound to `unknown`, the function JavaScript runs for any type arguments.
|
|
864
|
+
* Values of generic methods (dynamic dispatch, interface views) call it. */
|
|
865
|
+
export function erasedGenericInstance(lowerer, blame, info) {
|
|
866
|
+
lowerer.erasingDepth++;
|
|
867
|
+
try {
|
|
868
|
+
const instance = genericValueInstance(lowerer, blame, info, new Map(info.typeParams.map((tp) => [tp, DYN])));
|
|
869
|
+
instance.erased = true;
|
|
870
|
+
return instance;
|
|
871
|
+
}
|
|
872
|
+
finally {
|
|
873
|
+
lowerer.erasingDepth--;
|
|
874
|
+
}
|
|
875
|
+
}
|
|
696
876
|
/** The instance a pinned VALUE reference names: the declaration's modes
|
|
697
877
|
* over the DECLARED types mapped under the bindings (mapType's resolver
|
|
698
878
|
* substitutes — the instance-body trick), which is the same result the
|
|
@@ -704,7 +884,7 @@ function genericValueInstance(lowerer, ref, info, bindings) {
|
|
|
704
884
|
const rendered = info.typeParams
|
|
705
885
|
.map((tp) => {
|
|
706
886
|
const bound = bindings.get(tp);
|
|
707
|
-
return bound ? lowerer.fmt(bound) : tp
|
|
887
|
+
return bound ? lowerer.fmt(bound) : ts.symbolName(tp);
|
|
708
888
|
})
|
|
709
889
|
.join(", ");
|
|
710
890
|
lowerer.typeParamBindings = bindings;
|
|
@@ -713,7 +893,7 @@ function genericValueInstance(lowerer, ref, info, bindings) {
|
|
|
713
893
|
const declSig = lowerer.checker.getSignatureFromDeclaration(info.decl);
|
|
714
894
|
if (!declSig)
|
|
715
895
|
lowerer.unsupported("SC1090", ref, "this function form");
|
|
716
|
-
const params = paramShapes(lowerer, info.decl.parameters, declSig);
|
|
896
|
+
const params = paramShapes(lowerer, info.decl.parameters.nodes, declSig);
|
|
717
897
|
const retTs = lowerer.checker.getReturnTypeOfSignature(declSig);
|
|
718
898
|
const returnType = lowerer.mapTypeOf(retTs);
|
|
719
899
|
if (!returnType) {
|
|
@@ -797,7 +977,7 @@ function paramWrittenInBody(lowerer, body, sym, name) {
|
|
|
797
977
|
hit = true;
|
|
798
978
|
return;
|
|
799
979
|
}
|
|
800
|
-
|
|
980
|
+
ts.forEachChild(m, scan);
|
|
801
981
|
};
|
|
802
982
|
scan(n);
|
|
803
983
|
return hit;
|
|
@@ -829,7 +1009,7 @@ function paramWrittenInBody(lowerer, body, sym, name) {
|
|
|
829
1009
|
written = true;
|
|
830
1010
|
return;
|
|
831
1011
|
}
|
|
832
|
-
|
|
1012
|
+
ts.forEachChild(n, walk);
|
|
833
1013
|
};
|
|
834
1014
|
walk(body);
|
|
835
1015
|
return written;
|
|
@@ -845,6 +1025,105 @@ function broadPromiseParam(lowerer, type) {
|
|
|
845
1025
|
arms.some((arm) => arm.kind === "promise" && arm.inner.kind === "dyn") &&
|
|
846
1026
|
arms.every((arm) => isUnitType(arm) || (arm.kind === "promise" && arm.inner.kind === "dyn")));
|
|
847
1027
|
}
|
|
1028
|
+
/** The destructured object parameters of a JS function-like that bind like
|
|
1029
|
+
* implicit type parameters: every element a plain name (optionally renamed
|
|
1030
|
+
* from an identifier or string key) with no default, no rest element, and
|
|
1031
|
+
* no write in the body, under a broad inferred type. Parallel to
|
|
1032
|
+
* decl.parameters. */
|
|
1033
|
+
export function implicitPatternsOf(lowerer, decl) {
|
|
1034
|
+
return decl.parameters.nodes.map((param) => {
|
|
1035
|
+
if (!ts.isObjectBindingPattern(param.name) || !decl.body)
|
|
1036
|
+
return null;
|
|
1037
|
+
if (param.dotDotDotToken || param.questionToken || param.initializer)
|
|
1038
|
+
return null;
|
|
1039
|
+
const elements = [];
|
|
1040
|
+
for (const element of param.name.elements.nodes) {
|
|
1041
|
+
if (element.dotDotDotToken || element.initializer || !ts.isIdentifier(element.name))
|
|
1042
|
+
return null;
|
|
1043
|
+
const key = element.propertyName ?? element.name;
|
|
1044
|
+
if (!ts.isIdentifier(key) && !ts.isStringLiteral(key))
|
|
1045
|
+
return null;
|
|
1046
|
+
const symbol = lowerer.checker.getSymbolAtLocation(element.name);
|
|
1047
|
+
if (!symbol || paramWrittenInBody(lowerer, decl.body, symbol, element.name.text))
|
|
1048
|
+
return null;
|
|
1049
|
+
// A JSDoc or contextual type names the properties: keep its ABI.
|
|
1050
|
+
if ((lowerer.typeOf(element.name).flags & ts.TypeFlags.Any) === 0)
|
|
1051
|
+
return null;
|
|
1052
|
+
elements.push({ property: key.text, symbol });
|
|
1053
|
+
}
|
|
1054
|
+
return elements.length > 0 ? { elements } : null;
|
|
1055
|
+
});
|
|
1056
|
+
}
|
|
1057
|
+
/** The type a destructured parameter takes at one call site (the object's
|
|
1058
|
+
* own representation, a record or a checked value) and the checker type
|
|
1059
|
+
* each destructured name binds. An object literal argument types the names
|
|
1060
|
+
* from its property expressions, which see the enclosing instance's
|
|
1061
|
+
* bindings (`makeClass({ Base, name })` inside a specialized
|
|
1062
|
+
* `extend(Base, name)`); any other argument uses its checker type. Null
|
|
1063
|
+
* when the argument lacks a destructured property, or passes a class the
|
|
1064
|
+
* callee itself defines: each such class would instantiate the callee
|
|
1065
|
+
* again (a static `extend` calling `makeClass({ Base: this })`). */
|
|
1066
|
+
function implicitPatternBinding(lowerer, callee, pattern, arg) {
|
|
1067
|
+
let literal = arg;
|
|
1068
|
+
while (ts.isParenthesizedExpression(literal))
|
|
1069
|
+
literal = literal.expression;
|
|
1070
|
+
const types = new Map();
|
|
1071
|
+
if (ts.isObjectLiteralExpression(literal)) {
|
|
1072
|
+
const values = new Map();
|
|
1073
|
+
/** Shorthand properties name the binding they read. */
|
|
1074
|
+
const shorthand = new Map();
|
|
1075
|
+
for (const property of literal.properties.nodes) {
|
|
1076
|
+
if (ts.isShorthandPropertyAssignment(property) && ts.isIdentifier(property.name)) {
|
|
1077
|
+
values.set(property.name.text, property.name);
|
|
1078
|
+
const read = lowerer.checker.getShorthandAssignmentValueSymbol(property);
|
|
1079
|
+
if (read)
|
|
1080
|
+
shorthand.set(property.name.text, read);
|
|
1081
|
+
}
|
|
1082
|
+
else if (ts.isPropertyAssignment(property) &&
|
|
1083
|
+
(ts.isIdentifier(property.name) || ts.isStringLiteral(property.name)))
|
|
1084
|
+
values.set(property.name.text, property.initializer);
|
|
1085
|
+
else
|
|
1086
|
+
return null;
|
|
1087
|
+
}
|
|
1088
|
+
for (const element of pattern.elements) {
|
|
1089
|
+
const value = values.get(element.property);
|
|
1090
|
+
if (!value)
|
|
1091
|
+
return null;
|
|
1092
|
+
const read = shorthand.get(element.property);
|
|
1093
|
+
const type = (read && lowerer.implicitParamTypes?.get(read)) ?? lowerer.typeOf(value);
|
|
1094
|
+
types.set(element.symbol, lowerer.checker.getBaseTypeOfLiteralType(type));
|
|
1095
|
+
}
|
|
1096
|
+
// The object keeps the representation the call site lowers it to; the
|
|
1097
|
+
// destructured names read their static types back out of it.
|
|
1098
|
+
const lowered = tryLowerExpression(lowerer, literal);
|
|
1099
|
+
if (lowered?.type.kind !== "record" && lowered?.type.kind !== "dyn")
|
|
1100
|
+
return null;
|
|
1101
|
+
if (lowered.type.kind === "record") {
|
|
1102
|
+
for (const field of lowerer.shapes.get(lowered.type.shapeId)?.fields ?? [])
|
|
1103
|
+
if (field.type.kind === "classval" && classDefinedIn(lowerer, field.type.className, callee))
|
|
1104
|
+
return null;
|
|
1105
|
+
}
|
|
1106
|
+
return { record: lowered.type, types };
|
|
1107
|
+
}
|
|
1108
|
+
const argType = lowerer.checker.getBaseTypeOfLiteralType(lowerer.typeOf(arg));
|
|
1109
|
+
const record = lowerer.mapTypeOf(argType);
|
|
1110
|
+
if (record?.kind !== "record")
|
|
1111
|
+
return null;
|
|
1112
|
+
for (const element of pattern.elements) {
|
|
1113
|
+
const property = lowerer.checker.getPropertyOfType(argType, element.property);
|
|
1114
|
+
if (!property)
|
|
1115
|
+
return null;
|
|
1116
|
+
types.set(element.symbol, lowerer.checker.getTypeOfSymbol(property));
|
|
1117
|
+
}
|
|
1118
|
+
return { record, types };
|
|
1119
|
+
}
|
|
1120
|
+
/** The class is declared inside `scope`. */
|
|
1121
|
+
function classDefinedIn(lowerer, className, scope) {
|
|
1122
|
+
for (let n = lowerer.classes.get(className)?.decl ?? undefined; n; n = n.parent)
|
|
1123
|
+
if (n === scope)
|
|
1124
|
+
return true;
|
|
1125
|
+
return false;
|
|
1126
|
+
}
|
|
848
1127
|
/** The implicit-type-parameter slots of a JS function-like: parallel to
|
|
849
1128
|
* decl.parameters, the param SYMBOL where the slot is a bindable
|
|
850
1129
|
* implicit param (identifier-named, broad inferred/JSDoc type, not
|
|
@@ -857,17 +1136,17 @@ export function implicitAnyParamSymbolsOf(lowerer, decl, classParams = false) {
|
|
|
857
1136
|
return null;
|
|
858
1137
|
if (decl.asteriskToken)
|
|
859
1138
|
return null;
|
|
860
|
-
if (decl.modifiers?.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword))
|
|
1139
|
+
if (decl.modifiers?.nodes.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword))
|
|
861
1140
|
return null;
|
|
862
1141
|
if (decl.typeParameters !== undefined)
|
|
863
1142
|
return null; // real generics own the machinery
|
|
864
|
-
if (decl.parameters.length === 0)
|
|
1143
|
+
if (decl.parameters.nodes.length === 0)
|
|
865
1144
|
return null;
|
|
866
1145
|
// The variadic-`arguments` form keeps its dynRest story whole.
|
|
867
1146
|
if (bodyReadsArguments(decl))
|
|
868
1147
|
return null;
|
|
869
1148
|
let hasImplicitParams = false;
|
|
870
|
-
const out = decl.parameters.map((param) => {
|
|
1149
|
+
const out = decl.parameters.nodes.map((param) => {
|
|
871
1150
|
if (!ts.isIdentifier(param.name))
|
|
872
1151
|
return null;
|
|
873
1152
|
if (param.dotDotDotToken || param.questionToken || param.initializer)
|
|
@@ -894,6 +1173,10 @@ export function implicitAnyParamSymbolsOf(lowerer, decl, classParams = false) {
|
|
|
894
1173
|
hasImplicitParams = true;
|
|
895
1174
|
return sym;
|
|
896
1175
|
});
|
|
1176
|
+
// Destructured object parameters monomorphize too (implicitPatternsOf);
|
|
1177
|
+
// their slots stay null here.
|
|
1178
|
+
if (!hasImplicitParams && isJsSourceFile(ts.getSourceFileOfNode(decl)))
|
|
1179
|
+
hasImplicitParams = implicitPatternsOf(lowerer, decl).some((pattern) => pattern !== null);
|
|
897
1180
|
return hasImplicitParams ? out : null;
|
|
898
1181
|
}
|
|
899
1182
|
/** The checker-fallback return type an implicit instance PROMISES before
|
|
@@ -907,10 +1190,10 @@ function implicitDeclaredReturn(lowerer, info) {
|
|
|
907
1190
|
// narrower JSDoc (for example a Vector2 target documented as Vector3).
|
|
908
1191
|
// Infer their result from the specialized body as well.
|
|
909
1192
|
if (info.member?.kind === "static" &&
|
|
910
|
-
info.decl.parameters.some((param, index) => info.implicitParams?.[index] &&
|
|
1193
|
+
info.decl.parameters.nodes.some((param, index) => info.implicitParams?.[index] &&
|
|
911
1194
|
lowerer.mapTypeOf(lowerer.typeOf(param.name))?.kind === "object"))
|
|
912
1195
|
return null;
|
|
913
|
-
const broadCallbackSymbols = new Set(info.decl.parameters.flatMap((param, index) => {
|
|
1196
|
+
const broadCallbackSymbols = new Set(info.decl.parameters.nodes.flatMap((param, index) => {
|
|
914
1197
|
const symbol = info.implicitParams?.[index];
|
|
915
1198
|
return symbol !== null &&
|
|
916
1199
|
symbol !== undefined &&
|
|
@@ -957,7 +1240,7 @@ function implicitDeclaredReturn(lowerer, info) {
|
|
|
957
1240
|
// container instead of checking every element against that guess.
|
|
958
1241
|
if (!hasExplicitJsDocReturn(info.decl))
|
|
959
1242
|
return null;
|
|
960
|
-
if (info.decl.parameters.some((param, index) => info.implicitParams?.[index] &&
|
|
1243
|
+
if (info.decl.parameters.nodes.some((param, index) => info.implicitParams?.[index] &&
|
|
961
1244
|
lowerer.mapTypeOf(lowerer.typeOf(param.name))?.kind === "array"))
|
|
962
1245
|
return null;
|
|
963
1246
|
const elem = lowerer.checker.getTypeArguments(retTs)[0];
|
|
@@ -990,9 +1273,7 @@ function implicitDeclaredReturn(lowerer, info) {
|
|
|
990
1273
|
return undefined;
|
|
991
1274
|
const symbol = lowerer.resolveValueSymbol(node.expression);
|
|
992
1275
|
if (symbol &&
|
|
993
|
-
lowerer
|
|
994
|
-
.declarationsOf(symbol)
|
|
995
|
-
.some((decl) => ts.isVariableDeclaration(decl) && jsBindingHasOpenWrites(lowerer, decl)))
|
|
1276
|
+
symbol.declarations.some((decl) => ts.isVariableDeclaration(decl) && jsBindingHasOpenWrites(lowerer, decl)))
|
|
996
1277
|
openReturn = true;
|
|
997
1278
|
return undefined;
|
|
998
1279
|
});
|
|
@@ -1020,6 +1301,14 @@ function implicitDeclaredReturn(lowerer, info) {
|
|
|
1020
1301
|
return null;
|
|
1021
1302
|
if (mapped !== null && promiseCarriesDyn(lowerer, mapped) && !hasExplicitJsDocReturn(info.decl))
|
|
1022
1303
|
return null;
|
|
1304
|
+
// A JavaScript body that can complete without returning yields
|
|
1305
|
+
// undefined there, whatever its JSDoc claims (bcryptjs's `hash`
|
|
1306
|
+
// returns a promise only when no callback is passed), exactly as
|
|
1307
|
+
// declaredReturnType widens non-generic JavaScript functions.
|
|
1308
|
+
if (mapped !== null &&
|
|
1309
|
+
isJsSourceFile(ts.getSourceFileOfNode(info.decl)) &&
|
|
1310
|
+
functionCanReturnUndefined(info.decl))
|
|
1311
|
+
return lowerer.withUndefinedArmOf(mapped) ?? mapped;
|
|
1023
1312
|
return mapped;
|
|
1024
1313
|
}
|
|
1025
1314
|
catch (e) {
|
|
@@ -1057,7 +1346,7 @@ function bindableImplicitIr(t) {
|
|
|
1057
1346
|
function storedImplicitArgumentType(lowerer, arg) {
|
|
1058
1347
|
while (ts.isParenthesizedExpression(arg))
|
|
1059
1348
|
arg = arg.expression;
|
|
1060
|
-
if (isJsSourceFile(
|
|
1349
|
+
if (isJsSourceFile(ts.getSourceFileOfNode(arg)) &&
|
|
1061
1350
|
(ts.isArrowFunction(arg) || ts.isFunctionExpression(arg))) {
|
|
1062
1351
|
const saved = lowerer.diagSink;
|
|
1063
1352
|
const diagnostics = [];
|
|
@@ -1081,9 +1370,9 @@ function storedImplicitArgumentType(lowerer, arg) {
|
|
|
1081
1370
|
return awaited?.kind === "promise" ? awaited.inner : awaited;
|
|
1082
1371
|
}
|
|
1083
1372
|
if (ts.isObjectLiteralExpression(arg) &&
|
|
1084
|
-
isJsSourceFile(
|
|
1085
|
-
(arg.properties.length === 0 ||
|
|
1086
|
-
arg.properties.some((property) => ts.isMethodDeclaration(property) ||
|
|
1373
|
+
isJsSourceFile(ts.getSourceFileOfNode(arg)) &&
|
|
1374
|
+
(arg.properties.nodes.length === 0 ||
|
|
1375
|
+
arg.properties.nodes.some((property) => ts.isMethodDeclaration(property) ||
|
|
1087
1376
|
ts.isAccessor(property) ||
|
|
1088
1377
|
(!ts.isSpreadAssignment(property) &&
|
|
1089
1378
|
property.name !== undefined &&
|
|
@@ -1091,7 +1380,7 @@ function storedImplicitArgumentType(lowerer, arg) {
|
|
|
1091
1380
|
return DYN;
|
|
1092
1381
|
if (ts.isIdentifier(arg))
|
|
1093
1382
|
return lowerer.peekLocal(arg)?.type ?? lowerer.globalOf(arg)?.type ?? null;
|
|
1094
|
-
if (isJsSourceFile(
|
|
1383
|
+
if (isJsSourceFile(ts.getSourceFileOfNode(arg)) &&
|
|
1095
1384
|
(ts.isPropertyAccessExpression(arg) || ts.isElementAccessExpression(arg))) {
|
|
1096
1385
|
// Mutable JS members can retain an initializer-only checker type (for
|
|
1097
1386
|
// example a linked-list slot initially null). Specialize to the value
|
|
@@ -1100,7 +1389,7 @@ function storedImplicitArgumentType(lowerer, arg) {
|
|
|
1100
1389
|
if (represented)
|
|
1101
1390
|
return represented.type;
|
|
1102
1391
|
}
|
|
1103
|
-
if (isJsSourceFile(
|
|
1392
|
+
if (isJsSourceFile(ts.getSourceFileOfNode(arg)) &&
|
|
1104
1393
|
(ts.isCallExpression(arg) ||
|
|
1105
1394
|
ts.isConditionalExpression(arg) ||
|
|
1106
1395
|
(ts.isBinaryExpression(arg) &&
|
|
@@ -1133,7 +1422,27 @@ function storedImplicitArgumentType(lowerer, arg) {
|
|
|
1133
1422
|
export function implicitCallInstance(lowerer, call, info) {
|
|
1134
1423
|
const shapes = [];
|
|
1135
1424
|
const argTypes = new Map();
|
|
1136
|
-
info.
|
|
1425
|
+
const patterns = (info.implicitPatterns ??= implicitPatternsOf(lowerer, info.decl));
|
|
1426
|
+
/** The destructured names' bound types, which the object's own
|
|
1427
|
+
* representation does not always carry. */
|
|
1428
|
+
const patternKey = [];
|
|
1429
|
+
info.decl.parameters.nodes.forEach((param, i) => {
|
|
1430
|
+
const pattern = patterns[i];
|
|
1431
|
+
const patternArg = call.arguments.nodes[i];
|
|
1432
|
+
if (pattern && patternArg && !ts.isSpreadElement(patternArg)) {
|
|
1433
|
+
// The argument's object type binds each destructured name, so a
|
|
1434
|
+
// class passed as `{ Base }` keeps its static class type.
|
|
1435
|
+
const bound = implicitPatternBinding(lowerer, info.decl, pattern, patternArg);
|
|
1436
|
+
if (bound) {
|
|
1437
|
+
for (const [symbol, type] of bound.types) {
|
|
1438
|
+
argTypes.set(symbol, type);
|
|
1439
|
+
const mapped = lowerer.mapTypeOf(type);
|
|
1440
|
+
patternKey.push(mapped ? typeKey(mapped) : "?");
|
|
1441
|
+
}
|
|
1442
|
+
shapes.push({ type: bound.record, mode: "required" });
|
|
1443
|
+
return;
|
|
1444
|
+
}
|
|
1445
|
+
}
|
|
1137
1446
|
const sym = info.implicitParams[i];
|
|
1138
1447
|
if (!sym) {
|
|
1139
1448
|
shapes.push(lowerer.paramShape(param));
|
|
@@ -1143,7 +1452,7 @@ export function implicitCallInstance(lowerer, call, info) {
|
|
|
1143
1452
|
const declared = lowerer.paramShape(param);
|
|
1144
1453
|
if ((lowerer.typeOf(param.name).flags & ts.TypeFlags.Any) === 0)
|
|
1145
1454
|
bound = declared.type;
|
|
1146
|
-
const arg = call.arguments[i];
|
|
1455
|
+
const arg = call.arguments.nodes[i];
|
|
1147
1456
|
if (arg && !ts.isSpreadElement(arg)) {
|
|
1148
1457
|
const stored = storedImplicitArgumentType(lowerer, arg);
|
|
1149
1458
|
if (stored?.kind === "dyn") {
|
|
@@ -1152,6 +1461,17 @@ export function implicitCallInstance(lowerer, call, info) {
|
|
|
1152
1461
|
shapes.push({ type: bound, mode: "required" });
|
|
1153
1462
|
return;
|
|
1154
1463
|
}
|
|
1464
|
+
// `this` in a static method specialized for its receiver class is
|
|
1465
|
+
// that class: bind it as a call naming the class would.
|
|
1466
|
+
if (stored?.kind === "classval" && arg.kind === ts.SyntaxKind.ThisKeyword) {
|
|
1467
|
+
const classDecl = lowerer.classes.get(stored.className)?.decl;
|
|
1468
|
+
const classType = classDecl?.name ? lowerer.typeOf(classDecl.name) : null;
|
|
1469
|
+
if (classType) {
|
|
1470
|
+
argTypes.set(sym, classType);
|
|
1471
|
+
shapes.push({ type: stored, mode: "required" });
|
|
1472
|
+
return;
|
|
1473
|
+
}
|
|
1474
|
+
}
|
|
1155
1475
|
// A represented native array must keep its storage when a direct
|
|
1156
1476
|
// inferred helper receives it. Re-boxing a checker-any array would
|
|
1157
1477
|
// copy it, losing writes (and attempting to read unfilled slots).
|
|
@@ -1178,7 +1498,7 @@ export function implicitCallInstance(lowerer, call, info) {
|
|
|
1178
1498
|
const t = lowerer.checker.getBaseTypeOfLiteralType(lowerer.typeOf(arg));
|
|
1179
1499
|
const mapped = (neverTaintedJsType(lowerer, arg, t) ? null : lowerer.mapTypeOf(t)) ??
|
|
1180
1500
|
dynFallbackType(lowerer, arg, t);
|
|
1181
|
-
if (isJsSourceFile(
|
|
1501
|
+
if (isJsSourceFile(ts.getSourceFileOfNode(arg)) &&
|
|
1182
1502
|
ts.isArrayLiteralExpression(arg) &&
|
|
1183
1503
|
mapped?.kind === "array" &&
|
|
1184
1504
|
(mapped.elem.kind === "classval" ||
|
|
@@ -1201,7 +1521,7 @@ export function implicitCallInstance(lowerer, call, info) {
|
|
|
1201
1521
|
// That checker supertype is not an empty-record runtime layout:
|
|
1202
1522
|
// preserve represented arms through the checked boundary instead
|
|
1203
1523
|
// of specializing a call to a union that would discard them.
|
|
1204
|
-
if (isJsSourceFile(
|
|
1524
|
+
if (isJsSourceFile(ts.getSourceFileOfNode(arg)) &&
|
|
1205
1525
|
mapped?.kind === "func" &&
|
|
1206
1526
|
!lowerer.dynConvertible(mapped)) {
|
|
1207
1527
|
argTypes.set(sym, lowerer.checker.getUnknownType());
|
|
@@ -1247,27 +1567,27 @@ export function implicitCallInstance(lowerer, call, info) {
|
|
|
1247
1567
|
}
|
|
1248
1568
|
shapes.push({ type: bound, mode: "required" });
|
|
1249
1569
|
});
|
|
1250
|
-
return internImplicitInstance(lowerer, call, info, shapes, argTypes);
|
|
1570
|
+
return internImplicitInstance(lowerer, call, info, shapes, argTypes, patternKey.join(","));
|
|
1251
1571
|
}
|
|
1252
1572
|
/** The all-dyn DEFAULT instance — today's compiled body exactly: what a
|
|
1253
1573
|
* VALUE reference of an implicit-any function names (indirect calls
|
|
1254
1574
|
* carry no per-site types to bind). */
|
|
1255
1575
|
export function implicitDefaultInstance(lowerer, blame, info) {
|
|
1256
|
-
const shapes = info.decl.parameters.map((param, i) => info.implicitParams[i] ? { type: DYN, mode: "required" } : lowerer.paramShape(param));
|
|
1576
|
+
const shapes = info.decl.parameters.nodes.map((param, i) => info.implicitParams[i] ? { type: DYN, mode: "required" } : lowerer.paramShape(param));
|
|
1257
1577
|
const argTypes = new Map();
|
|
1258
1578
|
// Newly bindable nominal class parameters must not retain their JSDoc
|
|
1259
1579
|
// receiver type in the checked fallback. Keep existing broad JS inference.
|
|
1260
|
-
for (let i = 0; i < info.decl.parameters.length; i++) {
|
|
1580
|
+
for (let i = 0; i < info.decl.parameters.nodes.length; i++) {
|
|
1261
1581
|
const symbol = info.implicitParams?.[i];
|
|
1262
|
-
const kind = lowerer.mapTypeOf(lowerer.typeOf(info.decl.parameters[i].name))?.kind;
|
|
1582
|
+
const kind = lowerer.mapTypeOf(lowerer.typeOf(info.decl.parameters.nodes[i].name))?.kind;
|
|
1263
1583
|
if (symbol && (kind === "object" || kind === "array")) {
|
|
1264
1584
|
argTypes.set(symbol, lowerer.checker.getUnknownType());
|
|
1265
1585
|
}
|
|
1266
1586
|
}
|
|
1267
1587
|
return internImplicitInstance(lowerer, blame, info, shapes, argTypes);
|
|
1268
1588
|
}
|
|
1269
|
-
function internImplicitInstance(lowerer, blame, info, shapes, argTypes) {
|
|
1270
|
-
const key = shapes.map((s) => typeKey(s.type)).join(",");
|
|
1589
|
+
function internImplicitInstance(lowerer, blame, info, shapes, argTypes, patternKey = "") {
|
|
1590
|
+
const key = shapes.map((s) => typeKey(s.type)).join(",") + (patternKey ? `|${patternKey}` : "");
|
|
1271
1591
|
let inst = info.instances.get(key);
|
|
1272
1592
|
if (inst?.implicitState === "failed")
|
|
1273
1593
|
lowerer.unsupported("SC1090", blame, `the failed specialization of '${info.baseName}'`);
|
|
@@ -1284,7 +1604,7 @@ function internImplicitInstance(lowerer, blame, info, shapes, argTypes) {
|
|
|
1284
1604
|
`${MAX_INSTANTIATION_RECURSION} recursive specializations on one demand path)`);
|
|
1285
1605
|
}
|
|
1286
1606
|
const rendered = shapes.map((s) => lowerer.fmt(s.type)).join(", ");
|
|
1287
|
-
const dynamicBroadPromise = info.decl.parameters.some((param, index) => info.implicitParams?.[index] !== null &&
|
|
1607
|
+
const dynamicBroadPromise = info.decl.parameters.nodes.some((param, index) => info.implicitParams?.[index] !== null &&
|
|
1288
1608
|
info.implicitParams?.[index] !== undefined &&
|
|
1289
1609
|
shapes[index]?.type.kind === "dyn" &&
|
|
1290
1610
|
broadPromiseParam(lowerer, lowerer.typeOf(param.name)));
|
|
@@ -1322,7 +1642,7 @@ function internImplicitInstance(lowerer, blame, info, shapes, argTypes) {
|
|
|
1322
1642
|
// this exact committed instance body here; repeated instantiations of
|
|
1323
1643
|
// the same declaration find the facade memos warm.
|
|
1324
1644
|
lowerer.checker.prefetchRoots([
|
|
1325
|
-
...info.decl.parameters.flatMap((param) =>
|
|
1645
|
+
...info.decl.parameters.nodes.flatMap((param) => param.initializer ? [param.initializer] : []),
|
|
1326
1646
|
...(info.decl.body ? [info.decl.body] : []),
|
|
1327
1647
|
]);
|
|
1328
1648
|
const fn = lowerer.lowerGenericInstance(info, inst);
|
|
@@ -1369,7 +1689,7 @@ export function implicitLocalFnNodeOf(lowerer, decl) {
|
|
|
1369
1689
|
if (cached !== undefined)
|
|
1370
1690
|
return cached ? cached.decl : null;
|
|
1371
1691
|
const probe = () => {
|
|
1372
|
-
if (!implicitMonoFile(
|
|
1692
|
+
if (!implicitMonoFile(ts.getSourceFileOfNode(decl)))
|
|
1373
1693
|
return null;
|
|
1374
1694
|
if (!ts.isIdentifier(decl.name) || decl.initializer === undefined)
|
|
1375
1695
|
return null;
|
|
@@ -1386,9 +1706,7 @@ export function implicitLocalFnNodeOf(lowerer, decl) {
|
|
|
1386
1706
|
if (!sym)
|
|
1387
1707
|
return null;
|
|
1388
1708
|
const isConst = (ts.getCombinedNodeFlags(decl) & ts.NodeFlags.Const) !== 0;
|
|
1389
|
-
const redeclared =
|
|
1390
|
-
.declarationsOf(sym)
|
|
1391
|
-
.some((d) => d !== decl && ts.isVariableDeclaration(d) && d.initializer !== undefined);
|
|
1709
|
+
const redeclared = sym.declarations.some((d) => d !== decl && ts.isVariableDeclaration(d) && d.initializer !== undefined);
|
|
1392
1710
|
if (redeclared)
|
|
1393
1711
|
return null;
|
|
1394
1712
|
if (!isConst && !bindingNeverReassigned(lowerer, sym, decl))
|
|
@@ -1407,9 +1725,9 @@ export function implicitLocalFnNodeOf(lowerer, decl) {
|
|
|
1407
1725
|
}
|
|
1408
1726
|
if (ts.isIdentifier(n)) {
|
|
1409
1727
|
const s = lowerer.checker.getSymbolAtLocation(n);
|
|
1410
|
-
const d = s ?
|
|
1728
|
+
const d = s ? s.valueDeclaration : undefined;
|
|
1411
1729
|
if (d &&
|
|
1412
|
-
|
|
1730
|
+
ts.getSourceFileOfNode(d) === ts.getSourceFileOfNode(decl) &&
|
|
1413
1731
|
!(d.pos >= init.pos && d.end <= init.end)) {
|
|
1414
1732
|
// Declared outside the initializer, in this file: a capture
|
|
1415
1733
|
// exactly when some enclosing FUNCTION scope declares it —
|
|
@@ -1423,7 +1741,7 @@ export function implicitLocalFnNodeOf(lowerer, decl) {
|
|
|
1423
1741
|
}
|
|
1424
1742
|
}
|
|
1425
1743
|
}
|
|
1426
|
-
|
|
1744
|
+
ts.forEachChild(n, scan);
|
|
1427
1745
|
};
|
|
1428
1746
|
scan(init.body);
|
|
1429
1747
|
return captures ? null : init;
|
|
@@ -1458,7 +1776,7 @@ export function implicitLocalFnInfoOf(lowerer, decl, fnNode) {
|
|
|
1458
1776
|
const info = {
|
|
1459
1777
|
decl: fnNode,
|
|
1460
1778
|
baseName: name,
|
|
1461
|
-
qualifiedName: lowerer.qualify(
|
|
1779
|
+
qualifiedName: lowerer.qualify(ts.getSourceFileOfNode(decl), nsPathPrefix(stmt ?? decl, decl) + `${name}%l${ts.tokenStartOfNode(decl)}`),
|
|
1462
1780
|
typeParams: [],
|
|
1463
1781
|
instances: new Map(),
|
|
1464
1782
|
implicitParams: implicit,
|
|
@@ -1477,7 +1795,7 @@ export function implicitLocalFnInfoOf(lowerer, decl, fnNode) {
|
|
|
1477
1795
|
* arrow/function-expression property's initializer (`{ m: <T>(x: T) =>
|
|
1478
1796
|
* ... }`). Null when the property's declaration isn't that shape. */
|
|
1479
1797
|
export function objLitGenericFnNodeOf(lowerer, propSym) {
|
|
1480
|
-
const decl =
|
|
1798
|
+
const decl = propSym.valueDeclaration;
|
|
1481
1799
|
if (!decl)
|
|
1482
1800
|
return null;
|
|
1483
1801
|
if (ts.isMethodDeclaration(decl) && ts.isObjectLiteralExpression(decl.parent)) {
|
|
@@ -1511,7 +1829,7 @@ export function objLitGenericFnInfoOf(lowerer, blame, name, found) {
|
|
|
1511
1829
|
return existing;
|
|
1512
1830
|
if (fnNode.asteriskToken)
|
|
1513
1831
|
lowerer.unsupported("SC1071", blame);
|
|
1514
|
-
if (fnNode.modifiers?.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword)) {
|
|
1832
|
+
if (fnNode.modifiers?.nodes.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword)) {
|
|
1515
1833
|
lowerer.unsupported("SC1090", blame, "async object-literal generic methods");
|
|
1516
1834
|
}
|
|
1517
1835
|
// `this` is the receiver object — records don't model it (the
|
|
@@ -1525,12 +1843,12 @@ export function objLitGenericFnInfoOf(lowerer, blame, name, found) {
|
|
|
1525
1843
|
lowerer.unsupported("SC1090", blame, `object-literal generic methods declared inside functions (the compiled instantiations of '${name}' are module functions and cannot capture the enclosing frame — declare the object at module scope)`);
|
|
1526
1844
|
}
|
|
1527
1845
|
}
|
|
1528
|
-
const typeParams = declaredTypeParameterSymbols(lowerer, fnNode.typeParameters, blame, "this method form");
|
|
1529
|
-
checkGenericParameterNames(lowerer, fnNode.parameters, false);
|
|
1846
|
+
const typeParams = declaredTypeParameterSymbols(lowerer, fnNode.typeParameters.nodes, blame, "this method form");
|
|
1847
|
+
checkGenericParameterNames(lowerer, fnNode.parameters.nodes, false);
|
|
1530
1848
|
const info = {
|
|
1531
1849
|
decl: fnNode,
|
|
1532
1850
|
baseName: name,
|
|
1533
|
-
qualifiedName: lowerer.qualify(
|
|
1851
|
+
qualifiedName: lowerer.qualify(ts.getSourceFileOfNode(fnNode), `%ol${ts.tokenStartOfNode(fnNode)}.${name}`),
|
|
1534
1852
|
typeParams,
|
|
1535
1853
|
instances: new Map(),
|
|
1536
1854
|
objectLiteral: true,
|
|
@@ -1618,7 +1936,7 @@ export function bindingGenericFnInfoOf(lowerer, decl, fnNode) {
|
|
|
1618
1936
|
requireStableGenericBinding(lowerer, decl, sym, name);
|
|
1619
1937
|
const typeParams = [];
|
|
1620
1938
|
if (fnNode.typeParameters !== undefined) {
|
|
1621
|
-
typeParams.push(...declaredTypeParameterSymbols(lowerer, fnNode.typeParameters, fnNode, "this function form"));
|
|
1939
|
+
typeParams.push(...declaredTypeParameterSymbols(lowerer, fnNode.typeParameters.nodes, fnNode, "this function form"));
|
|
1622
1940
|
}
|
|
1623
1941
|
else {
|
|
1624
1942
|
// The CONTEXTUAL shape (bindingContextualGenericFnNodeOf): the type
|
|
@@ -1636,12 +1954,12 @@ export function bindingGenericFnInfoOf(lowerer, decl, fnNode) {
|
|
|
1636
1954
|
typeParams.push(tpSym);
|
|
1637
1955
|
}
|
|
1638
1956
|
}
|
|
1639
|
-
checkGenericParameterNames(lowerer, fnNode.parameters, true);
|
|
1957
|
+
checkGenericParameterNames(lowerer, fnNode.parameters.nodes, true);
|
|
1640
1958
|
const stmt = decl.parent?.parent; // declarator → list → statement (nsPathPrefix wants the statement)
|
|
1641
1959
|
const info = {
|
|
1642
1960
|
decl: fnNode,
|
|
1643
1961
|
baseName: name,
|
|
1644
|
-
qualifiedName: lowerer.qualify(
|
|
1962
|
+
qualifiedName: lowerer.qualify(ts.getSourceFileOfNode(decl), nsPathPrefix(stmt ?? decl, decl) + name),
|
|
1645
1963
|
typeParams,
|
|
1646
1964
|
instances: new Map(),
|
|
1647
1965
|
};
|
|
@@ -1709,7 +2027,7 @@ export function requireObjLitGenericReceiver(lowerer, blame, recvExpr, literal,
|
|
|
1709
2027
|
if (!ts.isIdentifier(recv))
|
|
1710
2028
|
fenceReceiver();
|
|
1711
2029
|
const recvSym = lowerer.resolveValueSymbol(recv);
|
|
1712
|
-
const recvDecl = recvSym ?
|
|
2030
|
+
const recvDecl = recvSym ? recvSym.valueDeclaration : undefined;
|
|
1713
2031
|
if (!recvDecl ||
|
|
1714
2032
|
!ts.isVariableDeclaration(recvDecl) ||
|
|
1715
2033
|
!ts.isVariableDeclarationList(recvDecl.parent) ||
|