@scriptc/compiler 0.4.6 → 0.4.8
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/node-fallback/child_process.d.ts +71 -22
- package/ambient/node-fallback/crypto.d.ts +15 -7
- package/ambient/node-fallback/events.d.ts +29 -6
- package/ambient/node-fallback/fs-promises.d.ts +1 -1
- package/ambient/node-fallback/fs.d.ts +57 -12
- package/ambient/node-fallback/http.d.ts +26 -18
- package/ambient/node-fallback/https.d.ts +5 -2
- package/ambient/node-fallback/net.d.ts +25 -0
- package/ambient/node-fallback/os.d.ts +11 -1
- package/ambient/node-fallback/path-posix.d.ts +6 -0
- package/ambient/node-fallback/path-win32.d.ts +5 -0
- package/ambient/node-fallback/path.d.ts +2 -0
- package/ambient/node-fallback/querystring.d.ts +3 -3
- package/ambient/node-fallback/zlib.d.ts +31 -2
- package/ambient/scriptc-node-fallback.d.ts +95 -20
- package/ambient/scriptc.d.ts +7 -2
- package/dist/backend/executable-features.js +22 -1
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/immutability.d.ts +12 -1
- package/dist/backend/immutability.js +50 -4
- package/dist/backend/immutability.js.map +1 -1
- package/dist/backend/immutability.test.js +95 -1
- package/dist/backend/immutability.test.js.map +1 -1
- package/dist/backend/library-pack.d.ts +6 -0
- package/dist/backend/library-pack.js +18 -5
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/library-pack.test.d.ts +1 -0
- package/dist/backend/library-pack.test.js +28 -0
- package/dist/backend/library-pack.test.js.map +1 -0
- package/dist/backend/linker.d.ts +20 -2
- package/dist/backend/linker.js +221 -35
- package/dist/backend/linker.js.map +1 -1
- package/dist/backend/lld.d.ts +15 -6
- package/dist/backend/lld.js +24 -16
- package/dist/backend/lld.js.map +1 -1
- package/dist/backend/lld.test.js +13 -5
- package/dist/backend/lld.test.js.map +1 -1
- package/dist/backend/llvm/alloc.d.ts +15 -2
- package/dist/backend/llvm/alloc.js +172 -36
- package/dist/backend/llvm/alloc.js.map +1 -1
- package/dist/backend/llvm/alloc.test.js +69 -1
- package/dist/backend/llvm/alloc.test.js.map +1 -1
- package/dist/backend/llvm/arenas.d.ts +17 -4
- package/dist/backend/llvm/arenas.js +105 -10
- package/dist/backend/llvm/arenas.js.map +1 -1
- package/dist/backend/llvm/arenas.test.js +229 -0
- package/dist/backend/llvm/arenas.test.js.map +1 -1
- package/dist/backend/llvm/bytes-alias.js +10 -1
- package/dist/backend/llvm/bytes-alias.js.map +1 -1
- package/dist/backend/llvm/bytes-headers.js +6 -0
- package/dist/backend/llvm/bytes-headers.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.test.js +25 -0
- package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.js +10 -0
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/classes.d.ts +16 -9
- package/dist/backend/llvm/classes.js +142 -37
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +42 -0
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.test.js +50 -1
- package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
- package/dist/backend/llvm/cpu-dispatch.d.ts +15 -5
- package/dist/backend/llvm/cpu-dispatch.js +34 -9
- package/dist/backend/llvm/cpu-dispatch.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +64 -3
- package/dist/backend/llvm/dyn.js +251 -15
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.js +68 -5
- package/dist/backend/llvm/emit-function.js.map +1 -1
- package/dist/backend/llvm/emit-module.js +226 -77
- package/dist/backend/llvm/emit-module.js.map +1 -1
- package/dist/backend/llvm/emit-module.test.d.ts +1 -0
- package/dist/backend/llvm/emit-module.test.js +52 -0
- package/dist/backend/llvm/emit-module.test.js.map +1 -0
- package/dist/backend/llvm/emit-statements.js +138 -34
- package/dist/backend/llvm/emit-statements.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +142 -10
- package/dist/backend/llvm/emitter.js +523 -73
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +31 -3
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +19 -1
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.js +16 -1
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-calls.d.ts +4 -1
- package/dist/backend/llvm/expr-calls.js +38 -6
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +237 -23
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +123 -12
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-records.d.ts +1 -1
- package/dist/backend/llvm/expr-records.js +124 -56
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.d.ts +8 -0
- package/dist/backend/llvm/expr-stream-bridges.js +59 -2
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-callbacks.d.ts +16 -0
- package/dist/backend/llvm/expr-stream-callbacks.js +206 -20
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/integer-values.d.ts +2 -0
- package/dist/backend/llvm/integer-values.js +6 -0
- package/dist/backend/llvm/integer-values.js.map +1 -1
- package/dist/backend/llvm/js-groups.d.ts +21 -0
- package/dist/backend/llvm/js-groups.js +277 -0
- package/dist/backend/llvm/js-groups.js.map +1 -0
- package/dist/backend/llvm/js-ic.d.ts +57 -1
- package/dist/backend/llvm/js-ic.js +389 -22
- package/dist/backend/llvm/js-ic.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +152 -1
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +116 -11
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-network.js +33 -6
- package/dist/backend/llvm/lib-network.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +180 -27
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +139 -2
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +67 -0
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.test.js +32 -0
- package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
- package/dist/backend/llvm/loop-entry-versions.d.ts +2 -2
- package/dist/backend/llvm/loop-entry-versions.js +43 -21
- package/dist/backend/llvm/loop-entry-versions.js.map +1 -1
- package/dist/backend/llvm/loop-state.d.ts +7 -1
- package/dist/backend/llvm/loop-state.js +26 -3
- package/dist/backend/llvm/loop-state.js.map +1 -1
- package/dist/backend/llvm/map-entry-fusion.d.ts +8 -0
- package/dist/backend/llvm/map-entry-fusion.js +3 -3
- package/dist/backend/llvm/map-entry-fusion.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.d.ts +3 -1
- package/dist/backend/llvm/map-number-lookup.js +7 -3
- package/dist/backend/llvm/map-number-lookup.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.test.js +58 -17
- package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.js +7 -6
- package/dist/backend/llvm/nullable-unions.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.test.js +4 -1
- package/dist/backend/llvm/nullable-unions.test.js.map +1 -1
- package/dist/backend/llvm/receiver-brackets.test.d.ts +1 -0
- package/dist/backend/llvm/receiver-brackets.test.js +68 -0
- package/dist/backend/llvm/receiver-brackets.test.js.map +1 -0
- package/dist/backend/llvm/receivers.js +3 -0
- package/dist/backend/llvm/receivers.js.map +1 -1
- package/dist/backend/llvm/record-entry-fusion.d.ts +32 -0
- package/dist/backend/llvm/record-entry-fusion.js +217 -0
- package/dist/backend/llvm/record-entry-fusion.js.map +1 -0
- package/dist/backend/llvm/record-results.d.ts +5 -2
- package/dist/backend/llvm/record-results.js +13 -12
- package/dist/backend/llvm/record-results.js.map +1 -1
- package/dist/backend/llvm/record-views.d.ts +22 -2
- package/dist/backend/llvm/record-views.js +147 -12
- package/dist/backend/llvm/record-views.js.map +1 -1
- package/dist/backend/llvm/record-views.test.js +76 -0
- package/dist/backend/llvm/record-views.test.js.map +1 -1
- package/dist/backend/llvm/reference-effects.js +1 -0
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- package/dist/backend/llvm/reference-writes.js +4 -0
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/region-ir.js +1 -0
- package/dist/backend/llvm/region-ir.js.map +1 -1
- package/dist/backend/llvm/region-sites.d.ts +18 -0
- package/dist/backend/llvm/region-sites.js +79 -1
- package/dist/backend/llvm/region-sites.js.map +1 -1
- package/dist/backend/llvm/runtime-registries.test.js +53 -6
- package/dist/backend/llvm/runtime-registries.test.js.map +1 -1
- package/dist/backend/llvm/serialized-ir-emission.test.js +3 -1
- package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -1
- package/dist/backend/llvm/shapes.d.ts +36 -3
- package/dist/backend/llvm/shapes.js +201 -16
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +4 -0
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/speculative-integers.d.ts +10 -1
- package/dist/backend/llvm/speculative-integers.js +59 -8
- package/dist/backend/llvm/speculative-integers.js.map +1 -1
- package/dist/backend/llvm/stack-objects.d.ts +1 -2
- package/dist/backend/llvm/stack-objects.js +8 -5
- package/dist/backend/llvm/stack-objects.js.map +1 -1
- package/dist/backend/llvm/unwind-abi.d.ts +3 -3
- package/dist/backend/llvm/unwind-abi.js +8 -3
- package/dist/backend/llvm/unwind-abi.js.map +1 -1
- package/dist/backend/llvm/walkers.d.ts +12 -0
- package/dist/backend/llvm/walkers.js +47 -3
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/may-throw.js +12 -2
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/may-throw.test.js +13 -0
- package/dist/backend/may-throw.test.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +94 -0
- package/dist/backend/native/executable.js +134 -10
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/helper-identity-record.d.ts +11 -0
- package/dist/backend/native/helper-identity-record.js +76 -0
- package/dist/backend/native/helper-identity-record.js.map +1 -0
- package/dist/backend/native/helper-identity-record.test.d.ts +1 -0
- package/dist/backend/native/helper-identity-record.test.js +101 -0
- package/dist/backend/native/helper-identity-record.test.js.map +1 -0
- package/dist/backend/native/library.js +10 -2
- package/dist/backend/native/library.js.map +1 -1
- package/dist/backend/native/runtime-inputs.js +8 -1
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native/vendor.d.ts +1 -1
- package/dist/backend/native/vendor.js +1 -1
- package/dist/backend/native/vendor.js.map +1 -1
- package/dist/backend/native-codegen-core.d.ts +13 -10
- package/dist/backend/native-codegen-core.js +26 -13
- package/dist/backend/native-codegen-core.js.map +1 -1
- package/dist/backend/native-codegen.js +30 -8
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +110 -14
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +72 -0
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/native-link-info.js +1 -0
- package/dist/backend/native-link-info.js.map +1 -1
- package/dist/backend/native-profile.d.ts +4 -1
- package/dist/backend/native-profile.js +12 -1
- package/dist/backend/native-profile.js.map +1 -1
- package/dist/backend/native-profile.test.js +10 -0
- package/dist/backend/native-profile.test.js.map +1 -1
- package/dist/backend/publication.d.ts +4 -1
- package/dist/backend/publication.js +4 -2
- package/dist/backend/publication.js.map +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 +46 -7
- package/dist/backend/runtime-pack-core.js +37 -2
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-native.d.ts +18 -1
- package/dist/backend/runtime-pack-native.js +138 -29
- package/dist/backend/runtime-pack-native.js.map +1 -1
- package/dist/backend/runtime-pack-native.test.js +166 -4
- package/dist/backend/runtime-pack-native.test.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +3 -1
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.d.ts +7 -0
- package/dist/backend/runtime-pack.js +25 -3
- package/dist/backend/runtime-pack.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +213 -12
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/tree-classes.d.ts +42 -0
- package/dist/backend/tree-classes.js +723 -0
- package/dist/backend/tree-classes.js.map +1 -0
- package/dist/backend/tree-classes.test.d.ts +1 -0
- package/dist/backend/tree-classes.test.js +338 -0
- package/dist/backend/tree-classes.test.js.map +1 -0
- package/dist/backend/vendor-archives.d.ts +8 -1
- package/dist/backend/vendor-archives.js +313 -8
- package/dist/backend/vendor-archives.js.map +1 -1
- package/dist/backend/vendor-inputs.d.ts +60 -3
- package/dist/backend/vendor-inputs.js +109 -3
- package/dist/backend/vendor-inputs.js.map +1 -1
- package/dist/backend/vendor-inputs.test.js +62 -1
- package/dist/backend/vendor-inputs.test.js.map +1 -1
- package/dist/backend/warm-cache.js +2 -0
- package/dist/backend/warm-cache.js.map +1 -1
- package/dist/compat/fetch-profile.d.ts +7 -1
- package/dist/compat/fetch-profile.js +25 -12
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/compile-types.d.ts +7 -0
- package/dist/contracts/check.d.ts +3 -0
- package/dist/contracts/check.js +18 -5
- package/dist/contracts/check.js.map +1 -1
- package/dist/coverage/report.js +47 -0
- package/dist/coverage/report.js.map +1 -1
- package/dist/coverage/surface-manifest.js +1 -1
- package/dist/coverage/surface-manifest.js.map +1 -1
- package/dist/diagnostics/codes.d.ts +14 -0
- package/dist/diagnostics/codes.js +14 -0
- package/dist/diagnostics/codes.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +68 -0
- package/dist/diagnostics/diagnostic.js +186 -6
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/dynamic-tier.js +3 -1
- package/dist/diagnostics/dynamic-tier.js.map +1 -1
- package/dist/diagnostics/envelope.d.ts +18 -0
- package/dist/diagnostics/envelope.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +48 -0
- package/dist/executable/executable-cache.js +38 -0
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +127 -1
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/executable/prepare.d.ts +13 -3
- package/dist/executable/prepare.js +438 -234
- package/dist/executable/prepare.js.map +1 -1
- package/dist/frontend/analysis.js +200 -18
- package/dist/frontend/analysis.js.map +1 -1
- package/dist/frontend/builtin-modules.d.ts +4 -0
- package/dist/frontend/builtin-modules.js +10 -0
- package/dist/frontend/builtin-modules.js.map +1 -1
- package/dist/frontend/early-errors.d.ts +24 -0
- package/dist/frontend/early-errors.js +836 -0
- package/dist/frontend/early-errors.js.map +1 -0
- package/dist/frontend/early-errors.test.d.ts +1 -0
- package/dist/frontend/early-errors.test.js +207 -0
- package/dist/frontend/early-errors.test.js.map +1 -0
- package/dist/frontend/inferred-js-diagnostics.test.js +88 -0
- package/dist/frontend/inferred-js-diagnostics.test.js.map +1 -1
- package/dist/frontend/input-tracker.d.ts +47 -0
- package/dist/frontend/input-tracker.js +173 -36
- package/dist/frontend/input-tracker.js.map +1 -1
- package/dist/frontend/input-tracker.test.js +86 -2
- package/dist/frontend/input-tracker.test.js.map +1 -1
- package/dist/frontend/js-inference.d.ts +2 -0
- package/dist/frontend/js-inference.js +18 -0
- package/dist/frontend/js-inference.js.map +1 -0
- package/dist/frontend/jsx-opinion-sites.test.d.ts +1 -0
- package/dist/frontend/jsx-opinion-sites.test.js +86 -0
- package/dist/frontend/jsx-opinion-sites.test.js.map +1 -0
- package/dist/frontend/lib-exports.d.ts +23 -4
- package/dist/frontend/lib-exports.js +98 -26
- package/dist/frontend/lib-exports.js.map +1 -1
- package/dist/frontend/lowering/binding-analysis.d.ts +2 -1
- package/dist/frontend/lowering/binding-analysis.js +86 -4
- package/dist/frontend/lowering/binding-analysis.js.map +1 -1
- package/dist/frontend/lowering/buffers.d.ts +8 -0
- package/dist/frontend/lowering/buffers.js +43 -0
- package/dist/frontend/lowering/buffers.js.map +1 -0
- package/dist/frontend/lowering/builtin-calls.js +13 -0
- package/dist/frontend/lowering/builtin-calls.js.map +1 -1
- package/dist/frontend/lowering/builtin-namespaces.d.ts +3 -2
- package/dist/frontend/lowering/builtin-namespaces.js +41 -3
- package/dist/frontend/lowering/builtin-namespaces.js.map +1 -1
- package/dist/frontend/lowering/builtin-statics.d.ts +24 -0
- package/dist/frontend/lowering/builtin-statics.js +407 -0
- package/dist/frontend/lowering/builtin-statics.js.map +1 -0
- package/dist/frontend/lowering/builtins/arguments.d.ts +4 -0
- package/dist/frontend/lowering/builtins/arguments.js +12 -0
- package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
- package/dist/frontend/lowering/builtins/atomics.d.ts +6 -1
- package/dist/frontend/lowering/builtins/atomics.js +87 -1
- package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-methods.d.ts +7 -0
- package/dist/frontend/lowering/builtins/child-process-methods.js +52 -12
- package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-sync.d.ts +13 -0
- package/dist/frontend/lowering/builtins/child-process-sync.js +1 -13
- package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process.d.ts +10 -4
- package/dist/frontend/lowering/builtins/child-process.js +565 -28
- package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
- package/dist/frontend/lowering/builtins/compression.d.ts +2 -2
- package/dist/frontend/lowering/builtins/compression.js +41 -21
- package/dist/frontend/lowering/builtins/compression.js.map +1 -1
- package/dist/frontend/lowering/builtins/constants.js +7 -2
- package/dist/frontend/lowering/builtins/constants.js.map +1 -1
- package/dist/frontend/lowering/builtins/dates.d.ts +1 -1
- package/dist/frontend/lowering/builtins/dates.js +23 -1
- package/dist/frontend/lowering/builtins/dates.js.map +1 -1
- package/dist/frontend/lowering/builtins/environment.d.ts +55 -0
- package/dist/frontend/lowering/builtins/environment.js +213 -2
- package/dist/frontend/lowering/builtins/environment.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +1 -0
- package/dist/frontend/lowering/builtins/filesystem-calls.js +75 -18
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem.d.ts +25 -7
- package/dist/frontend/lowering/builtins/filesystem.js +185 -16
- package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
- package/dist/frontend/lowering/builtins/json.js +4 -0
- package/dist/frontend/lowering/builtins/json.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-calls.js +42 -3
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-resolution.d.ts +8 -0
- package/dist/frontend/lowering/builtins/module-resolution.js +31 -5
- package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
- package/dist/frontend/lowering/builtins/numbers.d.ts +4 -1
- package/dist/frontend/lowering/builtins/numbers.js +10 -2
- package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
- package/dist/frontend/lowering/builtins/operating-system.d.ts +9 -5
- package/dist/frontend/lowering/builtins/operating-system.js +101 -20
- package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.d.ts +18 -2
- package/dist/frontend/lowering/builtins/process.js +386 -25
- package/dist/frontend/lowering/builtins/process.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.js +169 -8
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/builtins/properties.js +6 -2
- package/dist/frontend/lowering/builtins/properties.js.map +1 -1
- package/dist/frontend/lowering/builtins/querystring.d.ts +8 -0
- package/dist/frontend/lowering/builtins/querystring.js +202 -18
- package/dist/frontend/lowering/builtins/querystring.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +6 -4
- package/dist/frontend/lowering/builtins/readline.js +200 -38
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/reflection.js +60 -1
- package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
- package/dist/frontend/lowering/builtins/text-codecs.js +208 -59
- package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
- package/dist/frontend/lowering/builtins/url.js +55 -13
- package/dist/frontend/lowering/builtins/url.js.map +1 -1
- package/dist/frontend/lowering/builtins/v8.d.ts +5 -5
- package/dist/frontend/lowering/builtins/v8.js +7 -5
- package/dist/frontend/lowering/builtins/v8.js.map +1 -1
- package/dist/frontend/lowering/builtins/web-streams-dyn.d.ts +17 -2
- package/dist/frontend/lowering/builtins/web-streams-dyn.js +97 -9
- package/dist/frontend/lowering/builtins/web-streams-dyn.js.map +1 -1
- package/dist/frontend/lowering/builtins/webassembly.js +2 -0
- package/dist/frontend/lowering/builtins/webassembly.js.map +1 -1
- package/dist/frontend/lowering/call-arguments.d.ts +10 -0
- package/dist/frontend/lowering/call-arguments.js +37 -2
- package/dist/frontend/lowering/call-arguments.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.d.ts +10 -0
- package/dist/frontend/lowering/call-signatures.js +180 -0
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/cjs-exports-object.d.ts +3 -0
- package/dist/frontend/lowering/cjs-exports-object.js +1 -1
- package/dist/frontend/lowering/cjs-exports-object.js.map +1 -1
- package/dist/frontend/lowering/cjs-inline-require.js +5 -0
- package/dist/frontend/lowering/cjs-inline-require.js.map +1 -1
- package/dist/frontend/lowering/class-construction.d.ts +14 -2
- package/dist/frontend/lowering/class-construction.js +99 -5
- package/dist/frontend/lowering/class-construction.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +14 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +1376 -1009
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js +158 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
- package/dist/frontend/lowering/class-protocols.js +59 -10
- package/dist/frontend/lowering/class-protocols.js.map +1 -1
- package/dist/frontend/lowering/class-prototypes.js +20 -15
- package/dist/frontend/lowering/class-prototypes.js.map +1 -1
- package/dist/frontend/lowering/class-runtime-statics.d.ts +8 -0
- package/dist/frontend/lowering/class-runtime-statics.js +35 -1
- package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
- package/dist/frontend/lowering/class-unions.js +21 -4
- package/dist/frontend/lowering/class-unions.js.map +1 -1
- package/dist/frontend/lowering/class-views.d.ts +13 -0
- package/dist/frontend/lowering/class-views.js +51 -0
- package/dist/frontend/lowering/class-views.js.map +1 -0
- package/dist/frontend/lowering/coercions/function-adapters.d.ts +15 -1
- package/dist/frontend/lowering/coercions/function-adapters.js +63 -10
- package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
- package/dist/frontend/lowering/coercions/state.d.ts +15 -0
- package/dist/frontend/lowering/coercions/state.js +24 -0
- package/dist/frontend/lowering/coercions/state.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural-plans.js +75 -3
- package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +39 -2
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/coercions/unions.d.ts +2 -1
- package/dist/frontend/lowering/coercions/unions.js +54 -10
- package/dist/frontend/lowering/coercions/unions.js.map +1 -1
- package/dist/frontend/lowering/constructor-returns.d.ts +23 -2
- package/dist/frontend/lowering/constructor-returns.js +284 -58
- package/dist/frontend/lowering/constructor-returns.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.d.ts +8 -1
- package/dist/frontend/lowering/containers/array-callbacks.js +288 -90
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.js +37 -8
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-from-async.js +139 -3
- package/dist/frontend/lowering/containers/array-from-async.js.map +1 -1
- package/dist/frontend/lowering/containers/array-iteration.d.ts +14 -4
- package/dist/frontend/lowering/containers/array-iteration.js +24 -7
- package/dist/frontend/lowering/containers/array-iteration.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +30 -11
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.d.ts +6 -0
- package/dist/frontend/lowering/containers/bytes.js +450 -86
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.d.ts +16 -0
- package/dist/frontend/lowering/containers/callback-arguments.js +74 -12
- package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-grouping.js +421 -2
- package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +52 -17
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/filter-predicates.d.ts +10 -0
- package/dist/frontend/lowering/containers/filter-predicates.js +69 -3
- package/dist/frontend/lowering/containers/filter-predicates.js.map +1 -1
- package/dist/frontend/lowering/containers/indexed-objects.js +46 -2
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/containers/iterator-helpers.d.ts +23 -0
- package/dist/frontend/lowering/containers/iterator-helpers.js +176 -10
- package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
- package/dist/frontend/lowering/containers/string-and-regexp.d.ts +5 -2
- package/dist/frontend/lowering/containers/string-and-regexp.js +45 -11
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/crypto-tables.d.ts +3 -3
- package/dist/frontend/lowering/crypto-tables.js +5 -5
- package/dist/frontend/lowering/dispatch-sites.js +3 -0
- package/dist/frontend/lowering/dispatch-sites.js.map +1 -1
- package/dist/frontend/lowering/divergences.d.ts +40 -0
- package/dist/frontend/lowering/divergences.js +239 -20
- package/dist/frontend/lowering/divergences.js.map +1 -1
- package/dist/frontend/lowering/effect-free.d.ts +12 -0
- package/dist/frontend/lowering/effect-free.js +44 -0
- package/dist/frontend/lowering/effect-free.js.map +1 -0
- package/dist/frontend/lowering/expressions/array-literals.d.ts +24 -0
- package/dist/frontend/lowering/expressions/array-literals.js +88 -10
- package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/binary.js +216 -14
- package/dist/frontend/lowering/expressions/binary.js.map +1 -1
- package/dist/frontend/lowering/expressions/element-access.js +272 -11
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +15 -0
- package/dist/frontend/lowering/expressions/hosted-narrowing.js +54 -1
- package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/identifiers.js +173 -4
- package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
- package/dist/frontend/lowering/expressions/keyed-field-targets.d.ts +11 -1
- package/dist/frontend/lowering/expressions/keyed-field-targets.js +22 -1
- package/dist/frontend/lowering/expressions/keyed-field-targets.js.map +1 -1
- package/dist/frontend/lowering/expressions/narrowing.d.ts +3 -0
- package/dist/frontend/lowering/expressions/narrowing.js +195 -18
- package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.d.ts +5 -1
- package/dist/frontend/lowering/expressions/object-literals.js +951 -240
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.js +71 -21
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.d.ts +39 -0
- package/dist/frontend/lowering/expressions/property-access.js +1141 -87
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/relational.js +262 -4
- package/dist/frontend/lowering/expressions/relational.js.map +1 -1
- package/dist/frontend/lowering/expressions/typeof.js +25 -0
- package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
- package/dist/frontend/lowering/expressions/union-fields.d.ts +20 -1
- package/dist/frontend/lowering/expressions/union-fields.js +103 -13
- package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
- package/dist/frontend/lowering/expressions/updates.js +156 -22
- package/dist/frontend/lowering/expressions/updates.js.map +1 -1
- package/dist/frontend/lowering/frozen-records.d.ts +6 -0
- package/dist/frontend/lowering/frozen-records.js +10 -4
- package/dist/frontend/lowering/frozen-records.js.map +1 -1
- package/dist/frontend/lowering/frozen-records.test.d.ts +1 -0
- package/dist/frontend/lowering/frozen-records.test.js +44 -0
- package/dist/frontend/lowering/frozen-records.test.js.map +1 -0
- package/dist/frontend/lowering/function-names.d.ts +9 -0
- package/dist/frontend/lowering/function-names.js +95 -0
- package/dist/frontend/lowering/function-names.js.map +1 -0
- package/dist/frontend/lowering/function-returns.js +42 -13
- package/dist/frontend/lowering/function-returns.js.map +1 -1
- package/dist/frontend/lowering/general-streams.js +5 -0
- package/dist/frontend/lowering/general-streams.js.map +1 -1
- package/dist/frontend/lowering/generator-delegation.d.ts +15 -7
- package/dist/frontend/lowering/generator-delegation.js +301 -118
- package/dist/frontend/lowering/generator-delegation.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.d.ts +75 -0
- package/dist/frontend/lowering/generic-functions.js +790 -18
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/global-function-values.d.ts +25 -0
- package/dist/frontend/lowering/global-function-values.js +193 -0
- package/dist/frontend/lowering/global-function-values.js.map +1 -0
- package/dist/frontend/lowering/global-values.d.ts +15 -4
- package/dist/frontend/lowering/global-values.js +67 -9
- package/dist/frontend/lowering/global-values.js.map +1 -1
- package/dist/frontend/lowering/handle-properties.js +34 -1
- package/dist/frontend/lowering/handle-properties.js.map +1 -1
- package/dist/frontend/lowering/host-global-values.d.ts +31 -0
- package/dist/frontend/lowering/host-global-values.js +121 -0
- package/dist/frontend/lowering/host-global-values.js.map +1 -0
- package/dist/frontend/lowering/host-globals.d.ts +74 -0
- package/dist/frontend/lowering/host-globals.js +344 -0
- package/dist/frontend/lowering/host-globals.js.map +1 -0
- package/dist/frontend/lowering/http2-constants.js +1 -1
- package/dist/frontend/lowering/iterator-adapters.js +46 -17
- package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
- package/dist/frontend/lowering/iterator-prototype.d.ts +30 -0
- package/dist/frontend/lowering/iterator-prototype.js +160 -0
- package/dist/frontend/lowering/iterator-prototype.js.map +1 -0
- package/dist/frontend/lowering/key-order-witness.d.ts +54 -0
- package/dist/frontend/lowering/key-order-witness.js +571 -9
- package/dist/frontend/lowering/key-order-witness.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.test.js +1 -0
- package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
- package/dist/frontend/lowering/lib-boundary.js +25 -3
- package/dist/frontend/lowering/lib-boundary.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +140 -16
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-async-iteration.d.ts +11 -0
- package/dist/frontend/lowering/lower-async-iteration.js +15 -0
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-builtin-values.d.ts +36 -6
- package/dist/frontend/lowering/lower-builtin-values.js +342 -58
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +47 -1
- package/dist/frontend/lowering/lower-calls.js +1354 -273
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.test.d.ts +1 -0
- package/dist/frontend/lowering/lower-calls.test.js +121 -0
- package/dist/frontend/lowering/lower-calls.test.js.map +1 -0
- package/dist/frontend/lowering/lower-classes.d.ts +36 -5
- package/dist/frontend/lowering/lower-classes.js +630 -89
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.d.ts +15 -2
- package/dist/frontend/lowering/lower-event-emitter.js +610 -98
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +15 -1
- package/dist/frontend/lowering/lower-exprs.js +96 -20
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +27 -6
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.js +57 -10
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-global-value.d.ts +6 -0
- package/dist/frontend/lowering/lower-global-value.js +14 -5
- package/dist/frontend/lowering/lower-global-value.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.d.ts +4 -0
- package/dist/frontend/lowering/lower-inspect.js +713 -92
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +135 -27
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.js +18 -0
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-node-island.d.ts +35 -4
- package/dist/frontend/lowering/lower-node-island.js +472 -67
- package/dist/frontend/lowering/lower-node-island.js.map +1 -1
- package/dist/frontend/lowering/lower-server.js +463 -96
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-shared-modules.js +13 -1
- package/dist/frontend/lowering/lower-shared-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.d.ts +3 -2
- package/dist/frontend/lowering/lower-stdlib.js +77 -18
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +24 -4
- package/dist/frontend/lowering/lower-stmts.js +831 -136
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.js +126 -8
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-timers.js +243 -48
- package/dist/frontend/lowering/lower-timers.js.map +1 -1
- package/dist/frontend/lowering/lower-url.js +6 -3
- package/dist/frontend/lowering/lower-url.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +363 -21
- package/dist/frontend/lowering/lowerer.js +1224 -129
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/lowerer.test.js +19 -1
- package/dist/frontend/lowering/lowerer.test.js.map +1 -1
- package/dist/frontend/lowering/lowering-facts.d.ts +110 -0
- package/dist/frontend/lowering/lowering-facts.js +323 -0
- package/dist/frontend/lowering/lowering-facts.js.map +1 -0
- package/dist/frontend/lowering/lowering-facts.test.d.ts +1 -0
- package/dist/frontend/lowering/lowering-facts.test.js +100 -0
- package/dist/frontend/lowering/lowering-facts.test.js.map +1 -0
- package/dist/frontend/lowering/module-namespace-elements.js +15 -0
- package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
- package/dist/frontend/lowering/nan-coded-reads.d.ts +27 -4
- package/dist/frontend/lowering/nan-coded-reads.js +112 -9
- package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
- package/dist/frontend/lowering/new-target.js +2 -2
- package/dist/frontend/lowering/nullish-empty-pattern.d.ts +17 -0
- package/dist/frontend/lowering/nullish-empty-pattern.js +118 -0
- package/dist/frontend/lowering/nullish-empty-pattern.js.map +1 -0
- package/dist/frontend/lowering/optional-arguments.d.ts +4 -0
- package/dist/frontend/lowering/optional-arguments.js +26 -2
- package/dist/frontend/lowering/optional-arguments.js.map +1 -1
- package/dist/frontend/lowering/partial-assertions.d.ts +36 -0
- package/dist/frontend/lowering/partial-assertions.js +189 -0
- package/dist/frontend/lowering/partial-assertions.js.map +1 -0
- package/dist/frontend/lowering/primitive-throws.d.ts +100 -0
- package/dist/frontend/lowering/primitive-throws.js +241 -0
- package/dist/frontend/lowering/primitive-throws.js.map +1 -0
- package/dist/frontend/lowering/primitive-wrappers.d.ts +34 -0
- package/dist/frontend/lowering/primitive-wrappers.js +221 -0
- package/dist/frontend/lowering/primitive-wrappers.js.map +1 -0
- package/dist/frontend/lowering/private-statics.d.ts +46 -0
- package/dist/frontend/lowering/private-statics.js +322 -0
- package/dist/frontend/lowering/private-statics.js.map +1 -0
- package/dist/frontend/lowering/record-inherited.d.ts +17 -1
- package/dist/frontend/lowering/record-inherited.js +16 -2
- package/dist/frontend/lowering/record-inherited.js.map +1 -1
- package/dist/frontend/lowering/record-links.d.ts +73 -0
- package/dist/frontend/lowering/record-links.js +797 -0
- package/dist/frontend/lowering/record-links.js.map +1 -0
- package/dist/frontend/lowering/record-sources.d.ts +12 -1
- package/dist/frontend/lowering/record-sources.js +60 -0
- package/dist/frontend/lowering/record-sources.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-provenance.d.ts +27 -7
- package/dist/frontend/lowering/runtime-optional-provenance.js +25 -11
- package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-report.d.ts +40 -0
- package/dist/frontend/lowering/runtime-optional-report.js +300 -0
- package/dist/frontend/lowering/runtime-optional-report.js.map +1 -0
- package/dist/frontend/lowering/scoped-type-memo.test.d.ts +1 -0
- package/dist/frontend/lowering/scoped-type-memo.test.js +86 -0
- package/dist/frontend/lowering/scoped-type-memo.test.js.map +1 -0
- package/dist/frontend/lowering/static-typeof.d.ts +3 -1
- package/dist/frontend/lowering/static-typeof.js +6 -1
- package/dist/frontend/lowering/static-typeof.js.map +1 -1
- package/dist/frontend/lowering/strict-equality.d.ts +4 -0
- package/dist/frontend/lowering/strict-equality.js +14 -0
- package/dist/frontend/lowering/strict-equality.js.map +1 -1
- package/dist/frontend/lowering/strict-mode.d.ts +1 -5
- package/dist/frontend/lowering/strict-mode.js +4 -30
- package/dist/frontend/lowering/strict-mode.js.map +1 -1
- package/dist/frontend/lowering/structural-instances.d.ts +7 -0
- package/dist/frontend/lowering/structural-instances.js +23 -0
- package/dist/frontend/lowering/structural-instances.js.map +1 -1
- package/dist/frontend/lowering/surfaces.d.ts +42 -1
- package/dist/frontend/lowering/surfaces.js +212 -71
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/union-retag.d.ts +13 -1
- package/dist/frontend/lowering/union-retag.js +55 -1
- package/dist/frontend/lowering/union-retag.js.map +1 -1
- package/dist/frontend/lowering/union-retag.test.js +51 -0
- package/dist/frontend/lowering/union-retag.test.js.map +1 -1
- package/dist/frontend/lowering/unit-journal.d.ts +136 -17
- package/dist/frontend/lowering/unit-journal.js +324 -53
- package/dist/frontend/lowering/unit-journal.js.map +1 -1
- package/dist/frontend/lowering/unit-journal.test.js +126 -3
- package/dist/frontend/lowering/unit-journal.test.js.map +1 -1
- package/dist/frontend/lowering/unit-reuse.d.ts +92 -0
- package/dist/frontend/lowering/unit-reuse.js +1008 -0
- package/dist/frontend/lowering/unit-reuse.js.map +1 -0
- package/dist/frontend/lowering/width-lift.d.ts +12 -0
- package/dist/frontend/lowering/zlib-constants.js +3 -2
- package/dist/frontend/lowering/zlib-constants.js.map +1 -1
- package/dist/frontend/npm-file-import.test.d.ts +1 -0
- package/dist/frontend/npm-file-import.test.js +76 -0
- package/dist/frontend/npm-file-import.test.js.map +1 -0
- package/dist/frontend/npm-static.js +95 -11
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/npm-static.test.js +95 -2
- package/dist/frontend/npm-static.test.js.map +1 -1
- package/dist/frontend/npm.d.ts +9 -0
- package/dist/frontend/npm.js +82 -0
- package/dist/frontend/npm.js.map +1 -1
- package/dist/frontend/pipeline-native.js +2 -1
- package/dist/frontend/pipeline-native.js.map +1 -1
- package/dist/frontend/pipeline.d.ts +9 -4
- package/dist/frontend/pipeline.js +162 -38
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/pipeline.test.js +68 -11
- package/dist/frontend/pipeline.test.js.map +1 -1
- package/dist/frontend/program-node.d.ts +3 -0
- package/dist/frontend/program-node.js +13 -6
- package/dist/frontend/program-node.js.map +1 -1
- package/dist/frontend/program.d.ts +71 -2
- package/dist/frontend/program.js +836 -411
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +37 -1
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/provenance-core.js +4 -0
- package/dist/frontend/provenance-core.js.map +1 -1
- package/dist/frontend/services-node.d.ts +7 -0
- package/dist/frontend/services-node.js +32 -1
- package/dist/frontend/services-node.js.map +1 -1
- package/dist/frontend/services-node.test.js +51 -0
- package/dist/frontend/services-node.test.js.map +1 -1
- package/dist/frontend/services.d.ts +14 -0
- package/dist/frontend/services.js +52 -2
- package/dist/frontend/services.js.map +1 -1
- package/dist/frontend/services.test.js +61 -1
- package/dist/frontend/services.test.js.map +1 -1
- package/dist/frontend/shape-inference/analyze.d.ts +5 -0
- package/dist/frontend/shape-inference/analyze.js +104 -4
- package/dist/frontend/shape-inference/analyze.js.map +1 -1
- package/dist/frontend/shape-inference/domain.js +0 -1
- package/dist/frontend/shape-inference/domain.js.map +1 -1
- package/dist/frontend/shape-inference/index.js +5 -1
- package/dist/frontend/shape-inference/index.js.map +1 -1
- package/dist/frontend/shape-inference/memo.d.ts +2 -1
- package/dist/frontend/shape-inference/memo.js +6 -2
- package/dist/frontend/shape-inference/memo.js.map +1 -1
- package/dist/frontend/shape-inference/overlay.d.ts +1 -1
- package/dist/frontend/shape-inference/overlay.js +184 -4
- package/dist/frontend/shape-inference/overlay.js.map +1 -1
- package/dist/frontend/shape-inference/static-objects.js +11 -6
- package/dist/frontend/shape-inference/static-objects.js.map +1 -1
- package/dist/frontend/source-phase-imports.test.d.ts +1 -0
- package/dist/frontend/source-phase-imports.test.js +37 -0
- package/dist/frontend/source-phase-imports.test.js.map +1 -0
- package/dist/frontend/tier-analysis.d.ts +9 -0
- package/dist/frontend/tier-analysis.js +1 -0
- package/dist/frontend/tier-analysis.js.map +1 -1
- package/dist/frontend/ts7/ast-node.d.ts +6 -1
- package/dist/frontend/ts7/ast-node.js +12 -0
- package/dist/frontend/ts7/ast-node.js.map +1 -1
- package/dist/frontend/ts7/ast-wire-protocols.test.js +11 -3
- package/dist/frontend/ts7/ast-wire-protocols.test.js.map +1 -1
- package/dist/frontend/ts7/ast-wire.js +3 -5
- package/dist/frontend/ts7/ast-wire.js.map +1 -1
- package/dist/frontend/ts7/checker-backend.d.ts +13 -0
- package/dist/frontend/ts7/checker-backend.js +84 -2
- package/dist/frontend/ts7/checker-backend.js.map +1 -1
- package/dist/frontend/ts7/checker-backend.test.js +126 -2
- package/dist/frontend/ts7/checker-backend.test.js.map +1 -1
- package/dist/frontend/ts7/program-host.d.ts +22 -1
- package/dist/frontend/ts7/program-host.js +49 -4
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/program-host.test.js +83 -0
- package/dist/frontend/ts7/program-host.test.js.map +1 -1
- package/dist/frontend/ts7/rpc-process.d.ts +16 -1
- package/dist/frontend/ts7/rpc-process.js +170 -92
- package/dist/frontend/ts7/rpc-process.js.map +1 -1
- package/dist/frontend/ts7/rpc-process.test.js +49 -21
- package/dist/frontend/ts7/rpc-process.test.js.map +1 -1
- package/dist/frontend/tsc-codes.d.ts +57 -3
- package/dist/frontend/tsc-codes.js +956 -101
- package/dist/frontend/tsc-codes.js.map +1 -1
- package/dist/frontend/tsc-codes.test.js +221 -12
- package/dist/frontend/tsc-codes.test.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +98 -11
- package/dist/frontend/type-mapper.js +770 -182
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +224 -15
- package/dist/index.js.map +1 -1
- package/dist/index.test.d.ts +1 -0
- package/dist/index.test.js +60 -0
- package/dist/index.test.js.map +1 -0
- 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/build.d.ts +3 -2
- package/dist/ir/build.js +4 -2
- package/dist/ir/build.js.map +1 -1
- package/dist/ir/builtin-effects.js +96 -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 +453 -26
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/callback-specialization.d.ts +3 -2
- package/dist/ir/callback-specialization.js +35 -25
- package/dist/ir/callback-specialization.js.map +1 -1
- package/dist/ir/capture-values.d.ts +8 -4
- package/dist/ir/capture-values.js +9 -6
- package/dist/ir/capture-values.js.map +1 -1
- package/dist/ir/char-unit-locals.d.ts +6 -2
- package/dist/ir/char-unit-locals.js +11 -2
- package/dist/ir/char-unit-locals.js.map +1 -1
- package/dist/ir/class-key-index.d.ts +18 -0
- package/dist/ir/class-key-index.js +29 -0
- package/dist/ir/class-key-index.js.map +1 -0
- package/dist/ir/class-key-index.test.d.ts +1 -0
- package/dist/ir/class-key-index.test.js +25 -0
- package/dist/ir/class-key-index.test.js.map +1 -0
- package/dist/ir/codec.d.ts +82 -0
- package/dist/ir/codec.generated.d.ts +13 -0
- package/dist/ir/codec.generated.js +5350 -0
- package/dist/ir/codec.generated.js.map +1 -0
- package/dist/ir/codec.js +325 -0
- package/dist/ir/codec.js.map +1 -0
- package/dist/ir/codec.test.d.ts +1 -0
- package/dist/ir/codec.test.js +225 -0
- package/dist/ir/codec.test.js.map +1 -0
- package/dist/ir/constant-globals.d.ts +5 -2
- package/dist/ir/constant-globals.js +25 -27
- package/dist/ir/constant-globals.js.map +1 -1
- package/dist/ir/expression-inlining.d.ts +4 -2
- package/dist/ir/expression-inlining.js +8 -2
- package/dist/ir/expression-inlining.js.map +1 -1
- package/dist/ir/field-values.d.ts +5 -2
- package/dist/ir/field-values.js +32 -21
- package/dist/ir/field-values.js.map +1 -1
- package/dist/ir/fields.generated.d.ts +29 -10
- package/dist/ir/fields.generated.js +1039 -11
- package/dist/ir/fields.generated.js.map +1 -1
- package/dist/ir/fields.test.js +46 -2
- package/dist/ir/fields.test.js.map +1 -1
- package/dist/ir/final-fields.js +1 -1
- package/dist/ir/final-fields.js.map +1 -1
- package/dist/ir/function-references.d.ts +6 -4
- package/dist/ir/function-references.js +11 -4
- package/dist/ir/function-references.js.map +1 -1
- package/dist/ir/function-references.test.js +14 -0
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/init-only-globals.d.ts +4 -2
- package/dist/ir/init-only-globals.js +17 -18
- package/dist/ir/init-only-globals.js.map +1 -1
- package/dist/ir/inline-array-sources.js +4 -1
- package/dist/ir/inline-array-sources.js.map +1 -1
- package/dist/ir/inline-array-views.d.ts +13 -0
- package/dist/ir/inline-array-views.js +945 -0
- package/dist/ir/inline-array-views.js.map +1 -0
- package/dist/ir/inline-arrays.d.ts +7 -0
- package/dist/ir/inline-arrays.js +190 -55
- package/dist/ir/inline-arrays.js.map +1 -1
- package/dist/ir/inline-arrays.test.js +140 -2
- package/dist/ir/inline-arrays.test.js.map +1 -1
- package/dist/ir/int32-slots.js +7 -0
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/integer-ranges.js +16 -6
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/ir.d.ts +130 -44
- package/dist/ir/ir.js +7 -0
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/js-groups.d.ts +51 -0
- package/dist/ir/js-groups.js +394 -0
- package/dist/ir/js-groups.js.map +1 -0
- package/dist/ir/js-groups.test.d.ts +1 -0
- package/dist/ir/js-groups.test.js +555 -0
- package/dist/ir/js-groups.test.js.map +1 -0
- package/dist/ir/js-ic.d.ts +10 -9
- package/dist/ir/js-ic.js +58 -25
- package/dist/ir/js-ic.js.map +1 -1
- package/dist/ir/js-ic.test.js +37 -3
- package/dist/ir/js-ic.test.js.map +1 -1
- package/dist/ir/jsval.js +374 -63
- package/dist/ir/jsval.js.map +1 -1
- package/dist/ir/jsval.test.js +96 -2
- package/dist/ir/jsval.test.js.map +1 -1
- package/dist/ir/loop-entry-ranges.js +112 -9
- package/dist/ir/loop-entry-ranges.js.map +1 -1
- package/dist/ir/loop-entry-ranges.test.js +40 -0
- package/dist/ir/loop-entry-ranges.test.js.map +1 -1
- package/dist/ir/node-index.d.ts +23 -6
- package/dist/ir/node-index.js +126 -49
- package/dist/ir/node-index.js.map +1 -1
- package/dist/ir/numeric-call-specialization.d.ts +4 -2
- package/dist/ir/numeric-call-specialization.js +40 -26
- package/dist/ir/numeric-call-specialization.js.map +1 -1
- package/dist/ir/paired-while-loops.d.ts +4 -2
- package/dist/ir/paired-while-loops.js +8 -2
- package/dist/ir/paired-while-loops.js.map +1 -1
- package/dist/ir/parameter-versions.d.ts +13 -3
- package/dist/ir/parameter-versions.js +63 -40
- package/dist/ir/parameter-versions.js.map +1 -1
- package/dist/ir/property-bags.d.ts +4 -2
- package/dist/ir/property-bags.js +22 -17
- package/dist/ir/property-bags.js.map +1 -1
- package/dist/ir/receiver-readers.js +58 -2
- package/dist/ir/receiver-readers.js.map +1 -1
- package/dist/ir/row-pairs.d.ts +4 -2
- package/dist/ir/row-pairs.js +12 -11
- package/dist/ir/row-pairs.js.map +1 -1
- package/dist/ir/runtime-features.d.ts +139 -5
- package/dist/ir/runtime-features.js +397 -19
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/runtime-features.test.js +135 -1
- package/dist/ir/runtime-features.test.js.map +1 -1
- package/dist/ir/runtime-jam-loops.d.ts +35 -0
- package/dist/ir/runtime-jam-loops.js +604 -0
- package/dist/ir/runtime-jam-loops.js.map +1 -0
- package/dist/ir/runtime-jam-loops.test.d.ts +1 -0
- package/dist/ir/runtime-jam-loops.test.js +565 -0
- package/dist/ir/runtime-jam-loops.test.js.map +1 -0
- package/dist/ir/saturating-loop-jams.d.ts +11 -2
- package/dist/ir/saturating-loop-jams.js +56 -16
- package/dist/ir/saturating-loop-jams.js.map +1 -1
- package/dist/ir/saturating-loop-jams.test.js +39 -1
- package/dist/ir/saturating-loop-jams.test.js.map +1 -1
- package/dist/ir/scalar-records.d.ts +5 -2
- package/dist/ir/scalar-records.js +12 -2
- package/dist/ir/scalar-records.js.map +1 -1
- package/dist/ir/self-captures.d.ts +4 -2
- package/dist/ir/self-captures.js +40 -28
- package/dist/ir/self-captures.js.map +1 -1
- package/dist/ir/self-captures.test.js +15 -0
- package/dist/ir/self-captures.test.js.map +1 -1
- package/dist/ir/serialize.d.ts +8 -2
- package/dist/ir/serialize.js +92 -24
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/serialize.test.js +26 -0
- package/dist/ir/serialize.test.js.map +1 -1
- package/dist/ir/tiers.js +1 -0
- package/dist/ir/tiers.js.map +1 -1
- package/dist/ir/traverse.js +4 -0
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/typed-argument-clones.d.ts +30 -0
- package/dist/ir/typed-argument-clones.js +789 -0
- package/dist/ir/typed-argument-clones.js.map +1 -0
- package/dist/ir/union-arm-loops.d.ts +3 -0
- package/dist/ir/union-arm-loops.js +373 -0
- package/dist/ir/union-arm-loops.js.map +1 -0
- package/dist/ir/union-arm-loops.test.d.ts +1 -0
- package/dist/ir/union-arm-loops.test.js +230 -0
- package/dist/ir/union-arm-loops.test.js.map +1 -0
- package/dist/ir/validate.js +170 -22
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +46 -0
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/library/compiler-self-identity.d.ts +8 -2
- package/dist/library/compiler-self-identity.js +92 -18
- package/dist/library/compiler-self-identity.js.map +1 -1
- package/dist/library/compiler-self-identity.test.js +150 -3
- package/dist/library/compiler-self-identity.test.js.map +1 -1
- package/dist/library/int-infer.d.ts +5 -0
- package/dist/library/int-infer.js +15 -3
- package/dist/library/int-infer.js.map +1 -1
- package/dist/library/ir-policy.js +4 -0
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/library/library-cache.d.ts +4 -0
- package/dist/library/library-cache.js +2 -0
- package/dist/library/library-cache.js.map +1 -1
- package/dist/library/library-cache.test.js +26 -0
- package/dist/library/library-cache.test.js.map +1 -1
- package/dist/library/prepare.js +99 -31
- package/dist/library/prepare.js.map +1 -1
- package/dist/native/cache.d.ts +7 -0
- package/dist/native/cache.js +49 -0
- package/dist/native/cache.js.map +1 -1
- package/dist/native/cache.test.js +13 -1
- package/dist/native/cache.test.js.map +1 -1
- package/dist/native/cli.js +2 -0
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.js +26 -5
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/executable-cache-open.test.js +31 -5
- package/dist/native/executable-cache-open.test.js.map +1 -1
- package/dist/native/executable-cache.d.ts +6 -1
- package/dist/native/executable-cache.js +7 -1
- package/dist/native/executable-cache.js.map +1 -1
- package/dist/native/prepare.d.ts +3 -0
- package/dist/native/prepare.js +74 -28
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/prepare.test.js +25 -3
- package/dist/native/prepare.test.js.map +1 -1
- package/dist/native/sanitizer.js +63 -4
- package/dist/native/sanitizer.js.map +1 -1
- package/dist/native/sanitizer.test.js +93 -2
- package/dist/native/sanitizer.test.js.map +1 -1
- package/dist/native/toolchain.js +9 -2
- package/dist/native/toolchain.js.map +1 -1
- package/dist/node-islands/boundary.d.ts +37 -1
- package/dist/node-islands/boundary.js +65 -7
- package/dist/node-islands/boundary.js.map +1 -1
- package/dist/node-islands/boundary.test.d.ts +1 -0
- package/dist/node-islands/boundary.test.js +76 -0
- package/dist/node-islands/boundary.test.js.map +1 -0
- package/dist/node-islands/detect.d.ts +27 -1
- package/dist/node-islands/detect.js +475 -40
- package/dist/node-islands/detect.js.map +1 -1
- package/dist/node-islands/detect.test.js +175 -4
- package/dist/node-islands/detect.test.js.map +1 -1
- package/dist/node-islands/effect-gate.js +30 -20
- package/dist/node-islands/effect-gate.js.map +1 -1
- package/dist/node-islands/effect-gate.test.js +4 -1
- package/dist/node-islands/effect-gate.test.js.map +1 -1
- package/dist/node-islands/graph-islands.d.ts +40 -0
- package/dist/node-islands/graph-islands.js +128 -0
- package/dist/node-islands/graph-islands.js.map +1 -0
- package/dist/node-islands/growth.d.ts +57 -0
- package/dist/node-islands/growth.js +205 -0
- package/dist/node-islands/growth.js.map +1 -0
- package/dist/node-islands/libnode.d.ts +1 -1
- package/dist/node-islands/libnode.js +1 -1
- package/dist/node-islands/libnode.js.map +1 -1
- package/dist/node-islands/modules.d.ts +28 -0
- package/dist/node-islands/modules.js +156 -0
- package/dist/node-islands/modules.js.map +1 -1
- package/dist/node-islands/modules.test.js +105 -1
- package/dist/node-islands/modules.test.js.map +1 -1
- package/dist/node-islands/policy.js +2 -3
- package/dist/node-islands/policy.js.map +1 -1
- package/dist/node-islands/probe-recorder.d.ts +1 -0
- package/dist/node-islands/probe-recorder.js +596 -0
- package/dist/node-islands/probe-recorder.js.map +1 -0
- package/dist/node-islands/probe-recorder.test.d.ts +1 -0
- package/dist/node-islands/probe-recorder.test.js +80 -0
- package/dist/node-islands/probe-recorder.test.js.map +1 -0
- package/dist/node-islands/report.d.ts +12 -0
- package/dist/node-islands/report.js +28 -0
- package/dist/node-islands/report.js.map +1 -1
- package/dist/node-islands/report.test.js +4 -0
- package/dist/node-islands/report.test.js.map +1 -1
- package/dist/node-islands/rules.js +9 -0
- package/dist/node-islands/rules.js.map +1 -1
- package/dist/node-islands/scan.d.ts +16 -1
- package/dist/node-islands/scan.js +110 -9
- package/dist/node-islands/scan.js.map +1 -1
- package/dist/node-islands/snapshot.d.ts +38 -1
- package/dist/node-islands/snapshot.js +165 -161
- package/dist/node-islands/snapshot.js.map +1 -1
- package/dist/node-islands/snapshot.test.js +63 -2
- package/dist/node-islands/snapshot.test.js.map +1 -1
- package/dist/node-islands/summary.js +8 -0
- package/dist/node-islands/summary.js.map +1 -1
- package/dist/node-islands/type-strip.d.ts +11 -0
- package/dist/node-islands/type-strip.js +157 -0
- package/dist/node-islands/type-strip.js.map +1 -0
- package/dist/node-islands/type-strip.test.d.ts +1 -0
- package/dist/node-islands/type-strip.test.js +31 -0
- package/dist/node-islands/type-strip.test.js.map +1 -0
- package/dist/project-config.d.ts +4 -0
- package/dist/project-config.js +19 -0
- package/dist/project-config.js.map +1 -1
- package/dist/project-config.test.js +10 -0
- package/dist/project-config.test.js.map +1 -1
- package/dist/wasm/translate.js +11 -5
- package/dist/wasm/translate.js.map +1 -1
- package/dist/wasm/translate.test.js +35 -0
- package/dist/wasm/translate.test.js.map +1 -1
- package/package.json +20 -20
- package/surface-manifest.json +221 -122
|
@@ -10,7 +10,7 @@ import { unsignedHex } from "../../format-integer.js";
|
|
|
10
10
|
import { jsFuncNameOf } from "./lowerer.js";
|
|
11
11
|
import { isJsSourceFile, locOf } from "../program.js";
|
|
12
12
|
import { noLoweringDiag } from "../../diagnostics/diagnostic.js";
|
|
13
|
-
import { BOOL, CAUGHT, DYN, F64, RUNTIME_ERROR_CLASSES, STRING, isUnitType, UNDEFINED_T, VOID, canConvertToDyn, canDynCheckTo, funcOf, arrayOf, CLASS_FIELD_ATTRIBUTES_PREFIX, classDynViewSupported, DYN_CLASS_PROPERTIES, isClassOwnEnumerableFieldName, isDirentShape, isDynTypedRefType,
|
|
13
|
+
import { BOOL, CAUGHT, DYN, F64, RUNTIME_ERROR_CLASSES, STRING, isUnitType, UNDEFINED_T, VOID, canConvertToDyn, canDynCheckTo, funcOf, arrayOf, CLASS_FIELD_ATTRIBUTES_PREFIX, classDynViewSupported, DYN_CLASS_PROPERTIES, isClassOwnEnumerableFieldName, isDirentShape, isDynTypedRefType, accessorSlotProp, recordTextCodecClass, shapeKeyOrders, typeKey, } from "../../ir/ir.js";
|
|
14
14
|
import { accessorCall, findMethodOn } from "./lower-classes.js";
|
|
15
15
|
import { isSafeToDiscard, isSafeToRepeat } from "./expressions/evaluation-safety.js";
|
|
16
16
|
import { INSPECT_CUSTOM_MEMBER, symbolFieldDisplayName, TO_STRING_TAG_FIELD, } from "./symbol-fields.js";
|
|
@@ -19,6 +19,7 @@ import { dateRootOf } from "./builtins/date-classes.js";
|
|
|
19
19
|
import { lowerSystemErrorMap } from "./lower-system-errors.js";
|
|
20
20
|
import { isPerfEntryType, perfEntryJson } from "./builtins/performance.js";
|
|
21
21
|
import { recordMayKeepSource, recordSourceTest } from "./record-sources.js";
|
|
22
|
+
import { registerLinkedHelper } from "./record-links.js";
|
|
22
23
|
import { nullProtoRecordShape, recordNullProtoTest } from "./null-prototype.js";
|
|
23
24
|
import { dynArgumentPack } from "./call-arguments.js";
|
|
24
25
|
/* ── IR construction shorthand ───────────────────────────────────────── */
|
|
@@ -222,14 +223,15 @@ function errorInstanceReachesItself(lowerer, c) {
|
|
|
222
223
|
}
|
|
223
224
|
/** An error value whose runtime class may be a program-declared subclass,
|
|
224
225
|
* which may declare fields (`class Bailable extends Error { bail = false }`)
|
|
225
|
-
* or carry a `cause`: Node prints the error base
|
|
226
|
-
*
|
|
227
|
-
* `[Bailable [Error]: m]
|
|
228
|
-
*
|
|
229
|
-
*
|
|
230
|
-
*
|
|
231
|
-
*
|
|
232
|
-
* prints
|
|
226
|
+
* or carry a `cause`: Node prints the error base — its stack, headed
|
|
227
|
+
* `Bailable [Error]: m` by improveStack, or the bracketed
|
|
228
|
+
* `[Bailable [Error]: m]` when the stack has no frame line — followed by
|
|
229
|
+
* the own properties, `{ bail: true }` after the last frame, with the
|
|
230
|
+
* usual single-line/multi-line choice counting the base. Each program
|
|
231
|
+
* class (most-derived first) is an instanceof arm; other values keep the
|
|
232
|
+
* runtime's error rendering. Beyond the depth budget an instance with own
|
|
233
|
+
* properties prints `[Name]`, as Node does for any object with keys; one
|
|
234
|
+
* without prints its header. */
|
|
233
235
|
function errorInspectHelper(lowerer, t, info, loc) {
|
|
234
236
|
const key = `insp.userError:${typeKey(t)}`;
|
|
235
237
|
const existing = lowerer.inspectHelpers.get(key);
|
|
@@ -548,10 +550,12 @@ function userErrorClasses(info) {
|
|
|
548
550
|
visit(info);
|
|
549
551
|
return out;
|
|
550
552
|
}
|
|
551
|
-
/** Node's improveStack over the
|
|
552
|
-
*
|
|
553
|
-
*
|
|
554
|
-
*
|
|
553
|
+
/** Node's improveStack over the rendering's base: when the instance's
|
|
554
|
+
* constructor name differs from its `name` and the name ends in "Error",
|
|
555
|
+
* the header names both — `[Bailable [Error]: m]`, or `[FetchError: m]`
|
|
556
|
+
* when the constructor name already contains it. Two bases reach here: the
|
|
557
|
+
* bracket form (`[Error: m]`, an error whose stack is empty) and the stack
|
|
558
|
+
* itself (`Error: m\n at ...`, whose first line carries the header). */
|
|
555
559
|
function improvedErrorBase(lowerer, value, base, display, loc) {
|
|
556
560
|
const str = (method, receiver, args, type) => ({
|
|
557
561
|
kind: "strIntrinsic",
|
|
@@ -605,6 +609,36 @@ function improvedErrorBase(lowerer, value, base, display, loc) {
|
|
|
605
609
|
type: STRING,
|
|
606
610
|
loc,
|
|
607
611
|
};
|
|
612
|
+
/** The name's length — where a stack base's header ends. */
|
|
613
|
+
const nameLength = () => str("length", nameRef(), [], F64);
|
|
614
|
+
/** The base's character at `name.length`: `:` or `\n` after the name, or
|
|
615
|
+
* the empty answer when the base is the name alone (Node's
|
|
616
|
+
* `stack.length === len` arm). */
|
|
617
|
+
const atNameEnd = () => str("charAt", baseRef(), [nameLength()], STRING);
|
|
618
|
+
const stackCond = and(and(eq(nameRef(), strLit(display, loc), true), str("endsWith", nameRef(), [strLit("Error", loc)], BOOL)), and(str("startsWith", baseRef(), [nameRef()], BOOL), {
|
|
619
|
+
kind: "logical",
|
|
620
|
+
op: "||",
|
|
621
|
+
left: {
|
|
622
|
+
kind: "logical",
|
|
623
|
+
op: "||",
|
|
624
|
+
left: eq(atNameEnd(), strLit(":", loc)),
|
|
625
|
+
right: eq(atNameEnd(), strLit("\n", loc)),
|
|
626
|
+
type: BOOL,
|
|
627
|
+
loc,
|
|
628
|
+
},
|
|
629
|
+
right: eq(atNameEnd(), strLit("", loc)),
|
|
630
|
+
type: BOOL,
|
|
631
|
+
loc,
|
|
632
|
+
}));
|
|
633
|
+
const stackRest = () => str("slice", baseRef(), [nameLength()], STRING);
|
|
634
|
+
const improvedStack = {
|
|
635
|
+
kind: "ternary",
|
|
636
|
+
cond: str("includes", strLit(display, loc), [nameRef()], BOOL),
|
|
637
|
+
then: concatAll([strLit(display, loc), stackRest()], loc),
|
|
638
|
+
else_: concatAll([strLit(`${display} [`, loc), nameRef(), strLit("]", loc), stackRest()], loc),
|
|
639
|
+
type: STRING,
|
|
640
|
+
loc,
|
|
641
|
+
};
|
|
608
642
|
return {
|
|
609
643
|
kind: "seqExpr",
|
|
610
644
|
stmts: [
|
|
@@ -623,7 +657,21 @@ function improvedErrorBase(lowerer, value, base, display, loc) {
|
|
|
623
657
|
},
|
|
624
658
|
{ kind: "varDecl", localId: "raw.0", init: base, loc },
|
|
625
659
|
],
|
|
626
|
-
result: {
|
|
660
|
+
result: {
|
|
661
|
+
kind: "ternary",
|
|
662
|
+
cond,
|
|
663
|
+
then: improved,
|
|
664
|
+
else_: {
|
|
665
|
+
kind: "ternary",
|
|
666
|
+
cond: stackCond,
|
|
667
|
+
then: improvedStack,
|
|
668
|
+
else_: baseRef(),
|
|
669
|
+
type: STRING,
|
|
670
|
+
loc,
|
|
671
|
+
},
|
|
672
|
+
type: STRING,
|
|
673
|
+
loc,
|
|
674
|
+
},
|
|
627
675
|
type: STRING,
|
|
628
676
|
loc,
|
|
629
677
|
};
|
|
@@ -662,15 +710,9 @@ function inspectSupport(lowerer, t, visiting, out) {
|
|
|
662
710
|
const shape = lowerer.shapes.get(t.shapeId);
|
|
663
711
|
if (!shape)
|
|
664
712
|
return "this record shape has no inspect lowering";
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
return
|
|
668
|
-
// Accessor-carrying shapes: Node prints the accessor names as
|
|
669
|
-
// `x: [Getter]` / `[Setter]` / `[Getter/Setter]` in insertion order
|
|
670
|
-
// — a position the static field walk does not track (accessor slots
|
|
671
|
-
// live outside declaredOrder), so the render fences by name.
|
|
672
|
-
if (shapeHasAccessorSlots(shape)) {
|
|
673
|
-
return "shapes carrying get/set accessor properties have no inspect lowering yet (Node prints the accessor names as [Getter]/[Setter] in insertion order — read the properties explicitly)";
|
|
713
|
+
if (recordTextCodecClass(shape) !== null) {
|
|
714
|
+
visiting.delete(t.shapeId);
|
|
715
|
+
return null;
|
|
674
716
|
}
|
|
675
717
|
if (shape.indexValue !== undefined) {
|
|
676
718
|
// PURE index-signature shapes (Record<string, V> — no declared
|
|
@@ -689,6 +731,22 @@ function inspectSupport(lowerer, t, visiting, out) {
|
|
|
689
731
|
return null;
|
|
690
732
|
}
|
|
691
733
|
for (const f of shape.fields) {
|
|
734
|
+
// An accessor's closure slot never renders itself: the property's
|
|
735
|
+
// entry prints Node's label, or the getter's RESULT under the
|
|
736
|
+
// getters option (a setter-only property stays a label). A getter
|
|
737
|
+
// that returns nothing renders `[Getter: undefined]` — the label
|
|
738
|
+
// path already, so its void result is no fence.
|
|
739
|
+
const slot = accessorSlotProp(f.name);
|
|
740
|
+
if (slot && f.type.kind === "func") {
|
|
741
|
+
if (slot.kind === "set")
|
|
742
|
+
continue;
|
|
743
|
+
if (f.type.ret.kind === "void")
|
|
744
|
+
continue;
|
|
745
|
+
const why = inspectSupport(lowerer, f.type.ret, visiting, out);
|
|
746
|
+
if (why !== null)
|
|
747
|
+
return why;
|
|
748
|
+
continue;
|
|
749
|
+
}
|
|
692
750
|
const why = inspectSupport(lowerer, f.type, visiting, out);
|
|
693
751
|
if (why !== null)
|
|
694
752
|
return why;
|
|
@@ -930,10 +988,11 @@ function inspectMayRefuse(lowerer, t) {
|
|
|
930
988
|
}
|
|
931
989
|
function inspectExprBody(lowerer, t, value, recurse, depth, loc, ownRendering) {
|
|
932
990
|
// A Dirent row renders through its dyn view: Node's `Dirent { ... }`
|
|
933
|
-
// with the Symbol(type) key.
|
|
991
|
+
// with the Symbol(type) key. So do TextEncoder and TextDecoder, through
|
|
992
|
+
// their handles' inspectors.
|
|
934
993
|
if (t.kind === "record") {
|
|
935
994
|
const shape = lowerer.shapes.get(t.shapeId);
|
|
936
|
-
if (shape && isDirentShape(shape)) {
|
|
995
|
+
if (shape && (isDirentShape(shape) || recordTextCodecClass(shape) !== null)) {
|
|
937
996
|
return {
|
|
938
997
|
kind: "libCall",
|
|
939
998
|
fn: "insp.dyn",
|
|
@@ -1096,6 +1155,14 @@ export function typeReachesItself(lowerer, t) {
|
|
|
1096
1155
|
};
|
|
1097
1156
|
return walk(t);
|
|
1098
1157
|
}
|
|
1158
|
+
/** Whether a record shape carries an accessor getter, whose result can be
|
|
1159
|
+
* the walked value itself. */
|
|
1160
|
+
function shapeHasGetter(lowerer, shapeId) {
|
|
1161
|
+
const shape = lowerer.shapes.get(shapeId);
|
|
1162
|
+
if (!shape)
|
|
1163
|
+
return false;
|
|
1164
|
+
return shape.fields.some((f) => accessorSlotProp(f.name)?.kind === "get" && f.type.kind === "func");
|
|
1165
|
+
}
|
|
1099
1166
|
/** True when a value of `t` can be cyclic: `t` or any type reachable from
|
|
1100
1167
|
* it reaches itself. */
|
|
1101
1168
|
export function typeReachesCycle(lowerer, t) {
|
|
@@ -1249,6 +1316,24 @@ export function typeReachesCustomInspect(lowerer, t) {
|
|
|
1249
1316
|
};
|
|
1250
1317
|
return walk(t);
|
|
1251
1318
|
}
|
|
1319
|
+
/** Whether a `t` value can reach a TextEncoder or TextDecoder, whose
|
|
1320
|
+
* handles print through Node's custom inspectors. */
|
|
1321
|
+
function typeReachesTextCodec(lowerer, t) {
|
|
1322
|
+
const seen = new Set();
|
|
1323
|
+
const walk = (u) => {
|
|
1324
|
+
const k = typeKey(u);
|
|
1325
|
+
if (seen.has(k))
|
|
1326
|
+
return false;
|
|
1327
|
+
seen.add(k);
|
|
1328
|
+
if (u.kind === "record") {
|
|
1329
|
+
const shape = lowerer.shapes.get(u.shapeId);
|
|
1330
|
+
if (shape && recordTextCodecClass(shape) !== null)
|
|
1331
|
+
return true;
|
|
1332
|
+
}
|
|
1333
|
+
return typeConstituents(lowerer, u).some(walk);
|
|
1334
|
+
};
|
|
1335
|
+
return walk(t);
|
|
1336
|
+
}
|
|
1252
1337
|
/** `%util.inspCustom.<n>(v, r, d): string` — formatValue's custom hook
|
|
1253
1338
|
* over a class whose instances have a `[util.inspect.custom]` method:
|
|
1254
1339
|
* with ctx.customInspect set, the method's result (a string re-indented
|
|
@@ -1482,8 +1567,11 @@ function inspectHelper(lowerer, t, loc) {
|
|
|
1482
1567
|
// order), seen-push after begin, and refWrap around end's result (end
|
|
1483
1568
|
// adds the <ref *N> prefix on values the walk found circular). Acyclic types
|
|
1484
1569
|
// keep the zero-cost path.
|
|
1570
|
+
// An accessor's getter answers any value — the walked value itself
|
|
1571
|
+
// included — which no declared field type shows, so a shape with a
|
|
1572
|
+
// getter keeps Node's circular bookkeeping on.
|
|
1485
1573
|
const onCycle = (t.kind === "record" || t.kind === "array" || t.kind === "map" || t.kind === "object") &&
|
|
1486
|
-
typeReachesItself(lowerer, t);
|
|
1574
|
+
(typeReachesItself(lowerer, t) || (t.kind === "record" && shapeHasGetter(lowerer, t.shapeId)));
|
|
1487
1575
|
const begin = () => [
|
|
1488
1576
|
exprStmt({ kind: "libCall", fn: "insp.begin", args: [rPlus1()], type: { kind: "void" }, loc }),
|
|
1489
1577
|
...(onCycle
|
|
@@ -1581,6 +1669,15 @@ function inspectHelper(lowerer, t, loc) {
|
|
|
1581
1669
|
const i = () => varRef("i.0", F64, loc);
|
|
1582
1670
|
const next = () => varRef("next.0", F64, loc);
|
|
1583
1671
|
const hasMore = () => lt(i(), n());
|
|
1672
|
+
// The render's maxArrayLength: entries show while the output holds
|
|
1673
|
+
// fewer than the limit, at every nesting level (Node's ctx).
|
|
1674
|
+
const limit = () => ({
|
|
1675
|
+
kind: "libCall",
|
|
1676
|
+
fn: "insp.maxArrayLength",
|
|
1677
|
+
args: [],
|
|
1678
|
+
type: F64,
|
|
1679
|
+
loc,
|
|
1680
|
+
});
|
|
1584
1681
|
// A foreign element (state 3) holds a value outside the element type.
|
|
1585
1682
|
const foreignElements = elementMayBeForeign(lowerer, t.elem);
|
|
1586
1683
|
const foreign = () => ({
|
|
@@ -1651,7 +1748,7 @@ function inspectHelper(lowerer, t, loc) {
|
|
|
1651
1748
|
kind: "logical",
|
|
1652
1749
|
op: "&&",
|
|
1653
1750
|
left: hasMore(),
|
|
1654
|
-
right: lt(shown(),
|
|
1751
|
+
right: lt(shown(), limit()),
|
|
1655
1752
|
type: BOOL,
|
|
1656
1753
|
loc,
|
|
1657
1754
|
},
|
|
@@ -1788,16 +1885,71 @@ function inspectHelper(lowerer, t, loc) {
|
|
|
1788
1885
|
break;
|
|
1789
1886
|
}
|
|
1790
1887
|
if (shape.tuple) {
|
|
1791
|
-
// Tuples ARE arrays to Node: bracket form, array-extras grouping
|
|
1792
|
-
|
|
1888
|
+
// Tuples ARE arrays to Node: bracket form, array-extras grouping,
|
|
1889
|
+
// and the same maxArrayLength bound on the entries shown.
|
|
1890
|
+
const count = shape.fields.length;
|
|
1891
|
+
if (count === 0) {
|
|
1793
1892
|
body = [ret(strLit("[]", loc))];
|
|
1794
1893
|
break;
|
|
1795
1894
|
}
|
|
1796
|
-
|
|
1797
|
-
|
|
1798
|
-
|
|
1895
|
+
locals.push({ id: "lim.0", name: "lim", type: F64, mutable: false });
|
|
1896
|
+
const lim = () => varRef("lim.0", F64, loc);
|
|
1897
|
+
const lt = (left, right) => ({
|
|
1898
|
+
kind: "bin",
|
|
1899
|
+
op: "<",
|
|
1900
|
+
left,
|
|
1901
|
+
right,
|
|
1902
|
+
type: BOOL,
|
|
1903
|
+
loc,
|
|
1904
|
+
});
|
|
1905
|
+
const bounded = () => lt(lim(), numLit(count, loc));
|
|
1906
|
+
body = [
|
|
1907
|
+
depthGate("[Array]"),
|
|
1908
|
+
{
|
|
1909
|
+
kind: "varDecl",
|
|
1910
|
+
localId: "lim.0",
|
|
1911
|
+
init: { kind: "libCall", fn: "insp.maxArrayLength", args: [], type: F64, loc },
|
|
1912
|
+
loc,
|
|
1913
|
+
},
|
|
1914
|
+
...begin(),
|
|
1915
|
+
];
|
|
1916
|
+
for (let i = 0; i < count; i++) {
|
|
1917
|
+
const f = shape.fields[i];
|
|
1918
|
+
body.push({
|
|
1919
|
+
kind: "if",
|
|
1920
|
+
cond: lt(numLit(i, loc), lim()),
|
|
1921
|
+
then: [
|
|
1922
|
+
entry(child(f.type, get(f.name, f.type)), isNumberFlag(lowerer, f.type, () => get(f.name, f.type), loc)),
|
|
1923
|
+
],
|
|
1924
|
+
else_: null,
|
|
1925
|
+
loc,
|
|
1926
|
+
});
|
|
1799
1927
|
}
|
|
1800
|
-
body.push(
|
|
1928
|
+
body.push({
|
|
1929
|
+
kind: "if",
|
|
1930
|
+
cond: bounded(),
|
|
1931
|
+
then: [
|
|
1932
|
+
entry({
|
|
1933
|
+
kind: "libCall",
|
|
1934
|
+
fn: "insp.moreItems",
|
|
1935
|
+
args: [
|
|
1936
|
+
{
|
|
1937
|
+
kind: "bin",
|
|
1938
|
+
op: "-",
|
|
1939
|
+
left: numLit(count, loc),
|
|
1940
|
+
right: lim(),
|
|
1941
|
+
type: F64,
|
|
1942
|
+
loc,
|
|
1943
|
+
},
|
|
1944
|
+
],
|
|
1945
|
+
type: STRING,
|
|
1946
|
+
loc,
|
|
1947
|
+
}, boolLit(false, loc)),
|
|
1948
|
+
],
|
|
1949
|
+
else_: null,
|
|
1950
|
+
loc,
|
|
1951
|
+
});
|
|
1952
|
+
body.push(ret(end(strLit("", loc), strLit("[", loc), strLit("]", loc), true, bounded())));
|
|
1801
1953
|
break;
|
|
1802
1954
|
}
|
|
1803
1955
|
if (shape.indexValue && shape.fields.length === 0) {
|
|
@@ -1908,9 +2060,238 @@ function inspectHelper(lowerer, t, loc) {
|
|
|
1908
2060
|
// reachability can settle this shape after the helper is first
|
|
1909
2061
|
// interned, so rebuild the field walk once metadata is final.
|
|
1910
2062
|
lowerer.keyOrder.observe(t);
|
|
2063
|
+
const accessors = new Map();
|
|
2064
|
+
for (const f of shape.fields) {
|
|
2065
|
+
const slot = accessorSlotProp(f.name);
|
|
2066
|
+
if (!slot || f.type.kind !== "func")
|
|
2067
|
+
continue;
|
|
2068
|
+
const slots = accessors.get(slot.prop) ?? {};
|
|
2069
|
+
if (slot.kind === "get")
|
|
2070
|
+
slots.get = f.type;
|
|
2071
|
+
else
|
|
2072
|
+
slots.set = f.type;
|
|
2073
|
+
accessors.set(slot.prop, slots);
|
|
2074
|
+
}
|
|
2075
|
+
if (accessors.size > 0) {
|
|
2076
|
+
// The getters option, read once per render: the helper is shared
|
|
2077
|
+
// by every call site, so the option is run-time state.
|
|
2078
|
+
locals.push({ id: "gm.0", name: "gm", type: F64, mutable: false });
|
|
2079
|
+
for (let i = 0; i < accessors.size; i++) {
|
|
2080
|
+
locals.push({ id: `a.${i}`, name: "a", type: STRING, mutable: true }, { id: `ae.${i}`, name: "ae", type: CAUGHT, mutable: false });
|
|
2081
|
+
}
|
|
2082
|
+
}
|
|
2083
|
+
const ACCESSOR_PRIMITIVES = new Set([
|
|
2084
|
+
"f64",
|
|
2085
|
+
"string",
|
|
2086
|
+
"bool",
|
|
2087
|
+
"undefinedT",
|
|
2088
|
+
"nullT",
|
|
2089
|
+
"bigint",
|
|
2090
|
+
"symbol",
|
|
2091
|
+
]);
|
|
2092
|
+
let accessorIndex = 0;
|
|
2093
|
+
const accessorValueLocals = new Set();
|
|
2094
|
+
/** `key: <label>` for an accessor property, invoking its getter when
|
|
2095
|
+
* the getters option names it: the result renders by kind (Node's
|
|
2096
|
+
* formatProperty), a throw as `[Label: <Inspection threw (err)>]`. */
|
|
2097
|
+
const accessorEntry = (name, slots) => {
|
|
2098
|
+
const index = accessorIndex++;
|
|
2099
|
+
const strId = `a.${index}`;
|
|
2100
|
+
const caughtId = `ae.${index}`;
|
|
2101
|
+
const label = slots.get ? (slots.set ? "Getter/Setter" : "Getter") : "Setter";
|
|
2102
|
+
const s = () => varRef(strId, STRING, loc);
|
|
2103
|
+
const entryOf = (value) => entry(concatAll([strLit(`${inspectKey(name)}: `, loc), value], loc), boolLit(false, loc));
|
|
2104
|
+
const getType = slots.get;
|
|
2105
|
+
if (getType === undefined) {
|
|
2106
|
+
return [
|
|
2107
|
+
{ kind: "varDecl", localId: strId, init: strLit(`[${label}]`, loc), loc },
|
|
2108
|
+
entryOf(s()),
|
|
2109
|
+
];
|
|
2110
|
+
}
|
|
2111
|
+
const called = {
|
|
2112
|
+
kind: "callValue",
|
|
2113
|
+
callee: {
|
|
2114
|
+
kind: "recordGet",
|
|
2115
|
+
obj: v(),
|
|
2116
|
+
shapeId: t.shapeId,
|
|
2117
|
+
field: `%get:${name}`,
|
|
2118
|
+
type: getType,
|
|
2119
|
+
loc,
|
|
2120
|
+
},
|
|
2121
|
+
args: [],
|
|
2122
|
+
type: getType.ret,
|
|
2123
|
+
loc,
|
|
2124
|
+
};
|
|
2125
|
+
const resultT = getType.ret;
|
|
2126
|
+
// What the getter answered renders by RUNTIME kind (Node's
|
|
2127
|
+
// formatProperty): a null and the primitives `[Label: <primitive>]`,
|
|
2128
|
+
// an object or a function `[Label] <value>`. A checker union
|
|
2129
|
+
// dispatches on the arm that holds; a checked-dynamic answer is
|
|
2130
|
+
// classified by the runtime. A getter that returns nothing runs for
|
|
2131
|
+
// its effects and renders Node's `[Getter: undefined]`.
|
|
2132
|
+
const primitiveText = (armT, value) => concatAll([strLit(`[${label}: `, loc), child(armT, value), strLit("]", loc)], loc);
|
|
2133
|
+
const rendered = (armT, value) => {
|
|
2134
|
+
if (armT.kind === "dyn")
|
|
2135
|
+
return {
|
|
2136
|
+
kind: "libCall",
|
|
2137
|
+
fn: "insp.accessorValue",
|
|
2138
|
+
args: [value, strLit(label, loc), rPlus1(), d()],
|
|
2139
|
+
type: STRING,
|
|
2140
|
+
loc,
|
|
2141
|
+
};
|
|
2142
|
+
return ACCESSOR_PRIMITIVES.has(armT.kind)
|
|
2143
|
+
? primitiveText(armT, value)
|
|
2144
|
+
: concatAll([strLit(`[${label}] `, loc), child(armT, value)], loc);
|
|
2145
|
+
};
|
|
2146
|
+
// The getter runs in an inspection context of its own: util.inspect
|
|
2147
|
+
// calls INSIDE it start from Node's fresh defaults and must leave
|
|
2148
|
+
// this walk's options, frames and circular bookkeeping alone. What
|
|
2149
|
+
// it answered renders in THIS context, at the property's level.
|
|
2150
|
+
const valueId = `av.${index}`;
|
|
2151
|
+
const tokenId = `at.${index}`;
|
|
2152
|
+
const hasValue = resultT.kind !== "void";
|
|
2153
|
+
if (hasValue && !accessorValueLocals.has(valueId)) {
|
|
2154
|
+
accessorValueLocals.add(valueId);
|
|
2155
|
+
// Declared by the try's varDecl, so the answer's release is the
|
|
2156
|
+
// try's; nothing reads it outside.
|
|
2157
|
+
locals.push({ id: valueId, name: "av", type: resultT, mutable: false });
|
|
2158
|
+
}
|
|
2159
|
+
if (!accessorValueLocals.has(tokenId)) {
|
|
2160
|
+
accessorValueLocals.add(tokenId);
|
|
2161
|
+
locals.push({ id: tokenId, name: "at", type: F64, mutable: true });
|
|
2162
|
+
}
|
|
2163
|
+
const val = () => varRef(valueId, resultT, loc);
|
|
2164
|
+
const render = [];
|
|
2165
|
+
if (resultT.kind === "void") {
|
|
2166
|
+
render.push({
|
|
2167
|
+
kind: "assign",
|
|
2168
|
+
localId: strId,
|
|
2169
|
+
value: strLit(`[${label}: undefined]`, loc),
|
|
2170
|
+
loc,
|
|
2171
|
+
});
|
|
2172
|
+
}
|
|
2173
|
+
else if (resultT.kind === "union") {
|
|
2174
|
+
const def = lowerer.unions.get(resultT.unionId);
|
|
2175
|
+
if (!def)
|
|
2176
|
+
throw new InternalCompilerError(`inspect of unknown union ${resultT.unionId}`);
|
|
2177
|
+
// The result is read once, then the arm holding decides the form.
|
|
2178
|
+
def.arms.forEach((arm, tag) => {
|
|
2179
|
+
const narrowed = {
|
|
2180
|
+
kind: "unionNarrow",
|
|
2181
|
+
unionId: resultT.unionId,
|
|
2182
|
+
tag,
|
|
2183
|
+
value: val(),
|
|
2184
|
+
type: arm,
|
|
2185
|
+
loc,
|
|
2186
|
+
};
|
|
2187
|
+
render.push({
|
|
2188
|
+
kind: "if",
|
|
2189
|
+
cond: {
|
|
2190
|
+
kind: "unionIsTag",
|
|
2191
|
+
unionId: resultT.unionId,
|
|
2192
|
+
tag,
|
|
2193
|
+
negated: false,
|
|
2194
|
+
value: val(),
|
|
2195
|
+
type: BOOL,
|
|
2196
|
+
loc,
|
|
2197
|
+
},
|
|
2198
|
+
then: [{ kind: "assign", localId: strId, value: rendered(arm, narrowed), loc }],
|
|
2199
|
+
else_: null,
|
|
2200
|
+
loc,
|
|
2201
|
+
});
|
|
2202
|
+
});
|
|
2203
|
+
}
|
|
2204
|
+
else {
|
|
2205
|
+
render.push({ kind: "assign", localId: strId, value: rendered(resultT, val()), loc });
|
|
2206
|
+
}
|
|
2207
|
+
const threw = concatAll([
|
|
2208
|
+
strLit(`[${label}: <Inspection threw (`, loc),
|
|
2209
|
+
child(DYN, {
|
|
2210
|
+
kind: "caughtToDyn",
|
|
2211
|
+
value: varRef(caughtId, CAUGHT, loc),
|
|
2212
|
+
type: DYN,
|
|
2213
|
+
loc,
|
|
2214
|
+
}),
|
|
2215
|
+
strLit(")>]", loc),
|
|
2216
|
+
], loc);
|
|
2217
|
+
// Node's condition reads the option's truthiness first: `true`
|
|
2218
|
+
// runs every getter, 'get' the ones without a setter and 'set' the
|
|
2219
|
+
// ones with one.
|
|
2220
|
+
const mode = (n) => ({
|
|
2221
|
+
kind: "bin",
|
|
2222
|
+
op: "===",
|
|
2223
|
+
left: varRef("gm.0", F64, loc),
|
|
2224
|
+
right: numLit(n, loc),
|
|
2225
|
+
type: BOOL,
|
|
2226
|
+
loc,
|
|
2227
|
+
});
|
|
2228
|
+
const either = (a, b) => ({
|
|
2229
|
+
kind: "logical",
|
|
2230
|
+
op: "||",
|
|
2231
|
+
left: a,
|
|
2232
|
+
right: b,
|
|
2233
|
+
type: BOOL,
|
|
2234
|
+
loc,
|
|
2235
|
+
});
|
|
2236
|
+
const libStmt = (fn, args = []) => ({
|
|
2237
|
+
kind: "exprStmt",
|
|
2238
|
+
expr: { kind: "libCall", fn, args, type: VOID, loc },
|
|
2239
|
+
loc,
|
|
2240
|
+
});
|
|
2241
|
+
const endCall = libStmt("insp.customCallEnd", [varRef(tokenId, F64, loc)]);
|
|
2242
|
+
return [
|
|
2243
|
+
{ kind: "varDecl", localId: strId, init: strLit(`[${label}]`, loc), loc },
|
|
2244
|
+
{
|
|
2245
|
+
kind: "if",
|
|
2246
|
+
cond: slots.set ? either(mode(1), mode(3)) : either(mode(1), mode(2)),
|
|
2247
|
+
then: [
|
|
2248
|
+
libStmt("insp.mark"),
|
|
2249
|
+
{
|
|
2250
|
+
kind: "assign",
|
|
2251
|
+
localId: tokenId,
|
|
2252
|
+
value: { kind: "libCall", fn: "insp.customCallBegin", args: [], type: F64, loc },
|
|
2253
|
+
loc,
|
|
2254
|
+
},
|
|
2255
|
+
{
|
|
2256
|
+
// Node's try spans the getter call AND the result's
|
|
2257
|
+
// rendering, so a throw from either answers the threw
|
|
2258
|
+
// label. The call's context ends before the result renders
|
|
2259
|
+
// (it renders in this walk's); the mark puts this walk's
|
|
2260
|
+
// options and frames back when the rendering throws and
|
|
2261
|
+
// left them open.
|
|
2262
|
+
kind: "tryCatch",
|
|
2263
|
+
tryBody: [
|
|
2264
|
+
// Declared here, so the answer's release is the try's:
|
|
2265
|
+
// nothing reads it outside.
|
|
2266
|
+
hasValue
|
|
2267
|
+
? { kind: "varDecl", localId: valueId, init: called, loc }
|
|
2268
|
+
: { kind: "exprStmt", expr: called, loc },
|
|
2269
|
+
endCall,
|
|
2270
|
+
...render,
|
|
2271
|
+
libStmt("insp.unwind"),
|
|
2272
|
+
],
|
|
2273
|
+
catchLocalId: caughtId,
|
|
2274
|
+
// A throw from the getter leaves its call open; a throw
|
|
2275
|
+
// from the rendering leaves frames open. The mark returns
|
|
2276
|
+
// this walk to where it was either way.
|
|
2277
|
+
catchBody: [
|
|
2278
|
+
libStmt("insp.unwind"),
|
|
2279
|
+
{ kind: "assign", localId: strId, value: threw, loc },
|
|
2280
|
+
],
|
|
2281
|
+
finallyBody: null,
|
|
2282
|
+
loc,
|
|
2283
|
+
},
|
|
2284
|
+
],
|
|
2285
|
+
else_: null,
|
|
2286
|
+
loc,
|
|
2287
|
+
},
|
|
2288
|
+
entryOf(s()),
|
|
2289
|
+
];
|
|
2290
|
+
};
|
|
1911
2291
|
rebuildShapeOrderBody = () => {
|
|
1912
2292
|
const current = lowerer.shapes.get(t.shapeId) ?? shape;
|
|
1913
|
-
|
|
2293
|
+
accessorIndex = 0;
|
|
2294
|
+
const order = current.accessorOrder ?? current.declaredOrder ?? current.fields.map((f) => f.name);
|
|
1914
2295
|
const byName = new Map(current.fields.map((f) => [f.name, f.type]));
|
|
1915
2296
|
// Optional fields render only while present (an omitted or
|
|
1916
2297
|
// deleted property is not shown; an explicit undefined is). A
|
|
@@ -1933,13 +2314,27 @@ function inspectHelper(lowerer, t, loc) {
|
|
|
1933
2314
|
});
|
|
1934
2315
|
}
|
|
1935
2316
|
body.push(depthGate("[Object]"), ...begin());
|
|
1936
|
-
|
|
1937
|
-
|
|
2317
|
+
if (accessors.size > 0) {
|
|
2318
|
+
body.push({
|
|
2319
|
+
kind: "varDecl",
|
|
2320
|
+
localId: "gm.0",
|
|
2321
|
+
init: { kind: "libCall", fn: "insp.gettersMode", args: [], type: F64, loc },
|
|
2322
|
+
loc,
|
|
2323
|
+
});
|
|
2324
|
+
}
|
|
2325
|
+
// One walk per key order (see perKeyOrder). An accessor-carrying
|
|
2326
|
+
// shape enumerates in accessorOrder, exactly as its
|
|
2327
|
+
// checked-dynamic copy does (dyn.ts).
|
|
2328
|
+
const orders = current.accessorOrder !== undefined ? [current.accessorOrder] : shapeKeyOrders(current);
|
|
1938
2329
|
const walks = orders.map(() => []);
|
|
1939
2330
|
for (const [k, fname] of orders.flatMap((order, k) => order.map((name) => [k, name]))) {
|
|
1940
2331
|
const ft = byName.get(fname);
|
|
1941
|
-
if (!ft)
|
|
2332
|
+
if (!ft) {
|
|
2333
|
+
const slots = accessors.get(fname);
|
|
2334
|
+
if (slots)
|
|
2335
|
+
walks[k].push(...accessorEntry(fname, slots));
|
|
1942
2336
|
continue;
|
|
2337
|
+
}
|
|
1943
2338
|
const show = entry(concatAll([strLit(`${inspectKey(fname)}: `, loc), child(ft, get(fname, ft))], loc), boolLit(false, loc));
|
|
1944
2339
|
const present = lowerer.recordFieldPresent(v(), t.shapeId, fname, loc);
|
|
1945
2340
|
walks[k].push(present.kind === "recordHas"
|
|
@@ -1980,11 +2375,20 @@ function inspectHelper(lowerer, t, loc) {
|
|
|
1980
2375
|
const keyT = isMap
|
|
1981
2376
|
? t.key
|
|
1982
2377
|
: t.elem;
|
|
2378
|
+
// Node's maxArrayLength bounds the entries shown; the tail counts the
|
|
2379
|
+
// entries past the limit.
|
|
2380
|
+
const limit = () => ({
|
|
2381
|
+
kind: "libCall",
|
|
2382
|
+
fn: "insp.maxArrayLength",
|
|
2383
|
+
args: [],
|
|
2384
|
+
type: F64,
|
|
2385
|
+
loc,
|
|
2386
|
+
});
|
|
1983
2387
|
const hasMore = () => ({
|
|
1984
2388
|
kind: "bin",
|
|
1985
2389
|
op: ">",
|
|
1986
2390
|
left: n(),
|
|
1987
|
-
right:
|
|
2391
|
+
right: limit(),
|
|
1988
2392
|
type: BOOL,
|
|
1989
2393
|
loc,
|
|
1990
2394
|
});
|
|
@@ -2040,7 +2444,7 @@ function inspectHelper(lowerer, t, loc) {
|
|
|
2040
2444
|
},
|
|
2041
2445
|
{
|
|
2042
2446
|
kind: "if",
|
|
2043
|
-
cond: { kind: "bin", op: "===", left: c(), right:
|
|
2447
|
+
cond: { kind: "bin", op: "===", left: c(), right: limit(), type: BOOL, loc },
|
|
2044
2448
|
then: [{ kind: "break", loc }],
|
|
2045
2449
|
else_: null,
|
|
2046
2450
|
loc,
|
|
@@ -2062,9 +2466,7 @@ function inspectHelper(lowerer, t, loc) {
|
|
|
2062
2466
|
entry({
|
|
2063
2467
|
kind: "libCall",
|
|
2064
2468
|
fn: "insp.moreItems",
|
|
2065
|
-
args: [
|
|
2066
|
-
{ kind: "bin", op: "-", left: n(), right: numLit(100, loc), type: F64, loc },
|
|
2067
|
-
],
|
|
2469
|
+
args: [{ kind: "bin", op: "-", left: n(), right: limit(), type: F64, loc }],
|
|
2068
2470
|
type: STRING,
|
|
2069
2471
|
loc,
|
|
2070
2472
|
}, boolLit(false, loc)),
|
|
@@ -2332,8 +2734,30 @@ function inspectHelper(lowerer, t, loc) {
|
|
|
2332
2734
|
});
|
|
2333
2735
|
}
|
|
2334
2736
|
lowerer.liftedFns.push(fn);
|
|
2737
|
+
if (t.kind === "record" && recordMayKeepSource(lowerer, t))
|
|
2738
|
+
registerLinkedHelper(lowerer, fn, t.shapeId, "inspect");
|
|
2335
2739
|
return name;
|
|
2336
2740
|
}
|
|
2741
|
+
/** The rendering of `value` at recursion `r` and depth budget `d`: its
|
|
2742
|
+
* type's inspect helper, or the checked-dynamic view's rendering when the
|
|
2743
|
+
* type has no inspect lowering (a record with a function field). */
|
|
2744
|
+
export function inspectHelperCall(lowerer, value, r, d, loc) {
|
|
2745
|
+
if (inspectSupport(lowerer, value.type, new Set(), { recursive: false }) !== null)
|
|
2746
|
+
return {
|
|
2747
|
+
kind: "libCall",
|
|
2748
|
+
fn: "insp.dyn",
|
|
2749
|
+
args: [{ kind: "dynFrom", value, liveRef: true, type: DYN, loc }, r, d],
|
|
2750
|
+
type: STRING,
|
|
2751
|
+
loc,
|
|
2752
|
+
};
|
|
2753
|
+
return {
|
|
2754
|
+
kind: "call",
|
|
2755
|
+
callee: inspectHelper(lowerer, value.type, loc),
|
|
2756
|
+
args: [value, r, d],
|
|
2757
|
+
type: STRING,
|
|
2758
|
+
loc,
|
|
2759
|
+
};
|
|
2760
|
+
}
|
|
2337
2761
|
/* ── the console/format top-level value rendering ────────────────────── */
|
|
2338
2762
|
/** Node's formatWithOptions REST-ARG rule over one statically-typed value
|
|
2339
2763
|
* (console.log's non-format arguments, util.format's %s and trailing
|
|
@@ -2502,9 +2926,13 @@ function parseInspectOptions(lowerer, node, recursive, dir = false, atRunTime =
|
|
|
2502
2926
|
breakLength: 80,
|
|
2503
2927
|
compact: 3,
|
|
2504
2928
|
sorted: false,
|
|
2929
|
+
maxArrayLength: 100,
|
|
2930
|
+
maxStringLength: 10000,
|
|
2505
2931
|
runtime: false,
|
|
2506
2932
|
depthKind: 0,
|
|
2507
2933
|
customInspect: !dir,
|
|
2934
|
+
showHidden: false,
|
|
2935
|
+
getters: 0,
|
|
2508
2936
|
};
|
|
2509
2937
|
if (!node || (ts.isIdentifier(node) && node.text === "undefined"))
|
|
2510
2938
|
return options;
|
|
@@ -2607,11 +3035,92 @@ function parseInspectOptions(lowerer, node, recursive, dir = false, atRunTime =
|
|
|
2607
3035
|
}
|
|
2608
3036
|
options.breakLength = n;
|
|
2609
3037
|
}
|
|
3038
|
+
else if (key === "maxStringLength") {
|
|
3039
|
+
if (value.kind === ts.SyntaxKind.NullKeyword ||
|
|
3040
|
+
(ts.isIdentifier(value) && value.text === "Infinity")) {
|
|
3041
|
+
// Node resolves null to Infinity: every character shows.
|
|
3042
|
+
options.maxStringLength = Infinity;
|
|
3043
|
+
}
|
|
3044
|
+
else {
|
|
3045
|
+
const n = numeric();
|
|
3046
|
+
if (n === null && atRunTime) {
|
|
3047
|
+
options.runtime = true;
|
|
3048
|
+
continue;
|
|
3049
|
+
}
|
|
3050
|
+
if (n === null || !Number.isInteger(n) || n < 0) {
|
|
3051
|
+
lowerer.noLowering(`${surface} with this maxStringLength option`, value, "maxStringLength must be a non-negative integer literal (or null)");
|
|
3052
|
+
}
|
|
3053
|
+
options.maxStringLength = n;
|
|
3054
|
+
}
|
|
3055
|
+
}
|
|
3056
|
+
else if (key === "maxArrayLength") {
|
|
3057
|
+
if (value.kind === ts.SyntaxKind.NullKeyword ||
|
|
3058
|
+
(ts.isIdentifier(value) && value.text === "Infinity")) {
|
|
3059
|
+
// Node resolves null to Infinity: every element shows.
|
|
3060
|
+
options.maxArrayLength = Infinity;
|
|
3061
|
+
}
|
|
3062
|
+
else {
|
|
3063
|
+
const n = numeric();
|
|
3064
|
+
if (n === null && atRunTime) {
|
|
3065
|
+
options.runtime = true;
|
|
3066
|
+
continue;
|
|
3067
|
+
}
|
|
3068
|
+
if (n === null || !Number.isInteger(n) || n < 0) {
|
|
3069
|
+
lowerer.noLowering(`${surface} with this maxArrayLength option`, value, "maxArrayLength must be a non-negative integer literal (or null)");
|
|
3070
|
+
}
|
|
3071
|
+
options.maxArrayLength = n;
|
|
3072
|
+
}
|
|
3073
|
+
}
|
|
3074
|
+
else if (key === "getters") {
|
|
3075
|
+
// Node reads the option's truthiness first and compares it to true
|
|
3076
|
+
// and to 'get'/'set' after: any other value keeps the labels.
|
|
3077
|
+
const spelled = ts.isStringLiteral(value) ? value.text : null;
|
|
3078
|
+
if (value.kind === ts.SyntaxKind.TrueKeyword)
|
|
3079
|
+
options.getters = 1;
|
|
3080
|
+
else if (value.kind === ts.SyntaxKind.FalseKeyword)
|
|
3081
|
+
options.getters = 0;
|
|
3082
|
+
else if (spelled === "get")
|
|
3083
|
+
options.getters = 2;
|
|
3084
|
+
else if (spelled === "set")
|
|
3085
|
+
options.getters = 3;
|
|
3086
|
+
else if (spelled !== null ||
|
|
3087
|
+
numeric() !== null ||
|
|
3088
|
+
value.kind === ts.SyntaxKind.NullKeyword ||
|
|
3089
|
+
(ts.isIdentifier(value) && value.text === "undefined")) {
|
|
3090
|
+
options.getters = 0;
|
|
3091
|
+
}
|
|
3092
|
+
else if (atRunTime) {
|
|
3093
|
+
options.runtime = true;
|
|
3094
|
+
continue;
|
|
3095
|
+
}
|
|
3096
|
+
else {
|
|
3097
|
+
lowerer.noLowering(`${surface} with this getters option`, value, "getters must be true, false, 'get' or 'set'");
|
|
3098
|
+
}
|
|
3099
|
+
}
|
|
2610
3100
|
else if (!dir &&
|
|
2611
3101
|
key === "customInspect" &&
|
|
2612
3102
|
(value.kind === ts.SyntaxKind.TrueKeyword || value.kind === ts.SyntaxKind.FalseKeyword)) {
|
|
2613
3103
|
options.customInspect = value.kind === ts.SyntaxKind.TrueKeyword;
|
|
2614
3104
|
}
|
|
3105
|
+
else if (key === "showHidden") {
|
|
3106
|
+
if (value.kind === ts.SyntaxKind.FalseKeyword) {
|
|
3107
|
+
// util.inspect's and console.dir's default.
|
|
3108
|
+
}
|
|
3109
|
+
else if (dir) {
|
|
3110
|
+
// console.dir's static entries carry no hidden keys; the option
|
|
3111
|
+
// renders the value's checked-dynamic view instead (dirHidden).
|
|
3112
|
+
if (value.kind !== ts.SyntaxKind.TrueKeyword) {
|
|
3113
|
+
lowerer.noLowering("console.dir with this showHidden option", value, "showHidden must be true or false");
|
|
3114
|
+
}
|
|
3115
|
+
options.showHidden = true;
|
|
3116
|
+
}
|
|
3117
|
+
else {
|
|
3118
|
+
// The hidden entries (an array's [length], a typed array's extras,
|
|
3119
|
+
// non-enumerable and symbol keys) render in the checked-dynamic
|
|
3120
|
+
// walk, so the option takes the runtime reader.
|
|
3121
|
+
options.runtime = true;
|
|
3122
|
+
}
|
|
3123
|
+
}
|
|
2615
3124
|
else if (dir && key === "customInspect") {
|
|
2616
3125
|
// console.dir's own default; only that value is lowered.
|
|
2617
3126
|
if (value.kind !== ts.SyntaxKind.FalseKeyword) {
|
|
@@ -2619,49 +3128,111 @@ function parseInspectOptions(lowerer, node, recursive, dir = false, atRunTime =
|
|
|
2619
3128
|
}
|
|
2620
3129
|
}
|
|
2621
3130
|
else {
|
|
2622
|
-
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)"}`);
|
|
3131
|
+
lowerer.noLowering(`${surface} with the '${key}' option`, prop, `the lowered options are depth (numeric literal or null), colors: false, showHidden (true or false), compact (false or a number), breakLength, maxArrayLength and maxStringLength (a non-negative integer or null), getters (true, false, 'get' or 'set'), ${dir ? "sorted (true or false), and customInspect: false" : "and sorted (true or false)"}`);
|
|
2623
3132
|
}
|
|
2624
3133
|
}
|
|
2625
3134
|
return options;
|
|
2626
3135
|
}
|
|
2627
|
-
/** A render under non-default breakLength/compact/sorted
|
|
2628
|
-
*
|
|
2629
|
-
*
|
|
2630
|
-
*
|
|
2631
|
-
*
|
|
2632
|
-
* try; `tag` names the render for the
|
|
3136
|
+
/** A render under non-default breakLength/compact/sorted/maxArrayLength/
|
|
3137
|
+
* maxStringLength/getters: the value is evaluated first, the options apply
|
|
3138
|
+
* to this render only, and the defaults return however the render ends, an
|
|
3139
|
+
* inspection refusal included. The render runs in a lifted function,
|
|
3140
|
+
* `(v) => { set...; try { return render(v); } finally { restore...; } }`,
|
|
3141
|
+
* since a seqExpr cannot hold the try; `tag` names the render for the
|
|
3142
|
+
* function's key. */
|
|
2633
3143
|
function withInspectLayout(lowerer, options, value, tag, render, loc) {
|
|
2634
|
-
if (options.breakLength === 80 &&
|
|
3144
|
+
if (options.breakLength === 80 &&
|
|
3145
|
+
options.compact === 3 &&
|
|
3146
|
+
!options.sorted &&
|
|
3147
|
+
options.maxArrayLength === 100 &&
|
|
3148
|
+
options.maxStringLength === 10000 &&
|
|
3149
|
+
options.getters === 0)
|
|
2635
3150
|
return render(value);
|
|
2636
|
-
const key = `layout:${tag}:${typeKey(value.type)}:${options.breakLength}:${options.compact}:${options.sorted}:${options.depth}`;
|
|
3151
|
+
const key = `layout:${tag}:${typeKey(value.type)}:${options.breakLength}:${options.compact}:${options.sorted}:${options.maxArrayLength}:${options.maxStringLength}:${options.getters}:${options.depth}`;
|
|
2637
3152
|
let name = lowerer.inspectHelpers.get(key);
|
|
2638
3153
|
if (name === undefined) {
|
|
2639
3154
|
name = keyedHelperName(lowerer, "%util.inspLayout", key);
|
|
2640
3155
|
lowerer.inspectHelpers.set(key, name);
|
|
2641
|
-
const layout = (breakLength, compact, sorted) => ({
|
|
3156
|
+
const layout = (breakLength, compact, sorted, maxArrayLength) => ({
|
|
2642
3157
|
kind: "exprStmt",
|
|
2643
3158
|
expr: {
|
|
2644
3159
|
kind: "libCall",
|
|
2645
3160
|
fn: "insp.layout",
|
|
2646
|
-
args: [
|
|
3161
|
+
args: [
|
|
3162
|
+
numLit(breakLength, loc),
|
|
3163
|
+
numLit(compact, loc),
|
|
3164
|
+
boolLit(sorted, loc),
|
|
3165
|
+
numLit(maxArrayLength, loc),
|
|
3166
|
+
],
|
|
2647
3167
|
type: VOID,
|
|
2648
3168
|
loc,
|
|
2649
3169
|
},
|
|
2650
3170
|
loc,
|
|
2651
3171
|
});
|
|
3172
|
+
const locals = [{ id: "v.0", name: "v", type: value.type, mutable: false }];
|
|
3173
|
+
const apply = [
|
|
3174
|
+
layout(options.breakLength, options.compact, options.sorted, options.maxArrayLength),
|
|
3175
|
+
];
|
|
3176
|
+
const restore = [layout(80, 3, false, 100)];
|
|
3177
|
+
if (options.maxStringLength !== 10000) {
|
|
3178
|
+
// insp.maxStringLength answers the previous value.
|
|
3179
|
+
const previous = `previous.${locals.length}`;
|
|
3180
|
+
locals.push({ id: previous, name: "previous", type: F64, mutable: false });
|
|
3181
|
+
const limit = (arg) => ({
|
|
3182
|
+
kind: "libCall",
|
|
3183
|
+
fn: "insp.maxStringLength",
|
|
3184
|
+
args: [arg],
|
|
3185
|
+
type: F64,
|
|
3186
|
+
loc,
|
|
3187
|
+
});
|
|
3188
|
+
apply.push({
|
|
3189
|
+
kind: "varDecl",
|
|
3190
|
+
localId: previous,
|
|
3191
|
+
init: limit(numLit(options.maxStringLength, loc)),
|
|
3192
|
+
loc,
|
|
3193
|
+
});
|
|
3194
|
+
restore.unshift({
|
|
3195
|
+
kind: "exprStmt",
|
|
3196
|
+
expr: limit(varRef(previous, F64, loc)),
|
|
3197
|
+
loc,
|
|
3198
|
+
});
|
|
3199
|
+
}
|
|
3200
|
+
if (options.getters !== 0) {
|
|
3201
|
+
// insp.getters answers the previous value.
|
|
3202
|
+
const previous = `previous.${locals.length}`;
|
|
3203
|
+
locals.push({ id: previous, name: "previous", type: F64, mutable: false });
|
|
3204
|
+
const getters = (arg) => ({
|
|
3205
|
+
kind: "libCall",
|
|
3206
|
+
fn: "insp.getters",
|
|
3207
|
+
args: [arg],
|
|
3208
|
+
type: F64,
|
|
3209
|
+
loc,
|
|
3210
|
+
});
|
|
3211
|
+
apply.push({
|
|
3212
|
+
kind: "varDecl",
|
|
3213
|
+
localId: previous,
|
|
3214
|
+
init: getters(numLit(options.getters, loc)),
|
|
3215
|
+
loc,
|
|
3216
|
+
});
|
|
3217
|
+
restore.unshift({
|
|
3218
|
+
kind: "exprStmt",
|
|
3219
|
+
expr: getters(varRef(previous, F64, loc)),
|
|
3220
|
+
loc,
|
|
3221
|
+
});
|
|
3222
|
+
}
|
|
2652
3223
|
lowerer.liftedFns.push({
|
|
2653
3224
|
name,
|
|
2654
3225
|
params: [{ localId: "v.0", name: "v", type: value.type }],
|
|
2655
3226
|
returnType: STRING,
|
|
2656
|
-
locals
|
|
3227
|
+
locals,
|
|
2657
3228
|
body: [
|
|
2658
|
-
|
|
3229
|
+
...apply,
|
|
2659
3230
|
{
|
|
2660
3231
|
kind: "tryCatch",
|
|
2661
3232
|
tryBody: [{ kind: "return", value: render(varRef("v.0", value.type, loc)), loc }],
|
|
2662
3233
|
catchBody: null,
|
|
2663
3234
|
catchLocalId: null,
|
|
2664
|
-
finallyBody:
|
|
3235
|
+
finallyBody: restore,
|
|
2665
3236
|
loc,
|
|
2666
3237
|
},
|
|
2667
3238
|
],
|
|
@@ -2788,14 +3359,18 @@ function lowerRuntimeInspect(lowerer, args, loc) {
|
|
|
2788
3359
|
* walk that refuses a Buffer anywhere inside. */
|
|
2789
3360
|
export function lowerInspectValue(lowerer, valueNode, optionsNode, loc, dir) {
|
|
2790
3361
|
const surface = dir ? "console.dir" : "util.inspect";
|
|
3362
|
+
// console.dir's showHidden renders the checked-dynamic walk with its
|
|
3363
|
+
// hidden entries, so the baked forms below must not swallow the option.
|
|
3364
|
+
const dirPreview = dir ? parseInspectOptions(lowerer, optionsNode, false, dir) : null;
|
|
2791
3365
|
// Inline function/class literals and direct declared names render as
|
|
2792
3366
|
// their baked forms; other function-typed values fence below.
|
|
2793
3367
|
const direct = directCallableInspect(lowerer, valueNode, loc);
|
|
2794
|
-
if (direct) {
|
|
3368
|
+
if (direct && !dirPreview?.showHidden) {
|
|
2795
3369
|
parseInspectOptions(lowerer, optionsNode, false, dir);
|
|
2796
3370
|
return direct;
|
|
2797
3371
|
}
|
|
2798
|
-
if (ts.isArrowFunction(valueNode) || ts.isFunctionExpression(valueNode))
|
|
3372
|
+
if ((ts.isArrowFunction(valueNode) || ts.isFunctionExpression(valueNode)) &&
|
|
3373
|
+
!dirPreview?.showHidden) {
|
|
2799
3374
|
parseInspectOptions(lowerer, optionsNode, false, dir);
|
|
2800
3375
|
return strLit(valueNode.kind === ts.SyntaxKind.FunctionExpression &&
|
|
2801
3376
|
valueNode.name
|
|
@@ -2811,6 +3386,23 @@ export function lowerInspectValue(lowerer, valueNode, optionsNode, loc, dir) {
|
|
|
2811
3386
|
const name = jsFuncNameOf(valueNode);
|
|
2812
3387
|
value = { kind: "dynFrom", value, type: DYN, ...(name !== null ? { fnName: name } : {}), loc };
|
|
2813
3388
|
}
|
|
3389
|
+
if (dirPreview?.showHidden) {
|
|
3390
|
+
// console.dir's hidden entries (an array's [length], a typed array's
|
|
3391
|
+
// extras, non-enumerable and symbol keys) render in the checked-dynamic
|
|
3392
|
+
// walk with custom inspection off, dir's default; the value needs a
|
|
3393
|
+
// checked view to reach it.
|
|
3394
|
+
if (value.type.kind !== "dyn" && !lowerer.dynConvertible(value.type)) {
|
|
3395
|
+
lowerer.noLowering(`console.dir with showHidden of '${lowerer.fmt(value.type)}' values`, valueNode, "the hidden entries render through the value's checked-dynamic view, which this type has no conversion to");
|
|
3396
|
+
}
|
|
3397
|
+
const input = value.type.kind === "dyn" ? value : { kind: "dynFrom", value, type: DYN, loc };
|
|
3398
|
+
return withInspectLayout(lowerer, dirPreview, input, "dirHidden", (v) => ({
|
|
3399
|
+
kind: "libCall",
|
|
3400
|
+
fn: "console.dirHidden",
|
|
3401
|
+
args: [v, numLit(dirPreview.depth, loc)],
|
|
3402
|
+
type: STRING,
|
|
3403
|
+
loc,
|
|
3404
|
+
}), loc);
|
|
3405
|
+
}
|
|
2814
3406
|
if (value.type.kind === "bytes") {
|
|
2815
3407
|
// One runtime representation serves Buffer AND Uint8Array; their
|
|
2816
3408
|
// renderings differ (<Buffer aa> vs Uint8Array(1) [ 170 ]), so the
|
|
@@ -2852,36 +3444,60 @@ export function lowerInspectValue(lowerer, valueNode, optionsNode, loc, dir) {
|
|
|
2852
3444
|
// unbounded depth given as Infinity or undefined, and customInspect:
|
|
2853
3445
|
// false (console.dir's default), apply around the render when the value
|
|
2854
3446
|
// can reach a custom method; the previous settings return afterwards.
|
|
2855
|
-
const reachesCustom = typeReachesCustomInspect(lowerer, value.type) ||
|
|
3447
|
+
const reachesCustom = typeReachesCustomInspect(lowerer, value.type) ||
|
|
3448
|
+
typeReachesDyn(lowerer, value.type) ||
|
|
3449
|
+
typeReachesTextCodec(lowerer, value.type);
|
|
2856
3450
|
const depthContext = reachesCustom && depth === Infinity && options.depthKind !== 1;
|
|
2857
3451
|
const customContext = reachesCustom && !options.customInspect;
|
|
2858
3452
|
if (depthContext || customContext) {
|
|
2859
|
-
|
|
2860
|
-
|
|
2861
|
-
|
|
2862
|
-
|
|
2863
|
-
|
|
2864
|
-
|
|
2865
|
-
|
|
2866
|
-
|
|
2867
|
-
|
|
2868
|
-
|
|
2869
|
-
|
|
2870
|
-
|
|
2871
|
-
|
|
2872
|
-
|
|
2873
|
-
|
|
2874
|
-
|
|
2875
|
-
|
|
2876
|
-
|
|
2877
|
-
|
|
2878
|
-
|
|
2879
|
-
|
|
2880
|
-
|
|
2881
|
-
|
|
2882
|
-
type
|
|
2883
|
-
|
|
2884
|
-
|
|
3453
|
+
// The settings apply in a lifted function, `(v) => { set; try { return
|
|
3454
|
+
// render(v); } finally { restore; } }`, so the previous ones return on
|
|
3455
|
+
// every exit, an inspection refusal's throw included (a seqExpr cannot
|
|
3456
|
+
// hold the try).
|
|
3457
|
+
const key = `context:${typeKey(value.type)}:${customContext}:${depthContext}:${options.depthKind}:${options.breakLength}:${options.compact}:${options.sorted}:${options.maxArrayLength}:${options.maxStringLength}:${options.getters}:${depth}`;
|
|
3458
|
+
let name = lowerer.inspectHelpers.get(key);
|
|
3459
|
+
if (name === undefined) {
|
|
3460
|
+
name = keyedHelperName(lowerer, "%util.inspContext", key);
|
|
3461
|
+
lowerer.inspectHelpers.set(key, name);
|
|
3462
|
+
const locals = [{ id: "v.0", name: "v", type: value.type, mutable: false }];
|
|
3463
|
+
const stmts = [];
|
|
3464
|
+
const restore = [];
|
|
3465
|
+
const setting = (fn, arg, type) => {
|
|
3466
|
+
const previous = `previous.${locals.length}`;
|
|
3467
|
+
locals.push({ id: previous, name: "previous", type, mutable: false });
|
|
3468
|
+
const call = (a) => ({ kind: "libCall", fn, args: [a], type, loc });
|
|
3469
|
+
stmts.push({ kind: "varDecl", localId: previous, init: call(arg), loc });
|
|
3470
|
+
restore.push({ kind: "exprStmt", expr: call(varRef(previous, type, loc)), loc });
|
|
3471
|
+
};
|
|
3472
|
+
if (customContext)
|
|
3473
|
+
setting("insp.customInspect", boolLit(false, loc), BOOL);
|
|
3474
|
+
if (depthContext)
|
|
3475
|
+
setting("insp.depthKind", numLit(options.depthKind, loc), F64);
|
|
3476
|
+
const input = varRef("v.0", value.type, loc);
|
|
3477
|
+
stmts.push({
|
|
3478
|
+
kind: "tryCatch",
|
|
3479
|
+
tryBody: [
|
|
3480
|
+
{
|
|
3481
|
+
kind: "return",
|
|
3482
|
+
value: withInspectLayout(lowerer, options, input, "inspect", (v) => inspectExpr(lowerer, value.type, v, numLit(0, loc), numLit(depth, loc), loc), loc),
|
|
3483
|
+
loc,
|
|
3484
|
+
},
|
|
3485
|
+
],
|
|
3486
|
+
catchBody: null,
|
|
3487
|
+
catchLocalId: null,
|
|
3488
|
+
finallyBody: restore.reverse(),
|
|
3489
|
+
loc,
|
|
3490
|
+
});
|
|
3491
|
+
lowerer.liftedFns.push({
|
|
3492
|
+
name,
|
|
3493
|
+
params: [{ localId: "v.0", name: "v", type: value.type }],
|
|
3494
|
+
returnType: STRING,
|
|
3495
|
+
locals,
|
|
3496
|
+
body: stmts,
|
|
3497
|
+
loc,
|
|
3498
|
+
});
|
|
3499
|
+
}
|
|
3500
|
+
return { kind: "call", callee: name, args: [value], type: STRING, loc };
|
|
2885
3501
|
}
|
|
2886
3502
|
if (dir && value.type.kind === "dyn") {
|
|
2887
3503
|
return withInspectLayout(lowerer, options, value, "dirDyn", (input) => ({
|
|
@@ -2958,17 +3574,18 @@ function formatSValue(lowerer, node, value, depth, loc) {
|
|
|
2958
3574
|
return inspectExpr(lowerer, t, value, numLit(0, loc), numLit(depth, loc), loc);
|
|
2959
3575
|
}
|
|
2960
3576
|
/** %O (depth 2) / %o (showHidden, depth 4) — inspect with the spec's
|
|
2961
|
-
* option deltas. A
|
|
2962
|
-
*
|
|
2963
|
-
*
|
|
2964
|
-
*
|
|
3577
|
+
* option deltas. A showHidden argument that the checked-dynamic tree can
|
|
3578
|
+
* hold (arrays — whose hidden [length] entry the static rendering has no
|
|
3579
|
+
* lowering for — records, maps, sets, typed arrays and nested dynamic
|
|
3580
|
+
* values) renders through the runtime's showHidden walk; the static
|
|
3581
|
+
* rendering covers the default %O. */
|
|
2965
3582
|
function formatOArg(lowerer, node, depth, loc) {
|
|
2966
3583
|
const value = lowerer.lowerExpr(node);
|
|
2967
|
-
if (depth === 4 && value.type.kind === "dyn") {
|
|
3584
|
+
if (depth === 4 && (value.type.kind === "dyn" || lowerer.dynConvertible(value.type))) {
|
|
2968
3585
|
return {
|
|
2969
3586
|
kind: "libCall",
|
|
2970
3587
|
fn: "insp.dynHidden",
|
|
2971
|
-
args: [value, numLit(4, loc)],
|
|
3588
|
+
args: [lowerer.coerceToExpected(value, DYN), numLit(4, loc)],
|
|
2972
3589
|
type: STRING,
|
|
2973
3590
|
loc,
|
|
2974
3591
|
};
|
|
@@ -2984,6 +3601,8 @@ function formatOArg(lowerer, node, depth, loc) {
|
|
|
2984
3601
|
lowerer.noLowering("util.format %o over values with [util.inspect.custom] methods", node, "%o passes showHidden to the methods — use %O");
|
|
2985
3602
|
}
|
|
2986
3603
|
if (depth === 4 && typeTreeHasHidden(lowerer, value.type, new Set())) {
|
|
3604
|
+
// The static rendering below has no showHidden entries; the tree is
|
|
3605
|
+
// not one the checked-dynamic walk can hold.
|
|
2987
3606
|
lowerer.noLowering("util.format %o over arrays", node, "%o renders with showHidden (arrays gain a hidden [length] entry) — use %O for the default rendering, or pass the value as unknown");
|
|
2988
3607
|
}
|
|
2989
3608
|
return inspectExpr(lowerer, value.type, value, numLit(0, loc), numLit(depth, loc), loc);
|
|
@@ -3578,7 +4197,9 @@ export function heldFormatArgs(lowerer, argNodes, loc) {
|
|
|
3578
4197
|
lowerer.noLowering(unconvertibleSurface(refused.type), refused.node, UNCONVERTIBLE_HINT);
|
|
3579
4198
|
return { stmts, args, specifies, format, joinable };
|
|
3580
4199
|
}
|
|
3581
|
-
/** Arrays anywhere in the tree — the
|
|
4200
|
+
/** Arrays, byte views or checked-dynamic values anywhere in the tree — the
|
|
4201
|
+
* static %o (showHidden) gate, for the types the checked-dynamic walk
|
|
4202
|
+
* cannot hold. */
|
|
3582
4203
|
function typeTreeHasHidden(lowerer, t, visiting) {
|
|
3583
4204
|
switch (t.kind) {
|
|
3584
4205
|
case "array":
|