@scriptc/compiler 0.4.4 → 0.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ambient/scriptc-node-fallback.d.ts +198 -44
- package/ambient/scriptc-overrides.d.ts +21 -0
- package/dist/backend/executable-features.js +3 -0
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/library-pack.js +2 -1
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/linker.js +11 -1
- package/dist/backend/linker.js.map +1 -1
- package/dist/backend/lld.d.ts +9 -0
- package/dist/backend/lld.js +48 -0
- package/dist/backend/lld.js.map +1 -0
- package/dist/backend/lld.test.d.ts +1 -0
- package/dist/backend/lld.test.js +53 -0
- package/dist/backend/lld.test.js.map +1 -0
- package/dist/backend/llvm/appended-array-literals.d.ts +11 -1
- package/dist/backend/llvm/appended-array-literals.js +29 -0
- package/dist/backend/llvm/appended-array-literals.js.map +1 -1
- package/dist/backend/llvm/blocks.js +10 -1
- package/dist/backend/llvm/blocks.js.map +1 -1
- package/dist/backend/llvm/bytes-alias.d.ts +13 -4
- package/dist/backend/llvm/bytes-alias.js +16 -5
- package/dist/backend/llvm/bytes-alias.js.map +1 -1
- package/dist/backend/llvm/bytes-bounds.d.ts +5 -1
- package/dist/backend/llvm/bytes-bounds.js +199 -2
- package/dist/backend/llvm/bytes-bounds.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.d.ts +45 -3
- package/dist/backend/llvm/bytes-loop-versions.js +238 -20
- package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.test.js +11 -4
- package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.d.ts +8 -2
- package/dist/backend/llvm/call-lifetimes.js +87 -18
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.test.js +132 -0
- package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/classes.d.ts +3 -2
- package/dist/backend/llvm/classes.js +4 -4
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/counted-loops.d.ts +14 -2
- package/dist/backend/llvm/counted-loops.js +54 -5
- package/dist/backend/llvm/counted-loops.js.map +1 -1
- package/dist/backend/llvm/debug-info.d.ts +42 -1
- package/dist/backend/llvm/debug-info.js +70 -1
- package/dist/backend/llvm/debug-info.js.map +1 -1
- package/dist/backend/llvm/dense-array-loops.js +2 -2
- package/dist/backend/llvm/dense-array-loops.js.map +1 -1
- package/dist/backend/llvm/dense-array-loops.test.js +1 -0
- package/dist/backend/llvm/dense-array-loops.test.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +65 -8
- package/dist/backend/llvm/dyn.js +375 -40
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.js +28 -8
- package/dist/backend/llvm/emit-function.js.map +1 -1
- package/dist/backend/llvm/emit-journal.d.ts +8 -4
- package/dist/backend/llvm/emit-journal.js +75 -5
- package/dist/backend/llvm/emit-journal.js.map +1 -1
- package/dist/backend/llvm/emit-module.d.ts +4 -0
- package/dist/backend/llvm/emit-module.js +58 -23
- package/dist/backend/llvm/emit-module.js.map +1 -1
- package/dist/backend/llvm/emit-statements.js +297 -28
- package/dist/backend/llvm/emit-statements.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +134 -13
- package/dist/backend/llvm/emitter.js +514 -87
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.d.ts +6 -4
- package/dist/backend/llvm/expr-bytes.js +31 -8
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-calls.js +13 -11
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.d.ts +11 -0
- package/dist/backend/llvm/expr-containers.js +87 -9
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-context.d.ts +3 -0
- package/dist/backend/llvm/expr-control.js +83 -0
- package/dist/backend/llvm/expr-control.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.d.ts +1 -1
- package/dist/backend/llvm/expr-dynamic.js +22 -4
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +107 -9
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +95 -22
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/forked-analysis.d.ts +8 -0
- package/dist/backend/llvm/forked-analysis.js +43 -0
- package/dist/backend/llvm/forked-analysis.js.map +1 -0
- package/dist/backend/llvm/integer-values.d.ts +7 -0
- package/dist/backend/llvm/integer-values.js +42 -2
- package/dist/backend/llvm/integer-values.js.map +1 -1
- package/dist/backend/llvm/integer-views.d.ts +2 -1
- package/dist/backend/llvm/integer-views.js +12 -1
- package/dist/backend/llvm/integer-views.js.map +1 -1
- package/dist/backend/llvm/js-ic.d.ts +4 -0
- package/dist/backend/llvm/js-ic.js +133 -15
- package/dist/backend/llvm/js-ic.js.map +1 -1
- package/dist/backend/llvm/layouts.d.ts +1 -0
- package/dist/backend/llvm/layouts.js.map +1 -1
- package/dist/backend/llvm/lazy-captures.d.ts +6 -1
- package/dist/backend/llvm/lazy-captures.js +10 -5
- package/dist/backend/llvm/lazy-captures.js.map +1 -1
- package/dist/backend/llvm/lib-abi.d.ts +5 -0
- package/dist/backend/llvm/lib-abi.js +19 -0
- package/dist/backend/llvm/lib-abi.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +128 -42
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.d.ts +10 -0
- package/dist/backend/llvm/lib-filesystem.js +32 -0
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-http2.js +2 -2
- package/dist/backend/llvm/lib-http2.js.map +1 -1
- package/dist/backend/llvm/lib-network.js +2 -0
- package/dist/backend/llvm/lib-network.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +11 -0
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +43 -0
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-tls.js +28 -3
- package/dist/backend/llvm/lib-tls.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.test.js +2 -1
- package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
- package/dist/backend/llvm/loop-array-borrows.d.ts +4 -1
- package/dist/backend/llvm/loop-array-borrows.js +11 -5
- package/dist/backend/llvm/loop-array-borrows.js.map +1 -1
- package/dist/backend/llvm/map-entry-fusion.d.ts +5 -3
- package/dist/backend/llvm/map-entry-fusion.js +20 -11
- package/dist/backend/llvm/map-entry-fusion.js.map +1 -1
- package/dist/backend/llvm/map-entry-fusion.test.js +14 -6
- package/dist/backend/llvm/map-entry-fusion.test.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.d.ts +16 -6
- package/dist/backend/llvm/map-number-lookup.js +41 -9
- package/dist/backend/llvm/map-number-lookup.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.test.js +70 -2
- package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.d.ts +25 -2
- package/dist/backend/llvm/map-read-lifetimes.js +136 -6
- package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.test.js +8 -3
- package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.d.ts +5 -0
- package/dist/backend/llvm/nullable-unions.js +29 -2
- package/dist/backend/llvm/nullable-unions.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.test.js +25 -1
- package/dist/backend/llvm/nullable-unions.test.js.map +1 -1
- package/dist/backend/llvm/record-union-keys.test.d.ts +1 -0
- package/dist/backend/llvm/record-union-keys.test.js +161 -0
- package/dist/backend/llvm/record-union-keys.test.js.map +1 -0
- package/dist/backend/llvm/serialized-ir-emission.test.js +2 -0
- package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -1
- package/dist/backend/llvm/shapes.d.ts +4 -5
- package/dist/backend/llvm/shapes.js +104 -51
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +14 -2
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/speculative-integers.d.ts +50 -3
- package/dist/backend/llvm/speculative-integers.js +411 -24
- package/dist/backend/llvm/speculative-integers.js.map +1 -1
- package/dist/backend/llvm/speculative-integers.test.js +103 -1
- package/dist/backend/llvm/speculative-integers.test.js.map +1 -1
- package/dist/backend/llvm/split.d.ts +10 -1
- package/dist/backend/llvm/split.js +243 -59
- package/dist/backend/llvm/split.js.map +1 -1
- package/dist/backend/llvm/split.test.js +92 -13
- package/dist/backend/llvm/split.test.js.map +1 -1
- package/dist/backend/llvm/stack-objects.test.js +3 -2
- package/dist/backend/llvm/stack-objects.test.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 +13 -0
- package/dist/backend/llvm/string-reads.js +22 -0
- package/dist/backend/llvm/string-reads.js.map +1 -1
- package/dist/backend/llvm/string-slices.d.ts +36 -2
- package/dist/backend/llvm/string-slices.js +308 -12
- package/dist/backend/llvm/string-slices.js.map +1 -1
- package/dist/backend/llvm/string-slices.test.js +182 -3
- package/dist/backend/llvm/string-slices.test.js.map +1 -1
- package/dist/backend/llvm/string-unit-versions.d.ts +11 -0
- package/dist/backend/llvm/string-unit-versions.js +191 -0
- package/dist/backend/llvm/string-unit-versions.js.map +1 -0
- package/dist/backend/llvm/string-unit-versions.test.d.ts +1 -0
- package/dist/backend/llvm/string-unit-versions.test.js +117 -0
- package/dist/backend/llvm/string-unit-versions.test.js.map +1 -0
- package/dist/backend/llvm/test-boxed-unions.d.ts +5 -2
- package/dist/backend/llvm/test-boxed-unions.js +24 -8
- package/dist/backend/llvm/test-boxed-unions.js.map +1 -1
- package/dist/backend/llvm/unwind-abi.d.ts +52 -0
- package/dist/backend/llvm/unwind-abi.js +498 -0
- package/dist/backend/llvm/unwind-abi.js.map +1 -0
- package/dist/backend/llvm/unwind-abi.test.d.ts +1 -0
- package/dist/backend/llvm/unwind-abi.test.js +255 -0
- package/dist/backend/llvm/unwind-abi.test.js.map +1 -0
- package/dist/backend/llvm/wrapping-sums.d.ts +14 -10
- package/dist/backend/llvm/wrapping-sums.js +31 -14
- package/dist/backend/llvm/wrapping-sums.js.map +1 -1
- package/dist/backend/loop-polls.d.ts +6 -0
- package/dist/backend/loop-polls.js +24 -0
- package/dist/backend/loop-polls.js.map +1 -1
- package/dist/backend/may-throw.js +8 -8
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +12 -2
- package/dist/backend/native/executable.js +48 -6
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/library.js +4 -3
- package/dist/backend/native/library.js.map +1 -1
- package/dist/backend/native/program-shards.d.ts +2 -2
- package/dist/backend/native/program-shards.js +2 -2
- 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 +4 -1
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native/vendor.d.ts +1 -1
- package/dist/backend/native/vendor.js +1 -1
- package/dist/backend/native/vendor.js.map +1 -1
- package/dist/backend/native-codegen.d.ts +3 -1
- package/dist/backend/native-codegen.js +4 -3
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +8 -0
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/native-profile.d.ts +14 -0
- package/dist/backend/native-profile.js +28 -0
- package/dist/backend/native-profile.js.map +1 -1
- package/dist/backend/native-profile.test.js +8 -1
- package/dist/backend/native-profile.test.js.map +1 -1
- package/dist/backend/native-toolchain.test.js +11 -11
- package/dist/backend/native-toolchain.test.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 +3 -1
- package/dist/backend/runtime-pack-core.js +2 -0
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-native.d.ts +17 -5
- package/dist/backend/runtime-pack-native.js +186 -14
- package/dist/backend/runtime-pack-native.js.map +1 -1
- package/dist/backend/runtime-pack-native.test.js +160 -3
- package/dist/backend/runtime-pack-native.test.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +2 -1
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +2 -1
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/vendor-archives.d.ts +4 -1
- package/dist/backend/vendor-archives.js +78 -4
- package/dist/backend/vendor-archives.js.map +1 -1
- package/dist/backend/vendor-inputs.d.ts +3 -1
- package/dist/backend/vendor-inputs.js +3 -1
- package/dist/backend/vendor-inputs.js.map +1 -1
- package/dist/backend/warm-cache.js +1 -0
- package/dist/backend/warm-cache.js.map +1 -1
- package/dist/cli/command.js +78 -11
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/usage.d.ts +22 -1
- package/dist/cli/usage.js +33 -3
- package/dist/cli/usage.js.map +1 -1
- package/dist/compat/fetch-profile.d.ts +15 -6
- package/dist/compat/fetch-profile.js +519 -498
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/compile-types.d.ts +7 -0
- package/dist/contracts/int32-elements.js +2 -1
- package/dist/contracts/int32-elements.js.map +1 -1
- package/dist/coverage/report.d.ts +14 -3
- package/dist/coverage/report.js +216 -0
- package/dist/coverage/report.js.map +1 -1
- package/dist/coverage/surface-manifest.js +25 -25
- package/dist/coverage/surface-manifest.js.map +1 -1
- package/dist/coverage/verdict-cache.d.ts +2 -0
- package/dist/coverage/verdict-cache.js +10 -1
- package/dist/coverage/verdict-cache.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +19 -0
- package/dist/diagnostics/diagnostic.js +52 -1
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/envelope.d.ts +54 -0
- package/dist/diagnostics/envelope.js +7 -1
- package/dist/diagnostics/envelope.js.map +1 -1
- package/dist/diagnostics/render.d.ts +7 -0
- package/dist/diagnostics/render.js +15 -4
- package/dist/diagnostics/render.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +3 -0
- package/dist/executable/executable-cache.js +1 -0
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +1 -0
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/executable/prepare.js +5 -1
- package/dist/executable/prepare.js.map +1 -1
- package/dist/frontend/analysis.js +26 -2
- package/dist/frontend/analysis.js.map +1 -1
- package/dist/frontend/fork-target.js +67 -1
- package/dist/frontend/fork-target.js.map +1 -1
- package/dist/frontend/fork-target.test.js +43 -0
- package/dist/frontend/fork-target.test.js.map +1 -1
- package/dist/frontend/input-tracker.d.ts +4 -1
- package/dist/frontend/input-tracker.js +42 -4
- package/dist/frontend/input-tracker.js.map +1 -1
- package/dist/frontend/input-tracker.test.js +45 -0
- package/dist/frontend/input-tracker.test.js.map +1 -1
- package/dist/frontend/lowering/abstract-equality.js +38 -1
- package/dist/frontend/lowering/abstract-equality.js.map +1 -1
- package/dist/frontend/lowering/argument-counts.d.ts +36 -0
- package/dist/frontend/lowering/argument-counts.js +201 -0
- package/dist/frontend/lowering/argument-counts.js.map +1 -0
- package/dist/frontend/lowering/array-values.d.ts +27 -0
- package/dist/frontend/lowering/array-values.js +112 -0
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/binding-analysis.d.ts +3 -0
- package/dist/frontend/lowering/binding-analysis.js +9 -3
- package/dist/frontend/lowering/binding-analysis.js.map +1 -1
- package/dist/frontend/lowering/builtin-namespaces.d.ts +13 -0
- package/dist/frontend/lowering/builtin-namespaces.js +238 -0
- package/dist/frontend/lowering/builtin-namespaces.js.map +1 -0
- package/dist/frontend/lowering/builtins/compression.d.ts +4 -3
- package/dist/frontend/lowering/builtins/compression.js +86 -5
- package/dist/frontend/lowering/builtins/compression.js.map +1 -1
- package/dist/frontend/lowering/builtins/date-classes.js +17 -1
- package/dist/frontend/lowering/builtins/date-classes.js.map +1 -1
- package/dist/frontend/lowering/builtins/dates.d.ts +19 -5
- package/dist/frontend/lowering/builtins/dates.js +159 -8
- package/dist/frontend/lowering/builtins/dates.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.js +26 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-streams.d.ts +4 -0
- package/dist/frontend/lowering/builtins/fs-streams.js +24 -1
- package/dist/frontend/lowering/builtins/fs-streams.js.map +1 -1
- package/dist/frontend/lowering/builtins/json.d.ts +4 -1
- package/dist/frontend/lowering/builtins/json.js +9 -3
- package/dist/frontend/lowering/builtins/json.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-bindings.d.ts +6 -0
- package/dist/frontend/lowering/builtins/module-bindings.js +23 -1
- package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-resolution.d.ts +5 -0
- package/dist/frontend/lowering/builtins/module-resolution.js +95 -4
- package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.js +144 -1
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +5 -1
- package/dist/frontend/lowering/builtins/readline.js +22 -11
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/reflection.d.ts +4 -1
- package/dist/frontend/lowering/builtins/reflection.js +41 -1
- package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
- package/dist/frontend/lowering/builtins/text-codecs.js +31 -2
- package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
- package/dist/frontend/lowering/builtins/webassembly.js +4 -1
- package/dist/frontend/lowering/builtins/webassembly.js.map +1 -1
- package/dist/frontend/lowering/builtins/x509.d.ts +33 -0
- package/dist/frontend/lowering/builtins/x509.js +431 -0
- package/dist/frontend/lowering/builtins/x509.js.map +1 -0
- package/dist/frontend/lowering/call-arguments.js +44 -0
- package/dist/frontend/lowering/call-arguments.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.js +1 -1
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/cjs-inline-require.js +1 -1
- package/dist/frontend/lowering/cjs-inline-require.js.map +1 -1
- package/dist/frontend/lowering/class-attributes.d.ts +7 -0
- package/dist/frontend/lowering/class-attributes.js +52 -10
- package/dist/frontend/lowering/class-attributes.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +13 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +174 -9
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-method-mutations.js +43 -8
- package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
- package/dist/frontend/lowering/class-method-values.js +71 -1
- package/dist/frontend/lowering/class-method-values.js.map +1 -1
- package/dist/frontend/lowering/class-prototypes.d.ts +8 -0
- package/dist/frontend/lowering/class-prototypes.js +83 -2
- package/dist/frontend/lowering/class-prototypes.js.map +1 -1
- package/dist/frontend/lowering/class-to-primitive.d.ts +5 -0
- package/dist/frontend/lowering/class-to-primitive.js +79 -7
- package/dist/frontend/lowering/class-to-primitive.js.map +1 -1
- package/dist/frontend/lowering/coercions/state.d.ts +1 -0
- package/dist/frontend/lowering/coercions/state.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +89 -10
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/coercions/unions.d.ts +4 -2
- package/dist/frontend/lowering/coercions/unions.js +13 -6
- package/dist/frontend/lowering/coercions/unions.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.js +51 -15
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.d.ts +4 -1
- package/dist/frontend/lowering/containers/array-construction.js +102 -9
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +85 -5
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/array-pipelines.js +346 -77
- package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.js +11 -1
- package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +12 -0
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/indexed-objects.js +73 -25
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/containers/iterator-helpers.d.ts +4 -4
- package/dist/frontend/lowering/containers/iterator-helpers.js +8 -2
- package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
- package/dist/frontend/lowering/containers/replacer-params.d.ts +37 -0
- package/dist/frontend/lowering/containers/replacer-params.js +294 -0
- package/dist/frontend/lowering/containers/replacer-params.js.map +1 -0
- package/dist/frontend/lowering/containers/replacer-params.test.d.ts +1 -0
- package/dist/frontend/lowering/containers/replacer-params.test.js +61 -0
- package/dist/frontend/lowering/containers/replacer-params.test.js.map +1 -0
- package/dist/frontend/lowering/containers/string-and-regexp.js +2 -1
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/containers/string-replacement.js +7 -3
- package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
- package/dist/frontend/lowering/cycle-initialization.d.ts +4 -2
- package/dist/frontend/lowering/cycle-initialization.js +4 -1
- package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
- package/dist/frontend/lowering/date-values.d.ts +9 -6
- package/dist/frontend/lowering/date-values.js +63 -16
- package/dist/frontend/lowering/date-values.js.map +1 -1
- package/dist/frontend/lowering/deferred-module-initializers.js +16 -8
- package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
- package/dist/frontend/lowering/deferred-module-initializers.test.js +22 -6
- package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -1
- package/dist/frontend/lowering/dispatch-sites.js +1 -0
- package/dist/frontend/lowering/dispatch-sites.js.map +1 -1
- package/dist/frontend/lowering/expressions/array-literals.d.ts +0 -8
- package/dist/frontend/lowering/expressions/array-literals.js +119 -26
- package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/binary.js +38 -0
- package/dist/frontend/lowering/expressions/binary.js.map +1 -1
- package/dist/frontend/lowering/expressions/element-access.js +50 -6
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/identifiers.js +35 -3
- package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
- package/dist/frontend/lowering/expressions/narrowing.d.ts +2 -1
- package/dist/frontend/lowering/expressions/narrowing.js +8 -1
- package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.js +8 -2
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.js +65 -34
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/relational.js +76 -11
- package/dist/frontend/lowering/expressions/relational.js.map +1 -1
- package/dist/frontend/lowering/expressions/typeof.js +6 -1
- package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
- package/dist/frontend/lowering/expressions/updates.js +20 -11
- package/dist/frontend/lowering/expressions/updates.js.map +1 -1
- package/dist/frontend/lowering/f64-handles.d.ts +8 -0
- package/dist/frontend/lowering/f64-handles.js +16 -0
- package/dist/frontend/lowering/f64-handles.js.map +1 -0
- package/dist/frontend/lowering/frozen-records.d.ts +5 -0
- package/dist/frontend/lowering/frozen-records.js +12 -4
- 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.map +1 -1
- package/dist/frontend/lowering/function-returns.js +15 -0
- package/dist/frontend/lowering/function-returns.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.js +17 -6
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/instantiation-path.d.ts +3 -2
- package/dist/frontend/lowering/instantiation-path.js.map +1 -1
- package/dist/frontend/lowering/instantiation-path.test.js +6 -4
- package/dist/frontend/lowering/instantiation-path.test.js.map +1 -1
- package/dist/frontend/lowering/iterator-adapters.d.ts +4 -2
- package/dist/frontend/lowering/iterator-adapters.js +26 -33
- package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
- package/dist/frontend/lowering/js-collection-types.d.ts +11 -0
- package/dist/frontend/lowering/js-collection-types.js +490 -0
- package/dist/frontend/lowering/js-collection-types.js.map +1 -0
- package/dist/frontend/lowering/lib-boundary.js +2 -2
- package/dist/frontend/lowering/lib-boundary.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.d.ts +14 -0
- package/dist/frontend/lowering/lower-assert.js +283 -26
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-builtin-values.js +3 -3
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.js +97 -7
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +59 -7
- package/dist/frontend/lowering/lower-classes.js +647 -176
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-console.js +2 -1
- package/dist/frontend/lowering/lower-console.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +5 -0
- package/dist/frontend/lowering/lower-exprs.js +52 -5
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +7 -0
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.js +4 -3
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +264 -46
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +28 -17
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.d.ts +3 -0
- package/dist/frontend/lowering/lower-namespaces.js +44 -1
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-node-module.js +1 -1
- package/dist/frontend/lowering/lower-node-module.js.map +1 -1
- package/dist/frontend/lowering/lower-server.js +126 -32
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.d.ts +4 -1
- package/dist/frontend/lowering/lower-stdlib.js +51 -37
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.js +294 -46
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.js +515 -121
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +52 -10
- package/dist/frontend/lowering/lowerer.js +249 -37
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/lowerer.test.js +1 -1
- package/dist/frontend/lowering/lowerer.test.js.map +1 -1
- package/dist/frontend/lowering/module-namespace-elements.d.ts +13 -0
- package/dist/frontend/lowering/module-namespace-elements.js +118 -1
- package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
- package/dist/frontend/lowering/private-brands.d.ts +5 -0
- package/dist/frontend/lowering/private-brands.js +39 -0
- package/dist/frontend/lowering/private-brands.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-elements.d.ts +6 -0
- package/dist/frontend/lowering/runtime-optional-elements.js +14 -3
- package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
- package/dist/frontend/lowering/sanitize-class-types.js +2 -0
- package/dist/frontend/lowering/sanitize-class-types.js.map +1 -1
- package/dist/frontend/lowering/site-dependencies.d.ts +7 -2
- package/dist/frontend/lowering/site-dependencies.js +0 -15
- package/dist/frontend/lowering/site-dependencies.js.map +1 -1
- package/dist/frontend/lowering/site-dependencies.test.js +7 -5
- package/dist/frontend/lowering/site-dependencies.test.js.map +1 -1
- package/dist/frontend/lowering/string-index-bounds.d.ts +7 -4
- package/dist/frontend/lowering/string-index-bounds.js +21 -7
- package/dist/frontend/lowering/string-index-bounds.js.map +1 -1
- package/dist/frontend/lowering/surfaces.d.ts +12 -3
- package/dist/frontend/lowering/surfaces.js +1576 -1539
- 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 +45 -2
- package/dist/frontend/lowering/symbol-fields.js.map +1 -1
- package/dist/frontend/lowering/union-narrow.d.ts +5 -2
- package/dist/frontend/lowering/union-narrow.js +6 -3
- package/dist/frontend/lowering/union-narrow.js.map +1 -1
- package/dist/frontend/lowering/union-narrow.test.js +10 -0
- package/dist/frontend/lowering/union-narrow.test.js.map +1 -1
- package/dist/frontend/npm-static-namespace-defaults.d.ts +6 -0
- package/dist/frontend/npm-static-namespace-defaults.js +163 -0
- package/dist/frontend/npm-static-namespace-defaults.js.map +1 -0
- package/dist/frontend/npm-static-namespace-defaults.test.d.ts +1 -0
- package/dist/frontend/npm-static-namespace-defaults.test.js +72 -0
- package/dist/frontend/npm-static-namespace-defaults.test.js.map +1 -0
- package/dist/frontend/npm-static-prune.js +152 -111
- package/dist/frontend/npm-static-prune.js.map +1 -1
- package/dist/frontend/npm-static.js +35 -32
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/package-shims.d.ts +7 -4
- package/dist/frontend/package-shims.js +39 -40
- package/dist/frontend/package-shims.js.map +1 -1
- package/dist/frontend/pipeline-native.d.ts +2 -2
- package/dist/frontend/pipeline-native.js +2 -2
- package/dist/frontend/pipeline-native.js.map +1 -1
- package/dist/frontend/pipeline.d.ts +19 -2
- package/dist/frontend/pipeline.js +102 -11
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/program-analysis.d.ts +2 -0
- package/dist/frontend/program-analysis.js +3 -0
- package/dist/frontend/program-analysis.js.map +1 -1
- package/dist/frontend/program.d.ts +15 -0
- package/dist/frontend/program.js +227 -64
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/resolve.d.ts +2 -0
- package/dist/frontend/resolve.js +5 -0
- package/dist/frontend/resolve.js.map +1 -1
- package/dist/frontend/services.d.ts +3 -0
- package/dist/frontend/services.js +31 -4
- package/dist/frontend/services.js.map +1 -1
- package/dist/frontend/shape-inference/analyze.d.ts +93 -0
- package/dist/frontend/shape-inference/analyze.js +3138 -0
- package/dist/frontend/shape-inference/analyze.js.map +1 -0
- package/dist/frontend/shape-inference/constant-graphs.d.ts +54 -0
- package/dist/frontend/shape-inference/constant-graphs.js +357 -0
- package/dist/frontend/shape-inference/constant-graphs.js.map +1 -0
- package/dist/frontend/shape-inference/domain.d.ts +32 -0
- package/dist/frontend/shape-inference/domain.js +104 -0
- package/dist/frontend/shape-inference/domain.js.map +1 -0
- package/dist/frontend/shape-inference/index.d.ts +7 -0
- package/dist/frontend/shape-inference/index.js +19 -0
- package/dist/frontend/shape-inference/index.js.map +1 -0
- package/dist/frontend/shape-inference/report.d.ts +21 -0
- package/dist/frontend/shape-inference/report.js +348 -0
- package/dist/frontend/shape-inference/report.js.map +1 -0
- package/dist/frontend/token-equivalence.d.ts +6 -0
- package/dist/frontend/token-equivalence.js +66 -9
- package/dist/frontend/token-equivalence.js.map +1 -1
- package/dist/frontend/token-equivalence.test.js +33 -1
- package/dist/frontend/token-equivalence.test.js.map +1 -1
- package/dist/frontend/ts7/checker-features.d.ts +15 -0
- package/dist/frontend/ts7/checker-features.js +45 -0
- package/dist/frontend/ts7/checker-features.js.map +1 -0
- package/dist/frontend/ts7/checker-features.test.d.ts +1 -0
- package/dist/frontend/ts7/checker-features.test.js +40 -0
- package/dist/frontend/ts7/checker-features.test.js.map +1 -0
- package/dist/frontend/ts7/checker-server.d.ts +19 -0
- package/dist/frontend/ts7/checker-server.js +46 -0
- package/dist/frontend/ts7/checker-server.js.map +1 -0
- package/dist/frontend/ts7/checker-server.test.d.ts +1 -0
- package/dist/frontend/ts7/checker-server.test.js +38 -0
- package/dist/frontend/ts7/checker-server.test.js.map +1 -0
- package/dist/frontend/ts7/lib-diagnostics.js +39 -13
- package/dist/frontend/ts7/lib-diagnostics.js.map +1 -1
- package/dist/frontend/ts7/lib-diagnostics.test.js +40 -0
- package/dist/frontend/ts7/lib-diagnostics.test.js.map +1 -1
- package/dist/frontend/ts7/native-api.d.ts +1 -0
- package/dist/frontend/ts7/native-api.js +25 -2
- package/dist/frontend/ts7/native-api.js.map +1 -1
- package/dist/frontend/ts7/native-process.d.ts +9 -2
- package/dist/frontend/ts7/native-process.js +22 -4
- package/dist/frontend/ts7/native-process.js.map +1 -1
- package/dist/frontend/ts7/program-host.d.ts +11 -0
- package/dist/frontend/ts7/program-host.js +36 -22
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/semantic-json.d.ts +9 -0
- package/dist/frontend/ts7/semantic-json.js +25 -5
- package/dist/frontend/ts7/semantic-json.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.js +3 -1
- package/dist/frontend/ts7/semantic-model.js.map +1 -1
- package/dist/frontend/ts7/source-parser.js +3 -1
- package/dist/frontend/ts7/source-parser.js.map +1 -1
- package/dist/frontend/tsc-codes.js +10 -0
- package/dist/frontend/tsc-codes.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +18 -6
- package/dist/frontend/type-mapper.js +160 -28
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.d.ts +44 -3
- package/dist/index.js +27 -8
- package/dist/index.js.map +1 -1
- package/dist/ir/builtin-effects.js +29 -0
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +7 -2
- package/dist/ir/builtin-signatures.js +5104 -4950
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/callback-specialization.d.ts +4 -2
- package/dist/ir/callback-specialization.js +24 -9
- package/dist/ir/callback-specialization.js.map +1 -1
- package/dist/ir/capture-values.js +4 -2
- package/dist/ir/capture-values.js.map +1 -1
- package/dist/ir/char-unit-locals.d.ts +12 -2
- package/dist/ir/char-unit-locals.js +400 -58
- package/dist/ir/char-unit-locals.js.map +1 -1
- package/dist/ir/char-unit-locals.test.js +111 -0
- package/dist/ir/char-unit-locals.test.js.map +1 -1
- package/dist/ir/constant-globals.js +18 -4
- package/dist/ir/constant-globals.js.map +1 -1
- package/dist/ir/expression-inlining.d.ts +15 -0
- package/dist/ir/expression-inlining.js +166 -0
- package/dist/ir/expression-inlining.js.map +1 -0
- package/dist/ir/expression-inlining.test.d.ts +1 -0
- package/dist/ir/expression-inlining.test.js +123 -0
- package/dist/ir/expression-inlining.test.js.map +1 -0
- package/dist/ir/function-references.js +2 -0
- package/dist/ir/function-references.js.map +1 -1
- package/dist/ir/function-references.test.js +6 -0
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/int32-arrays.d.ts +27 -6
- package/dist/ir/int32-arrays.js +106 -18
- package/dist/ir/int32-arrays.js.map +1 -1
- package/dist/ir/int32-slots.d.ts +26 -1
- package/dist/ir/int32-slots.js +284 -5
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/int32-slots.test.js +5 -0
- package/dist/ir/int32-slots.test.js.map +1 -1
- package/dist/ir/integer-loop-facts.d.ts +5 -0
- package/dist/ir/integer-loop-facts.js +90 -1
- package/dist/ir/integer-loop-facts.js.map +1 -1
- package/dist/ir/integer-loops.d.ts +14 -1
- package/dist/ir/integer-loops.js +93 -7
- package/dist/ir/integer-loops.js.map +1 -1
- package/dist/ir/integer-loops.test.js +70 -0
- package/dist/ir/integer-loops.test.js.map +1 -1
- package/dist/ir/integer-ranges.js +18 -2
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +64 -4
- package/dist/ir/integer-ranges.test.js.map +1 -1
- package/dist/ir/ir.d.ts +50 -8
- package/dist/ir/ir.js +38 -12
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/js-ic.d.ts +25 -5
- package/dist/ir/js-ic.js +93 -13
- package/dist/ir/js-ic.js.map +1 -1
- package/dist/ir/js-ic.test.js +153 -0
- package/dist/ir/js-ic.test.js.map +1 -1
- package/dist/ir/node-index.d.ts +7 -0
- package/dist/ir/node-index.js +32 -0
- package/dist/ir/node-index.js.map +1 -1
- package/dist/ir/receiver-readers.d.ts +6 -1
- package/dist/ir/receiver-readers.js +53 -28
- package/dist/ir/receiver-readers.js.map +1 -1
- package/dist/ir/row-pairs.d.ts +15 -0
- package/dist/ir/row-pairs.js +373 -0
- package/dist/ir/row-pairs.js.map +1 -0
- package/dist/ir/row-pairs.test.d.ts +1 -0
- package/dist/ir/row-pairs.test.js +129 -0
- package/dist/ir/row-pairs.test.js.map +1 -0
- package/dist/ir/runtime-features.d.ts +17 -4
- package/dist/ir/runtime-features.js +69 -12
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/scalar-records.d.ts +15 -0
- package/dist/ir/scalar-records.js +301 -1
- package/dist/ir/scalar-records.js.map +1 -1
- package/dist/ir/scalar-records.test.js +181 -1
- package/dist/ir/scalar-records.test.js.map +1 -1
- package/dist/ir/self-captures.js +8 -0
- package/dist/ir/self-captures.js.map +1 -1
- package/dist/ir/validate.js +37 -28
- package/dist/ir/validate.js.map +1 -1
- package/dist/library/fence-eval.js +4 -4
- package/dist/library/fence-eval.js.map +1 -1
- package/dist/library/ir-policy.js +4 -0
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/library/library-cache.d.ts +1 -0
- package/dist/library/library-cache.js +1 -0
- package/dist/library/library-cache.js.map +1 -1
- package/dist/library/library-cache.test.js +13 -0
- package/dist/library/library-cache.test.js.map +1 -1
- package/dist/native/cache.d.ts +5 -1
- package/dist/native/cache.js +15 -3
- package/dist/native/cache.js.map +1 -1
- package/dist/native/cli.js +6 -0
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.d.ts +3 -0
- package/dist/native/compiler.js +72 -26
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/compiler.test.js +87 -2
- package/dist/native/compiler.test.js.map +1 -1
- package/dist/native/executable-cache-open.test.d.ts +1 -0
- package/dist/native/executable-cache-open.test.js +80 -0
- package/dist/native/executable-cache-open.test.js.map +1 -0
- package/dist/native/executable-cache.d.ts +43 -3
- package/dist/native/executable-cache.js +177 -36
- package/dist/native/executable-cache.js.map +1 -1
- package/dist/native/executable-cache.test.js +103 -0
- package/dist/native/executable-cache.test.js.map +1 -1
- package/dist/native/prepare.js +38 -16
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/prepare.test.js +51 -1
- package/dist/native/prepare.test.js.map +1 -1
- package/dist/native/sanitizer.d.ts +1 -1
- package/dist/native/sanitizer.js +17 -3
- package/dist/native/sanitizer.js.map +1 -1
- package/dist/native/sanitizer.test.js +4 -0
- package/dist/native/sanitizer.test.js.map +1 -1
- package/dist/node-islands/classify.d.ts +14 -0
- package/dist/node-islands/classify.js +114 -0
- package/dist/node-islands/classify.js.map +1 -0
- package/dist/node-islands/detect.d.ts +13 -0
- package/dist/node-islands/detect.js +805 -0
- package/dist/node-islands/detect.js.map +1 -0
- package/dist/node-islands/detect.test.d.ts +1 -0
- package/dist/node-islands/detect.test.js +136 -0
- package/dist/node-islands/detect.test.js.map +1 -0
- package/dist/node-islands/origin.d.ts +21 -0
- package/dist/node-islands/origin.js +60 -0
- package/dist/node-islands/origin.js.map +1 -0
- package/dist/node-islands/policy.d.ts +49 -0
- package/dist/node-islands/policy.js +130 -0
- package/dist/node-islands/policy.js.map +1 -0
- package/dist/node-islands/report.d.ts +22 -0
- package/dist/node-islands/report.js +326 -0
- package/dist/node-islands/report.js.map +1 -0
- package/dist/node-islands/report.test.d.ts +1 -0
- package/dist/node-islands/report.test.js +228 -0
- package/dist/node-islands/report.test.js.map +1 -0
- package/dist/node-islands/rules.d.ts +20 -0
- package/dist/node-islands/rules.js +91 -0
- package/dist/node-islands/rules.js.map +1 -0
- package/dist/node-islands/scan.d.ts +53 -0
- package/dist/node-islands/scan.js +104 -0
- package/dist/node-islands/scan.js.map +1 -0
- package/dist/node-islands/summary.d.ts +78 -0
- package/dist/node-islands/summary.js +26 -0
- package/dist/node-islands/summary.js.map +1 -0
- package/dist/project-config.d.ts +50 -0
- package/dist/project-config.js +372 -0
- package/dist/project-config.js.map +1 -0
- package/dist/project-config.test.d.ts +1 -0
- package/dist/project-config.test.js +154 -0
- package/dist/project-config.test.js.map +1 -0
- package/dist/wasm/discover.js +6 -31
- package/dist/wasm/discover.js.map +1 -1
- package/package.json +20 -20
- package/surface-manifest.json +20 -35
|
@@ -11,7 +11,7 @@ import { allocateLocalUnion, storeLocalUnion } from "./local-union-storage.js";
|
|
|
11
11
|
import { boxAccess, boxNewCall, elemAccess } from "./shapes.js";
|
|
12
12
|
import { dynHoleRead } from "./loop-array-borrows.js";
|
|
13
13
|
import { endsWithJump, matchStringSelfConcat } from "../../ir/analysis.js";
|
|
14
|
-
import { charAtUnitRead, emitDiscardedSplice } from "./expr-containers.js";
|
|
14
|
+
import { charAtUnitRead, emitBorrowedMapGet, emitDiscardedSplice } from "./expr-containers.js";
|
|
15
15
|
import { InternalCompilerError } from "../../errors.js";
|
|
16
16
|
import { emitDenseArrayGet, emitDenseArrayPop, emitDenseArraySet, SCR_ELEM_I32, } from "./dense-array-access.js";
|
|
17
17
|
import { emitBorrowedInput } from "./borrowed-inputs.js";
|
|
@@ -22,7 +22,7 @@ import { resultSlotStore } from "../result-slots.js";
|
|
|
22
22
|
import { matchIntegerArrayForLoop, matchIntegerBytesForLoop, matchIntegerCountedForLoop, matchIntegerPairedForLoop, } from "../../ir/integer-loops.js";
|
|
23
23
|
import { emitByteWindowGuard, matchByteWindow } from "./byte-windows.js";
|
|
24
24
|
import { countedDenseShape, emitDenseLoopGuard, matchDenseArrayLoop, pairedDenseShape, } from "./dense-array-loops.js";
|
|
25
|
-
import { emitCountedLoopLimit, emitCountedLoopSafety, emitPairedLoopSafety, } from "./counted-loops.js";
|
|
25
|
+
import { emitCountedLoopLimit, emitCountedLoopSafety, emitCountedStart, emitPairedLoopSafety, } from "./counted-loops.js";
|
|
26
26
|
import { emitBytesLoopVersionGuard } from "./bytes-loop-versions.js";
|
|
27
27
|
import { bytesHeaderAlias } from "./bytes-alias.js";
|
|
28
28
|
import { mangleLocal } from "../mangle.js";
|
|
@@ -35,6 +35,7 @@ import { SPECULATIVE_RANGE, emitSafeIntegerCheck, emitSpeculativeInteger, planPr
|
|
|
35
35
|
import { emitConcatInputs, emitMixedConcat, numberPart, stringParts, } from "./string-construction.js";
|
|
36
36
|
import { emitStringInputs } from "./string-lifetimes.js";
|
|
37
37
|
import { LOOPS } from "./loop-state.js";
|
|
38
|
+
import { loopAccessesTypedArrays } from "../loop-polls.js";
|
|
38
39
|
/** A callback loop version copies the loop; keep the copies small. */
|
|
39
40
|
const MAX_CALLBACK_VERSION_COST = 400;
|
|
40
41
|
export function emitStmtBody(emitter, s) {
|
|
@@ -47,6 +48,17 @@ export function emitStmtBody(emitter, s) {
|
|
|
47
48
|
break;
|
|
48
49
|
}
|
|
49
50
|
const b = emitter.binding(s.localId);
|
|
51
|
+
if (emitter.borrowedMapGets.has(s.localId) &&
|
|
52
|
+
b.kind === "local" &&
|
|
53
|
+
s.init?.kind === "mapIntrinsic") {
|
|
54
|
+
// The map entry's own reference: no retain now, no release at scope
|
|
55
|
+
// exit (findMapReadBorrows).
|
|
56
|
+
const borrowed = emitBorrowedMapGet(emitter, s.init);
|
|
57
|
+
if (borrowed) {
|
|
58
|
+
B.line(`store ptr ${borrowed.name}, ptr ${b.slot}`);
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
50
62
|
if (emitter.walkBorrows.has(s.localId) && b.kind === "local") {
|
|
51
63
|
// A borrowed walk pointer: no retain now, no release at scope exit.
|
|
52
64
|
const v = s.init === null ? "null" : emitter.emitReadReceiver(s.init).name;
|
|
@@ -396,6 +408,10 @@ export function emitStmtBody(emitter, s) {
|
|
|
396
408
|
s.length.value === 0 &&
|
|
397
409
|
emitter.publishedTypes?.containerGuarded(s.arr.type) !== true)
|
|
398
410
|
break;
|
|
411
|
+
// The literal it follows was constructed with this capacity
|
|
412
|
+
// (reservedArrayLength).
|
|
413
|
+
if (emitter.consumedReserves.delete(s))
|
|
414
|
+
break;
|
|
399
415
|
const arr = emitBorrowedInput(emitter, s.arr);
|
|
400
416
|
const length = emitter.emitExpr(s.length);
|
|
401
417
|
if (s.arr.type.kind !== "array")
|
|
@@ -480,7 +496,7 @@ export function emitStmtBody(emitter, s) {
|
|
|
480
496
|
const v = emitter.emitExpr(s.value);
|
|
481
497
|
if (s.arr.type.kind !== "bytes")
|
|
482
498
|
throw new InternalCompilerError("llvm emitter bug: bytesSet on non-bytes");
|
|
483
|
-
emitter.emitBytesSet(s.arr.type.elem, arr.name, idx, v, s.index, s.value, emitter.bytesBounds.has(s), emitter.bytesOwned.has(s));
|
|
499
|
+
emitter.emitBytesSet(s.arr.type.elem, arr.name, idx, v, s.index, s.value, emitter.bytesBounds.has(s), emitter.bytesOwned.has(s), emitter.bytesAliasScopes.get(s));
|
|
484
500
|
break;
|
|
485
501
|
}
|
|
486
502
|
case "fieldSet":
|
|
@@ -871,7 +887,7 @@ export function emitStmtBody(emitter, s) {
|
|
|
871
887
|
LOOPS.of(emitter).denseLoopsEnabled = false;
|
|
872
888
|
try {
|
|
873
889
|
B.startBlock(slow);
|
|
874
|
-
emitter
|
|
890
|
+
emitSlowCopy(emitter, s);
|
|
875
891
|
B.br(done);
|
|
876
892
|
B.startBlock(fast);
|
|
877
893
|
LOOPS.of(emitter).denseLoop = dense;
|
|
@@ -893,7 +909,7 @@ export function emitStmtBody(emitter, s) {
|
|
|
893
909
|
LOOPS.of(emitter).byteWindowsEnabled = false;
|
|
894
910
|
try {
|
|
895
911
|
B.startBlock(slow);
|
|
896
|
-
emitter
|
|
912
|
+
emitSlowCopy(emitter, s);
|
|
897
913
|
B.br(done);
|
|
898
914
|
B.startBlock(fast);
|
|
899
915
|
emitter.integerRanges = window.ranges;
|
|
@@ -939,7 +955,7 @@ export function emitStmtBody(emitter, s) {
|
|
|
939
955
|
B.condBr(safe, fast, slow);
|
|
940
956
|
B.startBlock(slow);
|
|
941
957
|
LOOPS.of(emitter).countedLoopsEnabled = false;
|
|
942
|
-
emitter
|
|
958
|
+
emitSlowCopy(emitter, s);
|
|
943
959
|
LOOPS.of(emitter).countedLoopsEnabled = true;
|
|
944
960
|
B.br(countedJoin);
|
|
945
961
|
B.startBlock(fast);
|
|
@@ -975,9 +991,7 @@ export function emitStmtBody(emitter, s) {
|
|
|
975
991
|
else if (countedLoop) {
|
|
976
992
|
integerSlot = B.slot();
|
|
977
993
|
B.entryAllocas.push(`${integerSlot} = alloca i64 ; integer induction ${emitter.currentLocals.get(countedLoop.localId).name}`);
|
|
978
|
-
const
|
|
979
|
-
const start = B.tmp();
|
|
980
|
-
B.line(`${start} = fptosi double ${startNumber.name} to i64`);
|
|
994
|
+
const start = emitCountedStart(emitter, countedLoop.start);
|
|
981
995
|
B.line(`store i64 ${start}, ptr ${integerSlot}`);
|
|
982
996
|
emitter.integerLoopBindings.set(countedLoop.localId, {
|
|
983
997
|
slot: integerSlot,
|
|
@@ -990,9 +1004,7 @@ export function emitStmtBody(emitter, s) {
|
|
|
990
1004
|
for (const follower of countedLoop.followers) {
|
|
991
1005
|
const slot = B.slot();
|
|
992
1006
|
B.entryAllocas.push(`${slot} = alloca i64 ; integer induction ${emitter.currentLocals.get(follower.localId).name}`);
|
|
993
|
-
const
|
|
994
|
-
const followerStart = B.tmp();
|
|
995
|
-
B.line(`${followerStart} = fptosi double ${value.name} to i64`);
|
|
1007
|
+
const followerStart = emitCountedStart(emitter, follower.start);
|
|
996
1008
|
B.line(`store i64 ${followerStart}, ptr ${slot}`);
|
|
997
1009
|
followerSlots.push(slot);
|
|
998
1010
|
emitter.integerLoopBindings.set(follower.localId, {
|
|
@@ -1008,9 +1020,7 @@ export function emitStmtBody(emitter, s) {
|
|
|
1008
1020
|
for (const counter of [pairedLoop.low, pairedLoop.high]) {
|
|
1009
1021
|
const slot = B.slot();
|
|
1010
1022
|
B.entryAllocas.push(`${slot} = alloca i64 ; integer induction ${emitter.currentLocals.get(counter.localId).name}`);
|
|
1011
|
-
const
|
|
1012
|
-
const start = B.tmp();
|
|
1013
|
-
B.line(`${start} = fptosi double ${value.name} to i64`);
|
|
1023
|
+
const start = emitCountedStart(emitter, counter.start);
|
|
1014
1024
|
B.line(`store i64 ${start}, ptr ${slot}`);
|
|
1015
1025
|
pairedSlots.push(slot);
|
|
1016
1026
|
const dense = LOOPS.of(emitter).denseLoop;
|
|
@@ -1057,9 +1067,61 @@ export function emitStmtBody(emitter, s) {
|
|
|
1057
1067
|
B.line(`store ptr ${fresh}, ptr ${slot}`);
|
|
1058
1068
|
}
|
|
1059
1069
|
};
|
|
1060
|
-
|
|
1070
|
+
// A counted loop over typed arrays, or a loop to a typed array's
|
|
1071
|
+
// length, polls between blocks of WORKER_POLL_BLOCK iterations instead
|
|
1072
|
+
// of counting a budget in its body: the inner loop over a block then
|
|
1073
|
+
// has no exit besides its own bound, which LLVM can vectorize. A typed
|
|
1074
|
+
// array's length is fixed, so each block can take it as its limit when
|
|
1075
|
+
// the loop does not assign the array's binding.
|
|
1076
|
+
const stripMined = capturedLets.length === 0 &&
|
|
1077
|
+
integerSlot !== null &&
|
|
1078
|
+
((countedLoop !== null &&
|
|
1079
|
+
countedLimit !== null &&
|
|
1080
|
+
Math.abs(countedLoop.step) * WORKER_POLL_BLOCK <= 2 ** 52) ||
|
|
1081
|
+
(integerLoop !== null && integerArrayLoop === null && integerLoop.stableReceiver)) &&
|
|
1082
|
+
emitter.workerLoopPolls(s) &&
|
|
1083
|
+
loopAccessesTypedArrays(s);
|
|
1084
|
+
const workerBudget = stripMined ? null : emitter.workerLoopBudget(s);
|
|
1085
|
+
// One slot for every copy of the loop: a speculative copy resumes an
|
|
1086
|
+
// iteration in another copy's body, which then reads this bound.
|
|
1087
|
+
let blockBound = null;
|
|
1088
|
+
if (stripMined) {
|
|
1089
|
+
blockBound = B.slot();
|
|
1090
|
+
B.entryAllocas.push(`${blockBound} = alloca ${countedLoop ? "i64" : emitter.sizeType} ; cancellation poll block bound`);
|
|
1091
|
+
}
|
|
1061
1092
|
freshenBindings();
|
|
1062
1093
|
emitter.emitLoopCopies(s, capturedLets.length === 0, le, (exit) => {
|
|
1094
|
+
if (stripMined) {
|
|
1095
|
+
const counter = countedLoop
|
|
1096
|
+
? {
|
|
1097
|
+
slot: integerSlot,
|
|
1098
|
+
type: "i64",
|
|
1099
|
+
signed: true,
|
|
1100
|
+
step: countedLoop.step,
|
|
1101
|
+
followers: countedLoop.followers.map((f, i) => ({
|
|
1102
|
+
slot: followerSlots[i],
|
|
1103
|
+
step: f.step,
|
|
1104
|
+
})),
|
|
1105
|
+
limit: () => countedLimit,
|
|
1106
|
+
}
|
|
1107
|
+
: {
|
|
1108
|
+
slot: integerSlot,
|
|
1109
|
+
type: emitter.sizeType,
|
|
1110
|
+
signed: false,
|
|
1111
|
+
step: 1,
|
|
1112
|
+
followers: [],
|
|
1113
|
+
limit: () => {
|
|
1114
|
+
const receiver = emitter.emitStableReceiver(integerLoop.limitReceiver, []);
|
|
1115
|
+
const lenPtr = B.tmp();
|
|
1116
|
+
const len = B.tmp();
|
|
1117
|
+
B.line(`${lenPtr} = getelementptr inbounds %ScrBytes, ptr ${receiver.name}, i64 0, i32 1`);
|
|
1118
|
+
B.line(`${len} = load ${emitter.sizeType}, ptr ${lenPtr}${bytesHeaderAlias(emitter)}`);
|
|
1119
|
+
return len;
|
|
1120
|
+
},
|
|
1121
|
+
};
|
|
1122
|
+
emitStripMinedCountedLoop(emitter, s, counter, blockBound, exit);
|
|
1123
|
+
return;
|
|
1124
|
+
}
|
|
1063
1125
|
const lc = B.newLabel("loop.c");
|
|
1064
1126
|
const lb = B.newLabel("loop.b");
|
|
1065
1127
|
const lu = s.update || capturedLets.length > 0 || workerBudget !== null ? B.newLabel("loop.u") : lc;
|
|
@@ -1906,7 +1968,7 @@ function emitCallbackVersionedLoop(emitter, s, bindings) {
|
|
|
1906
1968
|
emitter.callbackVersioning.add(s);
|
|
1907
1969
|
try {
|
|
1908
1970
|
B.startBlock(slow);
|
|
1909
|
-
emitter
|
|
1971
|
+
emitSlowCopy(emitter, s);
|
|
1910
1972
|
B.br(done);
|
|
1911
1973
|
B.startBlock(fast);
|
|
1912
1974
|
for (const { ref } of bindings)
|
|
@@ -1921,41 +1983,144 @@ function emitCallbackVersionedLoop(emitter, s, bindings) {
|
|
|
1921
1983
|
}
|
|
1922
1984
|
B.startBlock(done);
|
|
1923
1985
|
}
|
|
1986
|
+
/** The copy of a versioned loop that runs when its guard fails. Its loops
|
|
1987
|
+
* get no speculative or int32 kind copies, which would emit each loop again
|
|
1988
|
+
* for a path that rarely runs. Proven integer loops, which emit one copy,
|
|
1989
|
+
* are kept. A typed-array version whose guard requires thread-owned
|
|
1990
|
+
* storage does not use it (emitVersionedLoop). */
|
|
1991
|
+
function emitSlowCopy(emitter, s) {
|
|
1992
|
+
const copies = emitter.loopCopiesEnabled;
|
|
1993
|
+
emitter.loopCopiesEnabled = false;
|
|
1994
|
+
try {
|
|
1995
|
+
emitter.emitStmt(s);
|
|
1996
|
+
}
|
|
1997
|
+
finally {
|
|
1998
|
+
emitter.loopCopiesEnabled = copies;
|
|
1999
|
+
}
|
|
2000
|
+
}
|
|
1924
2001
|
/** Entries in a row whose fast copy bailed before a speculative loop site
|
|
1925
2002
|
* stops trying it. */
|
|
1926
2003
|
const SPECULATION_BAILS = 8;
|
|
2004
|
+
/** The attachment of each scoped access in a version's fast copy: the
|
|
2005
|
+
* scope of its own view, and no alias with the scopes of the other views,
|
|
2006
|
+
* whose bytes the guard proved disjoint. The scopes are named after the
|
|
2007
|
+
* function and the version, so every copy of a loop has its own, and
|
|
2008
|
+
* written inline (string-named scopes need no numbered metadata). Also
|
|
2009
|
+
* the scopes, which each fast copy declares on entry (declareAliasScopes). */
|
|
2010
|
+
function bytesAliasScopes(emitter, scopes) {
|
|
2011
|
+
const version = emitter.aliasScopedVersions++;
|
|
2012
|
+
const name = emitter.currentFunctionName.replace(/[^A-Za-z0-9_.$%]/g, "_");
|
|
2013
|
+
const domain = '!{!"scriptc typed-array views"}';
|
|
2014
|
+
const scope = (receiver) => `!{!"${name}.${version}.${receiver}", ${domain}}`;
|
|
2015
|
+
const attachments = new Map();
|
|
2016
|
+
for (const receiver of scopes.receivers) {
|
|
2017
|
+
const others = scopes.receivers.filter((other) => other !== receiver).map(scope);
|
|
2018
|
+
attachments.set(receiver, `, !alias.scope !{${scope(receiver)}}, !noalias !{${others.join(", ")}}`);
|
|
2019
|
+
}
|
|
2020
|
+
const result = new Map();
|
|
2021
|
+
for (const [node, receiver] of scopes.nodes)
|
|
2022
|
+
result.set(node, attachments.get(receiver));
|
|
2023
|
+
return { attachments: result, scopes: scopes.receivers.map(scope) };
|
|
2024
|
+
}
|
|
2025
|
+
/** Declares a version's scopes where a fast copy starts. The guard proves
|
|
2026
|
+
* the views disjoint for this entry only: an enclosing loop may pass other
|
|
2027
|
+
* views on its next pass (`[cur, next] = [next, cur]`). A declared scope
|
|
2028
|
+
* holds from its declaration, and LLVM gives each copy of the declaration
|
|
2029
|
+
* its own scopes when it unrolls or duplicates the enclosing code, so the
|
|
2030
|
+
* no-alias facts of one entry never apply to the accesses of another. */
|
|
2031
|
+
function declareAliasScopes(emitter, scopes) {
|
|
2032
|
+
if (scopes.length === 0)
|
|
2033
|
+
return;
|
|
2034
|
+
emitter.declare("declare void @llvm.experimental.noalias.scope.decl(metadata)");
|
|
2035
|
+
for (const scope of scopes)
|
|
2036
|
+
emitter.B.line(`call void @llvm.experimental.noalias.scope.decl(metadata !{${scope}})`);
|
|
2037
|
+
}
|
|
1927
2038
|
/** Emit a loop's condition, body and update through `emitCopy`, twice
|
|
1928
2039
|
* when speculative-integers.ts plans a fast integer copy. Both copies
|
|
1929
2040
|
* share the loop's setup and exit; the ordinary copy comes first so the
|
|
1930
2041
|
* fast copy is only emitted when every resume point exists. */
|
|
1931
2042
|
/** A typed-array loop version: the guard, then the checked copy, which
|
|
1932
2043
|
* runs whenever the guard fails, and the copy whose accesses the guard
|
|
1933
|
-
* proves in bounds (or thread-owned).
|
|
2044
|
+
* proves in bounds (or thread-owned). In worker programs a version that
|
|
2045
|
+
* proves both also has a copy for views with shared storage, in bounds but
|
|
2046
|
+
* not owned. */
|
|
1934
2047
|
function emitVersionedLoop(emitter, s, version) {
|
|
1935
2048
|
const B = emitter.B;
|
|
1936
2049
|
const fast = B.newLabel("bytes.version.fast"), slow = B.newLabel("bytes.version.slow"), done = B.newLabel("bytes.version.done");
|
|
1937
|
-
|
|
1938
|
-
const
|
|
2050
|
+
const unitsFast = version.unitsReceiver !== null ? B.newLabel("bytes.version.fast.units") : undefined;
|
|
2051
|
+
const sharedFast = version.sharedCopy && unitsFast === undefined
|
|
2052
|
+
? B.newLabel("bytes.version.fast.shared")
|
|
2053
|
+
: undefined;
|
|
2054
|
+
const guard = emitBytesLoopVersionGuard(emitter, version, fast, slow, unitsFast, sharedFast);
|
|
2055
|
+
const units = guard?.units ?? null;
|
|
2056
|
+
const originalBounds = emitter.bytesBounds, originalOwned = emitter.bytesOwned, originalRanges = emitter.integerRanges, originalUnitReads = emitter.stringUnitReads, originalLengthReads = emitter.stringLengthReads, originalScopes = emitter.bytesAliasScopes;
|
|
1939
2057
|
LOOPS.of(emitter).bytesLoopVersioning.add(s);
|
|
1940
2058
|
try {
|
|
1941
2059
|
B.startBlock(slow);
|
|
1942
|
-
|
|
2060
|
+
// A guard that requires thread-owned storage fails for every view of
|
|
2061
|
+
// shared memory, which worker programs pass routinely: that checked
|
|
2062
|
+
// copy keeps its loops' speculative and int32 kind copies.
|
|
2063
|
+
if (version.ownedReceivers.length > 0)
|
|
2064
|
+
emitter.emitStmt(s);
|
|
2065
|
+
else
|
|
2066
|
+
emitSlowCopy(emitter, s);
|
|
1943
2067
|
B.br(done);
|
|
1944
|
-
B.startBlock(fast);
|
|
1945
|
-
emitter.bytesBounds = new Set([...originalBounds, ...version.bounds]);
|
|
1946
2068
|
if (version.owned.size > 0)
|
|
1947
2069
|
emitter.bytesOwned = new Set([...originalOwned, ...version.owned]);
|
|
1948
2070
|
if (version.ranges.size > 0)
|
|
1949
2071
|
emitter.integerRanges = new Map([...originalRanges, ...version.ranges]);
|
|
2072
|
+
// Both fast copies run under the guard's span test, so they share the
|
|
2073
|
+
// version's scopes, and each declares them on entry.
|
|
2074
|
+
const scoped = version.scopes && emitter.debug === null ? bytesAliasScopes(emitter, version.scopes) : null;
|
|
2075
|
+
if (scoped)
|
|
2076
|
+
emitter.bytesAliasScopes = new Map([...originalScopes, ...scoped.attachments]);
|
|
1950
2077
|
if (version.counted?.guarded || version.paired?.loop.guarded)
|
|
1951
2078
|
LOOPS.of(emitter).provenCountedGuards.add(s);
|
|
2079
|
+
B.startBlock(fast);
|
|
2080
|
+
declareAliasScopes(emitter, scoped?.scopes ?? []);
|
|
2081
|
+
emitter.bytesBounds = new Set([...originalBounds, ...version.bounds]);
|
|
2082
|
+
// Both fast copies read the string's length the guard took.
|
|
2083
|
+
const length = guard?.length;
|
|
2084
|
+
if (length != null && version.unitLengths.size > 0)
|
|
2085
|
+
emitter.stringLengthReads = new Map([
|
|
2086
|
+
...originalLengthReads,
|
|
2087
|
+
...[...version.unitLengths].map((node) => [node, length]),
|
|
2088
|
+
]);
|
|
1952
2089
|
emitter.emitStmt(s);
|
|
1953
2090
|
B.br(done);
|
|
2091
|
+
if (sharedFast !== undefined) {
|
|
2092
|
+
// The bounds hold and a view has shared storage: the accesses skip
|
|
2093
|
+
// their bounds checks and stay shared-safe, without alias scopes
|
|
2094
|
+
// (which worker programs give only thread-owned views).
|
|
2095
|
+
B.startBlock(sharedFast);
|
|
2096
|
+
emitter.bytesOwned = originalOwned;
|
|
2097
|
+
emitter.bytesAliasScopes = originalScopes;
|
|
2098
|
+
emitter.emitStmt(s);
|
|
2099
|
+
B.br(done);
|
|
2100
|
+
}
|
|
2101
|
+
if (unitsFast !== undefined && units !== null) {
|
|
2102
|
+
// The string reads take the receiver's UTF-16 units.
|
|
2103
|
+
B.startBlock(unitsFast);
|
|
2104
|
+
declareAliasScopes(emitter, scoped?.scopes ?? []);
|
|
2105
|
+
emitter.bytesBounds = new Set([
|
|
2106
|
+
...originalBounds,
|
|
2107
|
+
...[...version.bounds].filter((node) => !version.stringReads.has(node)),
|
|
2108
|
+
]);
|
|
2109
|
+
emitter.stringUnitReads = new Map([
|
|
2110
|
+
...originalUnitReads,
|
|
2111
|
+
...[...version.stringReads].map((node) => [node, units]),
|
|
2112
|
+
]);
|
|
2113
|
+
emitter.emitStmt(s);
|
|
2114
|
+
B.br(done);
|
|
2115
|
+
}
|
|
1954
2116
|
}
|
|
1955
2117
|
finally {
|
|
1956
2118
|
emitter.bytesBounds = originalBounds;
|
|
1957
2119
|
emitter.bytesOwned = originalOwned;
|
|
1958
2120
|
emitter.integerRanges = originalRanges;
|
|
2121
|
+
emitter.stringUnitReads = originalUnitReads;
|
|
2122
|
+
emitter.stringLengthReads = originalLengthReads;
|
|
2123
|
+
emitter.bytesAliasScopes = originalScopes;
|
|
1959
2124
|
LOOPS.of(emitter).provenCountedGuards.delete(s);
|
|
1960
2125
|
LOOPS.of(emitter).bytesLoopVersioning.delete(s);
|
|
1961
2126
|
}
|
|
@@ -1964,6 +2129,7 @@ function emitVersionedLoop(emitter, s, version) {
|
|
|
1964
2129
|
export function emitLoopCopies(emitter, loop, allowed, exit, emitCopy) {
|
|
1965
2130
|
const plan = allowed &&
|
|
1966
2131
|
emitter.speculativeLoopsEnabled &&
|
|
2132
|
+
emitter.loopCopiesEnabled &&
|
|
1967
2133
|
emitter.speculation === null &&
|
|
1968
2134
|
emitter.speculationResume === null
|
|
1969
2135
|
? planSpeculativeLoop(loop, (id) => emitter.speculativeLocal(id), (id) => emitter.integerLoopBindings.has(id) || emitter.int32Locals.has(id), (e) => {
|
|
@@ -1972,7 +2138,7 @@ export function emitLoopCopies(emitter, loop, allowed, exit, emitCopy) {
|
|
|
1972
2138
|
range !== null &&
|
|
1973
2139
|
range.min >= -Number.MAX_SAFE_INTEGER &&
|
|
1974
2140
|
range.max <= Number.MAX_SAFE_INTEGER);
|
|
1975
|
-
}, (id) => emitter.speculativeLocal(id) || emitter.speculativeInvariantGlobal(id))
|
|
2141
|
+
}, (id) => emitter.speculativeLocal(id) || emitter.speculativeInvariantGlobal(id), emitter.speculationContext())
|
|
1976
2142
|
: null;
|
|
1977
2143
|
if (!plan) {
|
|
1978
2144
|
const ordinary = (exit) => {
|
|
@@ -1984,6 +2150,7 @@ export function emitLoopCopies(emitter, loop, allowed, exit, emitCopy) {
|
|
|
1984
2150
|
};
|
|
1985
2151
|
const kinds = allowed &&
|
|
1986
2152
|
emitter.speculativeLoopsEnabled &&
|
|
2153
|
+
emitter.loopCopiesEnabled &&
|
|
1987
2154
|
emitter.int32Slots.checkedInt32Arrays.size > 0 &&
|
|
1988
2155
|
emitter.int32Kinds === null &&
|
|
1989
2156
|
emitter.speculation === null &&
|
|
@@ -2030,6 +2197,18 @@ export function emitLoopCopies(emitter, loop, allowed, exit, emitCopy) {
|
|
|
2030
2197
|
B.line(`${both} = and i1 ${ok}, ${trying}`);
|
|
2031
2198
|
ok = both;
|
|
2032
2199
|
}
|
|
2200
|
+
// Hoisted leaves live in locals of their own, which the resume copy of
|
|
2201
|
+
// their write reads (see SpeculativeValue).
|
|
2202
|
+
for (const { leaves } of plan.values.values())
|
|
2203
|
+
for (const leaf of leaves) {
|
|
2204
|
+
emitter.currentLocals.set(leaf.localId, {
|
|
2205
|
+
id: leaf.localId,
|
|
2206
|
+
name: "speculated leaf",
|
|
2207
|
+
type: leaf.expr.type,
|
|
2208
|
+
mutable: true,
|
|
2209
|
+
});
|
|
2210
|
+
B.entryAllocas.push(`${emitter.binding(leaf.localId).slot} = alloca double ; speculated leaf`);
|
|
2211
|
+
}
|
|
2033
2212
|
const fast = B.newLabel("spec.fast"), slow = B.newLabel("spec.slow");
|
|
2034
2213
|
B.condBr(ok, fast, slow);
|
|
2035
2214
|
const resume = new Map();
|
|
@@ -2056,6 +2235,7 @@ export function emitLoopCopies(emitter, loop, allowed, exit, emitCopy) {
|
|
|
2056
2235
|
throw new InternalCompilerError("llvm emitter bug: speculative loop copy without a header");
|
|
2057
2236
|
B.startBlock(B.newLabel("spec.tail"));
|
|
2058
2237
|
emitter.speculationResume = resume;
|
|
2238
|
+
emitter.speculationResumeValues = plan.values;
|
|
2059
2239
|
emitter.speculationHeader = () => {
|
|
2060
2240
|
B.br(header);
|
|
2061
2241
|
B.startBlock(B.newLabel("spec.unused"));
|
|
@@ -2065,6 +2245,7 @@ export function emitLoopCopies(emitter, loop, allowed, exit, emitCopy) {
|
|
|
2065
2245
|
}
|
|
2066
2246
|
finally {
|
|
2067
2247
|
emitter.speculationResume = null;
|
|
2248
|
+
emitter.speculationResumeValues = null;
|
|
2068
2249
|
emitter.speculationHeader = null;
|
|
2069
2250
|
}
|
|
2070
2251
|
B.startBlock(fast);
|
|
@@ -2114,6 +2295,7 @@ export function emitLoopCopies(emitter, loop, allowed, exit, emitCopy) {
|
|
|
2114
2295
|
deferred,
|
|
2115
2296
|
bails,
|
|
2116
2297
|
ran,
|
|
2298
|
+
values: plan.values,
|
|
2117
2299
|
};
|
|
2118
2300
|
try {
|
|
2119
2301
|
const leave = B.newLabel("spec.leave");
|
|
@@ -2254,6 +2436,80 @@ function emitInt32KindLoop(emitter, plan, exit, ordinary) {
|
|
|
2254
2436
|
}
|
|
2255
2437
|
/** At the top of a loop copy's header: lets a speculative loop find its
|
|
2256
2438
|
* ordinary copy's header, and keeps its third copy out of the loop. */
|
|
2439
|
+
/** Iterations between cancellation polls of a strip-mined counted loop. */
|
|
2440
|
+
const WORKER_POLL_BLOCK = 64;
|
|
2441
|
+
/** A counted `for` loop of a worker program as blocks of WORKER_POLL_BLOCK
|
|
2442
|
+
* iterations, with the cancellation poll between blocks: the outer header
|
|
2443
|
+
* tests the counter against the loop's limit, each block runs the body up
|
|
2444
|
+
* to the nearer of the limit and WORKER_POLL_BLOCK steps on, and the poll
|
|
2445
|
+
* follows the block. It polls as often as the budget it replaces, and the
|
|
2446
|
+
* inner loop's only exit besides `break` and `return` is its bound. */
|
|
2447
|
+
function emitStripMinedCountedLoop(emitter, s, counter, boundSlot, exit) {
|
|
2448
|
+
const B = emitter.B;
|
|
2449
|
+
const { slot, type, signed, step } = counter;
|
|
2450
|
+
const ascending = step > 0;
|
|
2451
|
+
const compare = !signed ? "ult" : ascending ? "slt" : "sgt";
|
|
2452
|
+
const saturating = `llvm.${signed ? "sadd" : "uadd"}.sat.${type}`;
|
|
2453
|
+
const nearer = `llvm.${!signed ? "umin" : ascending ? "smin" : "smax"}.${type}`;
|
|
2454
|
+
const wrap = signed ? "nsw" : "nuw";
|
|
2455
|
+
const lc = B.newLabel("loop.c");
|
|
2456
|
+
const block = B.newLabel("loop.block");
|
|
2457
|
+
const bc = B.newLabel("loop.bc");
|
|
2458
|
+
const lb = B.newLabel("loop.b");
|
|
2459
|
+
const lu = B.newLabel("loop.u");
|
|
2460
|
+
const poll = B.newLabel("loop.poll");
|
|
2461
|
+
emitter.declare(`declare ${type} @${saturating}(${type}, ${type})`);
|
|
2462
|
+
emitter.declare(`declare ${type} @${nearer}(${type}, ${type})`);
|
|
2463
|
+
B.br(lc);
|
|
2464
|
+
B.startBlock(lc);
|
|
2465
|
+
enterLoopHeader(emitter, lc);
|
|
2466
|
+
const start = B.tmp();
|
|
2467
|
+
const open = B.tmp();
|
|
2468
|
+
B.line(`${start} = load ${type}, ptr ${slot}`);
|
|
2469
|
+
const limit = counter.limit();
|
|
2470
|
+
B.line(`${open} = icmp ${compare} ${type} ${start}, ${limit}`);
|
|
2471
|
+
B.condBr(open, block, exit);
|
|
2472
|
+
B.startBlock(block);
|
|
2473
|
+
const stepped = B.tmp();
|
|
2474
|
+
const bound = B.tmp();
|
|
2475
|
+
B.line(`${stepped} = call ${type} @${saturating}(${type} ${start}, ${type} ${step * WORKER_POLL_BLOCK})`);
|
|
2476
|
+
B.line(`${bound} = call ${type} @${nearer}(${type} ${stepped}, ${type} ${limit})`);
|
|
2477
|
+
B.line(`store ${type} ${bound}, ptr ${boundSlot}`);
|
|
2478
|
+
B.br(bc);
|
|
2479
|
+
B.startBlock(bc);
|
|
2480
|
+
const index = B.tmp();
|
|
2481
|
+
const end = B.tmp();
|
|
2482
|
+
const inBlock = B.tmp();
|
|
2483
|
+
B.line(`${index} = load ${type}, ptr ${slot}`);
|
|
2484
|
+
B.line(`${end} = load ${type}, ptr ${boundSlot}`);
|
|
2485
|
+
B.line(`${inBlock} = icmp ${compare} ${type} ${index}, ${end}`);
|
|
2486
|
+
B.condBr(inBlock, lb, poll);
|
|
2487
|
+
B.startBlock(lb);
|
|
2488
|
+
emitter.jumpTargets.push({
|
|
2489
|
+
kind: "loop",
|
|
2490
|
+
brkLabel: exit,
|
|
2491
|
+
contLabel: lu,
|
|
2492
|
+
labels: s.labels,
|
|
2493
|
+
frameDepth: emitter.frames.length,
|
|
2494
|
+
scopeDepth: emitter.scopes.length,
|
|
2495
|
+
finallyDepth: emitter.finallyStack.length,
|
|
2496
|
+
});
|
|
2497
|
+
emitter.emitBlock(s.body);
|
|
2498
|
+
emitter.jumpTargets.pop();
|
|
2499
|
+
B.br(lu);
|
|
2500
|
+
B.startBlock(lu);
|
|
2501
|
+
for (const { slot: stepSlot, step: by } of [{ slot, step }, ...counter.followers]) {
|
|
2502
|
+
const old = B.tmp();
|
|
2503
|
+
const next = B.tmp();
|
|
2504
|
+
B.line(`${old} = load ${type}, ptr ${stepSlot}`);
|
|
2505
|
+
B.line(`${next} = add ${wrap} ${type} ${old}, ${by}`);
|
|
2506
|
+
B.line(`store ${type} ${next}, ptr ${stepSlot}`);
|
|
2507
|
+
}
|
|
2508
|
+
B.br(bc);
|
|
2509
|
+
B.startBlock(poll);
|
|
2510
|
+
emitter.emitWorkerPoll();
|
|
2511
|
+
B.br(lc);
|
|
2512
|
+
}
|
|
2257
2513
|
function enterLoopHeader(emitter, header) {
|
|
2258
2514
|
const dispatch = emitter.speculationHeader;
|
|
2259
2515
|
emitter.speculationHeader = null;
|
|
@@ -2265,7 +2521,7 @@ function enterLoopHeader(emitter, header) {
|
|
|
2265
2521
|
* where an exception leaves the function (no enclosing try or finally, no
|
|
2266
2522
|
* coroutine frame), so no handler reads the stale double. */
|
|
2267
2523
|
function planProvenLoop(emitter, loop) {
|
|
2268
|
-
if (loop.kind
|
|
2524
|
+
if (loop.kind === "doWhile" ||
|
|
2269
2525
|
!emitter.speculativeLoopsEnabled ||
|
|
2270
2526
|
emitter.speculation !== null ||
|
|
2271
2527
|
emitter.speculationResume !== null ||
|
|
@@ -2341,9 +2597,22 @@ export function emitSpeculativeWrite(emitter, s, resume) {
|
|
|
2341
2597
|
// at once: a bailing path then owns nothing, and reads have no effect
|
|
2342
2598
|
// whose reordering before the arithmetic could be observed.
|
|
2343
2599
|
const reads = new Map();
|
|
2344
|
-
|
|
2600
|
+
const rewritten = emitter.speculation.values?.get(s);
|
|
2601
|
+
const value = rewritten?.value ?? target.value;
|
|
2602
|
+
if (rewritten !== undefined) {
|
|
2603
|
+
// Hoisted leaves run first, in the write's order, and keep their
|
|
2604
|
+
// doubles for the resume copy.
|
|
2605
|
+
emitter.frames.push([]);
|
|
2606
|
+
for (const leaf of rewritten.leaves) {
|
|
2607
|
+
const evaluated = emitter.emitExpr(leaf.expr);
|
|
2608
|
+
B.line(`store double ${evaluated.name}, ptr ${emitter.binding(leaf.localId).slot}`);
|
|
2609
|
+
reads.set(leaf.ref, evaluated);
|
|
2610
|
+
}
|
|
2611
|
+
emitter.releaseTemps(emitter.frames.pop());
|
|
2612
|
+
}
|
|
2613
|
+
if (value !== null) {
|
|
2345
2614
|
emitter.frames.push([]);
|
|
2346
|
-
for (const read of speculativeReads(
|
|
2615
|
+
for (const read of speculativeReads(value))
|
|
2347
2616
|
reads.set(read, emitter.emitExpr(read));
|
|
2348
2617
|
emitter.releaseTemps(emitter.frames.pop());
|
|
2349
2618
|
}
|
|
@@ -2360,7 +2629,7 @@ export function emitSpeculativeWrite(emitter, s, resume) {
|
|
|
2360
2629
|
bail(outside);
|
|
2361
2630
|
}
|
|
2362
2631
|
else
|
|
2363
|
-
result = emitSpeculativeInteger(emitter,
|
|
2632
|
+
result = emitSpeculativeInteger(emitter, value, bail, reads, resume === undefined);
|
|
2364
2633
|
// Speculable values read only numbers past this point.
|
|
2365
2634
|
if (emitter.frames.pop().length > 0)
|
|
2366
2635
|
throw new InternalCompilerError("llvm emitter bug: speculative write owns a temporary");
|