@scriptc/compiler 0.4.5 → 0.4.6
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/assert-strict.d.ts +47 -0
- package/ambient/node-fallback/assert.d.ts +86 -0
- package/ambient/node-fallback/async_hooks.d.ts +41 -0
- package/ambient/node-fallback/buffer.d.ts +23 -0
- package/ambient/node-fallback/child_process.d.ts +242 -0
- package/ambient/node-fallback/cluster.d.ts +17 -0
- package/ambient/node-fallback/constants.d.ts +15 -0
- package/ambient/node-fallback/crypto.d.ts +837 -0
- package/ambient/node-fallback/dgram.d.ts +58 -0
- package/ambient/node-fallback/diagnostics_channel.d.ts +87 -0
- package/ambient/node-fallback/dns-promises.d.ts +27 -0
- package/ambient/node-fallback/dns.d.ts +65 -0
- package/ambient/node-fallback/events.d.ts +60 -0
- package/ambient/node-fallback/fs-promises.d.ts +225 -0
- package/ambient/node-fallback/fs.d.ts +641 -0
- package/ambient/node-fallback/graceful-fs.d.ts +9 -0
- package/ambient/node-fallback/http.d.ts +326 -0
- package/ambient/node-fallback/http2.d.ts +816 -0
- package/ambient/node-fallback/https.d.ts +59 -0
- package/ambient/node-fallback/module.d.ts +10 -0
- package/ambient/node-fallback/net.d.ts +374 -0
- package/ambient/node-fallback/os.d.ts +288 -0
- package/ambient/node-fallback/path-posix.d.ts +22 -0
- package/ambient/node-fallback/path-win32.d.ts +22 -0
- package/ambient/node-fallback/path.d.ts +55 -0
- package/ambient/node-fallback/process.d.ts +11 -0
- package/ambient/node-fallback/punycode.d.ts +18 -0
- package/ambient/node-fallback/querystring.d.ts +55 -0
- package/ambient/node-fallback/stream-consumers.d.ts +21 -0
- package/ambient/node-fallback/stream-promises.d.ts +28 -0
- package/ambient/node-fallback/stream-web.d.ts +36 -0
- package/ambient/node-fallback/stream.d.ts +644 -0
- package/ambient/node-fallback/string_decoder.d.ts +20 -0
- package/ambient/node-fallback/test.d.ts +236 -0
- package/ambient/node-fallback/timers-promises.d.ts +31 -0
- package/ambient/node-fallback/timers.d.ts +28 -0
- package/ambient/node-fallback/tls.d.ts +169 -0
- package/ambient/node-fallback/url.d.ts +95 -0
- package/ambient/node-fallback/util-types.d.ts +50 -0
- package/ambient/node-fallback/util.d.ts +416 -0
- package/ambient/node-fallback/v8.d.ts +43 -0
- package/ambient/node-fallback/worker_threads.d.ts +113 -0
- package/ambient/node-fallback/zlib.d.ts +422 -0
- package/ambient/scriptc-node-fallback.d.ts +224 -6688
- package/dist/backend/cycle-analysis.js +4 -0
- package/dist/backend/cycle-analysis.js.map +1 -1
- package/dist/backend/executable-features.d.ts +1 -1
- package/dist/backend/executable-features.js +15 -2
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/huge-text.d.ts +16 -0
- package/dist/backend/huge-text.js +103 -0
- package/dist/backend/huge-text.js.map +1 -0
- package/dist/backend/huge-text.test.d.ts +1 -0
- package/dist/backend/huge-text.test.js +73 -0
- package/dist/backend/huge-text.test.js.map +1 -0
- package/dist/backend/library-pack.js +1 -1
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/link-plan-core.d.ts +10 -0
- package/dist/backend/link-plan-core.js +14 -2
- package/dist/backend/link-plan-core.js.map +1 -1
- package/dist/backend/link-plan-core.test.d.ts +1 -0
- package/dist/backend/link-plan-core.test.js +20 -0
- package/dist/backend/link-plan-core.test.js.map +1 -0
- package/dist/backend/link-plan.d.ts +8 -0
- package/dist/backend/link-plan.js +7 -0
- package/dist/backend/link-plan.js.map +1 -1
- package/dist/backend/linker.js +37 -14
- package/dist/backend/linker.js.map +1 -1
- package/dist/backend/lld.d.ts +13 -0
- package/dist/backend/lld.js +18 -1
- package/dist/backend/lld.js.map +1 -1
- package/dist/backend/lld.test.js +7 -1
- package/dist/backend/lld.test.js.map +1 -1
- package/dist/backend/llvm/alloc.d.ts +2 -0
- package/dist/backend/llvm/alloc.js +1 -1
- package/dist/backend/llvm/alloc.js.map +1 -1
- package/dist/backend/llvm/arenas.d.ts +78 -0
- package/dist/backend/llvm/arenas.js +313 -0
- package/dist/backend/llvm/arenas.js.map +1 -0
- package/dist/backend/llvm/arenas.test.d.ts +1 -0
- package/dist/backend/llvm/arenas.test.js +140 -0
- package/dist/backend/llvm/arenas.test.js.map +1 -0
- package/dist/backend/llvm/blocks.d.ts +11 -1
- package/dist/backend/llvm/blocks.js +23 -5
- package/dist/backend/llvm/blocks.js.map +1 -1
- package/dist/backend/llvm/bytes-headers.d.ts +19 -0
- package/dist/backend/llvm/bytes-headers.js +55 -0
- package/dist/backend/llvm/bytes-headers.js.map +1 -0
- package/dist/backend/llvm/bytes-loop-versions.d.ts +4 -3
- package/dist/backend/llvm/bytes-loop-versions.js +42 -7
- package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.test.js +39 -4
- package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.d.ts +5 -0
- package/dist/backend/llvm/call-lifetimes.js +43 -8
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.test.js +26 -0
- package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/checked-narrows.d.ts +3 -0
- package/dist/backend/llvm/checked-narrows.js +8 -1
- package/dist/backend/llvm/checked-narrows.js.map +1 -1
- package/dist/backend/llvm/class-unions.d.ts +21 -0
- package/dist/backend/llvm/class-unions.js +141 -0
- package/dist/backend/llvm/class-unions.js.map +1 -0
- package/dist/backend/llvm/class-unions.test.d.ts +1 -0
- package/dist/backend/llvm/class-unions.test.js +137 -0
- package/dist/backend/llvm/class-unions.test.js.map +1 -0
- package/dist/backend/llvm/classes.d.ts +46 -8
- package/dist/backend/llvm/classes.js +259 -32
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +4 -0
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +23 -0
- package/dist/backend/llvm/common.js +34 -0
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.test.js +39 -0
- package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
- package/dist/backend/llvm/constant-choices.d.ts +32 -0
- package/dist/backend/llvm/constant-choices.js +209 -0
- package/dist/backend/llvm/constant-choices.js.map +1 -0
- package/dist/backend/llvm/constant-choices.test.d.ts +1 -0
- package/dist/backend/llvm/constant-choices.test.js +94 -0
- package/dist/backend/llvm/constant-choices.test.js.map +1 -0
- package/dist/backend/llvm/counted-loops.d.ts +14 -2
- package/dist/backend/llvm/counted-loops.js +60 -7
- package/dist/backend/llvm/counted-loops.js.map +1 -1
- package/dist/backend/llvm/counted-loops.test.d.ts +1 -0
- package/dist/backend/llvm/counted-loops.test.js +34 -0
- package/dist/backend/llvm/counted-loops.test.js.map +1 -0
- package/dist/backend/llvm/cpu-dispatch.d.ts +26 -0
- package/dist/backend/llvm/cpu-dispatch.js +279 -0
- package/dist/backend/llvm/cpu-dispatch.js.map +1 -0
- package/dist/backend/llvm/dense-array-access.d.ts +13 -2
- package/dist/backend/llvm/dense-array-access.js +60 -6
- package/dist/backend/llvm/dense-array-access.js.map +1 -1
- package/dist/backend/llvm/dyn-handle-tags.test.js +40 -14
- package/dist/backend/llvm/dyn-handle-tags.test.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +28 -2
- package/dist/backend/llvm/dyn.js +176 -27
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.js +25 -3
- package/dist/backend/llvm/emit-function.js.map +1 -1
- package/dist/backend/llvm/emit-journal.d.ts +1 -0
- package/dist/backend/llvm/emit-journal.js.map +1 -1
- package/dist/backend/llvm/emit-module.d.ts +5 -3
- package/dist/backend/llvm/emit-module.js +362 -74
- package/dist/backend/llvm/emit-module.js.map +1 -1
- package/dist/backend/llvm/emit-statements.js +327 -59
- package/dist/backend/llvm/emit-statements.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +223 -33
- package/dist/backend/llvm/emitter.js +713 -100
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +20 -1
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +32 -6
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.d.ts +9 -1
- package/dist/backend/llvm/expr-bytes.js +105 -9
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-callbacks.d.ts +1 -1
- package/dist/backend/llvm/expr-callbacks.js +29 -22
- package/dist/backend/llvm/expr-callbacks.js.map +1 -1
- package/dist/backend/llvm/expr-calls.d.ts +0 -4
- package/dist/backend/llvm/expr-calls.js +116 -14
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.js +77 -12
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-context.d.ts +22 -0
- package/dist/backend/llvm/expr-control.d.ts +4 -0
- package/dist/backend/llvm/expr-control.js +485 -426
- package/dist/backend/llvm/expr-control.js.map +1 -1
- package/dist/backend/llvm/expr-dispatch.js +4 -0
- package/dist/backend/llvm/expr-dispatch.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +3 -3
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.d.ts +6 -0
- package/dist/backend/llvm/expr-primitives.js +119 -58
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.test.js +11 -2
- package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
- package/dist/backend/llvm/expr-records.d.ts +36 -4
- package/dist/backend/llvm/expr-records.js +249 -37
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +124 -7
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.test.js +1 -1
- package/dist/backend/llvm/expr-stream-bridges.test.js.map +1 -1
- package/dist/backend/llvm/expr-stream-callbacks.js +13 -14
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/frame-escapes.d.ts +11 -0
- package/dist/backend/llvm/frame-escapes.js +219 -0
- package/dist/backend/llvm/frame-escapes.js.map +1 -0
- package/dist/backend/llvm/function-layout.d.ts +15 -0
- package/dist/backend/llvm/function-layout.js +40 -0
- package/dist/backend/llvm/function-layout.js.map +1 -0
- package/dist/backend/llvm/heap-census.d.ts +34 -0
- package/dist/backend/llvm/heap-census.js +163 -0
- package/dist/backend/llvm/heap-census.js.map +1 -0
- package/dist/backend/llvm/inline-arrays.d.ts +41 -0
- package/dist/backend/llvm/inline-arrays.js +195 -0
- package/dist/backend/llvm/inline-arrays.js.map +1 -0
- package/dist/backend/llvm/int32-kind-loops.js +2 -0
- package/dist/backend/llvm/int32-kind-loops.js.map +1 -1
- package/dist/backend/llvm/integer-clones.d.ts +32 -5
- package/dist/backend/llvm/integer-clones.js +237 -44
- package/dist/backend/llvm/integer-clones.js.map +1 -1
- package/dist/backend/llvm/integer-clones.test.js +120 -0
- package/dist/backend/llvm/integer-clones.test.js.map +1 -1
- package/dist/backend/llvm/iterative-teardown.test.d.ts +1 -0
- package/dist/backend/llvm/iterative-teardown.test.js +62 -0
- package/dist/backend/llvm/iterative-teardown.test.js.map +1 -0
- package/dist/backend/llvm/js-ic.js +246 -62
- package/dist/backend/llvm/js-ic.js.map +1 -1
- package/dist/backend/llvm/lib-connect.js +1 -1
- package/dist/backend/llvm/lib-connect.js.map +1 -1
- package/dist/backend/llvm/lib-datagram.js +2 -2
- package/dist/backend/llvm/lib-datagram.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +153 -16
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.d.ts +8 -0
- package/dist/backend/llvm/lib-filesystem.js +48 -4
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-http2.js +4 -3
- package/dist/backend/llvm/lib-http2.js.map +1 -1
- package/dist/backend/llvm/lib-lookup.js +1 -1
- package/dist/backend/llvm/lib-lookup.js.map +1 -1
- package/dist/backend/llvm/lib-network.js +15 -1
- package/dist/backend/llvm/lib-network.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +32 -8
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.d.ts +3 -0
- package/dist/backend/llvm/lib-shared.js +191 -28
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +1 -1
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +15 -1
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.test.js +1 -1
- package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
- package/dist/backend/llvm/local-extents.d.ts +22 -0
- package/dist/backend/llvm/local-extents.js +102 -0
- package/dist/backend/llvm/local-extents.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.js +15 -2
- package/dist/backend/llvm/local-union-storage.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.test.js +1 -1
- package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
- package/dist/backend/llvm/loop-callees.d.ts +21 -0
- package/dist/backend/llvm/loop-callees.js +119 -0
- package/dist/backend/llvm/loop-callees.js.map +1 -0
- package/dist/backend/llvm/loop-callees.test.d.ts +1 -0
- package/dist/backend/llvm/loop-callees.test.js +65 -0
- package/dist/backend/llvm/loop-callees.test.js.map +1 -0
- package/dist/backend/llvm/loop-entry-versions.d.ts +17 -0
- package/dist/backend/llvm/loop-entry-versions.js +185 -0
- package/dist/backend/llvm/loop-entry-versions.js.map +1 -0
- package/dist/backend/llvm/map-number-lookup.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.test.js +13 -4
- package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.d.ts +11 -0
- package/dist/backend/llvm/map-read-lifetimes.js +51 -1
- package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.test.js +6 -3
- package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.d.ts +67 -10
- package/dist/backend/llvm/nullable-unions.js +218 -22
- package/dist/backend/llvm/nullable-unions.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.test.js +124 -1
- package/dist/backend/llvm/nullable-unions.test.js.map +1 -1
- package/dist/backend/llvm/periodic-guards.d.ts +16 -0
- package/dist/backend/llvm/periodic-guards.js +91 -0
- package/dist/backend/llvm/periodic-guards.js.map +1 -0
- package/dist/backend/llvm/periodic-guards.test.d.ts +1 -0
- package/dist/backend/llvm/periodic-guards.test.js +64 -0
- package/dist/backend/llvm/periodic-guards.test.js.map +1 -0
- package/dist/backend/llvm/publish.d.ts +12 -2
- package/dist/backend/llvm/publish.js +15 -8
- package/dist/backend/llvm/publish.js.map +1 -1
- package/dist/backend/llvm/rebound-parameters.d.ts +4 -1
- package/dist/backend/llvm/rebound-parameters.js +17 -1
- package/dist/backend/llvm/rebound-parameters.js.map +1 -1
- package/dist/backend/llvm/receivers.d.ts +7 -0
- package/dist/backend/llvm/receivers.js +77 -10
- package/dist/backend/llvm/receivers.js.map +1 -1
- package/dist/backend/llvm/record-union-keys.test.js +29 -0
- package/dist/backend/llvm/record-union-keys.test.js.map +1 -1
- package/dist/backend/llvm/record-views.d.ts +29 -0
- package/dist/backend/llvm/record-views.js +249 -0
- package/dist/backend/llvm/record-views.js.map +1 -0
- package/dist/backend/llvm/record-views.test.d.ts +1 -0
- package/dist/backend/llvm/record-views.test.js +118 -0
- package/dist/backend/llvm/record-views.test.js.map +1 -0
- package/dist/backend/llvm/reference-writes.js +21 -0
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/reference-writes.test.js +42 -0
- package/dist/backend/llvm/reference-writes.test.js.map +1 -1
- package/dist/backend/llvm/regex-matchers.d.ts +5 -1
- package/dist/backend/llvm/regex-matchers.js +173 -21
- package/dist/backend/llvm/regex-matchers.js.map +1 -1
- package/dist/backend/llvm/regex-matchers.test.js +39 -1
- package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
- package/dist/backend/llvm/region-groups.d.ts +67 -0
- package/dist/backend/llvm/region-groups.js +1719 -0
- package/dist/backend/llvm/region-groups.js.map +1 -0
- package/dist/backend/llvm/region-groups.test.d.ts +1 -0
- package/dist/backend/llvm/region-groups.test.js +197 -0
- package/dist/backend/llvm/region-groups.test.js.map +1 -0
- package/dist/backend/llvm/region-ir.d.ts +31 -0
- package/dist/backend/llvm/region-ir.js +256 -0
- package/dist/backend/llvm/region-ir.js.map +1 -0
- package/dist/backend/llvm/region-sites.d.ts +20 -0
- package/dist/backend/llvm/region-sites.js +327 -0
- package/dist/backend/llvm/region-sites.js.map +1 -0
- package/dist/backend/llvm/region-sites.test.d.ts +1 -0
- package/dist/backend/llvm/region-sites.test.js +216 -0
- package/dist/backend/llvm/region-sites.test.js.map +1 -0
- package/dist/backend/llvm/repr-report.d.ts +9 -0
- package/dist/backend/llvm/repr-report.js +143 -0
- package/dist/backend/llvm/repr-report.js.map +1 -0
- package/dist/backend/llvm/repr-report.test.d.ts +1 -0
- package/dist/backend/llvm/repr-report.test.js +62 -0
- package/dist/backend/llvm/repr-report.test.js.map +1 -0
- package/dist/backend/llvm/runtime-registries.test.d.ts +1 -0
- package/dist/backend/llvm/runtime-registries.test.js +88 -0
- package/dist/backend/llvm/runtime-registries.test.js.map +1 -0
- package/dist/backend/llvm/serialized-ir-emission.test.js +1 -0
- package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -1
- package/dist/backend/llvm/shape-union-tags.test.d.ts +1 -0
- package/dist/backend/llvm/shape-union-tags.test.js +75 -0
- package/dist/backend/llvm/shape-union-tags.test.js.map +1 -0
- package/dist/backend/llvm/shapes.d.ts +60 -10
- package/dist/backend/llvm/shapes.js +233 -51
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +37 -18
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/speculative-integers.d.ts +3 -0
- package/dist/backend/llvm/speculative-integers.js +20 -8
- package/dist/backend/llvm/speculative-integers.js.map +1 -1
- package/dist/backend/llvm/split.js +6 -1
- package/dist/backend/llvm/split.js.map +1 -1
- package/dist/backend/llvm/split.test.js +23 -0
- package/dist/backend/llvm/split.test.js.map +1 -1
- package/dist/backend/llvm/stack-callbacks.js +4 -2
- package/dist/backend/llvm/stack-callbacks.js.map +1 -1
- package/dist/backend/llvm/stack-objects.d.ts +12 -3
- package/dist/backend/llvm/stack-objects.js +110 -22
- package/dist/backend/llvm/stack-objects.js.map +1 -1
- package/dist/backend/llvm/stack-objects.test.js +144 -0
- package/dist/backend/llvm/stack-objects.test.js.map +1 -1
- package/dist/backend/llvm/stack-unions.test.js +24 -1
- package/dist/backend/llvm/stack-unions.test.js.map +1 -1
- package/dist/backend/llvm/string-lifetimes.js +2 -1
- package/dist/backend/llvm/string-lifetimes.js.map +1 -1
- package/dist/backend/llvm/string-lifetimes.test.js +1 -1
- package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/string-reads.d.ts +4 -0
- package/dist/backend/llvm/string-reads.js +27 -0
- package/dist/backend/llvm/string-reads.js.map +1 -1
- package/dist/backend/llvm/test-boxed-unions.d.ts +10 -8
- package/dist/backend/llvm/test-boxed-unions.js +20 -25
- package/dist/backend/llvm/test-boxed-unions.js.map +1 -1
- package/dist/backend/llvm/union-repr.js +9 -8
- package/dist/backend/llvm/union-repr.js.map +1 -1
- package/dist/backend/llvm/union-retype.test.js +45 -2
- package/dist/backend/llvm/union-retype.test.js.map +1 -1
- package/dist/backend/llvm/unwind-abi.d.ts +20 -8
- package/dist/backend/llvm/unwind-abi.js +177 -70
- package/dist/backend/llvm/unwind-abi.js.map +1 -1
- package/dist/backend/llvm/unwind-abi.test.js +90 -3
- package/dist/backend/llvm/unwind-abi.test.js.map +1 -1
- package/dist/backend/llvm/walk-borrows.d.ts +3 -2
- package/dist/backend/llvm/walk-borrows.js +2 -2
- package/dist/backend/llvm/walk-borrows.js.map +1 -1
- package/dist/backend/llvm/walk-borrows.test.js +18 -0
- package/dist/backend/llvm/walk-borrows.test.js.map +1 -1
- package/dist/backend/llvm/walkers.d.ts +14 -1
- package/dist/backend/llvm/walkers.js +103 -11
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/llvm/wrapping-sums.d.ts +26 -6
- package/dist/backend/llvm/wrapping-sums.js +64 -12
- package/dist/backend/llvm/wrapping-sums.js.map +1 -1
- package/dist/backend/loop-polls.d.ts +4 -2
- package/dist/backend/loop-polls.js +11 -2
- package/dist/backend/loop-polls.js.map +1 -1
- package/dist/backend/mangle.d.ts +0 -5
- package/dist/backend/mangle.js +0 -9
- package/dist/backend/mangle.js.map +1 -1
- package/dist/backend/may-throw.d.ts +10 -9
- package/dist/backend/may-throw.js +189 -27
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/may-throw.test.js +44 -7
- package/dist/backend/may-throw.test.js.map +1 -1
- package/dist/backend/native/compiler-fingerprint.d.ts +5 -0
- package/dist/backend/native/compiler-fingerprint.js +62 -16
- package/dist/backend/native/compiler-fingerprint.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +31 -8
- package/dist/backend/native/executable.js +56 -32
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/library.js +3 -4
- package/dist/backend/native/library.js.map +1 -1
- package/dist/backend/native/object-merge.d.ts +3 -1
- package/dist/backend/native/object-merge.js +24 -11
- package/dist/backend/native/object-merge.js.map +1 -1
- package/dist/backend/native/program-shards.js +6 -3
- package/dist/backend/native/program-shards.js.map +1 -1
- package/dist/backend/native/runtime-inputs.d.ts +1 -1
- package/dist/backend/native/runtime-inputs.js +3 -0
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native/vendor.d.ts +1 -1
- package/dist/backend/native-codegen-core.d.ts +15 -6
- package/dist/backend/native-codegen-core.js +20 -9
- package/dist/backend/native-codegen-core.js.map +1 -1
- package/dist/backend/native-codegen.js +51 -5
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +82 -8
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +30 -0
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/native-profile.d.ts +68 -4
- package/dist/backend/native-profile.js +86 -14
- package/dist/backend/native-profile.js.map +1 -1
- package/dist/backend/native-profile.test.js +127 -4
- package/dist/backend/native-profile.test.js.map +1 -1
- package/dist/backend/native-toolchain.d.ts +1 -1
- package/dist/backend/native-toolchain.js +1 -1
- package/dist/backend/native-toolchain.js.map +1 -1
- package/dist/backend/native-toolchain.test.js +58 -4
- package/dist/backend/native-toolchain.test.js.map +1 -1
- package/dist/backend/native-tools.d.ts +17 -3
- package/dist/backend/native-tools.js +12 -4
- package/dist/backend/native-tools.js.map +1 -1
- package/dist/backend/native-tools.test.d.ts +1 -0
- package/dist/backend/native-tools.test.js +76 -0
- package/dist/backend/native-tools.test.js.map +1 -0
- package/dist/backend/object-localize.js +69 -9
- package/dist/backend/object-localize.js.map +1 -1
- package/dist/backend/object-localize.test.js +99 -10
- package/dist/backend/object-localize.test.js.map +1 -1
- package/dist/backend/publication.d.ts +2 -0
- package/dist/backend/publication.js +4 -0
- 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 +19 -0
- package/dist/backend/runtime-pack-core.js +23 -3
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +1 -1
- package/dist/backend/runtime-pack.test.js +48 -2
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/target-cpu.d.ts +2 -0
- package/dist/backend/target-cpu.js +4 -0
- package/dist/backend/target-cpu.js.map +1 -1
- package/dist/backend/target-diagnostics.js +1 -19
- package/dist/backend/target-diagnostics.js.map +1 -1
- package/dist/backend/target-diagnostics.test.js +1 -1
- package/dist/backend/target-diagnostics.test.js.map +1 -1
- package/dist/backend/targets.d.ts +28 -0
- package/dist/backend/targets.js +70 -0
- package/dist/backend/targets.js.map +1 -1
- package/dist/backend/targets.test.js +75 -1
- package/dist/backend/targets.test.js.map +1 -1
- package/dist/backend/vendor-archives.d.ts +1 -1
- package/dist/backend/vendor-archives.js +25 -12
- package/dist/backend/vendor-archives.js.map +1 -1
- package/dist/backend/vendor-inputs.d.ts +15 -2
- package/dist/backend/vendor-inputs.js +59 -3
- package/dist/backend/vendor-inputs.js.map +1 -1
- package/dist/backend/vendor-inputs.test.d.ts +1 -0
- package/dist/backend/vendor-inputs.test.js +74 -0
- package/dist/backend/vendor-inputs.test.js.map +1 -0
- package/dist/cli/command.js +95 -5
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/host.d.ts +3 -0
- package/dist/cli/output-options.d.ts +3 -0
- package/dist/cli/output-options.js +8 -2
- package/dist/cli/output-options.js.map +1 -1
- package/dist/cli/usage.d.ts +28 -1
- package/dist/cli/usage.js +56 -6
- package/dist/cli/usage.js.map +1 -1
- package/dist/compat/fetch-profile.d.ts +3 -0
- package/dist/compat/fetch-profile.js +23 -3
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/compile-types.d.ts +45 -0
- package/dist/contracts/check.js +70 -2
- package/dist/contracts/check.js.map +1 -1
- package/dist/contracts/int32-elements.d.ts +2 -1
- package/dist/contracts/int32-elements.js.map +1 -1
- package/dist/coverage/report.d.ts +5 -1
- package/dist/coverage/report.js +83 -2
- package/dist/coverage/report.js.map +1 -1
- package/dist/coverage/verdict-cache.d.ts +2 -0
- package/dist/coverage/verdict-cache.js +5 -10
- package/dist/coverage/verdict-cache.js.map +1 -1
- package/dist/diagnostics/codes.d.ts +145 -0
- package/dist/diagnostics/codes.js +159 -0
- package/dist/diagnostics/codes.js.map +1 -0
- package/dist/diagnostics/codes.test.d.ts +1 -0
- package/dist/diagnostics/codes.test.js +78 -0
- package/dist/diagnostics/codes.test.js.map +1 -0
- package/dist/diagnostics/diagnostic.d.ts +101 -2
- package/dist/diagnostics/diagnostic.js +155 -0
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/dynamic-slots.d.ts +23 -0
- package/dist/diagnostics/dynamic-slots.js +29 -0
- package/dist/diagnostics/dynamic-slots.js.map +1 -0
- package/dist/diagnostics/dynamic-tier.d.ts +6 -0
- package/dist/diagnostics/dynamic-tier.js +8 -1
- package/dist/diagnostics/dynamic-tier.js.map +1 -1
- package/dist/diagnostics/envelope.d.ts +43 -1
- package/dist/diagnostics/envelope.js +19 -1
- package/dist/diagnostics/envelope.js.map +1 -1
- package/dist/diagnostics/envelope.test.js.map +1 -1
- package/dist/diagnostics/render.d.ts +3 -1
- package/dist/diagnostics/render.js +27 -6
- package/dist/diagnostics/render.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +41 -0
- package/dist/executable/executable-cache.js +39 -1
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +4 -1
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/executable/prepare.d.ts +2 -1
- package/dist/executable/prepare.js +421 -10
- package/dist/executable/prepare.js.map +1 -1
- package/dist/frontend/analysis.js +1 -0
- package/dist/frontend/analysis.js.map +1 -1
- package/dist/frontend/canon-map.d.ts +17 -0
- package/dist/frontend/canon-map.js +177 -0
- package/dist/frontend/canon-map.js.map +1 -0
- package/dist/frontend/canon.d.ts +122 -0
- package/dist/frontend/canon.js +462 -0
- package/dist/frontend/canon.js.map +1 -0
- package/dist/frontend/contract-types.d.ts +9 -1
- package/dist/frontend/contract-types.js +46 -4
- package/dist/frontend/contract-types.js.map +1 -1
- package/dist/frontend/decl-projection.d.ts +3 -0
- package/dist/frontend/decl-projection.js +121 -3
- package/dist/frontend/decl-projection.js.map +1 -1
- package/dist/frontend/dts-paths.d.ts +17 -4
- package/dist/frontend/dts-paths.js +149 -5
- package/dist/frontend/dts-paths.js.map +1 -1
- package/dist/frontend/fork-target.js +4 -4
- package/dist/frontend/fork-target.js.map +1 -1
- package/dist/frontend/fork-target.test.js +3 -3
- package/dist/frontend/fork-target.test.js.map +1 -1
- package/dist/frontend/heritage-elements.d.ts +15 -0
- package/dist/frontend/heritage-elements.js +18 -0
- package/dist/frontend/heritage-elements.js.map +1 -0
- package/dist/frontend/heritage-elements.test.d.ts +1 -0
- package/dist/frontend/heritage-elements.test.js +68 -0
- package/dist/frontend/heritage-elements.test.js.map +1 -0
- package/dist/frontend/input-tracker.d.ts +20 -0
- package/dist/frontend/input-tracker.js +74 -4
- package/dist/frontend/input-tracker.js.map +1 -1
- package/dist/frontend/input-tracker.test.js +66 -0
- package/dist/frontend/input-tracker.test.js.map +1 -1
- package/dist/frontend/lowering/any-collection-residue.d.ts +9 -0
- package/dist/frontend/lowering/any-collection-residue.js +42 -0
- package/dist/frontend/lowering/any-collection-residue.js.map +1 -0
- package/dist/frontend/lowering/array-values.d.ts +44 -2
- package/dist/frontend/lowering/array-values.js +193 -3
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/builtin-namespaces.d.ts +6 -2
- package/dist/frontend/lowering/builtin-namespaces.js +28 -6
- package/dist/frontend/lowering/builtin-namespaces.js.map +1 -1
- package/dist/frontend/lowering/builtins/array-classes.d.ts +69 -0
- package/dist/frontend/lowering/builtins/array-classes.js +729 -0
- package/dist/frontend/lowering/builtins/array-classes.js.map +1 -0
- package/dist/frontend/lowering/builtins/callable-aliases.js +4 -0
- package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-methods.js +34 -0
- package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
- package/dist/frontend/lowering/builtins/disposable-stack.js +1 -3
- package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -1
- package/dist/frontend/lowering/builtins/errors.d.ts +13 -9
- package/dist/frontend/lowering/builtins/errors.js +136 -56
- package/dist/frontend/lowering/builtins/errors.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +1 -0
- package/dist/frontend/lowering/builtins/filesystem-calls.js +85 -4
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem.d.ts +11 -6
- package/dist/frontend/lowering/builtins/filesystem.js +270 -24
- package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
- package/dist/frontend/lowering/builtins/json.js +7 -1
- package/dist/frontend/lowering/builtins/json.js.map +1 -1
- package/dist/frontend/lowering/builtins/mime.d.ts +25 -0
- package/dist/frontend/lowering/builtins/mime.js +167 -0
- package/dist/frontend/lowering/builtins/mime.js.map +1 -0
- package/dist/frontend/lowering/builtins/module-bindings.d.ts +3 -0
- package/dist/frontend/lowering/builtins/module-bindings.js +6 -0
- package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-calls.js +79 -12
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-resolution.d.ts +7 -4
- package/dist/frontend/lowering/builtins/module-resolution.js +115 -13
- package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
- package/dist/frontend/lowering/builtins/navigator.d.ts +3 -1
- package/dist/frontend/lowering/builtins/navigator.js +22 -8
- package/dist/frontend/lowering/builtins/navigator.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.js +49 -9
- package/dist/frontend/lowering/builtins/process.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.js +18 -3
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/builtins/promisify-callback.d.ts +6 -2
- package/dist/frontend/lowering/builtins/promisify-callback.js +19 -6
- package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -1
- package/dist/frontend/lowering/builtins/properties.js +23 -5
- package/dist/frontend/lowering/builtins/properties.js.map +1 -1
- package/dist/frontend/lowering/builtins/web-streams-dyn.d.ts +42 -0
- package/dist/frontend/lowering/builtins/web-streams-dyn.js +321 -0
- package/dist/frontend/lowering/builtins/web-streams-dyn.js.map +1 -0
- package/dist/frontend/lowering/builtins/x509.js +35 -5
- package/dist/frontend/lowering/builtins/x509.js.map +1 -1
- package/dist/frontend/lowering/call-arguments.d.ts +14 -1
- package/dist/frontend/lowering/call-arguments.js +84 -70
- package/dist/frontend/lowering/call-arguments.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.js +108 -24
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/class-attributes.js +6 -5
- package/dist/frontend/lowering/class-attributes.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.js +40 -19
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js +1 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
- package/dist/frontend/lowering/class-protocol-dispatch.js +4 -0
- package/dist/frontend/lowering/class-protocol-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-protocols.d.ts +61 -1
- package/dist/frontend/lowering/class-protocols.js +297 -21
- package/dist/frontend/lowering/class-protocols.js.map +1 -1
- package/dist/frontend/lowering/class-to-primitive.d.ts +3 -2
- package/dist/frontend/lowering/class-to-primitive.js +15 -5
- package/dist/frontend/lowering/class-to-primitive.js.map +1 -1
- package/dist/frontend/lowering/coercions/asserted.d.ts +16 -0
- package/dist/frontend/lowering/coercions/asserted.js +79 -0
- package/dist/frontend/lowering/coercions/asserted.js.map +1 -0
- package/dist/frontend/lowering/coercions/function-adapters.d.ts +13 -0
- package/dist/frontend/lowering/coercions/function-adapters.js +70 -3
- package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
- package/dist/frontend/lowering/coercions/state.d.ts +23 -0
- package/dist/frontend/lowering/coercions/state.js +9 -0
- package/dist/frontend/lowering/coercions/state.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural-plans.js +67 -1
- package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.d.ts +10 -0
- package/dist/frontend/lowering/coercions/structural.js +134 -4
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/coercions/unions.d.ts +11 -0
- package/dist/frontend/lowering/coercions/unions.js +83 -4
- package/dist/frontend/lowering/coercions/unions.js.map +1 -1
- package/dist/frontend/lowering/completion-callbacks.js +3 -2
- package/dist/frontend/lowering/completion-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.d.ts +10 -0
- package/dist/frontend/lowering/containers/array-callbacks.js +224 -81
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-concat.d.ts +5 -2
- package/dist/frontend/lowering/containers/array-concat.js +76 -7
- package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.d.ts +9 -4
- package/dist/frontend/lowering/containers/array-construction.js +112 -100
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +193 -45
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/array-pipelines.d.ts +3 -0
- package/dist/frontend/lowering/containers/array-pipelines.js +81 -13
- package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.d.ts +1 -0
- package/dist/frontend/lowering/containers/callback-arguments.js +28 -2
- package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +13 -3
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/filter-predicates.js +34 -3
- package/dist/frontend/lowering/containers/filter-predicates.js.map +1 -1
- package/dist/frontend/lowering/containers/indexed-objects.d.ts +34 -1
- package/dist/frontend/lowering/containers/indexed-objects.js +131 -72
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/cycle-initialization.js +43 -6
- package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
- package/dist/frontend/lowering/decl-origin.d.ts +49 -0
- package/dist/frontend/lowering/decl-origin.js +402 -0
- package/dist/frontend/lowering/decl-origin.js.map +1 -0
- package/dist/frontend/lowering/deferred-module-initializers.d.ts +2 -0
- package/dist/frontend/lowering/deferred-module-initializers.js +7 -0
- package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
- package/dist/frontend/lowering/divergences.js +5 -0
- package/dist/frontend/lowering/divergences.js.map +1 -1
- package/dist/frontend/lowering/dynamic-tier.d.ts +8 -2
- package/dist/frontend/lowering/dynamic-tier.js +111 -3
- package/dist/frontend/lowering/dynamic-tier.js.map +1 -1
- package/dist/frontend/lowering/expressions/array-literals.d.ts +14 -1
- package/dist/frontend/lowering/expressions/array-literals.js +43 -5
- package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/asserted-receiver.d.ts +48 -0
- package/dist/frontend/lowering/expressions/asserted-receiver.js +233 -0
- package/dist/frontend/lowering/expressions/asserted-receiver.js.map +1 -0
- package/dist/frontend/lowering/expressions/binary.js +136 -1
- package/dist/frontend/lowering/expressions/binary.js.map +1 -1
- package/dist/frontend/lowering/expressions/element-access.d.ts +7 -0
- package/dist/frontend/lowering/expressions/element-access.js +363 -12
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/identifiers.d.ts +3 -0
- package/dist/frontend/lowering/expressions/identifiers.js +78 -62
- package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
- package/dist/frontend/lowering/expressions/message-listeners.d.ts +3 -0
- package/dist/frontend/lowering/expressions/message-listeners.js +19 -0
- package/dist/frontend/lowering/expressions/message-listeners.js.map +1 -0
- package/dist/frontend/lowering/expressions/narrowing.js +224 -6
- package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/nullish-assignment.js +5 -2
- package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.d.ts +1 -1
- package/dist/frontend/lowering/expressions/object-literals.js +282 -24
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.d.ts +15 -3
- package/dist/frontend/lowering/expressions/property-access.js +397 -74
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/relational.js +202 -70
- package/dist/frontend/lowering/expressions/relational.js.map +1 -1
- package/dist/frontend/lowering/expressions/typeof.js +9 -1
- package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
- package/dist/frontend/lowering/expressions/union-fields.d.ts +28 -8
- package/dist/frontend/lowering/expressions/union-fields.js +168 -14
- package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
- package/dist/frontend/lowering/frozen-records.d.ts +8 -0
- package/dist/frontend/lowering/frozen-records.js +56 -9
- package/dist/frontend/lowering/frozen-records.js.map +1 -1
- package/dist/frontend/lowering/function-context.d.ts +3 -0
- package/dist/frontend/lowering/function-context.js +4 -1
- package/dist/frontend/lowering/function-context.js.map +1 -1
- package/dist/frontend/lowering/function-returns.d.ts +4 -0
- package/dist/frontend/lowering/function-returns.js +231 -2
- package/dist/frontend/lowering/function-returns.js.map +1 -1
- package/dist/frontend/lowering/generator-delegation.js +3 -2
- package/dist/frontend/lowering/generator-delegation.js.map +1 -1
- package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +26 -0
- package/dist/frontend/lowering/generator-dynamic-dispatch.js +294 -2
- package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.d.ts +10 -0
- package/dist/frontend/lowering/generic-functions.js +67 -7
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/global-values.d.ts +37 -0
- package/dist/frontend/lowering/global-values.js +395 -0
- package/dist/frontend/lowering/global-values.js.map +1 -0
- package/dist/frontend/lowering/handle-properties.js +3 -2
- package/dist/frontend/lowering/handle-properties.js.map +1 -1
- package/dist/frontend/lowering/handle-properties.test.d.ts +1 -0
- package/dist/frontend/lowering/handle-properties.test.js +25 -0
- package/dist/frontend/lowering/handle-properties.test.js.map +1 -0
- package/dist/frontend/lowering/import-meta.d.ts +3 -0
- package/dist/frontend/lowering/import-meta.js +8 -3
- package/dist/frontend/lowering/import-meta.js.map +1 -1
- package/dist/frontend/lowering/iterator-adapters.js +3 -3
- package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.d.ts +2 -0
- package/dist/frontend/lowering/key-order-witness.js +10 -0
- package/dist/frontend/lowering/key-order-witness.js.map +1 -1
- package/dist/frontend/lowering/lower-array-sort.d.ts +5 -1
- package/dist/frontend/lowering/lower-array-sort.js +16 -2
- package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
- package/dist/frontend/lowering/lower-builtin-values.d.ts +7 -0
- package/dist/frontend/lowering/lower-builtin-values.js +65 -16
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.js +222 -24
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +6 -0
- package/dist/frontend/lowering/lower-classes.js +154 -20
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-console.js +25 -2
- package/dist/frontend/lowering/lower-console.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +29 -0
- package/dist/frontend/lowering/lower-exprs.js +544 -24
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +93 -18
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-global-value.d.ts +4 -1
- package/dist/frontend/lowering/lower-global-value.js +10 -3
- package/dist/frontend/lowering/lower-global-value.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.d.ts +44 -4
- package/dist/frontend/lowering/lower-inspect.js +723 -26
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.d.ts +3 -1
- package/dist/frontend/lowering/lower-modules.js +189 -24
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.d.ts +7 -0
- package/dist/frontend/lowering/lower-namespaces.js +23 -0
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-node-island.d.ts +74 -0
- package/dist/frontend/lowering/lower-node-island.js +1931 -0
- package/dist/frontend/lowering/lower-node-island.js.map +1 -0
- package/dist/frontend/lowering/lower-server.js +44 -0
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-shared-modules.d.ts +27 -0
- package/dist/frontend/lowering/lower-shared-modules.js +611 -0
- package/dist/frontend/lowering/lower-shared-modules.js.map +1 -0
- package/dist/frontend/lowering/lower-stdlib.js +85 -9
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +2 -6
- package/dist/frontend/lowering/lower-stmts.js +781 -143
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.js +548 -36
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-timers.js +9 -0
- package/dist/frontend/lowering/lower-timers.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +514 -10
- package/dist/frontend/lowering/lowerer.js +2667 -163
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/lowerer.test.js +44 -1
- package/dist/frontend/lowering/lowerer.test.js.map +1 -1
- package/dist/frontend/lowering/maybe-promise.d.ts +6 -0
- package/dist/frontend/lowering/maybe-promise.js +13 -0
- package/dist/frontend/lowering/maybe-promise.js.map +1 -1
- package/dist/frontend/lowering/module-namespace-elements.d.ts +12 -0
- package/dist/frontend/lowering/module-namespace-elements.js +114 -18
- package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
- package/dist/frontend/lowering/nan-coded-reads.d.ts +11 -0
- package/dist/frontend/lowering/nan-coded-reads.js +45 -2
- package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
- package/dist/frontend/lowering/narrowing-stability.d.ts +4 -0
- package/dist/frontend/lowering/narrowing-stability.js +14 -6
- package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
- package/dist/frontend/lowering/receiver-returns.d.ts +3 -0
- package/dist/frontend/lowering/receiver-returns.js +134 -0
- package/dist/frontend/lowering/receiver-returns.js.map +1 -0
- package/dist/frontend/lowering/record-inherited.d.ts +26 -0
- package/dist/frontend/lowering/record-inherited.js +807 -0
- package/dist/frontend/lowering/record-inherited.js.map +1 -0
- package/dist/frontend/lowering/runtime-optional-elements.d.ts +31 -1
- package/dist/frontend/lowering/runtime-optional-elements.js +105 -13
- package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-guards.d.ts +3 -0
- package/dist/frontend/lowering/runtime-optional-guards.js +35 -7
- package/dist/frontend/lowering/runtime-optional-guards.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-guards.test.js +59 -1
- package/dist/frontend/lowering/runtime-optional-guards.test.js.map +1 -1
- package/dist/frontend/lowering/stable-names.d.ts +8 -0
- package/dist/frontend/lowering/stable-names.js +22 -0
- package/dist/frontend/lowering/stable-names.js.map +1 -1
- package/dist/frontend/lowering/stable-names.test.d.ts +1 -0
- package/dist/frontend/lowering/stable-names.test.js +16 -0
- package/dist/frontend/lowering/stable-names.test.js.map +1 -0
- package/dist/frontend/lowering/static-typeof.d.ts +5 -4
- package/dist/frontend/lowering/static-typeof.js +10 -4
- package/dist/frontend/lowering/static-typeof.js.map +1 -1
- package/dist/frontend/lowering/structural-instances.d.ts +22 -0
- package/dist/frontend/lowering/structural-instances.js +282 -0
- package/dist/frontend/lowering/structural-instances.js.map +1 -0
- package/dist/frontend/lowering/surfaces.d.ts +3 -0
- package/dist/frontend/lowering/surfaces.js +108 -12
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/symbol-fields.d.ts +7 -0
- package/dist/frontend/lowering/symbol-fields.js +32 -0
- package/dist/frontend/lowering/symbol-fields.js.map +1 -1
- package/dist/frontend/lowering/type-failure.d.ts +17 -0
- package/dist/frontend/lowering/type-failure.js +163 -0
- package/dist/frontend/lowering/type-failure.js.map +1 -0
- package/dist/frontend/lowering/typed-arguments.d.ts +5 -6
- package/dist/frontend/lowering/typed-arguments.js +10 -2
- package/dist/frontend/lowering/typed-arguments.js.map +1 -1
- package/dist/frontend/lowering/union-narrow.d.ts +9 -1
- package/dist/frontend/lowering/union-narrow.js +31 -2
- package/dist/frontend/lowering/union-narrow.js.map +1 -1
- package/dist/frontend/lowering/union-retag.test.js +42 -2
- package/dist/frontend/lowering/union-retag.test.js.map +1 -1
- package/dist/frontend/lowering/unit-journal.d.ts +194 -0
- package/dist/frontend/lowering/unit-journal.js +556 -0
- package/dist/frontend/lowering/unit-journal.js.map +1 -0
- package/dist/frontend/lowering/unit-journal.test.d.ts +1 -0
- package/dist/frontend/lowering/unit-journal.test.js +335 -0
- package/dist/frontend/lowering/unit-journal.test.js.map +1 -0
- package/dist/frontend/lowering/width-lift.d.ts +19 -0
- package/dist/frontend/node-api-import.d.ts +21 -0
- package/dist/frontend/node-api-import.js +88 -0
- package/dist/frontend/node-api-import.js.map +1 -0
- package/dist/frontend/npm-static-type-exports-host.js +4 -3
- package/dist/frontend/npm-static-type-exports-host.js.map +1 -1
- package/dist/frontend/npm-static.js +9 -2
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/package-shims.d.ts +6 -2
- package/dist/frontend/package-shims.js +13 -2
- package/dist/frontend/package-shims.js.map +1 -1
- package/dist/frontend/pipeline.d.ts +11 -4
- package/dist/frontend/pipeline.js +249 -26
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/process-fork.d.ts +3 -0
- package/dist/frontend/process-fork.js.map +1 -1
- package/dist/frontend/program-analysis.d.ts +6 -0
- package/dist/frontend/program-analysis.js +4 -0
- package/dist/frontend/program-analysis.js.map +1 -1
- package/dist/frontend/program.d.ts +12 -1
- package/dist/frontend/program.js +256 -36
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/resolve.js +8 -2
- package/dist/frontend/resolve.js.map +1 -1
- package/dist/frontend/shape-inference/analyze.d.ts +23 -1
- package/dist/frontend/shape-inference/analyze.js +982 -97
- package/dist/frontend/shape-inference/analyze.js.map +1 -1
- package/dist/frontend/shape-inference/constant-graphs.d.ts +2 -0
- package/dist/frontend/shape-inference/constant-graphs.js +39 -4
- package/dist/frontend/shape-inference/constant-graphs.js.map +1 -1
- package/dist/frontend/shape-inference/domain.d.ts +2 -0
- package/dist/frontend/shape-inference/domain.js.map +1 -1
- package/dist/frontend/shape-inference/fallback.d.ts +17 -0
- package/dist/frontend/shape-inference/fallback.js +303 -0
- package/dist/frontend/shape-inference/fallback.js.map +1 -0
- package/dist/frontend/shape-inference/index.d.ts +75 -1
- package/dist/frontend/shape-inference/index.js +531 -2
- package/dist/frontend/shape-inference/index.js.map +1 -1
- package/dist/frontend/shape-inference/inferred-checks.d.ts +2 -0
- package/dist/frontend/shape-inference/inferred-checks.js +90 -0
- package/dist/frontend/shape-inference/inferred-checks.js.map +1 -0
- package/dist/frontend/shape-inference/memo.d.ts +30 -0
- package/dist/frontend/shape-inference/memo.js +99 -0
- package/dist/frontend/shape-inference/memo.js.map +1 -0
- package/dist/frontend/shape-inference/overlay.d.ts +81 -0
- package/dist/frontend/shape-inference/overlay.js +1160 -0
- package/dist/frontend/shape-inference/overlay.js.map +1 -0
- package/dist/frontend/shape-inference/registry.test.d.ts +1 -0
- package/dist/frontend/shape-inference/registry.test.js +34 -0
- package/dist/frontend/shape-inference/registry.test.js.map +1 -0
- package/dist/frontend/shape-inference/report.js +42 -8
- package/dist/frontend/shape-inference/report.js.map +1 -1
- package/dist/frontend/shape-inference/static-objects.d.ts +29 -0
- package/dist/frontend/shape-inference/static-objects.js +1951 -0
- package/dist/frontend/shape-inference/static-objects.js.map +1 -0
- package/dist/frontend/tier-analysis.d.ts +53 -1
- package/dist/frontend/tier-analysis.js +133 -0
- package/dist/frontend/tier-analysis.js.map +1 -1
- package/dist/frontend/ts7/api.js +4 -2
- package/dist/frontend/ts7/api.js.map +1 -1
- package/dist/frontend/ts7/ast-node.d.ts +9 -0
- package/dist/frontend/ts7/ast-node.js +42 -10
- package/dist/frontend/ts7/ast-node.js.map +1 -1
- package/dist/frontend/ts7/ast-node.test.js +23 -0
- package/dist/frontend/ts7/ast-node.test.js.map +1 -1
- package/dist/frontend/ts7/ast-wire-protocols.test.d.ts +1 -0
- package/dist/frontend/ts7/ast-wire-protocols.test.js +93 -0
- package/dist/frontend/ts7/ast-wire-protocols.test.js.map +1 -0
- package/dist/frontend/ts7/ast-wire.d.ts +18 -0
- package/dist/frontend/ts7/ast-wire.js +66 -4
- package/dist/frontend/ts7/ast-wire.js.map +1 -1
- package/dist/frontend/ts7/checker-server.d.ts +12 -11
- package/dist/frontend/ts7/checker-server.js +28 -12
- package/dist/frontend/ts7/checker-server.js.map +1 -1
- package/dist/frontend/ts7/checker-server.test.js +8 -3
- package/dist/frontend/ts7/checker-server.test.js.map +1 -1
- package/dist/frontend/ts7/checker.d.ts +4 -0
- package/dist/frontend/ts7/checker.js +9 -0
- package/dist/frontend/ts7/checker.js.map +1 -1
- package/dist/frontend/ts7/checker.test.js +216 -205
- package/dist/frontend/ts7/checker.test.js.map +1 -1
- package/dist/frontend/ts7/lib-diagnostics.d.ts +71 -4
- package/dist/frontend/ts7/lib-diagnostics.js +337 -20
- package/dist/frontend/ts7/lib-diagnostics.js.map +1 -1
- package/dist/frontend/ts7/lib-diagnostics.test.js +268 -5
- package/dist/frontend/ts7/lib-diagnostics.test.js.map +1 -1
- package/dist/frontend/ts7/native-api.d.ts +4 -0
- package/dist/frontend/ts7/native-api.js +36 -1
- package/dist/frontend/ts7/native-api.js.map +1 -1
- package/dist/frontend/ts7/program-host.d.ts +19 -2
- package/dist/frontend/ts7/program-host.js +69 -9
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/program-host.test.js +42 -1
- package/dist/frontend/ts7/program-host.test.js.map +1 -1
- package/dist/frontend/ts7/rpc-filesystem.d.ts +4 -2
- package/dist/frontend/ts7/rpc-filesystem.js +23 -2
- package/dist/frontend/ts7/rpc-filesystem.js.map +1 -1
- package/dist/frontend/ts7/rpc-filesystem.test.js +28 -2
- package/dist/frontend/ts7/rpc-filesystem.test.js.map +1 -1
- package/dist/frontend/ts7/semantic-checker.js +73 -5
- package/dist/frontend/ts7/semantic-checker.js.map +1 -1
- package/dist/frontend/ts7/semantic-checker.test.js +106 -74
- package/dist/frontend/ts7/semantic-checker.test.js.map +1 -1
- package/dist/frontend/ts7/semantic-json.d.ts +2 -6
- package/dist/frontend/ts7/semantic-model-71.test.d.ts +1 -0
- package/dist/frontend/ts7/semantic-model-71.test.js +131 -0
- package/dist/frontend/ts7/semantic-model-71.test.js.map +1 -0
- package/dist/frontend/ts7/semantic-model.d.ts +121 -3
- package/dist/frontend/ts7/semantic-model.js +245 -8
- package/dist/frontend/ts7/semantic-model.js.map +1 -1
- package/dist/frontend/ts7/session.d.ts +19 -1
- package/dist/frontend/ts7/session.js +111 -11
- package/dist/frontend/ts7/session.js.map +1 -1
- package/dist/frontend/ts7/session.test.js +259 -239
- package/dist/frontend/ts7/session.test.js.map +1 -1
- package/dist/frontend/ts7/test-servers.d.ts +12 -0
- package/dist/frontend/ts7/test-servers.js +16 -0
- package/dist/frontend/ts7/test-servers.js.map +1 -0
- package/dist/frontend/tsc-codes.js +6 -3
- package/dist/frontend/tsc-codes.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +61 -1
- package/dist/frontend/type-mapper.js +577 -28
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/frontend/type-patches/command.d.ts +19 -0
- package/dist/frontend/type-patches/command.js +352 -0
- package/dist/frontend/type-patches/command.js.map +1 -0
- package/dist/frontend/type-patches/layer.d.ts +45 -0
- package/dist/frontend/type-patches/layer.js +409 -0
- package/dist/frontend/type-patches/layer.js.map +1 -0
- package/dist/frontend/type-patches/locate.d.ts +41 -0
- package/dist/frontend/type-patches/locate.js +914 -0
- package/dist/frontend/type-patches/locate.js.map +1 -0
- package/dist/frontend/type-patches/locate.test.d.ts +1 -0
- package/dist/frontend/type-patches/locate.test.js +179 -0
- package/dist/frontend/type-patches/locate.test.js.map +1 -0
- package/dist/frontend/type-patches/selector.d.ts +43 -0
- package/dist/frontend/type-patches/selector.js +126 -0
- package/dist/frontend/type-patches/selector.js.map +1 -0
- package/dist/frontend/type-patches/selector.test.d.ts +1 -0
- package/dist/frontend/type-patches/selector.test.js +56 -0
- package/dist/frontend/type-patches/selector.test.js.map +1 -0
- package/dist/frontend/type-patches/semver.d.ts +19 -0
- package/dist/frontend/type-patches/semver.js +221 -0
- package/dist/frontend/type-patches/semver.js.map +1 -0
- package/dist/frontend/type-patches/semver.test.d.ts +1 -0
- package/dist/frontend/type-patches/semver.test.js +47 -0
- package/dist/frontend/type-patches/semver.test.js.map +1 -0
- package/dist/frontend/worker-target.test.js +2 -2
- package/dist/frontend/worker-target.test.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.js +292 -27
- package/dist/index.js.map +1 -1
- package/dist/ir/builtin-effects.js +51 -5
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +4 -3
- package/dist/ir/builtin-signatures.js +277 -12
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/callback-specialization.js +108 -67
- package/dist/ir/callback-specialization.js.map +1 -1
- package/dist/ir/capture-values.d.ts +7 -1
- package/dist/ir/capture-values.js +28 -5
- package/dist/ir/capture-values.js.map +1 -1
- package/dist/ir/char-unit-locals.js +38 -42
- package/dist/ir/char-unit-locals.js.map +1 -1
- package/dist/ir/expression-inlining.js +12 -6
- package/dist/ir/expression-inlining.js.map +1 -1
- package/dist/ir/fields.generated.d.ts +751 -0
- package/dist/ir/fields.generated.js +2071 -0
- package/dist/ir/fields.generated.js.map +1 -0
- package/dist/ir/fields.test.d.ts +1 -0
- package/dist/ir/fields.test.js +113 -0
- package/dist/ir/fields.test.js.map +1 -0
- package/dist/ir/function-references.js +4 -0
- package/dist/ir/function-references.js.map +1 -1
- package/dist/ir/function-references.test.js +25 -0
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/inline-array-sources.d.ts +15 -0
- package/dist/ir/inline-array-sources.js +1825 -0
- package/dist/ir/inline-array-sources.js.map +1 -0
- package/dist/ir/inline-arrays.d.ts +41 -0
- package/dist/ir/inline-arrays.js +533 -0
- package/dist/ir/inline-arrays.js.map +1 -0
- package/dist/ir/inline-arrays.test.d.ts +1 -0
- package/dist/ir/inline-arrays.test.js +225 -0
- package/dist/ir/inline-arrays.test.js.map +1 -0
- package/dist/ir/int32-slots.d.ts +6 -0
- package/dist/ir/int32-slots.js +154 -16
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/int32-slots.test.js +48 -0
- package/dist/ir/int32-slots.test.js.map +1 -1
- package/dist/ir/integer-loops.d.ts +12 -0
- package/dist/ir/integer-loops.js +23 -0
- package/dist/ir/integer-loops.js.map +1 -1
- package/dist/ir/integer-ranges.d.ts +7 -1
- package/dist/ir/integer-ranges.js +29 -2
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/intrinsic-signatures.js +2 -1
- package/dist/ir/intrinsic-signatures.js.map +1 -1
- package/dist/ir/ir.d.ts +103 -5
- package/dist/ir/ir.js +38 -4
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/ir.test.js +134 -1
- package/dist/ir/ir.test.js.map +1 -1
- package/dist/ir/jsval.js +211 -29
- package/dist/ir/jsval.js.map +1 -1
- package/dist/ir/jsval.test.js +120 -0
- package/dist/ir/jsval.test.js.map +1 -1
- package/dist/ir/loop-entry-ranges.d.ts +38 -0
- package/dist/ir/loop-entry-ranges.js +259 -0
- package/dist/ir/loop-entry-ranges.js.map +1 -0
- package/dist/ir/loop-entry-ranges.test.d.ts +1 -0
- package/dist/ir/loop-entry-ranges.test.js +191 -0
- package/dist/ir/loop-entry-ranges.test.js.map +1 -0
- package/dist/ir/node-index.d.ts +3 -0
- package/dist/ir/node-index.js +6 -0
- package/dist/ir/node-index.js.map +1 -1
- package/dist/ir/numeric-call-specialization.d.ts +9 -6
- package/dist/ir/numeric-call-specialization.js +164 -34
- package/dist/ir/numeric-call-specialization.js.map +1 -1
- package/dist/ir/paired-while-loops.js +23 -19
- package/dist/ir/paired-while-loops.js.map +1 -1
- package/dist/ir/parameter-versions.js +6 -3
- package/dist/ir/parameter-versions.js.map +1 -1
- package/dist/ir/receiver-readers.d.ts +10 -0
- package/dist/ir/receiver-readers.js +65 -28
- package/dist/ir/receiver-readers.js.map +1 -1
- package/dist/ir/row-pairs.d.ts +9 -1
- package/dist/ir/row-pairs.js +136 -43
- package/dist/ir/row-pairs.js.map +1 -1
- package/dist/ir/row-pairs.test.js +25 -5
- package/dist/ir/row-pairs.test.js.map +1 -1
- package/dist/ir/runtime-features.d.ts +33 -1
- package/dist/ir/runtime-features.js +104 -6
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/runtime-features.test.js +13 -0
- package/dist/ir/runtime-features.test.js.map +1 -1
- package/dist/ir/saturating-loop-jams.d.ts +24 -0
- package/dist/ir/saturating-loop-jams.js +420 -0
- package/dist/ir/saturating-loop-jams.js.map +1 -0
- package/dist/ir/saturating-loop-jams.test.d.ts +1 -0
- package/dist/ir/saturating-loop-jams.test.js +196 -0
- package/dist/ir/saturating-loop-jams.test.js.map +1 -0
- package/dist/ir/scalar-records.js +9 -3
- package/dist/ir/scalar-records.js.map +1 -1
- package/dist/ir/self-captures.js +2 -1
- package/dist/ir/self-captures.js.map +1 -1
- package/dist/ir/serialize.d.ts +5 -1
- package/dist/ir/serialize.js +7 -1
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/traverse.js +3 -0
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/validate.js +91 -9
- package/dist/ir/validate.js.map +1 -1
- package/dist/library/ir-policy.js +1 -0
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/native/cache.js +2 -0
- package/dist/native/cache.js.map +1 -1
- package/dist/native/cli.js +54 -7
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.d.ts +3 -0
- package/dist/native/compiler.js +173 -36
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/compiler.test.js +86 -3
- package/dist/native/compiler.test.js.map +1 -1
- package/dist/native/executable-cache.d.ts +20 -2
- package/dist/native/executable-cache.js +17 -10
- package/dist/native/executable-cache.js.map +1 -1
- package/dist/native/executable-cache.test.js +38 -1
- package/dist/native/executable-cache.test.js.map +1 -1
- package/dist/native/linker-job.d.ts +71 -0
- package/dist/native/linker-job.js +242 -0
- package/dist/native/linker-job.js.map +1 -0
- package/dist/native/linker-job.test.d.ts +1 -0
- package/dist/native/linker-job.test.js +349 -0
- package/dist/native/linker-job.test.js.map +1 -0
- package/dist/native/prepare.js +15 -2
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/sanitizer.js +10 -15
- package/dist/native/sanitizer.js.map +1 -1
- package/dist/native/sanitizer.test.js +152 -66
- package/dist/native/sanitizer.test.js.map +1 -1
- package/dist/native/toolchain.d.ts +11 -2
- package/dist/native/toolchain.js +43 -17
- package/dist/native/toolchain.js.map +1 -1
- package/dist/native/toolchain.test.js +75 -0
- package/dist/native/toolchain.test.js.map +1 -1
- package/dist/node-islands/boundary.d.ts +37 -0
- package/dist/node-islands/boundary.js +135 -0
- package/dist/node-islands/boundary.js.map +1 -0
- package/dist/node-islands/classify.js +1 -1
- package/dist/node-islands/classify.js.map +1 -1
- package/dist/node-islands/effect-gate.d.ts +11 -0
- package/dist/node-islands/effect-gate.js +746 -0
- package/dist/node-islands/effect-gate.js.map +1 -0
- package/dist/node-islands/effect-gate.test.d.ts +1 -0
- package/dist/node-islands/effect-gate.test.js +152 -0
- package/dist/node-islands/effect-gate.test.js.map +1 -0
- package/dist/node-islands/libnode-pack.d.ts +68 -0
- package/dist/node-islands/libnode-pack.js +199 -0
- package/dist/node-islands/libnode-pack.js.map +1 -0
- package/dist/node-islands/libnode-pack.test.d.ts +1 -0
- package/dist/node-islands/libnode-pack.test.js +258 -0
- package/dist/node-islands/libnode-pack.test.js.map +1 -0
- package/dist/node-islands/libnode.d.ts +32 -0
- package/dist/node-islands/libnode.js +212 -0
- package/dist/node-islands/libnode.js.map +1 -0
- package/dist/node-islands/libnode.test.d.ts +1 -0
- package/dist/node-islands/libnode.test.js +170 -0
- package/dist/node-islands/libnode.test.js.map +1 -0
- package/dist/node-islands/modules.d.ts +96 -0
- package/dist/node-islands/modules.js +803 -0
- package/dist/node-islands/modules.js.map +1 -0
- package/dist/node-islands/modules.test.d.ts +1 -0
- package/dist/node-islands/modules.test.js +276 -0
- package/dist/node-islands/modules.test.js.map +1 -0
- package/dist/node-islands/resolve.d.ts +8 -0
- package/dist/node-islands/resolve.js +10 -0
- package/dist/node-islands/resolve.js.map +1 -0
- package/dist/node-islands/snapshot.d.ts +16 -0
- package/dist/node-islands/snapshot.js +486 -0
- package/dist/node-islands/snapshot.js.map +1 -0
- package/dist/node-islands/snapshot.test.d.ts +1 -0
- package/dist/node-islands/snapshot.test.js +56 -0
- package/dist/node-islands/snapshot.test.js.map +1 -0
- package/dist/project-config.d.ts +37 -1
- package/dist/project-config.js +159 -7
- package/dist/project-config.js.map +1 -1
- package/dist/project-config.test.js +153 -0
- package/dist/project-config.test.js.map +1 -1
- package/dist/startup-cache.d.ts +1 -0
- package/dist/startup-cache.js +1 -0
- package/dist/startup-cache.js.map +1 -1
- package/package.json +24 -21
- package/surface-manifest.json +47 -7
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { keyedHelperName } from "./stable-names.js";
|
|
2
2
|
import { perKeyOrder } from "./key-order-witness.js";
|
|
3
|
+
import { elementMayBeForeign } from "./array-values.js";
|
|
3
4
|
import { classPrototypeView } from "./class-prototypes.js";
|
|
4
5
|
import { dynUndefinedExpr, boolLit, helperLoc, nodeThrowExpr, numLit, strLit, varRef, } from "../../ir/build.js";
|
|
5
6
|
import { builtinClassDynValueOf, builtinClassKindOf } from "./builtins/builtin-class-dyn.js";
|
|
@@ -7,17 +8,19 @@ import { InternalCompilerError } from "../../errors.js";
|
|
|
7
8
|
import * as ts from "../ts7/adapter.js";
|
|
8
9
|
import { unsignedHex } from "../../format-integer.js";
|
|
9
10
|
import { jsFuncNameOf } from "./lowerer.js";
|
|
10
|
-
import { isJsSourceFile } from "../program.js";
|
|
11
|
-
import {
|
|
11
|
+
import { isJsSourceFile, locOf } from "../program.js";
|
|
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, recordTextCodecClass, shapeHasAccessorSlots, shapeKeyOrders, typeKey, } from "../../ir/ir.js";
|
|
12
14
|
import { accessorCall, findMethodOn } from "./lower-classes.js";
|
|
13
15
|
import { isSafeToDiscard, isSafeToRepeat } from "./expressions/evaluation-safety.js";
|
|
14
|
-
import { symbolFieldDisplayName, TO_STRING_TAG_FIELD } from "./symbol-fields.js";
|
|
16
|
+
import { INSPECT_CUSTOM_MEMBER, symbolFieldDisplayName, TO_STRING_TAG_FIELD, } from "./symbol-fields.js";
|
|
15
17
|
import { eventTargetRootOf } from "./lower-event-target.js";
|
|
16
18
|
import { dateRootOf } from "./builtins/date-classes.js";
|
|
17
19
|
import { lowerSystemErrorMap } from "./lower-system-errors.js";
|
|
18
20
|
import { isPerfEntryType, perfEntryJson } from "./builtins/performance.js";
|
|
19
21
|
import { recordMayKeepSource, recordSourceTest } from "./record-sources.js";
|
|
20
22
|
import { nullProtoRecordShape, recordNullProtoTest } from "./null-prototype.js";
|
|
23
|
+
import { dynArgumentPack } from "./call-arguments.js";
|
|
21
24
|
/* ── IR construction shorthand ───────────────────────────────────────── */
|
|
22
25
|
function concatAll(parts, loc) {
|
|
23
26
|
if (parts.length === 0)
|
|
@@ -724,6 +727,9 @@ function inspectSupport(lowerer, t, visiting, out) {
|
|
|
724
727
|
const info = lowerer.classes.get(t.className);
|
|
725
728
|
if (!info)
|
|
726
729
|
return `class '${t.className}' has no inspect lowering`;
|
|
730
|
+
const custom = customInspectReason(lowerer, info);
|
|
731
|
+
if (custom !== null)
|
|
732
|
+
return custom;
|
|
727
733
|
// EventTarget and Event subclasses render through Node's inspectors
|
|
728
734
|
// for those classes (the runtime's capsule view), and so do classes
|
|
729
735
|
// declared `extends Date`.
|
|
@@ -820,8 +826,10 @@ function isNumberFlag(lowerer, t, v, loc) {
|
|
|
820
826
|
/** The rendering of one value of type `t` at runtime depth `recurse`
|
|
821
827
|
* with the depth budget `depth` — a direct scalar libCall or a call of
|
|
822
828
|
* the interned per-type helper. */
|
|
823
|
-
export function inspectExpr(lowerer, t, value, recurse, depth, loc
|
|
824
|
-
|
|
829
|
+
export function inspectExpr(lowerer, t, value, recurse, depth, loc,
|
|
830
|
+
/** The instance's own rendering, without its custom inspect method. */
|
|
831
|
+
ownRendering = false) {
|
|
832
|
+
const render = inspectExprBody(lowerer, t, value, recurse, depth, loc, ownRendering);
|
|
825
833
|
// A top-level render through emitted helpers that can reach a refusal
|
|
826
834
|
// (the 'not supported yet' Error of insp.dyn) unwinds the inspector to
|
|
827
835
|
// its state before the render on every exit: the Error propagates out of
|
|
@@ -920,7 +928,7 @@ function inspectMayRefuse(lowerer, t) {
|
|
|
920
928
|
};
|
|
921
929
|
return walk(t);
|
|
922
930
|
}
|
|
923
|
-
function inspectExprBody(lowerer, t, value, recurse, depth, loc) {
|
|
931
|
+
function inspectExprBody(lowerer, t, value, recurse, depth, loc, ownRendering) {
|
|
924
932
|
// A Dirent row renders through its dyn view: Node's `Dirent { ... }`
|
|
925
933
|
// with the Symbol(type) key.
|
|
926
934
|
if (t.kind === "record") {
|
|
@@ -1000,6 +1008,15 @@ function inspectExprBody(lowerer, t, value, recurse, depth, loc) {
|
|
|
1000
1008
|
loc,
|
|
1001
1009
|
};
|
|
1002
1010
|
case "object":
|
|
1011
|
+
if (!ownRendering && customInspectMethodOf(lowerer, t.className)) {
|
|
1012
|
+
return {
|
|
1013
|
+
kind: "call",
|
|
1014
|
+
callee: customInspectHelper(lowerer, t, loc),
|
|
1015
|
+
args: [value, recurse, depth],
|
|
1016
|
+
type: STRING,
|
|
1017
|
+
loc,
|
|
1018
|
+
};
|
|
1019
|
+
}
|
|
1003
1020
|
if (eventTargetRootOf(lowerer.classes.get(t.className)) !== null ||
|
|
1004
1021
|
dateRootOf(lowerer.classes.get(t.className)) !== null) {
|
|
1005
1022
|
return {
|
|
@@ -1166,6 +1183,272 @@ function classInspectsAddedProperties(lowerer, info) {
|
|
|
1166
1183
|
return (info.def.fields.some((field) => field.name === DYN_CLASS_PROPERTIES || field.name.startsWith(CLASS_FIELD_ATTRIBUTES_PREFIX)) &&
|
|
1167
1184
|
classDynViewSupported(info.def.fields, (id) => lowerer.shapes.get(id), (id) => lowerer.unions.get(id)));
|
|
1168
1185
|
}
|
|
1186
|
+
/* ── custom inspect methods ([util.inspect.custom]) ──────────────────── */
|
|
1187
|
+
/** The `[util.inspect.custom]` method a class's instances have, declared
|
|
1188
|
+
* on the class or a base; null when they have none. */
|
|
1189
|
+
function customInspectMethodOf(lowerer, className) {
|
|
1190
|
+
const info = lowerer.classes.get(className);
|
|
1191
|
+
return info ? (lowerer.findMethodOn(info, INSPECT_CUSTOM_MEMBER) ?? null) : null;
|
|
1192
|
+
}
|
|
1193
|
+
/** Why instances of a class with a custom inspect method have no static
|
|
1194
|
+
* rendering, or null. Node calls the method with the remaining depth, the
|
|
1195
|
+
* options and util.inspect; the method's parameters receive them as
|
|
1196
|
+
* checked-dynamic values, and its result renders in the instance's place. */
|
|
1197
|
+
function customInspectReason(lowerer, info) {
|
|
1198
|
+
const found = lowerer.findMethodOn(info, INSPECT_CUSTOM_MEMBER);
|
|
1199
|
+
if (!found) {
|
|
1200
|
+
const below = (c) => c.subclasses.some((s) => s.methods.has(INSPECT_CUSTOM_MEMBER) || below(s));
|
|
1201
|
+
return below(info)
|
|
1202
|
+
? "classes whose subclasses declare [util.inspect.custom] have no inspect lowering yet (declare the method on the class itself)"
|
|
1203
|
+
: null;
|
|
1204
|
+
}
|
|
1205
|
+
if (found.sig.params.length > 3)
|
|
1206
|
+
return "[util.inspect.custom] methods with more than three parameters have no inspect lowering";
|
|
1207
|
+
for (const param of found.sig.params) {
|
|
1208
|
+
if (param.type.kind !== "dyn" &&
|
|
1209
|
+
!canDynCheckTo(param.type, (id) => lowerer.shapes.get(id), (id) => lowerer.unions.get(id)))
|
|
1210
|
+
return `[util.inspect.custom] methods with a '${lowerer.fmt(param.type)}' parameter have no inspect lowering`;
|
|
1211
|
+
}
|
|
1212
|
+
const ret = found.sig.ret;
|
|
1213
|
+
if (ret.kind === "object")
|
|
1214
|
+
return "[util.inspect.custom] methods that return a class instance have no inspect lowering";
|
|
1215
|
+
if (ret.kind !== "string" &&
|
|
1216
|
+
ret.kind !== "dyn" &&
|
|
1217
|
+
ret.kind !== "void" &&
|
|
1218
|
+
inspectSupport(lowerer, ret, new Set(), { recursive: false }) !== null)
|
|
1219
|
+
return `[util.inspect.custom] methods returning '${lowerer.fmt(ret)}' have no inspect lowering`;
|
|
1220
|
+
return null;
|
|
1221
|
+
}
|
|
1222
|
+
/** Whether values of `t` can hold a checked-dynamic value, whose own custom
|
|
1223
|
+
* inspect functions the runtime walk calls. */
|
|
1224
|
+
function typeReachesDyn(lowerer, t) {
|
|
1225
|
+
const seen = new Set();
|
|
1226
|
+
const walk = (u) => {
|
|
1227
|
+
if (u.kind === "dyn")
|
|
1228
|
+
return true;
|
|
1229
|
+
const k = typeKey(u);
|
|
1230
|
+
if (seen.has(k))
|
|
1231
|
+
return false;
|
|
1232
|
+
seen.add(k);
|
|
1233
|
+
return typeConstituents(lowerer, u).some(walk);
|
|
1234
|
+
};
|
|
1235
|
+
return walk(t);
|
|
1236
|
+
}
|
|
1237
|
+
/** Whether values of `t` can hold an instance of a class with a custom
|
|
1238
|
+
* inspect method. */
|
|
1239
|
+
export function typeReachesCustomInspect(lowerer, t) {
|
|
1240
|
+
const seen = new Set();
|
|
1241
|
+
const walk = (u) => {
|
|
1242
|
+
const k = typeKey(u);
|
|
1243
|
+
if (seen.has(k))
|
|
1244
|
+
return false;
|
|
1245
|
+
seen.add(k);
|
|
1246
|
+
if (u.kind === "object" && customInspectMethodOf(lowerer, u.className))
|
|
1247
|
+
return true;
|
|
1248
|
+
return typeConstituents(lowerer, u).some(walk);
|
|
1249
|
+
};
|
|
1250
|
+
return walk(t);
|
|
1251
|
+
}
|
|
1252
|
+
/** `%util.inspCustom.<n>(v, r, d): string` — formatValue's custom hook
|
|
1253
|
+
* over a class whose instances have a `[util.inspect.custom]` method:
|
|
1254
|
+
* with ctx.customInspect set, the method's result (a string re-indented
|
|
1255
|
+
* at the current level, the instance itself rendered normally, any other
|
|
1256
|
+
* value rendered in its place); otherwise the instance's own rendering. */
|
|
1257
|
+
function customInspectHelper(lowerer, t, loc) {
|
|
1258
|
+
const key = `inspCustom:${typeKey(t)}`;
|
|
1259
|
+
const existing = lowerer.inspectHelpers.get(key);
|
|
1260
|
+
if (existing)
|
|
1261
|
+
return existing;
|
|
1262
|
+
const name = keyedHelperName(lowerer, "%util.inspCustom", key);
|
|
1263
|
+
lowerer.inspectHelpers.set(key, name);
|
|
1264
|
+
const found = customInspectMethodOf(lowerer, t.className);
|
|
1265
|
+
const v = () => varRef("v.0", t, loc);
|
|
1266
|
+
const r = () => varRef("r.0", F64, loc);
|
|
1267
|
+
const d = () => varRef("d.0", F64, loc);
|
|
1268
|
+
const ret = (value) => ({ kind: "return", value, loc });
|
|
1269
|
+
const normal = () => inspectExpr(lowerer, t, v(), r(), d(), loc, true);
|
|
1270
|
+
const runtimeArgs = [
|
|
1271
|
+
{ kind: "libCall", fn: "insp.customDepth", args: [r(), d()], type: DYN, loc },
|
|
1272
|
+
{ kind: "libCall", fn: "insp.customOptions", args: [d()], type: DYN, loc },
|
|
1273
|
+
{ kind: "libCall", fn: "insp.inspectFunction", args: [], type: DYN, loc },
|
|
1274
|
+
];
|
|
1275
|
+
const locals = [
|
|
1276
|
+
{ id: "v.0", name: "v", type: t, mutable: false },
|
|
1277
|
+
{ id: "r.0", name: "r", type: F64, mutable: false },
|
|
1278
|
+
{ id: "d.0", name: "d", type: F64, mutable: false },
|
|
1279
|
+
];
|
|
1280
|
+
// The arguments read the walk's depth and options, so they evaluate
|
|
1281
|
+
// before the method's own context begins.
|
|
1282
|
+
const argDecls = found.sig.params.map((param, i) => {
|
|
1283
|
+
locals.push({ id: `arg${i}.0`, name: `arg${i}`, type: param.type, mutable: false });
|
|
1284
|
+
const init = lowerer.coerceToExpected(runtimeArgs[i], param.type);
|
|
1285
|
+
return { kind: "varDecl", localId: `arg${i}.0`, init, loc };
|
|
1286
|
+
});
|
|
1287
|
+
const args = found.sig.params.map((param, i) => varRef(`arg${i}.0`, param.type, loc));
|
|
1288
|
+
const resultT = found.sig.ret;
|
|
1289
|
+
const call = accessorCall(lowerer, t.className, INSPECT_CUSTOM_MEMBER, v(), args, resultT, loc);
|
|
1290
|
+
// The method runs in a fresh inspect context (insp.customCallBegin); the
|
|
1291
|
+
// walk's own context returns before the result renders. The token lets
|
|
1292
|
+
// an enclosing end restore this walk's context when the method throws.
|
|
1293
|
+
locals.push({ id: "tok.0", name: "tok", type: F64, mutable: false });
|
|
1294
|
+
const end = {
|
|
1295
|
+
kind: "exprStmt",
|
|
1296
|
+
expr: {
|
|
1297
|
+
kind: "libCall",
|
|
1298
|
+
fn: "insp.customCallEnd",
|
|
1299
|
+
args: [varRef("tok.0", F64, loc)],
|
|
1300
|
+
type: VOID,
|
|
1301
|
+
loc,
|
|
1302
|
+
},
|
|
1303
|
+
loc,
|
|
1304
|
+
};
|
|
1305
|
+
const render = [
|
|
1306
|
+
...argDecls,
|
|
1307
|
+
{
|
|
1308
|
+
kind: "varDecl",
|
|
1309
|
+
localId: "tok.0",
|
|
1310
|
+
init: { kind: "libCall", fn: "insp.customCallBegin", args: [], type: F64, loc },
|
|
1311
|
+
loc,
|
|
1312
|
+
},
|
|
1313
|
+
];
|
|
1314
|
+
if (resultT.kind === "void") {
|
|
1315
|
+
render.push({ kind: "exprStmt", expr: call, loc }, end);
|
|
1316
|
+
}
|
|
1317
|
+
else {
|
|
1318
|
+
locals.push({ id: "res.0", name: "res", type: resultT, mutable: false });
|
|
1319
|
+
render.push({ kind: "varDecl", localId: "res.0", init: call, loc }, end);
|
|
1320
|
+
}
|
|
1321
|
+
const res = () => varRef("res.0", resultT, loc);
|
|
1322
|
+
if (resultT.kind === "string") {
|
|
1323
|
+
render.push(ret({ kind: "libCall", fn: "insp.customText", args: [res()], type: STRING, loc }));
|
|
1324
|
+
}
|
|
1325
|
+
else if (resultT.kind === "dyn") {
|
|
1326
|
+
render.push({
|
|
1327
|
+
kind: "if",
|
|
1328
|
+
cond: {
|
|
1329
|
+
kind: "libCall",
|
|
1330
|
+
fn: "insp.customIsSelf",
|
|
1331
|
+
args: [res(), { kind: "dynFrom", value: v(), liveRef: true, type: DYN, loc }],
|
|
1332
|
+
type: BOOL,
|
|
1333
|
+
loc,
|
|
1334
|
+
},
|
|
1335
|
+
then: [ret(normal())],
|
|
1336
|
+
else_: null,
|
|
1337
|
+
loc,
|
|
1338
|
+
}, ret({ kind: "libCall", fn: "insp.customResult", args: [res(), r(), d()], type: STRING, loc }));
|
|
1339
|
+
}
|
|
1340
|
+
else if (resultT.kind === "void") {
|
|
1341
|
+
render.push(ret(strLit("undefined", loc)));
|
|
1342
|
+
}
|
|
1343
|
+
else {
|
|
1344
|
+
render.push(ret(inspectExpr(lowerer, resultT, res(), r(), d(), loc)));
|
|
1345
|
+
}
|
|
1346
|
+
lowerer.liftedFns.push({
|
|
1347
|
+
name,
|
|
1348
|
+
params: [
|
|
1349
|
+
{ localId: "v.0", name: "v", type: t },
|
|
1350
|
+
{ localId: "r.0", name: "r", type: F64 },
|
|
1351
|
+
{ localId: "d.0", name: "d", type: F64 },
|
|
1352
|
+
],
|
|
1353
|
+
returnType: STRING,
|
|
1354
|
+
locals,
|
|
1355
|
+
body: [
|
|
1356
|
+
{
|
|
1357
|
+
kind: "if",
|
|
1358
|
+
cond: { kind: "libCall", fn: "insp.customEnabled", args: [], type: BOOL, loc },
|
|
1359
|
+
then: render,
|
|
1360
|
+
else_: null,
|
|
1361
|
+
loc,
|
|
1362
|
+
},
|
|
1363
|
+
ret(normal()),
|
|
1364
|
+
],
|
|
1365
|
+
loc,
|
|
1366
|
+
});
|
|
1367
|
+
return name;
|
|
1368
|
+
}
|
|
1369
|
+
/** `%util.inspCustomDyn.<n>(self, depth, options, inspect): dyn` — a
|
|
1370
|
+
* class's custom inspect method for its instances held as checked-dynamic
|
|
1371
|
+
* values: the runtime's inspect walk calls it with the instance's typed
|
|
1372
|
+
* ref and the method's three arguments. */
|
|
1373
|
+
function customInspectDynHelper(lowerer, t, loc) {
|
|
1374
|
+
const name = keyedHelperName(lowerer, "%util.inspCustomDyn", typeKey(t));
|
|
1375
|
+
const found = customInspectMethodOf(lowerer, t.className);
|
|
1376
|
+
const param = (id) => varRef(id, DYN, loc);
|
|
1377
|
+
const ids = ["depth.0", "options.0", "inspect.0"];
|
|
1378
|
+
const call = accessorCall(lowerer, t.className, INSPECT_CUSTOM_MEMBER, varRef("v.0", t, loc), found.sig.params.map((p, i) => lowerer.coerceToExpected(param(ids[i]), p.type)), found.sig.ret, loc);
|
|
1379
|
+
const body = [
|
|
1380
|
+
{ kind: "varDecl", localId: "v.0", init: lowerer.coerceToExpected(param("self.0"), t), loc },
|
|
1381
|
+
];
|
|
1382
|
+
if (found.sig.ret.kind === "void") {
|
|
1383
|
+
body.push({ kind: "exprStmt", expr: call, loc }, { kind: "return", value: dynUndefinedExpr(loc), loc });
|
|
1384
|
+
}
|
|
1385
|
+
else {
|
|
1386
|
+
body.push({ kind: "return", value: lowerer.coerceToExpected(call, DYN), loc });
|
|
1387
|
+
}
|
|
1388
|
+
const params = ["self.0", ...ids];
|
|
1389
|
+
lowerer.liftedFns.push({
|
|
1390
|
+
name,
|
|
1391
|
+
params: params.map((id) => ({ localId: id, name: id.slice(0, -2), type: DYN })),
|
|
1392
|
+
returnType: DYN,
|
|
1393
|
+
locals: [
|
|
1394
|
+
...params.map((id) => ({ id, name: id.slice(0, -2), type: DYN, mutable: false })),
|
|
1395
|
+
{ id: "v.0", name: "v", type: t, mutable: false },
|
|
1396
|
+
],
|
|
1397
|
+
body,
|
|
1398
|
+
loc,
|
|
1399
|
+
});
|
|
1400
|
+
return name;
|
|
1401
|
+
}
|
|
1402
|
+
/** The statements %main runs first, in every thread: each class whose
|
|
1403
|
+
* instances have a custom inspect method registers its compiled call
|
|
1404
|
+
* under its instances' typed-ref type key (scr_insp_register_custom). */
|
|
1405
|
+
export function customInspectRegistrations(lowerer, loc) {
|
|
1406
|
+
const stmts = [];
|
|
1407
|
+
for (const info of lowerer.classes.values()) {
|
|
1408
|
+
if (info.def.runtime || info.def.abstract)
|
|
1409
|
+
continue;
|
|
1410
|
+
// Error classes register when their own properties render statically
|
|
1411
|
+
// (fieldedErrorReason): the others keep no method to call.
|
|
1412
|
+
if (isErrorClass(lowerer, info.def.name) && fieldedErrorReason(lowerer, info) !== null)
|
|
1413
|
+
continue;
|
|
1414
|
+
if (!lowerer.findMethodOn(info, INSPECT_CUSTOM_MEMBER))
|
|
1415
|
+
continue;
|
|
1416
|
+
// Only constructed classes have instances, and only their methods lower
|
|
1417
|
+
// (the constructor edge reaches the method).
|
|
1418
|
+
if (!lowerer.classCanBeConstructed(info))
|
|
1419
|
+
continue;
|
|
1420
|
+
if (customInspectReason(lowerer, info) !== null)
|
|
1421
|
+
continue;
|
|
1422
|
+
const t = { kind: "object", className: info.def.name };
|
|
1423
|
+
const fn = customInspectDynHelper(lowerer, t, loc);
|
|
1424
|
+
stmts.push({
|
|
1425
|
+
kind: "exprStmt",
|
|
1426
|
+
expr: {
|
|
1427
|
+
kind: "libCall",
|
|
1428
|
+
fn: "insp.registerCustom",
|
|
1429
|
+
args: [
|
|
1430
|
+
strLit(typeKey(t), loc),
|
|
1431
|
+
{
|
|
1432
|
+
kind: "dynFrom",
|
|
1433
|
+
value: {
|
|
1434
|
+
kind: "closure",
|
|
1435
|
+
fnName: fn,
|
|
1436
|
+
captures: [],
|
|
1437
|
+
type: funcOf([DYN, DYN, DYN, DYN], DYN),
|
|
1438
|
+
loc,
|
|
1439
|
+
},
|
|
1440
|
+
type: DYN,
|
|
1441
|
+
loc,
|
|
1442
|
+
},
|
|
1443
|
+
],
|
|
1444
|
+
type: VOID,
|
|
1445
|
+
loc,
|
|
1446
|
+
},
|
|
1447
|
+
loc,
|
|
1448
|
+
});
|
|
1449
|
+
}
|
|
1450
|
+
return stmts;
|
|
1451
|
+
}
|
|
1169
1452
|
/* ── the interned per-type helper ────────────────────────────────────── */
|
|
1170
1453
|
/** `%util.insp.<n>(v, r, d): string` — formatValue over the static type:
|
|
1171
1454
|
* empty composites answer their literals (before the depth check, Node's
|
|
@@ -1298,11 +1581,29 @@ function inspectHelper(lowerer, t, loc) {
|
|
|
1298
1581
|
const i = () => varRef("i.0", F64, loc);
|
|
1299
1582
|
const next = () => varRef("next.0", F64, loc);
|
|
1300
1583
|
const hasMore = () => lt(i(), n());
|
|
1584
|
+
// A foreign element (state 3) holds a value outside the element type.
|
|
1585
|
+
const foreignElements = elementMayBeForeign(lowerer, t.elem);
|
|
1586
|
+
const foreign = () => ({
|
|
1587
|
+
kind: "libCall",
|
|
1588
|
+
fn: "array.foreign",
|
|
1589
|
+
args: [v(), i()],
|
|
1590
|
+
type: DYN,
|
|
1591
|
+
loc,
|
|
1592
|
+
});
|
|
1301
1593
|
const isNumber = () => ({
|
|
1302
1594
|
kind: "ternary",
|
|
1303
1595
|
cond: eq(state(i()), numLit(1, loc)),
|
|
1304
1596
|
then: isNumberFlag(lowerer, t.elem, () => at(i()), loc),
|
|
1305
|
-
else_:
|
|
1597
|
+
else_: foreignElements
|
|
1598
|
+
? {
|
|
1599
|
+
kind: "ternary",
|
|
1600
|
+
cond: eq(state(i()), numLit(3, loc)),
|
|
1601
|
+
then: isNumberFlag(lowerer, DYN, foreign, loc),
|
|
1602
|
+
else_: boolLit(false, loc),
|
|
1603
|
+
type: BOOL,
|
|
1604
|
+
loc,
|
|
1605
|
+
}
|
|
1606
|
+
: boolLit(false, loc),
|
|
1306
1607
|
type: BOOL,
|
|
1307
1608
|
loc,
|
|
1308
1609
|
});
|
|
@@ -1380,7 +1681,16 @@ function inspectHelper(lowerer, t, loc) {
|
|
|
1380
1681
|
kind: "ternary",
|
|
1381
1682
|
cond: eq(state(i()), numLit(1, loc)),
|
|
1382
1683
|
then: child(t.elem, at(i())),
|
|
1383
|
-
else_:
|
|
1684
|
+
else_: foreignElements
|
|
1685
|
+
? {
|
|
1686
|
+
kind: "ternary",
|
|
1687
|
+
cond: eq(state(i()), numLit(3, loc)),
|
|
1688
|
+
then: child(DYN, foreign()),
|
|
1689
|
+
else_: strLit("undefined", loc),
|
|
1690
|
+
type: STRING,
|
|
1691
|
+
loc,
|
|
1692
|
+
}
|
|
1693
|
+
: strLit("undefined", loc),
|
|
1384
1694
|
type: STRING,
|
|
1385
1695
|
loc,
|
|
1386
1696
|
}, isNumber()),
|
|
@@ -2185,9 +2495,17 @@ function isBufferTypeName(tname) {
|
|
|
2185
2495
|
function isDataViewTypeName(tname) {
|
|
2186
2496
|
return tname === "DataView" || tname.startsWith("DataView<");
|
|
2187
2497
|
}
|
|
2188
|
-
function parseInspectOptions(lowerer, node, recursive, dir = false) {
|
|
2498
|
+
function parseInspectOptions(lowerer, node, recursive, dir = false, atRunTime = false) {
|
|
2189
2499
|
const surface = dir ? "console.dir" : "util.inspect";
|
|
2190
|
-
const options = {
|
|
2500
|
+
const options = {
|
|
2501
|
+
depth: 2,
|
|
2502
|
+
breakLength: 80,
|
|
2503
|
+
compact: 3,
|
|
2504
|
+
sorted: false,
|
|
2505
|
+
runtime: false,
|
|
2506
|
+
depthKind: 0,
|
|
2507
|
+
customInspect: !dir,
|
|
2508
|
+
};
|
|
2191
2509
|
if (!node || (ts.isIdentifier(node) && node.text === "undefined"))
|
|
2192
2510
|
return options;
|
|
2193
2511
|
if (!ts.isObjectLiteralExpression(node)) {
|
|
@@ -2195,6 +2513,11 @@ function parseInspectOptions(lowerer, node, recursive, dir = false) {
|
|
|
2195
2513
|
}
|
|
2196
2514
|
for (const prop of node.properties.nodes) {
|
|
2197
2515
|
if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name)) {
|
|
2516
|
+
// `{ depth }` and `{ ...base }` hold values known at run time.
|
|
2517
|
+
if (atRunTime && (ts.isShorthandPropertyAssignment(prop) || ts.isSpreadAssignment(prop))) {
|
|
2518
|
+
options.runtime = true;
|
|
2519
|
+
continue;
|
|
2520
|
+
}
|
|
2198
2521
|
lowerer.noLowering(`${surface} options in this form`, prop, "plain `key: literal` entries are the lowered options");
|
|
2199
2522
|
}
|
|
2200
2523
|
const key = prop.name.text;
|
|
@@ -2217,9 +2540,19 @@ function parseInspectOptions(lowerer, node, recursive, dir = false) {
|
|
|
2217
2540
|
// bounded by the (finite) object graph — exactly Node.
|
|
2218
2541
|
void recursive;
|
|
2219
2542
|
options.depth = Infinity;
|
|
2543
|
+
options.depthKind = value.kind === ts.SyntaxKind.NullKeyword ? 1 : 0;
|
|
2544
|
+
}
|
|
2545
|
+
else if (ts.isIdentifier(value) && value.text === "undefined") {
|
|
2546
|
+
// Node's ctx.depth is undefined: no depth limit.
|
|
2547
|
+
options.depth = Infinity;
|
|
2548
|
+
options.depthKind = 2;
|
|
2220
2549
|
}
|
|
2221
|
-
else
|
|
2550
|
+
else {
|
|
2222
2551
|
const n = numeric();
|
|
2552
|
+
if (n === null && atRunTime) {
|
|
2553
|
+
options.runtime = true;
|
|
2554
|
+
continue;
|
|
2555
|
+
}
|
|
2223
2556
|
if (n === null) {
|
|
2224
2557
|
lowerer.noLowering(`${surface} with a non-literal depth option`, value, "depth must be a numeric literal (or null)");
|
|
2225
2558
|
}
|
|
@@ -2227,7 +2560,9 @@ function parseInspectOptions(lowerer, node, recursive, dir = false) {
|
|
|
2227
2560
|
}
|
|
2228
2561
|
}
|
|
2229
2562
|
else if (key === "colors") {
|
|
2230
|
-
if (value.kind !== ts.SyntaxKind.FalseKeyword)
|
|
2563
|
+
if (value.kind !== ts.SyntaxKind.FalseKeyword && atRunTime)
|
|
2564
|
+
options.runtime = true;
|
|
2565
|
+
else if (value.kind !== ts.SyntaxKind.FalseKeyword) {
|
|
2231
2566
|
lowerer.noLowering(`${surface} with colors: true`, value, "ANSI styling has no lowering — only colors: false");
|
|
2232
2567
|
}
|
|
2233
2568
|
}
|
|
@@ -2236,24 +2571,47 @@ function parseInspectOptions(lowerer, node, recursive, dir = false) {
|
|
|
2236
2571
|
// compact of at least 1; false and smaller numbers break every
|
|
2237
2572
|
// composite onto its own lines. compact: true is the older layout.
|
|
2238
2573
|
const n = value.kind === ts.SyntaxKind.FalseKeyword ? 0 : numeric();
|
|
2574
|
+
if (n === null && atRunTime && value.kind !== ts.SyntaxKind.TrueKeyword) {
|
|
2575
|
+
options.runtime = true;
|
|
2576
|
+
continue;
|
|
2577
|
+
}
|
|
2239
2578
|
if (n === null || Number.isNaN(n)) {
|
|
2240
2579
|
lowerer.noLowering(`${surface} with this compact option`, value, "compact must be false or a numeric literal (compact: true has no lowering)");
|
|
2241
2580
|
}
|
|
2242
|
-
|
|
2581
|
+
// false is -1: the same layout as 0, and custom inspect functions
|
|
2582
|
+
// read it back as false.
|
|
2583
|
+
options.compact = value.kind === ts.SyntaxKind.FalseKeyword ? -1 : Math.max(n, 0);
|
|
2243
2584
|
}
|
|
2244
2585
|
else if (key === "sorted") {
|
|
2245
|
-
|
|
2586
|
+
const sortedLiteral = value.kind === ts.SyntaxKind.TrueKeyword || value.kind === ts.SyntaxKind.FalseKeyword;
|
|
2587
|
+
if (!sortedLiteral &&
|
|
2588
|
+
atRunTime &&
|
|
2589
|
+
!ts.isArrowFunction(value) &&
|
|
2590
|
+
!ts.isFunctionExpression(value)) {
|
|
2591
|
+
options.runtime = true;
|
|
2592
|
+
continue;
|
|
2593
|
+
}
|
|
2594
|
+
if (!sortedLiteral) {
|
|
2246
2595
|
lowerer.noLowering(`${surface} with this sorted option`, value, "sorted must be true or false (a comparator function has no lowering)");
|
|
2247
2596
|
}
|
|
2248
2597
|
options.sorted = value.kind === ts.SyntaxKind.TrueKeyword;
|
|
2249
2598
|
}
|
|
2250
2599
|
else if (key === "breakLength") {
|
|
2251
2600
|
const n = ts.isIdentifier(value) && value.text === "Infinity" ? Infinity : numeric();
|
|
2601
|
+
if (n === null && atRunTime) {
|
|
2602
|
+
options.runtime = true;
|
|
2603
|
+
continue;
|
|
2604
|
+
}
|
|
2252
2605
|
if (n === null || Number.isNaN(n)) {
|
|
2253
2606
|
lowerer.noLowering(`${surface} with a non-literal breakLength option`, value, "breakLength must be a numeric literal or Infinity");
|
|
2254
2607
|
}
|
|
2255
2608
|
options.breakLength = n;
|
|
2256
2609
|
}
|
|
2610
|
+
else if (!dir &&
|
|
2611
|
+
key === "customInspect" &&
|
|
2612
|
+
(value.kind === ts.SyntaxKind.TrueKeyword || value.kind === ts.SyntaxKind.FalseKeyword)) {
|
|
2613
|
+
options.customInspect = value.kind === ts.SyntaxKind.TrueKeyword;
|
|
2614
|
+
}
|
|
2257
2615
|
else if (dir && key === "customInspect") {
|
|
2258
2616
|
// console.dir's own default; only that value is lowered.
|
|
2259
2617
|
if (value.kind !== ts.SyntaxKind.FalseKeyword) {
|
|
@@ -2359,12 +2717,68 @@ function directCallableInspect(lowerer, node, loc) {
|
|
|
2359
2717
|
}
|
|
2360
2718
|
return null;
|
|
2361
2719
|
}
|
|
2362
|
-
/** util.inspect(value[, options])
|
|
2720
|
+
/** util.inspect(value[, options]) and inspect(value, showHidden, depth,
|
|
2721
|
+
* colors) — the spoke's inspect entry. Options the compiler resolves
|
|
2722
|
+
* render through the static helpers; colors, option values known only at
|
|
2723
|
+
* run time and the legacy forms render the value's checked-dynamic view
|
|
2724
|
+
* in the runtime (insp.inspect). */
|
|
2363
2725
|
function lowerInspectCall(lowerer, expr, loc) {
|
|
2364
|
-
|
|
2365
|
-
|
|
2726
|
+
const args = expr.arguments.nodes;
|
|
2727
|
+
if (args.length < 1 || args.length > 4 || args.some(ts.isSpreadElement)) {
|
|
2728
|
+
lowerer.noLowering(`util.inspect with ${args.some(ts.isSpreadElement) ? "spread" : args.length} arguments`, expr, "the supported forms are inspect(value), inspect(value, options) and inspect(value, showHidden, depth, colors)");
|
|
2729
|
+
}
|
|
2730
|
+
if (args.length <= 2 && !inspectOptionsAtRunTime(lowerer, args[1]))
|
|
2731
|
+
return lowerInspectValue(lowerer, args[0], args[1], loc, false);
|
|
2732
|
+
return lowerRuntimeInspect(lowerer, args, loc);
|
|
2733
|
+
}
|
|
2734
|
+
/** Whether an options argument needs the runtime reader: an options value
|
|
2735
|
+
* that is not an object literal, or a literal with colors or a computed
|
|
2736
|
+
* depth, compact, breakLength or sorted value. Literal options otherwise
|
|
2737
|
+
* keep the static parse, which also reports the literal options neither
|
|
2738
|
+
* path lowers. */
|
|
2739
|
+
function inspectOptionsAtRunTime(lowerer, node) {
|
|
2740
|
+
if (!node || (ts.isIdentifier(node) && node.text === "undefined"))
|
|
2741
|
+
return false;
|
|
2742
|
+
if (!ts.isObjectLiteralExpression(node))
|
|
2743
|
+
return true;
|
|
2744
|
+
return parseInspectOptions(lowerer, node, false, false, true).runtime;
|
|
2745
|
+
}
|
|
2746
|
+
/** util.inspect over the value's checked-dynamic view, with every argument
|
|
2747
|
+
* evaluated in order and read in the runtime as Node's inspect reads it. */
|
|
2748
|
+
function lowerRuntimeInspect(lowerer, args, loc) {
|
|
2749
|
+
const valueNode = args[0];
|
|
2750
|
+
if (directCallableInspect(lowerer, valueNode, loc) !== null ||
|
|
2751
|
+
ts.isArrowFunction(valueNode) ||
|
|
2752
|
+
ts.isFunctionExpression(valueNode)) {
|
|
2753
|
+
lowerer.noLowering("util.inspect of a function or class with these options", valueNode, "pass the options as a literal without colors");
|
|
2754
|
+
}
|
|
2755
|
+
const value = lowerer.lowerExpr(valueNode);
|
|
2756
|
+
if (value.type.kind !== "dyn") {
|
|
2757
|
+
const reason = inspectSupport(lowerer, value.type, new Set(), { recursive: false });
|
|
2758
|
+
if (reason !== null)
|
|
2759
|
+
lowerer.noLowering(`util.inspect of '${lowerer.fmt(value.type)}' values`, valueNode, reason);
|
|
2760
|
+
if (!lowerer.dynConvertible(value.type))
|
|
2761
|
+
lowerer.noLowering(`util.inspect with these options of '${lowerer.fmt(value.type)}' values`, valueNode, "the options are read at run time, where the value renders through its checked-dynamic view");
|
|
2762
|
+
}
|
|
2763
|
+
const stmts = [];
|
|
2764
|
+
const held = (init) => {
|
|
2765
|
+
const local = lowerer.declareHiddenLocal("%inspectArg", DYN);
|
|
2766
|
+
stmts.push({ kind: "varDecl", localId: local.id, init, loc });
|
|
2767
|
+
return varRef(local.id, DYN, loc);
|
|
2768
|
+
};
|
|
2769
|
+
const operands = [held(lowerer.coerceToExpected(value, DYN))];
|
|
2770
|
+
for (let i = 1; i < 4; i++) {
|
|
2771
|
+
const node = args[i];
|
|
2772
|
+
operands.push(node ? held(lowerer.lowerExprExpecting(node, DYN)) : dynUndefinedExpr(loc));
|
|
2366
2773
|
}
|
|
2367
|
-
|
|
2774
|
+
operands.push(numLit(args.length, loc));
|
|
2775
|
+
return {
|
|
2776
|
+
kind: "seqExpr",
|
|
2777
|
+
stmts,
|
|
2778
|
+
result: { kind: "libCall", fn: "insp.inspect", args: operands, type: STRING, loc },
|
|
2779
|
+
type: STRING,
|
|
2780
|
+
loc,
|
|
2781
|
+
};
|
|
2368
2782
|
}
|
|
2369
2783
|
/** `inspect(value, options)` over one value node: the shared body of
|
|
2370
2784
|
* util.inspect and console.dir. console.dir is Node's `inspect(object,
|
|
@@ -2434,6 +2848,41 @@ export function lowerInspectValue(lowerer, valueNode, optionsNode, loc, dir) {
|
|
|
2434
2848
|
}
|
|
2435
2849
|
const options = parseInspectOptions(lowerer, optionsNode, walk.recursive, dir);
|
|
2436
2850
|
const depth = options.depth;
|
|
2851
|
+
// Custom inspect functions read the options as Node spelled them: an
|
|
2852
|
+
// unbounded depth given as Infinity or undefined, and customInspect:
|
|
2853
|
+
// false (console.dir's default), apply around the render when the value
|
|
2854
|
+
// can reach a custom method; the previous settings return afterwards.
|
|
2855
|
+
const reachesCustom = typeReachesCustomInspect(lowerer, value.type) || typeReachesDyn(lowerer, value.type);
|
|
2856
|
+
const depthContext = reachesCustom && depth === Infinity && options.depthKind !== 1;
|
|
2857
|
+
const customContext = reachesCustom && !options.customInspect;
|
|
2858
|
+
if (depthContext || customContext) {
|
|
2859
|
+
const stmts = [];
|
|
2860
|
+
const restore = [];
|
|
2861
|
+
const setting = (fn, arg, type) => {
|
|
2862
|
+
const previous = lowerer.declareHiddenLocal("%inspectContext", type);
|
|
2863
|
+
const call = (a) => ({ kind: "libCall", fn, args: [a], type, loc });
|
|
2864
|
+
stmts.push({ kind: "varDecl", localId: previous.id, init: call(arg), loc });
|
|
2865
|
+
restore.push({ kind: "exprStmt", expr: call(varRef(previous.id, type, loc)), loc });
|
|
2866
|
+
};
|
|
2867
|
+
if (customContext)
|
|
2868
|
+
setting("insp.customInspect", boolLit(false, loc), BOOL);
|
|
2869
|
+
if (depthContext)
|
|
2870
|
+
setting("insp.depthKind", numLit(options.depthKind, loc), F64);
|
|
2871
|
+
const text = lowerer.declareHiddenLocal("%inspectText", STRING);
|
|
2872
|
+
stmts.push({
|
|
2873
|
+
kind: "varDecl",
|
|
2874
|
+
localId: text.id,
|
|
2875
|
+
init: withInspectLayout(lowerer, options, value, "inspect", (input) => inspectExpr(lowerer, value.type, input, numLit(0, loc), numLit(depth, loc), loc), loc),
|
|
2876
|
+
loc,
|
|
2877
|
+
});
|
|
2878
|
+
return {
|
|
2879
|
+
kind: "seqExpr",
|
|
2880
|
+
stmts: [...stmts, ...restore.reverse()],
|
|
2881
|
+
result: varRef(text.id, STRING, loc),
|
|
2882
|
+
type: STRING,
|
|
2883
|
+
loc,
|
|
2884
|
+
};
|
|
2885
|
+
}
|
|
2437
2886
|
if (dir && value.type.kind === "dyn") {
|
|
2438
2887
|
return withInspectLayout(lowerer, options, value, "dirDyn", (input) => ({
|
|
2439
2888
|
kind: "libCall",
|
|
@@ -2450,7 +2899,10 @@ export function lowerInspectValue(lowerer, valueNode, optionsNode, loc, dir) {
|
|
|
2450
2899
|
* formatNumber, strings verbatim, objects through inspect at the given
|
|
2451
2900
|
* depth). Null = fence with the given reason. */
|
|
2452
2901
|
function formatSArg(lowerer, node, depth, loc) {
|
|
2453
|
-
|
|
2902
|
+
return formatSValue(lowerer, node, lowerer.lowerExpr(node), depth, loc);
|
|
2903
|
+
}
|
|
2904
|
+
/** formatSArg over the already-lowered value of `node`. */
|
|
2905
|
+
function formatSValue(lowerer, node, value, depth, loc) {
|
|
2454
2906
|
const t = value.type;
|
|
2455
2907
|
if (t.kind === "string")
|
|
2456
2908
|
return value;
|
|
@@ -2471,7 +2923,7 @@ function formatSArg(lowerer, node, depth, loc) {
|
|
|
2471
2923
|
if (t.kind === "dyn") {
|
|
2472
2924
|
return {
|
|
2473
2925
|
kind: "libCall",
|
|
2474
|
-
fn: "insp.
|
|
2926
|
+
fn: "insp.dynFormatS",
|
|
2475
2927
|
args: [value, numLit(depth, loc)],
|
|
2476
2928
|
type: STRING,
|
|
2477
2929
|
loc,
|
|
@@ -2528,6 +2980,9 @@ function formatOArg(lowerer, node, depth, loc) {
|
|
|
2528
2980
|
const reason = inspectSupport(lowerer, value.type, new Set(), walk);
|
|
2529
2981
|
if (reason !== null)
|
|
2530
2982
|
lowerer.noLowering(`util.format %${depth === 4 ? "o" : "O"} of '${lowerer.fmt(value.type)}' values`, node, reason);
|
|
2983
|
+
if (depth === 4 && typeReachesCustomInspect(lowerer, value.type)) {
|
|
2984
|
+
lowerer.noLowering("util.format %o over values with [util.inspect.custom] methods", node, "%o passes showHidden to the methods — use %O");
|
|
2985
|
+
}
|
|
2531
2986
|
if (depth === 4 && typeTreeHasHidden(lowerer, value.type, new Set())) {
|
|
2532
2987
|
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");
|
|
2533
2988
|
}
|
|
@@ -2599,27 +3054,64 @@ function formatIntegerFixed(value, spec, loc) {
|
|
|
2599
3054
|
/** util.format(...) / util.formatWithOptions({}, ...): the compile-time
|
|
2600
3055
|
* %-substitution over a literal format string (formatWithOptionsInternal
|
|
2601
3056
|
* ported exactly — the arg cursor, the args-exhausted guard, %c's
|
|
2602
|
-
* consume-and-drop), with per-static-type conversions.
|
|
2603
|
-
*
|
|
3057
|
+
* consume-and-drop), with per-static-type conversions. Format strings
|
|
3058
|
+
* known only at run time, spread arguments and non-empty options lower to
|
|
3059
|
+
* the runtime formatter (lowerRuntimeFormat, heldFormatArgs). */
|
|
2604
3060
|
export function lowerFormatCall(lowerer, expr, loc, withOptions, argNodesOverride, literalPrefix = "") {
|
|
2605
3061
|
const argNodes = [...(argNodesOverride ?? expr.arguments.nodes)];
|
|
2606
3062
|
if (withOptions) {
|
|
2607
3063
|
const opts = argNodes.shift();
|
|
3064
|
+
// The empty literal {} is the defaults: exactly util.format.
|
|
2608
3065
|
if (!opts || !ts.isObjectLiteralExpression(opts) || opts.properties.nodes.length > 0) {
|
|
2609
|
-
|
|
3066
|
+
if (opts && ts.isSpreadElement(opts)) {
|
|
3067
|
+
lowerer.noLowering("util.formatWithOptions with a spread options argument", opts, "pass the options object as the first argument");
|
|
3068
|
+
}
|
|
3069
|
+
return lowerRuntimeFormat(lowerer, argNodes, loc, opts ?? null);
|
|
2610
3070
|
}
|
|
2611
3071
|
}
|
|
2612
3072
|
if (argNodes.length === 0)
|
|
2613
3073
|
return strLit("", loc);
|
|
2614
3074
|
const first = argNodes[0];
|
|
2615
3075
|
const firstIsLiteral = ts.isStringLiteral(first) || ts.isNoSubstitutionTemplateLiteral(first);
|
|
3076
|
+
if (argNodes.some(ts.isSpreadElement)) {
|
|
3077
|
+
if (literalPrefix !== "" && !firstIsLiteral)
|
|
3078
|
+
throw new InternalCompilerError("a format prefix needs a literal format string");
|
|
3079
|
+
return lowerRuntimeFormat(lowerer, argNodes, loc, undefined, literalPrefix);
|
|
3080
|
+
}
|
|
2616
3081
|
/** The rest-args tail: ` ` + (strings verbatim, everything else
|
|
2617
3082
|
* inspected at the default depth). */
|
|
2618
3083
|
const restArg = (node) => formatSArg(lowerer, node, 2, loc);
|
|
2619
3084
|
if (!firstIsLiteral) {
|
|
2620
|
-
const
|
|
2621
|
-
if (
|
|
2622
|
-
lowerer
|
|
3085
|
+
const runtime = argNodes.length > 1 ? runtimeFormatString(lowerer, first) : null;
|
|
3086
|
+
if (runtime === "other" && !formatStringConverts(lowerer, first))
|
|
3087
|
+
return lowerRuntimeFormat(lowerer, argNodes, loc);
|
|
3088
|
+
if (runtime !== null) {
|
|
3089
|
+
// A string that substitutes formats at run time; any other string
|
|
3090
|
+
// joins with the remaining arguments, as below.
|
|
3091
|
+
const held = heldFormatArgs(lowerer, argNodes, loc);
|
|
3092
|
+
if (!held.joinable) {
|
|
3093
|
+
return { kind: "seqExpr", stmts: held.stmts, result: held.format(), type: STRING, loc };
|
|
3094
|
+
}
|
|
3095
|
+
const joined = [];
|
|
3096
|
+
held.args.forEach((arg, i) => {
|
|
3097
|
+
if (i > 0)
|
|
3098
|
+
joined.push(strLit(" ", loc));
|
|
3099
|
+
joined.push(formatRestValue(lowerer, arg.node, arg.ref(), loc));
|
|
3100
|
+
});
|
|
3101
|
+
return {
|
|
3102
|
+
kind: "seqExpr",
|
|
3103
|
+
stmts: held.stmts,
|
|
3104
|
+
result: {
|
|
3105
|
+
kind: "ternary",
|
|
3106
|
+
cond: held.specifies,
|
|
3107
|
+
then: held.format(),
|
|
3108
|
+
else_: concatAll(joined, loc),
|
|
3109
|
+
type: STRING,
|
|
3110
|
+
loc,
|
|
3111
|
+
},
|
|
3112
|
+
type: STRING,
|
|
3113
|
+
loc,
|
|
3114
|
+
};
|
|
2623
3115
|
}
|
|
2624
3116
|
// No substitutions possible: every argument joins with spaces.
|
|
2625
3117
|
const parts = [];
|
|
@@ -2881,6 +3373,211 @@ export function lowerFormatCall(lowerer, expr, loc, withOptions, argNodesOverrid
|
|
|
2881
3373
|
}
|
|
2882
3374
|
return concatAll(parts, loc);
|
|
2883
3375
|
}
|
|
3376
|
+
/** One space-joined argument of util.format, as Node's formatter renders
|
|
3377
|
+
* it after the format string: strings verbatim, everything else through
|
|
3378
|
+
* inspect at the default depth. */
|
|
3379
|
+
function formatRestValue(lowerer, node, value, loc) {
|
|
3380
|
+
switch (value.type.kind) {
|
|
3381
|
+
case "string":
|
|
3382
|
+
return value;
|
|
3383
|
+
case "f64":
|
|
3384
|
+
return { kind: "libCall", fn: "insp.f64", args: [value], type: STRING, loc };
|
|
3385
|
+
case "bool":
|
|
3386
|
+
return { kind: "toString", operand: value, type: STRING, loc };
|
|
3387
|
+
case "dyn":
|
|
3388
|
+
return { kind: "libCall", fn: "insp.dynS", args: [value, numLit(2, loc)], type: STRING, loc };
|
|
3389
|
+
default:
|
|
3390
|
+
return lowerConsoleInspectArg(lowerer, node, value, "util.format", loc);
|
|
3391
|
+
}
|
|
3392
|
+
}
|
|
3393
|
+
const UNCONVERTIBLE_HINT = "the runtime formatter reads its arguments as checked-dynamic values — use a string literal format";
|
|
3394
|
+
/** A string-valued expression that throws the SC2020 refusal where it runs
|
|
3395
|
+
* (a JavaScript construct fence deferred to the branch that needs it). */
|
|
3396
|
+
function runtimeFenceValue(lowerer, surface, node, hint, loc) {
|
|
3397
|
+
const diag = noLoweringDiag(surface, locOf(node), hint);
|
|
3398
|
+
lowerer.runtimeFences.push(diag);
|
|
3399
|
+
const sf = ts.getSourceFileOfNode(node);
|
|
3400
|
+
const line = ts.getLineAndCharacterOfPosition(sf, diag.loc.start).line + 1;
|
|
3401
|
+
const slot = lowerer.declareHiddenLocal("%never", STRING);
|
|
3402
|
+
slot.mutable = true;
|
|
3403
|
+
return {
|
|
3404
|
+
kind: "seqExpr",
|
|
3405
|
+
stmts: [
|
|
3406
|
+
{ kind: "varDecl", localId: slot.id, init: null, loc },
|
|
3407
|
+
{
|
|
3408
|
+
kind: "runtimeFence",
|
|
3409
|
+
code: diag.code,
|
|
3410
|
+
message: `${diag.message} [${diag.code} at ${diag.loc.file}:${line}]`,
|
|
3411
|
+
loc,
|
|
3412
|
+
},
|
|
3413
|
+
],
|
|
3414
|
+
result: varRef(slot.id, STRING, loc),
|
|
3415
|
+
diverges: true,
|
|
3416
|
+
type: STRING,
|
|
3417
|
+
loc,
|
|
3418
|
+
};
|
|
3419
|
+
}
|
|
3420
|
+
/** Whether the held-argument form can test a format string whose type
|
|
3421
|
+
* only may hold a string: a union that converts to a checked-dynamic value,
|
|
3422
|
+
* or a value whose checker type does not map (its lowered type decides). */
|
|
3423
|
+
export function formatStringConverts(lowerer, first) {
|
|
3424
|
+
const t = lowerer.mapTypeOf(lowerer.typeOf(first));
|
|
3425
|
+
return t === null || t.kind === "dyn" || lowerer.dynConvertible(t);
|
|
3426
|
+
}
|
|
3427
|
+
/** How a non-literal format string is known: "string" and "dyn" values
|
|
3428
|
+
* test for a substitution at run time, "other" types (unions with a string
|
|
3429
|
+
* arm) format at run time, and null types never hold a string. */
|
|
3430
|
+
export function runtimeFormatString(lowerer, first) {
|
|
3431
|
+
const t = lowerer.mapTypeOf(lowerer.typeOf(first));
|
|
3432
|
+
if (t === null)
|
|
3433
|
+
return "other";
|
|
3434
|
+
if (t.kind === "string")
|
|
3435
|
+
return "string";
|
|
3436
|
+
if (t.kind === "dyn")
|
|
3437
|
+
return "dyn";
|
|
3438
|
+
if (t.kind === "union") {
|
|
3439
|
+
const arms = lowerer.unions.get(t.unionId)?.arms ?? [];
|
|
3440
|
+
return arms.some((arm) => arm.kind === "string" || arm.kind === "dyn") ? "other" : null;
|
|
3441
|
+
}
|
|
3442
|
+
return t.kind === "jsval" || t.kind === "caught" ? "other" : null;
|
|
3443
|
+
}
|
|
3444
|
+
/** The runtime formatter over a call's arguments: one checked-dynamic
|
|
3445
|
+
* pack in source order (spreads contribute their elements), after the
|
|
3446
|
+
* options when `options` is given (null: an omitted options argument,
|
|
3447
|
+
* which Node's validation rejects). A literal prefix joins a literal
|
|
3448
|
+
* format string. */
|
|
3449
|
+
export function lowerRuntimeFormat(lowerer, argNodes, loc, options, literalPrefix = "") {
|
|
3450
|
+
const stmts = [];
|
|
3451
|
+
let optionsRef = null;
|
|
3452
|
+
if (options !== undefined) {
|
|
3453
|
+
const held = lowerer.declareHiddenLocal("%formatOptions", DYN);
|
|
3454
|
+
stmts.push({
|
|
3455
|
+
kind: "varDecl",
|
|
3456
|
+
localId: held.id,
|
|
3457
|
+
init: options === null ? dynUndefinedExpr(loc) : lowerer.lowerExprExpecting(options, DYN),
|
|
3458
|
+
loc,
|
|
3459
|
+
});
|
|
3460
|
+
optionsRef = varRef(held.id, DYN, loc);
|
|
3461
|
+
}
|
|
3462
|
+
let nodes = argNodes;
|
|
3463
|
+
const leading = [];
|
|
3464
|
+
if (literalPrefix !== "") {
|
|
3465
|
+
const first = argNodes[0];
|
|
3466
|
+
leading.push(strLit(literalPrefix + first.text, loc));
|
|
3467
|
+
nodes = argNodes.slice(1);
|
|
3468
|
+
}
|
|
3469
|
+
const pack = dynArgumentPack(lowerer, nodes, loc, {
|
|
3470
|
+
leading,
|
|
3471
|
+
blame: argNodes[0] ?? options ?? undefined,
|
|
3472
|
+
});
|
|
3473
|
+
stmts.push(...pack.stmts);
|
|
3474
|
+
const result = optionsRef === null
|
|
3475
|
+
? { kind: "libCall", fn: "insp.format", args: [pack.pack()], type: STRING, loc }
|
|
3476
|
+
: {
|
|
3477
|
+
kind: "libCall",
|
|
3478
|
+
fn: "insp.formatWithOptions",
|
|
3479
|
+
args: [optionsRef, pack.pack()],
|
|
3480
|
+
type: STRING,
|
|
3481
|
+
loc,
|
|
3482
|
+
};
|
|
3483
|
+
return { kind: "seqExpr", stmts, result, type: STRING, loc };
|
|
3484
|
+
}
|
|
3485
|
+
/** The arguments of a call whose first argument is a string or dyn value
|
|
3486
|
+
* known only at run time, each evaluated once into a hidden local:
|
|
3487
|
+
* `specifies` tests that string for a '%' before its last character, and
|
|
3488
|
+
* `format()` is the runtime formatter over the held values. The caller
|
|
3489
|
+
* renders the other branch (the space-joined arguments) from `args` when
|
|
3490
|
+
* every argument is `joinable` there. */
|
|
3491
|
+
export function heldFormatArgs(lowerer, argNodes, loc) {
|
|
3492
|
+
const stmts = [];
|
|
3493
|
+
let unconvertible = null;
|
|
3494
|
+
const unconvertibleSurface = (t) => `util.format with a runtime format string over '${lowerer.fmt(t)}' values`;
|
|
3495
|
+
const args = argNodes.map((node) => {
|
|
3496
|
+
const value = lowerer.lowerExpr(node);
|
|
3497
|
+
if (value.type.kind === "void") {
|
|
3498
|
+
lowerer.unsupported("SC1090", node, "util.format of a void call result (call it as its own statement, then pass undefined)");
|
|
3499
|
+
}
|
|
3500
|
+
// The space-joined branch prints these values as before; only a string
|
|
3501
|
+
// that substitutes refuses them, where it runs.
|
|
3502
|
+
if (value.type.kind !== "dyn" && !lowerer.dynConvertible(value.type))
|
|
3503
|
+
unconvertible ??= { node, type: value.type };
|
|
3504
|
+
// Unit values have no local: their effects run here and a literal
|
|
3505
|
+
// stands in.
|
|
3506
|
+
const k = value.type.kind;
|
|
3507
|
+
if (k === "undefinedT" || k === "nullT") {
|
|
3508
|
+
if (value.kind !== "unitLit")
|
|
3509
|
+
stmts.push({ kind: "exprStmt", expr: value, loc });
|
|
3510
|
+
const unit = k === "nullT" ? "null" : "undefined";
|
|
3511
|
+
return { node, ref: () => ({ kind: "unitLit", unit, type: value.type, loc }) };
|
|
3512
|
+
}
|
|
3513
|
+
const held = lowerer.declareHiddenLocal("%formatArg", value.type);
|
|
3514
|
+
stmts.push({ kind: "varDecl", localId: held.id, init: value, loc });
|
|
3515
|
+
return { node, ref: () => varRef(held.id, value.type, loc) };
|
|
3516
|
+
});
|
|
3517
|
+
const first = args[0].ref();
|
|
3518
|
+
// A lowered value that is neither a string nor convertible holds no
|
|
3519
|
+
// string, so it never substitutes.
|
|
3520
|
+
const specifies = first.type.kind === "string"
|
|
3521
|
+
? { kind: "libCall", fn: "insp.formatSpecifies", args: [first], type: BOOL, loc }
|
|
3522
|
+
: first.type.kind === "dyn" || lowerer.dynConvertible(first.type)
|
|
3523
|
+
? {
|
|
3524
|
+
kind: "libCall",
|
|
3525
|
+
fn: "insp.formatSpecifiesDyn",
|
|
3526
|
+
args: [lowerer.coerceToExpected(first, DYN)],
|
|
3527
|
+
type: BOOL,
|
|
3528
|
+
loc,
|
|
3529
|
+
}
|
|
3530
|
+
: { kind: "boolLit", value: false, type: BOOL, loc };
|
|
3531
|
+
const format = () => {
|
|
3532
|
+
if (unconvertible !== null) {
|
|
3533
|
+
const fenced = unconvertible;
|
|
3534
|
+
return runtimeFenceValue(lowerer, unconvertibleSurface(fenced.type), fenced.node, UNCONVERTIBLE_HINT, loc);
|
|
3535
|
+
}
|
|
3536
|
+
// Strings, numbers, booleans, null and undefined format without the
|
|
3537
|
+
// checked-dynamic walk other values need, which keeps it out of the
|
|
3538
|
+
// executable.
|
|
3539
|
+
const primitive = (t) => t.kind === "string" ||
|
|
3540
|
+
t.kind === "f64" ||
|
|
3541
|
+
t.kind === "bool" ||
|
|
3542
|
+
t.kind === "undefinedT" ||
|
|
3543
|
+
t.kind === "nullT" ||
|
|
3544
|
+
(t.kind === "union" && (lowerer.unions.get(t.unionId)?.arms.every(primitive) ?? false));
|
|
3545
|
+
// A native list of the checked values: converting into it is a tier
|
|
3546
|
+
// boundary, so the statement stays static.
|
|
3547
|
+
return {
|
|
3548
|
+
kind: "libCall",
|
|
3549
|
+
fn: args.every((arg) => primitive(arg.ref().type))
|
|
3550
|
+
? "insp.formatPrimitives"
|
|
3551
|
+
: "insp.formatList",
|
|
3552
|
+
args: [
|
|
3553
|
+
{
|
|
3554
|
+
kind: "arrayLit",
|
|
3555
|
+
elems: args.map((arg) => lowerer.coerceToExpected(arg.ref(), DYN)),
|
|
3556
|
+
type: arrayOf(DYN),
|
|
3557
|
+
loc,
|
|
3558
|
+
},
|
|
3559
|
+
],
|
|
3560
|
+
type: STRING,
|
|
3561
|
+
loc,
|
|
3562
|
+
};
|
|
3563
|
+
};
|
|
3564
|
+
// The space-joined branch renders each argument statically; arguments
|
|
3565
|
+
// the static rendering refuses take the runtime formatter in both cases.
|
|
3566
|
+
const joinable = args.every(({ ref }) => {
|
|
3567
|
+
const t = ref().type;
|
|
3568
|
+
if (t.kind === "func")
|
|
3569
|
+
return false;
|
|
3570
|
+
if (t.kind === "bytes")
|
|
3571
|
+
return true;
|
|
3572
|
+
return inspectSupport(lowerer, t, new Set(), { recursive: false }) === null;
|
|
3573
|
+
});
|
|
3574
|
+
// Without a joined branch every call formats: TypeScript refuses the
|
|
3575
|
+
// value at compile time.
|
|
3576
|
+
const refused = unconvertible;
|
|
3577
|
+
if (!joinable && refused !== null && !isJsSourceFile(ts.getSourceFileOfNode(refused.node)))
|
|
3578
|
+
lowerer.noLowering(unconvertibleSurface(refused.type), refused.node, UNCONVERTIBLE_HINT);
|
|
3579
|
+
return { stmts, args, specifies, format, joinable };
|
|
3580
|
+
}
|
|
2884
3581
|
/** Arrays anywhere in the tree — the %o (showHidden) gate. */
|
|
2885
3582
|
function typeTreeHasHidden(lowerer, t, visiting) {
|
|
2886
3583
|
switch (t.kind) {
|