@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
|
@@ -899,6 +899,44 @@ export function recordOvfCapturePlan(lowerer, fromId, toId) {
|
|
|
899
899
|
* index-signature record arm) builds this same helper through
|
|
900
900
|
* recordOvfCapturePlan. */
|
|
901
901
|
export function lowerRecordOvfCaptureHelper(lowerer, fromId, toId, loc) {
|
|
902
|
+
return buildRecordCaptureHelper(lowerer, fromId, toId, loc, {
|
|
903
|
+
key: `ovf:${fromId}:${toId}`,
|
|
904
|
+
namePrefix: "%rec.capture",
|
|
905
|
+
excluded: EMPTY_CAPTURE_EXCLUSION,
|
|
906
|
+
propagateNullProto: true,
|
|
907
|
+
keepSourceTail: true,
|
|
908
|
+
});
|
|
909
|
+
}
|
|
910
|
+
/** Interned `%rec.rest.<n>(s)` — the fresh object `const { a, x, ...rest } =
|
|
911
|
+
* s` binds over an INDEX-SIGNATURE source (or into an index-signature rest
|
|
912
|
+
* type): the capture reshape with an explicit EXCLUSION set, which is the
|
|
913
|
+
* one thing JavaScript's CopyDataProperties does differently from a plain
|
|
914
|
+
* reshape. Declared target fields the two shapes share are direct-copied
|
|
915
|
+
* (presence kept), every other source declared field is keyed-written in
|
|
916
|
+
* declaration order, and the source overflow is copied in JS own-key order
|
|
917
|
+
* — each skipping an excluded literal key. The result is always a fresh
|
|
918
|
+
* object with `Object.prototype` (a rest copy never inherits its source's
|
|
919
|
+
* null prototype), so `nullProto` is not propagated. Null when the pair is
|
|
920
|
+
* outside the matrix (recordOvfCapturePlan's gates), when the rest type
|
|
921
|
+
* declares an excluded name (never a rest type tsc produces), or when the
|
|
922
|
+
* source could keep an out-of-shape view that the field-by-field rebuild
|
|
923
|
+
* cannot see — the caller keeps its named fence for those. */
|
|
924
|
+
export function lowerRecordRestCaptureHelper(lowerer, fromId, toId, excluded, loc) {
|
|
925
|
+
const names = [...new Set(excluded)].sort();
|
|
926
|
+
return buildRecordCaptureHelper(lowerer, fromId, toId, loc, {
|
|
927
|
+
// The set is part of the key, spelled so that two DIFFERENT sets can
|
|
928
|
+
// never produce one spelling: a property name may hold a comma
|
|
929
|
+
// (`{ "a,b": x, ...rest }` beside `{ a, b, ...rest }`) or be empty,
|
|
930
|
+
// and either would join into the other set's text.
|
|
931
|
+
key: `rest:${fromId}:${toId}:${JSON.stringify(names)}`,
|
|
932
|
+
namePrefix: "%rec.rest",
|
|
933
|
+
excluded: new Set(names),
|
|
934
|
+
propagateNullProto: false,
|
|
935
|
+
keepSourceTail: false,
|
|
936
|
+
});
|
|
937
|
+
}
|
|
938
|
+
const EMPTY_CAPTURE_EXCLUSION = new Set();
|
|
939
|
+
function buildRecordCaptureHelper(lowerer, fromId, toId, loc, opts) {
|
|
902
940
|
const plan = recordOvfCapturePlan(lowerer, fromId, toId);
|
|
903
941
|
if (!plan)
|
|
904
942
|
return null;
|
|
@@ -910,16 +948,28 @@ export function lowerRecordOvfCaptureHelper(lowerer, fromId, toId, loc) {
|
|
|
910
948
|
const tIv = to.indexValue;
|
|
911
949
|
if (tIv === undefined)
|
|
912
950
|
return null;
|
|
951
|
+
const { excluded, propagateNullProto } = opts;
|
|
952
|
+
if (excluded.size > 0 && to.fields.some((f) => excluded.has(f.name)))
|
|
953
|
+
return null;
|
|
954
|
+
// A rest reshape over a CLOSED source that can keep an out-of-shape view
|
|
955
|
+
// cannot see that view's keys, and the checked-conversion tail would
|
|
956
|
+
// carry the excluded ones back in — decline (the caller keeps its named
|
|
957
|
+
// fence).
|
|
958
|
+
if (!opts.keepSourceTail &&
|
|
959
|
+
fIv === null &&
|
|
960
|
+
recordMayKeepSource(lowerer, { kind: "record", shapeId: fromId }))
|
|
961
|
+
return null;
|
|
913
962
|
// The copy below writes the source's declared fields in order, so a
|
|
914
963
|
// program that reaches it observes that order (the plan itself is pure:
|
|
915
964
|
// a speculative widthLiftPlan call must not mark a shape observed).
|
|
916
965
|
lowerer.keyOrder.observed.add(from.id);
|
|
917
|
-
const {
|
|
918
|
-
const
|
|
966
|
+
const { fieldLifts, orderedFields, consumed } = plan;
|
|
967
|
+
const inits = excluded.size === 0 ? plan.inits : plan.inits.filter((d) => !excluded.has(d.name));
|
|
968
|
+
const key = opts.key;
|
|
919
969
|
const existing = lowerer.valueHelpers.get(key);
|
|
920
970
|
if (existing)
|
|
921
971
|
return existing;
|
|
922
|
-
const name = keyedHelperName(lowerer,
|
|
972
|
+
const name = keyedHelperName(lowerer, opts.namePrefix, key);
|
|
923
973
|
lowerer.valueHelpers.set(key, name);
|
|
924
974
|
const fromT = { kind: "record", shapeId: fromId };
|
|
925
975
|
const toT = { kind: "record", shapeId: toId };
|
|
@@ -940,7 +990,7 @@ export function lowerRecordOvfCaptureHelper(lowerer, fromId, toId, loc) {
|
|
|
940
990
|
field: d.name,
|
|
941
991
|
type: d.src,
|
|
942
992
|
loc,
|
|
943
|
-
}, to.fields.find((f) => f.name === d.name).type, loc), loc)
|
|
993
|
+
}, to.fields.find((f) => f.name === d.name).type, loc), loc, to.fields.find((f) => f.name === d.name))
|
|
944
994
|
: {
|
|
945
995
|
// No source property of this name: the field starts
|
|
946
996
|
// absent (an overflow write below can supply it).
|
|
@@ -955,7 +1005,7 @@ export function lowerRecordOvfCaptureHelper(lowerer, fromId, toId, loc) {
|
|
|
955
1005
|
};
|
|
956
1006
|
// The source and its reshape are one object in JavaScript, so a
|
|
957
1007
|
// null-prototype source (a match's groups, Object.groupBy) keeps it.
|
|
958
|
-
const init = nullProtoRecordShape(lowerer, fromT) && nullProtoRecordShape(lowerer, toT)
|
|
1008
|
+
const init = propagateNullProto && nullProtoRecordShape(lowerer, fromT) && nullProtoRecordShape(lowerer, toT)
|
|
959
1009
|
? {
|
|
960
1010
|
kind: "ternary",
|
|
961
1011
|
cond: recordNullProtoTest(sRef, fromId, loc),
|
|
@@ -970,7 +1020,7 @@ export function lowerRecordOvfCaptureHelper(lowerer, fromId, toId, loc) {
|
|
|
970
1020
|
// Source declared fields in declaration order, skipping unset
|
|
971
1021
|
// optionals (stance 37) and the direct-initialized (consumed) names.
|
|
972
1022
|
for (const ff of orderedFields) {
|
|
973
|
-
if (consumed.has(ff.name))
|
|
1023
|
+
if (consumed.has(ff.name) || excluded.has(ff.name))
|
|
974
1024
|
continue;
|
|
975
1025
|
const raw = {
|
|
976
1026
|
kind: "recordGet",
|
|
@@ -1005,10 +1055,43 @@ export function lowerRecordOvfCaptureHelper(lowerer, fromId, toId, loc) {
|
|
|
1005
1055
|
body.push(fieldStmt);
|
|
1006
1056
|
}
|
|
1007
1057
|
// The source overflow, in JS own-key order (only index-signature
|
|
1008
|
-
// sources carry one).
|
|
1058
|
+
// sources carry one). A rest reshape skips the excluded literal keys
|
|
1059
|
+
// here (a strEq chain against the key literal), which is what removes
|
|
1060
|
+
// the consumed entries from the fresh object.
|
|
1009
1061
|
const ksT = arrayOf(STRING);
|
|
1010
1062
|
if (fIv) {
|
|
1011
1063
|
const ovfLift = plan.ovfLift;
|
|
1064
|
+
const ovfWrite = {
|
|
1065
|
+
kind: "recordKeySet",
|
|
1066
|
+
obj: outRef,
|
|
1067
|
+
shapeId: toId,
|
|
1068
|
+
key: varRef("k.0", STRING, loc),
|
|
1069
|
+
value: intoSlot({
|
|
1070
|
+
kind: "recordKeyGet",
|
|
1071
|
+
obj: sRef,
|
|
1072
|
+
shapeId: fromId,
|
|
1073
|
+
key: varRef("k.0", STRING, loc),
|
|
1074
|
+
overflowOnly: true,
|
|
1075
|
+
type: fIv,
|
|
1076
|
+
loc,
|
|
1077
|
+
}, ovfLift),
|
|
1078
|
+
loc,
|
|
1079
|
+
};
|
|
1080
|
+
let notExcluded = null;
|
|
1081
|
+
for (const name of [...excluded].sort()) {
|
|
1082
|
+
const test = {
|
|
1083
|
+
kind: "strEq",
|
|
1084
|
+
negated: true,
|
|
1085
|
+
left: varRef("k.0", STRING, loc),
|
|
1086
|
+
right: { kind: "strLit", value: name, type: STRING, loc },
|
|
1087
|
+
type: BOOL,
|
|
1088
|
+
loc,
|
|
1089
|
+
};
|
|
1090
|
+
notExcluded =
|
|
1091
|
+
notExcluded === null
|
|
1092
|
+
? test
|
|
1093
|
+
: { kind: "logical", op: "&&", left: notExcluded, right: test, type: BOOL, loc };
|
|
1094
|
+
}
|
|
1012
1095
|
body.push({
|
|
1013
1096
|
kind: "varDecl",
|
|
1014
1097
|
localId: "ks.0",
|
|
@@ -1034,22 +1117,9 @@ export function lowerRecordOvfCaptureHelper(lowerer, fromId, toId, loc) {
|
|
|
1034
1117
|
},
|
|
1035
1118
|
loc,
|
|
1036
1119
|
},
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
shapeId: toId,
|
|
1041
|
-
key: varRef("k.0", STRING, loc),
|
|
1042
|
-
value: intoSlot({
|
|
1043
|
-
kind: "recordKeyGet",
|
|
1044
|
-
obj: sRef,
|
|
1045
|
-
shapeId: fromId,
|
|
1046
|
-
key: varRef("k.0", STRING, loc),
|
|
1047
|
-
overflowOnly: true,
|
|
1048
|
-
type: fIv,
|
|
1049
|
-
loc,
|
|
1050
|
-
}, ovfLift),
|
|
1051
|
-
loc,
|
|
1052
|
-
},
|
|
1120
|
+
notExcluded === null
|
|
1121
|
+
? ovfWrite
|
|
1122
|
+
: { kind: "if", cond: notExcluded, then: [ovfWrite], else_: null, loc },
|
|
1053
1123
|
]));
|
|
1054
1124
|
}
|
|
1055
1125
|
// A CLOSED source can still hold own keys its shape does not declare: a
|
|
@@ -1066,7 +1136,8 @@ export function lowerRecordOvfCaptureHelper(lowerer, fromId, toId, loc) {
|
|
|
1066
1136
|
// and the view can only exist if the program converts something into a
|
|
1067
1137
|
// closed record at all. Both facts are settled before the shape helpers
|
|
1068
1138
|
// finalize their bodies, so the tail is chosen there.
|
|
1069
|
-
const sourcedFromView =
|
|
1139
|
+
const sourcedFromView = opts.keepSourceTail &&
|
|
1140
|
+
fIv === null &&
|
|
1070
1141
|
recordMayKeepSource(lowerer, fromT) &&
|
|
1071
1142
|
canDynCheckTo(toT, (id) => lowerer.shapes.get(id), (id) => lowerer.unions.get(id));
|
|
1072
1143
|
body.push({ kind: "return", value: outRef, loc });
|
|
@@ -1168,9 +1239,28 @@ export function lowerObjectAssignIndexShape(lowerer, call) {
|
|
|
1168
1239
|
return "dyn";
|
|
1169
1240
|
return lowerer.widthLiftPlan(t, tIv);
|
|
1170
1241
|
};
|
|
1242
|
+
// A dyn source's values arrive untyped, so each one enters the target's
|
|
1243
|
+
// index-value slot through a CHECKED conversion: a value outside the
|
|
1244
|
+
// slot throws the catchable TypeError where JS stores it (SEMANTICS.md's
|
|
1245
|
+
// cast divergence, the same stance every dyn→typed conversion takes). A
|
|
1246
|
+
// runtime key can collide with a DECLARED target field, and the keyed
|
|
1247
|
+
// write stores a non-dyn value through such a slot unchecked — so those
|
|
1248
|
+
// fields must be the slot type (or, for a dyn slot, dyn-convertible).
|
|
1249
|
+
const dynSourceOpen = tIv.kind === "dyn"
|
|
1250
|
+
? to.fields.every((f) => lowerer.dynConvertible(f.type))
|
|
1251
|
+
: canDynCheckTo(tIv, (id) => lowerer.shapes.get(id), (id) => lowerer.unions.get(id)) && to.fields.every((f) => typeEquals(f.type, tIv));
|
|
1171
1252
|
const plans = [];
|
|
1172
1253
|
for (const argNode of call.arguments.nodes.slice(1)) {
|
|
1173
1254
|
const srcIr = lowerer.mapTypeOf(lowerer.typeOf(argNode));
|
|
1255
|
+
if (srcIr?.kind === "dyn") {
|
|
1256
|
+
// The target keeps its typed representation while the checker's
|
|
1257
|
+
// `T & U` answer for a dyn `U` is some other type, so only the
|
|
1258
|
+
// mutate-in-place spelling (result discarded) can be lowered.
|
|
1259
|
+
if (!discarded || !dynSourceOpen)
|
|
1260
|
+
return null;
|
|
1261
|
+
plans.push({ kind: "dyn" });
|
|
1262
|
+
continue;
|
|
1263
|
+
}
|
|
1174
1264
|
if (srcIr?.kind !== "record")
|
|
1175
1265
|
return null;
|
|
1176
1266
|
const from = lowerer.shapes.get(srcIr.shapeId);
|
|
@@ -1198,7 +1288,7 @@ export function lowerObjectAssignIndexShape(lowerer, call) {
|
|
|
1198
1288
|
if (ovfLift === null)
|
|
1199
1289
|
return null;
|
|
1200
1290
|
}
|
|
1201
|
-
plans.push({ fromId: srcIr.shapeId, fields, ovfLift });
|
|
1291
|
+
plans.push({ kind: "record", fromId: srcIr.shapeId, fields, ovfLift });
|
|
1202
1292
|
}
|
|
1203
1293
|
const helperFor = (plan) => {
|
|
1204
1294
|
const key = `assign:${targetIr.shapeId}:${plan.fromId}`;
|
|
@@ -1331,13 +1421,106 @@ export function lowerObjectAssignIndexShape(lowerer, call) {
|
|
|
1331
1421
|
lowerer.liftedFns.push(fn);
|
|
1332
1422
|
return name;
|
|
1333
1423
|
};
|
|
1424
|
+
/** Interned `%obj.assignDyn.<n>(t, s)` — the same keyed-write walk for a
|
|
1425
|
+
* source with no static shape: `Object.keys(s)` own-key order (what
|
|
1426
|
+
* `Object.assign` copies), each value read back through the key and
|
|
1427
|
+
* checked into the target's index-value slot by the keyed write. A
|
|
1428
|
+
* null/undefined source copies nothing, exactly JS's rule that
|
|
1429
|
+
* `Object.assign` SKIPS such sources (where `Object.keys` would throw). */
|
|
1430
|
+
const dynHelperFor = () => {
|
|
1431
|
+
const key = `assign:${targetIr.shapeId}:dyn`;
|
|
1432
|
+
const existing = lowerer.valueHelpers.get(key);
|
|
1433
|
+
if (existing)
|
|
1434
|
+
return existing;
|
|
1435
|
+
const name = keyedHelperName(lowerer, "%obj.assignDyn", key);
|
|
1436
|
+
lowerer.valueHelpers.set(key, name);
|
|
1437
|
+
const toT = { kind: "record", shapeId: targetIr.shapeId };
|
|
1438
|
+
const tRef = varRef("t.0", toT, loc);
|
|
1439
|
+
const sRef = varRef("s.0", DYN, loc);
|
|
1440
|
+
const ksT = arrayOf(STRING);
|
|
1441
|
+
const kRef = varRef("k.0", STRING, loc);
|
|
1442
|
+
const read = { kind: "dynKeyGet", key: kRef, value: sRef, type: DYN, loc };
|
|
1443
|
+
const value = tIv.kind === "dyn" ? read : { kind: "dynCheck", value: read, type: tIv, loc };
|
|
1444
|
+
const fn = {
|
|
1445
|
+
name,
|
|
1446
|
+
params: [
|
|
1447
|
+
{ localId: "t.0", name: "t", type: toT },
|
|
1448
|
+
{ localId: "s.0", name: "s", type: DYN },
|
|
1449
|
+
],
|
|
1450
|
+
returnType: toT,
|
|
1451
|
+
locals: [
|
|
1452
|
+
{ id: "t.0", name: "t", type: toT, mutable: true },
|
|
1453
|
+
{ id: "s.0", name: "s", type: DYN, mutable: false },
|
|
1454
|
+
{ id: "ks.0", name: "ks", type: ksT, mutable: false },
|
|
1455
|
+
{ id: "i.0", name: "i", type: F64, mutable: true },
|
|
1456
|
+
{ id: "k.0", name: "k", type: STRING, mutable: false },
|
|
1457
|
+
],
|
|
1458
|
+
body: [
|
|
1459
|
+
{
|
|
1460
|
+
kind: "if",
|
|
1461
|
+
cond: { kind: "dynTest", test: "nullish", value: sRef, type: BOOL, loc },
|
|
1462
|
+
then: [{ kind: "return", value: tRef, loc }],
|
|
1463
|
+
else_: [
|
|
1464
|
+
{
|
|
1465
|
+
kind: "varDecl",
|
|
1466
|
+
localId: "ks.0",
|
|
1467
|
+
init: {
|
|
1468
|
+
kind: "libCall",
|
|
1469
|
+
fn: "dyn.objKeyStrings",
|
|
1470
|
+
args: [sRef],
|
|
1471
|
+
type: ksT,
|
|
1472
|
+
loc,
|
|
1473
|
+
},
|
|
1474
|
+
loc,
|
|
1475
|
+
},
|
|
1476
|
+
countedFor(loc, {
|
|
1477
|
+
kind: "arrIntrinsic",
|
|
1478
|
+
method: "length",
|
|
1479
|
+
receiver: varRef("ks.0", ksT, loc),
|
|
1480
|
+
args: [],
|
|
1481
|
+
type: F64,
|
|
1482
|
+
loc,
|
|
1483
|
+
}, () => [
|
|
1484
|
+
{
|
|
1485
|
+
kind: "varDecl",
|
|
1486
|
+
localId: "k.0",
|
|
1487
|
+
init: {
|
|
1488
|
+
kind: "arrayGet",
|
|
1489
|
+
arr: varRef("ks.0", ksT, loc),
|
|
1490
|
+
index: varRef("i.0", F64, loc),
|
|
1491
|
+
type: STRING,
|
|
1492
|
+
loc,
|
|
1493
|
+
},
|
|
1494
|
+
loc,
|
|
1495
|
+
},
|
|
1496
|
+
{
|
|
1497
|
+
kind: "recordKeySet",
|
|
1498
|
+
obj: tRef,
|
|
1499
|
+
shapeId: targetIr.shapeId,
|
|
1500
|
+
key: kRef,
|
|
1501
|
+
value,
|
|
1502
|
+
loc,
|
|
1503
|
+
},
|
|
1504
|
+
]),
|
|
1505
|
+
],
|
|
1506
|
+
loc,
|
|
1507
|
+
},
|
|
1508
|
+
{ kind: "return", value: tRef, loc },
|
|
1509
|
+
],
|
|
1510
|
+
loc,
|
|
1511
|
+
};
|
|
1512
|
+
lowerer.liftedFns.push(fn);
|
|
1513
|
+
return name;
|
|
1514
|
+
};
|
|
1334
1515
|
let acc = lowerer.lowerExprExpecting(call.arguments.nodes[0], targetIr);
|
|
1335
1516
|
for (let i = 0; i < plans.length; i++) {
|
|
1336
|
-
const
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1517
|
+
const plan = plans[i];
|
|
1518
|
+
const argNode = call.arguments.nodes[i + 1];
|
|
1519
|
+
const src = plan.kind === "dyn"
|
|
1520
|
+
? lowerer.coerceToExpected(lowerer.lowerExpr(argNode), DYN)
|
|
1521
|
+
: lowerer.lowerExprExpecting(argNode, { kind: "record", shapeId: plan.fromId });
|
|
1522
|
+
const callee = plan.kind === "dyn" ? dynHelperFor() : helperFor(plan);
|
|
1523
|
+
acc = { kind: "call", callee, args: [acc, src], type: targetIr, loc };
|
|
1341
1524
|
}
|
|
1342
1525
|
return acc;
|
|
1343
1526
|
}
|