@scriptc/compiler 0.3.6 → 0.4.1
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 +717 -55
- 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 +20 -0
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/immutability.test.js +1 -1
- package/dist/backend/library-pack.js +9 -0
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/link-plan-core.d.ts +2 -0
- package/dist/backend/link-plan-core.js +2 -0
- package/dist/backend/link-plan-core.js.map +1 -1
- package/dist/backend/link-plan.d.ts +1 -0
- package/dist/backend/link-plan.js +1 -0
- package/dist/backend/link-plan.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.js +3 -1
- package/dist/backend/llvm/array-search.js.map +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 +38 -1
- package/dist/backend/llvm/classes.js +185 -35
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +79 -17
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +21 -3
- package/dist/backend/llvm/common.js +51 -3
- 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 +15 -4
- package/dist/backend/llvm/dense-array-access.js +125 -44
- package/dist/backend/llvm/dense-array-access.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.test.js +63 -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 +37 -4
- package/dist/backend/llvm/dyn.js +354 -183
- 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 +1193 -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 +1557 -0
- package/dist/backend/llvm/emit-module.js.map +1 -0
- package/dist/backend/llvm/emit-statements.d.ts +59 -0
- package/dist/backend/llvm/emit-statements.js +2041 -0
- package/dist/backend/llvm/emit-statements.js.map +1 -0
- package/dist/backend/llvm/emitter.d.ts +566 -291
- package/dist/backend/llvm/emitter.js +728 -4671
- 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 +87 -56
- 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 +45 -24
- 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 +113 -66
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +124 -28
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.test.js +57 -2
- package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
- 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 +65 -27
- 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.js +3 -3
- package/dist/backend/llvm/integer-clones.js.map +1 -1
- 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/js-ic.d.ts +18 -0
- package/dist/backend/llvm/js-ic.js +712 -0
- package/dist/backend/llvm/js-ic.js.map +1 -0
- 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 +616 -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 +94 -53
- 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 +209 -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 +42 -33
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- 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.d.ts +20 -4
- package/dist/backend/llvm/map-number-lookup.js +45 -9
- package/dist/backend/llvm/map-number-lookup.js.map +1 -1
- 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 +215 -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 +7 -0
- package/dist/backend/llvm/publish.js +50 -19
- 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 +10 -7
- package/dist/backend/llvm/regions.js.map +1 -1
- package/dist/backend/llvm/regions.test.js +8 -2
- package/dist/backend/llvm/regions.test.js.map +1 -1
- package/dist/backend/llvm/shapes.d.ts +74 -45
- package/dist/backend/llvm/shapes.js +289 -28
- 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/speculative-integers.d.ts +20 -1
- package/dist/backend/llvm/speculative-integers.js +94 -6
- package/dist/backend/llvm/speculative-integers.js.map +1 -1
- package/dist/backend/llvm/speculative-integers.test.js +55 -1
- package/dist/backend/llvm/speculative-integers.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-reads.d.ts +1 -1
- package/dist/backend/llvm/string-reads.js +4 -4
- package/dist/backend/llvm/string-reads.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 +111 -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 +12 -0
- package/dist/backend/mangle.js +18 -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 +57 -0
- package/dist/backend/native/executable.js +211 -139
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/library.js +2 -0
- package/dist/backend/native/library.js.map +1 -1
- package/dist/backend/native/runtime-inputs.d.ts +1 -1
- package/dist/backend/native/runtime-inputs.js +1 -0
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native-codegen.d.ts +6 -0
- package/dist/backend/native-codegen.js +19 -0
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +27 -0
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +48 -0
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/native-profile.d.ts +32 -0
- package/dist/backend/native-profile.js +39 -0
- package/dist/backend/native-profile.js.map +1 -0
- package/dist/backend/native-profile.test.d.ts +1 -0
- package/dist/backend/native-profile.test.js +58 -0
- package/dist/backend/native-profile.test.js.map +1 -0
- package/dist/backend/native-tools.d.ts +14 -0
- package/dist/backend/native-tools.js +13 -0
- package/dist/backend/native-tools.js.map +1 -1
- package/dist/backend/publication.test.js +1 -1
- package/dist/backend/runtime-abi.d.ts +2 -2
- package/dist/backend/runtime-abi.js +2 -2
- package/dist/backend/runtime-pack-core.d.ts +13 -1
- package/dist/backend/runtime-pack-core.js +14 -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 +9 -1
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +9 -1
- 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 +15 -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 +8 -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 +106 -4
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/host.d.ts +3 -0
- package/dist/cli/output-options.d.ts +2 -0
- package/dist/cli/output-options.js +9 -0
- package/dist/cli/output-options.js.map +1 -1
- package/dist/cli/usage.d.ts +21 -1
- package/dist/cli/usage.js +43 -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 +22 -0
- package/dist/contracts/check.js +25 -8
- 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 +27 -0
- package/dist/executable/executable-cache.js +19 -1
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +12 -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/arguments-usage.d.ts +8 -0
- package/dist/frontend/arguments-usage.js +98 -0
- package/dist/frontend/arguments-usage.js.map +1 -1
- package/dist/frontend/arguments-usage.test.d.ts +1 -0
- package/dist/frontend/arguments-usage.test.js +32 -0
- package/dist/frontend/arguments-usage.test.js.map +1 -0
- 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/builtin-package-aliases.d.ts +24 -0
- package/dist/frontend/builtin-package-aliases.js +133 -0
- package/dist/frontend/builtin-package-aliases.js.map +1 -0
- package/dist/frontend/builtin-package-aliases.test.d.ts +1 -0
- package/dist/frontend/builtin-package-aliases.test.js +48 -0
- package/dist/frontend/builtin-package-aliases.test.js.map +1 -0
- 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/dts-paths.d.ts +4 -0
- package/dist/frontend/dts-paths.js +9 -1
- package/dist/frontend/dts-paths.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 +31 -0
- package/dist/frontend/lowering/builtins/builtin-class-dyn.js +205 -0
- package/dist/frontend/lowering/builtins/builtin-class-dyn.js.map +1 -0
- package/dist/frontend/lowering/builtins/callable-aliases.js +17 -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 +22 -0
- package/dist/frontend/lowering/builtins/crypto.js +215 -38
- 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/ecdh.d.ts +10 -0
- package/dist/frontend/lowering/builtins/ecdh.js +208 -0
- package/dist/frontend/lowering/builtins/ecdh.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 +284 -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 +41 -1
- package/dist/frontend/lowering/builtins/process.js +505 -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 +40 -0
- package/dist/frontend/lowering/builtins/promisify-callback.js +338 -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 +42 -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 +79 -30
- package/dist/frontend/lowering/builtins/timers.js.map +1 -1
- package/dist/frontend/lowering/builtins/typed-array-members.d.ts +7 -0
- package/dist/frontend/lowering/builtins/typed-array-members.js +160 -0
- package/dist/frontend/lowering/builtins/typed-array-members.js.map +1 -0
- 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 +23 -1
- package/dist/frontend/lowering/call-signatures.js +379 -55
- 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 +561 -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 +1124 -90
- 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.d.ts +10 -0
- package/dist/frontend/lowering/class-protocols.js +76 -45
- 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 +86 -19
- 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 +264 -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/fresh-spread.d.ts +13 -0
- package/dist/frontend/lowering/coercions/fresh-spread.js +95 -0
- package/dist/frontend/lowering/coercions/fresh-spread.js.map +1 -0
- package/dist/frontend/lowering/coercions/function-adapters.d.ts +16 -2
- package/dist/frontend/lowering/coercions/function-adapters.js +239 -68
- 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 +17 -0
- package/dist/frontend/lowering/containers/array-callbacks.js +287 -118
- 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 +58 -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 +94 -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.d.ts +9 -0
- package/dist/frontend/lowering/containers/bytes.js +649 -113
- 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 +126 -28
- 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 +455 -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 +30 -10
- package/dist/frontend/lowering/cycle-initialization.js +191 -35
- 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 +723 -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 +2557 -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 +1804 -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 +52 -0
- package/dist/frontend/lowering/expressions/keyed-field-targets.js +307 -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 +1337 -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 +301 -86
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.d.ts +3 -2
- package/dist/frontend/lowering/expressions/optional-chains.js +103 -17
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.d.ts +115 -0
- package/dist/frontend/lowering/expressions/property-access.js +3787 -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 +1724 -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 +551 -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-delegation.d.ts +8 -0
- package/dist/frontend/lowering/generator-delegation.js +191 -1
- package/dist/frontend/lowering/generator-delegation.js.map +1 -1
- 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 +43 -0
- package/dist/frontend/lowering/generic-functions.js +593 -118
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/handle-properties.d.ts +24 -0
- package/dist/frontend/lowering/handle-properties.js +281 -0
- package/dist/frontend/lowering/handle-properties.js.map +1 -0
- 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/iterable-spelling.d.ts +7 -0
- package/dist/frontend/lowering/iterable-spelling.js +38 -0
- package/dist/frontend/lowering/iterable-spelling.js.map +1 -0
- 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-array-sort.d.ts +33 -15
- package/dist/frontend/lowering/lower-array-sort.js +117 -21
- package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
- package/dist/frontend/lowering/lower-array-sort.test.js +93 -14
- package/dist/frontend/lowering/lower-array-sort.test.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 +33 -3
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.js +1404 -448
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +54 -3
- package/dist/frontend/lowering/lower-classes.js +1529 -472
- 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 +241 -21
- 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 +1509 -12486
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +72 -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 +39 -20
- 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 +900 -107
- 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.d.ts +11 -3
- package/dist/frontend/lowering/lower-modules.js +445 -94
- 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 +65 -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 +514 -101
- 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 +179 -118
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +30 -7
- package/dist/frontend/lowering/lower-stmts.js +1950 -433
- 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 +96 -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 +424 -27
- package/dist/frontend/lowering/lowerer.js +2062 -310
- 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/rebindable-functions.d.ts +8 -0
- package/dist/frontend/lowering/rebindable-functions.js +54 -0
- package/dist/frontend/lowering/rebindable-functions.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/static-typeof.d.ts +26 -0
- package/dist/frontend/lowering/static-typeof.js +133 -0
- package/dist/frontend/lowering/static-typeof.js.map +1 -0
- 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 +13 -12
- 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 +282 -45
- 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/thenables.d.ts +16 -0
- package/dist/frontend/lowering/thenables.js +124 -0
- package/dist/frontend/lowering/thenables.js.map +1 -0
- 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-builtin-aliases.d.ts +8 -0
- package/dist/frontend/npm-static-builtin-aliases.js +65 -0
- package/dist/frontend/npm-static-builtin-aliases.js.map +1 -0
- package/dist/frontend/npm-static-bundled-chunks.d.ts +58 -0
- package/dist/frontend/npm-static-bundled-chunks.js +981 -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 +399 -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 +988 -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 +336 -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-enum-iife.d.ts +6 -0
- package/dist/frontend/npm-static-enum-iife.js +280 -0
- package/dist/frontend/npm-static-enum-iife.js.map +1 -0
- package/dist/frontend/npm-static-enum-iife.test.d.ts +1 -0
- package/dist/frontend/npm-static-enum-iife.test.js +116 -0
- package/dist/frontend/npm-static-enum-iife.test.js.map +1 -0
- 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 +25 -1
- package/dist/frontend/npm-static.js +212 -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/npm.js +13 -0
- package/dist/frontend/npm.js.map +1 -1
- package/dist/frontend/package-shims.d.ts +47 -0
- package/dist/frontend/package-shims.js +300 -0
- package/dist/frontend/package-shims.js.map +1 -0
- package/dist/frontend/pipeline.js +230 -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 +100 -2
- package/dist/frontend/program.js +1627 -262
- 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 +49 -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 +26 -1
- package/dist/frontend/services.js +59 -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 +10 -5
- package/dist/frontend/ts7/program-host.js +19 -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 +57 -24
- package/dist/frontend/ts7/semantic-model.js +114 -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 +30 -15
- 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 +2735 -723
- 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 +4 -1
- package/dist/index.js +87 -8
- 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 +31 -0
- package/dist/ir/array-length-stability.js +249 -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 +134 -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 +116 -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 +540 -29
- 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 +7 -0
- package/dist/ir/integer-loop-facts.js +103 -17
- 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 +13 -1
- package/dist/ir/integer-ranges.js +125 -26
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +273 -2
- 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 +127 -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/js-ic.d.ts +52 -0
- package/dist/ir/js-ic.js +199 -0
- package/dist/ir/js-ic.js.map +1 -0
- package/dist/ir/js-ic.test.d.ts +1 -0
- package/dist/ir/js-ic.test.js +148 -0
- package/dist/ir/js-ic.test.js.map +1 -0
- package/dist/ir/jsval.d.ts +8 -0
- package/dist/ir/jsval.js +399 -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 +183 -33
- package/dist/ir/runtime-features.js +795 -422
- 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 +201 -150
- 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 +196 -76
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +41 -11
- 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 +14 -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 +22 -0
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.js +35 -6
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/compiler.test.js +2 -2
- package/dist/native/executable-cache.js +3 -0
- package/dist/native/executable-cache.js.map +1 -1
- package/dist/native/prepare.js +10 -0
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/sanitizer.test.js +19 -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 +22 -20
- package/shims/fs-extra/core/api.ts +1192 -0
- package/shims/fs-extra/index.ts +9 -0
- package/shims/undici/core/agent.ts +163 -0
- package/shims/undici/core/api.ts +93 -0
- package/shims/undici/core/client.ts +1304 -0
- package/shims/undici/core/connector.ts +157 -0
- package/shims/undici/core/diagnostics-types.ts +68 -0
- package/shims/undici/core/diagnostics.ts +16 -0
- package/shims/undici/core/dispatcher.ts +574 -0
- package/shims/undici/core/errors-v5.ts +22 -0
- package/shims/undici/core/errors-v7.ts +25 -0
- package/shims/undici/core/errors.ts +255 -0
- package/shims/undici/core/fetch.ts +635 -0
- package/shims/undici/core/pool.ts +280 -0
- package/shims/undici/core/readable.ts +268 -0
- package/shims/undici/core/request.ts +313 -0
- package/shims/undici/core/timers.ts +80 -0
- package/shims/undici/core/types.ts +167 -0
- package/shims/undici/core/util.ts +67 -0
- package/shims/undici/v5.ts +119 -0
- package/shims/undici/v7.ts +119 -0
- package/surface-manifest.json +304 -22
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { dynUndefinedExpr, boolLit, helperLoc, numLit, strLit, varRef } from "../../ir/build.js";
|
|
1
|
+
import { dynUndefinedExpr, boolLit, helperLoc, nodeThrowExpr, numLit, strLit, varRef, } from "../../ir/build.js";
|
|
2
|
+
import { builtinClassDynValueOf, builtinClassKindOf } from "./builtins/builtin-class-dyn.js";
|
|
2
3
|
import { InternalCompilerError } from "../../errors.js";
|
|
3
4
|
import * as ts from "../ts7/adapter.js";
|
|
4
5
|
import { unsignedHex } from "../../format-integer.js";
|
|
5
6
|
import { isJsSourceFile } from "../program.js";
|
|
6
|
-
import { BOOL, DYN, F64, RUNTIME_ERROR_CLASSES, STRING, isUnitType, UNDEFINED_T, VOID, canConvertToDyn, canDynCheckTo, isDirentShape, isDynTypedRefType, recordTextCodecClass, shapeHasAccessorSlots, typeKey, } from "../../ir/ir.js";
|
|
7
|
+
import { BOOL, DYN, F64, RUNTIME_ERROR_CLASSES, STRING, isUnitType, UNDEFINED_T, VOID, canConvertToDyn, canDynCheckTo, CLASS_FIELD_ATTRIBUTES_PREFIX, classDynViewSupported, DYN_CLASS_PROPERTIES, isClassOwnEnumerableFieldName, isDirentShape, isDynTypedRefType, recordTextCodecClass, shapeHasAccessorSlots, typeKey, } from "../../ir/ir.js";
|
|
7
8
|
import { isSafeToDiscard, isSafeToRepeat } from "./expressions/evaluation-safety.js";
|
|
8
9
|
import { symbolFieldDisplayName } from "./symbol-fields.js";
|
|
9
10
|
import { eventTargetRootOf } from "./lower-event-target.js";
|
|
@@ -84,13 +85,540 @@ function inspectKey(name) {
|
|
|
84
85
|
function errorRenderable(info) {
|
|
85
86
|
// The builtin classes' name/message/code live in runtime slots (the
|
|
86
87
|
// ScrError prefix insp.error reads), not IR fields; only USER-declared
|
|
87
|
-
// fields are own properties the runtime rendering would miss.
|
|
88
|
-
//
|
|
89
|
-
//
|
|
90
|
-
|
|
91
|
-
|
|
88
|
+
// fields are own properties the runtime rendering would miss. A user
|
|
89
|
+
// class's layout repeats its builtin base's prefix fields, which are
|
|
90
|
+
// those same slots. #private fields are NOT own properties — Node never
|
|
91
|
+
// prints them — so they don't disqualify.
|
|
92
|
+
if (!info.builtinError) {
|
|
93
|
+
const inherited = new Set();
|
|
94
|
+
for (let c = info.base; c; c = c.base) {
|
|
95
|
+
if (c.builtinError || c.def.runtime)
|
|
96
|
+
for (const f of c.def.fields)
|
|
97
|
+
inherited.add(f.name);
|
|
98
|
+
}
|
|
99
|
+
if (info.def.fields.some((f) => !f.name.startsWith("#") && !inherited.has(f.name)))
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
92
102
|
return info.subclasses.every((s) => errorRenderable(s));
|
|
93
103
|
}
|
|
104
|
+
/** The accessors that change what Node reads for an error's header. The
|
|
105
|
+
* runtime renders the instance's own name and message slots. */
|
|
106
|
+
const ERROR_HEADER_ACCESSORS = [
|
|
107
|
+
"get:name",
|
|
108
|
+
"set:name",
|
|
109
|
+
"get:message",
|
|
110
|
+
"set:message",
|
|
111
|
+
"get:stack",
|
|
112
|
+
"set:stack",
|
|
113
|
+
];
|
|
114
|
+
/** Whether Node's header for an instance of `info`'s hierarchy can differ
|
|
115
|
+
* from the runtime's slots: a program class among its ancestors or
|
|
116
|
+
* descendants declares a `name`, `message` or `stack` accessor, or the
|
|
117
|
+
* program writes a prototype's `name` or `message`. */
|
|
118
|
+
function errorHeaderOverridden(lowerer, info) {
|
|
119
|
+
if (lowerer.prototypeMethodAccesses.has("name") || lowerer.prototypeMethodAccesses.has("message"))
|
|
120
|
+
return true;
|
|
121
|
+
const declares = (c) => !c.builtinError && !c.def.runtime && ERROR_HEADER_ACCESSORS.some((m) => c.methods.has(m));
|
|
122
|
+
for (let c = info.base; c; c = c.base)
|
|
123
|
+
if (declares(c))
|
|
124
|
+
return true;
|
|
125
|
+
const below = (c) => declares(c) || c.subclasses.some(below);
|
|
126
|
+
return below(info);
|
|
127
|
+
}
|
|
128
|
+
/** Error keys Node's error inspector folds into the base or hides. */
|
|
129
|
+
const ERROR_SPECIAL_KEYS = new Set(["name", "message", "stack", "cause", "errors"]);
|
|
130
|
+
/** The declared own (enumerable) fields of a user error class, in layout
|
|
131
|
+
* order (the base chain first). */
|
|
132
|
+
function ownErrorFields(info) {
|
|
133
|
+
// The builtin bases' layout fields (name, message) are runtime slots the
|
|
134
|
+
// error base already renders, not own enumerable properties.
|
|
135
|
+
const builtin = new Set();
|
|
136
|
+
for (let c = info.base; c; c = c.base) {
|
|
137
|
+
if (c.builtinError || c.def.runtime)
|
|
138
|
+
for (const f of c.def.fields)
|
|
139
|
+
builtin.add(f.name);
|
|
140
|
+
}
|
|
141
|
+
return info.def.fields.filter((f) => isClassOwnEnumerableFieldName(f.name) && !builtin.has(f.name));
|
|
142
|
+
}
|
|
143
|
+
/** `info` and its descendants that declare fields, most-derived first (a
|
|
144
|
+
* runtime instance tests against its own class before an ancestor's). */
|
|
145
|
+
function fieldedErrorClasses(info) {
|
|
146
|
+
const out = [];
|
|
147
|
+
const visit = (c) => {
|
|
148
|
+
for (const s of c.subclasses)
|
|
149
|
+
visit(s);
|
|
150
|
+
if (!c.builtinError && !c.def.runtime && ownErrorFields(c).length > 0)
|
|
151
|
+
out.push(c);
|
|
152
|
+
};
|
|
153
|
+
visit(info);
|
|
154
|
+
return out;
|
|
155
|
+
}
|
|
156
|
+
/** Why a fielded error class's own properties have no static rendering,
|
|
157
|
+
* or null when every field renders. `visiting` and `out` are the caller's
|
|
158
|
+
* inspectSupport walk: a field typed as the class itself (`next?: Chain`)
|
|
159
|
+
* is a recursive shape, not a new walk. */
|
|
160
|
+
function fieldedErrorReason(lowerer, info, visiting = new Set(), out = { recursive: false }) {
|
|
161
|
+
const key = `error:${info.def.name}`;
|
|
162
|
+
if (visiting.has(key)) {
|
|
163
|
+
out.recursive = true;
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
visiting.add(key);
|
|
167
|
+
try {
|
|
168
|
+
for (let c = info; c && !c.builtinError && !c.def.runtime; c = c.base) {
|
|
169
|
+
// Node prints the own properties in creation order, which puts a
|
|
170
|
+
// declared `cause` among the fields; the cause renders after them.
|
|
171
|
+
if (c.fieldOrder.some((f) => f.errorCause))
|
|
172
|
+
return "its field 'cause' is one Node's error inspector treats specially";
|
|
173
|
+
// A JavaScript class's fields exist once its constructor creates them,
|
|
174
|
+
// which can be conditional; the layout reads every field.
|
|
175
|
+
if (c.decl && isJsSourceFile(c.decl.getSourceFile()) && ownErrorFields(c).length > 0)
|
|
176
|
+
return "its fields are JavaScript properties, which its constructor may not create";
|
|
177
|
+
}
|
|
178
|
+
for (const f of ownErrorFields(info)) {
|
|
179
|
+
if (ERROR_SPECIAL_KEYS.has(f.name))
|
|
180
|
+
return `its field '${f.name}' is one Node's error inspector treats specially`;
|
|
181
|
+
const why = inspectSupport(lowerer, f.type, visiting, out);
|
|
182
|
+
if (why !== null)
|
|
183
|
+
return `its field '${f.name}': ${why}`;
|
|
184
|
+
}
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
187
|
+
finally {
|
|
188
|
+
visiting.delete(key);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/** True when an instance of `c` can contain itself: its fields reach `c`
|
|
192
|
+
* or one of its bases, whose slots can hold a `c` (`next: Chain` in a
|
|
193
|
+
* subclass of Chain, a field typed as Error). */
|
|
194
|
+
function errorInstanceReachesItself(lowerer, c) {
|
|
195
|
+
const holders = new Set();
|
|
196
|
+
for (let a = c; a; a = a.base)
|
|
197
|
+
holders.add(a.def.name);
|
|
198
|
+
const seen = new Set();
|
|
199
|
+
const walk = (u) => {
|
|
200
|
+
for (const x of typeConstituents(lowerer, u)) {
|
|
201
|
+
if (x.kind === "object" && holders.has(x.className))
|
|
202
|
+
return true;
|
|
203
|
+
const k = typeKey(x);
|
|
204
|
+
if (!seen.has(k)) {
|
|
205
|
+
seen.add(k);
|
|
206
|
+
if (walk(x))
|
|
207
|
+
return true;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return false;
|
|
211
|
+
};
|
|
212
|
+
return walk({ kind: "object", className: c.def.name });
|
|
213
|
+
}
|
|
214
|
+
/** An error value whose runtime class may be a program-declared subclass,
|
|
215
|
+
* which may declare fields (`class Bailable extends Error { bail = false }`)
|
|
216
|
+
* or carry a `cause`: Node prints the error base (`[Bailable [Error]: m]`,
|
|
217
|
+
* the stackless form compiled errors use) followed by the own properties,
|
|
218
|
+
* `[Bailable [Error]: m] { bail: true }`, with the usual single-line/
|
|
219
|
+
* multi-line choice counting the base. Each program class (most-derived
|
|
220
|
+
* first) is an instanceof arm; other values keep the runtime's error
|
|
221
|
+
* rendering. Beyond the depth budget an instance with own properties
|
|
222
|
+
* prints `[Name]`, as Node does for any object with keys; one without
|
|
223
|
+
* prints its header. */
|
|
224
|
+
function errorInspectHelper(lowerer, t, info, loc) {
|
|
225
|
+
const key = `insp.userError:${typeKey(t)}`;
|
|
226
|
+
const existing = lowerer.inspectHelpers.get(key);
|
|
227
|
+
if (existing)
|
|
228
|
+
return existing;
|
|
229
|
+
const name = `%util.insp.${lowerer.inspectHelpers.size}`;
|
|
230
|
+
lowerer.inspectHelpers.set(key, name);
|
|
231
|
+
const v = () => varRef("v.0", t, loc);
|
|
232
|
+
const r = () => varRef("r.0", F64, loc);
|
|
233
|
+
const d = () => varRef("d.0", F64, loc);
|
|
234
|
+
const rPlus1 = () => ({
|
|
235
|
+
kind: "bin",
|
|
236
|
+
op: "+",
|
|
237
|
+
left: r(),
|
|
238
|
+
right: numLit(1, loc),
|
|
239
|
+
type: F64,
|
|
240
|
+
loc,
|
|
241
|
+
});
|
|
242
|
+
const base = () => ({
|
|
243
|
+
kind: "libCall",
|
|
244
|
+
fn: "insp.error",
|
|
245
|
+
args: [v(), r(), d()],
|
|
246
|
+
type: STRING,
|
|
247
|
+
loc,
|
|
248
|
+
});
|
|
249
|
+
const error = () => lowerer.upcastTo(v(), "%Error");
|
|
250
|
+
const hasCause = () => ({
|
|
251
|
+
kind: "libCall",
|
|
252
|
+
fn: "insp.errorHasCause",
|
|
253
|
+
args: [error()],
|
|
254
|
+
type: BOOL,
|
|
255
|
+
loc,
|
|
256
|
+
});
|
|
257
|
+
const entry = (text) => ({
|
|
258
|
+
kind: "exprStmt",
|
|
259
|
+
expr: {
|
|
260
|
+
kind: "libCall",
|
|
261
|
+
fn: "insp.entry",
|
|
262
|
+
args: [text, boolLit(false, loc)],
|
|
263
|
+
type: VOID,
|
|
264
|
+
loc,
|
|
265
|
+
},
|
|
266
|
+
loc,
|
|
267
|
+
});
|
|
268
|
+
/** The own properties of an instance of `c`: its fields, then its
|
|
269
|
+
* `cause` (an assignment in the constructor or later, or the
|
|
270
|
+
* constructor's options, which Node lists last as `[cause]`). */
|
|
271
|
+
const propertiesArm = (c, display, fields) => {
|
|
272
|
+
const cls = { kind: "object", className: c.def.name };
|
|
273
|
+
const instance = c.def.name === t.className ? v() : { kind: "downcast", value: v(), type: cls, loc };
|
|
274
|
+
// A class whose fields can hold the instance itself (`next: Chain`)
|
|
275
|
+
// runs Node's circular machinery, as other cycle-capable objects do:
|
|
276
|
+
// an instance already on the traversal stack renders [Circular *N],
|
|
277
|
+
// before the depth answer, and the frame's text gets the <ref *N>
|
|
278
|
+
// prefix when the walk found it circular.
|
|
279
|
+
const onCycle = errorInstanceReachesItself(lowerer, c);
|
|
280
|
+
const circular = () => varRef("cc.0", F64, loc);
|
|
281
|
+
const arm = [
|
|
282
|
+
...(onCycle
|
|
283
|
+
? [
|
|
284
|
+
{
|
|
285
|
+
kind: "varDecl",
|
|
286
|
+
localId: "cc.0",
|
|
287
|
+
init: { kind: "libCall", fn: "insp.circCheck", args: [v()], type: F64, loc },
|
|
288
|
+
loc,
|
|
289
|
+
},
|
|
290
|
+
{
|
|
291
|
+
kind: "if",
|
|
292
|
+
cond: {
|
|
293
|
+
kind: "bin",
|
|
294
|
+
op: ">",
|
|
295
|
+
left: circular(),
|
|
296
|
+
right: numLit(0, loc),
|
|
297
|
+
type: BOOL,
|
|
298
|
+
loc,
|
|
299
|
+
},
|
|
300
|
+
then: [
|
|
301
|
+
{
|
|
302
|
+
kind: "return",
|
|
303
|
+
value: {
|
|
304
|
+
kind: "libCall",
|
|
305
|
+
fn: "insp.circular",
|
|
306
|
+
args: [circular()],
|
|
307
|
+
type: STRING,
|
|
308
|
+
loc,
|
|
309
|
+
},
|
|
310
|
+
loc,
|
|
311
|
+
},
|
|
312
|
+
],
|
|
313
|
+
else_: null,
|
|
314
|
+
loc,
|
|
315
|
+
},
|
|
316
|
+
]
|
|
317
|
+
: []),
|
|
318
|
+
{
|
|
319
|
+
kind: "if",
|
|
320
|
+
cond: { kind: "bin", op: ">", left: r(), right: d(), type: BOOL, loc },
|
|
321
|
+
then: [{ kind: "return", value: strLit(`[${display}]`, loc), loc }],
|
|
322
|
+
else_: null,
|
|
323
|
+
loc,
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
kind: "varDecl",
|
|
327
|
+
localId: "base.0",
|
|
328
|
+
init: improvedErrorBase(lowerer, v(), base(), display, loc),
|
|
329
|
+
loc,
|
|
330
|
+
},
|
|
331
|
+
{
|
|
332
|
+
kind: "exprStmt",
|
|
333
|
+
expr: { kind: "libCall", fn: "insp.begin", args: [rPlus1()], type: VOID, loc },
|
|
334
|
+
loc,
|
|
335
|
+
},
|
|
336
|
+
...(onCycle
|
|
337
|
+
? [
|
|
338
|
+
{
|
|
339
|
+
kind: "exprStmt",
|
|
340
|
+
expr: { kind: "libCall", fn: "insp.seenPush", args: [v()], type: VOID, loc },
|
|
341
|
+
loc,
|
|
342
|
+
},
|
|
343
|
+
]
|
|
344
|
+
: []),
|
|
345
|
+
];
|
|
346
|
+
for (const f of fields) {
|
|
347
|
+
const read = {
|
|
348
|
+
kind: "fieldGet",
|
|
349
|
+
obj: instance,
|
|
350
|
+
className: c.def.name,
|
|
351
|
+
field: f.name,
|
|
352
|
+
type: f.type,
|
|
353
|
+
loc,
|
|
354
|
+
};
|
|
355
|
+
arm.push(entry(concatAll([
|
|
356
|
+
strLit(`${inspectKey(f.name)}: `, loc),
|
|
357
|
+
inspectExpr(lowerer, f.type, read, rPlus1(), d(), loc),
|
|
358
|
+
], loc)));
|
|
359
|
+
}
|
|
360
|
+
arm.push({
|
|
361
|
+
kind: "if",
|
|
362
|
+
cond: hasCause(),
|
|
363
|
+
then: [
|
|
364
|
+
entry({
|
|
365
|
+
kind: "libCall",
|
|
366
|
+
fn: "insp.errorCause",
|
|
367
|
+
args: [error(), rPlus1(), d()],
|
|
368
|
+
type: STRING,
|
|
369
|
+
loc,
|
|
370
|
+
}),
|
|
371
|
+
],
|
|
372
|
+
else_: null,
|
|
373
|
+
loc,
|
|
374
|
+
});
|
|
375
|
+
const ended = {
|
|
376
|
+
kind: "libCall",
|
|
377
|
+
fn: "insp.end",
|
|
378
|
+
args: [
|
|
379
|
+
varRef("base.0", STRING, loc),
|
|
380
|
+
strLit("{", loc),
|
|
381
|
+
strLit("}", loc),
|
|
382
|
+
rPlus1(),
|
|
383
|
+
boolLit(false, loc),
|
|
384
|
+
boolLit(false, loc),
|
|
385
|
+
],
|
|
386
|
+
type: STRING,
|
|
387
|
+
loc,
|
|
388
|
+
};
|
|
389
|
+
arm.push({
|
|
390
|
+
kind: "return",
|
|
391
|
+
value: onCycle
|
|
392
|
+
? { kind: "libCall", fn: "insp.refWrap", args: [v(), ended], type: STRING, loc }
|
|
393
|
+
: ended,
|
|
394
|
+
loc,
|
|
395
|
+
});
|
|
396
|
+
return arm;
|
|
397
|
+
};
|
|
398
|
+
const body = [];
|
|
399
|
+
for (const c of userErrorClasses(info)) {
|
|
400
|
+
const display = c.def.jsName ?? c.decl?.name?.text ?? c.def.name.replace(/^%/, "");
|
|
401
|
+
const fields = ownErrorFields(c);
|
|
402
|
+
const why = fields.length > 0 ? fieldedErrorReason(lowerer, c) : null;
|
|
403
|
+
let arm;
|
|
404
|
+
if (why !== null) {
|
|
405
|
+
// An instance of a subclass whose own properties have no rendering
|
|
406
|
+
// throws a named refusal instead of printing a partial object.
|
|
407
|
+
arm = [
|
|
408
|
+
{
|
|
409
|
+
kind: "return",
|
|
410
|
+
value: nodeThrowExpr(0, "SC2020", `inspecting a '${display}' error (${why}) is not supported yet`, STRING, loc),
|
|
411
|
+
loc,
|
|
412
|
+
},
|
|
413
|
+
];
|
|
414
|
+
}
|
|
415
|
+
else if (fields.length === 0) {
|
|
416
|
+
// A field-less program class: without a `cause` it has no own
|
|
417
|
+
// properties, and Node prints the header alone at any depth.
|
|
418
|
+
arm = [
|
|
419
|
+
{
|
|
420
|
+
kind: "if",
|
|
421
|
+
cond: { kind: "unary", op: "!", operand: hasCause(), type: BOOL, loc },
|
|
422
|
+
then: [
|
|
423
|
+
{ kind: "return", value: improvedErrorBase(lowerer, v(), base(), display, loc), loc },
|
|
424
|
+
],
|
|
425
|
+
else_: null,
|
|
426
|
+
loc,
|
|
427
|
+
},
|
|
428
|
+
...propertiesArm(c, display, fields),
|
|
429
|
+
];
|
|
430
|
+
}
|
|
431
|
+
else {
|
|
432
|
+
arm = propertiesArm(c, display, fields);
|
|
433
|
+
}
|
|
434
|
+
if (c.def.name === t.className) {
|
|
435
|
+
body.push({ kind: "block", body: arm, loc });
|
|
436
|
+
break;
|
|
437
|
+
}
|
|
438
|
+
body.push({
|
|
439
|
+
kind: "if",
|
|
440
|
+
cond: { kind: "instanceOf", value: v(), className: c.def.name, type: BOOL, loc },
|
|
441
|
+
then: arm,
|
|
442
|
+
else_: null,
|
|
443
|
+
loc,
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
if (body.at(-1)?.kind !== "block")
|
|
447
|
+
body.push({ kind: "return", value: base(), loc });
|
|
448
|
+
const fn = {
|
|
449
|
+
name,
|
|
450
|
+
params: [
|
|
451
|
+
{ localId: "v.0", name: "v", type: t },
|
|
452
|
+
{ localId: "r.0", name: "r", type: F64 },
|
|
453
|
+
{ localId: "d.0", name: "d", type: F64 },
|
|
454
|
+
],
|
|
455
|
+
returnType: STRING,
|
|
456
|
+
locals: [
|
|
457
|
+
{ id: "v.0", name: "v", type: t, mutable: false },
|
|
458
|
+
{ id: "r.0", name: "r", type: F64, mutable: false },
|
|
459
|
+
{ id: "d.0", name: "d", type: F64, mutable: false },
|
|
460
|
+
{ id: "base.0", name: "base", type: STRING, mutable: false },
|
|
461
|
+
{ id: "cc.0", name: "cc", type: F64, mutable: false },
|
|
462
|
+
{ id: "name.0", name: "name", type: STRING, mutable: true },
|
|
463
|
+
{ id: "raw.0", name: "raw", type: STRING, mutable: true },
|
|
464
|
+
],
|
|
465
|
+
body,
|
|
466
|
+
loc,
|
|
467
|
+
};
|
|
468
|
+
// Dynamic stores (a JavaScript class's `this.x = ...` outside its
|
|
469
|
+
// declared fields, or a write through an untyped reference) add a
|
|
470
|
+
// property bag to a class after this helper was built. The rendering
|
|
471
|
+
// reads only a `cause` from it, so an instance whose bag holds another
|
|
472
|
+
// property throws a named refusal instead of printing a partial object.
|
|
473
|
+
lowerer.shapeOrderHelperFinalizers.push(() => {
|
|
474
|
+
const bagged = [info, ...userErrorClasses(info)].filter((c) => !c.builtinError &&
|
|
475
|
+
!c.def.runtime &&
|
|
476
|
+
c.def.fields.some((f) => f.name === DYN_CLASS_PROPERTIES));
|
|
477
|
+
if (bagged.length === 0)
|
|
478
|
+
return;
|
|
479
|
+
fn.body = [
|
|
480
|
+
...bagged.map((c) => ({
|
|
481
|
+
kind: "if",
|
|
482
|
+
cond: {
|
|
483
|
+
kind: "logical",
|
|
484
|
+
op: "&&",
|
|
485
|
+
left: { kind: "instanceOf", value: v(), className: c.def.name, type: BOOL, loc },
|
|
486
|
+
right: {
|
|
487
|
+
kind: "libCall",
|
|
488
|
+
fn: "insp.errorBagHasProperties",
|
|
489
|
+
args: [
|
|
490
|
+
{
|
|
491
|
+
kind: "fieldGet",
|
|
492
|
+
obj: c.def.name === t.className
|
|
493
|
+
? v()
|
|
494
|
+
: {
|
|
495
|
+
kind: "downcast",
|
|
496
|
+
value: v(),
|
|
497
|
+
type: { kind: "object", className: c.def.name },
|
|
498
|
+
loc,
|
|
499
|
+
},
|
|
500
|
+
className: c.def.name,
|
|
501
|
+
field: DYN_CLASS_PROPERTIES,
|
|
502
|
+
type: DYN,
|
|
503
|
+
loc,
|
|
504
|
+
},
|
|
505
|
+
],
|
|
506
|
+
type: BOOL,
|
|
507
|
+
loc,
|
|
508
|
+
},
|
|
509
|
+
type: BOOL,
|
|
510
|
+
loc,
|
|
511
|
+
},
|
|
512
|
+
then: [
|
|
513
|
+
{
|
|
514
|
+
kind: "return",
|
|
515
|
+
value: nodeThrowExpr(0, "SC2020", `inspecting a '${c.def.jsName ?? c.def.name.replace(/^%/, "")}' error with properties created at run time is not supported yet`, STRING, loc),
|
|
516
|
+
loc,
|
|
517
|
+
},
|
|
518
|
+
],
|
|
519
|
+
else_: null,
|
|
520
|
+
loc,
|
|
521
|
+
})),
|
|
522
|
+
...body,
|
|
523
|
+
];
|
|
524
|
+
});
|
|
525
|
+
lowerer.liftedFns.push(fn);
|
|
526
|
+
return name;
|
|
527
|
+
}
|
|
528
|
+
/** The program-declared classes among `info` and its descendants, most
|
|
529
|
+
* derived first (an instance tests against its own class before an
|
|
530
|
+
* ancestor's). Runtime-provided error classes are not among them. */
|
|
531
|
+
function userErrorClasses(info) {
|
|
532
|
+
const out = [];
|
|
533
|
+
const visit = (c) => {
|
|
534
|
+
for (const s of c.subclasses)
|
|
535
|
+
visit(s);
|
|
536
|
+
if (!c.builtinError && !c.def.runtime)
|
|
537
|
+
out.push(c);
|
|
538
|
+
};
|
|
539
|
+
visit(info);
|
|
540
|
+
return out;
|
|
541
|
+
}
|
|
542
|
+
/** Node's improveStack over the stackless base (`[Error: m]`): when the
|
|
543
|
+
* instance's constructor name differs from its `name` and the name ends in
|
|
544
|
+
* "Error", the header names both — `[Bailable [Error]: m]`, or
|
|
545
|
+
* `[FetchError: m]` when the constructor name already contains it. */
|
|
546
|
+
function improvedErrorBase(lowerer, value, base, display, loc) {
|
|
547
|
+
const str = (method, receiver, args, type) => ({
|
|
548
|
+
kind: "strIntrinsic",
|
|
549
|
+
method,
|
|
550
|
+
receiver,
|
|
551
|
+
args,
|
|
552
|
+
type,
|
|
553
|
+
loc,
|
|
554
|
+
});
|
|
555
|
+
const and = (left, right) => ({
|
|
556
|
+
kind: "logical",
|
|
557
|
+
op: "&&",
|
|
558
|
+
left,
|
|
559
|
+
right,
|
|
560
|
+
type: BOOL,
|
|
561
|
+
loc,
|
|
562
|
+
});
|
|
563
|
+
const eq = (left, right, negated = false) => ({
|
|
564
|
+
kind: "strEq",
|
|
565
|
+
negated,
|
|
566
|
+
left,
|
|
567
|
+
right,
|
|
568
|
+
type: BOOL,
|
|
569
|
+
loc,
|
|
570
|
+
});
|
|
571
|
+
const nameRef = () => varRef("name.0", STRING, loc);
|
|
572
|
+
const baseRef = () => varRef("raw.0", STRING, loc);
|
|
573
|
+
const after = () => ({
|
|
574
|
+
kind: "bin",
|
|
575
|
+
op: "+",
|
|
576
|
+
left: str("length", nameRef(), [], F64),
|
|
577
|
+
right: numLit(1, loc),
|
|
578
|
+
type: F64,
|
|
579
|
+
loc,
|
|
580
|
+
});
|
|
581
|
+
const next = () => str("charAt", baseRef(), [after()], STRING);
|
|
582
|
+
const cond = and(and(eq(nameRef(), strLit(display, loc), true), str("endsWith", nameRef(), [strLit("Error", loc)], BOOL)), and(str("startsWith", baseRef(), [concatAll([strLit("[", loc), nameRef()], loc)], BOOL), {
|
|
583
|
+
kind: "logical",
|
|
584
|
+
op: "||",
|
|
585
|
+
left: eq(next(), strLit(":", loc)),
|
|
586
|
+
right: eq(next(), strLit("]", loc)),
|
|
587
|
+
type: BOOL,
|
|
588
|
+
loc,
|
|
589
|
+
}));
|
|
590
|
+
const rest = () => str("slice", baseRef(), [after()], STRING);
|
|
591
|
+
const improved = {
|
|
592
|
+
kind: "ternary",
|
|
593
|
+
cond: str("includes", strLit(display, loc), [nameRef()], BOOL),
|
|
594
|
+
then: concatAll([strLit(`[${display}`, loc), rest()], loc),
|
|
595
|
+
else_: concatAll([strLit(`[${display} [`, loc), nameRef(), strLit("]", loc), rest()], loc),
|
|
596
|
+
type: STRING,
|
|
597
|
+
loc,
|
|
598
|
+
};
|
|
599
|
+
return {
|
|
600
|
+
kind: "seqExpr",
|
|
601
|
+
stmts: [
|
|
602
|
+
{
|
|
603
|
+
kind: "varDecl",
|
|
604
|
+
localId: "name.0",
|
|
605
|
+
init: {
|
|
606
|
+
kind: "fieldGet",
|
|
607
|
+
obj: lowerer.upcastTo(value, "%Error"),
|
|
608
|
+
className: "%Error",
|
|
609
|
+
field: "name",
|
|
610
|
+
type: STRING,
|
|
611
|
+
loc,
|
|
612
|
+
},
|
|
613
|
+
loc,
|
|
614
|
+
},
|
|
615
|
+
{ kind: "varDecl", localId: "raw.0", init: base, loc },
|
|
616
|
+
],
|
|
617
|
+
result: { kind: "ternary", cond, then: improved, else_: baseRef(), type: STRING, loc },
|
|
618
|
+
type: STRING,
|
|
619
|
+
loc,
|
|
620
|
+
};
|
|
621
|
+
}
|
|
94
622
|
function isErrorClass(lowerer, className) {
|
|
95
623
|
if (RUNTIME_ERROR_CLASSES.has(className))
|
|
96
624
|
return true;
|
|
@@ -109,12 +637,17 @@ function inspectSupport(lowerer, t, visiting, out) {
|
|
|
109
637
|
case "regex":
|
|
110
638
|
case "symbol":
|
|
111
639
|
case "bigint":
|
|
640
|
+
case "date":
|
|
112
641
|
case "dyn":
|
|
113
642
|
return null;
|
|
114
643
|
case "array":
|
|
115
644
|
return inspectSupport(lowerer, t.elem, visiting, out);
|
|
116
645
|
case "bytes":
|
|
117
|
-
|
|
646
|
+
// A Uint8Array and a Buffer share the u8 representation and print
|
|
647
|
+
// differently; the other element kinds are never Buffers.
|
|
648
|
+
return t.elem === "u8"
|
|
649
|
+
? "Uint8Array and Buffer values inside composites have no inspect lowering yet (Buffer's <Buffer ..> form vs Uint8Array's is not recorded in the static type here)"
|
|
650
|
+
: null;
|
|
118
651
|
case "record": {
|
|
119
652
|
if (visiting.has(t.shapeId)) {
|
|
120
653
|
out.recursive = true;
|
|
@@ -194,13 +727,24 @@ function inspectSupport(lowerer, t, visiting, out) {
|
|
|
194
727
|
if (eventTargetRootOf(info) !== null)
|
|
195
728
|
return null;
|
|
196
729
|
if (isErrorClass(lowerer, t.className)) {
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
730
|
+
if (userErrorClasses(info).length > 0 && errorHeaderOverridden(lowerer, info))
|
|
731
|
+
return "error subclasses whose name, message or stack is an accessor or a prototype property have no inspect lowering yet";
|
|
732
|
+
if (errorRenderable(info))
|
|
733
|
+
return null;
|
|
734
|
+
// Subclasses with declared fields render the error base followed
|
|
735
|
+
// by their own properties. The static class's own fields must
|
|
736
|
+
// render; a subclass whose fields cannot is a runtime refusal on
|
|
737
|
+
// its own instances only (see errorInspectHelper).
|
|
738
|
+
const own = fieldedErrorClasses(info).find((c) => c === info);
|
|
739
|
+
const ownWhy = own ? fieldedErrorReason(lowerer, own, visiting, out) : null;
|
|
740
|
+
if (ownWhy !== null)
|
|
741
|
+
return `'${t.className.replace(/^%(m\d+\.)?/, "")}' error values (${ownWhy})`;
|
|
742
|
+
return null;
|
|
200
743
|
}
|
|
201
|
-
// A class with subclasses renders through its
|
|
202
|
-
// which names the instance's own class and holds
|
|
203
|
-
|
|
744
|
+
// A class with subclasses, or a JavaScript class, renders through its
|
|
745
|
+
// checked-dynamic view, which names the instance's own class and holds
|
|
746
|
+
// its own properties.
|
|
747
|
+
if (classInspectsThroughView(lowerer, info)) {
|
|
204
748
|
if (!isDynTypedRefType(t) || visiting.has(t.className))
|
|
205
749
|
return null;
|
|
206
750
|
visiting.add(t.className);
|
|
@@ -236,6 +780,10 @@ function inspectSupport(lowerer, t, visiting, out) {
|
|
|
236
780
|
visiting.delete(t.className);
|
|
237
781
|
return null;
|
|
238
782
|
}
|
|
783
|
+
// Generator objects print through their checked capsule: Node's
|
|
784
|
+
// `Object [Generator] {}`, or the tag of the iterator they implement.
|
|
785
|
+
case "generator":
|
|
786
|
+
return null;
|
|
239
787
|
default:
|
|
240
788
|
return `'${lowerer.fmt(t)}' values have no inspect lowering`;
|
|
241
789
|
}
|
|
@@ -300,10 +848,31 @@ export function inspectExpr(lowerer, t, value, recurse, depth, loc) {
|
|
|
300
848
|
return { kind: "libCall", fn: "sym.toString", args: [value], type: STRING, loc };
|
|
301
849
|
case "bigint":
|
|
302
850
|
return { kind: "libCall", fn: "bigint.inspect", args: [value], type: STRING, loc };
|
|
851
|
+
case "date":
|
|
852
|
+
// Node prints a Date's toISOString() at every depth, and its
|
|
853
|
+
// toString() ("Invalid Date") when the time value is NaN.
|
|
854
|
+
return { kind: "libCall", fn: "insp.date", args: [value], type: STRING, loc };
|
|
303
855
|
case "bytes":
|
|
856
|
+
if (t.elem !== "u8") {
|
|
857
|
+
return {
|
|
858
|
+
kind: "libCall",
|
|
859
|
+
fn: "insp.typedArray",
|
|
860
|
+
args: [value, recurse, depth],
|
|
861
|
+
type: STRING,
|
|
862
|
+
loc,
|
|
863
|
+
};
|
|
864
|
+
}
|
|
304
865
|
return { kind: "libCall", fn: "insp.buffer", args: [value], type: STRING, loc };
|
|
305
866
|
case "dyn":
|
|
306
867
|
return { kind: "libCall", fn: "insp.dyn", args: [value, recurse, depth], type: STRING, loc };
|
|
868
|
+
case "generator":
|
|
869
|
+
return {
|
|
870
|
+
kind: "libCall",
|
|
871
|
+
fn: "insp.dyn",
|
|
872
|
+
args: [lowerer.coerceToExpected(value, DYN), recurse, depth],
|
|
873
|
+
type: STRING,
|
|
874
|
+
loc,
|
|
875
|
+
};
|
|
307
876
|
case "object":
|
|
308
877
|
if (eventTargetRootOf(lowerer.classes.get(t.className)) !== null) {
|
|
309
878
|
return {
|
|
@@ -315,6 +884,16 @@ export function inspectExpr(lowerer, t, value, recurse, depth, loc) {
|
|
|
315
884
|
};
|
|
316
885
|
}
|
|
317
886
|
if (isErrorClass(lowerer, t.className)) {
|
|
887
|
+
const info = lowerer.classes.get(t.className);
|
|
888
|
+
if (info && userErrorClasses(info).length > 0) {
|
|
889
|
+
return {
|
|
890
|
+
kind: "call",
|
|
891
|
+
callee: errorInspectHelper(lowerer, t, info, loc),
|
|
892
|
+
args: [value, recurse, depth],
|
|
893
|
+
type: STRING,
|
|
894
|
+
loc,
|
|
895
|
+
};
|
|
896
|
+
}
|
|
318
897
|
return {
|
|
319
898
|
kind: "libCall",
|
|
320
899
|
fn: "insp.error",
|
|
@@ -323,7 +902,7 @@ export function inspectExpr(lowerer, t, value, recurse, depth, loc) {
|
|
|
323
902
|
loc,
|
|
324
903
|
};
|
|
325
904
|
}
|
|
326
|
-
if (lowerer.classes.get(t.className)
|
|
905
|
+
if (classInspectsThroughView(lowerer, lowerer.classes.get(t.className))) {
|
|
327
906
|
return {
|
|
328
907
|
kind: "libCall",
|
|
329
908
|
fn: "insp.dyn",
|
|
@@ -420,12 +999,46 @@ function typeConstituents(lowerer, u) {
|
|
|
420
999
|
return [u.key, u.value];
|
|
421
1000
|
case "union":
|
|
422
1001
|
return lowerer.unions.get(u.unionId)?.arms.slice() ?? [];
|
|
423
|
-
case "object":
|
|
424
|
-
|
|
1002
|
+
case "object": {
|
|
1003
|
+
const info = lowerer.classes.get(u.className);
|
|
1004
|
+
if (!info)
|
|
1005
|
+
return [];
|
|
1006
|
+
const types = info.def.fields.map((f) => f.type);
|
|
1007
|
+
// An error value can be an instance of a program-declared subclass,
|
|
1008
|
+
// whose own fields its inspection renders (errorInspectHelper).
|
|
1009
|
+
if (isErrorClass(lowerer, u.className))
|
|
1010
|
+
for (const c of userErrorClasses(info))
|
|
1011
|
+
for (const f of ownErrorFields(c))
|
|
1012
|
+
types.push(f.type);
|
|
1013
|
+
return types;
|
|
1014
|
+
}
|
|
425
1015
|
default:
|
|
426
1016
|
return [];
|
|
427
1017
|
}
|
|
428
1018
|
}
|
|
1019
|
+
/** Whether instances of a class render through its checked-dynamic view
|
|
1020
|
+
* instead of a helper over the declared layout. The view names the
|
|
1021
|
+
* instance's own class, which a base-typed value may not know statically,
|
|
1022
|
+
* and lists own properties in creation order. A JavaScript class needs that
|
|
1023
|
+
* order: its fields can be created conditionally, outside the constructor,
|
|
1024
|
+
* or by writes to the instance after construction. */
|
|
1025
|
+
function classInspectsThroughView(lowerer, info) {
|
|
1026
|
+
if (info === undefined)
|
|
1027
|
+
return false;
|
|
1028
|
+
if (info.subclasses.length > 0)
|
|
1029
|
+
return true;
|
|
1030
|
+
return (info.decl != null &&
|
|
1031
|
+
isJsSourceFile(ts.getSourceFileOfNode(info.decl)) &&
|
|
1032
|
+
classDynViewSupported(info.def.fields, (id) => lowerer.shapes.get(id), (id) => lowerer.unions.get(id)));
|
|
1033
|
+
}
|
|
1034
|
+
/** Whether a class holds properties added outside its declared layout, or
|
|
1035
|
+
* fields Object.defineProperty can make non-enumerable, which only its
|
|
1036
|
+
* checked-dynamic view lists as Node does. Decided after lowering, when the
|
|
1037
|
+
* class has its final fields. */
|
|
1038
|
+
function classInspectsAddedProperties(lowerer, info) {
|
|
1039
|
+
return (info.def.fields.some((field) => field.name === DYN_CLASS_PROPERTIES || field.name.startsWith(CLASS_FIELD_ATTRIBUTES_PREFIX)) &&
|
|
1040
|
+
classDynViewSupported(info.def.fields, (id) => lowerer.shapes.get(id), (id) => lowerer.unions.get(id)));
|
|
1041
|
+
}
|
|
429
1042
|
/* ── the interned per-type helper ────────────────────────────────────── */
|
|
430
1043
|
/** `%util.insp.<n>(v, r, d): string` — formatValue over the static type:
|
|
431
1044
|
* empty composites answer their literals (before the depth check, Node's
|
|
@@ -456,8 +1069,8 @@ function inspectHelper(lowerer, t, loc) {
|
|
|
456
1069
|
// CYCLE-CAPABLE composites (typeReachesItself) run Node's circular
|
|
457
1070
|
// machinery: circCheck first (a value already on the traversal stack
|
|
458
1071
|
// renders [Circular *N] — before the empty/depth answers, Node's
|
|
459
|
-
// order), seen-push after begin, and refWrap around end's result (
|
|
460
|
-
// <ref *N> prefix on values the walk found circular). Acyclic types
|
|
1072
|
+
// order), seen-push after begin, and refWrap around end's result (end
|
|
1073
|
+
// adds the <ref *N> prefix on values the walk found circular). Acyclic types
|
|
461
1074
|
// keep the zero-cost path.
|
|
462
1075
|
const onCycle = (t.kind === "record" || t.kind === "array" || t.kind === "map" || t.kind === "object") &&
|
|
463
1076
|
typeReachesItself(lowerer, t);
|
|
@@ -857,6 +1470,7 @@ function inspectHelper(lowerer, t, loc) {
|
|
|
857
1470
|
// Object.keys' declared order (SEMANTICS.md 36's stance). Retained
|
|
858
1471
|
// reachability can settle this shape after the helper is first
|
|
859
1472
|
// interned, so rebuild the field walk once metadata is final.
|
|
1473
|
+
lowerer.keyOrder.observe(t);
|
|
860
1474
|
rebuildShapeOrderBody = () => {
|
|
861
1475
|
const current = lowerer.shapes.get(t.shapeId) ?? shape;
|
|
862
1476
|
const order = current.declaredOrder ?? current.fields.map((f) => f.name);
|
|
@@ -1071,7 +1685,7 @@ function inspectHelper(lowerer, t, loc) {
|
|
|
1071
1685
|
// #private fields never render: they are not properties in any
|
|
1072
1686
|
// observable way — Node's inspect omits them entirely (verified),
|
|
1073
1687
|
// so a class whose only fields are private prints as `C {}`.
|
|
1074
|
-
const visible = info.def.fields.filter((f) =>
|
|
1688
|
+
const visible = info.def.fields.filter((f) => isClassOwnEnumerableFieldName(f.name));
|
|
1075
1689
|
if (visible.length === 0) {
|
|
1076
1690
|
body = [ret(strLit(display === "" ? "{}" : `${display} {}`, loc))];
|
|
1077
1691
|
break;
|
|
@@ -1159,6 +1773,9 @@ function inspectHelper(lowerer, t, loc) {
|
|
|
1159
1773
|
};
|
|
1160
1774
|
prependCycleGuard();
|
|
1161
1775
|
}
|
|
1776
|
+
// Typed as the IR function itself: the finalizer below replaces the
|
|
1777
|
+
// body of the very object liftedFns holds (natively, a differently typed
|
|
1778
|
+
// literal would be copied into the list).
|
|
1162
1779
|
const fn = {
|
|
1163
1780
|
name,
|
|
1164
1781
|
params: [
|
|
@@ -1171,6 +1788,25 @@ function inspectHelper(lowerer, t, loc) {
|
|
|
1171
1788
|
body,
|
|
1172
1789
|
loc,
|
|
1173
1790
|
};
|
|
1791
|
+
const inspected = t.kind === "object" ? lowerer.classes.get(t.className) : undefined;
|
|
1792
|
+
if (inspected !== undefined) {
|
|
1793
|
+
// Dynamic stores add a property bag to the class after this helper was
|
|
1794
|
+
// built. The checked-dynamic view lists the bag's properties after the
|
|
1795
|
+
// declared fields, so a class that has one renders through the view.
|
|
1796
|
+
lowerer.shapeOrderHelperFinalizers.push(() => {
|
|
1797
|
+
if (!classInspectsAddedProperties(lowerer, inspected))
|
|
1798
|
+
return;
|
|
1799
|
+
fn.body = [
|
|
1800
|
+
ret({
|
|
1801
|
+
kind: "libCall",
|
|
1802
|
+
fn: "insp.dyn",
|
|
1803
|
+
args: [{ kind: "dynFrom", value: v(), liveRef: true, type: DYN, loc }, r(), d()],
|
|
1804
|
+
type: STRING,
|
|
1805
|
+
loc,
|
|
1806
|
+
}),
|
|
1807
|
+
];
|
|
1808
|
+
});
|
|
1809
|
+
}
|
|
1174
1810
|
if (rebuildShapeOrderBody !== null) {
|
|
1175
1811
|
lowerer.shapeOrderHelperFinalizers.push(() => {
|
|
1176
1812
|
rebuildShapeOrderBody();
|
|
@@ -1298,15 +1934,20 @@ export function lowerConsoleInspectArg(lowerer, node, value, surface, loc) {
|
|
|
1298
1934
|
}
|
|
1299
1935
|
if (t.kind === "bytes") {
|
|
1300
1936
|
// One runtime representation serves Buffer AND Uint8Array; their
|
|
1301
|
-
// renderings differ, so the argument's checker type picks
|
|
1302
|
-
//
|
|
1937
|
+
// renderings differ, so the argument's checker type picks
|
|
1938
|
+
// (lowerInspectCall's stance).
|
|
1303
1939
|
const tname = lowerer.checker.typeToString(lowerer.checker.getBaseTypeOfLiteralType(lowerer.typeOf(node)));
|
|
1304
|
-
|
|
1305
|
-
tname
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1940
|
+
if (isDataViewTypeName(tname)) {
|
|
1941
|
+
lowerer.unsupported("SC1090", node, `${surface} of '${tname}' values (Buffer and the numeric typed arrays are the lowered byte renderings; DataView has none yet)`);
|
|
1942
|
+
}
|
|
1943
|
+
if (!isBufferTypeName(tname)) {
|
|
1944
|
+
return {
|
|
1945
|
+
kind: "libCall",
|
|
1946
|
+
fn: "insp.typedArray",
|
|
1947
|
+
args: [value, numLit(0, loc), numLit(2, loc)],
|
|
1948
|
+
type: STRING,
|
|
1949
|
+
loc,
|
|
1950
|
+
};
|
|
1310
1951
|
}
|
|
1311
1952
|
return inspectExpr(lowerer, t, value, numLit(0, loc), numLit(2, loc), loc);
|
|
1312
1953
|
}
|
|
@@ -1315,6 +1956,10 @@ export function lowerConsoleInspectArg(lowerer, node, value, surface, loc) {
|
|
|
1315
1956
|
// is not a value here, so the composition fences with the rewrite.
|
|
1316
1957
|
lowerer.unsupported("SC1090", node, `${surface} of a void call result (call it as its own statement, then ${surface}(undefined))`);
|
|
1317
1958
|
}
|
|
1959
|
+
// A read that always throws (an ambient name, a binding whose
|
|
1960
|
+
// initializer threw) never produces a value to render.
|
|
1961
|
+
if (value.kind === "libCall" && value.fn === "global.undefRead")
|
|
1962
|
+
return formatValueExpr(lowerer, DYN, { ...value, type: DYN }, 2, loc);
|
|
1318
1963
|
const walk = { recursive: false };
|
|
1319
1964
|
const reason = inspectSupport(lowerer, t, new Set(), walk);
|
|
1320
1965
|
if (reason !== null) {
|
|
@@ -1322,18 +1967,25 @@ export function lowerConsoleInspectArg(lowerer, node, value, surface, loc) {
|
|
|
1322
1967
|
}
|
|
1323
1968
|
return formatValueExpr(lowerer, t, value, 2, loc);
|
|
1324
1969
|
}
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1970
|
+
/** The checker's spelling of a Buffer, whose bytes print as <Buffer ..>. */
|
|
1971
|
+
function isBufferTypeName(tname) {
|
|
1972
|
+
return (tname === "Buffer" ||
|
|
1973
|
+
tname === "NonSharedBuffer" ||
|
|
1974
|
+
tname.startsWith("Buffer<") ||
|
|
1975
|
+
tname.startsWith("NonSharedBuffer<"));
|
|
1976
|
+
}
|
|
1977
|
+
function isDataViewTypeName(tname) {
|
|
1978
|
+
return tname === "DataView" || tname.startsWith("DataView<");
|
|
1979
|
+
}
|
|
1328
1980
|
function parseInspectOptions(lowerer, node, recursive, dir = false) {
|
|
1329
1981
|
const surface = dir ? "console.dir" : "util.inspect";
|
|
1982
|
+
const options = { depth: 2, breakLength: 80, compact: 3, sorted: false };
|
|
1330
1983
|
if (!node || (ts.isIdentifier(node) && node.text === "undefined"))
|
|
1331
|
-
return
|
|
1984
|
+
return options;
|
|
1332
1985
|
if (!ts.isObjectLiteralExpression(node)) {
|
|
1333
1986
|
lowerer.noLowering(`${surface} with a non-literal options argument`, node, "the options must be an object literal ({ depth, colors: false, ... }) so the knobs resolve at compile time");
|
|
1334
1987
|
}
|
|
1335
|
-
|
|
1336
|
-
for (const prop of node.properties) {
|
|
1988
|
+
for (const prop of node.properties.nodes) {
|
|
1337
1989
|
if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name)) {
|
|
1338
1990
|
lowerer.noLowering(`${surface} options in this form`, prop, "plain `key: literal` entries are the lowered options");
|
|
1339
1991
|
}
|
|
@@ -1356,14 +2008,14 @@ function parseInspectOptions(lowerer, node, recursive, dir = false) {
|
|
|
1356
2008
|
// machinery ([Circular *N]) cuts every cycle, so the walk is
|
|
1357
2009
|
// bounded by the (finite) object graph — exactly Node.
|
|
1358
2010
|
void recursive;
|
|
1359
|
-
depth = Infinity;
|
|
2011
|
+
options.depth = Infinity;
|
|
1360
2012
|
}
|
|
1361
2013
|
else if (!(ts.isIdentifier(value) && value.text === "undefined")) {
|
|
1362
2014
|
const n = numeric();
|
|
1363
2015
|
if (n === null) {
|
|
1364
2016
|
lowerer.noLowering(`${surface} with a non-literal depth option`, value, "depth must be a numeric literal (or null)");
|
|
1365
2017
|
}
|
|
1366
|
-
depth = n;
|
|
2018
|
+
options.depth = n;
|
|
1367
2019
|
}
|
|
1368
2020
|
}
|
|
1369
2021
|
else if (key === "colors") {
|
|
@@ -1372,14 +2024,27 @@ function parseInspectOptions(lowerer, node, recursive, dir = false) {
|
|
|
1372
2024
|
}
|
|
1373
2025
|
}
|
|
1374
2026
|
else if (key === "compact") {
|
|
1375
|
-
|
|
1376
|
-
|
|
2027
|
+
// Node tries the single-line form and groups arrays only for a
|
|
2028
|
+
// compact of at least 1; false and smaller numbers break every
|
|
2029
|
+
// composite onto its own lines. compact: true is the older layout.
|
|
2030
|
+
const n = value.kind === ts.SyntaxKind.FalseKeyword ? 0 : numeric();
|
|
2031
|
+
if (n === null || Number.isNaN(n)) {
|
|
2032
|
+
lowerer.noLowering(`${surface} with this compact option`, value, "compact must be false or a numeric literal (compact: true has no lowering)");
|
|
1377
2033
|
}
|
|
2034
|
+
options.compact = Math.max(n, 0);
|
|
2035
|
+
}
|
|
2036
|
+
else if (key === "sorted") {
|
|
2037
|
+
if (value.kind !== ts.SyntaxKind.TrueKeyword && value.kind !== ts.SyntaxKind.FalseKeyword) {
|
|
2038
|
+
lowerer.noLowering(`${surface} with this sorted option`, value, "sorted must be true or false (a comparator function has no lowering)");
|
|
2039
|
+
}
|
|
2040
|
+
options.sorted = value.kind === ts.SyntaxKind.TrueKeyword;
|
|
1378
2041
|
}
|
|
1379
2042
|
else if (key === "breakLength") {
|
|
1380
|
-
|
|
1381
|
-
|
|
2043
|
+
const n = ts.isIdentifier(value) && value.text === "Infinity" ? Infinity : numeric();
|
|
2044
|
+
if (n === null || Number.isNaN(n)) {
|
|
2045
|
+
lowerer.noLowering(`${surface} with a non-literal breakLength option`, value, "breakLength must be a numeric literal or Infinity");
|
|
1382
2046
|
}
|
|
2047
|
+
options.breakLength = n;
|
|
1383
2048
|
}
|
|
1384
2049
|
else if (dir && key === "customInspect") {
|
|
1385
2050
|
// console.dir's own default; only that value is lowered.
|
|
@@ -1388,10 +2053,42 @@ function parseInspectOptions(lowerer, node, recursive, dir = false) {
|
|
|
1388
2053
|
}
|
|
1389
2054
|
}
|
|
1390
2055
|
else {
|
|
1391
|
-
lowerer.noLowering(`${surface} with the '${key}' option`, prop, `the lowered options are depth (numeric literal or null), colors: false, compact
|
|
2056
|
+
lowerer.noLowering(`${surface} with the '${key}' option`, prop, `the lowered options are depth (numeric literal or null), colors: false, compact (false or a number), breakLength, ${dir ? "sorted (true or false), and customInspect: false" : "and sorted (true or false)"}`);
|
|
1392
2057
|
}
|
|
1393
2058
|
}
|
|
1394
|
-
return
|
|
2059
|
+
return options;
|
|
2060
|
+
}
|
|
2061
|
+
/** A render under non-default breakLength/compact/sorted: the value is evaluated
|
|
2062
|
+
* first, the layout applies to this render only, and the defaults return
|
|
2063
|
+
* afterwards. */
|
|
2064
|
+
function withInspectLayout(lowerer, options, value, render, loc) {
|
|
2065
|
+
if (options.breakLength === 80 && options.compact === 3 && !options.sorted)
|
|
2066
|
+
return render(value);
|
|
2067
|
+
const input = lowerer.declareHiddenLocal("%inspectInput", value.type);
|
|
2068
|
+
const text = lowerer.declareHiddenLocal("%inspectText", STRING);
|
|
2069
|
+
const layout = (breakLength, compact, sorted) => ({
|
|
2070
|
+
kind: "exprStmt",
|
|
2071
|
+
expr: {
|
|
2072
|
+
kind: "libCall",
|
|
2073
|
+
fn: "insp.layout",
|
|
2074
|
+
args: [numLit(breakLength, loc), numLit(compact, loc), boolLit(sorted, loc)],
|
|
2075
|
+
type: VOID,
|
|
2076
|
+
loc,
|
|
2077
|
+
},
|
|
2078
|
+
loc,
|
|
2079
|
+
});
|
|
2080
|
+
return {
|
|
2081
|
+
kind: "seqExpr",
|
|
2082
|
+
stmts: [
|
|
2083
|
+
{ kind: "varDecl", localId: input.id, init: value, loc },
|
|
2084
|
+
layout(options.breakLength, options.compact, options.sorted),
|
|
2085
|
+
{ kind: "varDecl", localId: text.id, init: render(varRef(input.id, value.type, loc)), loc },
|
|
2086
|
+
layout(80, 3, false),
|
|
2087
|
+
],
|
|
2088
|
+
result: varRef(text.id, STRING, loc),
|
|
2089
|
+
type: STRING,
|
|
2090
|
+
loc,
|
|
2091
|
+
};
|
|
1395
2092
|
}
|
|
1396
2093
|
/** `util.inspect(fn)` / `util.inspect(Cls)` over a DIRECT identifier
|
|
1397
2094
|
* naming a declared function or class: the name is compile-time truth,
|
|
@@ -1416,7 +2113,7 @@ function directCallableInspect(lowerer, node, loc) {
|
|
|
1416
2113
|
const base = cls.base ? ` extends ${cls.base.def.name.replace(/^%/, "")}` : "";
|
|
1417
2114
|
return strLit(`[class ${cls.def.name}${base}]`, loc);
|
|
1418
2115
|
}
|
|
1419
|
-
const decl =
|
|
2116
|
+
const decl = sym.declarations[0];
|
|
1420
2117
|
if (!decl)
|
|
1421
2118
|
return null;
|
|
1422
2119
|
if (ts.isFunctionDeclaration(decl) && decl.name) {
|
|
@@ -1435,10 +2132,10 @@ function directCallableInspect(lowerer, node, loc) {
|
|
|
1435
2132
|
}
|
|
1436
2133
|
/** util.inspect(value[, options]) — the spoke's inspect entry. */
|
|
1437
2134
|
function lowerInspectCall(lowerer, expr, loc) {
|
|
1438
|
-
if (expr.arguments.length < 1 || expr.arguments.length > 2) {
|
|
1439
|
-
lowerer.noLowering(`util.inspect with ${expr.arguments.length} arguments`, expr, "the supported forms are inspect(value) and inspect(value, options)");
|
|
2135
|
+
if (expr.arguments.nodes.length < 1 || expr.arguments.nodes.length > 2) {
|
|
2136
|
+
lowerer.noLowering(`util.inspect with ${expr.arguments.nodes.length} arguments`, expr, "the supported forms are inspect(value) and inspect(value, options)");
|
|
1440
2137
|
}
|
|
1441
|
-
return lowerInspectValue(lowerer, expr.arguments[0], expr.arguments[1], loc, false);
|
|
2138
|
+
return lowerInspectValue(lowerer, expr.arguments.nodes[0], expr.arguments.nodes[1], loc, false);
|
|
1442
2139
|
}
|
|
1443
2140
|
/** `inspect(value, options)` over one value node: the shared body of
|
|
1444
2141
|
* util.inspect and console.dir. console.dir is Node's `inspect(object,
|
|
@@ -1466,22 +2163,29 @@ export function lowerInspectValue(lowerer, valueNode, optionsNode, loc, dir) {
|
|
|
1466
2163
|
if (value.type.kind === "bytes") {
|
|
1467
2164
|
// One runtime representation serves Buffer AND Uint8Array; their
|
|
1468
2165
|
// renderings differ (<Buffer aa> vs Uint8Array(1) [ 170 ]), so the
|
|
1469
|
-
// TOP-LEVEL argument's checker type picks
|
|
1470
|
-
//
|
|
1471
|
-
// into shapes).
|
|
2166
|
+
// TOP-LEVEL argument's checker type picks. Nested u8 bytes fence in
|
|
2167
|
+
// inspectSupport (no checker type survives into shapes).
|
|
1472
2168
|
const tname = lowerer.checker.typeToString(lowerer.checker.getBaseTypeOfLiteralType(lowerer.typeOf(valueNode)));
|
|
1473
|
-
const isBuffer = tname
|
|
1474
|
-
|
|
1475
|
-
tname.startsWith("Buffer<") ||
|
|
1476
|
-
tname.startsWith("NonSharedBuffer<");
|
|
1477
|
-
if (dir) {
|
|
2169
|
+
const isBuffer = isBufferTypeName(tname);
|
|
2170
|
+
if (dir && isBuffer) {
|
|
1478
2171
|
lowerer.noLowering(`console.dir of '${tname}' values`, valueNode, "console.dir disables custom inspection, and the typed-array rendering it falls back to has no lowering yet — use console.log");
|
|
1479
2172
|
}
|
|
1480
|
-
if (
|
|
1481
|
-
lowerer.noLowering(`util.inspect of '${tname}' values`, valueNode, "Buffer
|
|
2173
|
+
if (isDataViewTypeName(tname)) {
|
|
2174
|
+
lowerer.noLowering(`util.inspect of '${tname}' values`, valueNode, "Buffer and the numeric typed arrays are the lowered byte renderings; DataView has none yet");
|
|
2175
|
+
}
|
|
2176
|
+
const options = parseInspectOptions(lowerer, optionsNode, false, dir);
|
|
2177
|
+
if (!isBuffer) {
|
|
2178
|
+
// A numeric typed array: Uint8Array(n) [ ... ] under the depth and
|
|
2179
|
+
// layout options.
|
|
2180
|
+
return withInspectLayout(lowerer, options, value, (input) => ({
|
|
2181
|
+
kind: "libCall",
|
|
2182
|
+
fn: "insp.typedArray",
|
|
2183
|
+
args: [input, numLit(0, loc), numLit(options.depth, loc)],
|
|
2184
|
+
type: STRING,
|
|
2185
|
+
loc,
|
|
2186
|
+
}), loc);
|
|
1482
2187
|
}
|
|
1483
|
-
|
|
1484
|
-
void bufDepth; // Buffers render fully at any depth (custom inspect)
|
|
2188
|
+
// Buffers render fully at any depth and on one line (custom inspect).
|
|
1485
2189
|
return inspectExpr(lowerer, value.type, value, numLit(0, loc), numLit(2, loc), loc);
|
|
1486
2190
|
}
|
|
1487
2191
|
const walk = { recursive: false };
|
|
@@ -1489,17 +2193,18 @@ export function lowerInspectValue(lowerer, valueNode, optionsNode, loc, dir) {
|
|
|
1489
2193
|
if (reason !== null) {
|
|
1490
2194
|
lowerer.noLowering(`${surface} of '${lowerer.fmt(value.type)}' values`, valueNode, reason);
|
|
1491
2195
|
}
|
|
1492
|
-
const
|
|
2196
|
+
const options = parseInspectOptions(lowerer, optionsNode, walk.recursive, dir);
|
|
2197
|
+
const depth = options.depth;
|
|
1493
2198
|
if (dir && value.type.kind === "dyn") {
|
|
1494
|
-
return {
|
|
2199
|
+
return withInspectLayout(lowerer, options, value, (input) => ({
|
|
1495
2200
|
kind: "libCall",
|
|
1496
2201
|
fn: "console.dirDyn",
|
|
1497
|
-
args: [
|
|
2202
|
+
args: [input, numLit(depth, loc)],
|
|
1498
2203
|
type: STRING,
|
|
1499
2204
|
loc,
|
|
1500
|
-
};
|
|
2205
|
+
}), loc);
|
|
1501
2206
|
}
|
|
1502
|
-
return inspectExpr(lowerer, value.type,
|
|
2207
|
+
return withInspectLayout(lowerer, options, value, (input) => inspectExpr(lowerer, value.type, input, numLit(0, loc), numLit(depth, loc), loc), loc);
|
|
1503
2208
|
}
|
|
1504
2209
|
/* ── util.format / util.formatWithOptions ────────────────────────────── */
|
|
1505
2210
|
/** One argument as format's %s conversion (Node: numbers via
|
|
@@ -1578,16 +2283,79 @@ function formatOArg(lowerer, node, depth, loc) {
|
|
|
1578
2283
|
}
|
|
1579
2284
|
return inspectExpr(lowerer, value.type, value, numLit(0, loc), numLit(depth, loc), loc);
|
|
1580
2285
|
}
|
|
2286
|
+
/** %d and %i over a checked-dynamic argument, as Node's formatWithOptions
|
|
2287
|
+
* reads it: a bigint prints as `${n}n`, a symbol as NaN, and any other
|
|
2288
|
+
* value as `number` (Number(arg) for %d, parseInt(String(arg)) for %i)
|
|
2289
|
+
* formatted. The argument evaluates once. */
|
|
2290
|
+
function formatDynInteger(lowerer, value, number, loc) {
|
|
2291
|
+
const held = lowerer.declareHiddenLocal("%formatArg", DYN);
|
|
2292
|
+
const ref = () => varRef(held.id, DYN, loc);
|
|
2293
|
+
return {
|
|
2294
|
+
kind: "seqExpr",
|
|
2295
|
+
stmts: [{ kind: "varDecl", localId: held.id, init: value, loc }],
|
|
2296
|
+
result: {
|
|
2297
|
+
kind: "ternary",
|
|
2298
|
+
cond: { kind: "dynTest", test: "bigint", value: ref(), type: BOOL, loc },
|
|
2299
|
+
then: {
|
|
2300
|
+
kind: "strConcat",
|
|
2301
|
+
left: { kind: "libCall", fn: "dyn.toStringCoerce", args: [ref()], type: STRING, loc },
|
|
2302
|
+
right: strLit("n", loc),
|
|
2303
|
+
type: STRING,
|
|
2304
|
+
loc,
|
|
2305
|
+
},
|
|
2306
|
+
else_: {
|
|
2307
|
+
kind: "ternary",
|
|
2308
|
+
cond: { kind: "dynTest", test: "symbol", value: ref(), type: BOOL, loc },
|
|
2309
|
+
then: strLit("NaN", loc),
|
|
2310
|
+
else_: { kind: "libCall", fn: "insp.f64", args: [number(ref())], type: STRING, loc },
|
|
2311
|
+
type: STRING,
|
|
2312
|
+
loc,
|
|
2313
|
+
},
|
|
2314
|
+
type: STRING,
|
|
2315
|
+
loc,
|
|
2316
|
+
},
|
|
2317
|
+
type: STRING,
|
|
2318
|
+
loc,
|
|
2319
|
+
};
|
|
2320
|
+
}
|
|
2321
|
+
/** %d and %i over the argument types Node formats without a number
|
|
2322
|
+
* conversion: a bigint prints as `${n}n` (formatBigInt) and a symbol as NaN;
|
|
2323
|
+
* null is Number(null) (0) under %d and parseInt("null") (NaN) under %i, and
|
|
2324
|
+
* undefined (including a void call) is NaN under both. Other arguments
|
|
2325
|
+
* still evaluate. Null for other types. */
|
|
2326
|
+
function formatIntegerFixed(value, spec, loc) {
|
|
2327
|
+
if (value.type.kind === "bigint") {
|
|
2328
|
+
return { kind: "libCall", fn: "bigint.inspect", args: [value], type: STRING, loc };
|
|
2329
|
+
}
|
|
2330
|
+
let text;
|
|
2331
|
+
if (value.type.kind === "symbol" ||
|
|
2332
|
+
value.type.kind === "undefinedT" ||
|
|
2333
|
+
value.type.kind === "void")
|
|
2334
|
+
text = "NaN";
|
|
2335
|
+
else if (value.type.kind === "nullT")
|
|
2336
|
+
text = spec === "%d" ? "0" : "NaN";
|
|
2337
|
+
else
|
|
2338
|
+
return null;
|
|
2339
|
+
if (value.kind === "unitLit")
|
|
2340
|
+
return strLit(text, loc);
|
|
2341
|
+
return {
|
|
2342
|
+
kind: "seqExpr",
|
|
2343
|
+
stmts: [{ kind: "exprStmt", expr: value, loc }],
|
|
2344
|
+
result: strLit(text, loc),
|
|
2345
|
+
type: STRING,
|
|
2346
|
+
loc,
|
|
2347
|
+
};
|
|
2348
|
+
}
|
|
1581
2349
|
/** util.format(...) / util.formatWithOptions({}, ...): the compile-time
|
|
1582
2350
|
* %-substitution over a literal format string (formatWithOptionsInternal
|
|
1583
2351
|
* ported exactly — the arg cursor, the args-exhausted guard, %c's
|
|
1584
2352
|
* consume-and-drop), with per-static-type conversions. Non-literal
|
|
1585
2353
|
* format strings lower only in the substitution-free shapes. */
|
|
1586
2354
|
export function lowerFormatCall(lowerer, expr, loc, withOptions, argNodesOverride, literalPrefix = "") {
|
|
1587
|
-
const argNodes = [...(argNodesOverride ?? expr.arguments)];
|
|
2355
|
+
const argNodes = [...(argNodesOverride ?? expr.arguments.nodes)];
|
|
1588
2356
|
if (withOptions) {
|
|
1589
2357
|
const opts = argNodes.shift();
|
|
1590
|
-
if (!opts || !ts.isObjectLiteralExpression(opts) || opts.properties.length > 0) {
|
|
2358
|
+
if (!opts || !ts.isObjectLiteralExpression(opts) || opts.properties.nodes.length > 0) {
|
|
1591
2359
|
lowerer.noLowering("util.formatWithOptions with a non-empty options literal", opts ?? expr, "only the empty literal {} (the defaults — exactly util.format) is lowered");
|
|
1592
2360
|
}
|
|
1593
2361
|
}
|
|
@@ -1632,6 +2400,9 @@ export function lowerFormatCall(lowerer, expr, loc, withOptions, argNodesOverrid
|
|
|
1632
2400
|
// strings through the runtime's ECMA-exact StringToNumber
|
|
1633
2401
|
// (num.fromString — the same lowering Number(aString) takes).
|
|
1634
2402
|
const value = lowerer.lowerExpr(node);
|
|
2403
|
+
const fixed = formatIntegerFixed(value, "%d", loc);
|
|
2404
|
+
if (fixed)
|
|
2405
|
+
return fixed;
|
|
1635
2406
|
if (value.type.kind === "f64")
|
|
1636
2407
|
return { kind: "libCall", fn: "insp.f64", args: [value], type: STRING, loc };
|
|
1637
2408
|
if (value.type.kind === "string") {
|
|
@@ -1663,19 +2434,15 @@ export function lowerFormatCall(lowerer, expr, loc, withOptions, argNodesOverrid
|
|
|
1663
2434
|
};
|
|
1664
2435
|
}
|
|
1665
2436
|
// A checked-dynamic argument (`console.log('... actual %d.',
|
|
1666
|
-
// context.actual)` — test/common's exit report):
|
|
1667
|
-
// number (dynCheck) and format. A non-number dyn value throws the
|
|
1668
|
-
// catchable TypeError where Node would print its ToNumber (NaN
|
|
1669
|
-
// for objects) — it throws instead of returning a wrong result
|
|
1670
|
-
// (SEMANTICS.md).
|
|
2437
|
+
// context.actual)` — test/common's exit report): Number(arg).
|
|
1671
2438
|
if (value.type.kind === "dyn") {
|
|
1672
|
-
return {
|
|
2439
|
+
return formatDynInteger(lowerer, value, (held) => ({
|
|
1673
2440
|
kind: "libCall",
|
|
1674
|
-
fn: "
|
|
1675
|
-
args: [
|
|
1676
|
-
type:
|
|
2441
|
+
fn: "dyn.numberConstructor",
|
|
2442
|
+
args: [held],
|
|
2443
|
+
type: F64,
|
|
1677
2444
|
loc,
|
|
1678
|
-
};
|
|
2445
|
+
}), loc);
|
|
1679
2446
|
}
|
|
1680
2447
|
lowerer.noLowering(`util.format %d of '${lowerer.fmt(value.type)}' values`, node, "numbers, booleans, and strings lower; ToNumber over other types has no static lowering");
|
|
1681
2448
|
break;
|
|
@@ -1683,6 +2450,9 @@ export function lowerFormatCall(lowerer, expr, loc, withOptions, argNodesOverrid
|
|
|
1683
2450
|
case 105: {
|
|
1684
2451
|
// %i — parseInt(ToString(arg)): the spec-exact composition.
|
|
1685
2452
|
const value = lowerer.lowerExpr(node);
|
|
2453
|
+
const fixed = formatIntegerFixed(value, "%i", loc);
|
|
2454
|
+
if (fixed)
|
|
2455
|
+
return fixed;
|
|
1686
2456
|
if (value.type.kind === "f64" ||
|
|
1687
2457
|
value.type.kind === "bool" ||
|
|
1688
2458
|
value.type.kind === "string") {
|
|
@@ -1698,6 +2468,19 @@ export function lowerFormatCall(lowerer, expr, loc, withOptions, argNodesOverrid
|
|
|
1698
2468
|
};
|
|
1699
2469
|
return { kind: "libCall", fn: "insp.f64", args: [parsed], type: STRING, loc };
|
|
1700
2470
|
}
|
|
2471
|
+
// parseInt(String(arg)) over a checked-dynamic argument.
|
|
2472
|
+
if (value.type.kind === "dyn") {
|
|
2473
|
+
return formatDynInteger(lowerer, value, (held) => ({
|
|
2474
|
+
kind: "libCall",
|
|
2475
|
+
fn: "num.parseInt",
|
|
2476
|
+
args: [
|
|
2477
|
+
{ kind: "libCall", fn: "dyn.toStringCoerce", args: [held], type: STRING, loc },
|
|
2478
|
+
numLit(0, loc),
|
|
2479
|
+
],
|
|
2480
|
+
type: F64,
|
|
2481
|
+
loc,
|
|
2482
|
+
}), loc);
|
|
2483
|
+
}
|
|
1701
2484
|
lowerer.noLowering(`util.format %i of '${lowerer.fmt(value.type)}' values`, node);
|
|
1702
2485
|
break;
|
|
1703
2486
|
}
|
|
@@ -1717,17 +2500,17 @@ export function lowerFormatCall(lowerer, expr, loc, withOptions, argNodesOverrid
|
|
|
1717
2500
|
return strLit("undefined", loc);
|
|
1718
2501
|
}
|
|
1719
2502
|
// A checked-dynamic argument (`console.error('headers: %j',
|
|
1720
|
-
// headers)` — the suite's http logging idiom): the runtime
|
|
1721
|
-
// walk
|
|
1722
|
-
// "undefined"
|
|
1723
|
-
//
|
|
2503
|
+
// headers)` — the suite's http logging idiom): the runtime runs
|
|
2504
|
+
// JSON.stringify's walk (toJSON hooks included; a root it drops
|
|
2505
|
+
// prints "undefined") and prints "[Circular]" for a circular
|
|
2506
|
+
// structure. A typed argument prints "[Circular]" the same way.
|
|
1724
2507
|
if (value.type.kind === "dyn") {
|
|
1725
2508
|
return { kind: "libCall", fn: "insp.jsonDyn", args: [value], type: STRING, loc };
|
|
1726
2509
|
}
|
|
1727
2510
|
if (!lowerer.jsonStringifySafe(value.type)) {
|
|
1728
2511
|
lowerer.noLowering(`util.format %j of '${lowerer.fmt(value.type)}' values`, node, "only JSON-safe static types lower");
|
|
1729
2512
|
}
|
|
1730
|
-
return { kind: "jsonStringify", value, type: STRING, loc };
|
|
2513
|
+
return { kind: "jsonStringify", value, circular: true, type: STRING, loc };
|
|
1731
2514
|
}
|
|
1732
2515
|
case 102: {
|
|
1733
2516
|
// %f — parseFloat(String(arg)) formatted: a number keeps its value
|
|
@@ -1894,21 +2677,21 @@ export function lowerUtilModuleCall(lowerer, expr, bi, loc) {
|
|
|
1894
2677
|
switch (bi.member) {
|
|
1895
2678
|
case "styleText":
|
|
1896
2679
|
case "isDeepStrictEqual": {
|
|
1897
|
-
if (expr.arguments.some(ts.isSpreadElement))
|
|
2680
|
+
if (expr.arguments.nodes.some(ts.isSpreadElement))
|
|
1898
2681
|
lowerer.noLowering(`util.${bi.member} with spread arguments`, expr);
|
|
1899
2682
|
const stmts = [];
|
|
1900
2683
|
const args = [];
|
|
1901
2684
|
// Save all inputs before evaluating surplus arguments: comparison may
|
|
1902
2685
|
// read mutable objects or throw, so it must happen after every argument.
|
|
1903
2686
|
for (let i = 0; i < 3; i++) {
|
|
1904
|
-
const input = expr.arguments[i]
|
|
1905
|
-
? lowerer.lowerExprExpecting(expr.arguments[i], DYN)
|
|
2687
|
+
const input = expr.arguments.nodes[i]
|
|
2688
|
+
? lowerer.lowerExprExpecting(expr.arguments.nodes[i], DYN)
|
|
1906
2689
|
: dynUndefinedExpr(loc);
|
|
1907
2690
|
const saved = lowerer.declareHiddenLocal("%utilInput", DYN);
|
|
1908
2691
|
stmts.push({ kind: "varDecl", localId: saved.id, init: input, loc });
|
|
1909
2692
|
args.push(varRef(saved.id, DYN, loc));
|
|
1910
2693
|
}
|
|
1911
|
-
for (const arg of expr.arguments.slice(3))
|
|
2694
|
+
for (const arg of expr.arguments.nodes.slice(3))
|
|
1912
2695
|
stmts.push({ kind: "exprStmt", expr: lowerer.lowerExpr(arg), loc });
|
|
1913
2696
|
const type = bi.member === "styleText" ? STRING : BOOL;
|
|
1914
2697
|
return {
|
|
@@ -1926,10 +2709,10 @@ export function lowerUtilModuleCall(lowerer, expr, bi, loc) {
|
|
|
1926
2709
|
case "debug":
|
|
1927
2710
|
return lowerUtilCallableCall(lowerer, expr, bi.member, loc);
|
|
1928
2711
|
case "getSystemErrorMap": {
|
|
1929
|
-
if (expr.arguments.some(ts.isSpreadElement))
|
|
2712
|
+
if (expr.arguments.nodes.some(ts.isSpreadElement))
|
|
1930
2713
|
lowerer.noLowering("util.getSystemErrorMap with spread arguments", expr);
|
|
1931
2714
|
const result = lowerSystemErrorMap(lowerer, loc);
|
|
1932
|
-
const stmts = expr.arguments.map((arg) => ({
|
|
2715
|
+
const stmts = expr.arguments.nodes.map((arg) => ({
|
|
1933
2716
|
kind: "exprStmt",
|
|
1934
2717
|
expr: lowerer.lowerExpr(arg),
|
|
1935
2718
|
loc,
|
|
@@ -1940,24 +2723,24 @@ export function lowerUtilModuleCall(lowerer, expr, bi, loc) {
|
|
|
1940
2723
|
case "getSystemErrorMessage":
|
|
1941
2724
|
case "stripVTControlCharacters":
|
|
1942
2725
|
case "toUSVString": {
|
|
1943
|
-
if (expr.arguments.some(ts.isSpreadElement))
|
|
2726
|
+
if (expr.arguments.nodes.some(ts.isSpreadElement))
|
|
1944
2727
|
lowerer.noLowering(`util.${bi.member} with spread arguments`, expr);
|
|
1945
|
-
const input = expr.arguments[0]
|
|
1946
|
-
? lowerer.lowerExprExpecting(expr.arguments[0], DYN)
|
|
2728
|
+
const input = expr.arguments.nodes[0]
|
|
2729
|
+
? lowerer.lowerExprExpecting(expr.arguments.nodes[0], DYN)
|
|
1947
2730
|
: {
|
|
1948
2731
|
kind: "dynFrom",
|
|
1949
2732
|
value: { kind: "unitLit", unit: "undefined", type: UNDEFINED_T, loc },
|
|
1950
2733
|
type: DYN,
|
|
1951
2734
|
loc,
|
|
1952
2735
|
};
|
|
1953
|
-
if (expr.arguments.length <= 1)
|
|
2736
|
+
if (expr.arguments.nodes.length <= 1)
|
|
1954
2737
|
return { kind: "libCall", fn: `util.${bi.member}`, args: [input], type: STRING, loc };
|
|
1955
2738
|
const saved = lowerer.declareHiddenLocal("%utilInput", DYN);
|
|
1956
2739
|
return {
|
|
1957
2740
|
kind: "seqExpr",
|
|
1958
2741
|
stmts: [
|
|
1959
2742
|
{ kind: "varDecl", localId: saved.id, init: input, loc },
|
|
1960
|
-
...expr.arguments
|
|
2743
|
+
...expr.arguments.nodes
|
|
1961
2744
|
.slice(1)
|
|
1962
2745
|
.map((arg) => ({ kind: "exprStmt", expr: lowerer.lowerExpr(arg), loc })),
|
|
1963
2746
|
],
|
|
@@ -1981,11 +2764,11 @@ export function lowerUtilModuleCall(lowerer, expr, bi, loc) {
|
|
|
1981
2764
|
case "parseArgs":
|
|
1982
2765
|
return lowerParseArgsCall(lowerer, expr, loc);
|
|
1983
2766
|
case "parseEnv": {
|
|
1984
|
-
if (expr.arguments.length > 1 || expr.arguments.some(ts.isSpreadElement)) {
|
|
2767
|
+
if (expr.arguments.nodes.length > 1 || expr.arguments.nodes.some(ts.isSpreadElement)) {
|
|
1985
2768
|
lowerer.noLowering("util.parseEnv with spread or extra arguments", expr);
|
|
1986
2769
|
}
|
|
1987
|
-
const input = expr.arguments[0]
|
|
1988
|
-
? lowerer.lowerExprExpecting(expr.arguments[0], DYN)
|
|
2770
|
+
const input = expr.arguments.nodes[0]
|
|
2771
|
+
? lowerer.lowerExprExpecting(expr.arguments.nodes[0], DYN)
|
|
1989
2772
|
: dynUndefinedExpr(loc);
|
|
1990
2773
|
const parsed = {
|
|
1991
2774
|
kind: "libCall",
|
|
@@ -2014,7 +2797,7 @@ export function lowerUtilModuleCall(lowerer, expr, bi, loc) {
|
|
|
2014
2797
|
* answer native dyn wrappers; a static function slot checks the wrapper
|
|
2015
2798
|
* when it receives it, and dyn slots keep calling it with JS arity. */
|
|
2016
2799
|
function lowerUtilCallableCall(lowerer, expr, member, loc) {
|
|
2017
|
-
if (expr.arguments.some(ts.isSpreadElement))
|
|
2800
|
+
if (expr.arguments.nodes.some(ts.isSpreadElement))
|
|
2018
2801
|
lowerer.noLowering(`util.${member} with spread arguments`, expr);
|
|
2019
2802
|
const fn = member === "inherits"
|
|
2020
2803
|
? "util.inherits"
|
|
@@ -2026,8 +2809,15 @@ function lowerUtilCallableCall(lowerer, expr, member, loc) {
|
|
|
2026
2809
|
const arity = member === "deprecate" ? 4 : member === "callbackify" ? 1 : 2;
|
|
2027
2810
|
// Program classes keep static prototypes: there is no function object
|
|
2028
2811
|
// whose prototype chain the runtime could relink or wrap.
|
|
2812
|
+
// EventEmitter and the stream classes are the exception as superCtor:
|
|
2813
|
+
// the runtime has untyped constructors for them (builtin-class-dyn.ts).
|
|
2029
2814
|
const classArgs = member === "inherits" ? 2 : member === "deprecate" ? 1 : 0;
|
|
2030
|
-
|
|
2815
|
+
const builtinBase = member === "inherits" && expr.arguments.nodes[1] !== undefined
|
|
2816
|
+
? builtinClassKindOf(lowerer, expr.arguments.nodes[1])
|
|
2817
|
+
: null;
|
|
2818
|
+
for (const [index, arg] of expr.arguments.nodes.slice(0, classArgs).entries()) {
|
|
2819
|
+
if (index === 1 && builtinBase !== null)
|
|
2820
|
+
continue;
|
|
2031
2821
|
if (lowerer.mapTypeOf(lowerer.typeOf(arg))?.kind === "classval")
|
|
2032
2822
|
lowerer.noLowering(`util.${member} over a class constructor`, arg, member === "inherits"
|
|
2033
2823
|
? "declare the subclass with extends"
|
|
@@ -2038,14 +2828,17 @@ function lowerUtilCallableCall(lowerer, expr, member, loc) {
|
|
|
2038
2828
|
const stmts = [];
|
|
2039
2829
|
const args = [];
|
|
2040
2830
|
for (let i = 0; i < arity; i++) {
|
|
2041
|
-
const
|
|
2042
|
-
|
|
2043
|
-
|
|
2831
|
+
const node = expr.arguments.nodes[i];
|
|
2832
|
+
const input = !node
|
|
2833
|
+
? dynUndefinedExpr(loc)
|
|
2834
|
+
: i === 1 && builtinBase !== null
|
|
2835
|
+
? (builtinClassDynValueOf(lowerer, node) ?? lowerer.lowerExprExpecting(node, DYN))
|
|
2836
|
+
: lowerer.lowerExprExpecting(node, DYN);
|
|
2044
2837
|
const saved = lowerer.declareHiddenLocal("%utilInput", DYN);
|
|
2045
2838
|
stmts.push({ kind: "varDecl", localId: saved.id, init: input, loc });
|
|
2046
2839
|
args.push(varRef(saved.id, DYN, loc));
|
|
2047
2840
|
}
|
|
2048
|
-
for (const arg of expr.arguments.slice(arity))
|
|
2841
|
+
for (const arg of expr.arguments.nodes.slice(arity))
|
|
2049
2842
|
stmts.push({ kind: "exprStmt", expr: lowerer.lowerExpr(arg), loc });
|
|
2050
2843
|
const type = fn === "util.inherits" ? VOID : DYN;
|
|
2051
2844
|
const result = { kind: "libCall", fn, args, type, loc };
|
|
@@ -2057,7 +2850,7 @@ function lowerUtilCallableCall(lowerer, expr, member, loc) {
|
|
|
2057
2850
|
* a statically typed callback parameter cannot receive a value its type
|
|
2058
2851
|
* excludes. Untyped (JavaScript or unknown) slots keep the wrapper dyn. */
|
|
2059
2852
|
function callbackifyErrorExcludesNull(lowerer, expr) {
|
|
2060
|
-
if (isJsSourceFile(
|
|
2853
|
+
if (isJsSourceFile(ts.getSourceFileOfNode(expr)))
|
|
2061
2854
|
return false;
|
|
2062
2855
|
const checker = lowerer.checker;
|
|
2063
2856
|
const slot = checker.getContextualType(expr) ?? lowerer.typeOf(expr);
|
|
@@ -2079,11 +2872,11 @@ function callbackifyErrorExcludesNull(lowerer, expr) {
|
|
|
2079
2872
|
* variants and a null-prototype values object); statically typed member
|
|
2080
2873
|
* reads leave that tree through the ordinary dyn checks. */
|
|
2081
2874
|
function lowerParseArgsCall(lowerer, expr, loc) {
|
|
2082
|
-
if (expr.arguments.length > 1 || expr.arguments.some(ts.isSpreadElement)) {
|
|
2083
|
-
lowerer.noLowering(`util.parseArgs with ${expr.arguments.length} arguments`, expr, "the lowered form is parseArgs() or parseArgs(config)");
|
|
2875
|
+
if (expr.arguments.nodes.length > 1 || expr.arguments.nodes.some(ts.isSpreadElement)) {
|
|
2876
|
+
lowerer.noLowering(`util.parseArgs with ${expr.arguments.nodes.length} arguments`, expr, "the lowered form is parseArgs() or parseArgs(config)");
|
|
2084
2877
|
}
|
|
2085
2878
|
let config;
|
|
2086
|
-
const configNode = expr.arguments[0];
|
|
2879
|
+
const configNode = expr.arguments.nodes[0];
|
|
2087
2880
|
if (!configNode) {
|
|
2088
2881
|
config = { kind: "dynObjLit", fields: [], type: DYN, loc };
|
|
2089
2882
|
}
|
|
@@ -2137,9 +2930,9 @@ function lowerParseArgsCall(lowerer, expr, loc) {
|
|
|
2137
2930
|
* forms and TypeScript keep the SC2020 fence: a typed consumer asserting
|
|
2138
2931
|
* real frames must fail at compile time instead of reading placeholders. */
|
|
2139
2932
|
function lowerGetCallSitesCall(lowerer, expr, loc) {
|
|
2140
|
-
if (expr.arguments.length !== 0)
|
|
2933
|
+
if (expr.arguments.nodes.length !== 0)
|
|
2141
2934
|
return null;
|
|
2142
|
-
if (!isJsSourceFile(
|
|
2935
|
+
if (!isJsSourceFile(ts.getSourceFileOfNode(expr)))
|
|
2143
2936
|
return null;
|
|
2144
2937
|
const frame = () => {
|
|
2145
2938
|
const field = (name, value) => ({
|
|
@@ -2152,7 +2945,7 @@ function lowerGetCallSitesCall(lowerer, expr, loc) {
|
|
|
2152
2945
|
field("functionName", { kind: "strLit", value: "", type: STRING, loc }),
|
|
2153
2946
|
field("scriptName", {
|
|
2154
2947
|
kind: "strLit",
|
|
2155
|
-
value:
|
|
2948
|
+
value: ts.getSourceFileOfNode(expr).fileName,
|
|
2156
2949
|
type: STRING,
|
|
2157
2950
|
loc,
|
|
2158
2951
|
}),
|