@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,3 +1,4 @@
|
|
|
1
|
+
import { callableMemberFieldTarget } from "../callable-properties.js";
|
|
1
2
|
import { lowerIteratorMemberValue } from "../iterator-prototype.js";
|
|
2
3
|
import { widensReducedRecords } from "../function-returns.js";
|
|
3
4
|
import { nullishReadTypeError, throwAfterEach } from "../primitive-throws.js";
|
|
@@ -11,10 +12,9 @@ import { globalFunctionValue } from "../global-function-values.js";
|
|
|
11
12
|
import { arrayClassMemberOwner, arrayClassReceiver, lowerArrayClassConstructorRead, } from "../builtins/array-classes.js";
|
|
12
13
|
import { indexedUnionArms, lowerIndexedUnionMember } from "../indexed-unions.js";
|
|
13
14
|
import { keyedHelperName } from "../stable-names.js";
|
|
14
|
-
import { builtinNamespaceValue } from "../builtin-namespaces.js";
|
|
15
|
+
import { builtinNamespaceValue, wellKnownSymbolValue } from "../builtin-namespaces.js";
|
|
15
16
|
import { staticallySelected } from "../static-typeof.js";
|
|
16
17
|
import { lowerWebStreamClassRead } from "../builtins/web-streams-dyn.js";
|
|
17
|
-
import { wrapperConstructors } from "../primitive-wrappers.js";
|
|
18
18
|
import * as ts from "../../ts7/adapter.js";
|
|
19
19
|
import { lowerHistogramProperty } from "../builtins/performance.js";
|
|
20
20
|
import { staticFunctionNameRead } from "../static-function-names.js";
|
|
@@ -24,9 +24,10 @@ import { isThisParameter } from "../call-signatures.js";
|
|
|
24
24
|
import { argumentCountSlot, contextualCallCount, usedAsValue } from "../argument-counts.js";
|
|
25
25
|
import { checkedPrivateValue, localPrivateBrandClass, privateNameClass, } from "../private-brands.js";
|
|
26
26
|
import { PoisonError, builtinValueNameOf, jsFuncNameOf, neverTaintedJsType, own, } from "../lowerer.js";
|
|
27
|
+
import { httpClientFnBindingOf, httpClientSecureRef } from "../lower-server.js";
|
|
27
28
|
import { ARRAY_METHODS, MAP_METHODS, NARROW_FIRST, SET_METHODS, STDLIB_SURFACE, STRING_INDEX_METHODS, STR_METHODS, isChildSurfaceMember, stdlibGlobalNameOf, } from "../surfaces.js";
|
|
28
29
|
import { isGenericCallableMemberType, isLegacyUrlSymbol, isOsConstantsType, isParseArgsDynTypeName, } from "../../type-mapper.js";
|
|
29
|
-
import { BIGINT_T, BOOL, BYTES_U8, DYN, F64, NULL_T, SEARCH_PARAMS_T, STRING, SYMBOL_T, UNDEFINED_T, arrayOf, canBoxFuncIntoDyn, funcOf, isDynTypedRefType, isUnitType, typeEquals, typeKey, unionContainerArmsOk, BYTES_ELEMENT_SIZE, } from "../../../ir/ir.js";
|
|
30
|
+
import { BIGINT_T, BOOL, BYTES_U8, DYN, F64, NULL_T, SEARCH_PARAMS_T, STRING, SYMBOL_T, UNDEFINED_T, arrayOf, canBoxFuncIntoDyn, funcOf, isDynTypedRefType, isUnitType, typeEquals, sortArms, sortArmsTotal, typeKey, unionContainerArmsOk, BYTES_ELEMENT_SIZE, } from "../../../ir/ir.js";
|
|
30
31
|
import { lowerNavigatorMember, navigatorValue } from "../builtins/navigator.js";
|
|
31
32
|
import { lowerX509PublicKey } from "../builtins/x509.js";
|
|
32
33
|
import { fenceMimeStaticRead } from "../builtins/mime.js";
|
|
@@ -49,13 +50,13 @@ import { dynUndefinedExpr, nodeThrowExpr, numLit, strLit, varRef } from "../../.
|
|
|
49
50
|
import { typedArrayLacksMember } from "../builtins/typed-array-members.js";
|
|
50
51
|
import { COMMONJS_MODULE_BINDINGS, TEMPORAL_GLOBAL } from "../../builtin-modules.js";
|
|
51
52
|
import { tryLowerExpression } from "./try-lower-expression.js";
|
|
52
|
-
import { applyDeferredAssertion, assertedReceiverNode, deferredMemberReadTarget, deferredProbeReadAccess, } from "./asserted-receiver.js";
|
|
53
|
+
import { applyDeferredAssertion, assertedOptionalMemberRead, assertedReceiverNode, deferredMemberReadTarget, deferredProbeReadAccess, } from "./asserted-receiver.js";
|
|
53
54
|
import { lowerRecordInheritedMember } from "../record-inherited.js";
|
|
54
55
|
import { MUTABLE_BUFFER_MEMBERS } from "../buffers.js";
|
|
55
56
|
import { DATE_METHOD_HINT } from "../builtins/dates.js";
|
|
56
57
|
import { cjsClassExprWholeExportOf, cjsExportAssignmentOf, cjsExportDiscardReason, isCjsExportTableLiteral, isCjsJsFile, isJsSourceFile, isModuleExportsAccess, isNodeEsmFile, locOf, } from "../../program.js";
|
|
57
58
|
import { ambientNsRootOf, ambientUndefReadType, ambientUndefVarRootOf, contextualUndefReadType, fenceEarlyNsMemberRef, nsMemberIdentOf, nsUndefRead, } from "../lower-namespaces.js";
|
|
58
|
-
import {
|
|
59
|
+
import { fenceExpandoRead } from "../lower-expando.js";
|
|
59
60
|
import { lowerProtocolPropertyRead } from "../class-protocol-dispatch.js";
|
|
60
61
|
import { lowerReadlineProperty } from "../builtins/readline.js";
|
|
61
62
|
import { lowerAsyncLocalStorageProperty } from "../builtins/async-context.js";
|
|
@@ -69,9 +70,9 @@ import { nullishGenericBindingUnitOf } from "../binding-analysis.js";
|
|
|
69
70
|
import { blockedBindingUseDiag } from "../../../diagnostics/diagnostic.js";
|
|
70
71
|
import { npmStaticPackageOfPath } from "../../npm-static.js";
|
|
71
72
|
import { importMetaField, isImportMeta } from "../import-meta.js";
|
|
72
|
-
import { createRequireCalleeFileOf } from "../builtins/module-bindings.js";
|
|
73
|
+
import { createRequireCalleeFileOf, createRequireRuntimeBaseOf, } from "../builtins/module-bindings.js";
|
|
73
74
|
import { createRequireResolveFenceValue, createRequireResolveValue, } from "../builtins/module-resolution.js";
|
|
74
|
-
import { builtinPrototypeMethod, lowerCheckedPredicateValue } from "../lower-builtin-values.js";
|
|
75
|
+
import { builtinMethodValue, builtinPrototypeMethod, lowerCheckedPredicateValue, stringTrimMethodName, } from "../lower-builtin-values.js";
|
|
75
76
|
import { constructorStaticValue, objectFreezeValue } from "../builtin-statics.js";
|
|
76
77
|
import { lowerBufferPrototypeMember, lowerBufferPrototypeObject } from "../containers/bytes.js";
|
|
77
78
|
import { lowerNetAddressStaticRead } from "../builtins/net-address.js";
|
|
@@ -92,7 +93,7 @@ import { isFsStreamMember, lowerFsStreamProperty } from "../builtins/fs-streams.
|
|
|
92
93
|
import { keyedFieldRead } from "./keyed-field-targets.js";
|
|
93
94
|
import { heldEnvValueType } from "../builtins/environment.js";
|
|
94
95
|
import { promisePrototypeValue } from "../thenables.js";
|
|
95
|
-
import { lowerChildPropertyRead } from "../handle-properties.js";
|
|
96
|
+
import { lowerChildPropertyRead, lowerHandlePropertyRead } from "../handle-properties.js";
|
|
96
97
|
/** True when a property access names an ABSTRACT property declaration
|
|
97
98
|
* (`abstract p: number` — a PropertyDeclaration, not an accessor).
|
|
98
99
|
* These uses need concrete property dispatch because the base has no slot. */
|
|
@@ -229,7 +230,8 @@ function isCreateRequireResolveValue(lowerer, expr) {
|
|
|
229
230
|
return (!expr.questionDotToken &&
|
|
230
231
|
ts.isPropertyAccessExpression(resolve) &&
|
|
231
232
|
resolve.name.text === "resolve" &&
|
|
232
|
-
createRequireCalleeFileOf(lowerer, resolve.expression) !== null
|
|
233
|
+
(createRequireCalleeFileOf(lowerer, resolve.expression) !== null ||
|
|
234
|
+
createRequireRuntimeBaseOf(lowerer, resolve.expression)));
|
|
233
235
|
}
|
|
234
236
|
export function lowerPropertyAccessExpr(lowerer, expr, loc) {
|
|
235
237
|
// A JavaScript source reading a member that resizes, grows or detaches a
|
|
@@ -240,6 +242,16 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
|
|
|
240
242
|
const arrayClassConstructor = lowerArrayClassConstructorRead(lowerer, expr, loc);
|
|
241
243
|
if (arrayClassConstructor !== null)
|
|
242
244
|
return arrayClassConstructor;
|
|
245
|
+
// A createRequire loader's resolve read as a value (passed on, or
|
|
246
|
+
// picked by `??`): a function that resolves its request at run time.
|
|
247
|
+
// resolve.paths read as a value has no run-time lowering: a function
|
|
248
|
+
// that throws the fence when called. Claimed before the generic
|
|
249
|
+
// function-member reads below, which would otherwise read `.resolve`
|
|
250
|
+
// off the loader's run-time value form.
|
|
251
|
+
if (isCreateRequireResolveValue(lowerer, expr))
|
|
252
|
+
return expr.name.text === "paths"
|
|
253
|
+
? createRequireResolveFenceValue(lowerer, expr, loc)
|
|
254
|
+
: createRequireResolveValue(lowerer, expr, loc);
|
|
243
255
|
// `R.#x` for a static private on a checked-dynamic receiver: the brand
|
|
244
256
|
// check, then the native storage (private-statics.ts).
|
|
245
257
|
{
|
|
@@ -773,16 +785,10 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
|
|
|
773
785
|
fenceEarlyNsMemberRef(lowerer, expr, memberSym);
|
|
774
786
|
return lowerExpr(lowerer, nsMember);
|
|
775
787
|
}
|
|
776
|
-
// Expando function members (`foo.bar` after `foo.bar = 12`)
|
|
777
|
-
//
|
|
778
|
-
//
|
|
779
|
-
|
|
780
|
-
// reads its assigned members, not the ambient ReferenceError.
|
|
781
|
-
{
|
|
782
|
-
const ex = expandoMemberRead(lowerer, expr);
|
|
783
|
-
if (ex)
|
|
784
|
-
return lowerer.maybeNarrow(ex, expr);
|
|
785
|
-
}
|
|
788
|
+
// Expando function members (`foo.bar` after `foo.bar = 12`) read
|
|
789
|
+
// through the closure's own-property table (the callable-member path
|
|
790
|
+
// below); this only keeps the source-order fence (lower-expando.ts).
|
|
791
|
+
fenceExpandoRead(lowerer, expr);
|
|
786
792
|
// An AMBIENT namespace receiver (`M.x` where only `declare
|
|
787
793
|
// namespace M` exists): the namespace object never exists at
|
|
788
794
|
// runtime — Node's exact catchable ReferenceError at the access,
|
|
@@ -1043,6 +1049,36 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
|
|
|
1043
1049
|
};
|
|
1044
1050
|
}
|
|
1045
1051
|
}
|
|
1052
|
+
// A client function chosen at run time (`const requestFn = c ?
|
|
1053
|
+
// https.request : http.request`): both arms are Node's `request` (the
|
|
1054
|
+
// .get pair both are `get`), and the length follows the arm the program
|
|
1055
|
+
// picked — https.request.length is 0, http.request.length 3.
|
|
1056
|
+
if (expr.name.text === "name" || expr.name.text === "length") {
|
|
1057
|
+
const ident = ts.isIdentifier(expr.expression) ? expr.expression : null;
|
|
1058
|
+
const sym = ident ? lowerer.resolveValueSymbol(ident) : undefined;
|
|
1059
|
+
const binding = sym ? httpClientFnBindingOf(lowerer, sym) : undefined;
|
|
1060
|
+
if (binding) {
|
|
1061
|
+
if (expr.name.text === "name")
|
|
1062
|
+
return { kind: "strLit", value: binding.member, type: STRING, loc };
|
|
1063
|
+
const httpLength = 3;
|
|
1064
|
+
const httpsLength = binding.member === "get" ? 3 : 0;
|
|
1065
|
+
if (httpsLength === httpLength)
|
|
1066
|
+
return { kind: "numLit", value: httpLength, type: F64, loc };
|
|
1067
|
+
const secure = binding.secureStorage !== undefined
|
|
1068
|
+
? httpClientSecureRef(lowerer, binding, expr, loc)
|
|
1069
|
+
: lowerer.lowerCondition(binding.cond);
|
|
1070
|
+
return {
|
|
1071
|
+
kind: "ternary",
|
|
1072
|
+
cond: binding.trueSecure
|
|
1073
|
+
? secure
|
|
1074
|
+
: { kind: "unary", op: "!", operand: secure, type: BOOL, loc },
|
|
1075
|
+
then: { kind: "numLit", value: httpsLength, type: F64, loc },
|
|
1076
|
+
else_: { kind: "numLit", value: httpLength, type: F64, loc },
|
|
1077
|
+
type: F64,
|
|
1078
|
+
loc,
|
|
1079
|
+
};
|
|
1080
|
+
}
|
|
1081
|
+
}
|
|
1046
1082
|
// `f.name` / `f.length` / own properties on a FUNCTION-typed JS
|
|
1047
1083
|
// value (the mustCall wrapper's function-instance members): read
|
|
1048
1084
|
// through the dyn box — the closure's own-property table answers
|
|
@@ -1058,6 +1094,21 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
|
|
|
1058
1094
|
expr.name.text === "length" ||
|
|
1059
1095
|
expr.name.text === "constructor")) {
|
|
1060
1096
|
const probed = tryLowerExpression(lowerer, expr.expression);
|
|
1097
|
+
// A builtin function value's own name and length are fixed when the
|
|
1098
|
+
// adapter is built: answer them without boxing the closure. Node's
|
|
1099
|
+
// wrapper names (`process.cwd` is `wrappedCwd`) and lengths that
|
|
1100
|
+
// differ from the adapter's parameters (`fs.readFile.length` is 3)
|
|
1101
|
+
// come from the same table the boxed value reports.
|
|
1102
|
+
if (probed?.type.kind === "func" &&
|
|
1103
|
+
(expr.name.text === "name" || expr.name.text === "length")) {
|
|
1104
|
+
const identity = lowerer.builtinFunctionIdentity(probed);
|
|
1105
|
+
if (expr.name.text === "name" &&
|
|
1106
|
+
identity.fnName !== undefined &&
|
|
1107
|
+
!identity.fnNameMainThreadOnly)
|
|
1108
|
+
return { kind: "strLit", value: identity.fnName, type: STRING, loc };
|
|
1109
|
+
if (expr.name.text === "length" && identity.fnLength !== undefined)
|
|
1110
|
+
return { kind: "numLit", value: identity.fnLength, type: F64, loc };
|
|
1111
|
+
}
|
|
1061
1112
|
// Inferred callable returns can use checked storage even when the
|
|
1062
1113
|
// checker still describes a function. Read its actual dyn value;
|
|
1063
1114
|
// the ambient Function member must not hide its own properties.
|
|
@@ -1084,7 +1135,10 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
|
|
|
1084
1135
|
loc,
|
|
1085
1136
|
}, expr);
|
|
1086
1137
|
}
|
|
1087
|
-
if ((isJsSourceFile(ts.getSourceFileOfNode(expr)) ||
|
|
1138
|
+
if ((isJsSourceFile(ts.getSourceFileOfNode(expr)) ||
|
|
1139
|
+
expr.name.text === "name" ||
|
|
1140
|
+
expr.name.text === "length" ||
|
|
1141
|
+
expr.name.text === "constructor") &&
|
|
1088
1142
|
probed?.type.kind === "func" &&
|
|
1089
1143
|
canBoxFuncIntoDyn(probed.type, (id) => lowerer.shapes.get(id), (id) => lowerer.unions.get(id))) {
|
|
1090
1144
|
// A function is named by its definition, through const aliases: a
|
|
@@ -1250,14 +1304,6 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
|
|
|
1250
1304
|
return declared && declared.kind !== "void" ? lowerer.coerceToExpected(read, declared) : read;
|
|
1251
1305
|
}
|
|
1252
1306
|
}
|
|
1253
|
-
// A createRequire loader's resolve read as a value (passed on, or
|
|
1254
|
-
// picked by `??`): a function that resolves its request at run time.
|
|
1255
|
-
// resolve.paths read as a value has no run-time lowering: a function
|
|
1256
|
-
// that throws the fence when called.
|
|
1257
|
-
if (isCreateRequireResolveValue(lowerer, expr))
|
|
1258
|
-
return expr.name.text === "paths"
|
|
1259
|
-
? createRequireResolveFenceValue(lowerer, expr, loc)
|
|
1260
|
-
: createRequireResolveValue(lowerer, expr, loc);
|
|
1261
1307
|
// The lib fence's PROPERTY chokepoint: a stdlib-declared member that
|
|
1262
1308
|
// no lowering above claimed ([1,2].entries, Math.SQRT2, Promise.all,
|
|
1263
1309
|
// re.exec as a value, ...) reports SC2020 here.
|
|
@@ -1495,6 +1541,14 @@ export function lowerPropertyAccessExpr(lowerer, expr, loc) {
|
|
|
1495
1541
|
const childProperty = lowerChildPropertyRead(lowerer, expr);
|
|
1496
1542
|
if (childProperty)
|
|
1497
1543
|
return childProperty;
|
|
1544
|
+
// A member a typed handle's class does not declare (a JavaScript read
|
|
1545
|
+
// such as `m.label`): a property table entry of the handle
|
|
1546
|
+
// (scr_dyn_handle_props.c).
|
|
1547
|
+
{
|
|
1548
|
+
const handleProperty = lowerHandlePropertyRead(lowerer, expr, recvLowered);
|
|
1549
|
+
if (handleProperty)
|
|
1550
|
+
return handleProperty;
|
|
1551
|
+
}
|
|
1498
1552
|
// A member a typed array's type does not declare (a JavaScript read, or
|
|
1499
1553
|
// one under @ts-ignore), such as the feature probe `typeof bytes.toHex`:
|
|
1500
1554
|
// when Node's prototype chain for the value lacks the name too, the read
|
|
@@ -1744,7 +1798,7 @@ function mergeReadTypes(lowerer, types) {
|
|
|
1744
1798
|
return null;
|
|
1745
1799
|
if (arms.length === 1)
|
|
1746
1800
|
return arms[0];
|
|
1747
|
-
const canonical = arms
|
|
1801
|
+
const canonical = sortArmsTotal(arms);
|
|
1748
1802
|
return { kind: "union", unionId: lowerer.unions.intern(canonical) };
|
|
1749
1803
|
}
|
|
1750
1804
|
function importMetaProperty(lowerer, expr) {
|
|
@@ -1978,7 +2032,18 @@ export function lowerIntrinsicProperty(lowerer, expr) {
|
|
|
1978
2032
|
if (primitivePrototype)
|
|
1979
2033
|
return primitivePrototype;
|
|
1980
2034
|
const builtinPrototype = builtinPrototypeMethod(lowerer, expr);
|
|
1981
|
-
if (builtinPrototype)
|
|
2035
|
+
if (builtinPrototype) {
|
|
2036
|
+
// The trim family and RegExp's methods have a value of their own
|
|
2037
|
+
// (scr_dyn_builtin_methods.c). The invoke unit's table answers a member
|
|
2038
|
+
// read on a receiver it already knows; these values have no receiver at
|
|
2039
|
+
// read time and brand-check whatever `this` they are later called with,
|
|
2040
|
+
// which a receiver-keyed lookup cannot express. The interned value is
|
|
2041
|
+
// shared with the `''.trim` and `/a/.exec` spellings below.
|
|
2042
|
+
const trim = builtinPrototype === "String" ? stringTrimMethodName(expr.name.text) : null;
|
|
2043
|
+
if (trim)
|
|
2044
|
+
return builtinMethodValue("String", trim, locOf(expr));
|
|
2045
|
+
if (builtinPrototype === "RegExp")
|
|
2046
|
+
return builtinMethodValue("RegExp", expr.name.text, locOf(expr));
|
|
1982
2047
|
return {
|
|
1983
2048
|
kind: "libCall",
|
|
1984
2049
|
fn: "dyn.builtinMethod",
|
|
@@ -1989,6 +2054,7 @@ export function lowerIntrinsicProperty(lowerer, expr) {
|
|
|
1989
2054
|
type: DYN,
|
|
1990
2055
|
loc: locOf(expr),
|
|
1991
2056
|
};
|
|
2057
|
+
}
|
|
1992
2058
|
if (ts.isPropertyAccessExpression(expr.expression) &&
|
|
1993
2059
|
lowerer.stdlibGlobalMember(expr.expression, "Array") === "prototype") {
|
|
1994
2060
|
return {
|
|
@@ -2011,6 +2077,41 @@ export function lowerIntrinsicProperty(lowerer, expr) {
|
|
|
2011
2077
|
return { kind: "libCall", fn: "dyn.functionApply", args: [], type: DYN, loc: locOf(expr) };
|
|
2012
2078
|
if (lowerer.stdlibGlobalMember(expr, "Array") === "prototype")
|
|
2013
2079
|
return { kind: "libCall", fn: "dyn.arrayPrototype", args: [], type: DYN, loc: locOf(expr) };
|
|
2080
|
+
// DataView.prototype as a value, and its members read through it: the
|
|
2081
|
+
// prototype object the language defines — its see-through properties
|
|
2082
|
+
// (buffer, byteLength, byteOffset), its getter/setter family and its
|
|
2083
|
+
// constructor — not a view. A DataView method CALLED on the prototype
|
|
2084
|
+
// object itself throws the TypeError its brand check answers. Typed
|
|
2085
|
+
// sources keep the standard-library member fence: their views lower
|
|
2086
|
+
// through the intrinsic path, and only a JavaScript source can pass a
|
|
2087
|
+
// view around as a value.
|
|
2088
|
+
if (isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
|
|
2089
|
+
lowerer.stdlibGlobalMember(expr, "DataView") === "prototype") {
|
|
2090
|
+
return {
|
|
2091
|
+
kind: "libCall",
|
|
2092
|
+
fn: "dyn.dataViewPrototype",
|
|
2093
|
+
args: [wellKnownSymbolValue("toStringTag", locOf(expr))],
|
|
2094
|
+
type: DYN,
|
|
2095
|
+
loc: locOf(expr),
|
|
2096
|
+
};
|
|
2097
|
+
}
|
|
2098
|
+
if (isJsSourceFile(ts.getSourceFileOfNode(expr)) &&
|
|
2099
|
+
ts.isPropertyAccessExpression(expr.expression) &&
|
|
2100
|
+
lowerer.stdlibGlobalMember(expr.expression, "DataView") === "prototype") {
|
|
2101
|
+
return {
|
|
2102
|
+
kind: "dynKeyGet",
|
|
2103
|
+
value: {
|
|
2104
|
+
kind: "libCall",
|
|
2105
|
+
fn: "dyn.dataViewPrototype",
|
|
2106
|
+
args: [wellKnownSymbolValue("toStringTag", locOf(expr.expression))],
|
|
2107
|
+
type: DYN,
|
|
2108
|
+
loc: locOf(expr.expression),
|
|
2109
|
+
},
|
|
2110
|
+
key: { kind: "strLit", value: expr.name.text, type: STRING, loc: locOf(expr.name) },
|
|
2111
|
+
type: DYN,
|
|
2112
|
+
loc: locOf(expr),
|
|
2113
|
+
};
|
|
2114
|
+
}
|
|
2014
2115
|
// Date.prototype as a value, and its members read through it: the
|
|
2015
2116
|
// prototype object the language defines (an ordinary object carrying the
|
|
2016
2117
|
// interface's methods), not a Date. `Date.prototype.hasOwnProperty("x")`
|
|
@@ -2246,6 +2347,23 @@ export function lowerIntrinsicProperty(lowerer, expr) {
|
|
|
2246
2347
|
const receiver = lowerer.lowerExpr(expr.expression);
|
|
2247
2348
|
return { kind: "libCall", fn: "child.killed", args: [receiver], type: BOOL, loc };
|
|
2248
2349
|
}
|
|
2350
|
+
// spawnfile / spawnargs: the file the child was started from, and that
|
|
2351
|
+
// file followed by its arguments. A shell spawn reports the shell and
|
|
2352
|
+
// its invocation (Node's own record of what it ran).
|
|
2353
|
+
if (name === "spawnfile") {
|
|
2354
|
+
const receiver = lowerer.lowerExpr(expr.expression);
|
|
2355
|
+
return { kind: "libCall", fn: "child.spawnfile", args: [receiver], type: STRING, loc };
|
|
2356
|
+
}
|
|
2357
|
+
if (name === "spawnargs") {
|
|
2358
|
+
const receiver = lowerer.lowerExpr(expr.expression);
|
|
2359
|
+
return {
|
|
2360
|
+
kind: "libCall",
|
|
2361
|
+
fn: "child.spawnargs",
|
|
2362
|
+
args: [receiver],
|
|
2363
|
+
type: arrayOf(STRING),
|
|
2364
|
+
loc,
|
|
2365
|
+
};
|
|
2366
|
+
}
|
|
2249
2367
|
// signalCode: `NodeJS.Signals | null`, the signal that terminated the
|
|
2250
2368
|
// child (null while running, after a normal exit, and after a spawn
|
|
2251
2369
|
// failure) — the exit listener's second parameter, read as a property.
|
|
@@ -2262,7 +2380,7 @@ export function lowerIntrinsicProperty(lowerer, expr) {
|
|
|
2262
2380
|
if (name === "on" || name === "once" || name === "kill" || name === "unref") {
|
|
2263
2381
|
lowerer.unsupported("SC1090", expr, `child methods as values (call '${name}' directly)`);
|
|
2264
2382
|
}
|
|
2265
|
-
lowerer.noLowering(`ChildProcess.${name}`, expr, 'on/once("exit" | "close" | "error", cb), pid, exitCode, killed, kill(signal?), and unref() are the supported ChildProcess members', lowerer.checker.getSymbolAtLocation(expr.name));
|
|
2383
|
+
lowerer.noLowering(`ChildProcess.${name}`, expr, 'on/once("exit" | "close" | "error", cb), pid, exitCode, killed, spawnfile, spawnargs, kill(signal?), ref(), and unref() are the supported ChildProcess members', lowerer.checker.getSymbolAtLocation(expr.name));
|
|
2266
2384
|
}
|
|
2267
2385
|
if (kind === "spawnRes") {
|
|
2268
2386
|
// The spawnSync-result reads. status is the interned `number | null`
|
|
@@ -2503,8 +2621,16 @@ export function lowerIntrinsicProperty(lowerer, expr) {
|
|
|
2503
2621
|
loc,
|
|
2504
2622
|
};
|
|
2505
2623
|
}
|
|
2506
|
-
|
|
2507
|
-
|
|
2624
|
+
// A regex method read as a value: the same interned function
|
|
2625
|
+
// `RegExp.prototype.exec` is (scr_dyn_builtin_methods.c), which
|
|
2626
|
+
// brand-checks its receiver. A compiled regex carries no own member of
|
|
2627
|
+
// any of these names, so the read answers the prototype's method exactly
|
|
2628
|
+
// as Node does. A direct call keeps its intrinsic lowering: it is
|
|
2629
|
+
// statically typed, and the value form would make it a dynamic call.
|
|
2630
|
+
if ((name === "exec" || name === "test" || name === "toString") && !isCalleeOf(expr)) {
|
|
2631
|
+
// The read still evaluates the receiver first: a call that answers the
|
|
2632
|
+
// regex may have side effects or throw before the member is read.
|
|
2633
|
+
return afterReceiver(lowerer.lowerExpr(expr.expression), builtinMethodValue("RegExp", name, locOf(expr)), locOf(expr));
|
|
2508
2634
|
}
|
|
2509
2635
|
return null;
|
|
2510
2636
|
}
|
|
@@ -2690,16 +2816,22 @@ export function lowerIntrinsicProperty(lowerer, expr) {
|
|
|
2690
2816
|
// runtime's interned function that runs it on its receiver.
|
|
2691
2817
|
if (kind === "string" && isJsSourceFile(expr.getSourceFile()) && !expr.questionDotToken) {
|
|
2692
2818
|
const receiver = lowerer.lowerExpr(expr.expression);
|
|
2693
|
-
|
|
2694
|
-
|
|
2695
|
-
|
|
2696
|
-
|
|
2697
|
-
|
|
2698
|
-
|
|
2699
|
-
|
|
2700
|
-
|
|
2701
|
-
|
|
2702
|
-
|
|
2819
|
+
// `''.trim` is the same interned function as String.prototype.trim, so
|
|
2820
|
+
// its call/apply run the method generically (scr_dyn_builtin_methods.c
|
|
2821
|
+
// rather than the invoke unit's table, which has no trim entry).
|
|
2822
|
+
const trim = stringTrimMethodName(name);
|
|
2823
|
+
const method = trim
|
|
2824
|
+
? builtinMethodValue("String", trim, locOf(expr))
|
|
2825
|
+
: {
|
|
2826
|
+
kind: "libCall",
|
|
2827
|
+
fn: "dyn.builtinMethod",
|
|
2828
|
+
args: [
|
|
2829
|
+
{ kind: "strLit", value: "String", type: STRING, loc: locOf(expr) },
|
|
2830
|
+
{ kind: "strLit", value: name, type: STRING, loc: locOf(expr.name) },
|
|
2831
|
+
],
|
|
2832
|
+
type: DYN,
|
|
2833
|
+
loc: locOf(expr),
|
|
2834
|
+
};
|
|
2703
2835
|
return isSafeToDiscard(receiver)
|
|
2704
2836
|
? method
|
|
2705
2837
|
: {
|
|
@@ -3283,6 +3415,16 @@ export function lowerFieldRead(lowerer, expr) {
|
|
|
3283
3415
|
// answer in lowerPropertyAccessExpr (asserted-receiver.ts).
|
|
3284
3416
|
if (deferredProbeReadAccess(lowerer, expr))
|
|
3285
3417
|
return null;
|
|
3418
|
+
// A member only an asserted intersection declares
|
|
3419
|
+
// (`(item as Base & { icons?: unknown }).icons`): the assertion's width
|
|
3420
|
+
// copy has the name but no value in it, while the record the value
|
|
3421
|
+
// actually holds still carries the property in its kept source. Answer
|
|
3422
|
+
// from there (assertedOnlyFieldRead), as the destructuring twin does.
|
|
3423
|
+
{
|
|
3424
|
+
const assertedOnly = assertedOptionalMemberRead(lowerer, expr);
|
|
3425
|
+
if (assertedOnly)
|
|
3426
|
+
return assertedOnly;
|
|
3427
|
+
}
|
|
3286
3428
|
const target = lowerer.fieldTarget(expr);
|
|
3287
3429
|
if (target)
|
|
3288
3430
|
return lowerer.fieldGetExpr(target, locOf(expr), expr);
|
|
@@ -4080,7 +4222,7 @@ export function lowerUnionKeyedRead(lowerer, expr, unionId, value, key, literalF
|
|
|
4080
4222
|
joinArms.some((a) => a.kind === "dyn" || a.kind === "generator" || a.kind === "caught"))) {
|
|
4081
4223
|
return null;
|
|
4082
4224
|
}
|
|
4083
|
-
joinArms
|
|
4225
|
+
sortArms(joinArms);
|
|
4084
4226
|
const type = joinArms.length === 1
|
|
4085
4227
|
? joinArms[0]
|
|
4086
4228
|
: { kind: "union", unionId: lowerer.unions.intern(joinArms) };
|
|
@@ -4644,6 +4786,15 @@ export function fieldTarget(lowerer, access) {
|
|
|
4644
4786
|
}
|
|
4645
4787
|
return null;
|
|
4646
4788
|
}
|
|
4789
|
+
// A member of a typed CALLABLE: the closure's own-property table
|
|
4790
|
+
// (callable-properties.ts). The receiver lowered as a closure, so its
|
|
4791
|
+
// members are the function object's own data properties, read through the
|
|
4792
|
+
// identity-preserving box with the declared member type checked back.
|
|
4793
|
+
if (receiverIr?.kind === "func") {
|
|
4794
|
+
const callable = callableMemberFieldTarget(lowerer, access, receiverIr);
|
|
4795
|
+
if (callable)
|
|
4796
|
+
return callable;
|
|
4797
|
+
}
|
|
4647
4798
|
return null;
|
|
4648
4799
|
}
|
|
4649
4800
|
/** The read expression for a field target (fieldGet / recordGet /
|
|
@@ -4995,7 +5146,28 @@ const BUILTIN_VALUE_REFLECTION = new Set([
|
|
|
4995
5146
|
* redefinition (`Object.hasOwn(Object, "hasOwn")`,
|
|
4996
5147
|
* `Object.defineProperty(Promise, ...)`, `hasOwnProperty.call(Map, ...)`),
|
|
4997
5148
|
* which would observe or change members the interned value does not
|
|
4998
|
-
* model
|
|
5149
|
+
* model — except an own-key query whose answer the value does model
|
|
5150
|
+
* (faithfulOwnKeyQuery). */
|
|
5151
|
+
/** The interned values whose own properties the runtime models exactly as
|
|
5152
|
+
* Node's constructor has them: Proxy is the one builtin constructor with no
|
|
5153
|
+
* `prototype` own property, and the runtime's Proxy value carries Node's
|
|
5154
|
+
* other own keys (length, name, revocable). The other interns would answer
|
|
5155
|
+
* `hasOwnProperty(..., "prototype")` false where Node answers true. */
|
|
5156
|
+
const BUILTIN_VALUE_OWN_KEYS_FAITHFUL = new Set(["Proxy"]);
|
|
5157
|
+
/** `Object.prototype.hasOwnProperty.call(<interned value>, key)` asks which
|
|
5158
|
+
* own keys the value has; it neither reads nor redefines a member. The
|
|
5159
|
+
* answer is Node's when the interned value's own keys are
|
|
5160
|
+
* (BUILTIN_VALUE_OWN_KEYS_FAITHFUL). */
|
|
5161
|
+
function faithfulOwnKeyQuery(lowerer, callee, canonical) {
|
|
5162
|
+
if (!BUILTIN_VALUE_OWN_KEYS_FAITHFUL.has(canonical) || callee.name.text !== "call")
|
|
5163
|
+
return false;
|
|
5164
|
+
const method = callee.expression;
|
|
5165
|
+
return (ts.isPropertyAccessExpression(method) &&
|
|
5166
|
+
method.name.text === "hasOwnProperty" &&
|
|
5167
|
+
ts.isPropertyAccessExpression(method.expression) &&
|
|
5168
|
+
method.expression.name.text === "prototype" &&
|
|
5169
|
+
stdlibGlobalNameOf(lowerer, method.expression.expression) === "Object");
|
|
5170
|
+
}
|
|
4999
5171
|
export function builtinGlobalValueAt(lowerer, expr, canonical, loc, js) {
|
|
5000
5172
|
// A namespace object models its own properties, so member reads and
|
|
5001
5173
|
// reflection read it like any object.
|
|
@@ -5024,7 +5196,8 @@ export function builtinGlobalValueAt(lowerer, expr, canonical, loc, js) {
|
|
|
5024
5196
|
call.arguments.nodes[0] === node &&
|
|
5025
5197
|
lowerer.isStdlibSymbol(lowerer.checker.getSymbolAtLocation(ts.isPropertyAccessExpression(callee.expression)
|
|
5026
5198
|
? callee.expression.name
|
|
5027
|
-
: callee.expression))
|
|
5199
|
+
: callee.expression)) &&
|
|
5200
|
+
!faithfulOwnKeyQuery(lowerer, callee, canonical));
|
|
5028
5201
|
if (reflects) {
|
|
5029
5202
|
const name = owner !== null
|
|
5030
5203
|
? `${owner}.${callee.name.text}`
|
|
@@ -5271,6 +5444,26 @@ export function isPromisePrototypeRead(lowerer, expr) {
|
|
|
5271
5444
|
inner.name.text === "constructor" &&
|
|
5272
5445
|
lowerer.mapTypeOf(lowerer.typeOf(inner.expression))?.kind === "promise");
|
|
5273
5446
|
}
|
|
5447
|
+
/** Whether `expr` reads DataView.prototype, or a member read through it, in
|
|
5448
|
+
* a JavaScript source. The checker types the read DataView — whose lowering
|
|
5449
|
+
* is a bytes view — but the value is the prototype OBJECT
|
|
5450
|
+
* (dyn.dataViewPrototype), so a binding inferred from it stays
|
|
5451
|
+
* checked-dynamic: the bytes extraction would throw where Node answers the
|
|
5452
|
+
* object. */
|
|
5453
|
+
export function isDataViewPrototypeRead(lowerer, expr) {
|
|
5454
|
+
if (!expr)
|
|
5455
|
+
return false;
|
|
5456
|
+
while (ts.isParenthesizedExpression(expr))
|
|
5457
|
+
expr = expr.expression;
|
|
5458
|
+
if (!ts.isPropertyAccessExpression(expr) || expr.questionDotToken)
|
|
5459
|
+
return false;
|
|
5460
|
+
if (!isJsSourceFile(ts.getSourceFileOfNode(expr)))
|
|
5461
|
+
return false;
|
|
5462
|
+
if (lowerer.stdlibGlobalMember(expr, "DataView") === "prototype")
|
|
5463
|
+
return true;
|
|
5464
|
+
return (ts.isPropertyAccessExpression(expr.expression) &&
|
|
5465
|
+
lowerer.stdlibGlobalMember(expr.expression, "DataView") === "prototype");
|
|
5466
|
+
}
|
|
5274
5467
|
/** A promise's `constructor` (the Promise constructor value), and
|
|
5275
5468
|
* Promise.prototype read as `promise.constructor.prototype` or
|
|
5276
5469
|
* `Promise.prototype` (execa's `(async () => {})().constructor.prototype`):
|
|
@@ -5396,14 +5589,20 @@ function jsPrimitivePrototypeValue(lowerer, expr) {
|
|
|
5396
5589
|
{
|
|
5397
5590
|
kind: "libCall",
|
|
5398
5591
|
fn: "wrapper.booleanPrototype",
|
|
5399
|
-
args: [
|
|
5592
|
+
args: [lowerer.coerceToExpected(primitiveCtorClosure(lowerer, kind, loc, true), DYN)],
|
|
5400
5593
|
type: DYN,
|
|
5401
5594
|
loc,
|
|
5402
5595
|
}
|
|
5403
5596
|
: {
|
|
5404
5597
|
kind: "libCall",
|
|
5405
5598
|
fn: "dyn.builtinPrototype",
|
|
5406
|
-
args: [
|
|
5599
|
+
args: [
|
|
5600
|
+
{ kind: "strLit", value: kind, type: STRING, loc },
|
|
5601
|
+
// The compiled constructor value the prototype belongs to: the
|
|
5602
|
+
// unit answers it as the constructor's `prototype` member, so
|
|
5603
|
+
// `Object(1).constructor.prototype === Number.prototype`.
|
|
5604
|
+
lowerer.coerceToExpected(primitiveCtorClosure(lowerer, kind, loc, true), DYN),
|
|
5605
|
+
],
|
|
5407
5606
|
type: DYN,
|
|
5408
5607
|
loc,
|
|
5409
5608
|
};
|