@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,38 @@
|
|
|
1
|
+
import type { DeclarationId, FunctionId, PhysicalBodyId } from '../identity/ids.js';
|
|
2
|
+
import type { BindingPlacement } from '../projection/bindings.js';
|
|
3
|
+
import type { ClassLayout } from '../projection/classes.js';
|
|
4
|
+
import type { RepresentationDeriver } from '../representation/derive.js';
|
|
5
|
+
import type { ConversionCensus } from '../conversion/nodes.js';
|
|
6
|
+
import { type VirtualDispatchVerdict } from '../projection/dispatch.js';
|
|
7
|
+
import { type CallableAbi } from '../representation/model.js';
|
|
8
|
+
import type { ReflectionExposure } from './reflection-demand.js';
|
|
9
|
+
import { type IrBody } from './model.js';
|
|
10
|
+
/**
|
|
11
|
+
* Fills the post-shake call facts. `CallOperation.target` says which
|
|
12
|
+
* FunctionId (if any) a call's callee can use for physical devirtualization,
|
|
13
|
+
* while `CallOperation.closedCallee` records the same producer/member identity
|
|
14
|
+
* without requiring capture-free physical dispatch. The latter is consumed by
|
|
15
|
+
* semantic censuses; it never changes the emitted call path.
|
|
16
|
+
*
|
|
17
|
+
* Run once, after `splitGeneratorBodies` and after `ir/captures.ts`'s
|
|
18
|
+
* `publishCaptureFacts` (`compiler.ts`), the same body-rewrite pattern
|
|
19
|
+
* `ir/generator-split.ts` uses -- applied to OPERATIONS rather than to whole
|
|
20
|
+
* bodies, because the fact this file adds lives on one `call`, not on a
|
|
21
|
+
* body. It has to run there and not during `lowerToIr` because every non-
|
|
22
|
+
* `unresolved` answer bottoms out in the same test: does the callee's own
|
|
23
|
+
* body capture anything (`IrBody.facts.capturedDeclarations`/
|
|
24
|
+
* `.capturedReceiver`), and that fact is not published until the program has
|
|
25
|
+
* been shaken (this was blocked before `ir/captures.ts` moved to publishing the call
|
|
26
|
+
* target as a sealed fact).
|
|
27
|
+
*
|
|
28
|
+
* Deliberately conservative, like `ir/generator-split.ts`: any callee shape
|
|
29
|
+
* this module does not recognize -- a parameter, a `dynamic` value, a
|
|
30
|
+
* `generic-function-set` tag (that dispatch is `CallOperation.family`'s own,
|
|
31
|
+
* a different question), a computed key, a union arm this program cannot
|
|
32
|
+
* prove is a closed class hierarchy -- is left `unresolved`, which is
|
|
33
|
+
* exactly the ordinary indirect call every callee carrier already supports.
|
|
34
|
+
* A wrong `unresolved` costs an indirect call; a wrong `direct`/`virtual`/
|
|
35
|
+
* `union-arm` would call the wrong body, so every branch here only answers
|
|
36
|
+
* when it can PROVE the target.
|
|
37
|
+
*/
|
|
38
|
+
export declare const fillCallDispatchTargets: (bodies: ReadonlyMap<PhysicalBodyId, IrBody>, placements: ReadonlyMap<DeclarationId, BindingPlacement>, classes: ReadonlyMap<DeclarationId, ClassLayout>, abiOf: (callable: FunctionId) => CallableAbi | null, capturesNothing: (callable: FunctionId) => boolean, verdict: VirtualDispatchVerdict, deriver?: RepresentationDeriver | null, conversions?: ConversionCensus, exposure?: ReflectionExposure) => ReadonlyMap<PhysicalBodyId, IrBody>;
|
|
@@ -0,0 +1,502 @@
|
|
|
1
|
+
import { closedRecordCallablesOf } from './callable-records.js';
|
|
2
|
+
import { closedClassFieldCallablesOf } from './callable-class-flow.js';
|
|
3
|
+
import { closedStaticCallablesOf } from './static-callables.js';
|
|
4
|
+
import { explicitObjectConstructEntryOf } from './construct-entry.js';
|
|
5
|
+
import { closedCallFrameOf, publishOmittedArgumentConversions } from './call-entry.js';
|
|
6
|
+
import { classFamilyOverridesOf, virtualDispatchKey } from '../projection/dispatch.js';
|
|
7
|
+
import { classMemberOf, classMethodOverrideOf, classPrototypeMethodMutableOf, declaredRecordFieldOf } from '../projection/fields.js';
|
|
8
|
+
import { abiKey, representationKey, walkRepresentation } from '../representation/model.js';
|
|
9
|
+
import { abiOfCallee } from '../projection/callee.js';
|
|
10
|
+
import { classInstanceTestOf, classViewCarrierKinds } from '../projection/instance-test.js';
|
|
11
|
+
import { classPrototypeReadOf } from '../projection/class-prototype.js';
|
|
12
|
+
import { operandsOfIrOperation, resultOfIrOperation } from './queries.js';
|
|
13
|
+
/**
|
|
14
|
+
* Fills the post-shake call facts. `CallOperation.target` says which
|
|
15
|
+
* FunctionId (if any) a call's callee can use for physical devirtualization,
|
|
16
|
+
* while `CallOperation.closedCallee` records the same producer/member identity
|
|
17
|
+
* without requiring capture-free physical dispatch. The latter is consumed by
|
|
18
|
+
* semantic censuses; it never changes the emitted call path.
|
|
19
|
+
*
|
|
20
|
+
* Run once, after `splitGeneratorBodies` and after `ir/captures.ts`'s
|
|
21
|
+
* `publishCaptureFacts` (`compiler.ts`), the same body-rewrite pattern
|
|
22
|
+
* `ir/generator-split.ts` uses -- applied to OPERATIONS rather than to whole
|
|
23
|
+
* bodies, because the fact this file adds lives on one `call`, not on a
|
|
24
|
+
* body. It has to run there and not during `lowerToIr` because every non-
|
|
25
|
+
* `unresolved` answer bottoms out in the same test: does the callee's own
|
|
26
|
+
* body capture anything (`IrBody.facts.capturedDeclarations`/
|
|
27
|
+
* `.capturedReceiver`), and that fact is not published until the program has
|
|
28
|
+
* been shaken (this was blocked before `ir/captures.ts` moved to publishing the call
|
|
29
|
+
* target as a sealed fact).
|
|
30
|
+
*
|
|
31
|
+
* Deliberately conservative, like `ir/generator-split.ts`: any callee shape
|
|
32
|
+
* this module does not recognize -- a parameter, a `dynamic` value, a
|
|
33
|
+
* `generic-function-set` tag (that dispatch is `CallOperation.family`'s own,
|
|
34
|
+
* a different question), a computed key, a union arm this program cannot
|
|
35
|
+
* prove is a closed class hierarchy -- is left `unresolved`, which is
|
|
36
|
+
* exactly the ordinary indirect call every callee carrier already supports.
|
|
37
|
+
* A wrong `unresolved` costs an indirect call; a wrong `direct`/`virtual`/
|
|
38
|
+
* `union-arm` would call the wrong body, so every branch here only answers
|
|
39
|
+
* when it can PROVE the target.
|
|
40
|
+
*/
|
|
41
|
+
export const fillCallDispatchTargets = (bodies, placements, classes, abiOf, capturesNothing, verdict, deriver = null, conversions, exposure) => {
|
|
42
|
+
const bodyList = [...bodies.values()];
|
|
43
|
+
// The one whole-program fact `CallOperation.target`'s `direct` case needs
|
|
44
|
+
// for a callee read out of a binding cell: which module-level cells hold
|
|
45
|
+
// one capture-free callable forever. Mirrors `targets/cpp/captures.ts`'s
|
|
46
|
+
// `buildDirectCallableIndex`, minus the render-time `cppTypeOf` mismatch
|
|
47
|
+
// guard -- `representationKey` is that same identity question asked at the
|
|
48
|
+
// representation layer instead of the printer's, which is the more
|
|
49
|
+
// faithful spelling of "the cell and the held value agree on convention"
|
|
50
|
+
// and is what every OTHER site in this compiler already uses to compare
|
|
51
|
+
// two carriers for equality.
|
|
52
|
+
const callableBindings = callableBindingsOf(bodyList, placements, capturesNothing);
|
|
53
|
+
const observed = new Set();
|
|
54
|
+
const fieldKeys = new Map();
|
|
55
|
+
for (const body of bodyList)
|
|
56
|
+
for (const block of body.blocks.values())
|
|
57
|
+
for (const operation of [...block.operations, block.terminator]) {
|
|
58
|
+
for (const operand of operandsOfIrOperation(operation))
|
|
59
|
+
observed.add(operand.value);
|
|
60
|
+
if (operation.kind === 'constant' && operation.literal === 'string')
|
|
61
|
+
fieldKeys.set(operation.result.id, operation.text);
|
|
62
|
+
if (conversions && (operation.kind === 'call' || operation.kind === 'construct'))
|
|
63
|
+
publishOmittedArgumentConversions(operation, conversions);
|
|
64
|
+
}
|
|
65
|
+
if (conversions && deriver)
|
|
66
|
+
for (const body of bodyList)
|
|
67
|
+
for (const block of body.blocks.values())
|
|
68
|
+
for (const operation of block.operations) {
|
|
69
|
+
if (operation.kind !== 'get' || operation.receiver.representation.kind !== 'tagged-union')
|
|
70
|
+
continue;
|
|
71
|
+
const key = fieldKeys.get(operation.key.value);
|
|
72
|
+
if (key === undefined)
|
|
73
|
+
continue;
|
|
74
|
+
// A native sum field read converts each selected field into the
|
|
75
|
+
// joined result. Publish those same pairs before field reflection
|
|
76
|
+
// asks whether that transport needs the dynamic protocol.
|
|
77
|
+
for (const arm of operation.receiver.representation.arms) {
|
|
78
|
+
const field = declaredRecordFieldOf(deriver, arm.value, key, classes);
|
|
79
|
+
if (field)
|
|
80
|
+
conversions.nodeFor(field.value, operation.result.representation);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
const callableMembers = new Map([
|
|
84
|
+
...closedClassFieldCallablesOf(bodyList, placements, classes, conversions, undefined, deriver),
|
|
85
|
+
...closedRecordCallablesOf(bodyList, placements, callableBindings.closed, deriver, conversions, exposure ? { classes, exposure } : undefined),
|
|
86
|
+
...closedStaticCallablesOf(bodyList, placements, classes)
|
|
87
|
+
]);
|
|
88
|
+
const prototypes = materializedClassPrototypesOf(bodyList, classes);
|
|
89
|
+
const viewed = viewedClassesOf(bodyList);
|
|
90
|
+
const next = new Map();
|
|
91
|
+
for (const body of bodyList) {
|
|
92
|
+
next.set(body.owner, rewriteBody(body, classes, abiOf, capturesNothing, verdict, callableBindings, callableMembers, observed, prototypes, viewed, conversions));
|
|
93
|
+
}
|
|
94
|
+
return next;
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Every class whose native prototype OBJECT this program can materialize.
|
|
98
|
+
* `class-properties/native-prototype.ts` renders exactly the reads
|
|
99
|
+
* `classPrototypeReadOf` admits; a key that is not a known constant is
|
|
100
|
+
* counted too, since it may name `prototype`. Such an object uses its class's
|
|
101
|
+
* native layout without being its instance, which the instance-test census
|
|
102
|
+
* must not answer from the layout alone (`projection/instance-test.ts`).
|
|
103
|
+
*/
|
|
104
|
+
const materializedClassPrototypesOf = (bodies, classes) => {
|
|
105
|
+
const prototypes = new Set();
|
|
106
|
+
for (const body of bodies) {
|
|
107
|
+
const producers = producerMapOf(body);
|
|
108
|
+
for (const block of body.blocks.values())
|
|
109
|
+
for (const operation of block.operations) {
|
|
110
|
+
if (operation.kind !== 'get')
|
|
111
|
+
continue;
|
|
112
|
+
const key = constantStringKeyOf(operation.key.value, producers);
|
|
113
|
+
if (key !== null && key !== 'prototype')
|
|
114
|
+
continue;
|
|
115
|
+
const layout = classPrototypeReadOf(classes, operation.receiver.representation, 'prototype', operation.result.representation);
|
|
116
|
+
if (layout !== null)
|
|
117
|
+
prototypes.add(layout.declaration);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return prototypes;
|
|
121
|
+
};
|
|
122
|
+
/**
|
|
123
|
+
* Every class a `convert` in this program turns into a structural view.
|
|
124
|
+
*
|
|
125
|
+
* `convert` is where a carrier changes (`conversion/nodes.ts`: the lowering
|
|
126
|
+
* records the node on the instruction and the printer renders that node), so
|
|
127
|
+
* a class instance becomes a record view nowhere else. Nested carriers count:
|
|
128
|
+
* converting an array of instances converts each one. A class anywhere in
|
|
129
|
+
* the source against a view kind anywhere in the target is counted, which
|
|
130
|
+
* over-approximates and can only refuse more.
|
|
131
|
+
*/
|
|
132
|
+
const leafKeysOf = (carrier, into) => {
|
|
133
|
+
if (carrier.kind === 'optional')
|
|
134
|
+
return leafKeysOf(carrier.payload, into);
|
|
135
|
+
if (carrier.kind === 'tagged-union')
|
|
136
|
+
for (const arm of carrier.arms)
|
|
137
|
+
leafKeysOf(arm.value, into);
|
|
138
|
+
else
|
|
139
|
+
into.add(representationKey(carrier));
|
|
140
|
+
return into;
|
|
141
|
+
};
|
|
142
|
+
const unionArmKeysOf = (carrier) => {
|
|
143
|
+
const payload = carrier.kind === 'optional' ? carrier.payload : carrier;
|
|
144
|
+
return payload.kind === 'tagged-union' ? leafKeysOf(payload, new Set()) : null;
|
|
145
|
+
};
|
|
146
|
+
/**
|
|
147
|
+
* A load of some of a union's own arms: the arms left out -- a class the
|
|
148
|
+
* guard excluded (`!(init instanceof Headers)`) -- are checked away, not
|
|
149
|
+
* viewed.
|
|
150
|
+
*/
|
|
151
|
+
const narrowsArms = (source, target) => {
|
|
152
|
+
const arms = unionArmKeysOf(source);
|
|
153
|
+
if (arms === null)
|
|
154
|
+
return false;
|
|
155
|
+
const kept = leafKeysOf(target, new Set());
|
|
156
|
+
return [...kept].every((key) => arms.has(key));
|
|
157
|
+
};
|
|
158
|
+
const viewedClassesOf = (bodies) => {
|
|
159
|
+
const viewed = new Set();
|
|
160
|
+
for (const body of bodies)
|
|
161
|
+
for (const block of body.blocks.values())
|
|
162
|
+
for (const operation of block.operations) {
|
|
163
|
+
if (operation.kind !== 'convert')
|
|
164
|
+
continue;
|
|
165
|
+
const classes = [...walkRepresentation(operation.source.representation)].flatMap((carrier) => carrier.kind === 'class-ref' ? [carrier.declaration] : []);
|
|
166
|
+
if (classes.length === 0)
|
|
167
|
+
continue;
|
|
168
|
+
if (narrowsArms(operation.source.representation, operation.result.representation))
|
|
169
|
+
continue;
|
|
170
|
+
const target = [...walkRepresentation(operation.result.representation)];
|
|
171
|
+
if (!target.some((carrier) => classViewCarrierKinds.has(carrier.kind)))
|
|
172
|
+
continue;
|
|
173
|
+
// A class the target still carries as itself is stored in that arm,
|
|
174
|
+
// not viewed: `HeadersInit` into a wider `HeadersInit` keeps its
|
|
175
|
+
// `Headers` arm beside the dictionary one.
|
|
176
|
+
const kept = new Set(target.flatMap((carrier) => (carrier.kind === 'class-ref' ? [carrier.declaration] : [])));
|
|
177
|
+
for (const declaration of classes)
|
|
178
|
+
if (!kept.has(declaration))
|
|
179
|
+
viewed.add(declaration);
|
|
180
|
+
}
|
|
181
|
+
return viewed;
|
|
182
|
+
};
|
|
183
|
+
/**
|
|
184
|
+
* The class whose prototype object `value` is, when its producer -- through
|
|
185
|
+
* converts, which change only the carrier of the same language value -- is a
|
|
186
|
+
* prototype read the native lowering admits.
|
|
187
|
+
*/
|
|
188
|
+
const classPrototypeOf = (value, producers, classes) => {
|
|
189
|
+
const seen = new Set();
|
|
190
|
+
for (let current = value; !seen.has(current);) {
|
|
191
|
+
seen.add(current);
|
|
192
|
+
const producer = producers.get(current);
|
|
193
|
+
if (producer === undefined)
|
|
194
|
+
return null;
|
|
195
|
+
if (producer.kind === 'convert') {
|
|
196
|
+
current = producer.source.value;
|
|
197
|
+
continue;
|
|
198
|
+
}
|
|
199
|
+
if (producer.kind !== 'get' || constantStringKeyOf(producer.key.value, producers) !== 'prototype')
|
|
200
|
+
return null;
|
|
201
|
+
return classPrototypeReadOf(classes, producer.receiver.representation, 'prototype', producer.result.representation)?.declaration ?? null;
|
|
202
|
+
}
|
|
203
|
+
return null;
|
|
204
|
+
};
|
|
205
|
+
const callableBindingsOf = (bodies, placements, capturesNothing) => {
|
|
206
|
+
const allocated = new Map();
|
|
207
|
+
const captureFreeAllocated = new Set();
|
|
208
|
+
const writeCounts = new Map();
|
|
209
|
+
const writtenCallable = new Map();
|
|
210
|
+
const writtenCallableValue = new Map();
|
|
211
|
+
const writtenCarriers = new Map();
|
|
212
|
+
for (const body of bodies) {
|
|
213
|
+
for (const blockId of body.blockOrder) {
|
|
214
|
+
const block = body.blocks.get(blockId);
|
|
215
|
+
if (!block)
|
|
216
|
+
continue;
|
|
217
|
+
for (const operation of block.operations) {
|
|
218
|
+
if (operation.kind === 'allocate-callable') {
|
|
219
|
+
allocated.set(operation.result.id, operation.functionId);
|
|
220
|
+
if (capturesNothing(operation.functionId))
|
|
221
|
+
captureFreeAllocated.add(operation.result.id);
|
|
222
|
+
}
|
|
223
|
+
else if (operation.kind === 'binding-write') {
|
|
224
|
+
writeCounts.set(operation.declaration, (writeCounts.get(operation.declaration) ?? 0) + 1);
|
|
225
|
+
const functionId = allocated.get(operation.value.value);
|
|
226
|
+
if (functionId !== undefined) {
|
|
227
|
+
writtenCallable.set(operation.declaration, functionId);
|
|
228
|
+
writtenCallableValue.set(operation.declaration, operation.value.value);
|
|
229
|
+
writtenCarriers.set(operation.declaration, operation.value.representation);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
const direct = new Map();
|
|
236
|
+
const closed = new Map();
|
|
237
|
+
for (const [declaration, functionId] of writtenCallable) {
|
|
238
|
+
if (writeCounts.get(declaration) !== 1)
|
|
239
|
+
continue;
|
|
240
|
+
// The cell and the function it holds can disagree about the CONVENTION
|
|
241
|
+
// even when the language calls them the same function -- see
|
|
242
|
+
// `targets/cpp/captures.ts`'s `buildDirectCallableIndex` for the worked
|
|
243
|
+
// hono example this guards against.
|
|
244
|
+
const cell = placements.get(declaration)?.representation;
|
|
245
|
+
const held = writtenCarriers.get(declaration);
|
|
246
|
+
if (cell && held && representationKey(cell) !== representationKey(held))
|
|
247
|
+
continue;
|
|
248
|
+
const placement = placements.get(declaration);
|
|
249
|
+
const localOrRegion = placement?.storage.kind === 'local' || placement?.storage.kind === 'region';
|
|
250
|
+
// A host/external cell is a publication boundary even when this IR
|
|
251
|
+
// happens to contain one write citation. Only a sealed compiler-owned
|
|
252
|
+
// cell can authenticate the callable identity for reflection.
|
|
253
|
+
if (localOrRegion)
|
|
254
|
+
closed.set(declaration, functionId);
|
|
255
|
+
const writtenValue = writtenCallableValue.get(declaration);
|
|
256
|
+
if (writtenValue !== undefined && captureFreeAllocated.has(writtenValue))
|
|
257
|
+
direct.set(declaration, functionId);
|
|
258
|
+
}
|
|
259
|
+
return { direct, closed };
|
|
260
|
+
};
|
|
261
|
+
const producerMapOf = (body) => {
|
|
262
|
+
const map = new Map();
|
|
263
|
+
for (const blockId of body.blockOrder) {
|
|
264
|
+
const block = body.blocks.get(blockId);
|
|
265
|
+
if (!block)
|
|
266
|
+
continue;
|
|
267
|
+
for (const operation of block.operations) {
|
|
268
|
+
const result = resultOfIrOperation(operation);
|
|
269
|
+
if (result)
|
|
270
|
+
map.set(result.id, operation);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
return map;
|
|
274
|
+
};
|
|
275
|
+
const unresolvedTarget = { kind: 'unresolved' };
|
|
276
|
+
const constantStringKeyOf = (key, producers) => {
|
|
277
|
+
const producer = producers.get(key);
|
|
278
|
+
return producer !== undefined && producer.kind === 'constant' && producer.literal === 'string' ? producer.text : null;
|
|
279
|
+
};
|
|
280
|
+
const unresolvedCall = { target: unresolvedTarget };
|
|
281
|
+
const identityOfFunctions = (ids) => {
|
|
282
|
+
const functionIds = [...new Set(ids)];
|
|
283
|
+
return functionIds.length === 1 ? { kind: 'exact', functionId: functionIds[0] } : { kind: 'closed-family', functionIds };
|
|
284
|
+
};
|
|
285
|
+
/**
|
|
286
|
+
* Which copy of a same-key method this read means, by the convention the read
|
|
287
|
+
* itself published.
|
|
288
|
+
*
|
|
289
|
+
* A GENERIC method has one body per type argument and every copy installs
|
|
290
|
+
* itself under the method's own name, so the key alone names several bodies.
|
|
291
|
+
* The read is the site that knows: `n.map((v) => 'x!')` publishes
|
|
292
|
+
* `((number) -> string) -> string`, which is the `R = string` copy's frame and
|
|
293
|
+
* no other's. Without this, the first copy answered every read, and the second
|
|
294
|
+
* call site was rendered into the first body's parameter slots -- the
|
|
295
|
+
* conversion that refused was a callback returning `string` being written into
|
|
296
|
+
* a `(number) -> number` formal.
|
|
297
|
+
*
|
|
298
|
+
* The receiver is dropped from both sides of the comparison: a method's
|
|
299
|
+
* physical body states one and the callable value read off it need not.
|
|
300
|
+
* Matching nothing falls back to the first, which is exactly what every site
|
|
301
|
+
* did before there was a preference at all.
|
|
302
|
+
*/
|
|
303
|
+
const methodCopyPreferenceOf = (held, abiOf) => {
|
|
304
|
+
if (held === null)
|
|
305
|
+
return undefined;
|
|
306
|
+
const receiverless = (abi) => abiKey({ ...abi, receiver: null });
|
|
307
|
+
const wanted = receiverless(held);
|
|
308
|
+
return (method) => {
|
|
309
|
+
const body = method.callable === null ? null : abiOf(method.callable);
|
|
310
|
+
if (body !== null && receiverless(body) === wanted)
|
|
311
|
+
return true;
|
|
312
|
+
const installed = method.representation?.kind === 'function-value-dispatch' ? method.representation.abi : null;
|
|
313
|
+
return installed !== null && receiverless(installed) === wanted;
|
|
314
|
+
};
|
|
315
|
+
};
|
|
316
|
+
/** Resolve the member once; captures affect its physical call convention only. */
|
|
317
|
+
const resolveClassMethod = (producer, body, producers, classes, abiOf, capturesNothing, verdict, key) => {
|
|
318
|
+
const receiver = producer.receiver.representation;
|
|
319
|
+
if (receiver.kind !== 'class-ref')
|
|
320
|
+
return null;
|
|
321
|
+
const site = classMemberOf(classes, receiver.declaration, key, methodCopyPreferenceOf(abiOfCallee(producer.result.representation), abiOf));
|
|
322
|
+
if (site === null || site.kind !== 'method' || site.method.callable === null)
|
|
323
|
+
return null;
|
|
324
|
+
// Lowering represents super at the base class, distinct from this frame's
|
|
325
|
+
// receiver class. Such a member access binds statically even with overrides.
|
|
326
|
+
const isSuperAccess = producers.get(producer.receiver.value)?.kind === 'receiver' &&
|
|
327
|
+
body.abi?.receiver?.kind === 'class-ref' &&
|
|
328
|
+
body.abi.receiver.declaration !== receiver.declaration;
|
|
329
|
+
if ((!isSuperAccess && classMethodOverrideOf(classes, receiver.declaration, key)) ||
|
|
330
|
+
classPrototypeMethodMutableOf(classes, receiver.declaration, key))
|
|
331
|
+
return unresolvedCall;
|
|
332
|
+
if (classFamilyOverridesOf(classes, receiver.declaration, key).length === 0 || isSuperAccess) {
|
|
333
|
+
const functionId = site.method.callable;
|
|
334
|
+
return {
|
|
335
|
+
target: capturesNothing(functionId) ? { kind: 'direct', functionId } : unresolvedTarget,
|
|
336
|
+
closedCallee: { kind: 'exact', functionId }
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
const family = verdict.dispatched.get(virtualDispatchKey(receiver.declaration, key, 'call'));
|
|
340
|
+
if (family === undefined)
|
|
341
|
+
return unresolvedCall;
|
|
342
|
+
const functionIds = family.family.implementors.map((implementor) => implementor.callable);
|
|
343
|
+
const heldAbi = abiOfCallee(producer.result.representation);
|
|
344
|
+
const nativeEntryAbi = family.nativeFieldProtocol === 'unused' && heldAbi !== null && abiKey(heldAbi) === abiKey(family.rootAbi) ? family.rootAbi : undefined;
|
|
345
|
+
return {
|
|
346
|
+
target: { kind: 'virtual', owner: receiver.declaration, key, role: 'call' },
|
|
347
|
+
...(functionIds.length === 0
|
|
348
|
+
? {}
|
|
349
|
+
: {
|
|
350
|
+
closedCallee: {
|
|
351
|
+
...identityOfFunctions(functionIds),
|
|
352
|
+
...(nativeEntryAbi === undefined ? {} : { nativeEntryAbi })
|
|
353
|
+
}
|
|
354
|
+
})
|
|
355
|
+
};
|
|
356
|
+
};
|
|
357
|
+
/** All union arms must resolve through the same closed member authority. */
|
|
358
|
+
const resolveUnionArms = (representation, classes, key, path) => {
|
|
359
|
+
if (representation.kind === 'tagged-union') {
|
|
360
|
+
const arms = [];
|
|
361
|
+
for (const [index, arm] of representation.arms.entries()) {
|
|
362
|
+
const nested = resolveUnionArms(arm.value, classes, key, [...path, index]);
|
|
363
|
+
if (nested === null)
|
|
364
|
+
return null;
|
|
365
|
+
arms.push(...nested);
|
|
366
|
+
}
|
|
367
|
+
return arms;
|
|
368
|
+
}
|
|
369
|
+
if (representation.kind !== 'class-ref')
|
|
370
|
+
return null;
|
|
371
|
+
if (classMethodOverrideOf(classes, representation.declaration, key))
|
|
372
|
+
return null;
|
|
373
|
+
const site = classMemberOf(classes, representation.declaration, key);
|
|
374
|
+
if (site === null || site.kind !== 'method' || site.method.callable === null)
|
|
375
|
+
return null;
|
|
376
|
+
if (classFamilyOverridesOf(classes, representation.declaration, key).length > 0)
|
|
377
|
+
return null;
|
|
378
|
+
return [{ path, declaration: representation.declaration, functionId: site.method.callable }];
|
|
379
|
+
};
|
|
380
|
+
const resolveCall = (operation, body, producers, classes, abiOf, capturesNothing, verdict, callableBindings, callableMembers) => {
|
|
381
|
+
const producer = producers.get(operation.callee.value);
|
|
382
|
+
if (producer === undefined)
|
|
383
|
+
return unresolvedCall;
|
|
384
|
+
if (producer.kind === 'allocate-callable') {
|
|
385
|
+
const functionId = producer.functionId;
|
|
386
|
+
return {
|
|
387
|
+
target: capturesNothing(functionId) ? { kind: 'direct', functionId } : unresolvedTarget,
|
|
388
|
+
closedCallee: { kind: 'exact', functionId }
|
|
389
|
+
};
|
|
390
|
+
}
|
|
391
|
+
if (producer.kind === 'binding-read') {
|
|
392
|
+
const direct = callableBindings.direct.get(producer.declaration);
|
|
393
|
+
const closed = callableBindings.closed.get(producer.declaration);
|
|
394
|
+
return {
|
|
395
|
+
target: direct === undefined ? unresolvedTarget : { kind: 'direct', functionId: direct },
|
|
396
|
+
...(closed === undefined ? {} : { closedCallee: { kind: 'exact', functionId: closed } })
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
if (producer.kind !== 'get')
|
|
400
|
+
return unresolvedCall;
|
|
401
|
+
const memberCallable = callableMembers.get(producer.result.id);
|
|
402
|
+
if (memberCallable !== undefined)
|
|
403
|
+
return { target: unresolvedTarget, closedCallee: memberCallable };
|
|
404
|
+
const key = constantStringKeyOf(producer.key.value, producers);
|
|
405
|
+
if (key === null)
|
|
406
|
+
return unresolvedCall;
|
|
407
|
+
const classCall = resolveClassMethod(producer, body, producers, classes, abiOf, capturesNothing, verdict, key);
|
|
408
|
+
if (classCall !== null)
|
|
409
|
+
return classCall;
|
|
410
|
+
const arms = resolveUnionArms(producer.receiver.representation, classes, key, []);
|
|
411
|
+
if (arms === null || arms.length === 0)
|
|
412
|
+
return unresolvedCall;
|
|
413
|
+
return {
|
|
414
|
+
target: arms.every((arm) => capturesNothing(arm.functionId) && abiOf(arm.functionId) !== null)
|
|
415
|
+
? { kind: 'union-arm', arms }
|
|
416
|
+
: unresolvedTarget,
|
|
417
|
+
closedCallee: identityOfFunctions(arms.map((arm) => arm.functionId))
|
|
418
|
+
};
|
|
419
|
+
};
|
|
420
|
+
const rewriteBody = (body, classes, abiOf, capturesNothing, verdict, callableBindings, callableMembers, observed, prototypes, viewed, conversions) => {
|
|
421
|
+
const producers = producerMapOf(body);
|
|
422
|
+
let bodyChanged = false;
|
|
423
|
+
const blocks = new Map();
|
|
424
|
+
for (const [blockId, block] of body.blocks) {
|
|
425
|
+
let blockChanged = false;
|
|
426
|
+
const operations = block.operations.map((operation) => {
|
|
427
|
+
if (operation.kind === 'compute' && operation.form === 'instanceof') {
|
|
428
|
+
const [left, right] = operation.operands;
|
|
429
|
+
const classInstanceTest = left && right
|
|
430
|
+
? classInstanceTestOf(left.representation, right.representation, classes, {
|
|
431
|
+
prototypeOf: classPrototypeOf(left.value, producers, classes),
|
|
432
|
+
materialized: prototypes,
|
|
433
|
+
viewed
|
|
434
|
+
})
|
|
435
|
+
: undefined;
|
|
436
|
+
if (classInstanceTest === undefined)
|
|
437
|
+
return operation;
|
|
438
|
+
blockChanged = true;
|
|
439
|
+
return { ...operation, classInstanceTest };
|
|
440
|
+
}
|
|
441
|
+
if (operation.kind === 'construct') {
|
|
442
|
+
const target = operation.target;
|
|
443
|
+
const abi = target.kind === 'exact' && target.target.kind === 'function' ? abiOf(target.target.functionId) : null;
|
|
444
|
+
const entry = explicitObjectConstructEntryOf(operation, abi);
|
|
445
|
+
if (entry === undefined)
|
|
446
|
+
return operation;
|
|
447
|
+
blockChanged = true;
|
|
448
|
+
return { ...operation, entry };
|
|
449
|
+
}
|
|
450
|
+
if (operation.kind === 'get') {
|
|
451
|
+
const key = constantStringKeyOf(operation.key.value, producers);
|
|
452
|
+
const method = key === null ? null : resolveClassMethod(operation, body, producers, classes, abiOf, capturesNothing, verdict, key);
|
|
453
|
+
const closedCallable = callableMembers.get(operation.result.id) ?? method?.closedCallee;
|
|
454
|
+
if (closedCallable === undefined)
|
|
455
|
+
return operation;
|
|
456
|
+
blockChanged = true;
|
|
457
|
+
return { ...operation, closedCallable };
|
|
458
|
+
}
|
|
459
|
+
if (operation.kind === 'binding-read') {
|
|
460
|
+
const functionId = callableBindings.closed.get(operation.declaration);
|
|
461
|
+
if (functionId === undefined)
|
|
462
|
+
return operation;
|
|
463
|
+
blockChanged = true;
|
|
464
|
+
return { ...operation, closedCallable: { kind: 'exact', functionId } };
|
|
465
|
+
}
|
|
466
|
+
if (operation.kind !== 'call')
|
|
467
|
+
return operation;
|
|
468
|
+
const { target, closedCallee } = resolveCall(operation, body, producers, classes, abiOf, capturesNothing, verdict, callableBindings, callableMembers);
|
|
469
|
+
if (target.kind === 'unresolved' && closedCallee === undefined)
|
|
470
|
+
return operation;
|
|
471
|
+
// A closed static body whose ABI has no receiver cannot observe the
|
|
472
|
+
// constructor used for method syntax. Keep its evaluation in preceding
|
|
473
|
+
// IR, but normalize the invocation to the body's actual convention.
|
|
474
|
+
// Frame verification still requires exact receiver agreement afterward.
|
|
475
|
+
const heldAbi = abiOfCallee(operation.callee.representation);
|
|
476
|
+
const bodyAbi = closedCallee?.kind === 'exact' ? abiOf(closedCallee.functionId) : null;
|
|
477
|
+
const received = !operation.argumentsAreSpread &&
|
|
478
|
+
operation.receiver?.representation.kind === 'constructor-family' &&
|
|
479
|
+
heldAbi?.receiver === null &&
|
|
480
|
+
bodyAbi?.receiver === null &&
|
|
481
|
+
abiKey(heldAbi) === abiKey(bodyAbi)
|
|
482
|
+
? { ...operation, receiver: null }
|
|
483
|
+
: operation;
|
|
484
|
+
const closedFrame = closedCallFrameOf(received, closedCallee, abiOf, observed, conversions);
|
|
485
|
+
blockChanged = true;
|
|
486
|
+
return {
|
|
487
|
+
...received,
|
|
488
|
+
...(closedFrame === undefined ? {} : { closedFrame }),
|
|
489
|
+
...(target.kind === 'unresolved' ? {} : { target }),
|
|
490
|
+
...(closedCallee === undefined ? {} : { closedCallee })
|
|
491
|
+
};
|
|
492
|
+
});
|
|
493
|
+
if (blockChanged) {
|
|
494
|
+
bodyChanged = true;
|
|
495
|
+
blocks.set(blockId, { ...block, operations });
|
|
496
|
+
}
|
|
497
|
+
else {
|
|
498
|
+
blocks.set(blockId, block);
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
return bodyChanged ? { ...body, blocks } : body;
|
|
502
|
+
};
|