@geastack/compiler 1.0.15
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/LICENSE +202 -0
- package/README.md +149 -0
- package/dist/cli-analyze.d.ts +1 -0
- package/dist/cli-analyze.js +61 -0
- package/dist/cli-coverage.d.ts +1 -0
- package/dist/cli-coverage.js +329 -0
- package/dist/cli-emit.d.ts +10 -0
- package/dist/cli-emit.js +398 -0
- package/dist/cli-module-graph.d.ts +18 -0
- package/dist/cli-module-graph.js +123 -0
- package/dist/cli-package-source.d.ts +5 -0
- package/dist/cli-package-source.js +116 -0
- package/dist/cli-project.d.ts +2 -0
- package/dist/cli-project.js +60 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +199 -0
- package/dist/compiler.d.ts +228 -0
- package/dist/compiler.js +1029 -0
- package/dist/conversion/algebra.d.ts +218 -0
- package/dist/conversion/algebra.js +155 -0
- package/dist/conversion/build.d.ts +67 -0
- package/dist/conversion/build.js +1378 -0
- package/dist/conversion/derive.d.ts +37 -0
- package/dist/conversion/derive.js +260 -0
- package/dist/conversion/graph-validation.d.ts +8 -0
- package/dist/conversion/graph-validation.js +97 -0
- package/dist/conversion/native-callable-adapter.d.ts +13 -0
- package/dist/conversion/native-callable-adapter.js +53 -0
- package/dist/conversion/native-class-reference.d.ts +12 -0
- package/dist/conversion/native-class-reference.js +39 -0
- package/dist/conversion/native-payload-transport.d.ts +25 -0
- package/dist/conversion/native-payload-transport.js +33 -0
- package/dist/conversion/native-selection.d.ts +49 -0
- package/dist/conversion/native-selection.js +135 -0
- package/dist/conversion/native-sum.d.ts +42 -0
- package/dist/conversion/native-sum.js +115 -0
- package/dist/conversion/nodes.d.ts +55 -0
- package/dist/conversion/nodes.js +91 -0
- package/dist/conversion/operand-view.d.ts +14 -0
- package/dist/conversion/operand-view.js +20 -0
- package/dist/conversion/record-view.d.ts +157 -0
- package/dist/conversion/record-view.js +273 -0
- package/dist/conversion/registry.d.ts +217 -0
- package/dist/conversion/registry.js +1 -0
- package/dist/diagnostics/model.d.ts +76 -0
- package/dist/diagnostics/model.js +60 -0
- package/dist/diagnostics/sweep.d.ts +31 -0
- package/dist/diagnostics/sweep.js +112 -0
- package/dist/identity/ids.d.ts +179 -0
- package/dist/identity/ids.js +212 -0
- package/dist/ir/absent-class-arm.d.ts +48 -0
- package/dist/ir/absent-class-arm.js +157 -0
- package/dist/ir/borrow-effects.d.ts +23 -0
- package/dist/ir/borrow-effects.js +151 -0
- package/dist/ir/borrowed-call-arguments.d.ts +40 -0
- package/dist/ir/borrowed-call-arguments.js +117 -0
- package/dist/ir/build.d.ts +168 -0
- package/dist/ir/build.js +459 -0
- package/dist/ir/call-dispatch.d.ts +38 -0
- package/dist/ir/call-dispatch.js +502 -0
- package/dist/ir/call-entry.d.ts +142 -0
- package/dist/ir/call-entry.js +386 -0
- package/dist/ir/callable-class-flow.d.ts +27 -0
- package/dist/ir/callable-class-flow.js +1386 -0
- package/dist/ir/callable-field-slots.d.ts +22 -0
- package/dist/ir/callable-field-slots.js +166 -0
- package/dist/ir/callable-identity-demand.d.ts +52 -0
- package/dist/ir/callable-identity-demand.js +460 -0
- package/dist/ir/callable-member-candidates.d.ts +9 -0
- package/dist/ir/callable-member-candidates.js +39 -0
- package/dist/ir/callable-records.d.ts +21 -0
- package/dist/ir/callable-records.js +411 -0
- package/dist/ir/captures.d.ts +26 -0
- package/dist/ir/captures.js +335 -0
- package/dist/ir/certificate.d.ts +45 -0
- package/dist/ir/certificate.js +47 -0
- package/dist/ir/certify/carrier-keys.d.ts +73 -0
- package/dist/ir/certify/carrier-keys.js +221 -0
- package/dist/ir/certify/function-source.d.ts +4 -0
- package/dist/ir/certify/function-source.js +28 -0
- package/dist/ir/certify/has-property-key.d.ts +88 -0
- package/dist/ir/certify/has-property-key.js +116 -0
- package/dist/ir/certify/instanceof-key.d.ts +24 -0
- package/dist/ir/certify/instanceof-key.js +35 -0
- package/dist/ir/certify/property-access-keys.d.ts +172 -0
- package/dist/ir/certify/property-access-keys.js +291 -0
- package/dist/ir/certify/property-access.d.ts +3 -0
- package/dist/ir/certify/property-access.js +597 -0
- package/dist/ir/certify/runtime-helper.d.ts +3 -0
- package/dist/ir/certify/runtime-helper.js +326 -0
- package/dist/ir/certify/typeof-operand.d.ts +14 -0
- package/dist/ir/certify/typeof-operand.js +16 -0
- package/dist/ir/certify.d.ts +123 -0
- package/dist/ir/certify.js +481 -0
- package/dist/ir/class-evaluation.d.ts +26 -0
- package/dist/ir/class-evaluation.js +50 -0
- package/dist/ir/class-static-fields.d.ts +60 -0
- package/dist/ir/class-static-fields.js +108 -0
- package/dist/ir/construct-entry.d.ts +26 -0
- package/dist/ir/construct-entry.js +117 -0
- package/dist/ir/dead-values.d.ts +90 -0
- package/dist/ir/dead-values.js +184 -0
- package/dist/ir/deferral.d.ts +99 -0
- package/dist/ir/deferral.js +409 -0
- package/dist/ir/dense-loops.d.ts +230 -0
- package/dist/ir/dense-loops.js +697 -0
- package/dist/ir/dominance.d.ts +82 -0
- package/dist/ir/dominance.js +268 -0
- package/dist/ir/emission-representations.d.ts +71 -0
- package/dist/ir/emission-representations.js +350 -0
- package/dist/ir/facts.d.ts +218 -0
- package/dist/ir/facts.js +181 -0
- package/dist/ir/fixed-data-definition.d.ts +19 -0
- package/dist/ir/fixed-data-definition.js +49 -0
- package/dist/ir/generator-split.d.ts +38 -0
- package/dist/ir/generator-split.js +329 -0
- package/dist/ir/hoist.d.ts +55 -0
- package/dist/ir/hoist.js +375 -0
- package/dist/ir/instantiation.d.ts +61 -0
- package/dist/ir/instantiation.js +137 -0
- package/dist/ir/integer-storage.d.ts +170 -0
- package/dist/ir/integer-storage.js +822 -0
- package/dist/ir/integers.d.ts +161 -0
- package/dist/ir/integers.js +539 -0
- package/dist/ir/integrity-restrictions.d.ts +50 -0
- package/dist/ir/integrity-restrictions.js +118 -0
- package/dist/ir/local-iterators.d.ts +4 -0
- package/dist/ir/local-iterators.js +27 -0
- package/dist/ir/lower-allocation.d.ts +4 -0
- package/dist/ir/lower-allocation.js +325 -0
- package/dist/ir/lower-completion.d.ts +15 -0
- package/dist/ir/lower-completion.js +25 -0
- package/dist/ir/lower-destructuring.d.ts +5 -0
- package/dist/ir/lower-destructuring.js +693 -0
- package/dist/ir/lower-element.d.ts +29 -0
- package/dist/ir/lower-element.js +111 -0
- package/dist/ir/lower-exceptions.d.ts +47 -0
- package/dist/ir/lower-exceptions.js +92 -0
- package/dist/ir/lower-flow.d.ts +137 -0
- package/dist/ir/lower-flow.js +600 -0
- package/dist/ir/lower-graph.d.ts +218 -0
- package/dist/ir/lower-graph.js +687 -0
- package/dist/ir/lower-invocation.d.ts +4 -0
- package/dist/ir/lower-invocation.js +514 -0
- package/dist/ir/lower-narrow.d.ts +53 -0
- package/dist/ir/lower-narrow.js +320 -0
- package/dist/ir/lower-operands.d.ts +272 -0
- package/dist/ir/lower-operands.js +461 -0
- package/dist/ir/lower-property.d.ts +21 -0
- package/dist/ir/lower-property.js +132 -0
- package/dist/ir/lower-protocol.d.ts +11 -0
- package/dist/ir/lower-protocol.js +118 -0
- package/dist/ir/lower-short-circuit.d.ts +41 -0
- package/dist/ir/lower-short-circuit.js +63 -0
- package/dist/ir/lower.d.ts +82 -0
- package/dist/ir/lower.js +1346 -0
- package/dist/ir/model.d.ts +1474 -0
- package/dist/ir/model.js +6 -0
- package/dist/ir/native-absent-property.d.ts +3 -0
- package/dist/ir/native-absent-property.js +13 -0
- package/dist/ir/native-array-transport.d.ts +7 -0
- package/dist/ir/native-array-transport.js +46 -0
- package/dist/ir/native-callable-bind.d.ts +9 -0
- package/dist/ir/native-callable-bind.js +30 -0
- package/dist/ir/native-carrier-predicate.d.ts +34 -0
- package/dist/ir/native-carrier-predicate.js +49 -0
- package/dist/ir/native-class-accessor.d.ts +18 -0
- package/dist/ir/native-class-accessor.js +52 -0
- package/dist/ir/native-class-construction.d.ts +16 -0
- package/dist/ir/native-class-construction.js +71 -0
- package/dist/ir/native-class-initialization.d.ts +15 -0
- package/dist/ir/native-class-initialization.js +56 -0
- package/dist/ir/native-class-origins.d.ts +13 -0
- package/dist/ir/native-class-origins.js +237 -0
- package/dist/ir/native-dictionary-transport.d.ts +6 -0
- package/dist/ir/native-dictionary-transport.js +37 -0
- package/dist/ir/native-enumeration.d.ts +14 -0
- package/dist/ir/native-enumeration.js +26 -0
- package/dist/ir/native-equality.d.ts +10 -0
- package/dist/ir/native-equality.js +18 -0
- package/dist/ir/native-field-owner.d.ts +37 -0
- package/dist/ir/native-field-owner.js +183 -0
- package/dist/ir/native-fixed-layout.d.ts +41 -0
- package/dist/ir/native-fixed-layout.js +232 -0
- package/dist/ir/native-host-construction.d.ts +53 -0
- package/dist/ir/native-host-construction.js +62 -0
- package/dist/ir/native-key-query.d.ts +4 -0
- package/dist/ir/native-key-query.js +38 -0
- package/dist/ir/native-merge-transport.d.ts +25 -0
- package/dist/ir/native-merge-transport.js +71 -0
- package/dist/ir/native-record-index-transport.d.ts +11 -0
- package/dist/ir/native-record-index-transport.js +34 -0
- package/dist/ir/native-record-index.d.ts +12 -0
- package/dist/ir/native-record-index.js +27 -0
- package/dist/ir/native-reflect-field.d.ts +5 -0
- package/dist/ir/native-reflect-field.js +33 -0
- package/dist/ir/native-sequence-transport.d.ts +7 -0
- package/dist/ir/native-sequence-transport.js +53 -0
- package/dist/ir/numeric-intrinsics.d.ts +13 -0
- package/dist/ir/numeric-intrinsics.js +57 -0
- package/dist/ir/object-value-conversions.d.ts +20 -0
- package/dist/ir/object-value-conversions.js +50 -0
- package/dist/ir/physical-class-reflection.d.ts +9 -0
- package/dist/ir/physical-class-reflection.js +57 -0
- package/dist/ir/presence-proof.d.ts +42 -0
- package/dist/ir/presence-proof.js +490 -0
- package/dist/ir/program-facts.d.ts +106 -0
- package/dist/ir/program-facts.js +319 -0
- package/dist/ir/proven-branches.d.ts +16 -0
- package/dist/ir/proven-branches.js +219 -0
- package/dist/ir/queries.d.ts +41 -0
- package/dist/ir/queries.js +213 -0
- package/dist/ir/reflection-demand.d.ts +64 -0
- package/dist/ir/reflection-demand.js +1394 -0
- package/dist/ir/refusal.d.ts +43 -0
- package/dist/ir/refusal.js +28 -0
- package/dist/ir/shake.d.ts +37 -0
- package/dist/ir/shake.js +1078 -0
- package/dist/ir/static-callables.d.ts +11 -0
- package/dist/ir/static-callables.js +163 -0
- package/dist/ir/string-layout-reuse.d.ts +13 -0
- package/dist/ir/string-layout-reuse.js +39 -0
- package/dist/ir/string-length-reuse.d.ts +8 -0
- package/dist/ir/string-length-reuse.js +47 -0
- package/dist/ir/transfer.d.ts +78 -0
- package/dist/ir/transfer.js +270 -0
- package/dist/ir/type-query-results.d.ts +25 -0
- package/dist/ir/type-query-results.js +96 -0
- package/dist/ir/typed-property-access.d.ts +100 -0
- package/dist/ir/typed-property-access.js +161 -0
- package/dist/ir/verify.d.ts +19 -0
- package/dist/ir/verify.js +355 -0
- package/dist/plugins/apple/constructors.d.ts +112 -0
- package/dist/plugins/apple/constructors.js +217 -0
- package/dist/plugins/apple/host.d.ts +181 -0
- package/dist/plugins/apple/host.js +262 -0
- package/dist/plugins/apple/jsx.d.ts +2 -0
- package/dist/plugins/apple/jsx.js +293 -0
- package/dist/plugins/apple/members.d.ts +16 -0
- package/dist/plugins/apple/members.js +190 -0
- package/dist/plugins/apple/plugin.d.ts +2 -0
- package/dist/plugins/apple/plugin.js +156 -0
- package/dist/plugins/gea/component-classes.d.ts +25 -0
- package/dist/plugins/gea/component-classes.js +162 -0
- package/dist/plugins/gea/component-inline.d.ts +13 -0
- package/dist/plugins/gea/component-inline.js +532 -0
- package/dist/plugins/gea/constructors.d.ts +23 -0
- package/dist/plugins/gea/constructors.js +100 -0
- package/dist/plugins/gea/contract.d.ts +150 -0
- package/dist/plugins/gea/contract.js +195 -0
- package/dist/plugins/gea/element-ref.d.ts +31 -0
- package/dist/plugins/gea/element-ref.js +45 -0
- package/dist/plugins/gea/host.d.ts +520 -0
- package/dist/plugins/gea/host.js +762 -0
- package/dist/plugins/gea/lower.d.ts +6 -0
- package/dist/plugins/gea/lower.js +195 -0
- package/dist/plugins/gea/members.d.ts +22 -0
- package/dist/plugins/gea/members.js +221 -0
- package/dist/plugins/gea/plugin.d.ts +22 -0
- package/dist/plugins/gea/plugin.js +307 -0
- package/dist/plugins/gea/prelude.d.ts +78 -0
- package/dist/plugins/gea/prelude.js +153 -0
- package/dist/plugins/gea/producer.d.ts +5 -0
- package/dist/plugins/gea/producer.js +52 -0
- package/dist/plugins/gea/reactive-slots.d.ts +49 -0
- package/dist/plugins/gea/reactive-slots.js +578 -0
- package/dist/plugins/gea/render-bridge.d.ts +6 -0
- package/dist/plugins/gea/render-bridge.js +281 -0
- package/dist/plugins/gea/slots.d.ts +15 -0
- package/dist/plugins/gea/slots.js +36 -0
- package/dist/plugins/gea/template-analysis.d.ts +151 -0
- package/dist/plugins/gea/template-analysis.js +346 -0
- package/dist/plugins/gea/user-agent-styles.d.ts +9 -0
- package/dist/plugins/gea/user-agent-styles.js +94 -0
- package/dist/plugins/installed.d.ts +19 -0
- package/dist/plugins/installed.js +21 -0
- package/dist/plugins/load.d.ts +7 -0
- package/dist/plugins/load.js +207 -0
- package/dist/plugins/model.d.ts +735 -0
- package/dist/plugins/model.js +47 -0
- package/dist/plugins/webgl/host.d.ts +77 -0
- package/dist/plugins/webgl/host.js +162 -0
- package/dist/plugins/webgl/plugin.d.ts +40 -0
- package/dist/plugins/webgl/plugin.js +99 -0
- package/dist/preflight/obligations.d.ts +206 -0
- package/dist/preflight/obligations.js +36 -0
- package/dist/preflight/report.d.ts +20 -0
- package/dist/preflight/report.js +61 -0
- package/dist/preflight/run.d.ts +39 -0
- package/dist/preflight/run.js +403 -0
- package/dist/project-preparation.d.ts +33 -0
- package/dist/project-preparation.js +314 -0
- package/dist/projection/abi.d.ts +82 -0
- package/dist/projection/abi.js +349 -0
- package/dist/projection/apply-arguments.d.ts +12 -0
- package/dist/projection/apply-arguments.js +20 -0
- package/dist/projection/bindings.d.ts +250 -0
- package/dist/projection/bindings.js +340 -0
- package/dist/projection/callee.d.ts +196 -0
- package/dist/projection/callee.js +444 -0
- package/dist/projection/class-property-presence.d.ts +28 -0
- package/dist/projection/class-property-presence.js +58 -0
- package/dist/projection/class-prototype.d.ts +5 -0
- package/dist/projection/class-prototype.js +23 -0
- package/dist/projection/class-storage.d.ts +26 -0
- package/dist/projection/class-storage.js +236 -0
- package/dist/projection/classes.d.ts +283 -0
- package/dist/projection/classes.js +944 -0
- package/dist/projection/coercions.d.ts +20 -0
- package/dist/projection/coercions.js +33 -0
- package/dist/projection/dispatch.d.ts +167 -0
- package/dist/projection/dispatch.js +379 -0
- package/dist/projection/fields.d.ts +123 -0
- package/dist/projection/fields.js +383 -0
- package/dist/projection/instance-test.d.ts +78 -0
- package/dist/projection/instance-test.js +156 -0
- package/dist/projection/slots.d.ts +146 -0
- package/dist/projection/slots.js +663 -0
- package/dist/projection/synthesized-abi.d.ts +61 -0
- package/dist/projection/synthesized-abi.js +94 -0
- package/dist/representation/array-index.d.ts +14 -0
- package/dist/representation/array-index.js +17 -0
- package/dist/representation/callable-object.d.ts +3 -0
- package/dist/representation/callable-object.js +6 -0
- package/dist/representation/collections.d.ts +84 -0
- package/dist/representation/collections.js +139 -0
- package/dist/representation/derive.d.ts +159 -0
- package/dist/representation/derive.js +2546 -0
- package/dist/representation/difference.d.ts +30 -0
- package/dist/representation/difference.js +240 -0
- package/dist/representation/field-descriptor-policy.d.ts +19 -0
- package/dist/representation/field-descriptor-policy.js +39 -0
- package/dist/representation/function-constructor.d.ts +13 -0
- package/dist/representation/function-constructor.js +9 -0
- package/dist/representation/host-abi.d.ts +32 -0
- package/dist/representation/host-abi.js +97 -0
- package/dist/representation/host-templates.d.ts +67 -0
- package/dist/representation/host-templates.js +94 -0
- package/dist/representation/intersection.d.ts +84 -0
- package/dist/representation/intersection.js +149 -0
- package/dist/representation/literal-destination.d.ts +43 -0
- package/dist/representation/literal-destination.js +133 -0
- package/dist/representation/merge.d.ts +18 -0
- package/dist/representation/merge.js +83 -0
- package/dist/representation/model.d.ts +1160 -0
- package/dist/representation/model.js +1019 -0
- package/dist/representation/numeric-index.d.ts +13 -0
- package/dist/representation/numeric-index.js +29 -0
- package/dist/representation/object-shape.d.ts +109 -0
- package/dist/representation/object-shape.js +123 -0
- package/dist/representation/optional.d.ts +12 -0
- package/dist/representation/optional.js +87 -0
- package/dist/representation/plan.d.ts +60 -0
- package/dist/representation/plan.js +78 -0
- package/dist/representation/policies.d.ts +589 -0
- package/dist/representation/policies.js +107 -0
- package/dist/representation/primitive-domain.d.ts +1 -0
- package/dist/representation/primitive-domain.js +1 -0
- package/dist/representation/primitives.d.ts +44 -0
- package/dist/representation/primitives.js +78 -0
- package/dist/representation/publish.d.ts +49 -0
- package/dist/representation/publish.js +648 -0
- package/dist/representation/record-fields.d.ts +96 -0
- package/dist/representation/record-fields.js +116 -0
- package/dist/representation/template-object.d.ts +11 -0
- package/dist/representation/template-object.js +26 -0
- package/dist/representation/union.d.ts +30 -0
- package/dist/representation/union.js +324 -0
- package/dist/representation/value-records.d.ts +3 -0
- package/dist/representation/value-records.js +307 -0
- package/dist/representation/verify.d.ts +17 -0
- package/dist/representation/verify.js +221 -0
- package/dist/semantics/alias-this-field-declaration-transform.d.ts +4 -0
- package/dist/semantics/alias-this-field-declaration-transform.js +207 -0
- package/dist/semantics/ambient-type-realization-transform.d.ts +62 -0
- package/dist/semantics/ambient-type-realization-transform.js +168 -0
- package/dist/semantics/ambient.d.ts +24 -0
- package/dist/semantics/ambient.js +119 -0
- package/dist/semantics/borrowed-builtin-call-bind-source-transform.d.ts +4 -0
- package/dist/semantics/borrowed-builtin-call-bind-source-transform.js +341 -0
- package/dist/semantics/callable-origins.d.ts +46 -0
- package/dist/semantics/callable-origins.js +354 -0
- package/dist/semantics/class-alias.d.ts +7 -0
- package/dist/semantics/class-alias.js +37 -0
- package/dist/semantics/class-heritage.d.ts +34 -0
- package/dist/semantics/class-heritage.js +104 -0
- package/dist/semantics/commonjs-wrapper.d.ts +69 -0
- package/dist/semantics/commonjs-wrapper.js +231 -0
- package/dist/semantics/constructor-slot-subclasses.d.ts +28 -0
- package/dist/semantics/constructor-slot-subclasses.js +112 -0
- package/dist/semantics/declaration-overlay-transform.d.ts +35 -0
- package/dist/semantics/declaration-overlay-transform.js +2157 -0
- package/dist/semantics/define-property-source-transform.d.ts +4 -0
- package/dist/semantics/define-property-source-transform.js +437 -0
- package/dist/semantics/diagnostic-source-preparation.d.ts +24 -0
- package/dist/semantics/diagnostic-source-preparation.js +82 -0
- package/dist/semantics/documentation-ranges.d.ts +22 -0
- package/dist/semantics/documentation-ranges.js +36 -0
- package/dist/semantics/dynamic-fallback.d.ts +86 -0
- package/dist/semantics/dynamic-fallback.js +249 -0
- package/dist/semantics/frontend-timing.d.ts +6 -0
- package/dist/semantics/frontend-timing.js +35 -0
- package/dist/semantics/frontend.d.ts +504 -0
- package/dist/semantics/frontend.js +1157 -0
- package/dist/semantics/host-declaration-provenance.d.ts +11 -0
- package/dist/semantics/host-declaration-provenance.js +18 -0
- package/dist/semantics/host-methods.d.ts +24 -0
- package/dist/semantics/host-methods.js +74 -0
- package/dist/semantics/host-protocols.d.ts +429 -0
- package/dist/semantics/host-protocols.js +1501 -0
- package/dist/semantics/inherited-accessor.d.ts +7 -0
- package/dist/semantics/inherited-accessor.js +48 -0
- package/dist/semantics/interface-families.d.ts +70 -0
- package/dist/semantics/interface-families.js +180 -0
- package/dist/semantics/interface-implementors.d.ts +53 -0
- package/dist/semantics/interface-implementors.js +87 -0
- package/dist/semantics/jsdoc-namepath-transform.d.ts +4 -0
- package/dist/semantics/jsdoc-namepath-transform.js +85 -0
- package/dist/semantics/model/coverage.d.ts +68 -0
- package/dist/semantics/model/coverage.js +73 -0
- package/dist/semantics/model/edges.d.ts +103 -0
- package/dist/semantics/model/edges.js +20 -0
- package/dist/semantics/model/graph.d.ts +55 -0
- package/dist/semantics/model/graph.js +129 -0
- package/dist/semantics/model/operands.d.ts +159 -0
- package/dist/semantics/model/operands.js +26 -0
- package/dist/semantics/model/operations.d.ts +496 -0
- package/dist/semantics/model/operations.js +2 -0
- package/dist/semantics/model/primitive-domain.d.ts +26 -0
- package/dist/semantics/model/primitive-domain.js +38 -0
- package/dist/semantics/model/selected-signature.d.ts +261 -0
- package/dist/semantics/model/selected-signature.js +55 -0
- package/dist/semantics/model/structural-type-table.d.ts +93 -0
- package/dist/semantics/model/structural-type-table.js +237 -0
- package/dist/semantics/model/structural-types.d.ts +367 -0
- package/dist/semantics/model/structural-types.js +200 -0
- package/dist/semantics/module-resolution.d.ts +23 -0
- package/dist/semantics/module-resolution.js +227 -0
- package/dist/semantics/new-callee-class-tag-source-transform.d.ts +4 -0
- package/dist/semantics/new-callee-class-tag-source-transform.js +64 -0
- package/dist/semantics/node-project.d.ts +13 -0
- package/dist/semantics/node-project.js +107 -0
- package/dist/semantics/node-source-hooks.d.ts +1 -0
- package/dist/semantics/node-source-hooks.js +63 -0
- package/dist/semantics/normalize/absent-globals.d.ts +143 -0
- package/dist/semantics/normalize/absent-globals.js +191 -0
- package/dist/semantics/normalize/arguments-objects.d.ts +43 -0
- package/dist/semantics/normalize/arguments-objects.js +60 -0
- package/dist/semantics/normalize/asserted-arm-absence.d.ts +28 -0
- package/dist/semantics/normalize/asserted-arm-absence.js +61 -0
- package/dist/semantics/normalize/assignment-patterns.d.ts +70 -0
- package/dist/semantics/normalize/assignment-patterns.js +147 -0
- package/dist/semantics/normalize/bag-absence.d.ts +8 -0
- package/dist/semantics/normalize/bag-absence.js +42 -0
- package/dist/semantics/normalize/binding-fixpoint.d.ts +36 -0
- package/dist/semantics/normalize/binding-fixpoint.js +140 -0
- package/dist/semantics/normalize/callback-parameter-contracts.d.ts +16 -0
- package/dist/semantics/normalize/callback-parameter-contracts.js +91 -0
- package/dist/semantics/normalize/cells/agreement.d.ts +46 -0
- package/dist/semantics/normalize/cells/agreement.js +34 -0
- package/dist/semantics/normalize/cells/candidates.d.ts +17 -0
- package/dist/semantics/normalize/cells/candidates.js +35 -0
- package/dist/semantics/normalize/cells/facts.d.ts +19 -0
- package/dist/semantics/normalize/cells/facts.js +90 -0
- package/dist/semantics/normalize/cells/index.d.ts +10 -0
- package/dist/semantics/normalize/cells/index.js +6 -0
- package/dist/semantics/normalize/cells/model.d.ts +98 -0
- package/dist/semantics/normalize/cells/model.js +2 -0
- package/dist/semantics/normalize/cells/policies/bag.d.ts +44 -0
- package/dist/semantics/normalize/cells/policies/bag.js +114 -0
- package/dist/semantics/normalize/cells/policies/collection.d.ts +42 -0
- package/dist/semantics/normalize/cells/policies/collection.js +218 -0
- package/dist/semantics/normalize/cells/policies/field.d.ts +28 -0
- package/dist/semantics/normalize/cells/policies/field.js +40 -0
- package/dist/semantics/normalize/cells/policies/index.d.ts +49 -0
- package/dist/semantics/normalize/cells/policies/index.js +58 -0
- package/dist/semantics/normalize/cells/policies/local.d.ts +18 -0
- package/dist/semantics/normalize/cells/policies/local.js +37 -0
- package/dist/semantics/normalize/cells/policies/parameter.d.ts +28 -0
- package/dist/semantics/normalize/cells/policies/parameter.js +39 -0
- package/dist/semantics/normalize/cells/policies/return.d.ts +26 -0
- package/dist/semantics/normalize/cells/policies/return.js +45 -0
- package/dist/semantics/normalize/cells/policies/shared.d.ts +33 -0
- package/dist/semantics/normalize/cells/policies/shared.js +45 -0
- package/dist/semantics/normalize/cells/policy.d.ts +72 -0
- package/dist/semantics/normalize/cells/policy.js +18 -0
- package/dist/semantics/normalize/cells/registry.d.ts +14 -0
- package/dist/semantics/normalize/cells/registry.js +17 -0
- package/dist/semantics/normalize/census-refusal.d.ts +62 -0
- package/dist/semantics/normalize/census-refusal.js +27 -0
- package/dist/semantics/normalize/census.d.ts +109 -0
- package/dist/semantics/normalize/census.js +667 -0
- package/dist/semantics/normalize/collection-bindings.d.ts +278 -0
- package/dist/semantics/normalize/collection-bindings.js +677 -0
- package/dist/semantics/normalize/commonjs-module-record.d.ts +21 -0
- package/dist/semantics/normalize/commonjs-module-record.js +289 -0
- package/dist/semantics/normalize/commonjs-require.d.ts +13 -0
- package/dist/semantics/normalize/commonjs-require.js +1527 -0
- package/dist/semantics/normalize/contribution.d.ts +63 -0
- package/dist/semantics/normalize/contribution.js +172 -0
- package/dist/semantics/normalize/dead-typeof-guards.d.ts +64 -0
- package/dist/semantics/normalize/dead-typeof-guards.js +152 -0
- package/dist/semantics/normalize/deferred-intrinsic-protocols.d.ts +57 -0
- package/dist/semantics/normalize/deferred-intrinsic-protocols.js +109 -0
- package/dist/semantics/normalize/derived-expression-type.d.ts +1070 -0
- package/dist/semantics/normalize/derived-expression-type.js +3463 -0
- package/dist/semantics/normalize/evaluation-order.d.ts +16 -0
- package/dist/semantics/normalize/evaluation-order.js +37 -0
- package/dist/semantics/normalize/field-bindings.d.ts +167 -0
- package/dist/semantics/normalize/field-bindings.js +1125 -0
- package/dist/semantics/normalize/flow/array-element-continuation.d.ts +27 -0
- package/dist/semantics/normalize/flow/array-element-continuation.js +1452 -0
- package/dist/semantics/normalize/flow/callable-array-origins.d.ts +42 -0
- package/dist/semantics/normalize/flow/callable-array-origins.js +318 -0
- package/dist/semantics/normalize/flow/callable-completions.d.ts +45 -0
- package/dist/semantics/normalize/flow/callable-completions.js +82 -0
- package/dist/semantics/normalize/flow/callable-reach.d.ts +237 -0
- package/dist/semantics/normalize/flow/callable-reach.js +7174 -0
- package/dist/semantics/normalize/flow/class-family-member-read.d.ts +16 -0
- package/dist/semantics/normalize/flow/class-family-member-read.js +992 -0
- package/dist/semantics/normalize/flow/collection-value-continuation.d.ts +21 -0
- package/dist/semantics/normalize/flow/collection-value-continuation.js +192 -0
- package/dist/semantics/normalize/flow/component-solver.d.ts +199 -0
- package/dist/semantics/normalize/flow/component-solver.js +587 -0
- package/dist/semantics/normalize/flow/computed-key-set.d.ts +84 -0
- package/dist/semantics/normalize/flow/computed-key-set.js +660 -0
- package/dist/semantics/normalize/flow/export-importers.d.ts +24 -0
- package/dist/semantics/normalize/flow/export-importers.js +269 -0
- package/dist/semantics/normalize/flow/host-text-sink.d.ts +25 -0
- package/dist/semantics/normalize/flow/host-text-sink.js +87 -0
- package/dist/semantics/normalize/flow/intrinsic-array-callback-frames.d.ts +84 -0
- package/dist/semantics/normalize/flow/intrinsic-array-callback-frames.js +180 -0
- package/dist/semantics/normalize/flow/intrinsic-data-definition.d.ts +35 -0
- package/dist/semantics/normalize/flow/intrinsic-data-definition.js +140 -0
- package/dist/semantics/normalize/flow/invocation-facts.d.ts +98 -0
- package/dist/semantics/normalize/flow/invocation-facts.js +257 -0
- package/dist/semantics/normalize/flow/member-call-forwarding.d.ts +122 -0
- package/dist/semantics/normalize/flow/member-call-forwarding.js +835 -0
- package/dist/semantics/normalize/flow/model.d.ts +357 -0
- package/dist/semantics/normalize/flow/model.js +177 -0
- package/dist/semantics/normalize/flow/native-collection-protocol.d.ts +24 -0
- package/dist/semantics/normalize/flow/native-collection-protocol.js +252 -0
- package/dist/semantics/normalize/flow/node-path-token.d.ts +3 -0
- package/dist/semantics/normalize/flow/node-path-token.js +53 -0
- package/dist/semantics/normalize/flow/object-binding-continuation.d.ts +11 -0
- package/dist/semantics/normalize/flow/object-binding-continuation.js +42 -0
- package/dist/semantics/normalize/flow/origin-authority.d.ts +56 -0
- package/dist/semantics/normalize/flow/origin-authority.js +2 -0
- package/dist/semantics/normalize/flow/owned-class-receivers.d.ts +35 -0
- package/dist/semantics/normalize/flow/owned-class-receivers.js +191 -0
- package/dist/semantics/normalize/flow/parameter-values.d.ts +27 -0
- package/dist/semantics/normalize/flow/parameter-values.js +251 -0
- package/dist/semantics/normalize/flow/proof-hypotheses.d.ts +66 -0
- package/dist/semantics/normalize/flow/proof-hypotheses.js +162 -0
- package/dist/semantics/normalize/flow/record-alias-closure.d.ts +27 -0
- package/dist/semantics/normalize/flow/record-alias-closure.js +298 -0
- package/dist/semantics/normalize/flow/seeded-origins.d.ts +43 -0
- package/dist/semantics/normalize/flow/seeded-origins.js +54 -0
- package/dist/semantics/normalize/flow/source-class-data.d.ts +132 -0
- package/dist/semantics/normalize/flow/source-class-data.js +838 -0
- package/dist/semantics/normalize/flow/source-class-instanceof.d.ts +13 -0
- package/dist/semantics/normalize/flow/source-class-instanceof.js +37 -0
- package/dist/semantics/normalize/flow/source-class-static-data.d.ts +16 -0
- package/dist/semantics/normalize/flow/source-class-static-data.js +47 -0
- package/dist/semantics/normalize/flow/source-construction-frames.d.ts +12 -0
- package/dist/semantics/normalize/flow/source-construction-frames.js +118 -0
- package/dist/semantics/normalize/flow/source-invocation-frame-layout.d.ts +34 -0
- package/dist/semantics/normalize/flow/source-invocation-frame-layout.js +78 -0
- package/dist/semantics/normalize/flow/source-invocation-receiver.d.ts +37 -0
- package/dist/semantics/normalize/flow/source-invocation-receiver.js +95 -0
- package/dist/semantics/normalize/flow/source-prototype-method-identity.d.ts +23 -0
- package/dist/semantics/normalize/flow/source-prototype-method-identity.js +81 -0
- package/dist/semantics/normalize/flow/source-record-data.d.ts +29 -0
- package/dist/semantics/normalize/flow/source-record-data.js +626 -0
- package/dist/semantics/normalize/flow/source-value-session.d.ts +77 -0
- package/dist/semantics/normalize/flow/source-value-session.js +3089 -0
- package/dist/semantics/normalize/flow/targets.d.ts +118 -0
- package/dist/semantics/normalize/flow/targets.js +405 -0
- package/dist/semantics/normalize/flow/value-flow.d.ts +36 -0
- package/dist/semantics/normalize/flow/value-flow.js +823 -0
- package/dist/semantics/normalize/flow/value-provenance.d.ts +31 -0
- package/dist/semantics/normalize/flow/value-provenance.js +112 -0
- package/dist/semantics/normalize/gating.d.ts +51 -0
- package/dist/semantics/normalize/gating.js +560 -0
- package/dist/semantics/normalize/generic-function-choice.d.ts +31 -0
- package/dist/semantics/normalize/generic-function-choice.js +115 -0
- package/dist/semantics/normalize/global-host-mutations.d.ts +51 -0
- package/dist/semantics/normalize/global-host-mutations.js +5989 -0
- package/dist/semantics/normalize/host-effect-contracts.d.ts +77 -0
- package/dist/semantics/normalize/host-effect-contracts.js +143 -0
- package/dist/semantics/normalize/host-mutation-computed-keys.d.ts +38 -0
- package/dist/semantics/normalize/host-mutation-computed-keys.js +26 -0
- package/dist/semantics/normalize/host-mutation-key-reader.d.ts +66 -0
- package/dist/semantics/normalize/host-mutation-key-reader.js +192 -0
- package/dist/semantics/normalize/host-mutation-keys.d.ts +114 -0
- package/dist/semantics/normalize/host-mutation-keys.js +183 -0
- package/dist/semantics/normalize/identities.d.ts +172 -0
- package/dist/semantics/normalize/identities.js +426 -0
- package/dist/semantics/normalize/implicit-arguments-tuple.d.ts +97 -0
- package/dist/semantics/normalize/implicit-arguments-tuple.js +197 -0
- package/dist/semantics/normalize/implicit-arguments.d.ts +11 -0
- package/dist/semantics/normalize/implicit-arguments.js +39 -0
- package/dist/semantics/normalize/instantiation.d.ts +73 -0
- package/dist/semantics/normalize/instantiation.js +399 -0
- package/dist/semantics/normalize/intrinsic-property-call.d.ts +18 -0
- package/dist/semantics/normalize/intrinsic-property-call.js +69 -0
- package/dist/semantics/normalize/intrinsic-prototype.d.ts +41 -0
- package/dist/semantics/normalize/intrinsic-prototype.js +87 -0
- package/dist/semantics/normalize/intrinsic-static-member.d.ts +14 -0
- package/dist/semantics/normalize/intrinsic-static-member.js +23 -0
- package/dist/semantics/normalize/jsdoc-type-names.d.ts +32 -0
- package/dist/semantics/normalize/jsdoc-type-names.js +512 -0
- package/dist/semantics/normalize/keyof.d.ts +32 -0
- package/dist/semantics/normalize/keyof.js +110 -0
- package/dist/semantics/normalize/local-bindings.d.ts +176 -0
- package/dist/semantics/normalize/local-bindings.js +1826 -0
- package/dist/semantics/normalize/logical-result-type.d.ts +16 -0
- package/dist/semantics/normalize/logical-result-type.js +102 -0
- package/dist/semantics/normalize/namespace-paths.d.ts +57 -0
- package/dist/semantics/normalize/namespace-paths.js +108 -0
- package/dist/semantics/normalize/normalize.d.ts +57 -0
- package/dist/semantics/normalize/normalize.js +68 -0
- package/dist/semantics/normalize/object-bag-bindings.d.ts +305 -0
- package/dist/semantics/normalize/object-bag-bindings.js +1290 -0
- package/dist/semantics/normalize/omitted-stated-parameter.d.ts +53 -0
- package/dist/semantics/normalize/omitted-stated-parameter.js +59 -0
- package/dist/semantics/normalize/open-type-form.d.ts +10 -0
- package/dist/semantics/normalize/open-type-form.js +32 -0
- package/dist/semantics/normalize/parameter-bindings.d.ts +361 -0
- package/dist/semantics/normalize/parameter-bindings.js +3339 -0
- package/dist/semantics/normalize/parameter-slot.d.ts +264 -0
- package/dist/semantics/normalize/parameter-slot.js +491 -0
- package/dist/semantics/normalize/physical-overload-result.d.ts +77 -0
- package/dist/semantics/normalize/physical-overload-result.js +99 -0
- package/dist/semantics/normalize/primitive-property-absence.d.ts +12 -0
- package/dist/semantics/normalize/primitive-property-absence.js +60 -0
- package/dist/semantics/normalize/producer-context.d.ts +376 -0
- package/dist/semantics/normalize/producer-context.js +1 -0
- package/dist/semantics/normalize/producers/allocations.d.ts +3 -0
- package/dist/semantics/normalize/producers/allocations.js +863 -0
- package/dist/semantics/normalize/producers/binding-kind.d.ts +37 -0
- package/dist/semantics/normalize/producers/binding-kind.js +36 -0
- package/dist/semantics/normalize/producers/bindings.d.ts +85 -0
- package/dist/semantics/normalize/producers/bindings.js +710 -0
- package/dist/semantics/normalize/producers/boundary.d.ts +34 -0
- package/dist/semantics/normalize/producers/boundary.js +123 -0
- package/dist/semantics/normalize/producers/class-lifecycle.d.ts +3 -0
- package/dist/semantics/normalize/producers/class-lifecycle.js +902 -0
- package/dist/semantics/normalize/producers/computations.d.ts +3 -0
- package/dist/semantics/normalize/producers/computations.js +613 -0
- package/dist/semantics/normalize/producers/control-loops.d.ts +30 -0
- package/dist/semantics/normalize/producers/control-loops.js +91 -0
- package/dist/semantics/normalize/producers/control.d.ts +30 -0
- package/dist/semantics/normalize/producers/control.js +923 -0
- package/dist/semantics/normalize/producers/declaration-lifecycle.d.ts +3 -0
- package/dist/semantics/normalize/producers/declaration-lifecycle.js +390 -0
- package/dist/semantics/normalize/producers/destructuring.d.ts +45 -0
- package/dist/semantics/normalize/producers/destructuring.js +1180 -0
- package/dist/semantics/normalize/producers/dynamic-language.d.ts +3 -0
- package/dist/semantics/normalize/producers/dynamic-language.js +70 -0
- package/dist/semantics/normalize/producers/erasure.d.ts +51 -0
- package/dist/semantics/normalize/producers/erasure.js +90 -0
- package/dist/semantics/normalize/producers/installed.d.ts +3 -0
- package/dist/semantics/normalize/producers/installed.js +55 -0
- package/dist/semantics/normalize/producers/invocations.d.ts +35 -0
- package/dist/semantics/normalize/producers/invocations.js +1796 -0
- package/dist/semantics/normalize/producers/iteration-yield.d.ts +59 -0
- package/dist/semantics/normalize/producers/iteration-yield.js +235 -0
- package/dist/semantics/normalize/producers/jsx.d.ts +3 -0
- package/dist/semantics/normalize/producers/jsx.js +360 -0
- package/dist/semantics/normalize/producers/mint.d.ts +39 -0
- package/dist/semantics/normalize/producers/mint.js +44 -0
- package/dist/semantics/normalize/producers/nullish.d.ts +16 -0
- package/dist/semantics/normalize/producers/nullish.js +27 -0
- package/dist/semantics/normalize/producers/object-assignment.d.ts +8 -0
- package/dist/semantics/normalize/producers/object-assignment.js +204 -0
- package/dist/semantics/normalize/producers/object-tag.d.ts +9 -0
- package/dist/semantics/normalize/producers/object-tag.js +119 -0
- package/dist/semantics/normalize/producers/optional-chain.d.ts +44 -0
- package/dist/semantics/normalize/producers/optional-chain.js +75 -0
- package/dist/semantics/normalize/producers/properties.d.ts +21 -0
- package/dist/semantics/normalize/producers/properties.js +1053 -0
- package/dist/semantics/normalize/producers/protocol.d.ts +67 -0
- package/dist/semantics/normalize/producers/protocol.js +695 -0
- package/dist/semantics/normalize/producers/references.d.ts +53 -0
- package/dist/semantics/normalize/producers/references.js +1027 -0
- package/dist/semantics/normalize/producers/shared.d.ts +561 -0
- package/dist/semantics/normalize/producers/shared.js +1683 -0
- package/dist/semantics/normalize/producers/spread-arguments.d.ts +72 -0
- package/dist/semantics/normalize/producers/spread-arguments.js +375 -0
- package/dist/semantics/normalize/producers/tagged-template.d.ts +5 -0
- package/dist/semantics/normalize/producers/tagged-template.js +307 -0
- package/dist/semantics/normalize/producers/tuple-spread.d.ts +189 -0
- package/dist/semantics/normalize/producers/tuple-spread.js +279 -0
- package/dist/semantics/normalize/property-key-domain.d.ts +36 -0
- package/dist/semantics/normalize/property-key-domain.js +150 -0
- package/dist/semantics/normalize/reachability.d.ts +189 -0
- package/dist/semantics/normalize/reachability.js +1057 -0
- package/dist/semantics/normalize/reassigned-bindings.d.ts +13 -0
- package/dist/semantics/normalize/reassigned-bindings.js +41 -0
- package/dist/semantics/normalize/record-storage-families.d.ts +11 -0
- package/dist/semantics/normalize/record-storage-families.js +109 -0
- package/dist/semantics/normalize/return-bindings.d.ts +260 -0
- package/dist/semantics/normalize/return-bindings.js +1311 -0
- package/dist/semantics/normalize/return-paths.d.ts +2 -0
- package/dist/semantics/normalize/return-paths.js +28 -0
- package/dist/semantics/normalize/script-global-redefinition.d.ts +44 -0
- package/dist/semantics/normalize/script-global-redefinition.js +75 -0
- package/dist/semantics/normalize/specialization.d.ts +201 -0
- package/dist/semantics/normalize/specialization.js +1824 -0
- package/dist/semantics/normalize/structural-array-element.d.ts +176 -0
- package/dist/semantics/normalize/structural-array-element.js +700 -0
- package/dist/semantics/normalize/structural-array-read.d.ts +13 -0
- package/dist/semantics/normalize/structural-array-read.js +124 -0
- package/dist/semantics/normalize/structural-callable.d.ts +12 -0
- package/dist/semantics/normalize/structural-callable.js +82 -0
- package/dist/semantics/normalize/structural-creation-order.d.ts +32 -0
- package/dist/semantics/normalize/structural-creation-order.js +111 -0
- package/dist/semantics/normalize/structural-declarations.d.ts +395 -0
- package/dist/semantics/normalize/structural-declarations.js +968 -0
- package/dist/semantics/normalize/structural-declared-body.d.ts +25 -0
- package/dist/semantics/normalize/structural-declared-body.js +147 -0
- package/dist/semantics/normalize/structural-generics.d.ts +56 -0
- package/dist/semantics/normalize/structural-generics.js +120 -0
- package/dist/semantics/normalize/structural-indexed-access.d.ts +11 -0
- package/dist/semantics/normalize/structural-indexed-access.js +126 -0
- package/dist/semantics/normalize/structural-instantiated-member.d.ts +64 -0
- package/dist/semantics/normalize/structural-instantiated-member.js +407 -0
- package/dist/semantics/normalize/structural-joins.d.ts +44 -0
- package/dist/semantics/normalize/structural-joins.js +143 -0
- package/dist/semantics/normalize/structural-layout-relevance.d.ts +29 -0
- package/dist/semantics/normalize/structural-layout-relevance.js +391 -0
- package/dist/semantics/normalize/structural-layout-type.d.ts +11 -0
- package/dist/semantics/normalize/structural-layout-type.js +1468 -0
- package/dist/semantics/normalize/structural-leaves.d.ts +49 -0
- package/dist/semantics/normalize/structural-leaves.js +125 -0
- package/dist/semantics/normalize/structural-local-union.d.ts +13 -0
- package/dist/semantics/normalize/structural-local-union.js +133 -0
- package/dist/semantics/normalize/structural-members.d.ts +26 -0
- package/dist/semantics/normalize/structural-members.js +84 -0
- package/dist/semantics/normalize/structural-mutable-method.d.ts +15 -0
- package/dist/semantics/normalize/structural-mutable-method.js +109 -0
- package/dist/semantics/normalize/structural-parts.d.ts +131 -0
- package/dist/semantics/normalize/structural-parts.js +737 -0
- package/dist/semantics/normalize/structural-receiver.d.ts +66 -0
- package/dist/semantics/normalize/structural-receiver.js +551 -0
- package/dist/semantics/normalize/structural-rules.d.ts +112 -0
- package/dist/semantics/normalize/structural-rules.js +93 -0
- package/dist/semantics/normalize/structural-self-reference.d.ts +150 -0
- package/dist/semantics/normalize/structural-self-reference.js +494 -0
- package/dist/semantics/normalize/structural.d.ts +202 -0
- package/dist/semantics/normalize/structural.js +4218 -0
- package/dist/semantics/normalize/unreduced-type-form.d.ts +41 -0
- package/dist/semantics/normalize/unreduced-type-form.js +53 -0
- package/dist/semantics/normalize/unresolvable-names.d.ts +56 -0
- package/dist/semantics/normalize/unresolvable-names.js +140 -0
- package/dist/semantics/package-sources.d.ts +16 -0
- package/dist/semantics/package-sources.js +365 -0
- package/dist/semantics/program.d.ts +151 -0
- package/dist/semantics/program.js +667 -0
- package/dist/semantics/prototype-install-source-transform.d.ts +4 -0
- package/dist/semantics/prototype-install-source-transform.js +341 -0
- package/dist/semantics/prototype-object-class-source-transform.d.ts +4 -0
- package/dist/semantics/prototype-object-class-source-transform.js +525 -0
- package/dist/semantics/prototype-reparenting.d.ts +50 -0
- package/dist/semantics/prototype-reparenting.js +317 -0
- package/dist/semantics/stable-checker.d.ts +10 -0
- package/dist/semantics/stable-checker.js +148 -0
- package/dist/semantics/subclass-member-overlay-transform.d.ts +35 -0
- package/dist/semantics/subclass-member-overlay-transform.js +1418 -0
- package/dist/semantics/symbol-keyed-expando-source-transform.d.ts +4 -0
- package/dist/semantics/symbol-keyed-expando-source-transform.js +66 -0
- package/dist/semantics/this-constructor-source-transform.d.ts +4 -0
- package/dist/semantics/this-constructor-source-transform.js +122 -0
- package/dist/semantics/uninstantiable-classes.d.ts +22 -0
- package/dist/semantics/uninstantiable-classes.js +75 -0
- package/dist/targets/cpp/balanced-units.d.ts +3 -0
- package/dist/targets/cpp/balanced-units.js +58 -0
- package/dist/targets/cpp/borrowed-call-entry.d.ts +30 -0
- package/dist/targets/cpp/borrowed-call-entry.js +68 -0
- package/dist/targets/cpp/captures.d.ts +68 -0
- package/dist/targets/cpp/captures.js +269 -0
- package/dist/targets/cpp/class-layout.d.ts +313 -0
- package/dist/targets/cpp/class-layout.js +483 -0
- package/dist/targets/cpp/class-properties/computed-method-value.d.ts +25 -0
- package/dist/targets/cpp/class-properties/computed-method-value.js +22 -0
- package/dist/targets/cpp/class-properties/emit-class-properties.d.ts +216 -0
- package/dist/targets/cpp/class-properties/emit-class-properties.js +917 -0
- package/dist/targets/cpp/class-properties/native-prototype.d.ts +11 -0
- package/dist/targets/cpp/class-properties/native-prototype.js +101 -0
- package/dist/targets/cpp/class-ref-transport.d.ts +12 -0
- package/dist/targets/cpp/class-ref-transport.js +32 -0
- package/dist/targets/cpp/conversions.d.ts +3 -0
- package/dist/targets/cpp/conversions.js +2027 -0
- package/dist/targets/cpp/deferral-safety.d.ts +82 -0
- package/dist/targets/cpp/deferral-safety.js +86 -0
- package/dist/targets/cpp/direct-call-receivers.d.ts +37 -0
- package/dist/targets/cpp/direct-call-receivers.js +79 -0
- package/dist/targets/cpp/document.d.ts +74 -0
- package/dist/targets/cpp/document.js +106 -0
- package/dist/targets/cpp/emit-allocation.d.ts +60 -0
- package/dist/targets/cpp/emit-allocation.js +573 -0
- package/dist/targets/cpp/emit-arrays.d.ts +119 -0
- package/dist/targets/cpp/emit-arrays.js +1047 -0
- package/dist/targets/cpp/emit-binding-reference.d.ts +17 -0
- package/dist/targets/cpp/emit-binding-reference.js +120 -0
- package/dist/targets/cpp/emit-bindings.d.ts +158 -0
- package/dist/targets/cpp/emit-bindings.js +769 -0
- package/dist/targets/cpp/emit-buffers.d.ts +156 -0
- package/dist/targets/cpp/emit-buffers.js +573 -0
- package/dist/targets/cpp/emit-callable.d.ts +230 -0
- package/dist/targets/cpp/emit-callable.js +2154 -0
- package/dist/targets/cpp/emit-carrier-members.d.ts +406 -0
- package/dist/targets/cpp/emit-carrier-members.js +1224 -0
- package/dist/targets/cpp/emit-coercion.d.ts +26 -0
- package/dist/targets/cpp/emit-coercion.js +39 -0
- package/dist/targets/cpp/emit-context.d.ts +1882 -0
- package/dist/targets/cpp/emit-context.js +904 -0
- package/dist/targets/cpp/emit-dynamic-properties.d.ts +174 -0
- package/dist/targets/cpp/emit-dynamic-properties.js +1249 -0
- package/dist/targets/cpp/emit-equality.d.ts +39 -0
- package/dist/targets/cpp/emit-equality.js +472 -0
- package/dist/targets/cpp/emit-exceptions.d.ts +104 -0
- package/dist/targets/cpp/emit-exceptions.js +513 -0
- package/dist/targets/cpp/emit-field-owner.d.ts +4 -0
- package/dist/targets/cpp/emit-field-owner.js +27 -0
- package/dist/targets/cpp/emit-in.d.ts +31 -0
- package/dist/targets/cpp/emit-in.js +426 -0
- package/dist/targets/cpp/emit-instanceof.d.ts +19 -0
- package/dist/targets/cpp/emit-instanceof.js +601 -0
- package/dist/targets/cpp/emit-integers.d.ts +68 -0
- package/dist/targets/cpp/emit-integers.js +184 -0
- package/dist/targets/cpp/emit-iterator.d.ts +100 -0
- package/dist/targets/cpp/emit-iterator.js +1137 -0
- package/dist/targets/cpp/emit-json.d.ts +73 -0
- package/dist/targets/cpp/emit-json.js +823 -0
- package/dist/targets/cpp/emit-jsx.d.ts +74 -0
- package/dist/targets/cpp/emit-jsx.js +806 -0
- package/dist/targets/cpp/emit-mixed-binary.d.ts +51 -0
- package/dist/targets/cpp/emit-mixed-binary.js +60 -0
- package/dist/targets/cpp/emit-namespaces.d.ts +101 -0
- package/dist/targets/cpp/emit-namespaces.js +133 -0
- package/dist/targets/cpp/emit-narrowing.d.ts +738 -0
- package/dist/targets/cpp/emit-narrowing.js +3967 -0
- package/dist/targets/cpp/emit-native-equality.d.ts +3 -0
- package/dist/targets/cpp/emit-native-equality.js +14 -0
- package/dist/targets/cpp/emit-native-selection.d.ts +5 -0
- package/dist/targets/cpp/emit-native-selection.js +37 -0
- package/dist/targets/cpp/emit-object-tag.d.ts +4 -0
- package/dist/targets/cpp/emit-object-tag.js +108 -0
- package/dist/targets/cpp/emit-owned-record.d.ts +2 -0
- package/dist/targets/cpp/emit-owned-record.js +15 -0
- package/dist/targets/cpp/emit-presence.d.ts +78 -0
- package/dist/targets/cpp/emit-presence.js +376 -0
- package/dist/targets/cpp/emit-properties.d.ts +105 -0
- package/dist/targets/cpp/emit-properties.js +1640 -0
- package/dist/targets/cpp/emit-record-view.d.ts +20 -0
- package/dist/targets/cpp/emit-record-view.js +354 -0
- package/dist/targets/cpp/emit-return.d.ts +5 -0
- package/dist/targets/cpp/emit-return.js +237 -0
- package/dist/targets/cpp/emit-sum-widening.d.ts +10 -0
- package/dist/targets/cpp/emit-sum-widening.js +69 -0
- package/dist/targets/cpp/emit-tonumber.d.ts +38 -0
- package/dist/targets/cpp/emit-tonumber.js +177 -0
- package/dist/targets/cpp/emit-tostring.d.ts +92 -0
- package/dist/targets/cpp/emit-tostring.js +556 -0
- package/dist/targets/cpp/emit-typeof.d.ts +49 -0
- package/dist/targets/cpp/emit-typeof.js +317 -0
- package/dist/targets/cpp/emit-union-properties.d.ts +181 -0
- package/dist/targets/cpp/emit-union-properties.js +1281 -0
- package/dist/targets/cpp/emit.d.ts +45 -0
- package/dist/targets/cpp/emit.js +2225 -0
- package/dist/targets/cpp/error-types.d.ts +4 -0
- package/dist/targets/cpp/error-types.js +11 -0
- package/dist/targets/cpp/function-source-reads.d.ts +72 -0
- package/dist/targets/cpp/function-source-reads.js +148 -0
- package/dist/targets/cpp/host/atomics.d.ts +25 -0
- package/dist/targets/cpp/host/atomics.js +63 -0
- package/dist/targets/cpp/host/core-globals.d.ts +108 -0
- package/dist/targets/cpp/host/core-globals.js +158 -0
- package/dist/targets/cpp/host/dynamic-argument-members.d.ts +42 -0
- package/dist/targets/cpp/host/dynamic-argument-members.js +61 -0
- package/dist/targets/cpp/host/emit-host-arity.d.ts +139 -0
- package/dist/targets/cpp/host/emit-host-arity.js +232 -0
- package/dist/targets/cpp/host/emit-host-invoke.d.ts +91 -0
- package/dist/targets/cpp/host/emit-host-invoke.js +1105 -0
- package/dist/targets/cpp/host/emit-host-object.d.ts +55 -0
- package/dist/targets/cpp/host/emit-host-object.js +2206 -0
- package/dist/targets/cpp/host/emit-host-properties.d.ts +69 -0
- package/dist/targets/cpp/host/emit-host-properties.js +533 -0
- package/dist/targets/cpp/host/emit-host-reflect.d.ts +4 -0
- package/dist/targets/cpp/host/emit-host-reflect.js +180 -0
- package/dist/targets/cpp/host/emit-host-value.d.ts +120 -0
- package/dist/targets/cpp/host/emit-host-value.js +392 -0
- package/dist/targets/cpp/host/host-members.d.ts +505 -0
- package/dist/targets/cpp/host/host-members.js +819 -0
- package/dist/targets/cpp/host/host-method-aliases.d.ts +30 -0
- package/dist/targets/cpp/host/host-method-aliases.js +76 -0
- package/dist/targets/cpp/host/native-protocols.d.ts +47 -0
- package/dist/targets/cpp/host/native-protocols.js +183 -0
- package/dist/targets/cpp/host/object-protocol.d.ts +351 -0
- package/dist/targets/cpp/host/object-protocol.js +671 -0
- package/dist/targets/cpp/host-namespace-reads.d.ts +83 -0
- package/dist/targets/cpp/host-namespace-reads.js +113 -0
- package/dist/targets/cpp/manifest/capabilities.d.ts +39 -0
- package/dist/targets/cpp/manifest/capabilities.js +1484 -0
- package/dist/targets/cpp/manifest.d.ts +23 -0
- package/dist/targets/cpp/manifest.js +113 -0
- package/dist/targets/cpp/native-error-base.d.ts +38 -0
- package/dist/targets/cpp/native-error-base.js +74 -0
- package/dist/targets/cpp/native-narrowing-transport.d.ts +12 -0
- package/dist/targets/cpp/native-narrowing-transport.js +151 -0
- package/dist/targets/cpp/native-selection-helpers.d.ts +11 -0
- package/dist/targets/cpp/native-selection-helpers.js +46 -0
- package/dist/targets/cpp/native-symbol-keys.d.ts +8 -0
- package/dist/targets/cpp/native-symbol-keys.js +34 -0
- package/dist/targets/cpp/ownership.d.ts +43 -0
- package/dist/targets/cpp/ownership.js +38 -0
- package/dist/targets/cpp/owning-conversion-input.d.ts +14 -0
- package/dist/targets/cpp/owning-conversion-input.js +12 -0
- package/dist/targets/cpp/property-read-claims.d.ts +62 -0
- package/dist/targets/cpp/property-read-claims.js +23 -0
- package/dist/targets/cpp/property-store-claims.d.ts +62 -0
- package/dist/targets/cpp/property-store-claims.js +26 -0
- package/dist/targets/cpp/prototype/emit-prototype-array.d.ts +111 -0
- package/dist/targets/cpp/prototype/emit-prototype-array.js +602 -0
- package/dist/targets/cpp/prototype/emit-prototype-date.d.ts +133 -0
- package/dist/targets/cpp/prototype/emit-prototype-date.js +515 -0
- package/dist/targets/cpp/prototype/emit-prototype-error.d.ts +13 -0
- package/dist/targets/cpp/prototype/emit-prototype-error.js +54 -0
- package/dist/targets/cpp/prototype/emit-prototype-invoke.d.ts +34 -0
- package/dist/targets/cpp/prototype/emit-prototype-invoke.js +1003 -0
- package/dist/targets/cpp/prototype/emit-prototype-iterator.d.ts +47 -0
- package/dist/targets/cpp/prototype/emit-prototype-iterator.js +250 -0
- package/dist/targets/cpp/prototype/emit-prototype-promise.d.ts +46 -0
- package/dist/targets/cpp/prototype/emit-prototype-promise.js +143 -0
- package/dist/targets/cpp/prototype/emit-prototype-regexp.d.ts +335 -0
- package/dist/targets/cpp/prototype/emit-prototype-regexp.js +853 -0
- package/dist/targets/cpp/prototype/emit-prototype-string.d.ts +42 -0
- package/dist/targets/cpp/prototype/emit-prototype-string.js +252 -0
- package/dist/targets/cpp/prototype/prototype-method-reads.d.ts +25 -0
- package/dist/targets/cpp/prototype/prototype-method-reads.js +182 -0
- package/dist/targets/cpp/reactive-dependencies.d.ts +140 -0
- package/dist/targets/cpp/reactive-dependencies.js +432 -0
- package/dist/targets/cpp/reactive-origins.d.ts +44 -0
- package/dist/targets/cpp/reactive-origins.js +82 -0
- package/dist/targets/cpp/records.d.ts +277 -0
- package/dist/targets/cpp/records.js +2427 -0
- package/dist/targets/cpp/recursive-containers.d.ts +43 -0
- package/dist/targets/cpp/recursive-containers.js +144 -0
- package/dist/targets/cpp/regexp-types.d.ts +56 -0
- package/dist/targets/cpp/regexp-types.js +59 -0
- package/dist/targets/cpp/substrate.d.ts +125 -0
- package/dist/targets/cpp/substrate.js +12 -0
- package/dist/targets/cpp/translation-unit.d.ts +219 -0
- package/dist/targets/cpp/translation-unit.js +2063 -0
- package/dist/targets/cpp/types.d.ts +280 -0
- package/dist/targets/cpp/types.js +1135 -0
- package/dist/targets/cpp/virtual-methods.d.ts +95 -0
- package/dist/targets/cpp/virtual-methods.js +264 -0
- package/package.json +95 -0
- package/src/targets/cpp/runtime/gea_dynamic_proxy.h +824 -0
- package/src/targets/cpp/runtime/gea_eval.h +1376 -0
- package/src/targets/cpp/runtime/gea_native_class_prototype.h +44 -0
- package/src/targets/cpp/runtime/gea_runtime.h +29222 -0
- package/src/targets/cpp/runtime/gea_runtime_builtins.cpp +55 -0
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { InvocationOperation } from '../semantics/model/operations.js';
|
|
2
|
+
import { type LoweringContext } from './lower-operands.js';
|
|
3
|
+
import type { IrBlockId } from './model.js';
|
|
4
|
+
export declare const lowerInvocation: (ctx: LoweringContext, block: IrBlockId, operation: InvocationOperation) => void;
|
|
@@ -0,0 +1,514 @@
|
|
|
1
|
+
import { operandOf } from '../semantics/model/operands.js';
|
|
2
|
+
import { representationKey } from '../representation/model.js';
|
|
3
|
+
import { selectedHostConstructFrameOf } from '../representation/derive.js';
|
|
4
|
+
import { fixedDataDefinitionRecipeOf } from './fixed-data-definition.js';
|
|
5
|
+
import { objectValueConversionsOf } from './object-value-conversions.js';
|
|
6
|
+
import { pendingShortCircuitOf } from './lower-short-circuit.js';
|
|
7
|
+
import { IrLoweringBlockedError } from './lower-graph.js';
|
|
8
|
+
import { publishObjectAssignFieldConversions } from './call-entry.js';
|
|
9
|
+
import { narrowedOperandView } from '../conversion/operand-view.js';
|
|
10
|
+
import { hostTemplateOfRead } from '../representation/host-templates.js';
|
|
11
|
+
import { abiOfCallee, constructAbiOfCallee, packRestArguments, namedOperand, optionalResultRepresentation, orderedOperandsOf, registerResult, requireLineage, requireResultRepresentation, resolveOptionalOperand, resolveRequiredOperand, enter, convertTo, convertOrDrift } from './lower-operands.js';
|
|
12
|
+
import { calleeRenderingOf, deferredCalleeOf, numericRestHostCallOf } from '../projection/callee.js';
|
|
13
|
+
import { fixedApplyArgumentFieldsOf } from '../projection/apply-arguments.js';
|
|
14
|
+
import { callArgumentSlotOf } from '../projection/slots.js';
|
|
15
|
+
/** `Function.prototype.bind` with a finite, statically proved prefix becomes one native callable allocation. */
|
|
16
|
+
const lowerDeferredFunctionBind = (ctx, block, lineage, operation, deferred) => {
|
|
17
|
+
const source = resolveRequiredOperand(ctx, block, lineage, deferred.receiver);
|
|
18
|
+
const result = requireResultRepresentation(ctx, operation, 'value', 'a Function.prototype.bind result');
|
|
19
|
+
if (result.kind !== 'function-value-dispatch') {
|
|
20
|
+
throw new IrLoweringBlockedError('a Function.prototype.bind result has no evaluated function-value dispatch convention');
|
|
21
|
+
}
|
|
22
|
+
const slots = argumentSlotsOf(ctx, block, lineage, operation);
|
|
23
|
+
if (slots.some((slot) => slot.kind === 'spread')) {
|
|
24
|
+
throw new IrLoweringBlockedError('Function.prototype.bind with spread-bound arguments has no finite native prefix to capture');
|
|
25
|
+
}
|
|
26
|
+
const values = slots.map((slot) => slot.value);
|
|
27
|
+
const thisArgument = values.shift() ?? null;
|
|
28
|
+
const receiver = deferred.abi.receiver === null ? null : thisArgument;
|
|
29
|
+
if (deferred.abi.receiver !== null && receiver === null) {
|
|
30
|
+
throw new IrLoweringBlockedError('Function.prototype.bind omits the this-argument required by the source callable convention');
|
|
31
|
+
}
|
|
32
|
+
if (deferred.abi.restFrom !== null || result.abi.restFrom !== null) {
|
|
33
|
+
throw new IrLoweringBlockedError('Function.prototype.bind between rest-taking native callable conventions is not yet a stated runtime protocol');
|
|
34
|
+
}
|
|
35
|
+
if (values.length > deferred.abi.parameters.length) {
|
|
36
|
+
throw new IrLoweringBlockedError('Function.prototype.bind captures more leading arguments than the source callable convention declares');
|
|
37
|
+
}
|
|
38
|
+
const remaining = deferred.abi.parameters.slice(values.length);
|
|
39
|
+
const exactFrame = result.abi.receiver === null &&
|
|
40
|
+
remaining.length === result.abi.parameters.length &&
|
|
41
|
+
representationKey(deferred.abi.result) === representationKey(result.abi.result) &&
|
|
42
|
+
remaining.every((parameter, index) => representationKey(parameter.value) === representationKey(result.abi.parameters[index].value));
|
|
43
|
+
if (!exactFrame) {
|
|
44
|
+
throw new IrLoweringBlockedError('Function.prototype.bind result does not state the source callable suffix convention exactly');
|
|
45
|
+
}
|
|
46
|
+
registerResult(ctx, operation, ctx.builder.bindCallable(block, lineage, source, deferred.functionId, deferred.abi, thisArgument, receiver, values, result));
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Rewriting `add.call(x, 3, 4)` into `add`'s own call, with `x` as the
|
|
50
|
+
* receiver and `3, 4` packed against `add`'s own convention -- see
|
|
51
|
+
* `deferredFunctionCallCalleeOf`'s comment for why this is a rewrite and not
|
|
52
|
+
* an ordinary call through `.call`'s own declared signature.
|
|
53
|
+
*/
|
|
54
|
+
const lowerDeferredFunctionCall = (ctx, block, lineage, operation, deferred) => {
|
|
55
|
+
const realCallee = resolveRequiredOperand(ctx, block, lineage, deferred.receiver);
|
|
56
|
+
const evaluated = argumentSlotsOf(ctx, block, lineage, operation);
|
|
57
|
+
const [thisArgSlot, ...tailSlots] = evaluated;
|
|
58
|
+
if (!thisArgSlot) {
|
|
59
|
+
throw new IrLoweringBlockedError('"Function.prototype.call" was read with no this-argument to lower; every call needs at least one physical argument');
|
|
60
|
+
}
|
|
61
|
+
if (thisArgSlot.kind === 'spread') {
|
|
62
|
+
throw new IrLoweringBlockedError('a call range-copies a spread argument into "Function.prototype.call"\'s own this-argument position; a spread contributes a ' +
|
|
63
|
+
'runtime number of values and the this-argument is exactly one fixed position');
|
|
64
|
+
}
|
|
65
|
+
// The receiver is a physical argument only when the underlying callable's
|
|
66
|
+
// OWN convention declares one -- an ordinary function that never reads
|
|
67
|
+
// `this` (the TypeScript default for a function with no declared `this`
|
|
68
|
+
// parameter) ignores whatever `.call` passed for it, exactly as the
|
|
69
|
+
// language does: `add.call(x, 3, 4)` calls `add(3, 4)` and `x` is never
|
|
70
|
+
// observed.
|
|
71
|
+
const receiver = deferred.abi.receiver !== null ? thisArgSlot.value : null;
|
|
72
|
+
// A BOXED frame is not packed here: `Value::callWithReceiver` takes the flat
|
|
73
|
+
// ECMA-262 argument list and the callee's own thunk fills its rest slot from
|
|
74
|
+
// it. Packing against `deferred.abi` -- the underlying callable's PHYSICAL
|
|
75
|
+
// convention, which this call does not fill -- built the rest array a second
|
|
76
|
+
// time. See `DeferredCallee.frame`.
|
|
77
|
+
const args = deferred.frame === 'boxed'
|
|
78
|
+
? tailSlots.map((slot) => {
|
|
79
|
+
if (slot.kind === 'spread') {
|
|
80
|
+
throw new IrLoweringBlockedError('a call range-copies a spread argument into a boxed "Function.prototype.call" frame; the flat argument list a dynamic ' +
|
|
81
|
+
'call renders has no expansion for a runtime-counted range');
|
|
82
|
+
}
|
|
83
|
+
return slot.value;
|
|
84
|
+
})
|
|
85
|
+
: packRestArguments(ctx, block, lineage, operation.id, deferred.abi, tailSlots);
|
|
86
|
+
const representation = optionalResultRepresentation(ctx, operation, 'value');
|
|
87
|
+
const returned = ctx.builder.call(block, lineage, realCallee, receiver, args, representation);
|
|
88
|
+
registerResult(ctx, operation, returned);
|
|
89
|
+
if (returned !== null && representation !== null) {
|
|
90
|
+
const pending = pendingShortCircuitOf(ctx, operation, { value: returned, representation });
|
|
91
|
+
if (pending)
|
|
92
|
+
ctx.shortCircuits.set(pending.result, pending);
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* Rewriting `Math.max.apply(null, [1, 5, 3])` into `Math.max`'s own call,
|
|
97
|
+
* with `null` as the receiver and the array's elements packed against
|
|
98
|
+
* `Math.max`'s own rest convention. A runtime-sized array remains a spread;
|
|
99
|
+
* a closed tuple supplies its stated positions, allowing fixed-arity callees
|
|
100
|
+
* and fixed arguments before a rest tail without inventing a runtime arity.
|
|
101
|
+
*
|
|
102
|
+
* `.apply(thisArg)` -- no second argument -- is the language's own "no
|
|
103
|
+
* arguments" form (`argArray` defaults to an empty list), so a missing
|
|
104
|
+
* second argument packs an empty tail rather than being refused: nothing
|
|
105
|
+
* about the physical argument count here is ambiguous, unlike a truly
|
|
106
|
+
* missing this-argument, which has no such default.
|
|
107
|
+
*/
|
|
108
|
+
const lowerDeferredFunctionApply = (ctx, block, lineage, operation, deferred) => {
|
|
109
|
+
const realCallee = resolveRequiredOperand(ctx, block, lineage, deferred.receiver);
|
|
110
|
+
const evaluated = argumentSlotsOf(ctx, block, lineage, operation);
|
|
111
|
+
const [thisArgSlot, argsArraySlot, ...overflow] = evaluated;
|
|
112
|
+
if (!thisArgSlot) {
|
|
113
|
+
throw new IrLoweringBlockedError('"Function.prototype.apply" was read with no this-argument to lower; every call needs at least one physical argument');
|
|
114
|
+
}
|
|
115
|
+
if (thisArgSlot.kind === 'spread') {
|
|
116
|
+
throw new IrLoweringBlockedError('a call range-copies a spread argument into "Function.prototype.apply"\'s own this-argument position; a spread contributes a ' +
|
|
117
|
+
'runtime number of values and the this-argument is exactly one fixed position');
|
|
118
|
+
}
|
|
119
|
+
if (overflow.length > 0) {
|
|
120
|
+
throw new IrLoweringBlockedError('"Function.prototype.apply" takes exactly a this-argument and one arguments array; this call passes physical arguments beyond ' +
|
|
121
|
+
'those two, which is not a shape the ambient signature declares');
|
|
122
|
+
}
|
|
123
|
+
if (argsArraySlot?.kind === 'spread') {
|
|
124
|
+
throw new IrLoweringBlockedError('a call range-copies a spread argument into "Function.prototype.apply"\'s own arguments-array position; that position is a ' +
|
|
125
|
+
'single array value for the language to spread, not a second spread of its own');
|
|
126
|
+
}
|
|
127
|
+
const receiver = deferred.abi.receiver !== null ? thisArgSlot.value : null;
|
|
128
|
+
const argsOperand = operandOf(operation, 'argument', 1);
|
|
129
|
+
const tupleFields = argsArraySlot && argsOperand
|
|
130
|
+
? fixedApplyArgumentFieldsOf(ctx.graph.structuralTypes, argsOperand.type, argsArraySlot.value.representation, ctx.constantDeriver)
|
|
131
|
+
: null;
|
|
132
|
+
// The same positional Get/conversion operations used by ordinary arguments
|
|
133
|
+
// reach IR certification. No printer-only unpacking or unchecked ABI cast.
|
|
134
|
+
// Array-backed tuples retain observable runtime length (e.g. after push).
|
|
135
|
+
// Expand only the fixed prefix when a real array rest slot can copy the tail.
|
|
136
|
+
const runtimeTailFrom = argsArraySlot?.value.representation.kind === 'array-object' &&
|
|
137
|
+
tupleFields !== null &&
|
|
138
|
+
deferred.abi.restFrom !== null &&
|
|
139
|
+
deferred.abi.parameters[deferred.abi.restFrom]?.value.kind === 'array-object' &&
|
|
140
|
+
tupleFields.length >= deferred.abi.restFrom
|
|
141
|
+
? deferred.abi.restFrom
|
|
142
|
+
: null;
|
|
143
|
+
const tailSlots = argsArraySlot && tupleFields !== null
|
|
144
|
+
? [
|
|
145
|
+
...(runtimeTailFrom === null ? tupleFields : tupleFields.slice(0, runtimeTailFrom)).map((field, index) => {
|
|
146
|
+
const keyRepresentation = { kind: 'string' };
|
|
147
|
+
const key = {
|
|
148
|
+
value: ctx.builder.constant(block, lineage, field.key, 'string', keyRepresentation),
|
|
149
|
+
representation: keyRepresentation
|
|
150
|
+
};
|
|
151
|
+
const read = {
|
|
152
|
+
value: ctx.builder.get(block, lineage, argsArraySlot.value, key, field.value),
|
|
153
|
+
representation: field.value
|
|
154
|
+
};
|
|
155
|
+
const slot = callArgumentSlotOf(deferred.abi, null, index);
|
|
156
|
+
if (slot.kind === 'slot')
|
|
157
|
+
return {
|
|
158
|
+
kind: 'value',
|
|
159
|
+
value: convertOrDrift(ctx, block, lineage, operation.id, 'apply-argument', index, read, slot.representation)
|
|
160
|
+
};
|
|
161
|
+
if (slot.kind === 'raw')
|
|
162
|
+
return { kind: 'value', value: read };
|
|
163
|
+
throw new IrLoweringBlockedError(`a fixed apply argument ${index} has no admitted native formal slot`);
|
|
164
|
+
}),
|
|
165
|
+
...(runtimeTailFrom === null ? [] : [{ kind: 'spread', value: argsArraySlot.value, from: runtimeTailFrom }])
|
|
166
|
+
]
|
|
167
|
+
: argsArraySlot
|
|
168
|
+
? [{ kind: 'spread', value: argsArraySlot.value }]
|
|
169
|
+
: [];
|
|
170
|
+
const args = packRestArguments(ctx, block, lineage, operation.id, deferred.abi, tailSlots);
|
|
171
|
+
const representation = optionalResultRepresentation(ctx, operation, 'value');
|
|
172
|
+
const returned = ctx.builder.call(block, lineage, realCallee, receiver, args, representation);
|
|
173
|
+
registerResult(ctx, operation, returned);
|
|
174
|
+
if (returned !== null && representation !== null) {
|
|
175
|
+
const pending = pendingShortCircuitOf(ctx, operation, { value: returned, representation });
|
|
176
|
+
if (pending)
|
|
177
|
+
ctx.shortCircuits.set(pending.result, pending);
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
/**
|
|
181
|
+
* Which host template the printer spells this call from, when it is one this
|
|
182
|
+
* IR states a frame for (`CallOperation.hostTemplate`).
|
|
183
|
+
*
|
|
184
|
+
* The routing is `representation/host-templates.ts`'s `hostTemplateOfRead`,
|
|
185
|
+
* composed of the same predicates the printer routes with: the host protocol
|
|
186
|
+
* `hostMemberReadsOf` looks the member up on, the call-site read it defers,
|
|
187
|
+
* the host member `hostCallText`'s renderers hand to `isArrayText` and
|
|
188
|
+
* `assignText`, and the typed-array receiver and member `prototypeMethodReadsOf`
|
|
189
|
+
* and `typedArrayCallText` defer to `set`'s template. The receiver carrier is the one
|
|
190
|
+
* `lowerProperty` gives that read: the plan's selection, narrowed at the use
|
|
191
|
+
* exactly as `calleeRenderingOf` narrows it. A read this does not recognise --
|
|
192
|
+
* a plugin-bound member, a host-method alias -- records nothing, and its call
|
|
193
|
+
* keeps its convention as its frame.
|
|
194
|
+
*/
|
|
195
|
+
const hostTemplateOf = (ctx, operation, callee) => {
|
|
196
|
+
const input = ctx.program.slots.input;
|
|
197
|
+
if (calleeRenderingOf(input, operation) !== 'template')
|
|
198
|
+
return undefined;
|
|
199
|
+
const calleeOperand = operandOf(operation, 'callee');
|
|
200
|
+
if (calleeOperand?.source.kind !== 'result')
|
|
201
|
+
return undefined;
|
|
202
|
+
const producerId = input.graph.results.get(calleeOperand.source.result);
|
|
203
|
+
const producer = producerId === undefined ? undefined : input.graph.operations.get(producerId);
|
|
204
|
+
if (producer?.family !== 'property' || producer.internalMethod !== 'get')
|
|
205
|
+
return undefined;
|
|
206
|
+
if (producer.hostMethod !== undefined || producer.resolvedBinding !== undefined)
|
|
207
|
+
return undefined;
|
|
208
|
+
const key = operandOf(producer, 'key');
|
|
209
|
+
const receiver = operandOf(producer, 'receiver');
|
|
210
|
+
if (key?.source.kind !== 'constant' || receiver === undefined)
|
|
211
|
+
return undefined;
|
|
212
|
+
const held = receiver.source.kind === 'result'
|
|
213
|
+
? (input.plan.selected.get(receiver.source.result) ?? null)
|
|
214
|
+
: receiver.source.kind === 'constant'
|
|
215
|
+
? input.deriver.derive(receiver.type)
|
|
216
|
+
: null;
|
|
217
|
+
if (held === null)
|
|
218
|
+
return undefined;
|
|
219
|
+
const view = narrowedOperandView(held, receiver, input.deriver);
|
|
220
|
+
return hostTemplateOfRead(view, key.source.text, callee.representation) ?? undefined;
|
|
221
|
+
};
|
|
222
|
+
const calleeReceiverIsNativeHandle = (ctx, operation) => {
|
|
223
|
+
if (operation.internalMethod !== 'call')
|
|
224
|
+
return false;
|
|
225
|
+
const receiver = operandOf(operation, 'receiver', 0);
|
|
226
|
+
if (!receiver || receiver.source.kind !== 'result')
|
|
227
|
+
return false;
|
|
228
|
+
return ctx.plan.selected.get(receiver.source.result)?.kind === 'native-handle';
|
|
229
|
+
};
|
|
230
|
+
/**
|
|
231
|
+
* Whether a call's receiver carries the `iterator` cursor
|
|
232
|
+
* (`representation/model.ts`'s `iterator` kind) this backend builds for
|
|
233
|
+
* `for-of`/spread iteration and for a generator's own resumable body.
|
|
234
|
+
*
|
|
235
|
+
* `next`/`return`/`throw` are that carrier's only callable members
|
|
236
|
+
* (`targets/cpp/prototype/emit-prototype-iterator.ts`'s
|
|
237
|
+
* `iteratorPrototypeMethods`), and every one of them renders through a
|
|
238
|
+
* dedicated dispatch that reads the call's own OPERANDS directly rather than
|
|
239
|
+
* a generated function with a physical calling convention -- the identical
|
|
240
|
+
* fact `calleeReceiverIsNativeHandle` states about a host handle, for the
|
|
241
|
+
* identical reason. `Generator.prototype.next` declares its resume argument
|
|
242
|
+
* as a rest parameter (`...args: [] | [TNext]`, so that the argument is
|
|
243
|
+
* optional), and packing that argument through `packRestArguments` here
|
|
244
|
+
* builds a fresh `array-object` no emitted code ever reads back out of --
|
|
245
|
+
* `emit-prototype-iterator.ts`'s `nextCallText` looks at the call's own
|
|
246
|
+
* argument operand directly, not at an ABI slot past a rest position, so the
|
|
247
|
+
* packed array is a frame built and then silently mismatched against the
|
|
248
|
+
* resume channel's own carrier (`parameter-slot.ts`'s
|
|
249
|
+
* `restParameterUnionOfTuplesElementTypeOf` widens the *declared* slot to a
|
|
250
|
+
* native carrier so the ABI stops boxing it, but the physical call this
|
|
251
|
+
* backend renders for `next` was never the generated, ABI-driven kind that
|
|
252
|
+
* slot belongs to).
|
|
253
|
+
*/
|
|
254
|
+
const calleeReceiverIsIteratorCarrier = (ctx, operation) => {
|
|
255
|
+
if (operation.internalMethod !== 'call')
|
|
256
|
+
return false;
|
|
257
|
+
const receiver = operandOf(operation, 'receiver', 0);
|
|
258
|
+
if (!receiver || receiver.source.kind !== 'result')
|
|
259
|
+
return false;
|
|
260
|
+
return ctx.plan.selected.get(receiver.source.result)?.kind === 'iterator';
|
|
261
|
+
};
|
|
262
|
+
/**
|
|
263
|
+
* The call's physical argument slots, in argument-list order.
|
|
264
|
+
*
|
|
265
|
+
* `producers/spread-arguments.ts` publishes an ordinary argument under role
|
|
266
|
+
* `argument` and a rest-tail range copy under role `spread-argument`, both
|
|
267
|
+
* keyed by the position they occupy in the list the callee receives -- one
|
|
268
|
+
* shared counter, so merging the two roles by ordinal recovers exactly the
|
|
269
|
+
* order the call was written in. The same merge-by-ordinal shape
|
|
270
|
+
* `lower-allocation.ts`'s `arrayLiteralSlotsOf` uses for the element/spread
|
|
271
|
+
* split of an array literal, for the same reason: neither role has to know
|
|
272
|
+
* the other exists.
|
|
273
|
+
*/
|
|
274
|
+
const argumentSlotsOf = (ctx, block, lineage, operation) => {
|
|
275
|
+
const merged = [
|
|
276
|
+
...orderedOperandsOf(operation, 'argument').map((operand) => ({ ordinal: operand.ordinal, kind: 'value', operand })),
|
|
277
|
+
...orderedOperandsOf(operation, 'spread-argument').map((operand) => ({ ordinal: operand.ordinal, kind: 'spread', operand }))
|
|
278
|
+
].sort((left, right) => left.ordinal - right.ordinal);
|
|
279
|
+
return merged.map((entry) => {
|
|
280
|
+
const resolved = resolveRequiredOperand(ctx, block, lineage, entry.operand);
|
|
281
|
+
const value = entry.kind === 'value' ? enter(ctx, block, lineage, operation, entry.operand, resolved) : resolved;
|
|
282
|
+
return entry.operand.from === undefined ? { kind: entry.kind, value } : { kind: entry.kind, value, from: entry.operand.from };
|
|
283
|
+
});
|
|
284
|
+
};
|
|
285
|
+
export const lowerInvocation = (ctx, block, operation) => {
|
|
286
|
+
const lineage = requireLineage(operation);
|
|
287
|
+
if (operation.commonJsRequire) {
|
|
288
|
+
const representation = requireResultRepresentation(ctx, operation, 'value', 'a CommonJS module-record require');
|
|
289
|
+
registerResult(ctx, operation, ctx.builder.commonJsRequire(block, lineage, operation.commonJsRequire.owner, operation.commonJsRequire.target, operation.commonJsRequire.builtinModule, representation));
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
// `add.call(x, 3, 4)` is sugar for a call to `add` itself, not a call
|
|
293
|
+
// through `.call`'s own declared signature; `.apply` and `.bind` are the
|
|
294
|
+
// same rewrite with their own argument frames (`projection/callee.ts`).
|
|
295
|
+
// Checked before the callee is resolved at all, so the deferred `[[Get]]`
|
|
296
|
+
// this rewrite bypasses is never forced to produce a value nothing
|
|
297
|
+
// downstream reads.
|
|
298
|
+
const deferred = deferredCalleeOf({
|
|
299
|
+
graph: ctx.graph,
|
|
300
|
+
plan: ctx.plan,
|
|
301
|
+
abis: ctx.program.abis,
|
|
302
|
+
constructs: ctx.program.constructs,
|
|
303
|
+
callableOrigins: ctx.program.callableOrigins,
|
|
304
|
+
classes: ctx.program.classes
|
|
305
|
+
}, operation);
|
|
306
|
+
if (deferred?.member === 'call') {
|
|
307
|
+
lowerDeferredFunctionCall(ctx, block, lineage, operation, deferred);
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
if (deferred?.member === 'apply') {
|
|
311
|
+
lowerDeferredFunctionApply(ctx, block, lineage, operation, deferred);
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
if (deferred?.member === 'bind') {
|
|
315
|
+
lowerDeferredFunctionBind(ctx, block, lineage, operation, deferred);
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
const callee = resolveRequiredOperand(ctx, block, lineage, namedOperand(operation, 'callee'));
|
|
319
|
+
const evaluated = argumentSlotsOf(ctx, block, lineage, operation);
|
|
320
|
+
// A call through a CHOICE of generic functions: the callee is the set's tag
|
|
321
|
+
// and the `closed-family` target names the copy each member runs at this
|
|
322
|
+
// call. Packed against no convention -- each member's own is padded at
|
|
323
|
+
// emission (`emit-callable.ts`), the same way a callable union's arms are.
|
|
324
|
+
if (callee.representation.kind === 'generic-function-set') {
|
|
325
|
+
if (operation.target.kind !== 'closed-family') {
|
|
326
|
+
throw new IrLoweringBlockedError('a call through a generic function set has no closed family of instantiated copies to dispatch over');
|
|
327
|
+
}
|
|
328
|
+
const family = operation.target.targets.map((target) => target.kind === 'function' && target.member !== undefined ? { member: target.member, functionId: target.functionId } : null);
|
|
329
|
+
if (family.some((entry) => entry === null)) {
|
|
330
|
+
throw new IrLoweringBlockedError('a generic function set family names a target that is not an instantiated member copy');
|
|
331
|
+
}
|
|
332
|
+
const args = packRestArguments(ctx, block, lineage, operation.id, null, evaluated);
|
|
333
|
+
const representation = optionalResultRepresentation(ctx, operation, 'value');
|
|
334
|
+
registerResult(ctx, operation, ctx.builder.call(block, lineage, callee, null, args, representation, family));
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
337
|
+
// `super(...)` is the base class's initialization against the receiver this
|
|
338
|
+
// constructor is already building, not an invocation of anything: a class
|
|
339
|
+
// constructor has no `[[Call]]`. Normalize already decided which this is
|
|
340
|
+
// (`resultDivergence`, semantics/model/selected-signature.ts), so reading
|
|
341
|
+
// that here is a citation; recognizing it downstream from the callee's
|
|
342
|
+
// carrier kind instead would be a second authority over the same question.
|
|
343
|
+
if (operation.resultDivergence.kind === 'super-constructor-initialization') {
|
|
344
|
+
// The evaluated arguments still go through `packRestArguments` against the
|
|
345
|
+
// *base's* construct convention, which is what the callee's carrier states,
|
|
346
|
+
// so a base constructor with a rest parameter receives the same frame a
|
|
347
|
+
// `new Base(...)` would build for it.
|
|
348
|
+
const args = packRestArguments(ctx, block, lineage, operation.id, constructAbiOfCallee(callee.representation), evaluated);
|
|
349
|
+
ctx.builder.superInitialize(block, lineage, args);
|
|
350
|
+
return;
|
|
351
|
+
}
|
|
352
|
+
// A member reached off a `native-handle` receiver has no physical
|
|
353
|
+
// convention to pack against, even though its own declared signature says
|
|
354
|
+
// otherwise -- see `calleeReceiverIsNativeHandle`'s comment above. Packing
|
|
355
|
+
// here would build an `array-object` for a frame `targets/cpp/host-members.ts`'s
|
|
356
|
+
// call renders through a text template, never a generated function that
|
|
357
|
+
// could ever read it -- exactly the defect that made `Console.log`'s rest
|
|
358
|
+
// argument unstringifiable at emission.
|
|
359
|
+
// ...and only for a member whose rest slot is `dynamic`. That is the
|
|
360
|
+
// text-joined template shape and nothing else: `{args}` renders through
|
|
361
|
+
// `consoleArgumentsText`, which ToStrings each argument, so the member has to
|
|
362
|
+
// accept anything and is declared `...data: any[]`. A rest slot with a
|
|
363
|
+
// CONCRETE element type normally uses the real array-parameter callable ABI.
|
|
364
|
+
// A host may additionally publish a borrowed numeric rest spelling, proved
|
|
365
|
+
// separately below. Merely seeing number[] does not authorize skipping the
|
|
366
|
+
// array: ordinary rest functions and first-class builtin values observe it.
|
|
367
|
+
const calleeAbi = abiOfCallee(callee.representation);
|
|
368
|
+
const restElement = calleeAbi?.restFrom === null || calleeAbi === null ? null : (calleeAbi.parameters[calleeAbi.restFrom]?.value ?? null);
|
|
369
|
+
const textJoined = restElement?.kind === 'array-object' && restElement.element.kind === 'dynamic';
|
|
370
|
+
// Only numeric operands use the borrowed host frame. Unknown values still
|
|
371
|
+
// enter the ordinary callable convention, and spread iteration stays on the
|
|
372
|
+
// existing materialized path. All argument expressions were evaluated above.
|
|
373
|
+
const numericRestHostCall = calleeAbi?.restFrom === 0 &&
|
|
374
|
+
restElement?.kind === 'array-object' &&
|
|
375
|
+
restElement.element.kind === 'scalar' &&
|
|
376
|
+
restElement.element.domain === 'number' &&
|
|
377
|
+
evaluated.every((slot) => slot.kind !== 'spread' && slot.value.representation.kind === 'scalar' && slot.value.representation.domain === 'number')
|
|
378
|
+
? numericRestHostCallOf(ctx.program.slots.input, operation)
|
|
379
|
+
: null;
|
|
380
|
+
// `console.log(...values)`, ENTIRELY -- no leading value, nothing after --
|
|
381
|
+
// needs no range copy at all: `values` already IS the runtime-counted
|
|
382
|
+
// sequence the text-joined template's vararg signature declares, so the
|
|
383
|
+
// call can pass it through whole. `emit-host-invoke.ts`'s `variadic` arity
|
|
384
|
+
// reads `argumentsAreSpread` on the built operation to join THIS array's
|
|
385
|
+
// own elements at runtime (`gea_runtime.h`'s
|
|
386
|
+
// `console::joined(const Ref<ArrayObject<Value>>&)`) instead of the
|
|
387
|
+
// compile-time per-operand join every other text-joined call takes. A
|
|
388
|
+
// mixed call (`console.log("x", ...rest)`) is a different shape -- more
|
|
389
|
+
// than one physical argument, one of them a runtime-counted range -- with
|
|
390
|
+
// no single array to pass whole, and stays refused below: only the pure
|
|
391
|
+
// spread was ever measured.
|
|
392
|
+
const wholeSpreadArgument = textJoined &&
|
|
393
|
+
evaluated.length === 1 &&
|
|
394
|
+
evaluated[0]?.kind === 'spread' &&
|
|
395
|
+
evaluated[0].value.representation.kind === 'array-object' &&
|
|
396
|
+
evaluated[0].value.representation.element.kind === 'dynamic'
|
|
397
|
+
? evaluated[0].value
|
|
398
|
+
: null;
|
|
399
|
+
const args = numericRestHostCall !== null
|
|
400
|
+
? evaluated.map((slot) => slot.value)
|
|
401
|
+
: calleeReceiverIsNativeHandle(ctx, operation) && textJoined
|
|
402
|
+
? wholeSpreadArgument !== null
|
|
403
|
+
? [wholeSpreadArgument]
|
|
404
|
+
: evaluated.map((slot) => {
|
|
405
|
+
if (slot.kind === 'spread') {
|
|
406
|
+
// The text-joined native-handle path renders its call from the
|
|
407
|
+
// operands themselves, one rendered text per operand, so there is
|
|
408
|
+
// nothing for a range copy to expand INTO -- `console.log(...args)`
|
|
409
|
+
// would print the array where the language prints its elements.
|
|
410
|
+
throw new IrLoweringBlockedError('a spread argument reaches a host member whose call is rendered from its operands as text; a range copy has no expansion there');
|
|
411
|
+
}
|
|
412
|
+
return slot.value;
|
|
413
|
+
})
|
|
414
|
+
: calleeReceiverIsIteratorCarrier(ctx, operation)
|
|
415
|
+
? evaluated.map((slot) => {
|
|
416
|
+
if (slot.kind === 'spread') {
|
|
417
|
+
throw new IrLoweringBlockedError("a spread argument reaches a generator cursor's next()/return()/throw(), which reads its own resume/abrupt operand " +
|
|
418
|
+
'directly and has no rest frame for a range copy to expand into');
|
|
419
|
+
}
|
|
420
|
+
return slot.value;
|
|
421
|
+
})
|
|
422
|
+
: packRestArguments(ctx, block, lineage, operation.id, calleeAbi, evaluated);
|
|
423
|
+
// `operation.target` (the `SemanticTargetProof`) is never read here: `open`
|
|
424
|
+
// is a complete answer that selects this same generic path, and a narrower
|
|
425
|
+
// proof does not license skipping straight to a direct call this IR has no
|
|
426
|
+
// separate op for anyway.
|
|
427
|
+
if (operation.internalMethod === 'call') {
|
|
428
|
+
// The semantic graph records the receiver of *every* method-shaped call,
|
|
429
|
+
// because `obj.f()` really does bind `obj` as the this-value -- that is the
|
|
430
|
+
// language, and dropping it there would lose a fact. Whether the receiver
|
|
431
|
+
// is also a *physical* argument is a different question, and the callee's
|
|
432
|
+
// convention is the only authority on it: a signature written in method
|
|
433
|
+
// shape declares a receiver slot, and one written as a function-typed
|
|
434
|
+
// property (an arrow, which closes over `this` instead of binding it)
|
|
435
|
+
// declares none. Passing one anyway to a convention that has no slot for it
|
|
436
|
+
// is what the emitter's own fail-closed check already refuses, so the
|
|
437
|
+
// decision belongs here, once, rather than as a second answer downstream.
|
|
438
|
+
const receiverOperand = operandOf(operation, 'receiver', 0);
|
|
439
|
+
const resolvedReceiver = resolveOptionalOperand(ctx, block, lineage, receiverOperand);
|
|
440
|
+
const supplied = resolvedReceiver !== null && receiverOperand !== undefined
|
|
441
|
+
? enter(ctx, block, lineage, operation, receiverOperand, resolvedReceiver)
|
|
442
|
+
: resolvedReceiver;
|
|
443
|
+
const declared = abiOfCallee(callee.representation)?.receiver ?? null;
|
|
444
|
+
const receiver = declared || callee.representation.kind === 'dynamic' ? supplied : null;
|
|
445
|
+
const representation = optionalResultRepresentation(ctx, operation, 'value');
|
|
446
|
+
// The call yields what the convention returns; the plan may have selected
|
|
447
|
+
// a narrowing of it for the result (`f()` read as `T` where `f` returns
|
|
448
|
+
// `T | undefined` behind a guard). That narrowing is a `convert` the
|
|
449
|
+
// conversion census names, like a binding read's -- see
|
|
450
|
+
// `narrowedBindingRead`. A pair it cannot convert is left to the printer.
|
|
451
|
+
// Only a call through a callable VALUE yields the convention's result: a
|
|
452
|
+
// template the printer spells from the call's operands (`Object.assign`
|
|
453
|
+
// on a native record, a host member) yields whatever the template
|
|
454
|
+
// produces, which is the selected carrier itself.
|
|
455
|
+
const physical = abiOfCallee(callee.representation)?.result ?? null;
|
|
456
|
+
const narrows = calleeRenderingOf(ctx.program.slots.input, operation) === 'callable' &&
|
|
457
|
+
representation !== null &&
|
|
458
|
+
physical !== null &&
|
|
459
|
+
physical.kind !== 'void' &&
|
|
460
|
+
representationKey(physical) !== representationKey(representation) &&
|
|
461
|
+
ctx.program.conversions.nodeFor(physical, representation).capability.kind !== 'never';
|
|
462
|
+
const produced = narrows ? physical : representation;
|
|
463
|
+
const definitionKey = operandOf(operation, 'argument', 1);
|
|
464
|
+
const fixedDataDefinition = operation.intrinsicMutation === 'object-define-property' &&
|
|
465
|
+
calleeRenderingOf(ctx.program.slots.input, operation) === 'template' &&
|
|
466
|
+
definitionKey?.source.kind === 'constant' &&
|
|
467
|
+
definitionKey.source.literal === 'string' &&
|
|
468
|
+
produced !== null
|
|
469
|
+
? fixedDataDefinitionRecipeOf(args, definitionKey.source.text, produced, ctx.constantDeriver, ctx.program.classes, ctx.program.conversions, operation.intrinsicDataDefinition === true)
|
|
470
|
+
: null;
|
|
471
|
+
// The host template that prints this call, when this IR states that
|
|
472
|
+
// template's frame; the struct copies it prints are published before the
|
|
473
|
+
// reflection census reads them.
|
|
474
|
+
const hostTemplate = hostTemplateOf(ctx, operation, callee);
|
|
475
|
+
if (hostTemplate === 'object-assign' && wholeSpreadArgument === null)
|
|
476
|
+
publishObjectAssignFieldConversions(args, ctx.constantDeriver, ctx.program.classes, ctx.program.conversions);
|
|
477
|
+
const called = ctx.builder.call(block, lineage, callee, receiver, args, produced, undefined, operation.builtinModuleLookup, wholeSpreadArgument !== null, operation.intrinsicOwnKeys && calleeRenderingOf(ctx.program.slots.input, operation) === 'template' ? true : undefined, fixedDataDefinition ?? undefined, numericRestHostCall ?? undefined, !fixedDataDefinition && wholeSpreadArgument === null && calleeRenderingOf(ctx.program.slots.input, operation) === 'template'
|
|
478
|
+
? objectValueConversionsOf(operation.intrinsicMutation, args, ctx.constantDeriver, ctx.program.conversions)
|
|
479
|
+
: undefined,
|
|
480
|
+
// Carried whatever the callee's rendering: unlike `intrinsicOwnKeys`,
|
|
481
|
+
// which exists to license a template spelling, this fact says only what
|
|
482
|
+
// the call READS, and that is true of the authenticated intrinsic however
|
|
483
|
+
// it is eventually spelled.
|
|
484
|
+
operation.intrinsicCarrierPredicate, calleeRenderingOf(ctx.program.slots.input, operation) === 'template' ? operation.intrinsicReflection : undefined, hostTemplate);
|
|
485
|
+
const returned = narrows && called !== null && physical !== null && representation !== null
|
|
486
|
+
? (convertTo(ctx, block, lineage, { value: called, representation: physical }, representation)?.value ?? called)
|
|
487
|
+
: called;
|
|
488
|
+
registerResult(ctx, operation, returned);
|
|
489
|
+
// `a?.b()` publishes a second value -- what the *expression* evaluates to --
|
|
490
|
+
// which is a merge this arm cannot close, exactly as `a?.b`'s is. It is
|
|
491
|
+
// recorded and settled once an operation outside the guard runs
|
|
492
|
+
// (`lower-short-circuit.ts`).
|
|
493
|
+
if (returned !== null && representation !== null) {
|
|
494
|
+
const pending = pendingShortCircuitOf(ctx, operation, { value: returned, representation });
|
|
495
|
+
if (pending)
|
|
496
|
+
ctx.shortCircuits.set(pending.result, pending);
|
|
497
|
+
}
|
|
498
|
+
return;
|
|
499
|
+
}
|
|
500
|
+
const newTarget = resolveRequiredOperand(ctx, block, lineage, namedOperand(operation, 'new-target'));
|
|
501
|
+
const representation = requireResultRepresentation(ctx, operation, 'value', 'a construct operation');
|
|
502
|
+
// `new WeakMap()` through a host constructor whose overload set joins into
|
|
503
|
+
// no single `[[Construct]]` convention: the overload the checker selected at
|
|
504
|
+
// THIS site is the frame it fills (`selectedHostConstructFrameOf`). A spread
|
|
505
|
+
// argument has no fixed position to lay out, so such a site publishes none.
|
|
506
|
+
const hostFrame = callee.representation.kind === 'native-handle' &&
|
|
507
|
+
callee.representation.construct === null &&
|
|
508
|
+
operation.selectedSignature !== null &&
|
|
509
|
+
args.length === evaluated.length &&
|
|
510
|
+
evaluated.every((slot) => slot.kind !== 'spread')
|
|
511
|
+
? selectedHostConstructFrameOf(ctx.constantDeriver, operation.selectedSignature, args.length, representation)
|
|
512
|
+
: null;
|
|
513
|
+
registerResult(ctx, operation, ctx.builder.construct(block, lineage, callee, newTarget, operation.target, args, representation, hostFrame ?? undefined));
|
|
514
|
+
};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { SemanticResultId } from '../identity/ids.js';
|
|
2
|
+
import { type Representation } from '../representation/model.js';
|
|
3
|
+
import { type SemanticOperand } from '../semantics/model/operands.js';
|
|
4
|
+
import type { SemanticOperation } from '../semantics/model/operations.js';
|
|
5
|
+
import { type LoweringContext } from './lower-operands.js';
|
|
6
|
+
import type { IrBlockId, IrOperand } from './model.js';
|
|
7
|
+
/**
|
|
8
|
+
* One incoming value of a merge, in the carrier the merge publishes.
|
|
9
|
+
*
|
|
10
|
+
* A phi's incoming values must already carry the phi's own carrier
|
|
11
|
+
* (`ir/verify.ts`), so wherever an arm does not, the carrier change is an
|
|
12
|
+
* explicit instruction in *that arm's own block* rather than something the phi
|
|
13
|
+
* assumes. `a ?? b` is the standing example: it keeps `a` on the branch where
|
|
14
|
+
* `a` was proven present, and there the merge publishes the payload while the
|
|
15
|
+
* operand still carries the optional.
|
|
16
|
+
*
|
|
17
|
+
* A constant whose declared type is uninhabited is materialized directly in the
|
|
18
|
+
* merge's carrier instead. `never` is the checker's answer to "does control
|
|
19
|
+
* reach here", not to "what storage does this value occupy", and the two part
|
|
20
|
+
* company at exactly one idiom: `typeof X !== 'undefined' ? X : (undefined as
|
|
21
|
+
* unknown as typeof X)`, the ambient-global guard. The false arm narrows to
|
|
22
|
+
* `never` *because* the declared type excludes `undefined` -- yet that arm is
|
|
23
|
+
* the one that runs whenever the host did not inject `X`. The value really is
|
|
24
|
+
* absent and the merge is what states which carrier holds it, so the constant
|
|
25
|
+
* is minted there; `cppConstantLiteral` then spells that carrier's absent value
|
|
26
|
+
* or refuses outright if it has none.
|
|
27
|
+
*
|
|
28
|
+
* A *reference* whose declared type is inhabited can still be dead on this
|
|
29
|
+
* one arm, the identical fact one step less literal: `a && a.b` keeps `a` on
|
|
30
|
+
* the branch where `a` tested falsy, and when `a`'s own carrier is an Object
|
|
31
|
+
* (a class instance, a record, a native reference, an array, a callable, ...)
|
|
32
|
+
* it has no falsy state at all -- ECMAScript's `ToBoolean` never answers
|
|
33
|
+
* `false` for one. Only `a`'s own absence, if it has one, can be why this
|
|
34
|
+
* branch runs; the payload contributes nothing, exactly the way the
|
|
35
|
+
* constant's `never` type contributes nothing above. `role === 'kept'` names
|
|
36
|
+
* this arm precisely (`ir/lower.ts` passes it only for `&&`/`||`/`??`'s
|
|
37
|
+
* reused side, never the freshly-evaluated one), `operator === '&&'` is the
|
|
38
|
+
* one direction where the reachable state is falsy rather than truthy/
|
|
39
|
+
* present, and `carriesMergeAbsence` is what the merge's own carrier must
|
|
40
|
+
* satisfy for "materialize the absence" to have anywhere to land -- an
|
|
41
|
+
* `optional`, or a `native-handle`, which `optional.ts` collapses `T | null`
|
|
42
|
+
* onto precisely because it self-encodes absence -- and both it and
|
|
43
|
+
* `contributesOnlyAbsence` are the facts this one authority asks; preflight's
|
|
44
|
+
* `buildMergeNarrowingObligations` asked the same until Phase 1.6 deleted it.
|
|
45
|
+
*
|
|
46
|
+
* The operand's own null counts as that nothing. A bare
|
|
47
|
+
* `class-ref(shared-refcount)` -- the collapsed form of `T | null` -- is the
|
|
48
|
+
* one carrier whose falsy state is a value rather than a hole, and it is a
|
|
49
|
+
* value the merge's absence already spells; `contributesOnlyAbsence` is the
|
|
50
|
+
* whole-operand reading that admits it, where the per-arm
|
|
51
|
+
* `isDeadMergeContribution` beside it must not.
|
|
52
|
+
*/
|
|
53
|
+
export declare const mergeIncoming: (ctx: LoweringContext, block: IrBlockId, lineage: SemanticResultId, operation: SemanticOperation, role: string, operand: SemanticOperand, representation: Representation) => IrOperand;
|