@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,4 +1,5 @@
|
|
|
1
1
|
/* LlEmitter's module-level output: module parts, helper definitions, library declarations and FFI callback definitions. */
|
|
2
|
+
import { loopUnrollMetadata } from "./periodic-guards.js";
|
|
2
3
|
import { relieveHeapPressure } from "../../heap-pressure.js";
|
|
3
4
|
import { emitWasmModules } from "./wasm-modules.js";
|
|
4
5
|
import { ffiCallbackDummyLl, llStrBytes } from "./emitter.js";
|
|
@@ -19,7 +20,8 @@ import { RUNTIME_ABI_MARKER } from "../runtime-abi.js";
|
|
|
19
20
|
import { threadSlotsBlockDefinitions } from "./thread-slots.js";
|
|
20
21
|
import { ABSENT_FIELD_PAYLOAD, exactIndexLines, f64Lit, ffiNativeParamLl, ffiNativeReturnLl, ffiNativeTypeLl, } from "./common.js";
|
|
21
22
|
import { literalCapWord, literalCapWord32 } from "./string-key-hash.js";
|
|
22
|
-
import { hasLoneSurrogate, wtf8Bytes } from "../literals.js";
|
|
23
|
+
import { hasLoneSurrogate, llvmBytes, wtf8Bytes } from "../literals.js";
|
|
24
|
+
import { nodeIslandManifest } from "../../node-islands/modules.js";
|
|
23
25
|
import { undefinedArmTag } from "../../ir/analysis.js";
|
|
24
26
|
import { NULLABLE_ABSENT, NULLABLE_NULL } from "./nullable-unions.js";
|
|
25
27
|
import { literalEqualityDefinition } from "./string-literal-equality.js";
|
|
@@ -27,6 +29,8 @@ import { STRING_READ_HELPERS, stringScanDecl, stringScanInline } from "./string-
|
|
|
27
29
|
import { emitLibraryIdentityLines } from "../library-identity-markers.js";
|
|
28
30
|
import { InternalCompilerError } from "../../errors.js";
|
|
29
31
|
import { targetCpuAttribute } from "../target-cpu.js";
|
|
32
|
+
import { CPU_LEVEL_INIT_CALL, cpuDispatchAttributes, cpuLevelDefs } from "./cpu-dispatch.js";
|
|
33
|
+
import { layoutTierOf } from "./function-layout.js";
|
|
30
34
|
/** The function bodies emitted in `chunks` contiguous ranges, each by its
|
|
31
35
|
* own emitter (LlEmitter.chunkEmitter), then merged in function order: the
|
|
32
36
|
* text one emitter gives. */
|
|
@@ -66,13 +70,33 @@ export function workerMinFunctions() {
|
|
|
66
70
|
const value = Number(process.env["SCRIPTC_EMIT_WORKER_FUNCTIONS"] ?? "2000");
|
|
67
71
|
return Number.isFinite(value) && value > 0 ? value : 2000;
|
|
68
72
|
}
|
|
73
|
+
/** A function's estimated emission cost beyond its IR nodes, in nodes:
|
|
74
|
+
* fitted to the worker emission times of a large program's ranges. */
|
|
75
|
+
const FUNCTION_EMIT_COST = 22;
|
|
76
|
+
/** Where each of about `count` contiguous ranges of `functions` starts,
|
|
77
|
+
* followed by the end: ranges of about equal estimated emission cost, a
|
|
78
|
+
* function's node count plus FUNCTION_EMIT_COST. No range is empty. */
|
|
79
|
+
export function emitRangeStarts(functions, count, nodeCount) {
|
|
80
|
+
const costs = functions.map((fn) => (nodeCount(fn) ?? 0) + FUNCTION_EMIT_COST);
|
|
81
|
+
const total = costs.reduce((sum, cost) => sum + cost, 0);
|
|
82
|
+
const starts = [0];
|
|
83
|
+
let sum = 0;
|
|
84
|
+
for (let i = 0; i < functions.length - 1 && starts.length < count; i++) {
|
|
85
|
+
sum += costs[i];
|
|
86
|
+
if (sum >= (total * starts.length) / count)
|
|
87
|
+
starts.push(i + 1);
|
|
88
|
+
}
|
|
89
|
+
starts.push(functions.length);
|
|
90
|
+
return starts;
|
|
91
|
+
}
|
|
69
92
|
/** The function bodies emitted on forked worker processes, `workers` at a
|
|
70
|
-
* time: the function list splits into contiguous ranges
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
93
|
+
* time: the function list splits into contiguous ranges of about equal
|
|
94
|
+
* estimated cost (emitRangeStarts), each emitted in its own process, which
|
|
95
|
+
* inherits this emitter as it is at the fork and records a journal
|
|
96
|
+
* (emit-journal.ts). A new range starts whenever a worker ends, and ranges
|
|
97
|
+
* merge in function order, so the text is the serial text. A range whose
|
|
98
|
+
* worker fails is emitted here when its turn comes. Null without fork
|
|
99
|
+
* primitives (Node, Windows, inside a worker) or when the module is small. */
|
|
76
100
|
function emitFunctionsOnWorkers(emitter, workers) {
|
|
77
101
|
const fork = emitter.targetOptions.forkPrimitives;
|
|
78
102
|
const functions = emitter.mod.functions;
|
|
@@ -81,11 +105,15 @@ function emitFunctionsOnWorkers(emitter, workers) {
|
|
|
81
105
|
if (functions.length < workerMinFunctions())
|
|
82
106
|
return null;
|
|
83
107
|
// More ranges than workers: a range's merge overlaps the later ranges'
|
|
84
|
-
// emission, and a slow range holds back less.
|
|
85
|
-
|
|
86
|
-
const
|
|
108
|
+
// emission, and a slow range holds back less. Ranges of equal cost finish
|
|
109
|
+
// at about the same time.
|
|
110
|
+
const starts = emitRangeStarts(functions, Math.min(functions.length, workers * 3), (fn) => emitter.nodeIndex.nodeCount(fn));
|
|
111
|
+
const count = starts.length - 1;
|
|
112
|
+
const rangeFunctions = (range) => functions.slice(starts[range], starts[range + 1]);
|
|
87
113
|
const dir = mkdtempSync(join(tmpdir(), "scriptc-emit-"));
|
|
88
114
|
const pids = [];
|
|
115
|
+
// The workers not yet reaped, by pid, with their ranges.
|
|
116
|
+
const running = new Map();
|
|
89
117
|
const start = (range) => {
|
|
90
118
|
const pid = fork.fork();
|
|
91
119
|
if (pid === 0) {
|
|
@@ -94,7 +122,7 @@ function emitFunctionsOnWorkers(emitter, workers) {
|
|
|
94
122
|
emitter.journal = new EmitJournal();
|
|
95
123
|
emitter.debug?.record();
|
|
96
124
|
const texts = [];
|
|
97
|
-
for (const fn of
|
|
125
|
+
for (const fn of rangeFunctions(range)) {
|
|
98
126
|
texts.push(emitter.emitFunction(fn));
|
|
99
127
|
relieveHeapPressure();
|
|
100
128
|
}
|
|
@@ -109,18 +137,42 @@ function emitFunctionsOnWorkers(emitter, workers) {
|
|
|
109
137
|
fork.exit(code);
|
|
110
138
|
}
|
|
111
139
|
pids.push(pid);
|
|
140
|
+
if (pid > 0)
|
|
141
|
+
running.set(pid, range);
|
|
112
142
|
};
|
|
113
143
|
const fnDefs = [];
|
|
144
|
+
// Ended ranges by index, with what their workers wrote (null when a worker
|
|
145
|
+
// failed), waiting to merge in function order.
|
|
146
|
+
const ended = new Map();
|
|
147
|
+
// Reaps a worker and starts the next range in its place. A worker's journal
|
|
148
|
+
// records requests, not table contents, so its range's text doesn't depend
|
|
149
|
+
// on what merged before it forked.
|
|
150
|
+
const reap = (pid, range) => {
|
|
151
|
+
const status = pid > 0 ? fork.wait(pid) : -1;
|
|
152
|
+
running.delete(pid);
|
|
153
|
+
if (pids.length < count)
|
|
154
|
+
start(pids.length);
|
|
155
|
+
ended.set(range, status === 0 ? readRange(dir, range) : null);
|
|
156
|
+
};
|
|
114
157
|
try {
|
|
115
158
|
for (let range = 0; range < Math.min(workers, count); range++)
|
|
116
159
|
start(range);
|
|
117
160
|
for (let range = 0; range < count; range++) {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
//
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
161
|
+
// Until this range's worker ends, reap whichever worker ends first, so
|
|
162
|
+
// that `workers` keep running while ranges merge in order. A child
|
|
163
|
+
// that isn't a worker (or no `exited`) waits for this range's worker.
|
|
164
|
+
while (!ended.has(range)) {
|
|
165
|
+
const pid = pids[range];
|
|
166
|
+
const first = pid > 0 && fork.exited !== undefined ? fork.exited() : pid;
|
|
167
|
+
const other = running.get(first);
|
|
168
|
+
if (first !== pid && other !== undefined)
|
|
169
|
+
reap(first, other);
|
|
170
|
+
else
|
|
171
|
+
reap(pid, range);
|
|
172
|
+
}
|
|
173
|
+
const merged = ended.get(range);
|
|
174
|
+
ended.delete(range);
|
|
175
|
+
const slice = rangeFunctions(range);
|
|
124
176
|
if (merged !== null && merged.texts.length === slice.length) {
|
|
125
177
|
const rename = emitter.mergeChunk(merged.result);
|
|
126
178
|
slice.forEach((fn, index) => {
|
|
@@ -136,8 +188,6 @@ function emitFunctionsOnWorkers(emitter, workers) {
|
|
|
136
188
|
fnDefs.push(def);
|
|
137
189
|
relieveHeapPressure();
|
|
138
190
|
}
|
|
139
|
-
if (pids.length < count)
|
|
140
|
-
start(pids.length);
|
|
141
191
|
}
|
|
142
192
|
}
|
|
143
193
|
finally {
|
|
@@ -158,15 +208,22 @@ function readRange(dir, range) {
|
|
|
158
208
|
}
|
|
159
209
|
/** The attribute groups of the emitted functions: #0 for every function,
|
|
160
210
|
* #1 for coroutine bodies and #2 for out-of-line record clones. Each carries
|
|
161
|
-
* the build's `--target-cpu` level
|
|
211
|
+
* the build's `--target-cpu` level, `sanitize_address` in sanitized builds,
|
|
212
|
+
* and `uwtable` on native targets, so every function has an unwind table
|
|
213
|
+
* entry, including those LLVM infers `nounwind` (profilers and debuggers
|
|
214
|
+
* unwind through them). A group needs one attribute: without any, #0 holds a
|
|
215
|
+
* string attribute that LLVM ignores. Dispatching builds add the x86-64-v3
|
|
216
|
+
* copies' #3 and #4 (cpu-dispatch.ts). */
|
|
162
217
|
function functionAttributes(emitter, hasNoInlineRecordClone) {
|
|
163
218
|
const cpu = targetCpuAttribute(emitter.targetCpu);
|
|
219
|
+
const asan = emitter.sanitizeAttributes ? " sanitize_address" : "";
|
|
220
|
+
const common = `${asan}${emitter.wasi ? "" : " uwtable"}`;
|
|
221
|
+
const base = `${common}${cpu}` || ` "scriptc-function"`;
|
|
164
222
|
return [
|
|
165
|
-
`attributes #0 = {
|
|
166
|
-
...(emitter.usesCoroutines
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
...(hasNoInlineRecordClone ? [`attributes #2 = { noinline sanitize_address${cpu} }`] : []),
|
|
223
|
+
`attributes #0 = {${base} }`,
|
|
224
|
+
...(emitter.usesCoroutines ? [`attributes #1 = {${common} presplitcoroutine${cpu} }`] : []),
|
|
225
|
+
...(hasNoInlineRecordClone ? [`attributes #2 = { noinline${common}${cpu} }`] : []),
|
|
226
|
+
...(emitter.cpuDispatch ? cpuDispatchAttributes(common) : []),
|
|
170
227
|
];
|
|
171
228
|
}
|
|
172
229
|
/** The group line written before each function's text. Functions from one
|
|
@@ -189,6 +246,78 @@ function partitionGroupLines(functions) {
|
|
|
189
246
|
}
|
|
190
247
|
/** Ends the group of the definitions that follow. */
|
|
191
248
|
const PARTITION_GROUP_END = "; scriptc-group";
|
|
249
|
+
/** Written before the entry module's top-level code (its `%init.<n>`). The
|
|
250
|
+
* LLVM helper gives that function and the chain that follows it a partition
|
|
251
|
+
* of their own, so an edit of the program's top level recompiles only that
|
|
252
|
+
* code (native/llvm-codegen/src/partition.cpp). */
|
|
253
|
+
const PARTITION_ENTRY_LINE = "; scriptc-entry";
|
|
254
|
+
/** Whether each function is the entry module's top-level code. */
|
|
255
|
+
function partitionEntries(functions, sourceFile) {
|
|
256
|
+
return functions.map((fn) => fn.name.startsWith("%init.") && fn.loc.file === sourceFile);
|
|
257
|
+
}
|
|
258
|
+
/** Writes the generated helpers, then the function definitions with their
|
|
259
|
+
* group lines, and the entry line before the entry module's top-level code.
|
|
260
|
+
* With a layout, the definitions it lists, helpers included, move after the
|
|
261
|
+
* unlisted helpers and before the other functions, by tier, each in its
|
|
262
|
+
* tier's group (`layout-<tier>`). The helper compiles each
|
|
263
|
+
* partition's definitions in text order, so listed ones come first in their
|
|
264
|
+
* partitions, and it places a group's definitions in the same partitions.
|
|
265
|
+
* Everything else keeps its order and its source-file group. */
|
|
266
|
+
function writeDefinitions(out, layout, helperTexts, fnDefs, groups, entries) {
|
|
267
|
+
const tierLine = (tier) => `${PARTITION_GROUP_END} layout-${tier}`;
|
|
268
|
+
const listed = new Map();
|
|
269
|
+
const listIn = (tier, lines) => {
|
|
270
|
+
const list = listed.get(tier) ?? [];
|
|
271
|
+
if (!listed.has(tier))
|
|
272
|
+
listed.set(tier, list);
|
|
273
|
+
for (const line of lines)
|
|
274
|
+
list.push(line);
|
|
275
|
+
};
|
|
276
|
+
if (layout === undefined || layout.size === 0) {
|
|
277
|
+
for (const texts of helperTexts)
|
|
278
|
+
for (const text of texts)
|
|
279
|
+
out.push(text);
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
// A helper's text can span several entries (one per line), so the
|
|
283
|
+
// definitions are found in the joined text. A listed definition moves
|
|
284
|
+
// through its closing brace; what follows it stays in place.
|
|
285
|
+
const joined = [];
|
|
286
|
+
for (const texts of helperTexts)
|
|
287
|
+
for (const text of texts)
|
|
288
|
+
joined.push(text);
|
|
289
|
+
for (const part of joined.join("\n").split(/\n(?=define )/)) {
|
|
290
|
+
const tier = part.startsWith("define ") ? layoutTierOf(layout, part) : undefined;
|
|
291
|
+
const close = tier === undefined ? -1 : part.search(/\n}(\n|$)/);
|
|
292
|
+
if (tier === undefined || close < 0) {
|
|
293
|
+
out.push(part);
|
|
294
|
+
continue;
|
|
295
|
+
}
|
|
296
|
+
listIn(tier, [tierLine(tier), part.slice(0, close + 2)]);
|
|
297
|
+
const rest = part.slice(close + 3);
|
|
298
|
+
if (rest !== "")
|
|
299
|
+
out.push(rest);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
const unlisted = [];
|
|
303
|
+
fnDefs.forEach((text, i) => {
|
|
304
|
+
const tier = layout === undefined || layout.size === 0 ? undefined : layoutTierOf(layout, text);
|
|
305
|
+
if (tier === undefined)
|
|
306
|
+
unlisted.push(i);
|
|
307
|
+
else
|
|
308
|
+
listIn(tier, ["", ...(entries[i] ? [PARTITION_ENTRY_LINE] : []), tierLine(tier), text]);
|
|
309
|
+
});
|
|
310
|
+
for (const tier of [...listed.keys()].sort((a, b) => a - b))
|
|
311
|
+
for (const line of listed.get(tier))
|
|
312
|
+
out.push(line);
|
|
313
|
+
for (const [k, i] of unlisted.entries()) {
|
|
314
|
+
if (k > 0 || listed.size > 0)
|
|
315
|
+
out.push("");
|
|
316
|
+
if (entries[i])
|
|
317
|
+
out.push(PARTITION_ENTRY_LINE);
|
|
318
|
+
out.push(groups[i] ?? PARTITION_GROUP_END, fnDefs[i]);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
192
321
|
export function emitModuleParts(emitter) {
|
|
193
322
|
// Function bodies first (the literal/unit/fn-value tables fill as they
|
|
194
323
|
// emit), then the file assembles around them — the runtime ABI’s order.
|
|
@@ -280,6 +409,9 @@ export function emitModuleParts(emitter) {
|
|
|
280
409
|
const usesEvents = runtimeFeatures.processEvents;
|
|
281
410
|
const usesChildProcess = runtimeFeatures.childProcess;
|
|
282
411
|
const usesFsWatch = runtimeFeatures.fsWatch;
|
|
412
|
+
// Programs that call into Node record the libnode pack and its Node
|
|
413
|
+
// version before %main (scr_node_island.c).
|
|
414
|
+
const usesNodeIsland = runtimeFeatures.nodeIsland;
|
|
283
415
|
// Stream-surface programs fill the loop's stream hook (the deferred
|
|
284
416
|
// next-tick emissions) and the emitter's post-registration flow kick
|
|
285
417
|
// before %main — scr_stream.c links only when the line is emitted
|
|
@@ -338,6 +470,19 @@ export function emitModuleParts(emitter) {
|
|
|
338
470
|
emitter.declare(`declare void @scr_worker_stdio_install(ptr, ptr, ptr)`);
|
|
339
471
|
if (usesFsWatch)
|
|
340
472
|
emitter.declare(`declare void @scr_watch_install()`);
|
|
473
|
+
if (usesNodeIsland)
|
|
474
|
+
emitter.declare(`declare void @scr_node_island_install(ptr, ptr)`);
|
|
475
|
+
// Interned now: the C-string constants flush before main assembles.
|
|
476
|
+
const nodeIslandConfig = usesNodeIsland
|
|
477
|
+
? [
|
|
478
|
+
emitter.cstr(emitter.mod.nodeIsland?.libnode ?? ""),
|
|
479
|
+
emitter.cstr(emitter.mod.nodeIsland?.nodeVersion ?? ""),
|
|
480
|
+
]
|
|
481
|
+
: null;
|
|
482
|
+
// The island module tree: its manifest, and its files unless they ship
|
|
483
|
+
// beside the executable (node-islands/modules.ts).
|
|
484
|
+
const nodeIslandModules = usesNodeIsland ? emitter.mod.nodeIsland?.modules : undefined;
|
|
485
|
+
const nodeIslandModulesCall = nodeIslandModules === undefined ? null : nodeIslandModulesInstall(emitter, nodeIslandModules);
|
|
341
486
|
if (emitter.ffiHasForeignCallback)
|
|
342
487
|
emitter.declare(`declare void @scr_ffi_install()`);
|
|
343
488
|
if (usesStream)
|
|
@@ -409,13 +554,15 @@ export function emitModuleParts(emitter) {
|
|
|
409
554
|
const globalReleases = exitReleaseLines("g");
|
|
410
555
|
const asyncEntry = emitter.fnByName.get(emitter.mod.entry)?.async === true;
|
|
411
556
|
const entryMayThrow = emitter.mayThrow.has(emitter.mod.entry);
|
|
412
|
-
// The event loop runs when timers appeared
|
|
413
|
-
//
|
|
414
|
-
//
|
|
557
|
+
// The event loop runs when timers appeared, a promise is made (the loop's
|
|
558
|
+
// end reports an unhandled rejection, Node's exit 1), OR any
|
|
559
|
+
// async/generator function exists (the C main's hasAsync ||
|
|
560
|
+
// hasGenerators || usesTimers gate). Generator programs run
|
|
415
561
|
// the loop too: its exit accounting notes still-suspended generator
|
|
416
562
|
// fibers as abandoned, so the RC audit downgrades exactly like the
|
|
417
563
|
// async loop-exhaustion story.
|
|
418
564
|
const runsLoop = emitter.usesTimers ||
|
|
565
|
+
emitter.usesPromises ||
|
|
419
566
|
emitter.ffiHasForeignCallback ||
|
|
420
567
|
emitter.mod.functions.some((f) => f.async === true || f.generator !== undefined);
|
|
421
568
|
const uncaughtReleases = entryMayThrow && !asyncEntry ? exitReleaseLines("gu") : [];
|
|
@@ -519,6 +666,7 @@ export function emitModuleParts(emitter) {
|
|
|
519
666
|
...(emitter.publishWalkersCache?.defs() ?? []),
|
|
520
667
|
...emitter.publishedClassNamesDefs(),
|
|
521
668
|
...(emitter.regions?.moduleDefs() ?? []),
|
|
669
|
+
...(emitter.cpuDispatch ? cpuLevelDefs((line) => emitter.declare(line)) : []),
|
|
522
670
|
];
|
|
523
671
|
if (emitter.constantNumericTables.size > 0)
|
|
524
672
|
emitter.declare(`declare double @scr_arr_get_number(ptr, double)`);
|
|
@@ -532,6 +680,17 @@ export function emitModuleParts(emitter) {
|
|
|
532
680
|
for (const decl of code.decls)
|
|
533
681
|
emitter.declare(decl);
|
|
534
682
|
}
|
|
683
|
+
// Replacers of global substitutions with a literal replacement; the call
|
|
684
|
+
// sites register only patterns inside the compiled subset.
|
|
685
|
+
const regexReplacers = [];
|
|
686
|
+
for (const rr of emitter.regexReplacers.values()) {
|
|
687
|
+
const code = compileRegexMatcher(rr.sym, rr.pattern, rr.flags, emitter.sizeType, !emitter.wasi, rr.replacement);
|
|
688
|
+
if (code === null)
|
|
689
|
+
throw new InternalCompilerError(`llvm emitter bug: replacer ${rr.sym} did not compile`);
|
|
690
|
+
regexReplacers.push(code);
|
|
691
|
+
for (const decl of code.decls)
|
|
692
|
+
emitter.declare(decl);
|
|
693
|
+
}
|
|
535
694
|
const out = [
|
|
536
695
|
`; Generated by scriptc (LLVM backend) from ${emitter.mod.sourceFile}. Do not edit.`,
|
|
537
696
|
``,
|
|
@@ -679,6 +838,8 @@ export function emitModuleParts(emitter) {
|
|
|
679
838
|
for (let site = 0; site < emitter.jsIcSiteCount; site++)
|
|
680
839
|
out.push(`@sc_js_ic_${site} = internal ${tl}global [${JS_IC_WORDS} x i64] zeroinitializer`);
|
|
681
840
|
}
|
|
841
|
+
if (nodeIslandModulesCall !== null)
|
|
842
|
+
out.push(...nodeIslandModulesCall.globals);
|
|
682
843
|
for (const table of emitter.constantNumericTables.values()) {
|
|
683
844
|
const n = table.values.length;
|
|
684
845
|
let tableTmp = 0;
|
|
@@ -774,6 +935,8 @@ export function emitModuleParts(emitter) {
|
|
|
774
935
|
out.push(``);
|
|
775
936
|
for (const code of regexMatchers.values())
|
|
776
937
|
out.push(...code.lines, ``);
|
|
938
|
+
for (const code of regexReplacers)
|
|
939
|
+
out.push(...code.lines, ``);
|
|
777
940
|
for (const [, inst] of emitter.templateStringsInstances) {
|
|
778
941
|
// One immortal ScrArr per tagged-template site: a data global of
|
|
779
942
|
// interned cooked-string literals, and the ScrArr header over it
|
|
@@ -817,32 +980,18 @@ export function emitModuleParts(emitter) {
|
|
|
817
980
|
}
|
|
818
981
|
if (globals.length > 0)
|
|
819
982
|
out.push(``);
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
for (const line of emitter.dyn.defs)
|
|
833
|
-
out.push(line);
|
|
834
|
-
for (const line of wrappers)
|
|
835
|
-
out.push(line);
|
|
836
|
-
for (const line of asyncDefs)
|
|
837
|
-
out.push(line);
|
|
838
|
-
for (const line of emitter.resolveThunkDefs)
|
|
839
|
-
out.push(line);
|
|
840
|
-
const groups = partitionGroupLines(emitter.mod.functions);
|
|
841
|
-
for (let i = 0; i < fnDefs.length; i++) {
|
|
842
|
-
if (i > 0)
|
|
843
|
-
out.push("");
|
|
844
|
-
out.push(groups[i] ?? PARTITION_GROUP_END, fnDefs[i]);
|
|
845
|
-
}
|
|
983
|
+
writeDefinitions(out, emitter.targetOptions.functionLayout, [
|
|
984
|
+
helpers,
|
|
985
|
+
ffiCallbacks.defs,
|
|
986
|
+
shapes.defs,
|
|
987
|
+
classShapes.defs,
|
|
988
|
+
classObjDefs,
|
|
989
|
+
emitter.walkers.defs,
|
|
990
|
+
emitter.dyn.defs,
|
|
991
|
+
wrappers,
|
|
992
|
+
asyncDefs,
|
|
993
|
+
emitter.resolveThunkDefs,
|
|
994
|
+
], fnDefs, partitionGroupLines(emitter.mod.functions), partitionEntries(emitter.mod.functions, emitter.mod.sourceFile));
|
|
846
995
|
if (fnDefs.length === 0)
|
|
847
996
|
out.push("");
|
|
848
997
|
out.push(PARTITION_GROUP_END, "");
|
|
@@ -911,11 +1060,12 @@ export function emitModuleParts(emitter) {
|
|
|
911
1060
|
out.push(...functionAttributes(emitter, hasNoInlineRecordClone));
|
|
912
1061
|
out.push(``);
|
|
913
1062
|
out.push(...emitter.fieldAliasMetadata());
|
|
1063
|
+
out.push(...loopUnrollMetadata(out));
|
|
914
1064
|
if (emitter.debug !== null)
|
|
915
1065
|
out.push(emitter.debug.render());
|
|
916
1066
|
return out;
|
|
917
1067
|
}
|
|
918
|
-
out.push(`define i32 @${emitter.mod.workers ? "sc_context_entry" : emitter.wasi ? "__main_argc_argv" : "main"}(i32 %argc, ptr %argv) ${FN_ATTRS} {`, `entry:`, ...(emitter.runtimeAbiMarker ? [` call void @${RUNTIME_ABI_MARKER}()`] : []), ...(emitter.mod.workers ? [` call void @scr_runtime_workers_v8()`] : []), ` call void @scr_init()`,
|
|
1068
|
+
out.push(`define i32 @${emitter.mod.workers ? "sc_context_entry" : emitter.wasi ? "__main_argc_argv" : "main"}(i32 %argc, ptr %argv) ${FN_ATTRS} {`, `entry:`, ...(emitter.runtimeAbiMarker ? [` call void @${RUNTIME_ABI_MARKER}()`] : []), ...(emitter.cpuDispatch && !emitter.mod.workers ? [CPU_LEVEL_INIT_CALL] : []), ...(emitter.mod.workers ? [` call void @scr_runtime_workers_v8()`] : []), ` call void @scr_init()`,
|
|
919
1069
|
// Compressed fields hold addresses in the program-lifetime region, which
|
|
920
1070
|
// is reserved below 32 GiB before compiled code runs.
|
|
921
1071
|
...(emitter.compactRegion ? [` call void @scr_plr_init()`] : []),
|
|
@@ -936,7 +1086,11 @@ export function emitModuleParts(emitter) {
|
|
|
936
1086
|
: []),
|
|
937
1087
|
// fs.watch programs fill the loop's watch hooks the same way —
|
|
938
1088
|
// scr_watch.c links only when this line is emitted.
|
|
939
|
-
...(usesFsWatch ? [` call void @scr_watch_install()`] : []), ...(
|
|
1089
|
+
...(usesFsWatch ? [` call void @scr_watch_install()`] : []), ...(nodeIslandConfig
|
|
1090
|
+
? [
|
|
1091
|
+
` call void @scr_node_island_install(ptr ${nodeIslandConfig[0]}, ptr ${nodeIslandConfig[1]})`,
|
|
1092
|
+
]
|
|
1093
|
+
: []), ...(nodeIslandModulesCall === null ? [] : [nodeIslandModulesCall.call]), ...(emitter.ffiHasForeignCallback ? [` call void @scr_ffi_install()`] : []), ...(snapshotsTlsCa ? [` call void @scr_tls_ca_install()`] : []), ...(usesFetch ? [` call void @scr_fetch_install()`] : []), ...(usesUrlIdna ? [` call void @scr_url_idna_install()`] : []), ...(usesNet ? [` call void @scr_net_install()`, ` call void @scr_net_dyn_install()`] : []), ...(usesNetLookup ? [` call void @scr_net_lookup_install()`] : []), ...(usesHttp ? [` call void @scr_http_dyn_install()`] : []), ...(usesDgram ? [` call void @scr_dgram_install()`] : []), ...(usesHttp2 ? [` call void @scr_http2_dyn_install()`] : []), ...(usesStream ? [` call void @scr_stream_install()`] : []), ` call void @scr_lib_init(i32 %argc, ptr %argv)`,
|
|
940
1094
|
// node:test takes Node's --test-update-snapshots out of argv first.
|
|
941
1095
|
...(usesNodeTest ? [` call void @scr_test_init()`] : []), ...(asyncEntry
|
|
942
1096
|
? [` %top = call ptr @${mangleAsyncSpawn(emitter.mod.entry)}()`]
|
|
@@ -1031,21 +1185,157 @@ export function emitModuleParts(emitter) {
|
|
|
1031
1185
|
for (const line of emitter.inlineRcTail(flushedDecls))
|
|
1032
1186
|
out.push(line);
|
|
1033
1187
|
out.push(
|
|
1034
|
-
//
|
|
1035
|
-
//
|
|
1036
|
-
//
|
|
1188
|
+
// The sanitized lane's -fsanitize=address link instruments the
|
|
1189
|
+
// functions marked sanitize_address (the runtime TUs get theirs from
|
|
1190
|
+
// clang).
|
|
1037
1191
|
...functionAttributes(emitter, hasNoInlineRecordClone), ``);
|
|
1038
1192
|
if (emitter.mod.workers) {
|
|
1039
|
-
out.push(`declare void @scr_context_cleanup()`, `declare i32 @scr_worker_argc()`, `declare ptr @scr_worker_argv()`, `define i32 @sc_worker_entry(i32 %root) ${FN_ATTRS} {`, `entry:`, ` %argc = call i32 @scr_worker_argc()`, ` %argv = call ptr @scr_worker_argv()`, ` %result = call i32 @sc_context_entry(i32 %argc, ptr %argv)`, ` ret i32 %result`, `}`, `define i32 @main(i32 %argc, ptr %argv) ${FN_ATTRS} {`, `entry:`,
|
|
1193
|
+
out.push(`declare void @scr_context_cleanup()`, `declare i32 @scr_worker_argc()`, `declare ptr @scr_worker_argv()`, `define i32 @sc_worker_entry(i32 %root) ${FN_ATTRS} {`, `entry:`, ` %argc = call i32 @scr_worker_argc()`, ` %argv = call ptr @scr_worker_argv()`, ` %result = call i32 @sc_context_entry(i32 %argc, ptr %argv)`, ` ret i32 %result`, `}`, `define i32 @main(i32 %argc, ptr %argv) ${FN_ATTRS} {`, `entry:`,
|
|
1194
|
+
// Worker threads enter at sc_worker_entry and read the level main set.
|
|
1195
|
+
...(emitter.cpuDispatch ? [CPU_LEVEL_INIT_CALL] : []), ` %result = call i32 @sc_context_entry(i32 %argc, ptr %argv)`, ` call void @scr_context_cleanup()`, ` ret i32 %result`, `}`);
|
|
1040
1196
|
}
|
|
1041
1197
|
out.push(...emitter.fieldAliasMetadata());
|
|
1198
|
+
out.push(...loopUnrollMetadata(out));
|
|
1042
1199
|
if (emitter.debug !== null)
|
|
1043
1200
|
out.push(emitter.debug.render());
|
|
1044
1201
|
return out;
|
|
1045
1202
|
}
|
|
1203
|
+
/** The out-of-line hashed probe of a number-key map (scr_map_find_f64):
|
|
1204
|
+
* `keyLines` define the normalized key word %kb from the parameter, and
|
|
1205
|
+
* `runtimeKey` is the double passed to the runtime lookup. A map with at
|
|
1206
|
+
* most SCR_MAP_LINEAR_LIMIT entries keeps no bucket table: the absent-key
|
|
1207
|
+
* filter is tested before its entries are scanned. A bucket table is
|
|
1208
|
+
* probed without the filter: the filter keeps two of its 64 bits per key,
|
|
1209
|
+
* so past a few dozen keys it rejects few absent keys, and the probe's
|
|
1210
|
+
* first bucket read answers those. Compact tables tag each 24-bit entry
|
|
1211
|
+
* index (+1) with the hash's top byte; wider tables take the runtime
|
|
1212
|
+
* lookup. */
|
|
1213
|
+
function hashedNumberProbe(name, param, sz, keyLines, runtimeKey) {
|
|
1214
|
+
return [
|
|
1215
|
+
`define internal ptr @${name}(ptr %m, ${param}) noinline ${FN_ATTRS} {`,
|
|
1216
|
+
`entry:`,
|
|
1217
|
+
...keyLines,
|
|
1218
|
+
` %x1s = lshr i64 %kb, 30`,
|
|
1219
|
+
` %x1 = xor i64 %kb, %x1s`,
|
|
1220
|
+
` %x2 = mul i64 %x1, -4658895280553007687`,
|
|
1221
|
+
` %x3s = lshr i64 %x2, 27`,
|
|
1222
|
+
` %x3 = xor i64 %x2, %x3s`,
|
|
1223
|
+
` %x4 = mul i64 %x3, -7723592293110705685`,
|
|
1224
|
+
` %x5s = lshr i64 %x4, 31`,
|
|
1225
|
+
` %x5 = xor i64 %x4, %x5s`,
|
|
1226
|
+
` %hz = icmp eq i64 %x5, 0`,
|
|
1227
|
+
` %h = select i1 %hz, i64 1, i64 %x5`,
|
|
1228
|
+
` %nbp = getelementptr inbounds %ScrMapIx, ptr %m, i32 0, i32 13`,
|
|
1229
|
+
...(sz === "i64"
|
|
1230
|
+
? [` %nb32 = load i32, ptr %nbp`, ` %nb = zext i32 %nb32 to i64`]
|
|
1231
|
+
: [` %nb = load i32, ptr %nbp`]),
|
|
1232
|
+
` %eps = getelementptr inbounds %ScrMapIx, ptr %m, i32 0, i32 11`,
|
|
1233
|
+
` %ents = load ptr, ptr %eps`,
|
|
1234
|
+
` %linear = icmp eq ${sz} %nb, 0`,
|
|
1235
|
+
` br i1 %linear, label %filter, label %buckets`,
|
|
1236
|
+
`filter:`,
|
|
1237
|
+
` %f1s = lshr i64 %h, 44`,
|
|
1238
|
+
` %f1a = and i64 %f1s, 63`,
|
|
1239
|
+
` %f1 = shl i64 1, %f1a`,
|
|
1240
|
+
` %f2s = lshr i64 %h, 50`,
|
|
1241
|
+
` %f2a = and i64 %f2s, 63`,
|
|
1242
|
+
` %f2 = shl i64 1, %f2a`,
|
|
1243
|
+
` %fb = or i64 %f1, %f2`,
|
|
1244
|
+
` %fp = getelementptr inbounds %ScrMapIx, ptr %m, i32 0, i32 10`,
|
|
1245
|
+
` %filter.bits = load i64, ptr %fp`,
|
|
1246
|
+
` %fm = and i64 %filter.bits, %fb`,
|
|
1247
|
+
` %fin = icmp eq i64 %fm, %fb`,
|
|
1248
|
+
` br i1 %fin, label %scan, label %miss`,
|
|
1249
|
+
// A number-key entry has no cached hash; a dead entry's key matches no key.
|
|
1250
|
+
`scan:`,
|
|
1251
|
+
` %nep = getelementptr inbounds %ScrMapIx, ptr %m, i32 0, i32 8`,
|
|
1252
|
+
...(sz === "i64"
|
|
1253
|
+
? [` %ne32 = load i32, ptr %nep`, ` %ne = zext i32 %ne32 to i64`]
|
|
1254
|
+
: [` %ne = load i32, ptr %nep`]),
|
|
1255
|
+
` br label %scan.loop`,
|
|
1256
|
+
`scan.loop:`,
|
|
1257
|
+
` %si = phi ${sz} [ 0, %scan ], [ %si.next, %scan.next ]`,
|
|
1258
|
+
` %sdone = icmp eq ${sz} %si, %ne`,
|
|
1259
|
+
` br i1 %sdone, label %miss, label %scan.entry`,
|
|
1260
|
+
`scan.entry:`,
|
|
1261
|
+
` %se = getelementptr inbounds %ScrMapNumEntry, ptr %ents, ${sz} %si`,
|
|
1262
|
+
` %sk = load i64, ptr %se`,
|
|
1263
|
+
` %skq = icmp eq i64 %sk, %kb`,
|
|
1264
|
+
` br i1 %skq, label %scan.found, label %scan.next`,
|
|
1265
|
+
`scan.found:`,
|
|
1266
|
+
` ret ptr %se`,
|
|
1267
|
+
`scan.next:`,
|
|
1268
|
+
` %si.next = add ${sz} %si, 1`,
|
|
1269
|
+
` br label %scan.loop`,
|
|
1270
|
+
`buckets:`,
|
|
1271
|
+
` %wide = icmp ugt ${sz} %nb, 16777216`,
|
|
1272
|
+
` br i1 %wide, label %runtime, label %probe`,
|
|
1273
|
+
`probe:`,
|
|
1274
|
+
` %bp = getelementptr inbounds %ScrMapIx, ptr %m, i32 0, i32 14`,
|
|
1275
|
+
` %bk = load ptr, ptr %bp`,
|
|
1276
|
+
` %mask = sub ${sz} %nb, 1`,
|
|
1277
|
+
` %ht = lshr i64 %h, 32`,
|
|
1278
|
+
` %ht32 = trunc i64 %ht to i32`,
|
|
1279
|
+
` %tag = and i32 %ht32, -16777216`,
|
|
1280
|
+
sz === "i64" ? ` %hi = add i64 %h, 0` : ` %hi = trunc i64 %h to ${sz}`,
|
|
1281
|
+
` %i0 = and ${sz} %hi, %mask`,
|
|
1282
|
+
` br label %probe.loop`,
|
|
1283
|
+
`probe.loop:`,
|
|
1284
|
+
` %pi = phi ${sz} [ %i0, %probe ], [ %pi.next, %probe.next ]`,
|
|
1285
|
+
` %bep = getelementptr inbounds i32, ptr %bk, ${sz} %pi`,
|
|
1286
|
+
` %b = load i32, ptr %bep`,
|
|
1287
|
+
` %bempty = icmp eq i32 %b, 0`,
|
|
1288
|
+
` br i1 %bempty, label %miss, label %probe.tag`,
|
|
1289
|
+
`probe.tag:`,
|
|
1290
|
+
` %bt = and i32 %b, -16777216`,
|
|
1291
|
+
` %btq = icmp eq i32 %bt, %tag`,
|
|
1292
|
+
` br i1 %btq, label %probe.entry, label %probe.next`,
|
|
1293
|
+
`probe.entry:`,
|
|
1294
|
+
` %bix = and i32 %b, 16777215`,
|
|
1295
|
+
` %bix1 = sub i32 %bix, 1`,
|
|
1296
|
+
sz === "i32" ? ` %bi = add i32 %bix1, 0` : ` %bi = zext i32 %bix1 to ${sz}`,
|
|
1297
|
+
` %pe = getelementptr inbounds %ScrMapNumEntry, ptr %ents, ${sz} %bi`,
|
|
1298
|
+
` %pk = load i64, ptr %pe`,
|
|
1299
|
+
` %pkq = icmp eq i64 %pk, %kb`,
|
|
1300
|
+
` br i1 %pkq, label %probe.found, label %probe.next`,
|
|
1301
|
+
`probe.found:`,
|
|
1302
|
+
` ret ptr %pe`,
|
|
1303
|
+
`probe.next:`,
|
|
1304
|
+
` %pi.inc = add ${sz} %pi, 1`,
|
|
1305
|
+
` %pi.next = and ${sz} %pi.inc, %mask`,
|
|
1306
|
+
` br label %probe.loop`,
|
|
1307
|
+
`miss:`,
|
|
1308
|
+
` ret ptr null`,
|
|
1309
|
+
`runtime:`,
|
|
1310
|
+
` %r = call ptr @scr_map_entry_f64(ptr %m, double ${runtimeKey}) memory(read) nounwind willreturn`,
|
|
1311
|
+
` ret ptr %r`,
|
|
1312
|
+
`}`,
|
|
1313
|
+
``,
|
|
1314
|
+
];
|
|
1315
|
+
}
|
|
1046
1316
|
/** The shared abort helpers (emitted only when referenced): the OOM
|
|
1047
1317
|
* abort of untraced shape allocation and the invalid-union-tag abort —
|
|
1048
1318
|
* both print the runtime ABI’s exact message on fd 2 and abort. */
|
|
1319
|
+
/** The island module tree's install call before %main, and the constant
|
|
1320
|
+
* that carries its files when the executable ships them itself
|
|
1321
|
+
* (scr_node_island.c: scr_node_island_install_modules). */
|
|
1322
|
+
function nodeIslandModulesInstall(emitter, modules) {
|
|
1323
|
+
emitter.declare(`declare void @scr_node_island_install_modules(ptr, ${emitter.sizeType}, ptr, ${emitter.sizeType}, ptr)`);
|
|
1324
|
+
const manifest = nodeIslandManifest(modules);
|
|
1325
|
+
const manifestPtr = emitter.cstr(manifest);
|
|
1326
|
+
const location = emitter.cstr(modules.location ?? "");
|
|
1327
|
+
const data = modules.location === undefined ? emitter.nodeIslandModuleData : null;
|
|
1328
|
+
const globals = data === null || data.length === 0
|
|
1329
|
+
? []
|
|
1330
|
+
: [
|
|
1331
|
+
`@sc_node_island_modules = private unnamed_addr constant [${data.length} x i8] c"${llvmBytes(data, false)}", align 16`,
|
|
1332
|
+
];
|
|
1333
|
+
const st = emitter.sizeType;
|
|
1334
|
+
return {
|
|
1335
|
+
call: ` call void @scr_node_island_install_modules(ptr ${manifestPtr}, ${st} ${Buffer.byteLength(manifest, "utf8")}, ptr ${globals.length > 0 ? "@sc_node_island_modules" : "null"}, ${st} ${globals.length > 0 ? data.length : 0}, ptr ${location})`,
|
|
1336
|
+
globals,
|
|
1337
|
+
};
|
|
1338
|
+
}
|
|
1049
1339
|
export function helperDefs(emitter) {
|
|
1050
1340
|
const defs = [];
|
|
1051
1341
|
const msgHelper = (fnName, msgSym, msg) => {
|
|
@@ -1099,20 +1389,18 @@ export function helperDefs(emitter) {
|
|
|
1099
1389
|
// the double `%k`'s exact value): the direct index tests the integer
|
|
1100
1390
|
// itself, so the double is converted only by the hashed probe. A
|
|
1101
1391
|
// negative key is not below the index's size as an unsigned value.
|
|
1102
|
-
`define internal ptr @sc_map_entry_f64_int(ptr %m, i64 %ki, double %k) ${FN_ATTRS} {`, `entry:`, ` %ndp = getelementptr inbounds %ScrMapIx, ptr %m, i32 0, i32 16`, ` %nd32 = load i32, ptr %ndp`, ` %nd = zext i32 %nd32 to i64`, ` %inside = icmp ult i64 %ki, %nd`, ` br i1 %inside, label %slot, label %outside`, `slot:`, sz === "i64" ? ` %i = add i64 %ki, 0` : ` %i = trunc i64 %ki to ${sz}`, ` %dp = getelementptr inbounds %ScrMapIx, ptr %m, i32 0, i32 15`, ` %dense = load ptr, ptr %dp`, ` %sp = getelementptr inbounds i32, ptr %dense, ${sz} %i`, ` %s = load i32, ptr %sp`, ` %empty = icmp eq i32 %s, 0`, ` br i1 %empty, label %miss, label %hit`, `hit:`, ` %e32 = sub i32 %s, 1`, sz === "i32" ? ` %e = add i32 %e32, 0` : ` %e = zext i32 %e32 to ${sz}`, ` %ep = getelementptr inbounds %ScrMapIx, ptr %m, i32 0, i32 11`, ` %entries = load ptr, ptr %ep`, ` %found = getelementptr inbounds %ScrMapNumEntry, ptr %entries, ${sz} %e`, ` ret ptr %found`, `miss:`, ` ret ptr null`, `outside:`, ` %dense.any = icmp ne i64 %nd, 0`, ` br i1 %dense.any, label %miss, label %slow`, `slow:`, ` %hashed = call ptr @
|
|
1103
|
-
// Hashing (scr_map_find_f64): the SameValueZero key word
|
|
1104
|
-
// scr_key_mix hash
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
// top byte; wider tables take the runtime lookup.
|
|
1115
|
-
`buckets:`, ` %wide = icmp ugt ${sz} %nb, 16777216`, ` br i1 %wide, label %runtime, label %probe`, `probe:`, ` %bp = getelementptr inbounds %ScrMapIx, ptr %m, i32 0, i32 14`, ` %bk = load ptr, ptr %bp`, ` %mask = sub ${sz} %nb, 1`, ` %ht = lshr i64 %h, 32`, ` %ht32 = trunc i64 %ht to i32`, ` %tag = and i32 %ht32, -16777216`, sz === "i64" ? ` %hi = add i64 %h, 0` : ` %hi = trunc i64 %h to ${sz}`, ` %i0 = and ${sz} %hi, %mask`, ` br label %probe.loop`, `probe.loop:`, ` %pi = phi ${sz} [ %i0, %probe ], [ %pi.next, %probe.next ]`, ` %bep = getelementptr inbounds i32, ptr %bk, ${sz} %pi`, ` %b = load i32, ptr %bep`, ` %bempty = icmp eq i32 %b, 0`, ` br i1 %bempty, label %miss, label %probe.tag`, `probe.tag:`, ` %bt = and i32 %b, -16777216`, ` %btq = icmp eq i32 %bt, %tag`, ` br i1 %btq, label %probe.entry, label %probe.next`, `probe.entry:`, ` %bix = and i32 %b, 16777215`, ` %bix1 = sub i32 %bix, 1`, sz === "i32" ? ` %bi = add i32 %bix1, 0` : ` %bi = zext i32 %bix1 to ${sz}`, ` %pe = getelementptr inbounds %ScrMapNumEntry, ptr %ents, ${sz} %bi`, ` %pk = load i64, ptr %pe`, ` %pkq = icmp eq i64 %pk, %kb`, ` br i1 %pkq, label %probe.found, label %probe.next`, `probe.found:`, ` ret ptr %pe`, `probe.next:`, ` %pi.inc = add ${sz} %pi, 1`, ` %pi.next = and ${sz} %pi.inc, %mask`, ` br label %probe.loop`, `miss:`, ` ret ptr null`, `runtime:`, ` %r = call ptr @scr_map_entry_f64(ptr %m, double %k) memory(read) nounwind willreturn`, ` ret ptr %r`, `}`, ``);
|
|
1392
|
+
`define internal ptr @sc_map_entry_f64_int(ptr %m, i64 %ki, double %k) ${FN_ATTRS} {`, `entry:`, ` %ndp = getelementptr inbounds %ScrMapIx, ptr %m, i32 0, i32 16`, ` %nd32 = load i32, ptr %ndp`, ` %nd = zext i32 %nd32 to i64`, ` %inside = icmp ult i64 %ki, %nd`, ` br i1 %inside, label %slot, label %outside`, `slot:`, sz === "i64" ? ` %i = add i64 %ki, 0` : ` %i = trunc i64 %ki to ${sz}`, ` %dp = getelementptr inbounds %ScrMapIx, ptr %m, i32 0, i32 15`, ` %dense = load ptr, ptr %dp`, ` %sp = getelementptr inbounds i32, ptr %dense, ${sz} %i`, ` %s = load i32, ptr %sp`, ` %empty = icmp eq i32 %s, 0`, ` br i1 %empty, label %miss, label %hit`, `hit:`, ` %e32 = sub i32 %s, 1`, sz === "i32" ? ` %e = add i32 %e32, 0` : ` %e = zext i32 %e32 to ${sz}`, ` %ep = getelementptr inbounds %ScrMapIx, ptr %m, i32 0, i32 11`, ` %entries = load ptr, ptr %ep`, ` %found = getelementptr inbounds %ScrMapNumEntry, ptr %entries, ${sz} %e`, ` ret ptr %found`, `miss:`, ` ret ptr null`, `outside:`, ` %dense.any = icmp ne i64 %nd, 0`, ` br i1 %dense.any, label %miss, label %slow`, `slow:`, ` %hashed = call ptr @sc_map_entry_f64_hashed_int(ptr %m, i64 %ki)`, ` ret ptr %hashed`, `}`, ``,
|
|
1393
|
+
// Hashing (scr_map_find_f64): the SameValueZero key word and its
|
|
1394
|
+
// scr_key_mix hash. sc_map_entry_f64_int's probe converts the integer
|
|
1395
|
+
// view to the key word, which is never NaN or -0, and so skips the
|
|
1396
|
+
// normalization.
|
|
1397
|
+
...hashedNumberProbe("sc_map_entry_f64_hashed", "double %k", sz, [
|
|
1398
|
+
` %nan = fcmp uno double %k, %k`,
|
|
1399
|
+
` %zero = fcmp oeq double %k, 0.0`,
|
|
1400
|
+
` %kz = select i1 %zero, double 0.0, double %k`,
|
|
1401
|
+
` %kzb = bitcast double %kz to i64`,
|
|
1402
|
+
` %kb = select i1 %nan, i64 9221120237041090560, i64 %kzb`,
|
|
1403
|
+
], "%k"), ...hashedNumberProbe("sc_map_entry_f64_hashed_int", "i64 %ki", sz, [` %kf = sitofp i64 %ki to double`, ` %kb = bitcast double %kf to i64`], "%kf"));
|
|
1116
1404
|
}
|
|
1117
1405
|
// Map/Set iteration steps read the entries array inline: an index is
|
|
1118
1406
|
// live when it is below the entry count and its entry's cached hash is
|