@scriptc/compiler 0.4.3 → 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 +270 -72
- 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 +244 -20
- package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.test.js +18 -6
- 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 +72 -6
- 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 +69 -8
- package/dist/backend/llvm/dyn.js +396 -49
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.js +30 -16
- 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 +74 -29
- 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 +144 -13
- package/dist/backend/llvm/emitter.js +523 -92
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +11 -2
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +11 -13
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.d.ts +6 -4
- package/dist/backend/llvm/expr-bytes.js +45 -16
- 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 +101 -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 +121 -14
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +111 -26
- 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 +12 -0
- package/dist/backend/llvm/integer-values.js +69 -5
- 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 +249 -33
- 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 +48 -1
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +64 -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/publish.js +3 -3
- package/dist/backend/llvm/publish.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/reference-effects.js +3 -0
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- 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 +106 -58
- 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-captures.js +1 -5
- package/dist/backend/llvm/stack-captures.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/union-repr.d.ts +4 -3
- package/dist/backend/llvm/union-repr.js +6 -5
- package/dist/backend/llvm/union-repr.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/walkers.js +13 -0
- package/dist/backend/llvm/walkers.js.map +1 -1
- 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-core.d.ts +5 -3
- package/dist/backend/native-codegen-core.js +13 -6
- package/dist/backend/native-codegen-core.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-codegen.test.js +6 -4
- package/dist/backend/native-codegen.test.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/target-cpu.d.ts +26 -0
- package/dist/backend/target-cpu.js +98 -0
- package/dist/backend/target-cpu.js.map +1 -0
- package/dist/backend/target-cpu.test.d.ts +1 -0
- package/dist/backend/target-cpu.test.js +38 -0
- package/dist/backend/target-cpu.test.js.map +1 -0
- 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 +98 -12
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/usage.d.ts +25 -1
- package/dist/cli/usage.js +40 -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 +14 -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 +53 -2
- 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 +6 -0
- package/dist/executable/executable-cache.js +5 -0
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +3 -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/decl-projection.js +105 -10
- package/dist/frontend/decl-projection.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/async-context.d.ts +8 -2
- package/dist/frontend/lowering/builtins/async-context.js +62 -3
- package/dist/frontend/lowering/builtins/async-context.js.map +1 -1
- 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/crypto.js +3 -1
- package/dist/frontend/lowering/builtins/crypto.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 +163 -9
- package/dist/frontend/lowering/builtins/dates.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.js +29 -4
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-glob.js +6 -3
- package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-paths.d.ts +43 -5
- package/dist/frontend/lowering/builtins/fs-paths.js +245 -93
- package/dist/frontend/lowering/builtins/fs-paths.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-calls.js +6 -3
- package/dist/frontend/lowering/builtins/module-calls.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.d.ts +1 -1
- package/dist/frontend/lowering/builtins/promises.js +293 -139
- 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 -2
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/cjs-exports-object.js +1 -1
- package/dist/frontend/lowering/cjs-exports-object.js.map +1 -1
- package/dist/frontend/lowering/cjs-inline-require.d.ts +32 -0
- package/dist/frontend/lowering/cjs-inline-require.js +308 -5
- 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 +23 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +288 -9
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-method-mutations.js +97 -26
- 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-protocols.d.ts +25 -0
- package/dist/frontend/lowering/class-protocols.js +183 -1
- package/dist/frontend/lowering/class-protocols.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/completion-callbacks.d.ts +4 -0
- package/dist/frontend/lowering/completion-callbacks.js +146 -0
- package/dist/frontend/lowering/completion-callbacks.js.map +1 -0
- package/dist/frontend/lowering/containers/array-callbacks.d.ts +5 -4
- package/dist/frontend/lowering/containers/array-callbacks.js +58 -21
- 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 +107 -9
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +96 -8
- 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/bytes.d.ts +25 -17
- package/dist/frontend/lowering/containers/bytes.js +453 -45
- package/dist/frontend/lowering/containers/bytes.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 +14 -0
- package/dist/frontend/lowering/date-values.js +254 -0
- package/dist/frontend/lowering/date-values.js.map +1 -0
- 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 +125 -26
- package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/binary.js +102 -26
- package/dist/frontend/lowering/expressions/binary.js.map +1 -1
- package/dist/frontend/lowering/expressions/element-access.js +129 -6
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/identifiers.js +66 -4
- 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 +121 -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 +12 -1
- package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
- package/dist/frontend/lowering/expressions/updates.js +37 -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 +30 -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/indexed-unions.d.ts +54 -0
- package/dist/frontend/lowering/indexed-unions.js +401 -0
- package/dist/frontend/lowering/indexed-unions.js.map +1 -0
- 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/key-order-witness.js +210 -32
- package/dist/frontend/lowering/key-order-witness.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.test.js +104 -4
- package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
- 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 +298 -29
- 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 +116 -10
- 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 +668 -222
- 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 +254 -3
- 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 +5 -4
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.d.ts +1 -1
- package/dist/frontend/lowering/lower-inspect.js +299 -57
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +49 -22
- 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 +393 -79
- 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 +82 -12
- package/dist/frontend/lowering/lowerer.js +317 -44
- 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/object-factory-new.d.ts +5 -0
- package/dist/frontend/lowering/object-factory-new.js +20 -6
- package/dist/frontend/lowering/object-factory-new.js.map +1 -1
- package/dist/frontend/lowering/overload-choice.d.ts +33 -0
- package/dist/frontend/lowering/overload-choice.js +190 -0
- package/dist/frontend/lowering/overload-choice.js.map +1 -0
- 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 +1630 -1540
- 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 +103 -12
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/program-analysis.d.ts +7 -1
- package/dist/frontend/program-analysis.js +8 -0
- package/dist/frontend/program-analysis.js.map +1 -1
- package/dist/frontend/program.d.ts +28 -5
- package/dist/frontend/program.js +422 -76
- 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.d.ts +3 -0
- package/dist/frontend/ts7/semantic-model.js +8 -1
- package/dist/frontend/ts7/semantic-model.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.test.js +6 -1
- package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
- package/dist/frontend/ts7/semantic-types.d.ts +1 -1
- package/dist/frontend/ts7/semantic-types.js +1 -1
- package/dist/frontend/ts7/semantic-types.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 +205 -44
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.d.ts +44 -3
- package/dist/index.js +39 -8
- package/dist/index.js.map +1 -1
- package/dist/ir/builtin-effects.js +37 -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 -4894
- 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 +291 -5
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/int32-slots.test.js +38 -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 +107 -11
- 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 +63 -11
- package/dist/ir/ir.js +47 -7
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/ir.test.js +2 -1
- package/dist/ir/ir.test.js.map +1 -1
- package/dist/ir/js-ic.d.ts +10 -3
- package/dist/ir/js-ic.js +14 -2
- package/dist/ir/js-ic.js.map +1 -1
- package/dist/ir/js-ic.test.js +11 -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 +94 -13
- 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 +78 -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 +5 -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.d.ts +1 -1
- package/dist/native/prepare.js +49 -17
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/prepare.test.js +69 -3
- 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 +21 -38
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
import * as ts from "../../ts7/adapter.js";
|
|
2
|
+
import { CONTRACT_TYPES_MODULE } from "../../contract-types.js";
|
|
1
3
|
import { keyedHelperName } from "../stable-names.js";
|
|
4
|
+
import { writtenLocals } from "../../../ir/callback-specialization.js";
|
|
5
|
+
import { AmbientReceiverReaders } from "../../../ir/receiver-readers.js";
|
|
2
6
|
import { boolLit, countedFor, numLit, varRef } from "../../../ir/build.js";
|
|
3
7
|
import { BOOL, F64, VOID, typeEquals, typeKey, } from "../../../ir/ir.js";
|
|
4
|
-
import { everyExprChild, everyStmtChild, everyStmtList, transformStmtList, } from "../../../ir/traverse.js";
|
|
8
|
+
import { everyExpr, everyExprChild, everyStmt, everyStmtChild, everyStmtList, transformExpr, transformStmtList, } from "../../../ir/traverse.js";
|
|
5
9
|
import { arrayIndexPresent, arrayValueRead, arrayValueStore, arrayValueType, } from "../array-values.js";
|
|
6
10
|
const PRODUCERS = new Set(["map", "filter", "flatMap", "flatMapArray"]);
|
|
7
11
|
const TERMINALS = new Set([
|
|
@@ -454,6 +458,70 @@ function matchChain(lowerer, e) {
|
|
|
454
458
|
loc: e.loc,
|
|
455
459
|
};
|
|
456
460
|
}
|
|
461
|
+
/** The outermost array-HOF call of `e` on its own, over its receiver. */
|
|
462
|
+
function loneChain(lowerer, e) {
|
|
463
|
+
const top = stageOf(lowerer, e);
|
|
464
|
+
if (!top)
|
|
465
|
+
return null;
|
|
466
|
+
const { stage, receiver } = top;
|
|
467
|
+
if (receiver.type.kind !== "array")
|
|
468
|
+
return null;
|
|
469
|
+
const stages = [];
|
|
470
|
+
let terminal;
|
|
471
|
+
if (TERMINALS.has(stage.info.method)) {
|
|
472
|
+
const init = stage.info.method === "reduce" && stage.info.hasInit && e.kind === "call" ? e.args[2] : null;
|
|
473
|
+
terminal = { kind: "call", stage, init };
|
|
474
|
+
}
|
|
475
|
+
else if (PRODUCERS.has(stage.info.method)) {
|
|
476
|
+
terminal = { kind: "collect" };
|
|
477
|
+
stages.push(stage);
|
|
478
|
+
}
|
|
479
|
+
else
|
|
480
|
+
return null;
|
|
481
|
+
return {
|
|
482
|
+
source: receiver,
|
|
483
|
+
sourceType: receiver.type,
|
|
484
|
+
slice: null,
|
|
485
|
+
stages,
|
|
486
|
+
terminal,
|
|
487
|
+
type: e.type,
|
|
488
|
+
loc: e.loc,
|
|
489
|
+
};
|
|
490
|
+
}
|
|
491
|
+
/** The callbacks of `chain` in order, or null when its stages cannot run
|
|
492
|
+
* in one loop: element types that do not line up, an array argument past
|
|
493
|
+
* the first stage, reduce without a seed, or findIndex over holes. */
|
|
494
|
+
function chainCallbacks(chain) {
|
|
495
|
+
const { stages, terminal } = chain;
|
|
496
|
+
const terminalStage = terminal.kind === "call" ? terminal.stage : null;
|
|
497
|
+
const callbacks = terminalStage ? [...stages, terminalStage] : stages;
|
|
498
|
+
// Element types must line up stage to stage.
|
|
499
|
+
let elem = chain.sourceType.elem;
|
|
500
|
+
for (const stage of callbacks) {
|
|
501
|
+
if (!typeEquals(stage.info.elem, elem))
|
|
502
|
+
return null;
|
|
503
|
+
if (stage.info.method === "filter" && !typeEquals(stage.info.outElem, stage.info.elem))
|
|
504
|
+
return null;
|
|
505
|
+
if ((stage.info.method === "map" || stage.info.method === "flatMap") &&
|
|
506
|
+
!typeEquals(stage.info.outElem, stage.info.fnRet))
|
|
507
|
+
return null;
|
|
508
|
+
elem = stage.info.outElem;
|
|
509
|
+
}
|
|
510
|
+
// Index arguments are reproduced; an array argument only names the source.
|
|
511
|
+
for (let k = 0; k < callbacks.length; k++) {
|
|
512
|
+
const stage = callbacks[k];
|
|
513
|
+
const lead = stage.info.method === "reduce" ? 1 : 0;
|
|
514
|
+
if (stage.info.arity > lead + 3)
|
|
515
|
+
return null;
|
|
516
|
+
if (stage.info.arity === lead + 3 && (k !== 0 || chain.slice))
|
|
517
|
+
return null;
|
|
518
|
+
}
|
|
519
|
+
if (terminalStage?.info.method === "reduce" && !terminalStage.info.hasInit)
|
|
520
|
+
return null;
|
|
521
|
+
if (terminalStage?.info.method === "findIndex" && holeCarrying(chain))
|
|
522
|
+
return null;
|
|
523
|
+
return callbacks;
|
|
524
|
+
}
|
|
457
525
|
/** Fuse chains of array-HOF helper calls into one loop.
|
|
458
526
|
*
|
|
459
527
|
* `xs.filter(f).map(g).reduce(h, z)` lowers to nested helper calls, each
|
|
@@ -500,9 +568,27 @@ class PipelineFusion {
|
|
|
500
568
|
added = [];
|
|
501
569
|
effects;
|
|
502
570
|
helpers = new Map();
|
|
571
|
+
/** Bindings each function, or a closure it creates, writes after their
|
|
572
|
+
* declaration. */
|
|
573
|
+
written;
|
|
574
|
+
/** classCaptured's answers by function name. */
|
|
575
|
+
classCaptures = new Map();
|
|
576
|
+
/** Whether a module imports or re-exports the contract types. */
|
|
577
|
+
contractTypes;
|
|
578
|
+
/** Bindings of the function being fused that inlined callbacks captured. */
|
|
579
|
+
inlinedCaptures = new Set();
|
|
580
|
+
/** The helper calls each callback with an undefined receiver; a copied
|
|
581
|
+
* body runs under the receiver around the array call instead. */
|
|
582
|
+
receivers;
|
|
503
583
|
constructor(lowerer, functions) {
|
|
504
584
|
this.lowerer = lowerer;
|
|
505
585
|
this.effects = new CallbackEffects(functions, lowerer.globalsList);
|
|
586
|
+
this.written = writtenLocals({ functions });
|
|
587
|
+
this.receivers = new AmbientReceiverReaders(new Map(functions.map((fn) => [fn.name, fn])));
|
|
588
|
+
this.contractTypes = lowerer.moduleOrder.some((sf) => sf.statements.nodes.some((st) => (ts.isImportDeclaration(st) || ts.isExportDeclaration(st)) &&
|
|
589
|
+
st.moduleSpecifier !== undefined &&
|
|
590
|
+
ts.isStringLiteral(st.moduleSpecifier) &&
|
|
591
|
+
st.moduleSpecifier.text === CONTRACT_TYPES_MODULE));
|
|
506
592
|
}
|
|
507
593
|
run(fn) {
|
|
508
594
|
const infos = this.lowerer.arrHofInfo;
|
|
@@ -513,6 +599,7 @@ class PipelineFusion {
|
|
|
513
599
|
if (!candidate)
|
|
514
600
|
return;
|
|
515
601
|
const removed = new Set();
|
|
602
|
+
this.inlinedCaptures = new Set();
|
|
516
603
|
let body = this.lists(fn.body, fn, removed);
|
|
517
604
|
body = transformStmtList(body, {
|
|
518
605
|
stmt: (s) => s,
|
|
@@ -521,6 +608,8 @@ class PipelineFusion {
|
|
|
521
608
|
fn.body = body;
|
|
522
609
|
if (removed.size > 0)
|
|
523
610
|
fn.locals = fn.locals.filter((l) => !removed.has(l.id));
|
|
611
|
+
if (this.inlinedCaptures.size > 0)
|
|
612
|
+
unboxUncaptured(fn, this.inlinedCaptures);
|
|
524
613
|
}
|
|
525
614
|
/* ── statement lists: fold single-use chain bindings ── */
|
|
526
615
|
lists(list, fn, removed) {
|
|
@@ -645,43 +734,55 @@ class PipelineFusion {
|
|
|
645
734
|
}
|
|
646
735
|
/* ── expressions ── */
|
|
647
736
|
fuse(e, fn) {
|
|
648
|
-
const plan = this.plan(e, fn);
|
|
737
|
+
const plan = this.plan(e, fn) ?? this.lonePlan(e, fn);
|
|
649
738
|
return plan ? this.emit(plan) : null;
|
|
650
739
|
}
|
|
740
|
+
/** One array-HOF call on its own (or the last call of a chain that does
|
|
741
|
+
* not fuse), when every callback is a closure literal whose body can be
|
|
742
|
+
* copied into the loop. A single stage reorders nothing, so the
|
|
743
|
+
* callbacks' effects need no model; their captured bindings must keep
|
|
744
|
+
* one value while the loop runs (stableTarget), since the loop reads
|
|
745
|
+
* them once, when it starts. The loop keeps the helper's order: the
|
|
746
|
+
* length read once, each element read when it is visited, holes
|
|
747
|
+
* skipped (and kept by map). */
|
|
748
|
+
lonePlan(e, fn) {
|
|
749
|
+
const chain = loneChain(this.lowerer, e);
|
|
750
|
+
if (!chain)
|
|
751
|
+
return null;
|
|
752
|
+
const callbacks = chainCallbacks(chain);
|
|
753
|
+
if (!callbacks)
|
|
754
|
+
return null;
|
|
755
|
+
const inline = this.stableTarget(fn);
|
|
756
|
+
let frame;
|
|
757
|
+
for (const stage of callbacks) {
|
|
758
|
+
for (const arg of [stage.slow, stage.fast]) {
|
|
759
|
+
if (!arg)
|
|
760
|
+
continue;
|
|
761
|
+
const target = inline(arg);
|
|
762
|
+
if (!target)
|
|
763
|
+
return null;
|
|
764
|
+
frame ??= target.sourceName;
|
|
765
|
+
}
|
|
766
|
+
}
|
|
767
|
+
return {
|
|
768
|
+
chain,
|
|
769
|
+
callbacks,
|
|
770
|
+
writes: new Set(),
|
|
771
|
+
risky: true,
|
|
772
|
+
inline,
|
|
773
|
+
...(frame === undefined ? {} : { frame }),
|
|
774
|
+
};
|
|
775
|
+
}
|
|
651
776
|
/** Decide whether `e` is a fusable chain; null when it is not. */
|
|
652
777
|
plan(e, fn) {
|
|
653
778
|
const chain = matchChain(this.lowerer, e);
|
|
654
779
|
if (!chain)
|
|
655
780
|
return null;
|
|
781
|
+
const callbacks = chainCallbacks(chain);
|
|
782
|
+
if (!callbacks)
|
|
783
|
+
return null;
|
|
656
784
|
const { stages, terminal } = chain;
|
|
657
785
|
const terminalStage = terminal.kind === "call" ? terminal.stage : null;
|
|
658
|
-
const callbacks = terminalStage ? [...stages, terminalStage] : stages;
|
|
659
|
-
// Element types must line up stage to stage.
|
|
660
|
-
let elem = chain.sourceType.elem;
|
|
661
|
-
for (const stage of callbacks) {
|
|
662
|
-
if (!typeEquals(stage.info.elem, elem))
|
|
663
|
-
return null;
|
|
664
|
-
if (stage.info.method === "filter" && !typeEquals(stage.info.outElem, stage.info.elem))
|
|
665
|
-
return null;
|
|
666
|
-
if ((stage.info.method === "map" || stage.info.method === "flatMap") &&
|
|
667
|
-
!typeEquals(stage.info.outElem, stage.info.fnRet))
|
|
668
|
-
return null;
|
|
669
|
-
elem = stage.info.outElem;
|
|
670
|
-
}
|
|
671
|
-
// Index arguments are reproduced; an array argument only names the source.
|
|
672
|
-
for (let k = 0; k < callbacks.length; k++) {
|
|
673
|
-
const stage = callbacks[k];
|
|
674
|
-
const lead = stage.info.method === "reduce" ? 1 : 0;
|
|
675
|
-
if (stage.info.arity > lead + 3)
|
|
676
|
-
return null;
|
|
677
|
-
if (stage.info.arity === lead + 3 && (k !== 0 || chain.slice))
|
|
678
|
-
return null;
|
|
679
|
-
}
|
|
680
|
-
if (terminalStage?.info.method === "reduce" && !terminalStage.info.hasInit)
|
|
681
|
-
return null;
|
|
682
|
-
const holes = holeCarrying(chain);
|
|
683
|
-
if (terminalStage?.info.method === "findIndex" && holes)
|
|
684
|
-
return null;
|
|
685
786
|
// Effects of each callback, in chain order.
|
|
686
787
|
const scope = this.effects.scope(fn, true);
|
|
687
788
|
const summaries = [];
|
|
@@ -758,35 +859,90 @@ class PipelineFusion {
|
|
|
758
859
|
* are passed in by value, read when the fused call starts; no callback
|
|
759
860
|
* in the chain assigns a binding another one reads). */
|
|
760
861
|
inlineTarget = (arg) => {
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
const fn = this.effects.fn(arg.fnName);
|
|
764
|
-
if (!fn || fn.async || fn.generator || fn.classCaptures?.length)
|
|
862
|
+
const fn = this.closureTarget(arg);
|
|
863
|
+
if (!fn)
|
|
765
864
|
return null;
|
|
766
865
|
const captures = new Set((fn.captures ?? []).map((c) => c.localId));
|
|
767
|
-
if (captures.size !== arg.captures.length)
|
|
768
|
-
return null;
|
|
769
866
|
const effects = this.effects.ofFunction(fn);
|
|
770
867
|
if (!effects || intersects(effects.writes, captures))
|
|
771
868
|
return null;
|
|
772
|
-
|
|
773
|
-
return null;
|
|
774
|
-
let size = 0;
|
|
775
|
-
const small = everyStmtList(fn.body, {
|
|
776
|
-
expr: (e) => ++size <= MAX_INLINE_NODES && e.kind !== "closure" && e.kind !== "selfRef",
|
|
777
|
-
stmt: (s) => ++size <= MAX_INLINE_NODES && s.kind !== "tryCatch",
|
|
778
|
-
});
|
|
779
|
-
return small ? fn : null;
|
|
869
|
+
return inlinableBody(fn, captures) ? fn : null;
|
|
780
870
|
};
|
|
871
|
+
/** inlineTarget for a callback created in `fn` whose captured bindings
|
|
872
|
+
* nothing assigns after their declaration: `fn`'s own locals and
|
|
873
|
+
* parameters, written neither by `fn` nor by any closure that shares
|
|
874
|
+
* them, and not by the callback body. A binding a local class captures
|
|
875
|
+
* counts as written, since its methods may assign it; so does a binding
|
|
876
|
+
* a method reads through its class's captures. The callback must
|
|
877
|
+
* not observe the ambient receiver (AmbientReceiverReaders). */
|
|
878
|
+
stableTarget(fn) {
|
|
879
|
+
const locals = new Map(fn.locals.map((l) => [l.id, l]));
|
|
880
|
+
const inherited = new Set([...(fn.captures ?? []), ...(fn.classCaptures ?? [])].map((c) => c.localId));
|
|
881
|
+
const written = this.written.get(fn.name);
|
|
882
|
+
const classCaptured = this.classCaptured(fn);
|
|
883
|
+
return (arg) => {
|
|
884
|
+
const target = this.closureTarget(arg);
|
|
885
|
+
if (!target || !written || arg.kind !== "closure")
|
|
886
|
+
return null;
|
|
887
|
+
if (!this.receivers.ignores(target))
|
|
888
|
+
return null;
|
|
889
|
+
for (const id of arg.captures) {
|
|
890
|
+
const local = locals.get(id);
|
|
891
|
+
if (!local || local.tdz || inherited.has(id) || written.has(id) || classCaptured.has(id))
|
|
892
|
+
return null;
|
|
893
|
+
}
|
|
894
|
+
const captures = new Set((target.captures ?? []).map((c) => c.localId));
|
|
895
|
+
const assigns = !everyStmtList(target.body, {
|
|
896
|
+
stmt: (st) => !((st.kind === "assign" || st.kind === "forOf") && captures.has(st.localId)),
|
|
897
|
+
expr: (ex) => !((ex.kind === "assignExpr" || ex.kind === "incDec") && captures.has(ex.localId)),
|
|
898
|
+
});
|
|
899
|
+
return !assigns && inlinableBody(target, captures) ? target : null;
|
|
900
|
+
};
|
|
901
|
+
}
|
|
902
|
+
/** The bindings of `fn` that a local class it creates captures. */
|
|
903
|
+
classCaptured(fn) {
|
|
904
|
+
const known = this.classCaptures.get(fn.name);
|
|
905
|
+
if (known)
|
|
906
|
+
return known;
|
|
907
|
+
const ids = new Set();
|
|
908
|
+
everyStmtList(fn.body, {
|
|
909
|
+
expr: (e) => {
|
|
910
|
+
if (e.kind === "classRef")
|
|
911
|
+
for (const id of e.captures ?? [])
|
|
912
|
+
ids.add(id);
|
|
913
|
+
return true;
|
|
914
|
+
},
|
|
915
|
+
stmt: () => true,
|
|
916
|
+
});
|
|
917
|
+
this.classCaptures.set(fn.name, ids);
|
|
918
|
+
return ids;
|
|
919
|
+
}
|
|
920
|
+
/** The function behind a closure-literal callback the loop can inline. */
|
|
921
|
+
closureTarget(arg) {
|
|
922
|
+
if (arg.kind !== "closure" || arg.adapts)
|
|
923
|
+
return null;
|
|
924
|
+
const fn = this.effects.fn(arg.fnName);
|
|
925
|
+
if (!fn || fn.async || fn.generator || fn.classCaptures?.length)
|
|
926
|
+
return null;
|
|
927
|
+
if ((fn.captures ?? []).length !== arg.captures.length)
|
|
928
|
+
return null;
|
|
929
|
+
return fn;
|
|
930
|
+
}
|
|
781
931
|
emit(plan) {
|
|
782
|
-
const built = new FusedLoop(this.lowerer, plan.chain, this.inlineTarget).build();
|
|
932
|
+
const built = new FusedLoop(this.lowerer, plan.chain, plan.inline ?? this.inlineTarget, this.contractTypes).build();
|
|
783
933
|
if (!built)
|
|
784
934
|
return null;
|
|
935
|
+
for (const id of built.inlinedCaptures)
|
|
936
|
+
this.inlinedCaptures.add(id);
|
|
785
937
|
let name = this.helpers.get(built.key);
|
|
786
938
|
if (!name) {
|
|
787
|
-
name = keyedHelperName(this.lowerer, "%arr.fused", built.key);
|
|
939
|
+
name = keyedHelperName(this.lowerer, plan.inline ? "%arr.loop" : "%arr.fused", built.key);
|
|
788
940
|
this.helpers.set(built.key, name);
|
|
789
|
-
|
|
941
|
+
const helper = { ...built.fn, name };
|
|
942
|
+
// A lone call's loop stands in the inlined callback's stack frame.
|
|
943
|
+
if (plan.frame !== undefined)
|
|
944
|
+
helper.sourceName = plan.frame;
|
|
945
|
+
this.added.push(helper);
|
|
790
946
|
}
|
|
791
947
|
return {
|
|
792
948
|
kind: "call",
|
|
@@ -797,6 +953,47 @@ class PipelineFusion {
|
|
|
797
953
|
};
|
|
798
954
|
}
|
|
799
955
|
}
|
|
956
|
+
/** Whether a statement inside `e` (a sequence expression's) returns. */
|
|
957
|
+
function returns(e) {
|
|
958
|
+
return !everyExpr(e, { expr: () => true, stmt: (s) => s.kind !== "return" });
|
|
959
|
+
}
|
|
960
|
+
/** Drops the box of each binding in `inlined` that no closure or class
|
|
961
|
+
* created in `fn` captures any more: the callbacks that captured it were
|
|
962
|
+
* copied into loops, which receive its value. A dead-zone binding keeps the
|
|
963
|
+
* box that represents its uninitialized state, and bindings `fn` itself
|
|
964
|
+
* captures keep theirs. */
|
|
965
|
+
function unboxUncaptured(fn, inlined) {
|
|
966
|
+
const captured = new Set();
|
|
967
|
+
everyStmtList(fn.body, {
|
|
968
|
+
expr: (e) => {
|
|
969
|
+
if (e.kind === "closure" || e.kind === "classRef")
|
|
970
|
+
for (const id of e.captures ?? [])
|
|
971
|
+
captured.add(id);
|
|
972
|
+
return true;
|
|
973
|
+
},
|
|
974
|
+
stmt: () => true,
|
|
975
|
+
});
|
|
976
|
+
const inherited = new Set([...(fn.captures ?? []), ...(fn.classCaptures ?? [])].map((c) => c.localId));
|
|
977
|
+
fn.locals = fn.locals.map((local) => {
|
|
978
|
+
if (local.boxed !== true || local.tdz === true || !inlined.has(local.id))
|
|
979
|
+
return local;
|
|
980
|
+
if (captured.has(local.id) || inherited.has(local.id))
|
|
981
|
+
return local;
|
|
982
|
+
const { boxed: _boxed, ...plain } = local;
|
|
983
|
+
return plain;
|
|
984
|
+
});
|
|
985
|
+
}
|
|
986
|
+
/** A callback body the loop can copy: small, no nested closures, recursion
|
|
987
|
+
* or try statements, and no boxed locals besides its captures. */
|
|
988
|
+
function inlinableBody(fn, captures) {
|
|
989
|
+
if (fn.locals.some((l) => l.tdz || (l.boxed && !captures.has(l.id))))
|
|
990
|
+
return false;
|
|
991
|
+
let size = 0;
|
|
992
|
+
return everyStmtList(fn.body, {
|
|
993
|
+
expr: (e) => ++size <= MAX_INLINE_NODES && e.kind !== "closure" && e.kind !== "selfRef",
|
|
994
|
+
stmt: (s) => ++size <= MAX_INLINE_NODES && s.kind !== "tryCatch",
|
|
995
|
+
});
|
|
996
|
+
}
|
|
800
997
|
function intersects(a, b) {
|
|
801
998
|
for (const id of a)
|
|
802
999
|
if (b.has(id))
|
|
@@ -889,6 +1086,7 @@ class FusedLoop {
|
|
|
889
1086
|
lowerer;
|
|
890
1087
|
chain;
|
|
891
1088
|
inlineTarget;
|
|
1089
|
+
contractTypes;
|
|
892
1090
|
params = [];
|
|
893
1091
|
locals = [];
|
|
894
1092
|
args = [];
|
|
@@ -897,18 +1095,21 @@ class FusedLoop {
|
|
|
897
1095
|
loc;
|
|
898
1096
|
next = 0;
|
|
899
1097
|
failed = false;
|
|
900
|
-
|
|
1098
|
+
/** `contractTypes`: the program writes contract types, which the
|
|
1099
|
+
* contract checker binds to source bindings. */
|
|
1100
|
+
constructor(lowerer, chain, inlineTarget, contractTypes) {
|
|
901
1101
|
this.lowerer = lowerer;
|
|
902
1102
|
this.chain = chain;
|
|
903
1103
|
this.inlineTarget = inlineTarget;
|
|
1104
|
+
this.contractTypes = contractTypes;
|
|
904
1105
|
this.loc = chain.loc;
|
|
905
1106
|
}
|
|
906
1107
|
fresh(name) {
|
|
907
1108
|
return `${name}.${this.next++}`;
|
|
908
1109
|
}
|
|
909
|
-
local(name, type, mutable = false) {
|
|
1110
|
+
local(name, type, mutable = false, source) {
|
|
910
1111
|
const id = this.fresh(name);
|
|
911
|
-
this.locals.push({ id, name, type, mutable });
|
|
1112
|
+
this.locals.push(source ? { id, name, type, mutable, source } : { id, name, type, mutable });
|
|
912
1113
|
return id;
|
|
913
1114
|
}
|
|
914
1115
|
param(name, value, key) {
|
|
@@ -924,7 +1125,9 @@ class FusedLoop {
|
|
|
924
1125
|
const known = this.callees.find((c) => c.arg === arg);
|
|
925
1126
|
if (known)
|
|
926
1127
|
return known;
|
|
927
|
-
|
|
1128
|
+
// Called as a plain function: the loop is not the target's receiver.
|
|
1129
|
+
const inlineTarget = this.inlineTarget;
|
|
1130
|
+
const target = inlineTarget(arg);
|
|
928
1131
|
let callee;
|
|
929
1132
|
if (target && arg.kind === "closure") {
|
|
930
1133
|
const captures = new Map();
|
|
@@ -974,10 +1177,18 @@ class FusedLoop {
|
|
|
974
1177
|
return true;
|
|
975
1178
|
},
|
|
976
1179
|
});
|
|
1180
|
+
// Copies keep their source bindings, so contract types written on
|
|
1181
|
+
// them are checked against what the loop stores. In a program that
|
|
1182
|
+
// writes contract types, a parameter with a source binding keeps its
|
|
1183
|
+
// own local for the same reason.
|
|
1184
|
+
const sources = new Map(fn.locals.map((l) => [l.id, l.source]));
|
|
977
1185
|
const aliased = new Set();
|
|
978
1186
|
fn.params.forEach((p, index) => {
|
|
979
1187
|
const arg = args[index];
|
|
980
|
-
if (arg.kind === "varRef" &&
|
|
1188
|
+
if (arg.kind === "varRef" &&
|
|
1189
|
+
!assigned.has(p.localId) &&
|
|
1190
|
+
typeEquals(arg.type, p.type) &&
|
|
1191
|
+
!(this.contractTypes && sources.get(p.localId) !== undefined)) {
|
|
981
1192
|
renamed.set(p.localId, arg.localId);
|
|
982
1193
|
aliased.add(p.localId);
|
|
983
1194
|
}
|
|
@@ -985,11 +1196,31 @@ class FusedLoop {
|
|
|
985
1196
|
for (const l of fn.locals) {
|
|
986
1197
|
if (renamed.has(l.id))
|
|
987
1198
|
continue;
|
|
988
|
-
const id = this.local(l.name, l.type, true);
|
|
1199
|
+
const id = this.local(l.name, l.type, true, l.source);
|
|
989
1200
|
renamed.set(l.id, id);
|
|
990
1201
|
}
|
|
1202
|
+
const rename = (id) => renamed.get(id) ?? id;
|
|
1203
|
+
const renameExpr = (e) => {
|
|
1204
|
+
switch (e.kind) {
|
|
1205
|
+
case "varRef":
|
|
1206
|
+
case "incDec":
|
|
1207
|
+
case "assignExpr":
|
|
1208
|
+
return { ...e, localId: rename(e.localId) };
|
|
1209
|
+
default:
|
|
1210
|
+
return e;
|
|
1211
|
+
}
|
|
1212
|
+
};
|
|
1213
|
+
// A bound parameter's value is an element or index with no source text
|
|
1214
|
+
// of its own; it is located at the parameter, without a span.
|
|
1215
|
+
const bind = fn.params.flatMap((p, index) => {
|
|
1216
|
+
if (aliased.has(p.localId))
|
|
1217
|
+
return [];
|
|
1218
|
+
const source = sources.get(p.localId);
|
|
1219
|
+
const arg = args[index];
|
|
1220
|
+
const init = source ? { ...arg, loc: { ...source.loc, end: source.loc.start } } : arg;
|
|
1221
|
+
return [{ kind: "varDecl", localId: rename(p.localId), init, loc }];
|
|
1222
|
+
});
|
|
991
1223
|
const labels = new Map();
|
|
992
|
-
const exit = this.fresh("%fused.exit");
|
|
993
1224
|
const label = (name) => {
|
|
994
1225
|
let id = labels.get(name);
|
|
995
1226
|
if (!id) {
|
|
@@ -998,19 +1229,51 @@ class FusedLoop {
|
|
|
998
1229
|
}
|
|
999
1230
|
return id;
|
|
1000
1231
|
};
|
|
1232
|
+
/** Locals and labels of a copied statement; returns are the caller's. */
|
|
1233
|
+
const renameStmt = (st) => {
|
|
1234
|
+
switch (st.kind) {
|
|
1235
|
+
case "varDecl":
|
|
1236
|
+
case "assign":
|
|
1237
|
+
return { ...st, localId: rename(st.localId) };
|
|
1238
|
+
case "break":
|
|
1239
|
+
case "continue":
|
|
1240
|
+
return st.label ? { ...st, label: label(st.label) } : st;
|
|
1241
|
+
case "forOf": {
|
|
1242
|
+
const renamedFor = { ...st, localId: rename(st.localId) };
|
|
1243
|
+
return st.labels ? { ...renamedFor, labels: st.labels.map(label) } : renamedFor;
|
|
1244
|
+
}
|
|
1245
|
+
case "while":
|
|
1246
|
+
case "doWhile":
|
|
1247
|
+
case "for":
|
|
1248
|
+
case "switch":
|
|
1249
|
+
case "block":
|
|
1250
|
+
return st.labels ? { ...st, labels: st.labels.map(label) } : st;
|
|
1251
|
+
default:
|
|
1252
|
+
return st;
|
|
1253
|
+
}
|
|
1254
|
+
};
|
|
1255
|
+
// A body whose only return is its last statement (`(x) => x * k`,
|
|
1256
|
+
// `{ const y = x * 2; return y > 4; }`) needs no exit block: its other
|
|
1257
|
+
// statements run after the bindings, and the call's value is the
|
|
1258
|
+
// returned expression.
|
|
1259
|
+
const last = fn.body[fn.body.length - 1];
|
|
1260
|
+
const prefix = fn.body.slice(0, -1);
|
|
1261
|
+
if (last !== undefined &&
|
|
1262
|
+
last.kind === "return" &&
|
|
1263
|
+
last.value !== null &&
|
|
1264
|
+
typeEquals(last.value.type, fn.returnType) &&
|
|
1265
|
+
!returns(last.value) &&
|
|
1266
|
+
prefix.every((st) => everyStmt(st, { expr: () => true, stmt: (x) => x.kind !== "return" }))) {
|
|
1267
|
+
const copy = { expr: renameExpr, stmt: renameStmt };
|
|
1268
|
+
return {
|
|
1269
|
+
pre: [...bind, ...transformStmtList(prefix, copy)],
|
|
1270
|
+
value: transformExpr(last.value, copy),
|
|
1271
|
+
};
|
|
1272
|
+
}
|
|
1273
|
+
const exit = this.fresh("%fused.exit");
|
|
1001
1274
|
const result = fn.returnType.kind === "void" ? null : this.local("ret", fn.returnType, true);
|
|
1002
|
-
const rename = (id) => renamed.get(id) ?? id;
|
|
1003
1275
|
const body = transformStmtList(fn.body, {
|
|
1004
|
-
expr:
|
|
1005
|
-
switch (e.kind) {
|
|
1006
|
-
case "varRef":
|
|
1007
|
-
case "incDec":
|
|
1008
|
-
case "assignExpr":
|
|
1009
|
-
return { ...e, localId: rename(e.localId) };
|
|
1010
|
-
default:
|
|
1011
|
-
return e;
|
|
1012
|
-
}
|
|
1013
|
-
},
|
|
1276
|
+
expr: renameExpr,
|
|
1014
1277
|
stmt: (s) => {
|
|
1015
1278
|
switch (s.kind) {
|
|
1016
1279
|
case "return": {
|
|
@@ -1030,25 +1293,14 @@ class FusedLoop {
|
|
|
1030
1293
|
loc: s.loc,
|
|
1031
1294
|
};
|
|
1032
1295
|
}
|
|
1033
|
-
case "varDecl":
|
|
1034
|
-
case "assign":
|
|
1035
|
-
return { ...s, localId: rename(s.localId) };
|
|
1036
1296
|
case "break":
|
|
1037
1297
|
case "continue":
|
|
1038
1298
|
return s.label && s.label !== exit ? { ...s, label: label(s.label) } : s;
|
|
1039
|
-
case "while":
|
|
1040
|
-
case "doWhile":
|
|
1041
|
-
case "for":
|
|
1042
|
-
case "block":
|
|
1043
|
-
return s.labels ? { ...s, labels: s.labels.map(label) } : s;
|
|
1044
1299
|
default:
|
|
1045
|
-
return s;
|
|
1300
|
+
return renameStmt(s);
|
|
1046
1301
|
}
|
|
1047
1302
|
},
|
|
1048
1303
|
});
|
|
1049
|
-
const bind = fn.params.flatMap((p, index) => aliased.has(p.localId)
|
|
1050
|
-
? []
|
|
1051
|
-
: [{ kind: "varDecl", localId: rename(p.localId), init: args[index], loc }]);
|
|
1052
1304
|
const pre = [];
|
|
1053
1305
|
if (result !== null)
|
|
1054
1306
|
pre.push({ kind: "varDecl", localId: result, init: null, loc });
|
|
@@ -1523,7 +1775,8 @@ class FusedLoop {
|
|
|
1523
1775
|
};
|
|
1524
1776
|
foldKnownUnions(fn);
|
|
1525
1777
|
scalarizeRecordTemporaries(this.lowerer, fn);
|
|
1526
|
-
|
|
1778
|
+
const inlinedCaptures = this.callees.flatMap((c) => c.inline && c.arg.kind === "closure" ? c.arg.captures : []);
|
|
1779
|
+
return { fn, args: this.args, key: this.keyParts.join("|"), inlinedCaptures };
|
|
1527
1780
|
}
|
|
1528
1781
|
}
|
|
1529
1782
|
function increment(id, loc) {
|
|
@@ -1623,8 +1876,11 @@ function foldKnownUnions(fn) {
|
|
|
1623
1876
|
case "for":
|
|
1624
1877
|
case "while":
|
|
1625
1878
|
case "doWhile":
|
|
1879
|
+
case "forOf":
|
|
1626
1880
|
case "block":
|
|
1627
1881
|
return { ...s, body: prune(s.body) };
|
|
1882
|
+
case "switch":
|
|
1883
|
+
return { ...s, cases: s.cases.map((c) => ({ ...c, body: prune(c.body) })) };
|
|
1628
1884
|
default:
|
|
1629
1885
|
return s;
|
|
1630
1886
|
}
|
|
@@ -1816,6 +2072,19 @@ function scalarizeRecordTemporaries(lowerer, fn) {
|
|
|
1816
2072
|
body: rewriteList(s.body),
|
|
1817
2073
|
},
|
|
1818
2074
|
];
|
|
2075
|
+
case "forOf":
|
|
2076
|
+
return [{ ...s, iterable: rewriteExpr(s.iterable), body: rewriteList(s.body) }];
|
|
2077
|
+
case "switch":
|
|
2078
|
+
return [
|
|
2079
|
+
{
|
|
2080
|
+
...s,
|
|
2081
|
+
disc: rewriteExpr(s.disc),
|
|
2082
|
+
cases: s.cases.map((c) => ({
|
|
2083
|
+
test: c.test === null ? null : rewriteExpr(c.test),
|
|
2084
|
+
body: rewriteList(c.body),
|
|
2085
|
+
})),
|
|
2086
|
+
},
|
|
2087
|
+
];
|
|
1819
2088
|
case "block":
|
|
1820
2089
|
return [{ ...s, body: rewriteList(s.body) }];
|
|
1821
2090
|
default: {
|