@scriptc/compiler 0.4.8 → 0.4.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ambient/node-fallback/buffer.d.ts +2 -0
- package/ambient/node-fallback/child_process.d.ts +9 -3
- package/ambient/node-fallback/dns-promises.d.ts +25 -0
- package/ambient/node-fallback/dns.d.ts +29 -0
- package/ambient/node-fallback/test.d.ts +7 -0
- package/ambient/scriptc-node-fallback.d.ts +145 -2
- package/ambient/scriptc-overrides.d.ts +22 -13
- package/dist/backend/build-cache.d.ts +1 -1
- package/dist/backend/build-cache.js +1 -1
- package/dist/backend/build-cache.js.map +1 -1
- package/dist/backend/cache-root.d.ts +7 -0
- package/dist/backend/cache-root.js +27 -0
- package/dist/backend/cache-root.js.map +1 -1
- package/dist/backend/executable-features.js +5 -1
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/link-plan.js +7 -1
- package/dist/backend/link-plan.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.d.ts +12 -1
- package/dist/backend/llvm/bytes-loop-versions.js +107 -30
- package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.test.js +96 -0
- package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
- package/dist/backend/llvm/checked-value-lifetimes.js +1 -0
- package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
- package/dist/backend/llvm/classes.d.ts +16 -5
- package/dist/backend/llvm/classes.js +34 -6
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +21 -2
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +9 -0
- package/dist/backend/llvm/common.js +9 -0
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/cpu-dispatch.d.ts +36 -2
- package/dist/backend/llvm/cpu-dispatch.js +96 -2
- package/dist/backend/llvm/cpu-dispatch.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.d.ts +5 -2
- package/dist/backend/llvm/dense-array-access.js +16 -12
- package/dist/backend/llvm/dense-array-access.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.test.js +3 -1
- package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +24 -0
- package/dist/backend/llvm/dyn.js +117 -3
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.js +6 -0
- package/dist/backend/llvm/emit-function.js.map +1 -1
- package/dist/backend/llvm/emit-journal.d.ts +1 -0
- package/dist/backend/llvm/emit-journal.js.map +1 -1
- package/dist/backend/llvm/emit-module.js +48 -5
- package/dist/backend/llvm/emit-module.js.map +1 -1
- package/dist/backend/llvm/emit-module.test.js +41 -0
- package/dist/backend/llvm/emit-module.test.js.map +1 -1
- package/dist/backend/llvm/emit-statements.js +11 -0
- package/dist/backend/llvm/emit-statements.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +87 -7
- package/dist/backend/llvm/emitter.js +136 -15
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +28 -6
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-containers.js +19 -5
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +29 -1
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +104 -6
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-records.js +15 -1
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +53 -5
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/inline-arrays.js +1 -1
- package/dist/backend/llvm/inline-arrays.js.map +1 -1
- package/dist/backend/llvm/js-ic.js +126 -2
- package/dist/backend/llvm/js-ic.js.map +1 -1
- package/dist/backend/llvm/lanes.d.ts +38 -0
- package/dist/backend/llvm/lanes.js +778 -0
- package/dist/backend/llvm/lanes.js.map +1 -0
- package/dist/backend/llvm/lanes.test.d.ts +1 -0
- package/dist/backend/llvm/lanes.test.js +402 -0
- package/dist/backend/llvm/lanes.test.js.map +1 -0
- package/dist/backend/llvm/lib-dispatch.js +9 -4
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-network.js +20 -0
- package/dist/backend/llvm/lib-network.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +27 -0
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-test.js +11 -0
- package/dist/backend/llvm/lib-test.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +2 -2
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.js +8 -2
- package/dist/backend/llvm/map-number-lookup.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.js +5 -2
- package/dist/backend/llvm/nullable-unions.js.map +1 -1
- package/dist/backend/llvm/publish.d.ts +3 -0
- package/dist/backend/llvm/publish.js +2 -2
- package/dist/backend/llvm/publish.js.map +1 -1
- package/dist/backend/llvm/reference-writes.js +1 -0
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/region-groups.js +43 -4
- package/dist/backend/llvm/region-groups.js.map +1 -1
- package/dist/backend/llvm/region-groups.test.js +79 -0
- package/dist/backend/llvm/region-groups.test.js.map +1 -1
- package/dist/backend/llvm/runtime-registries.test.js +32 -1
- package/dist/backend/llvm/runtime-registries.test.js.map +1 -1
- package/dist/backend/llvm/shapes.js +10 -1
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/string-reads.d.ts +1 -1
- package/dist/backend/llvm/string-reads.js +1 -1
- package/dist/backend/llvm/string-reads.js.map +1 -1
- package/dist/backend/llvm/unwind-abi.js +24 -2
- package/dist/backend/llvm/unwind-abi.js.map +1 -1
- package/dist/backend/llvm/unwind-abi.test.js +38 -0
- package/dist/backend/llvm/unwind-abi.test.js.map +1 -1
- package/dist/backend/llvm/walkers.d.ts +3 -0
- package/dist/backend/llvm/walkers.js +20 -2
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +15 -3
- package/dist/backend/native/executable.js +19 -5
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native-codegen-core.d.ts +20 -0
- package/dist/backend/native-codegen-core.js +15 -0
- package/dist/backend/native-codegen-core.js.map +1 -1
- package/dist/backend/native-codegen.d.ts +5 -0
- package/dist/backend/native-codegen.js +62 -8
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +48 -8
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +27 -3
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/native-link-info.test.js +17 -1
- package/dist/backend/native-link-info.test.js.map +1 -1
- package/dist/backend/native-toolchain.d.ts +1 -1
- package/dist/backend/native-toolchain.js +1 -1
- package/dist/backend/native-toolchain.js.map +1 -1
- package/dist/backend/native-toolchain.test.js +14 -1
- package/dist/backend/native-toolchain.test.js.map +1 -1
- package/dist/backend/runtime-pack-core.d.ts +9 -3
- package/dist/backend/runtime-pack-core.js +6 -1
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +32 -1
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/targets.d.ts +9 -1
- package/dist/backend/targets.js +11 -2
- package/dist/backend/targets.js.map +1 -1
- package/dist/backend/targets.test.js +6 -0
- package/dist/backend/targets.test.js.map +1 -1
- package/dist/cli/command.js +15 -1
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/host.d.ts +6 -0
- package/dist/cli/mcp.d.ts +72 -0
- package/dist/cli/mcp.js +601 -0
- package/dist/cli/mcp.js.map +1 -0
- package/dist/cli/mcp.test.d.ts +1 -0
- package/dist/cli/mcp.test.js +380 -0
- package/dist/cli/mcp.test.js.map +1 -0
- package/dist/cli/output-options.d.ts +1 -0
- package/dist/cli/output-options.js +3 -0
- package/dist/cli/output-options.js.map +1 -1
- package/dist/cli/usage.d.ts +51 -1
- package/dist/cli/usage.js +709 -186
- package/dist/cli/usage.js.map +1 -1
- package/dist/compat/fetch-profile.js +9 -4
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/compile-types.d.ts +17 -0
- package/dist/coverage/report.d.ts +5 -9
- package/dist/coverage/report.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +17 -3
- package/dist/executable/executable-cache.js +17 -3
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/prepare.js +87 -10
- package/dist/executable/prepare.js.map +1 -1
- package/dist/frontend/analysis.js +3 -2
- package/dist/frontend/analysis.js.map +1 -1
- package/dist/frontend/canon-map.js +13 -8
- package/dist/frontend/canon-map.js.map +1 -1
- package/dist/frontend/decl-projection.d.ts +18 -0
- package/dist/frontend/decl-projection.js +90 -22
- package/dist/frontend/decl-projection.js.map +1 -1
- package/dist/frontend/decl-projection.test.js +47 -1
- package/dist/frontend/decl-projection.test.js.map +1 -1
- package/dist/frontend/default-library.d.ts +10 -0
- package/dist/frontend/default-library.js +43 -0
- package/dist/frontend/default-library.js.map +1 -0
- package/dist/frontend/fork-target.js +54 -9
- package/dist/frontend/fork-target.js.map +1 -1
- package/dist/frontend/fork-target.test.js +82 -0
- package/dist/frontend/fork-target.test.js.map +1 -1
- package/dist/frontend/inferred-js-diagnostics.test.js +73 -0
- package/dist/frontend/inferred-js-diagnostics.test.js.map +1 -1
- package/dist/frontend/lowering/abstract-equality.d.ts +2 -1
- package/dist/frontend/lowering/abstract-equality.js +7 -1
- package/dist/frontend/lowering/abstract-equality.js.map +1 -1
- package/dist/frontend/lowering/array-values.js +2 -2
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/assertion-members.js +52 -2
- package/dist/frontend/lowering/assertion-members.js.map +1 -1
- package/dist/frontend/lowering/builtin-namespaces.d.ts +5 -0
- package/dist/frontend/lowering/builtin-namespaces.js +19 -12
- package/dist/frontend/lowering/builtin-namespaces.js.map +1 -1
- package/dist/frontend/lowering/builtins/callable-aliases.js +42 -6
- package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process.d.ts +12 -11
- package/dist/frontend/lowering/builtins/child-process.js +235 -38
- package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
- package/dist/frontend/lowering/builtins/compression.d.ts +6 -1
- package/dist/frontend/lowering/builtins/compression.js +3 -3
- package/dist/frontend/lowering/builtins/compression.js.map +1 -1
- package/dist/frontend/lowering/builtins/constants.js +2 -2
- package/dist/frontend/lowering/builtins/constants.js.map +1 -1
- package/dist/frontend/lowering/builtins/crypto.d.ts +3 -1
- package/dist/frontend/lowering/builtins/crypto.js +9 -1
- package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
- package/dist/frontend/lowering/builtins/dates.js +26 -6
- package/dist/frontend/lowering/builtins/dates.js.map +1 -1
- package/dist/frontend/lowering/builtins/environment.d.ts +13 -1
- package/dist/frontend/lowering/builtins/environment.js +15 -4
- package/dist/frontend/lowering/builtins/environment.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-bindings.d.ts +33 -0
- package/dist/frontend/lowering/builtins/module-bindings.js +213 -11
- package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-resolution.d.ts +9 -2
- package/dist/frontend/lowering/builtins/module-resolution.js +187 -19
- package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
- package/dist/frontend/lowering/builtins/performance.js +1 -1
- package/dist/frontend/lowering/builtins/performance.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.js +40 -2
- package/dist/frontend/lowering/builtins/process.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.js +33 -0
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +9 -5
- package/dist/frontend/lowering/builtins/readline.js +184 -75
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/url.d.ts +4 -0
- package/dist/frontend/lowering/builtins/url.js +6 -0
- package/dist/frontend/lowering/builtins/url.js.map +1 -1
- package/dist/frontend/lowering/call-arguments.js +15 -0
- package/dist/frontend/lowering/call-arguments.js.map +1 -1
- package/dist/frontend/lowering/callable-properties.d.ts +34 -0
- package/dist/frontend/lowering/callable-properties.js +210 -0
- package/dist/frontend/lowering/callable-properties.js.map +1 -0
- package/dist/frontend/lowering/cjs-inline-require.d.ts +16 -0
- package/dist/frontend/lowering/cjs-inline-require.js +105 -0
- package/dist/frontend/lowering/cjs-inline-require.js.map +1 -1
- package/dist/frontend/lowering/cjs-inline-require.test.d.ts +1 -0
- package/dist/frontend/lowering/cjs-inline-require.test.js +61 -0
- package/dist/frontend/lowering/cjs-inline-require.test.js.map +1 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +82 -2
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-protocols.d.ts +57 -4
- package/dist/frontend/lowering/class-protocols.js +597 -30
- package/dist/frontend/lowering/class-protocols.js.map +1 -1
- package/dist/frontend/lowering/class-unions.js +2 -2
- package/dist/frontend/lowering/class-unions.js.map +1 -1
- package/dist/frontend/lowering/coercions/function-adapters.d.ts +12 -0
- package/dist/frontend/lowering/coercions/function-adapters.js +62 -0
- package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural-plans.js +56 -1
- package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +9 -4
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/collection-ingestion.d.ts +9 -0
- package/dist/frontend/lowering/collection-ingestion.js +115 -41
- package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.js +16 -0
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.js +66 -10
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +61 -5
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/filter-predicates.js +11 -0
- package/dist/frontend/lowering/containers/filter-predicates.js.map +1 -1
- package/dist/frontend/lowering/containers/indexed-objects.d.ts +15 -0
- package/dist/frontend/lowering/containers/indexed-objects.js +213 -30
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/error-name-order.d.ts +16 -0
- package/dist/frontend/lowering/error-name-order.js +61 -0
- package/dist/frontend/lowering/error-name-order.js.map +1 -1
- package/dist/frontend/lowering/expressions/asserted-receiver.d.ts +17 -0
- package/dist/frontend/lowering/expressions/asserted-receiver.js +123 -1
- package/dist/frontend/lowering/expressions/asserted-receiver.js.map +1 -1
- package/dist/frontend/lowering/expressions/binary.js +147 -20
- package/dist/frontend/lowering/expressions/binary.js.map +1 -1
- package/dist/frontend/lowering/expressions/element-access.js +63 -14
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/erased-delete.d.ts +59 -0
- package/dist/frontend/lowering/expressions/erased-delete.js +247 -0
- package/dist/frontend/lowering/expressions/erased-delete.js.map +1 -0
- package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +10 -0
- package/dist/frontend/lowering/expressions/hosted-narrowing.js +48 -1
- package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/identifiers.js +20 -0
- package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
- package/dist/frontend/lowering/expressions/narrowing.d.ts +7 -2
- package/dist/frontend/lowering/expressions/narrowing.js +77 -45
- package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.js +62 -19
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.js +19 -0
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.d.ts +7 -7
- package/dist/frontend/lowering/expressions/property-access.js +247 -48
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/relational.d.ts +1 -0
- package/dist/frontend/lowering/expressions/relational.js +18 -8
- package/dist/frontend/lowering/expressions/relational.js.map +1 -1
- package/dist/frontend/lowering/expressions/union-fields.js +11 -5
- package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
- package/dist/frontend/lowering/expressions/updates.js +121 -11
- package/dist/frontend/lowering/expressions/updates.js.map +1 -1
- package/dist/frontend/lowering/function-context.d.ts +10 -0
- package/dist/frontend/lowering/function-context.js +36 -0
- package/dist/frontend/lowering/function-context.js.map +1 -1
- package/dist/frontend/lowering/function-returns.js +8 -8
- package/dist/frontend/lowering/function-returns.js.map +1 -1
- package/dist/frontend/lowering/handle-properties.d.ts +62 -3
- package/dist/frontend/lowering/handle-properties.js +674 -26
- package/dist/frontend/lowering/handle-properties.js.map +1 -1
- package/dist/frontend/lowering/handle-properties.test.js +95 -2
- package/dist/frontend/lowering/handle-properties.test.js.map +1 -1
- package/dist/frontend/lowering/lower-builtin-values.d.ts +12 -0
- package/dist/frontend/lowering/lower-builtin-values.js +44 -0
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.js +328 -136
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.js +82 -17
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.js +113 -9
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-expando.d.ts +13 -21
- package/dist/frontend/lowering/lower-expando.js +90 -126
- package/dist/frontend/lowering/lower-expando.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.js +2 -2
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +65 -0
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +471 -0
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +36 -10
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-node-island.js +28 -0
- package/dist/frontend/lowering/lower-node-island.js.map +1 -1
- package/dist/frontend/lowering/lower-server.d.ts +53 -7
- package/dist/frontend/lowering/lower-server.js +213 -42
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.js +50 -7
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +24 -0
- package/dist/frontend/lowering/lower-stmts.js +463 -220
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.js +2 -2
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-test.js +71 -2
- package/dist/frontend/lowering/lower-test.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +81 -10
- package/dist/frontend/lowering/lowerer.js +319 -72
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/new-target.js +10 -2
- package/dist/frontend/lowering/new-target.js.map +1 -1
- package/dist/frontend/lowering/nullish-empty-pattern.js +3 -3
- package/dist/frontend/lowering/nullish-empty-pattern.js.map +1 -1
- package/dist/frontend/lowering/partial-assertions.js +30 -5
- package/dist/frontend/lowering/partial-assertions.js.map +1 -1
- package/dist/frontend/lowering/primitive-throws.js +91 -1
- package/dist/frontend/lowering/primitive-throws.js.map +1 -1
- package/dist/frontend/lowering/primitive-wrappers.d.ts +9 -0
- package/dist/frontend/lowering/primitive-wrappers.js +2 -2
- package/dist/frontend/lowering/primitive-wrappers.js.map +1 -1
- package/dist/frontend/lowering/promise-executor-adapter.js +5 -2
- package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -1
- package/dist/frontend/lowering/record-links.js +7 -2
- package/dist/frontend/lowering/record-links.js.map +1 -1
- package/dist/frontend/lowering/surfaces.d.ts +4 -0
- package/dist/frontend/lowering/surfaces.js +118 -2
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/surfaces.test.d.ts +1 -0
- package/dist/frontend/lowering/surfaces.test.js +31 -0
- package/dist/frontend/lowering/surfaces.test.js.map +1 -0
- package/dist/frontend/mock-shapes.js +3 -3
- package/dist/frontend/mock-shapes.js.map +1 -1
- package/dist/frontend/npm-static-ladder.d.ts +21 -0
- package/dist/frontend/npm-static-ladder.js +2 -0
- package/dist/frontend/npm-static-ladder.js.map +1 -0
- package/dist/frontend/npm-static-ladder.test.d.ts +1 -0
- package/dist/frontend/npm-static-ladder.test.js +138 -0
- package/dist/frontend/npm-static-ladder.test.js.map +1 -0
- package/dist/frontend/npm-static-status.d.ts +15 -0
- package/dist/frontend/npm-static-status.js +2 -0
- package/dist/frontend/npm-static-status.js.map +1 -0
- package/dist/frontend/package-shims.js +1 -1
- package/dist/frontend/package-shims.js.map +1 -1
- package/dist/frontend/pipeline.d.ts +1 -1
- package/dist/frontend/pipeline.js +222 -25
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/program-analysis.d.ts +4 -0
- package/dist/frontend/program-analysis.js +6 -0
- package/dist/frontend/program-analysis.js.map +1 -1
- package/dist/frontend/program.js +258 -32
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +30 -0
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/resolve.js +29 -5
- package/dist/frontend/resolve.js.map +1 -1
- package/dist/frontend/resolve.test.js +40 -0
- package/dist/frontend/resolve.test.js.map +1 -1
- package/dist/frontend/services.d.ts +8 -0
- package/dist/frontend/services.js +7 -0
- package/dist/frontend/services.js.map +1 -1
- package/dist/frontend/ts7/checker.d.ts +7 -0
- package/dist/frontend/ts7/checker.js +12 -0
- package/dist/frontend/ts7/checker.js.map +1 -1
- package/dist/frontend/ts7/checker.test.js +1 -0
- package/dist/frontend/ts7/checker.test.js.map +1 -1
- package/dist/frontend/ts7/program-host.d.ts +39 -2
- package/dist/frontend/ts7/program-host.js +62 -8
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/program-host.test.js +33 -0
- package/dist/frontend/ts7/program-host.test.js.map +1 -1
- package/dist/frontend/ts7/session-cache.d.ts +5 -1
- package/dist/frontend/ts7/session-cache.js +7 -1
- package/dist/frontend/ts7/session-cache.js.map +1 -1
- package/dist/frontend/ts7/session-cache.test.js +37 -0
- package/dist/frontend/ts7/session-cache.test.js.map +1 -1
- package/dist/frontend/ts7/session.js +19 -1
- package/dist/frontend/ts7/session.js.map +1 -1
- package/dist/frontend/ts7/source-parser.d.ts +17 -2
- package/dist/frontend/ts7/source-parser.js +61 -2
- package/dist/frontend/ts7/source-parser.js.map +1 -1
- package/dist/frontend/ts7/source-parser.test.js +55 -2
- package/dist/frontend/ts7/source-parser.test.js.map +1 -1
- package/dist/frontend/tsc-codes.d.ts +3 -2
- package/dist/frontend/tsc-codes.js +129 -22
- package/dist/frontend/tsc-codes.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +5 -11
- package/dist/frontend/type-mapper.js +380 -70
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +67 -7
- 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 +1 -1
- package/dist/ir/builtin-signatures.js +72 -6
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/codec.generated.d.ts +1 -1
- package/dist/ir/codec.generated.js +321 -263
- package/dist/ir/codec.generated.js.map +1 -1
- package/dist/ir/constant-length-clones.d.ts +26 -0
- package/dist/ir/constant-length-clones.js +589 -0
- package/dist/ir/constant-length-clones.js.map +1 -0
- package/dist/ir/constant-length-clones.test.d.ts +1 -0
- package/dist/ir/constant-length-clones.test.js +292 -0
- package/dist/ir/constant-length-clones.test.js.map +1 -0
- package/dist/ir/constant-tables.d.ts +10 -5
- package/dist/ir/constant-tables.js +83 -17
- package/dist/ir/constant-tables.js.map +1 -1
- package/dist/ir/constant-tables.test.js +58 -1
- package/dist/ir/constant-tables.test.js.map +1 -1
- package/dist/ir/fields.generated.js +5 -2
- package/dist/ir/fields.generated.js.map +1 -1
- package/dist/ir/function-references.js +2 -0
- package/dist/ir/function-references.js.map +1 -1
- package/dist/ir/function-references.test.js +13 -0
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/integer-loops.js +1 -0
- package/dist/ir/integer-loops.js.map +1 -1
- package/dist/ir/integer-loops.test.js +16 -0
- package/dist/ir/integer-loops.test.js.map +1 -1
- package/dist/ir/ir.d.ts +50 -6
- package/dist/ir/ir.js +44 -2
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/ir.test.js +83 -1
- package/dist/ir/ir.test.js.map +1 -1
- package/dist/ir/js-groups.js +5 -1
- package/dist/ir/js-groups.js.map +1 -1
- package/dist/ir/js-ic.d.ts +20 -0
- package/dist/ir/js-ic.js +81 -4
- package/dist/ir/js-ic.js.map +1 -1
- package/dist/ir/js-ic.test.js +8 -1
- package/dist/ir/js-ic.test.js.map +1 -1
- package/dist/ir/lane-plans.d.ts +86 -0
- package/dist/ir/lane-plans.js +589 -0
- package/dist/ir/lane-plans.js.map +1 -0
- package/dist/ir/lane-plans.test.d.ts +1 -0
- package/dist/ir/lane-plans.test.js +549 -0
- package/dist/ir/lane-plans.test.js.map +1 -0
- package/dist/ir/runtime-features.d.ts +68 -10
- package/dist/ir/runtime-features.js +285 -17
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/runtime-features.test.js +190 -1
- package/dist/ir/runtime-features.test.js.map +1 -1
- package/dist/ir/validate.js +61 -24
- package/dist/ir/validate.js.map +1 -1
- package/dist/native/cache.d.ts +5 -0
- package/dist/native/cache.js +23 -1
- package/dist/native/cache.js.map +1 -1
- package/dist/native/cache.test.js +29 -1
- package/dist/native/cache.test.js.map +1 -1
- package/dist/native/cli.js +4 -2
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.d.ts +11 -3
- package/dist/native/compiler.js +102 -16
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/compiler.test.js +244 -2
- package/dist/native/compiler.test.js.map +1 -1
- package/dist/native/prepare.d.ts +14 -1
- package/dist/native/prepare.js +79 -29
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/sanitizer.test.js +3 -0
- package/dist/native/sanitizer.test.js.map +1 -1
- package/dist/native/unchanged.d.ts +80 -0
- package/dist/native/unchanged.js +301 -0
- package/dist/native/unchanged.js.map +1 -0
- package/dist/native/unchanged.test.d.ts +1 -0
- package/dist/native/unchanged.test.js +249 -0
- package/dist/native/unchanged.test.js.map +1 -0
- package/dist/node-islands/boundary.d.ts +16 -0
- package/dist/node-islands/boundary.js +70 -7
- package/dist/node-islands/boundary.js.map +1 -1
- package/dist/node-islands/boundary.test.js +59 -14
- package/dist/node-islands/boundary.test.js.map +1 -1
- package/dist/node-islands/detect.js +203 -47
- package/dist/node-islands/detect.js.map +1 -1
- package/dist/node-islands/detect.test.js +45 -0
- package/dist/node-islands/detect.test.js.map +1 -1
- package/dist/node-islands/growth.js +4 -16
- package/dist/node-islands/growth.js.map +1 -1
- package/dist/node-islands/modules.d.ts +3 -0
- package/dist/node-islands/modules.js +143 -12
- package/dist/node-islands/modules.js.map +1 -1
- package/dist/node-islands/modules.test.js +125 -0
- package/dist/node-islands/modules.test.js.map +1 -1
- package/dist/node-islands/report.d.ts +1 -1
- package/dist/node-islands/report.js +2 -1
- package/dist/node-islands/report.js.map +1 -1
- package/package.json +20 -20
- package/shims/undici/core/request.ts +7 -1
- package/surface-manifest.json +380 -2
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { IrModule } from "./ir.js";
|
|
2
|
+
import { type IrNodeIndex } from "./node-index.js";
|
|
3
|
+
/** Direct calls whose array argument is an array of one statically known
|
|
4
|
+
* length call a clone of the callee in which that parameter carries the
|
|
5
|
+
* length: an element-count read of the parameter is the length itself, any
|
|
6
|
+
* element index proven in range names a present slot, and constant locals that
|
|
7
|
+
* copy the length fold to it.
|
|
8
|
+
*
|
|
9
|
+
* A callee qualifies when an array parameter, and every local that holds the
|
|
10
|
+
* same array, is used only through element reads, presence tests,
|
|
11
|
+
* element-count reads and searches, `for…of` iteration and calls to callees
|
|
12
|
+
* whose matching parameter is proven the same way — never resized, stored,
|
|
13
|
+
* returned, compared, captured or spread — and the callee is an ordinary
|
|
14
|
+
* function of at most MAX_FUNCTION_NODES nodes with no captures. An argument
|
|
15
|
+
* qualifies when it is an array literal, a read-only local with one definition
|
|
16
|
+
* from one, or an immutable global with one such definition that no other code
|
|
17
|
+
* writes and no closure captures. The length and the hole-free prefix then
|
|
18
|
+
* never change between the call and any use inside it, so the clone needs no
|
|
19
|
+
* runtime test. Only calls inside a loop specialize: the fold pays on every
|
|
20
|
+
* pass of the callee, not once at a call that runs a single time.
|
|
21
|
+
*
|
|
22
|
+
* Code growth is bounded: at most MAX_CLONES_PER_FUNCTION clones per function
|
|
23
|
+
* and MIN_CLONED_NODES (or CLONED_NODE_FRACTION of the module) of cloned
|
|
24
|
+
* nodes module-wide. `symbolName` spells names after mangling, and `index`,
|
|
25
|
+
* an index of `mod`, gives node counts without walking bodies. */
|
|
26
|
+
export declare function specializeConstantArrayLengths(mod: IrModule, symbolName?: (name: string) => string, index?: IrNodeIndex): IrModule;
|
|
@@ -0,0 +1,589 @@
|
|
|
1
|
+
import { numLit } from "./build.js";
|
|
2
|
+
import { everyStmtList, mapExprChildren, mapStmtChildren, transformStmtList } from "./traverse.js";
|
|
3
|
+
import {} from "./node-index.js";
|
|
4
|
+
/** Largest body (IR nodes) a clone is made from. */
|
|
5
|
+
const MAX_FUNCTION_NODES = 800;
|
|
6
|
+
/** Clones of one function: one per array parameter and length. */
|
|
7
|
+
const MAX_CLONES_PER_FUNCTION = 2;
|
|
8
|
+
/** Module-wide cloned nodes: at least this many, or this share of the module. */
|
|
9
|
+
const MIN_CLONED_NODES = 4000;
|
|
10
|
+
const CLONED_NODE_FRACTION = 0.05;
|
|
11
|
+
/** Rounds of copying a literal through a chain of constant locals. */
|
|
12
|
+
const FOLD_ROUNDS = 4;
|
|
13
|
+
/** Array methods that read the array and nothing else: the receiver is not
|
|
14
|
+
* written, resized or stored, and an element argument is a separate value. */
|
|
15
|
+
const READING_METHODS = new Set([
|
|
16
|
+
"length",
|
|
17
|
+
"getNumber",
|
|
18
|
+
"indexEq",
|
|
19
|
+
"indexOf",
|
|
20
|
+
"includes",
|
|
21
|
+
"nextPresent",
|
|
22
|
+
]);
|
|
23
|
+
/** Thrown when a use does not fit the read-only shape a proof needs. */
|
|
24
|
+
const REJECT = Symbol("not a constant length binding");
|
|
25
|
+
function reject() {
|
|
26
|
+
throw REJECT;
|
|
27
|
+
}
|
|
28
|
+
function countNodes(fn, index) {
|
|
29
|
+
const recorded = index?.nodeCount(fn);
|
|
30
|
+
if (recorded !== undefined)
|
|
31
|
+
return recorded;
|
|
32
|
+
let count = 0;
|
|
33
|
+
everyStmtList(fn.body, {
|
|
34
|
+
stmt: () => (++count, true),
|
|
35
|
+
expr: () => (++count, true),
|
|
36
|
+
});
|
|
37
|
+
return count;
|
|
38
|
+
}
|
|
39
|
+
/** The calls in `fn` that sit inside a loop. A call that repeats saves the
|
|
40
|
+
* callee's length reads on every pass; a call that runs once per program run
|
|
41
|
+
* saves a load and a compare and pays for a second copy of the callee. */
|
|
42
|
+
function callsInLoops(fn) {
|
|
43
|
+
const found = new Set();
|
|
44
|
+
const visitExpr = (node, loop) => {
|
|
45
|
+
if (loop && node.kind === "call")
|
|
46
|
+
found.add(node);
|
|
47
|
+
mapExprChildren(node, (child) => {
|
|
48
|
+
visitExpr(child, loop);
|
|
49
|
+
return child;
|
|
50
|
+
}, (statement) => {
|
|
51
|
+
visitStmt(statement, loop);
|
|
52
|
+
return statement;
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
const visitStmt = (statement, loop) => {
|
|
56
|
+
const inner = loop ||
|
|
57
|
+
statement.kind === "while" ||
|
|
58
|
+
statement.kind === "doWhile" ||
|
|
59
|
+
statement.kind === "for" ||
|
|
60
|
+
statement.kind === "forOf";
|
|
61
|
+
mapStmtChildren(statement, (child) => {
|
|
62
|
+
visitExpr(child, inner);
|
|
63
|
+
return child;
|
|
64
|
+
}, (child) => {
|
|
65
|
+
visitStmt(child, inner);
|
|
66
|
+
return child;
|
|
67
|
+
});
|
|
68
|
+
};
|
|
69
|
+
for (const statement of fn.body)
|
|
70
|
+
visitStmt(statement, false);
|
|
71
|
+
return found;
|
|
72
|
+
}
|
|
73
|
+
/** Calls `visit` on `node` and every expression below it. */
|
|
74
|
+
function walkExpr(node, visit) {
|
|
75
|
+
visit(node);
|
|
76
|
+
mapExprChildren(node, (child) => {
|
|
77
|
+
walkExpr(child, visit);
|
|
78
|
+
return child;
|
|
79
|
+
}, (statement) => {
|
|
80
|
+
walkStmt(statement, visit);
|
|
81
|
+
return statement;
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
function walkStmt(node, visit) {
|
|
85
|
+
mapStmtChildren(node, (child) => {
|
|
86
|
+
walkExpr(child, visit);
|
|
87
|
+
return child;
|
|
88
|
+
}, (child) => {
|
|
89
|
+
walkStmt(child, visit);
|
|
90
|
+
return child;
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
/** Every write to every binding the bodies hold, by binding local id. */
|
|
94
|
+
function collectWrites(bodies) {
|
|
95
|
+
const writes = new Map();
|
|
96
|
+
const note = (id, node, value) => {
|
|
97
|
+
const list = writes.get(id);
|
|
98
|
+
if (list === undefined)
|
|
99
|
+
writes.set(id, [{ node, value }]);
|
|
100
|
+
else
|
|
101
|
+
list.push({ node, value });
|
|
102
|
+
};
|
|
103
|
+
const scanExpr = (node) => {
|
|
104
|
+
if (node.kind === "assignExpr" || node.kind === "incDec")
|
|
105
|
+
note(node.localId, node, null);
|
|
106
|
+
mapExprChildren(node, (child) => {
|
|
107
|
+
scanExpr(child);
|
|
108
|
+
return child;
|
|
109
|
+
}, (child) => {
|
|
110
|
+
scan(child);
|
|
111
|
+
return child;
|
|
112
|
+
});
|
|
113
|
+
};
|
|
114
|
+
const scan = (statement) => {
|
|
115
|
+
if (statement.kind === "varDecl")
|
|
116
|
+
note(statement.localId, statement, statement.init);
|
|
117
|
+
else if (statement.kind === "assign")
|
|
118
|
+
note(statement.localId, statement, statement.value);
|
|
119
|
+
else if (statement.kind === "forOf")
|
|
120
|
+
note(statement.localId, statement, null);
|
|
121
|
+
else if (statement.kind === "tryCatch" && statement.catchLocalId !== null)
|
|
122
|
+
note(statement.catchLocalId, statement, null);
|
|
123
|
+
mapStmtChildren(statement, (child) => {
|
|
124
|
+
scanExpr(child);
|
|
125
|
+
return child;
|
|
126
|
+
}, (child) => {
|
|
127
|
+
scan(child);
|
|
128
|
+
return child;
|
|
129
|
+
});
|
|
130
|
+
};
|
|
131
|
+
for (const body of bodies)
|
|
132
|
+
for (const statement of body)
|
|
133
|
+
scan(statement);
|
|
134
|
+
return writes;
|
|
135
|
+
}
|
|
136
|
+
/** The locals of `fn` that hold the array `id` holds: the binding itself and
|
|
137
|
+
* every local whose every write copies one of them. A copy is how a `for…of`
|
|
138
|
+
* iterable or a cast reaches the array. A local a closure captures is left
|
|
139
|
+
* out: the closure can reach the binding from its own function. */
|
|
140
|
+
function arrayHolders(fn, id) {
|
|
141
|
+
const captured = new Set();
|
|
142
|
+
for (const statement of fn.body)
|
|
143
|
+
walkStmt(statement, (node) => {
|
|
144
|
+
if (node.kind === "closure")
|
|
145
|
+
for (const capture of node.captures)
|
|
146
|
+
captured.add(capture);
|
|
147
|
+
});
|
|
148
|
+
const writes = collectWrites([fn.body]);
|
|
149
|
+
const holders = new Set([id]);
|
|
150
|
+
const definitions = new Set();
|
|
151
|
+
for (let changed = true; changed;) {
|
|
152
|
+
changed = false;
|
|
153
|
+
for (const [candidate, list] of writes) {
|
|
154
|
+
if (holders.has(candidate) || captured.has(candidate))
|
|
155
|
+
continue;
|
|
156
|
+
const local = fn.locals.find((entry) => entry.id === candidate);
|
|
157
|
+
if (local === undefined || local.boxed || local.mutable)
|
|
158
|
+
continue;
|
|
159
|
+
if (!list.length)
|
|
160
|
+
continue;
|
|
161
|
+
if (!list.every((write) => write.value !== null &&
|
|
162
|
+
write.value.kind === "varRef" &&
|
|
163
|
+
holders.has(write.value.localId)))
|
|
164
|
+
continue;
|
|
165
|
+
holders.add(candidate);
|
|
166
|
+
for (const write of list)
|
|
167
|
+
definitions.add(write.node);
|
|
168
|
+
changed = true;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return { holders, definitions };
|
|
172
|
+
}
|
|
173
|
+
/** Whether every use of the array `holders` name is a read the proof keeps
|
|
174
|
+
* exact: an element read or presence test at an index, an element-count read
|
|
175
|
+
* or a search of a read-only method, a `for…of` iterable, or an argument that
|
|
176
|
+
* the callee's matching parameter is itself proven read-only for. Writes,
|
|
177
|
+
* stores into other values, returns, comparisons, spreads, enumerations and
|
|
178
|
+
* captures are not. `allow` names the statements that define the binding and
|
|
179
|
+
* its copies. */
|
|
180
|
+
function usesReadOnly(body, holders, allow, callAllowed) {
|
|
181
|
+
/** A receiver position: a name the binding reaches, or an expression that
|
|
182
|
+
* holds no such name. */
|
|
183
|
+
const receiver = (node) => {
|
|
184
|
+
if (node.kind === "varRef")
|
|
185
|
+
return;
|
|
186
|
+
expr(node);
|
|
187
|
+
};
|
|
188
|
+
const expr = (node) => {
|
|
189
|
+
switch (node.kind) {
|
|
190
|
+
case "varRef":
|
|
191
|
+
if (holders.has(node.localId))
|
|
192
|
+
reject();
|
|
193
|
+
return;
|
|
194
|
+
case "arrayGet":
|
|
195
|
+
case "arrayHas":
|
|
196
|
+
case "arrayState":
|
|
197
|
+
receiver(node.arr);
|
|
198
|
+
expr(node.index);
|
|
199
|
+
return;
|
|
200
|
+
case "arrIntrinsic":
|
|
201
|
+
if (READING_METHODS.has(node.method)) {
|
|
202
|
+
receiver(node.receiver);
|
|
203
|
+
for (const arg of node.args)
|
|
204
|
+
expr(arg);
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
expr(node.receiver);
|
|
208
|
+
for (const arg of node.args)
|
|
209
|
+
expr(arg);
|
|
210
|
+
}
|
|
211
|
+
return;
|
|
212
|
+
case "call":
|
|
213
|
+
for (let index = 0; index < node.args.length; index++) {
|
|
214
|
+
const arg = node.args[index];
|
|
215
|
+
if (arg.kind === "varRef" && holders.has(arg.localId)) {
|
|
216
|
+
if (!callAllowed(node.callee, index))
|
|
217
|
+
reject();
|
|
218
|
+
}
|
|
219
|
+
else
|
|
220
|
+
expr(arg);
|
|
221
|
+
}
|
|
222
|
+
return;
|
|
223
|
+
case "closure":
|
|
224
|
+
// A nested function's body is a function of its own, which the
|
|
225
|
+
// module-wide scan covers; a capture reaches the binding from there.
|
|
226
|
+
if (node.captures.some((capture) => holders.has(capture)))
|
|
227
|
+
reject();
|
|
228
|
+
return;
|
|
229
|
+
default:
|
|
230
|
+
mapExprChildren(node, (child) => {
|
|
231
|
+
expr(child);
|
|
232
|
+
return child;
|
|
233
|
+
}, (child) => {
|
|
234
|
+
stmt(child);
|
|
235
|
+
return child;
|
|
236
|
+
});
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
};
|
|
240
|
+
const stmt = (statement) => {
|
|
241
|
+
if (allow.has(statement))
|
|
242
|
+
return;
|
|
243
|
+
switch (statement.kind) {
|
|
244
|
+
case "varDecl":
|
|
245
|
+
if (holders.has(statement.localId))
|
|
246
|
+
reject();
|
|
247
|
+
if (statement.init !== null)
|
|
248
|
+
expr(statement.init);
|
|
249
|
+
return;
|
|
250
|
+
case "assign":
|
|
251
|
+
if (holders.has(statement.localId))
|
|
252
|
+
reject();
|
|
253
|
+
expr(statement.value);
|
|
254
|
+
return;
|
|
255
|
+
case "forOf":
|
|
256
|
+
receiver(statement.iterable);
|
|
257
|
+
for (const inner of statement.body)
|
|
258
|
+
stmt(inner);
|
|
259
|
+
return;
|
|
260
|
+
case "tryCatch":
|
|
261
|
+
if (statement.catchLocalId !== null && holders.has(statement.catchLocalId))
|
|
262
|
+
reject();
|
|
263
|
+
break;
|
|
264
|
+
default:
|
|
265
|
+
break;
|
|
266
|
+
}
|
|
267
|
+
mapStmtChildren(statement, (child) => {
|
|
268
|
+
expr(child);
|
|
269
|
+
return child;
|
|
270
|
+
}, (child) => {
|
|
271
|
+
stmt(child);
|
|
272
|
+
return child;
|
|
273
|
+
});
|
|
274
|
+
};
|
|
275
|
+
try {
|
|
276
|
+
for (const statement of body)
|
|
277
|
+
stmt(statement);
|
|
278
|
+
return true;
|
|
279
|
+
}
|
|
280
|
+
catch (error) {
|
|
281
|
+
if (error === REJECT)
|
|
282
|
+
return false;
|
|
283
|
+
throw error;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
/** The body of `origin` with every element-count read of parameter `id`
|
|
287
|
+
* replaced by `length`, or null when the body reads none. */
|
|
288
|
+
function foldLengthReads(body, id, length) {
|
|
289
|
+
let folded = 0;
|
|
290
|
+
const next = transformStmtList(body, {
|
|
291
|
+
expr: (node) => {
|
|
292
|
+
if (node.kind === "arrIntrinsic" &&
|
|
293
|
+
node.method === "length" &&
|
|
294
|
+
node.receiver.kind === "varRef" &&
|
|
295
|
+
node.receiver.localId === id) {
|
|
296
|
+
folded++;
|
|
297
|
+
return numLit(length, node.loc);
|
|
298
|
+
}
|
|
299
|
+
return node;
|
|
300
|
+
},
|
|
301
|
+
stmt: (statement) => statement,
|
|
302
|
+
});
|
|
303
|
+
return folded === 0 ? null : next;
|
|
304
|
+
}
|
|
305
|
+
/** `body` with every constant local that holds a literal replaced by the
|
|
306
|
+
* literal, repeated so a copy of a constant local folds too. A local folds
|
|
307
|
+
* when it is never written but by one reading of a literal and no closure
|
|
308
|
+
* captures it. */
|
|
309
|
+
function foldConstantLocals(fn, body) {
|
|
310
|
+
let current = body;
|
|
311
|
+
for (let round = 0; round < FOLD_ROUNDS; round++) {
|
|
312
|
+
const writes = collectWrites([current]);
|
|
313
|
+
const literals = new Map();
|
|
314
|
+
for (const local of fn.locals) {
|
|
315
|
+
if (local.mutable || local.boxed || local.type.kind !== "f64")
|
|
316
|
+
continue;
|
|
317
|
+
const list = writes.get(local.id);
|
|
318
|
+
if (list?.length !== 1)
|
|
319
|
+
continue;
|
|
320
|
+
const write = list[0];
|
|
321
|
+
if (write.node.kind !== "varDecl" || write.value?.kind !== "numLit")
|
|
322
|
+
continue;
|
|
323
|
+
literals.set(local.id, write.value);
|
|
324
|
+
}
|
|
325
|
+
if (!literals.size)
|
|
326
|
+
return current;
|
|
327
|
+
current = transformStmtList(current, {
|
|
328
|
+
expr: (node) => {
|
|
329
|
+
if (node.kind !== "varRef")
|
|
330
|
+
return node;
|
|
331
|
+
const literal = literals.get(node.localId);
|
|
332
|
+
return literal === undefined ? node : { ...literal, loc: node.loc };
|
|
333
|
+
},
|
|
334
|
+
stmt: (statement) => statement,
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
return current;
|
|
338
|
+
}
|
|
339
|
+
/** A clone of `origin` in which array parameter `paramIndex` holds an array
|
|
340
|
+
* of exactly `length` present elements: every element-count read of the
|
|
341
|
+
* parameter is the length itself, and constant locals that copy one fold to
|
|
342
|
+
* it. Null when the body reads no element count of the parameter. */
|
|
343
|
+
function buildClone(origin, paramIndex, length) {
|
|
344
|
+
const param = origin.params[paramIndex];
|
|
345
|
+
const folded = foldLengthReads(origin.body, param.localId, length);
|
|
346
|
+
if (folded === null)
|
|
347
|
+
return null;
|
|
348
|
+
// The clone is reached by direct calls only, so it never surfaces as a
|
|
349
|
+
// function value and owns no prototype of its own.
|
|
350
|
+
const { ownsPrototype: _ownsPrototype, ...implementation } = origin;
|
|
351
|
+
return {
|
|
352
|
+
...implementation,
|
|
353
|
+
name: "",
|
|
354
|
+
params: origin.params.map((candidate, index) => index === paramIndex ? { ...candidate, constLength: length } : candidate),
|
|
355
|
+
body: foldConstantLocals(origin, folded),
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
/** Direct calls whose array argument is an array of one statically known
|
|
359
|
+
* length call a clone of the callee in which that parameter carries the
|
|
360
|
+
* length: an element-count read of the parameter is the length itself, any
|
|
361
|
+
* element index proven in range names a present slot, and constant locals that
|
|
362
|
+
* copy the length fold to it.
|
|
363
|
+
*
|
|
364
|
+
* A callee qualifies when an array parameter, and every local that holds the
|
|
365
|
+
* same array, is used only through element reads, presence tests,
|
|
366
|
+
* element-count reads and searches, `for…of` iteration and calls to callees
|
|
367
|
+
* whose matching parameter is proven the same way — never resized, stored,
|
|
368
|
+
* returned, compared, captured or spread — and the callee is an ordinary
|
|
369
|
+
* function of at most MAX_FUNCTION_NODES nodes with no captures. An argument
|
|
370
|
+
* qualifies when it is an array literal, a read-only local with one definition
|
|
371
|
+
* from one, or an immutable global with one such definition that no other code
|
|
372
|
+
* writes and no closure captures. The length and the hole-free prefix then
|
|
373
|
+
* never change between the call and any use inside it, so the clone needs no
|
|
374
|
+
* runtime test. Only calls inside a loop specialize: the fold pays on every
|
|
375
|
+
* pass of the callee, not once at a call that runs a single time.
|
|
376
|
+
*
|
|
377
|
+
* Code growth is bounded: at most MAX_CLONES_PER_FUNCTION clones per function
|
|
378
|
+
* and MIN_CLONED_NODES (or CLONED_NODE_FRACTION of the module) of cloned
|
|
379
|
+
* nodes module-wide. `symbolName` spells names after mangling, and `index`,
|
|
380
|
+
* an index of `mod`, gives node counts without walking bodies. */
|
|
381
|
+
export function specializeConstantArrayLengths(mod, symbolName = (name) => name, index) {
|
|
382
|
+
if (mod.lib)
|
|
383
|
+
return mod;
|
|
384
|
+
const functions = new Map(mod.functions.map((fn) => [fn.name, fn]));
|
|
385
|
+
const globals = new Map((mod.globals ?? []).map((global) => [global.id, global]));
|
|
386
|
+
const names = new Set(mod.functions.map((fn) => symbolName(fn.name)));
|
|
387
|
+
let moduleNodes = 0;
|
|
388
|
+
for (const fn of mod.functions)
|
|
389
|
+
moduleNodes += countNodes(fn, index);
|
|
390
|
+
let budget = Math.max(MIN_CLONED_NODES, moduleNodes * CLONED_NODE_FRACTION);
|
|
391
|
+
const cloneCounts = new Map();
|
|
392
|
+
const clones = new Map();
|
|
393
|
+
const pending = [];
|
|
394
|
+
const readOnlyParams = new Map();
|
|
395
|
+
const proving = new Set();
|
|
396
|
+
const bindingLengths = new Map();
|
|
397
|
+
/** Whether `target` never writes parameter `paramIndex`, never lets it
|
|
398
|
+
* reach code that does, and never names it in a position that observes it. */
|
|
399
|
+
function paramReadOnly(target, paramIndex) {
|
|
400
|
+
const key = `${target.name}\0${paramIndex}`;
|
|
401
|
+
const known = readOnlyParams.get(key);
|
|
402
|
+
if (known !== undefined)
|
|
403
|
+
return known;
|
|
404
|
+
const param = target.params[paramIndex];
|
|
405
|
+
if (param === undefined || param.type.kind !== "array")
|
|
406
|
+
return false;
|
|
407
|
+
if (proving.has(key))
|
|
408
|
+
return false;
|
|
409
|
+
proving.add(key);
|
|
410
|
+
let result = false;
|
|
411
|
+
try {
|
|
412
|
+
const { holders, definitions } = arrayHolders(target, param.localId);
|
|
413
|
+
result =
|
|
414
|
+
(collectWrites([target.body]).get(param.localId) ?? []).length === 0 &&
|
|
415
|
+
usesReadOnly(target.body, holders, definitions, callAllowed);
|
|
416
|
+
}
|
|
417
|
+
finally {
|
|
418
|
+
proving.delete(key);
|
|
419
|
+
}
|
|
420
|
+
readOnlyParams.set(key, result);
|
|
421
|
+
return result;
|
|
422
|
+
}
|
|
423
|
+
/** Whether passing a holder of `id` at argument `argIndex` of `callee`
|
|
424
|
+
* keeps the array read-only. */
|
|
425
|
+
function callAllowed(callee, argIndex) {
|
|
426
|
+
const target = functions.get(callee);
|
|
427
|
+
if (!target)
|
|
428
|
+
return false;
|
|
429
|
+
return paramReadOnly(target, argIndex);
|
|
430
|
+
}
|
|
431
|
+
/** The length of the array `id` holds at every use, or null. */
|
|
432
|
+
function bindingLength(key, scope, id) {
|
|
433
|
+
const known = bindingLengths.get(key);
|
|
434
|
+
if (known !== undefined)
|
|
435
|
+
return known;
|
|
436
|
+
bindingLengths.set(key, null);
|
|
437
|
+
let result = null;
|
|
438
|
+
const writes = collectWrites(scope.map((fn) => fn.body)).get(id) ?? [];
|
|
439
|
+
if (writes.length === 1) {
|
|
440
|
+
const write = writes[0];
|
|
441
|
+
const value = write.value;
|
|
442
|
+
const defines = write.node.kind === "varDecl" || write.node.kind === "assign";
|
|
443
|
+
if (defines &&
|
|
444
|
+
value !== null &&
|
|
445
|
+
value.kind === "arrayLit" &&
|
|
446
|
+
value.spreads === undefined &&
|
|
447
|
+
value.elems.length > 0 &&
|
|
448
|
+
scope.every((fn) => {
|
|
449
|
+
const { holders, definitions } = arrayHolders(fn, id);
|
|
450
|
+
return usesReadOnly(fn.body, holders, new Set([...definitions, write.node]), callAllowed);
|
|
451
|
+
}))
|
|
452
|
+
result = value.elems.length;
|
|
453
|
+
}
|
|
454
|
+
bindingLengths.set(key, result);
|
|
455
|
+
return result;
|
|
456
|
+
}
|
|
457
|
+
/** The known length of the array `arg` holds, or null. */
|
|
458
|
+
function argumentLength(arg, caller) {
|
|
459
|
+
if (arg.kind === "arrayLit") {
|
|
460
|
+
if (arg.spreads !== undefined || arg.elems.length === 0)
|
|
461
|
+
return null;
|
|
462
|
+
return arg.elems.length;
|
|
463
|
+
}
|
|
464
|
+
if (arg.kind !== "varRef")
|
|
465
|
+
return null;
|
|
466
|
+
const id = arg.localId;
|
|
467
|
+
const param = caller.params.find((candidate) => candidate.localId === id);
|
|
468
|
+
if (param?.constLength !== undefined)
|
|
469
|
+
return param.constLength;
|
|
470
|
+
const local = caller.locals.find((candidate) => candidate.id === id);
|
|
471
|
+
if (local !== undefined) {
|
|
472
|
+
if (local.mutable || local.boxed)
|
|
473
|
+
return null;
|
|
474
|
+
return bindingLength(`local\0${caller.name}\0${id}`, [caller], id);
|
|
475
|
+
}
|
|
476
|
+
const global = globals.get(id);
|
|
477
|
+
if (global === undefined)
|
|
478
|
+
return null;
|
|
479
|
+
if (global.mutable || global.tdz === true || global.initFlag !== undefined)
|
|
480
|
+
return null;
|
|
481
|
+
return bindingLength(`global\0${id}`, mod.functions, id);
|
|
482
|
+
}
|
|
483
|
+
/** Whether the body reads the element count of parameter `id`, the read a
|
|
484
|
+
* clone folds. */
|
|
485
|
+
function readsLength(fn, id) {
|
|
486
|
+
let found = false;
|
|
487
|
+
everyStmtList(fn.body, {
|
|
488
|
+
stmt: () => true,
|
|
489
|
+
expr: (node) => {
|
|
490
|
+
if (node.kind === "arrIntrinsic" &&
|
|
491
|
+
node.method === "length" &&
|
|
492
|
+
node.receiver.kind === "varRef" &&
|
|
493
|
+
node.receiver.localId === id)
|
|
494
|
+
found = true;
|
|
495
|
+
return true;
|
|
496
|
+
},
|
|
497
|
+
});
|
|
498
|
+
return found;
|
|
499
|
+
}
|
|
500
|
+
function cloneFor(target, paramIndex, length) {
|
|
501
|
+
const key = `${target.name}\0${paramIndex}\0${length}`;
|
|
502
|
+
const known = clones.get(key);
|
|
503
|
+
if (known !== undefined)
|
|
504
|
+
return known;
|
|
505
|
+
let clone = null;
|
|
506
|
+
const count = cloneCounts.get(target.name) ?? 0;
|
|
507
|
+
if (count < MAX_CLONES_PER_FUNCTION &&
|
|
508
|
+
target !== functions.get(mod.entry) &&
|
|
509
|
+
!target.async &&
|
|
510
|
+
target.generator === undefined &&
|
|
511
|
+
target.captures === undefined &&
|
|
512
|
+
!target.classCaptures?.length &&
|
|
513
|
+
!target.fastRead &&
|
|
514
|
+
!target.speculativeDispatch) {
|
|
515
|
+
const candidate = buildClone(target, paramIndex, length);
|
|
516
|
+
if (candidate !== null) {
|
|
517
|
+
const size = countNodes(candidate, index);
|
|
518
|
+
if (size <= MAX_FUNCTION_NODES && size <= budget) {
|
|
519
|
+
budget -= size;
|
|
520
|
+
let name = `${target.name}.constLen`;
|
|
521
|
+
while (names.has(symbolName(name)))
|
|
522
|
+
name += "_";
|
|
523
|
+
names.add(symbolName(name));
|
|
524
|
+
clone = { ...candidate, name };
|
|
525
|
+
cloneCounts.set(target.name, count + 1);
|
|
526
|
+
functions.set(name, clone);
|
|
527
|
+
pending.push(clone);
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
clones.set(key, clone);
|
|
532
|
+
return clone;
|
|
533
|
+
}
|
|
534
|
+
/** The call with each qualifying array argument passing a clone of its
|
|
535
|
+
* callee, or the call unchanged. */
|
|
536
|
+
function specializeCall(call, caller) {
|
|
537
|
+
const target = functions.get(call.callee);
|
|
538
|
+
if (!target)
|
|
539
|
+
return call;
|
|
540
|
+
for (let paramIndex = 0; paramIndex < target.params.length; paramIndex++) {
|
|
541
|
+
const param = target.params[paramIndex];
|
|
542
|
+
if (param.type.kind !== "array" || param.owned || param.constLength !== undefined)
|
|
543
|
+
continue;
|
|
544
|
+
const arg = call.args[paramIndex];
|
|
545
|
+
if (arg === undefined)
|
|
546
|
+
continue;
|
|
547
|
+
const length = argumentLength(arg, caller);
|
|
548
|
+
if (length === null)
|
|
549
|
+
continue;
|
|
550
|
+
if (!readsLength(target, param.localId) || !paramReadOnly(target, paramIndex))
|
|
551
|
+
continue;
|
|
552
|
+
const clone = cloneFor(target, paramIndex, length);
|
|
553
|
+
if (clone === null)
|
|
554
|
+
continue;
|
|
555
|
+
return { ...call, callee: clone.name };
|
|
556
|
+
}
|
|
557
|
+
return call;
|
|
558
|
+
}
|
|
559
|
+
function rewriteFunction(fn) {
|
|
560
|
+
const candidates = [];
|
|
561
|
+
const looped = callsInLoops(fn);
|
|
562
|
+
everyStmtList(fn.body, {
|
|
563
|
+
stmt: () => true,
|
|
564
|
+
expr: (node) => {
|
|
565
|
+
if (node.kind === "call" && looped.has(node) && specializeCall(node, fn) !== node)
|
|
566
|
+
candidates.push(node);
|
|
567
|
+
return true;
|
|
568
|
+
},
|
|
569
|
+
});
|
|
570
|
+
if (!candidates.length)
|
|
571
|
+
return fn;
|
|
572
|
+
const byNode = new Map();
|
|
573
|
+
for (const call of candidates)
|
|
574
|
+
byNode.set(call, specializeCall(call, fn));
|
|
575
|
+
const body = transformStmtList(fn.body, {
|
|
576
|
+
expr: (node) => byNode.get(node) ?? node,
|
|
577
|
+
stmt: (statement) => statement,
|
|
578
|
+
});
|
|
579
|
+
return { ...fn, body };
|
|
580
|
+
}
|
|
581
|
+
const rewritten = mod.functions.map(rewriteFunction);
|
|
582
|
+
const additions = [];
|
|
583
|
+
for (let position = 0; position < pending.length; position++)
|
|
584
|
+
additions.push(rewriteFunction(pending[position]));
|
|
585
|
+
if (!additions.length)
|
|
586
|
+
return mod;
|
|
587
|
+
return { ...mod, functions: [...rewritten, ...additions] };
|
|
588
|
+
}
|
|
589
|
+
//# sourceMappingURL=constant-length-clones.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constant-length-clones.js","sourceRoot":"","sources":["../../src/ir/constant-length-clones.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|