@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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { recordToEnvPairs } from "./environment.js";
|
|
2
|
-
import { boolLit, numLit, strLit, varRef } from "../../../ir/build.js";
|
|
2
|
+
import { boolLit, nodeThrowExpr, numLit, strLit, varRef } from "../../../ir/build.js";
|
|
3
3
|
import { keyedHelperName } from "../stable-names.js";
|
|
4
4
|
import { InternalCompilerError } from "../../../errors.js";
|
|
5
5
|
import { resolve } from "node:path";
|
|
@@ -141,12 +141,12 @@ export function lowerSpawnSyncCall(lowerer, expr, loc) {
|
|
|
141
141
|
if (!ts.isObjectLiteralExpression(optsNode)) {
|
|
142
142
|
const runtime = lowerSpawnSyncRuntimeOptions(lowerer, optsNode, expr.arguments.nodes[1], loc);
|
|
143
143
|
if (runtime) {
|
|
144
|
-
|
|
144
|
+
const call = (fn, extra, callCmd = cmd, callArgs = argv) => ({
|
|
145
145
|
kind: "libCall",
|
|
146
|
-
fn
|
|
146
|
+
fn,
|
|
147
147
|
args: [
|
|
148
|
-
|
|
149
|
-
|
|
148
|
+
callCmd,
|
|
149
|
+
callArgs,
|
|
150
150
|
runtime.timeout,
|
|
151
151
|
killSignal,
|
|
152
152
|
runtime.inMode,
|
|
@@ -156,12 +156,44 @@ export function lowerSpawnSyncCall(lowerer, expr, loc) {
|
|
|
156
156
|
runtime.input,
|
|
157
157
|
runtime.hasInput,
|
|
158
158
|
runtime.shell,
|
|
159
|
+
...extra,
|
|
159
160
|
],
|
|
160
161
|
type: SPAWNRES_T,
|
|
161
162
|
loc,
|
|
162
|
-
};
|
|
163
|
+
});
|
|
164
|
+
// An absent `env` inherits our environment; a present one replaces
|
|
165
|
+
// it. The two entry points differ only in that argument, so the
|
|
166
|
+
// member's presence test picks one at the call. Node evaluates the
|
|
167
|
+
// command and its arguments before it reads the options record, so
|
|
168
|
+
// both go into hidden locals the presence test follows: a command
|
|
169
|
+
// that adds or drops `env` in the record decides the entry point,
|
|
170
|
+
// as it does under Node.
|
|
171
|
+
if (runtime.hasEnv !== null && runtime.envPairs !== null) {
|
|
172
|
+
const cmdLocal = lowerer.declareHiddenLocal("%spawnSyncCmd", cmd.type);
|
|
173
|
+
const argvLocal = lowerer.declareHiddenLocal("%spawnSyncArgs", argv.type);
|
|
174
|
+
const cmdArg = varRef(cmdLocal.id, cmd.type, loc);
|
|
175
|
+
const argvArg = varRef(argvLocal.id, argv.type, loc);
|
|
176
|
+
return {
|
|
177
|
+
kind: "seqExpr",
|
|
178
|
+
stmts: [
|
|
179
|
+
{ kind: "varDecl", localId: cmdLocal.id, init: cmd, loc },
|
|
180
|
+
{ kind: "varDecl", localId: argvLocal.id, init: argv, loc },
|
|
181
|
+
],
|
|
182
|
+
result: {
|
|
183
|
+
kind: "ternary",
|
|
184
|
+
cond: runtime.hasEnv,
|
|
185
|
+
then: call("cp.spawnSyncExtEnv", [runtime.envPairs], cmdArg, argvArg),
|
|
186
|
+
else_: call("cp.spawnSyncExt", [], cmdArg, argvArg),
|
|
187
|
+
type: SPAWNRES_T,
|
|
188
|
+
loc,
|
|
189
|
+
},
|
|
190
|
+
type: SPAWNRES_T,
|
|
191
|
+
loc,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
return call("cp.spawnSyncExt", []);
|
|
163
195
|
}
|
|
164
|
-
lowerer.noLowering("spawnSync with a non-literal options argument", optsNode, "pass the options inline so each member can be checked, or give them the SpawnSyncOptionsWithStringEncoding type (
|
|
196
|
+
lowerer.noLowering("spawnSync with a non-literal options argument", optsNode, "pass the options inline so each member can be checked, or give them the SpawnSyncOptionsWithStringEncoding type (killSignal stays literal)");
|
|
165
197
|
}
|
|
166
198
|
const applyStdio = (node) => {
|
|
167
199
|
const modeOf = (v, fd) => {
|
|
@@ -462,7 +494,7 @@ function lowerSpawnSyncRuntimeOptions(lowerer, optsNode, argsNode, loc) {
|
|
|
462
494
|
const shapeId = opts.type.shapeId;
|
|
463
495
|
const shape = lowerer.shapes.get(shapeId);
|
|
464
496
|
const names = shape?.fields.map((f) => f.name).join(",");
|
|
465
|
-
if (names !== "cwd,encoding,input,shell,stdio,timeout,windowsHide")
|
|
497
|
+
if (names !== "cwd,encoding,env,input,shell,stdio,timeout,windowsHide")
|
|
466
498
|
return null;
|
|
467
499
|
if (opts.kind !== "varRef" && opts.kind !== "recordGet" && opts.kind !== "fieldGet") {
|
|
468
500
|
lowerer.noLowering("spawnSync with a computed options argument", optsNode, "the member reads re-read the options — bind the object to a const first");
|
|
@@ -526,6 +558,64 @@ function lowerSpawnSyncRuntimeOptions(lowerer, optsNode, argsNode, loc) {
|
|
|
526
558
|
loc,
|
|
527
559
|
}
|
|
528
560
|
: boolLit(true, loc);
|
|
561
|
+
// The `env` member replaces the child's environment. Presence rides
|
|
562
|
+
// apart from the value (an absent option inherits ours): only the
|
|
563
|
+
// present branch converts the record to pairs.
|
|
564
|
+
const envField = shape.fields.find((f) => f.name === "env");
|
|
565
|
+
let hasEnv = null;
|
|
566
|
+
let envPairs = null;
|
|
567
|
+
if (envField) {
|
|
568
|
+
const ft = envField.type;
|
|
569
|
+
const readEnv = { kind: "recordGet", obj: opts, shapeId, field: "env", type: ft, loc };
|
|
570
|
+
const pairsOf = (rec, value) => {
|
|
571
|
+
if (rec.kind !== "record")
|
|
572
|
+
return null;
|
|
573
|
+
const helper = lowerer.envToPairsHelper(rec.shapeId, loc);
|
|
574
|
+
return helper === null
|
|
575
|
+
? null
|
|
576
|
+
: { kind: "call", callee: helper, args: [value], type: arrayOf(STRING), loc };
|
|
577
|
+
};
|
|
578
|
+
if (ft.kind === "union") {
|
|
579
|
+
const arms = lowerer.unions.get(ft.unionId)?.arms ?? [];
|
|
580
|
+
let rec = null;
|
|
581
|
+
for (const arm of arms) {
|
|
582
|
+
if (arm.kind === "record") {
|
|
583
|
+
rec = arm;
|
|
584
|
+
break;
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
const uTag = lowerer.armTag(ft.unionId, UNDEFINED_T);
|
|
588
|
+
if (rec !== null && uTag >= 0) {
|
|
589
|
+
hasEnv = {
|
|
590
|
+
kind: "unionIsTag",
|
|
591
|
+
unionId: ft.unionId,
|
|
592
|
+
tag: uTag,
|
|
593
|
+
negated: true,
|
|
594
|
+
value: readEnv,
|
|
595
|
+
type: BOOL,
|
|
596
|
+
loc,
|
|
597
|
+
};
|
|
598
|
+
envPairs = pairsOf(rec, {
|
|
599
|
+
kind: "unionNarrow",
|
|
600
|
+
unionId: ft.unionId,
|
|
601
|
+
tag: lowerer.armTag(ft.unionId, rec),
|
|
602
|
+
value: readEnv,
|
|
603
|
+
type: rec,
|
|
604
|
+
loc,
|
|
605
|
+
});
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
else if (ft.kind === "record") {
|
|
609
|
+
hasEnv = boolLit(true, loc);
|
|
610
|
+
envPairs = pairsOf(ft, readEnv);
|
|
611
|
+
}
|
|
612
|
+
// A member that exists but cannot convert must not fall back to the
|
|
613
|
+
// inheriting entry point: that would silently run the child WITHOUT
|
|
614
|
+
// the environment the caller asked for.
|
|
615
|
+
if (hasEnv === null || envPairs === null) {
|
|
616
|
+
lowerer.noLowering("spawnSync with an unsupported `env` record", optsNode, "every env value must be a string or `string | undefined` — the replacement environment converts to [key, value] pairs");
|
|
617
|
+
}
|
|
618
|
+
}
|
|
529
619
|
return {
|
|
530
620
|
cwd: readOpt("cwd", emptyStr, STRING),
|
|
531
621
|
input: readOpt("input", emptyStr, STRING),
|
|
@@ -549,6 +639,8 @@ function lowerSpawnSyncRuntimeOptions(lowerer, optsNode, argsNode, loc) {
|
|
|
549
639
|
inMode,
|
|
550
640
|
outMode: modeCall(1),
|
|
551
641
|
errMode: modeCall(2),
|
|
642
|
+
hasEnv,
|
|
643
|
+
envPairs,
|
|
552
644
|
};
|
|
553
645
|
}
|
|
554
646
|
/** Interned `%cp.spawnSyncStdioMode.<fd>` — the runtime stdio-mode
|
|
@@ -716,20 +808,83 @@ function spawnSyncStdioModeHelper(lowerer, shapeId, stdioT, fd, loc) {
|
|
|
716
808
|
});
|
|
717
809
|
return name;
|
|
718
810
|
}
|
|
811
|
+
/** A runtime stdio SLOT expression whose TYPE is a union of the supported
|
|
812
|
+
* literals (`useStdin ? "pipe" : "ignore"`): the expression evaluates once
|
|
813
|
+
* into a hidden local, and a strEq chain maps the value to its mode (0
|
|
814
|
+
* ignore, 1 inherit, 3 pipe). The type proves the value is one of them; a
|
|
815
|
+
* lying assertion lands on the runtime TypeError Node raises for an
|
|
816
|
+
* invalid stdio value. Null for anything else — the literal and fd paths,
|
|
817
|
+
* and the fences, stay where they are. */
|
|
818
|
+
function stdioModeExpr(lowerer, el, t, which) {
|
|
819
|
+
const parts = t.isUnionType() ? ts.constituentTypes(t) : [t];
|
|
820
|
+
if (parts.length < 2)
|
|
821
|
+
return null;
|
|
822
|
+
let hasPipe = false;
|
|
823
|
+
let hasInherit = false;
|
|
824
|
+
let hasIgnore = false;
|
|
825
|
+
for (const part of parts) {
|
|
826
|
+
if (!part.isStringLiteralType())
|
|
827
|
+
return null;
|
|
828
|
+
const literal = part.value;
|
|
829
|
+
if (literal === "pipe")
|
|
830
|
+
hasPipe = true;
|
|
831
|
+
else if (literal === "inherit")
|
|
832
|
+
hasInherit = true;
|
|
833
|
+
else if (literal === "ignore")
|
|
834
|
+
hasIgnore = true;
|
|
835
|
+
else
|
|
836
|
+
return null;
|
|
837
|
+
}
|
|
838
|
+
const slotLoc = locOf(el);
|
|
839
|
+
const value = lowerer.lowerExprExpecting(el, STRING);
|
|
840
|
+
const local = lowerer.declareHiddenLocal(`stdio${which}`, STRING);
|
|
841
|
+
local.mutable = true;
|
|
842
|
+
const read = () => varRef(local.id, STRING, slotLoc);
|
|
843
|
+
const withMode = (name, m, next) => ({
|
|
844
|
+
kind: "ternary",
|
|
845
|
+
cond: {
|
|
846
|
+
kind: "strEq",
|
|
847
|
+
negated: false,
|
|
848
|
+
left: read(),
|
|
849
|
+
right: strLit(name, slotLoc),
|
|
850
|
+
type: BOOL,
|
|
851
|
+
loc: slotLoc,
|
|
852
|
+
},
|
|
853
|
+
then: numLit(m, slotLoc),
|
|
854
|
+
else_: next,
|
|
855
|
+
type: F64,
|
|
856
|
+
loc: slotLoc,
|
|
857
|
+
});
|
|
858
|
+
let mode = nodeThrowExpr(1, "ERR_INVALID_ARG_VALUE", 'spawn stdio must be "pipe", "ignore", or "inherit"', F64, slotLoc);
|
|
859
|
+
if (hasPipe)
|
|
860
|
+
mode = withMode("pipe", 3, mode);
|
|
861
|
+
if (hasInherit)
|
|
862
|
+
mode = withMode("inherit", 1, mode);
|
|
863
|
+
if (hasIgnore)
|
|
864
|
+
mode = withMode("ignore", 0, mode);
|
|
865
|
+
return {
|
|
866
|
+
kind: "seqExpr",
|
|
867
|
+
stmts: [{ kind: "assign", localId: local.id, value, loc: slotLoc }],
|
|
868
|
+
result: mode,
|
|
869
|
+
type: F64,
|
|
870
|
+
loc: slotLoc,
|
|
871
|
+
};
|
|
872
|
+
}
|
|
719
873
|
/** `spawn(command, args?, options)` → one cp.spawn / cp.spawnOpts
|
|
720
874
|
* libCall. Computed options use native runtime normalization. Inline
|
|
721
|
-
* stdio accepts "ignore", "inherit", or "pipe" as the scalar,
|
|
722
|
-
*
|
|
723
|
-
*
|
|
724
|
-
*
|
|
725
|
-
*
|
|
726
|
-
*
|
|
727
|
-
*
|
|
875
|
+
* stdio accepts "ignore", "inherit", or "pipe" as the scalar, or the
|
|
876
|
+
* 3-tuple whose stdin pipe becomes child.stdin, stdout/stderr pipes
|
|
877
|
+
* become child.stdout/child.stderr, and output slots may also be number
|
|
878
|
+
* fds; a 3-tuple slot whose type is a union of those literals
|
|
879
|
+
* (`useStdin ? "pipe" : "ignore"`) evaluates once and maps to its mode
|
|
880
|
+
* at the call. Omitting stdio uses Node's default: all three piped. The
|
|
881
|
+
* other lowered members: `detached` (a boolean literal, inline or carried
|
|
882
|
+
* by the conditional spread `...(c ? { detached: true } : {})` in either
|
|
728
883
|
* orientation — POSIX_SPAWN_SETSID, the child gets its own session and
|
|
729
|
-
* process group like Node's), `env` (a
|
|
730
|
-
*
|
|
731
|
-
*
|
|
732
|
-
*
|
|
884
|
+
* process group like Node's), `env` (a REPLACEMENT environment, the
|
|
885
|
+
* exec-core pairs machinery), `cwd`, and `windowsHide` (a POSIX no-op).
|
|
886
|
+
* The bare `{ stdio: "ignore" }` shape keeps its historical cp.spawn
|
|
887
|
+
* lowering. */
|
|
733
888
|
export function lowerSpawnCall(lowerer, expr, loc) {
|
|
734
889
|
if (expr.arguments.nodes.length > 3 || expr.arguments.nodes.some(ts.isSpreadElement)) {
|
|
735
890
|
lowerer.noLowering("spawn with this argument shape", expr, 'the supported form is spawn(command, args?, { stdio: "pipe" | "ignore" | "inherit", detached?, env?, cwd? })');
|
|
@@ -770,7 +925,11 @@ export function lowerSpawnCall(lowerer, expr, loc) {
|
|
|
770
925
|
// the out/err fd expressions for mode 2 (the daemon-log idiom:
|
|
771
926
|
// stdio: ["ignore", logFd, logFd]).
|
|
772
927
|
let sawStdio = false;
|
|
773
|
-
|
|
928
|
+
// A slot may be a runtime expression (a union of the three literals), so
|
|
929
|
+
// each mode is an IrExpr: a literal here, the mapped expression there.
|
|
930
|
+
let inMode = numLit(0, loc);
|
|
931
|
+
let outMode = numLit(0, loc);
|
|
932
|
+
let errMode = numLit(0, loc);
|
|
774
933
|
let outFd = numLit(0, loc);
|
|
775
934
|
let errFd = numLit(0, loc);
|
|
776
935
|
let detached = boolLit(false, loc);
|
|
@@ -780,6 +939,19 @@ export function lowerSpawnCall(lowerer, expr, loc) {
|
|
|
780
939
|
let envPairs = { kind: "arrayLit", elems: [], type: arrayOf(STRING), loc };
|
|
781
940
|
let cwd = emptyStr;
|
|
782
941
|
let plain = true; // exactly { stdio: "ignore" }: the historical libCall
|
|
942
|
+
// Node evaluates the command, then the arguments, then the options
|
|
943
|
+
// object's members in source order. A member value that needs a hidden
|
|
944
|
+
// local is bound in that order, so a side effect in an earlier member (a
|
|
945
|
+
// call, an assignment) shapes a later one as it does under Node.
|
|
946
|
+
const valuePrelude = [];
|
|
947
|
+
const bindInto = (stmts, name, value) => {
|
|
948
|
+
if (value.kind === "strLit" || value.kind === "numLit" || value.kind === "boolLit")
|
|
949
|
+
return value;
|
|
950
|
+
const local = lowerer.declareHiddenLocal(name, value.type);
|
|
951
|
+
stmts.push({ kind: "varDecl", localId: local.id, init: value, loc });
|
|
952
|
+
return varRef(local.id, value.type, loc);
|
|
953
|
+
};
|
|
954
|
+
const bind = (name, value) => bindInto(valuePrelude, name, value);
|
|
783
955
|
if (optsNode && ts.isObjectLiteralExpression(optsNode)) {
|
|
784
956
|
for (const p of optsNode.properties.nodes) {
|
|
785
957
|
// The conditional-spread idiom `...(isWindows ? {} : { detached:
|
|
@@ -802,14 +974,14 @@ export function lowerSpawnCall(lowerer, expr, loc) {
|
|
|
802
974
|
: null;
|
|
803
975
|
if (lit !== null) {
|
|
804
976
|
const cond = lowerer.lowerCondition(cs.cond);
|
|
805
|
-
detached = {
|
|
977
|
+
detached = bind("%spawnDetached", {
|
|
806
978
|
kind: "ternary",
|
|
807
979
|
cond,
|
|
808
980
|
then: boolLit(cs.whenTrue ? lit : false, loc),
|
|
809
981
|
else_: boolLit(cs.whenTrue ? false : lit, loc),
|
|
810
982
|
type: BOOL,
|
|
811
983
|
loc,
|
|
812
|
-
};
|
|
984
|
+
});
|
|
813
985
|
plain = false;
|
|
814
986
|
continue;
|
|
815
987
|
}
|
|
@@ -825,6 +997,9 @@ export function lowerSpawnCall(lowerer, expr, loc) {
|
|
|
825
997
|
// The 3-tuple form: every slot accepts a literal, including
|
|
826
998
|
// "pipe" (child.stdin/stdout/stderr); stdout/stderr also accept
|
|
827
999
|
// a number-typed fd (an openSync result — dup2'd into the child).
|
|
1000
|
+
// A slot EXPRESSION whose type is a union of the three literals
|
|
1001
|
+
// (`useStdin ? "pipe" : "ignore"`) evaluates once into a hidden
|
|
1002
|
+
// local and maps to its mode at the call.
|
|
828
1003
|
if (ts.isArrayLiteralExpression(m.value) && m.value.elements.nodes.length === 3) {
|
|
829
1004
|
const slot = (el, which) => {
|
|
830
1005
|
const t = lowerer.typeOf(el);
|
|
@@ -832,7 +1007,7 @@ export function lowerSpawnCall(lowerer, expr, loc) {
|
|
|
832
1007
|
if (t.value !== "ignore" && t.value !== "inherit" && t.value !== "pipe") {
|
|
833
1008
|
lowerer.noLowering(`spawn with stdio "${t.value}"`, el, '"ignore", "inherit", "pipe", and number output fds are the supported stdio slots');
|
|
834
1009
|
}
|
|
835
|
-
const mode = t.value === "inherit" ? 1 : t.value === "pipe" ? 3 : 0;
|
|
1010
|
+
const mode = numLit(t.value === "inherit" ? 1 : t.value === "pipe" ? 3 : 0, loc);
|
|
836
1011
|
if (which === 0)
|
|
837
1012
|
inMode = mode;
|
|
838
1013
|
else if (which === 1)
|
|
@@ -843,19 +1018,31 @@ export function lowerSpawnCall(lowerer, expr, loc) {
|
|
|
843
1018
|
plain = false;
|
|
844
1019
|
return;
|
|
845
1020
|
}
|
|
1021
|
+
const runtimeMode = stdioModeExpr(lowerer, el, t, which);
|
|
1022
|
+
if (runtimeMode) {
|
|
1023
|
+
const mode = bind(`%spawnStdio${which}Mode`, runtimeMode);
|
|
1024
|
+
if (which === 0)
|
|
1025
|
+
inMode = mode;
|
|
1026
|
+
else if (which === 1)
|
|
1027
|
+
outMode = mode;
|
|
1028
|
+
else
|
|
1029
|
+
errMode = mode;
|
|
1030
|
+
plain = false;
|
|
1031
|
+
return;
|
|
1032
|
+
}
|
|
846
1033
|
if (which === 0) {
|
|
847
1034
|
lowerer.noLowering("spawn with this stdin slot", el, 'stdin takes "pipe", "ignore", or "inherit" (fd stdin has no lowering)');
|
|
848
1035
|
}
|
|
849
1036
|
if (lowerer.mapTypeOf(t)?.kind !== "f64") {
|
|
850
1037
|
lowerer.noLowering("spawn with this stdio option", el, 'each slot is "ignore", "inherit", or a number fd (an openSync result)');
|
|
851
1038
|
}
|
|
852
|
-
const fd = lowerer.lowerExprExpecting(el, F64);
|
|
1039
|
+
const fd = bind(which === 1 ? "%spawnStdoutFd" : "%spawnStderrFd", lowerer.lowerExprExpecting(el, F64));
|
|
853
1040
|
if (which === 1) {
|
|
854
|
-
outMode = 2;
|
|
1041
|
+
outMode = numLit(2, loc);
|
|
855
1042
|
outFd = fd;
|
|
856
1043
|
}
|
|
857
1044
|
else {
|
|
858
|
-
errMode = 2;
|
|
1045
|
+
errMode = numLit(2, loc);
|
|
859
1046
|
errFd = fd;
|
|
860
1047
|
}
|
|
861
1048
|
};
|
|
@@ -870,7 +1057,7 @@ export function lowerSpawnCall(lowerer, expr, loc) {
|
|
|
870
1057
|
lowerer.noLowering("spawn with this stdio option", m.value, '"pipe", "ignore", and "inherit" are the supported stdio literals ' +
|
|
871
1058
|
"(or a 3-tuple of those and number output fds)");
|
|
872
1059
|
}
|
|
873
|
-
const mode = v === "inherit" ? 1 : v === "pipe" ? 3 : 0;
|
|
1060
|
+
const mode = numLit(v === "inherit" ? 1 : v === "pipe" ? 3 : 0, loc);
|
|
874
1061
|
inMode = outMode = errMode = mode;
|
|
875
1062
|
sawStdio = true;
|
|
876
1063
|
if (v !== "ignore")
|
|
@@ -889,18 +1076,18 @@ export function lowerSpawnCall(lowerer, expr, loc) {
|
|
|
889
1076
|
// A runtime boolean — the portable daemon idiom `detached:
|
|
890
1077
|
// process.platform !== "win32"` — reaches the same
|
|
891
1078
|
// POSIX_SPAWN_SETSID flag through scr_spawn_opts's bool slot.
|
|
892
|
-
detached = lowerer.lowerExprExpecting(m.value, BOOL);
|
|
1079
|
+
detached = bind("%spawnDetached", lowerer.lowerExprExpecting(m.value, BOOL));
|
|
893
1080
|
plain = false;
|
|
894
1081
|
}
|
|
895
1082
|
break;
|
|
896
1083
|
}
|
|
897
1084
|
case "env":
|
|
898
1085
|
hasEnv = boolLit(true, loc);
|
|
899
|
-
envPairs = recordToEnvPairs(lowerer, m.value);
|
|
1086
|
+
envPairs = bind("%spawnEnv", recordToEnvPairs(lowerer, m.value));
|
|
900
1087
|
plain = false;
|
|
901
1088
|
break;
|
|
902
1089
|
case "cwd":
|
|
903
|
-
cwd = lowerer.lowerExprExpecting(m.value, STRING);
|
|
1090
|
+
cwd = bind("%spawnCwd", lowerer.lowerExprExpecting(m.value, STRING));
|
|
904
1091
|
plain = false;
|
|
905
1092
|
break;
|
|
906
1093
|
case "windowsHide":
|
|
@@ -925,7 +1112,7 @@ export function lowerSpawnCall(lowerer, expr, loc) {
|
|
|
925
1112
|
}
|
|
926
1113
|
}
|
|
927
1114
|
if (!sawStdio) {
|
|
928
|
-
inMode = outMode = errMode = 3;
|
|
1115
|
+
inMode = outMode = errMode = numLit(3, loc);
|
|
929
1116
|
plain = false;
|
|
930
1117
|
}
|
|
931
1118
|
// Node joins [command, ...args] with single spaces for the shell form, and
|
|
@@ -940,15 +1127,15 @@ export function lowerSpawnCall(lowerer, expr, loc) {
|
|
|
940
1127
|
if (plain) {
|
|
941
1128
|
return { kind: "libCall", fn: "cp.spawn", args: [cmd, argv], type: CHILD_T, loc };
|
|
942
1129
|
}
|
|
943
|
-
|
|
1130
|
+
const callOf = (callCmd, callArgs) => ({
|
|
944
1131
|
kind: "libCall",
|
|
945
1132
|
fn: "cp.spawnOpts",
|
|
946
1133
|
args: [
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
1134
|
+
callCmd,
|
|
1135
|
+
callArgs,
|
|
1136
|
+
inMode,
|
|
1137
|
+
outMode,
|
|
1138
|
+
errMode,
|
|
952
1139
|
outFd,
|
|
953
1140
|
errFd,
|
|
954
1141
|
detached,
|
|
@@ -959,7 +1146,17 @@ export function lowerSpawnCall(lowerer, expr, loc) {
|
|
|
959
1146
|
],
|
|
960
1147
|
type: CHILD_T,
|
|
961
1148
|
loc,
|
|
962
|
-
};
|
|
1149
|
+
});
|
|
1150
|
+
if (valuePrelude.length === 0)
|
|
1151
|
+
return callOf(cmd, argv);
|
|
1152
|
+
// The bound member values were collected in source order; the command and
|
|
1153
|
+
// the arguments precede them, so an earlier value that changes a later
|
|
1154
|
+
// one's input is seen as in Node.
|
|
1155
|
+
const stmts = [];
|
|
1156
|
+
const callCmd = bindInto(stmts, "%spawnCmd", cmd);
|
|
1157
|
+
const callArgs = bindInto(stmts, "%spawnArgs", argv);
|
|
1158
|
+
stmts.push(...valuePrelude);
|
|
1159
|
+
return { kind: "seqExpr", stmts, result: callOf(callCmd, callArgs), type: CHILD_T, loc };
|
|
963
1160
|
}
|
|
964
1161
|
/** `fork(staticModulePath, args?, options?)` embeds the selected program
|
|
965
1162
|
* module and re-executes the native artifact with one private target id.
|