@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,483 @@
|
|
|
1
|
+
import { allOperationsOf } from '../../ir/model.js';
|
|
2
|
+
import { censusClassStaticFieldSlots, staticStorageOwnerOf } from '../../ir/class-static-fields.js';
|
|
3
|
+
import { operandsOfIrOperation } from '../../ir/queries.js';
|
|
4
|
+
import { classFamilyOverridesOf } from '../../projection/dispatch.js';
|
|
5
|
+
export { classFamilyOverridesOf };
|
|
6
|
+
import { classMemberOf, classStaticMemberOf } from '../../projection/fields.js';
|
|
7
|
+
export { classMemberOf, classStaticMemberOf };
|
|
8
|
+
import { representationKey } from '../../representation/model.js';
|
|
9
|
+
import { alignedValueText } from './emit-narrowing.js';
|
|
10
|
+
import { cppBodyName, cppClassName, cppRecordFieldName, cppRecordFieldPresenceName, cppRecordStructName } from './types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Reading a `ClassLayout` the way the language reads a class: down the
|
|
13
|
+
* inheritance chain, and with a base's own initialization kept the base's.
|
|
14
|
+
*
|
|
15
|
+
* Both functions here exist because a derived class is not a self-contained
|
|
16
|
+
* description of its instances. `ClassLayout` states only what a class declares
|
|
17
|
+
* itself (`projection/classes.ts`), which is the honest thing for it to state,
|
|
18
|
+
* and it names its base -- so anything that needs the *whole* object has to
|
|
19
|
+
* walk. Doing that walk in one place is what keeps a member lookup and a
|
|
20
|
+
* construction from disagreeing about which class owns what.
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* The statements one class's own field initializers perform.
|
|
24
|
+
*
|
|
25
|
+
* Shared between the two places a class's fields are initialized, which are the
|
|
26
|
+
* same event seen from two sides: a base construction runs them itself, and a
|
|
27
|
+
* derived constructor runs them at its `super(...)` -- the language's order,
|
|
28
|
+
* after the base chain has returned and before the next statement of the
|
|
29
|
+
* derived constructor. Writing the sequence once means those two sites cannot
|
|
30
|
+
* drift into initializing a class differently depending on how it was reached.
|
|
31
|
+
*
|
|
32
|
+
* `fields` is the class's *own* declared fields, never a base's: a base
|
|
33
|
+
* initializes its own, and running them again from a derived construction would
|
|
34
|
+
* overwrite whatever the base's constructor body had already stored there.
|
|
35
|
+
*/
|
|
36
|
+
export const cppFieldInitializerStatements = (site,
|
|
37
|
+
/**
|
|
38
|
+
* The class whose OWN fields these are -- not `ClassField.declaration`,
|
|
39
|
+
* which names the property declaration's own identity, not the class that
|
|
40
|
+
* declares it. `layout.declaration` at every call site.
|
|
41
|
+
*/
|
|
42
|
+
classDeclaration, fields, receiver, storedFieldOf) => {
|
|
43
|
+
const statements = [];
|
|
44
|
+
for (const field of fields) {
|
|
45
|
+
// A field with no initializer keeps the struct's own default: the language
|
|
46
|
+
// installs `undefined` there, and this carrier cannot hold one, so writing
|
|
47
|
+
// anything would be inventing a value.
|
|
48
|
+
if (!field.initializer)
|
|
49
|
+
continue;
|
|
50
|
+
// A qualifying arrow-function field (`censusLazyArrowFields`) is lazily
|
|
51
|
+
// materialized at its first read instead of here -- see
|
|
52
|
+
// `emit-properties.ts`'s `lazyMaterializedFieldReadText`. Its storage
|
|
53
|
+
// keeps the struct's own default (`CallableObject::invoke == nullptr`),
|
|
54
|
+
// exactly the "no initializer" default the `continue` above already
|
|
55
|
+
// grants a field the language itself never initializes; the difference
|
|
56
|
+
// is that THIS field's default is temporary, not permanent.
|
|
57
|
+
if (lazyArrowFieldPlanOf(site.classes, classDeclaration, field.key) !== null)
|
|
58
|
+
continue;
|
|
59
|
+
const initialized = `${cppBodyName(field.initializer)}(${receiver})`;
|
|
60
|
+
const storage = storedFieldOf(field);
|
|
61
|
+
if (storage === null || field.representation === null) {
|
|
62
|
+
return `field "${field.key}" initializer has no complete physical storage contract`;
|
|
63
|
+
}
|
|
64
|
+
const stored = storage.value;
|
|
65
|
+
const markPresent = !storage.required ? ` ${receiver}->${cppRecordFieldPresenceName(field.key)} = true;` : '';
|
|
66
|
+
// A widening may inspect a tagged union's live arm and therefore name its
|
|
67
|
+
// input more than once. A field initializer runs exactly once, so bind its
|
|
68
|
+
// result before converting it rather than substituting the call expression
|
|
69
|
+
// into that renderer. The scope lets every field reuse the same local name.
|
|
70
|
+
const local = 'gea_field_initializer_value';
|
|
71
|
+
const converted = alignedValueText(site, 'class-layout.ts:59', field.representation, stored, local);
|
|
72
|
+
if (converted === null) {
|
|
73
|
+
return (`field "${field.key}" initializer carries ${representationKey(field.representation)}, while its physical storage carries ` +
|
|
74
|
+
`${representationKey(stored)}, and no conversion is installed between them`);
|
|
75
|
+
}
|
|
76
|
+
statements.push(`{ auto ${local} = ${initialized}; ${receiver}->${cppRecordFieldName(field.key)} = ${converted};${markPresent} }`);
|
|
77
|
+
}
|
|
78
|
+
return statements;
|
|
79
|
+
};
|
|
80
|
+
const lazyArrowFieldSidecar = new WeakMap();
|
|
81
|
+
/**
|
|
82
|
+
* The classes a `gea::Value` box may hold in this compile, published once
|
|
83
|
+
* per compile the way the lazy-arrow census is; `null` when the reflection
|
|
84
|
+
* census is incomplete, which admits every class (the pre-census answer).
|
|
85
|
+
*
|
|
86
|
+
* A boxed instance is read through its class's dynamic protocol -- own-field
|
|
87
|
+
* reads, `Object.keys`, the prototype read hooks -- and that protocol is only
|
|
88
|
+
* emitted for a class the reflection census found at an UNRESTRICTED dynamic
|
|
89
|
+
* boundary (`ReflectionDemand.level === 'full'` with no sealed
|
|
90
|
+
* `fieldOperations`). Boxing any other class hands the runtime an object it
|
|
91
|
+
* cannot see into: `JSON.stringify(new Bundle())` printed every field's
|
|
92
|
+
* zero value (`test/runtime/class-json-reflection-refused.ts`), and the
|
|
93
|
+
* prototype hooks that shipped unconditionally re-boxed `stored-listener`'s
|
|
94
|
+
* listeners. One authority for both consumers, so a class is boxable in
|
|
95
|
+
* exactly one sense.
|
|
96
|
+
*/
|
|
97
|
+
const boxableClassSidecar = new WeakMap();
|
|
98
|
+
export const publishBoxableClasses = (classes, held) => {
|
|
99
|
+
boxableClassSidecar.set(classes, held);
|
|
100
|
+
};
|
|
101
|
+
/** Whether a box may hold an instance of `declaration`; `true` for a compile that published nothing (no census to consult). */
|
|
102
|
+
export const classBoxable = (classes, declaration) => {
|
|
103
|
+
const held = boxableClassSidecar.get(classes);
|
|
104
|
+
return held === undefined || held === null || held.has(declaration);
|
|
105
|
+
};
|
|
106
|
+
/** Publishes one compile's whole lazy-arrow-field census. Called once, before any body renders -- mirrors `publishClassStaticFieldStorage`. */
|
|
107
|
+
export const publishLazyArrowFieldPlans = (classes, plans) => {
|
|
108
|
+
lazyArrowFieldSidecar.set(classes, plans);
|
|
109
|
+
};
|
|
110
|
+
/** The lazy-materialization plan for one class field, or `null` when the field keeps today's eager construction. */
|
|
111
|
+
export const lazyArrowFieldPlanOf = (classes, declaration, key) => lazyArrowFieldSidecar.get(classes)?.get(declaration)?.get(key) ?? null;
|
|
112
|
+
/**
|
|
113
|
+
* Every qualifying field of one class, by key -- what `records.ts`'s dynamic
|
|
114
|
+
* read arm needs (which of THIS struct's fields to materialize before boxing),
|
|
115
|
+
* as opposed to `lazyArrowFieldPlanOf`'s one-field question the constructor
|
|
116
|
+
* and the static read site each ask.
|
|
117
|
+
*/
|
|
118
|
+
export const lazyArrowFieldPlansForClass = (classes, declaration) => lazyArrowFieldSidecar.get(classes)?.get(declaration);
|
|
119
|
+
/**
|
|
120
|
+
* The materialize-on-read guard for one lazy arrow field's storage, shared by
|
|
121
|
+
* every reader that observes a qualifying field's CURRENT value rather than
|
|
122
|
+
* only its presence or attributes -- `emit-properties.ts`'s ordinary property
|
|
123
|
+
* `get` (the one choke point every consumer of a field's value, a call's own
|
|
124
|
+
* callee included, already goes through) and `object-protocol.ts`'s
|
|
125
|
+
* `getOwnValue` (the "PRIMITIVE 2" read `Object.values`/`entries`/`assign`/
|
|
126
|
+
* spread/`getOwnPropertyDescriptor` all build on, per that file's own header
|
|
127
|
+
* comment) both read the SAME storage through two different doors. One
|
|
128
|
+
* authority, not two matching implementations that could drift.
|
|
129
|
+
*
|
|
130
|
+
* The receiver is bound once, not repeated: an SSA operand -- or a "known"
|
|
131
|
+
* object view's own receiver text -- may render as a deferred conversion
|
|
132
|
+
* expression, and this reads it twice over (the guard and the materializing
|
|
133
|
+
* store) if it did not bind a local first.
|
|
134
|
+
*/
|
|
135
|
+
export const lazyMaterializedFieldText = (receiverText, accessor, key, plan) => {
|
|
136
|
+
const member = cppRecordFieldName(key);
|
|
137
|
+
return (`([&]() { const auto& gea_lazy_receiver = ${receiverText}; auto& gea_lazy_field = gea_lazy_receiver${accessor}${member}; ` +
|
|
138
|
+
`if (gea_lazy_field.invoke == nullptr) { gea_lazy_field = ${cppBodyName(plan.initializer)}(gea_lazy_receiver); } ` +
|
|
139
|
+
`return gea_lazy_field; })()`);
|
|
140
|
+
};
|
|
141
|
+
/**
|
|
142
|
+
* Whether a `get` renders through the lazy-arrow-field materializing text --
|
|
143
|
+
* the ONE authority both `emit-properties.ts`'s `emitGet` and the
|
|
144
|
+
* callee-snapshot census below ask, so a field the census calls "lazily
|
|
145
|
+
* materialized" is exactly the field `emitGet` would render as one.
|
|
146
|
+
*
|
|
147
|
+
* `null` for a receiver that is not statically a class instance, a key this
|
|
148
|
+
* compile never gave a static text, or a key naming anything but a
|
|
149
|
+
* lazily-materialized field -- the same three escapes `emitGet`'s own inline
|
|
150
|
+
* check had before it was factored out to here.
|
|
151
|
+
*/
|
|
152
|
+
export const lazyArrowFieldGetPlanOf = (ctx, operation) => {
|
|
153
|
+
const receiverRepresentation = operation.receiver.representation;
|
|
154
|
+
if (receiverRepresentation.kind !== 'class-ref')
|
|
155
|
+
return null;
|
|
156
|
+
const fieldName = ctx.staticKeyTexts.get(operation.key.value);
|
|
157
|
+
if (fieldName === undefined)
|
|
158
|
+
return null;
|
|
159
|
+
// Walks the receiver's OWN class up through its bases -- see
|
|
160
|
+
// `lazyArrowFieldPlanOf`'s own comment on why an inherited qualifying field
|
|
161
|
+
// is published under the DECLARING class rather than every receiver that
|
|
162
|
+
// might read it.
|
|
163
|
+
const site = classMemberOf(ctx.classes, receiverRepresentation.declaration, fieldName);
|
|
164
|
+
if (site === null || site.kind !== 'field')
|
|
165
|
+
return null;
|
|
166
|
+
const plan = lazyArrowFieldPlanOf(ctx.classes, site.owner, fieldName);
|
|
167
|
+
return plan === null ? null : { fieldName, plan };
|
|
168
|
+
};
|
|
169
|
+
/**
|
|
170
|
+
* Lazy-arrow-field GET results with exactly one reader in this body, that
|
|
171
|
+
* reader being the very CALL that reads the result as its OWN callee -- the
|
|
172
|
+
* shape `emit-callable.ts`'s `emitLazyArrowFieldCall` fuses into a direct call
|
|
173
|
+
* on the census arrow, with no materialized `CallableObject` built at all.
|
|
174
|
+
*
|
|
175
|
+
* A GET outside this set keeps `lazyMaterializedFieldText`'s ordinary
|
|
176
|
+
* materialize-on-read rendering: a value that is read, passed on, or read by
|
|
177
|
+
* more than one operation has no single call fusion to feed, so its
|
|
178
|
+
* `CallableObject` has to actually exist for whatever else reads it.
|
|
179
|
+
*
|
|
180
|
+
* The three checks mirrored here from `emitLazyArrowFieldCall`'s own early,
|
|
181
|
+
* purely structural bail-outs (a non-function callee kind; a `function`-kind
|
|
182
|
+
* read naming a DIFFERENT function than the census arrow; no published ABI for
|
|
183
|
+
* the arrow's body) are proven once, here, so a GET this set admits is
|
|
184
|
+
* guaranteed to reach that fusion's `try` block. The one refusal left
|
|
185
|
+
* uncensused on purpose is the try block's own CONVERSION refusal -- a generic
|
|
186
|
+
* field's per-call-site result, the one shape a structural check here cannot
|
|
187
|
+
* predict -- which the fusion answers itself by materializing the snapshot
|
|
188
|
+
* rather than declining outright. A GET this census admits must therefore
|
|
189
|
+
* NEVER be read by `emitGet` as anything but the raw, unmaterialized snapshot:
|
|
190
|
+
* the fusion is the only consumer, and it never re-reads the field once it has
|
|
191
|
+
* the snapshot in hand.
|
|
192
|
+
*/
|
|
193
|
+
export const lazyCalleeReadsOf = (ctx, body) => {
|
|
194
|
+
const useCounts = new Map();
|
|
195
|
+
const bump = (value) => {
|
|
196
|
+
useCounts.set(value, (useCounts.get(value) ?? 0) + 1);
|
|
197
|
+
};
|
|
198
|
+
const calleeOf = new Map();
|
|
199
|
+
for (const block of body.blocks.values()) {
|
|
200
|
+
for (const operation of allOperationsOf(block)) {
|
|
201
|
+
for (const operand of operandsOfIrOperation(operation))
|
|
202
|
+
bump(operand.value);
|
|
203
|
+
if (operation.kind === 'call')
|
|
204
|
+
calleeOf.set(operation.callee.value, operation);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
// An iterator-close region reads its iterator implicitly, outside any
|
|
208
|
+
// operation's own operand list -- see `ir/deferral.ts`'s identical extra
|
|
209
|
+
// pass over `iteratorCloseRegions` when it builds the same kind of use
|
|
210
|
+
// count.
|
|
211
|
+
for (const region of body.iteratorCloseRegions ?? [])
|
|
212
|
+
bump(region.iterator.value);
|
|
213
|
+
const result = new Set();
|
|
214
|
+
for (const block of body.blocks.values()) {
|
|
215
|
+
for (const operation of block.operations) {
|
|
216
|
+
if (operation.kind !== 'get')
|
|
217
|
+
continue;
|
|
218
|
+
const field = lazyArrowFieldGetPlanOf(ctx, operation);
|
|
219
|
+
if (field === null)
|
|
220
|
+
continue;
|
|
221
|
+
const id = operation.result.id;
|
|
222
|
+
if ((useCounts.get(id) ?? 0) !== 1)
|
|
223
|
+
continue;
|
|
224
|
+
const call = calleeOf.get(id);
|
|
225
|
+
if (call === undefined || call.callee.value !== id)
|
|
226
|
+
continue;
|
|
227
|
+
const callee = call.callee.representation;
|
|
228
|
+
if (callee.kind !== 'function' && callee.kind !== 'function-value-dispatch' && callee.kind !== 'function-family')
|
|
229
|
+
continue;
|
|
230
|
+
if (callee.kind === 'function' && callee.functionId !== field.plan.body)
|
|
231
|
+
continue;
|
|
232
|
+
if (ctx.abiOfCallable(field.plan.body) === null)
|
|
233
|
+
continue;
|
|
234
|
+
result.add(id);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return result;
|
|
238
|
+
};
|
|
239
|
+
/**
|
|
240
|
+
* Which class fields qualify for lazy materialization, computed once for the
|
|
241
|
+
* whole translation unit.
|
|
242
|
+
*
|
|
243
|
+
* A field's initializer thunk (`ClassField.initializer`) is not itself
|
|
244
|
+
* allocated as a value -- nothing ever wraps THE THUNK in a `CallableObject`,
|
|
245
|
+
* it is simply called once per construction -- so its own capture admission is
|
|
246
|
+
* always `{kind: 'none'}` and asking `captures` about it answers nothing.
|
|
247
|
+
* What must qualify is the closure the thunk's body ALLOCATES: for an arrow
|
|
248
|
+
* field, that thunk's IR is exactly one `allocate-callable` (naming the
|
|
249
|
+
* arrow's own FunctionId) followed by an implicit return of that value (the
|
|
250
|
+
* `[[Initializer]]` "return the evaluation of the initializer expression"
|
|
251
|
+
* shape, `census.ts`'s `isFieldInitializerBody`) -- so this walks each
|
|
252
|
+
* qualifying thunk's body once to find that operation and asks `captures` of
|
|
253
|
+
* ITS `functionId`, the same "walk to the allocate-callable" step
|
|
254
|
+
* `buildDirectCallableIndex` already performs for module-level cells.
|
|
255
|
+
*
|
|
256
|
+
* A field qualifies when that admission is `{kind: 'none'}` (the closure
|
|
257
|
+
* captures nothing, not even `this`) or `{kind: 'ok'}` with an empty slot list
|
|
258
|
+
* (captures only the receiver) -- "nothing else", per the design. A refused
|
|
259
|
+
* admission, or one with any other captured declaration, keeps the field
|
|
260
|
+
* eager: fail closed.
|
|
261
|
+
*
|
|
262
|
+
* A class the whole-program reflection census marks `'full'`
|
|
263
|
+
* (`ir/reflection-demand.ts`) may still read a field's VALUE dynamically,
|
|
264
|
+
* through `records.ts`'s `gea_readOwnField`. That used to disqualify the
|
|
265
|
+
* whole class here, fail closed, because the dispatch method is `const` and
|
|
266
|
+
* has no `Ref` back to its own instance to call the initializer with. It
|
|
267
|
+
* turns out one already exists: `records.ts`'s own accessor dispatch recovers
|
|
268
|
+
* exactly that handle from `this` (`gea::Ref<T>::adopt(const_cast<T*>(this),
|
|
269
|
+
* true)`, `renderFieldDispatcher`'s `selfText`) to call a getter/setter body
|
|
270
|
+
* from the identical `const` method. `records.ts`'s dynamic read arm for a
|
|
271
|
+
* qualifying field now does the same before boxing, so this census no longer
|
|
272
|
+
* needs to ask reflection at all -- correctness for the dynamic path is that
|
|
273
|
+
* function's job now, not a reason to keep a field eager here.
|
|
274
|
+
*/
|
|
275
|
+
export const censusLazyArrowFields = (bodies, classes, captures) => {
|
|
276
|
+
const bodyBySourceOwner = new Map();
|
|
277
|
+
for (const body of bodies)
|
|
278
|
+
bodyBySourceOwner.set(body.sourceOwner, body);
|
|
279
|
+
const result = new Map();
|
|
280
|
+
for (const [declaration, layout] of classes) {
|
|
281
|
+
for (const field of layout.fields) {
|
|
282
|
+
if (field.initializer === null)
|
|
283
|
+
continue;
|
|
284
|
+
const thunkBody = bodyBySourceOwner.get(field.initializer);
|
|
285
|
+
if (!thunkBody)
|
|
286
|
+
continue;
|
|
287
|
+
let arrowFunctionId = null;
|
|
288
|
+
for (const block of thunkBody.blocks.values()) {
|
|
289
|
+
for (const operation of block.operations) {
|
|
290
|
+
if (operation.kind !== 'allocate-callable')
|
|
291
|
+
continue;
|
|
292
|
+
arrowFunctionId = operation.functionId;
|
|
293
|
+
break;
|
|
294
|
+
}
|
|
295
|
+
if (arrowFunctionId !== null)
|
|
296
|
+
break;
|
|
297
|
+
}
|
|
298
|
+
if (arrowFunctionId === null)
|
|
299
|
+
continue;
|
|
300
|
+
const admission = captures.of(arrowFunctionId);
|
|
301
|
+
const qualifies = admission.kind === 'none' || (admission.kind === 'ok' && admission.layout.slots.length === 0);
|
|
302
|
+
if (!qualifies)
|
|
303
|
+
continue;
|
|
304
|
+
let byKey = result.get(declaration);
|
|
305
|
+
if (!byKey) {
|
|
306
|
+
byKey = new Map();
|
|
307
|
+
result.set(declaration, byKey);
|
|
308
|
+
}
|
|
309
|
+
byKey.set(field.key, {
|
|
310
|
+
initializer: field.initializer,
|
|
311
|
+
body: arrowFunctionId,
|
|
312
|
+
bodyHasEnvironment: admission.kind === 'ok',
|
|
313
|
+
bodyReceiverRepresentation: admission.kind === 'ok' ? admission.layout.receiver : null
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
return result;
|
|
318
|
+
};
|
|
319
|
+
/**
|
|
320
|
+
* The C++ struct a receiver's carrier IS, or `null` for one that is not a
|
|
321
|
+
* struct at all.
|
|
322
|
+
*
|
|
323
|
+
* Reactive storage is a property of the STRUCT, not of the declaration that
|
|
324
|
+
* happens to name it: a store class and the element record of one of its
|
|
325
|
+
* arrays are both reactive structs, and only the first has a `DeclarationId`.
|
|
326
|
+
* Asking this one question in one place is what lets the read site, the
|
|
327
|
+
* dependency census and the JSX binding all name the same member.
|
|
328
|
+
*/
|
|
329
|
+
export const structNameOfReceiver = (representation) => {
|
|
330
|
+
if (representation.kind === 'class-ref')
|
|
331
|
+
return cppClassName(representation.declaration);
|
|
332
|
+
if (representation.kind === 'record' || representation.kind === 'native-record-ref')
|
|
333
|
+
return cppRecordStructName(representation.shapeId);
|
|
334
|
+
return null;
|
|
335
|
+
};
|
|
336
|
+
/**
|
|
337
|
+
* The struct that DECLARES field `key` on a receiver of this carrier.
|
|
338
|
+
*
|
|
339
|
+
* Not the same question as "what struct IS this receiver", and the difference
|
|
340
|
+
* is load-bearing for every reactive question: `celled` and `revisions` are
|
|
341
|
+
* keyed by the DECLARING struct (`records.ts` builds them per struct from that
|
|
342
|
+
* struct's OWN fields), because an inherited field's storage lives on the base
|
|
343
|
+
* that declares it. `structNameOfReceiver` alone names the receiver's own
|
|
344
|
+
* class, so asking it for an inherited field silently finds nothing -- which
|
|
345
|
+
* reads as "not reactive" rather than as an error.
|
|
346
|
+
*
|
|
347
|
+
* `null` for a class-ref key naming no FIELD: an accessor and a method share
|
|
348
|
+
* no reactive table, so there is nothing for a caller to look up.
|
|
349
|
+
*/
|
|
350
|
+
export const fieldDeclaringStructOf = (classes, representation, key) => {
|
|
351
|
+
if (representation.kind !== 'class-ref')
|
|
352
|
+
return structNameOfReceiver(representation);
|
|
353
|
+
const site = classMemberOf(classes, representation.declaration, key);
|
|
354
|
+
return site !== null && site.kind === 'field' ? cppClassName(site.owner) : null;
|
|
355
|
+
};
|
|
356
|
+
/**
|
|
357
|
+
* Whether this receiver names `super` -- the one member access the language
|
|
358
|
+
* binds statically (13.3.7), so dispatching it through the object would
|
|
359
|
+
* re-enter the override that wrote it.
|
|
360
|
+
*
|
|
361
|
+
* `ir/lower.ts` mints the `receiver` operation at the BASE's class for a
|
|
362
|
+
* `super` access, so a receiver-defined value carrying any class other than
|
|
363
|
+
* this frame's own receiver's class is a super access and nothing else.
|
|
364
|
+
*
|
|
365
|
+
* One authority for what was four independent spellings of the same
|
|
366
|
+
* predicate: the virtual-setter dispatch in `emit-properties.ts`,
|
|
367
|
+
* `directClassMethodBody`, `classMemberText`'s own `isSuperAccess`, and
|
|
368
|
+
* `virtualCalleeClaim`'s exclusion of `super.m()` from virtual dispatch.
|
|
369
|
+
* Three of the four relied on an enclosing guard having already established
|
|
370
|
+
* the receiver's kind; this one is total, so a fifth caller cannot get it
|
|
371
|
+
* subtly wrong by being reached from somewhere the others never were.
|
|
372
|
+
*/
|
|
373
|
+
export const dispatchesStatically = (ctx, receiver) => {
|
|
374
|
+
const frameReceiver = ctx.abi?.receiver;
|
|
375
|
+
return (ctx.receiverValues.has(receiver.value) &&
|
|
376
|
+
frameReceiver?.kind === 'class-ref' &&
|
|
377
|
+
receiver.representation.kind === 'class-ref' &&
|
|
378
|
+
frameReceiver.declaration !== receiver.representation.declaration);
|
|
379
|
+
};
|
|
380
|
+
/**
|
|
381
|
+
* Every method key a class family reaches, own or inherited, deduplicated
|
|
382
|
+
* along the inheritance chain: `method` is the body when the key binds without
|
|
383
|
+
* dispatch, and `null` when a subclass overrides the key, so the answer is a
|
|
384
|
+
* virtual call this walk has no body to name.
|
|
385
|
+
*
|
|
386
|
+
* The overridden keys are YIELDED rather than skipped because "which keys does
|
|
387
|
+
* this family reach" and "which of them bind to a body" are one walk, and a
|
|
388
|
+
* consumer that must know a key was reached-but-excluded would otherwise have
|
|
389
|
+
* to repeat it. That consumer is real: a computed read over an OPEN key domain
|
|
390
|
+
* builds one arm per bound key and cannot tell an unreachable key from one it
|
|
391
|
+
* dropped here -- and answering the second as though it were the first
|
|
392
|
+
* compiled a correct `dog[k]()` into a guaranteed abort.
|
|
393
|
+
*
|
|
394
|
+
* `classMethodValueReceiverClaim` and `computedClassPrototypeMethodText` ask
|
|
395
|
+
* two different questions of this one family -- "does ANY member convert to
|
|
396
|
+
* this callable type" and "which members DO" -- over an identical walk that
|
|
397
|
+
* each spelled out for itself.
|
|
398
|
+
*/
|
|
399
|
+
export function* reachableClassMethodsOf(classes, declaration) {
|
|
400
|
+
const seenKeys = new Set();
|
|
401
|
+
const seenClasses = new Set();
|
|
402
|
+
for (let current = declaration; current !== null && !seenClasses.has(current);) {
|
|
403
|
+
seenClasses.add(current);
|
|
404
|
+
const layout = classes.get(current);
|
|
405
|
+
if (!layout)
|
|
406
|
+
break;
|
|
407
|
+
for (const method of layout.methods) {
|
|
408
|
+
if (seenKeys.has(method.key))
|
|
409
|
+
continue;
|
|
410
|
+
seenKeys.add(method.key);
|
|
411
|
+
if (method.callable === null)
|
|
412
|
+
continue;
|
|
413
|
+
if (classFamilyOverridesOf(classes, declaration, method.key).length > 0) {
|
|
414
|
+
yield { key: method.key, method: null };
|
|
415
|
+
continue;
|
|
416
|
+
}
|
|
417
|
+
yield { key: method.key, method: method };
|
|
418
|
+
}
|
|
419
|
+
current = layout.base;
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
/**
|
|
423
|
+
* `ClassStaticFieldStorage` lookup, keyed off the SAME `classes` map object
|
|
424
|
+
* every `EmitContext` already carries as `ctx.classes` -- not a new
|
|
425
|
+
* `EmitContext` field, because every context is built by `emit.ts`'s
|
|
426
|
+
* `emitBody`/`createEmitContext`, files this compilation's static-storage
|
|
427
|
+
* work does not own, and adding a parameter there to thread a second table
|
|
428
|
+
* through is exactly the wiring task 1's own report says is still
|
|
429
|
+
* outstanding. `classes` is threaded by reference everywhere (`ctx.classes
|
|
430
|
+
* === input.classes` all the way from `translation-unit.ts` down), so keying
|
|
431
|
+
* a `WeakMap` off it reaches every consumer without changing what any of
|
|
432
|
+
* them declare, and the entry is dropped for free the moment that one
|
|
433
|
+
* compile's `classes` map is no longer referenced -- nothing here can leak
|
|
434
|
+
* across two unrelated compiles in the same process.
|
|
435
|
+
*
|
|
436
|
+
* Populated exactly once per compile, by `translation-unit.ts`'s
|
|
437
|
+
* `renderTranslationUnit`, before any body renders; read by whichever
|
|
438
|
+
* `constructor-family` `[[Get]]`/`[[Set]]` emitter (`emit-properties.ts`)
|
|
439
|
+
* eventually consumes it -- see that file's own `classConstructorStaticMember
|
|
440
|
+
* Text` for the read half this was built to unblock.
|
|
441
|
+
*/
|
|
442
|
+
const classStaticFieldSidecar = new WeakMap();
|
|
443
|
+
/** Publishes one compile's whole static-field census. Called once, before any body renders. */
|
|
444
|
+
export const publishClassStaticFieldStorage = (classes, storage) => {
|
|
445
|
+
classStaticFieldSidecar.set(classes, storage);
|
|
446
|
+
};
|
|
447
|
+
/** The storage a `constructor-family` receiver's static key resolves to, or `null` when nothing published one for it. */
|
|
448
|
+
export const classStaticFieldStorageOf = (classes, declaration, key) => classStaticFieldSidecar.get(classes)?.get(staticStorageOwnerOf(classes, declaration))?.get(key) ?? null;
|
|
449
|
+
/** Every key the census gave one class storage for -- the finite set a computed read of the constructor dispatches over. */
|
|
450
|
+
export const classStaticFieldStorageKeysOf = (classes, declaration) => [...(classStaticFieldSidecar.get(classes)?.get(staticStorageOwnerOf(classes, declaration))?.keys() ?? [])];
|
|
451
|
+
/**
|
|
452
|
+
* This compilation's own mangled global for one `ClassName.KEY` storage
|
|
453
|
+
* location. `cppClassName` already carries a `gea_class_` prefix that is
|
|
454
|
+
* unique per declaration, and `cppRecordFieldName` is the same total,
|
|
455
|
+
* collision-safe key spelling `records.ts` uses for an ordinary struct
|
|
456
|
+
* member -- composing the two the same way a struct member name and its
|
|
457
|
+
* owning struct's name are composed elsewhere keeps this from becoming a
|
|
458
|
+
* second, independently-invented naming scheme.
|
|
459
|
+
*/
|
|
460
|
+
const cppClassStaticFieldName = (declaration, key) => `gea_static_field_${cppClassName(declaration)}_${cppRecordFieldName(key)}`;
|
|
461
|
+
/**
|
|
462
|
+
* The C++ storage table, which is `ir/class-static-fields.ts`'s census with
|
|
463
|
+
* this compilation's mangled global attached to each slot.
|
|
464
|
+
*
|
|
465
|
+
* The walk itself moved to `ir/` when the reflection census turned out to need
|
|
466
|
+
* the same answer: its own comment already warned that re-deriving where a
|
|
467
|
+
* `ClassName.KEY` write lands would risk "a second opinion that could disagree
|
|
468
|
+
* with the one the plan actually selected", and a second consumer asking the
|
|
469
|
+
* question a second way is that risk arriving. What is left here is the only
|
|
470
|
+
* part that was ever a C++ concern -- the NAME the printer renders.
|
|
471
|
+
*/
|
|
472
|
+
export const censusClassStaticFieldStorage = (bodies, classes) => {
|
|
473
|
+
const census = censusClassStaticFieldSlots(bodies, classes);
|
|
474
|
+
const storage = new Map();
|
|
475
|
+
for (const [declaration, slots] of census.slots)
|
|
476
|
+
storage.set(declaration, new Map([...slots].map(([key, representation]) => [key, { name: cppClassStaticFieldName(declaration, key), representation }])));
|
|
477
|
+
return { storage, conflicts: census.conflicts };
|
|
478
|
+
};
|
|
479
|
+
// `classFamilyOverridesOf` moved to `projection/dispatch.ts`: it is a pure
|
|
480
|
+
// function of `ClassLayout`, asked identically by the C++ target and, once a
|
|
481
|
+
// call's dispatch fact moves to projection too, by lowering -- see that
|
|
482
|
+
// module's own comment for why the DISPATCHABILITY verdict stays here while
|
|
483
|
+
// the family TOPOLOGY does not.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { GetOperation } from '../../../ir/model.js';
|
|
2
|
+
import type { ClassMethod } from '../../../projection/classes.js';
|
|
3
|
+
import type { Representation } from '../../../representation/model.js';
|
|
4
|
+
import { type EmitContext } from '../emit-context.js';
|
|
5
|
+
/** Render the projected read-time selection using the native allocation header.
|
|
6
|
+
* Each arm returns the ordinary method object, preserving its exact thunk and
|
|
7
|
+
* environment even when Function.call later supplies a different receiver.
|
|
8
|
+
*/
|
|
9
|
+
export declare const computedOverriddenMethodValueText: (ctx: EmitContext, operation: GetOperation, key: string, materialize: (method: ClassMethod) => {
|
|
10
|
+
readonly text: string;
|
|
11
|
+
readonly type: string;
|
|
12
|
+
}) => {
|
|
13
|
+
readonly text: string;
|
|
14
|
+
readonly type: string;
|
|
15
|
+
};
|
|
16
|
+
/** A tagged-union leaf uses the same allocation-selected method as a computed
|
|
17
|
+
* read on a lone class; the static arm is not the allocation's exact class.
|
|
18
|
+
*/
|
|
19
|
+
export declare const overriddenMethodValueText: (ctx: EmitContext, receiver: Representation, receiverText: string, key: string, materialize: (method: ClassMethod) => {
|
|
20
|
+
readonly text: string;
|
|
21
|
+
readonly type: string;
|
|
22
|
+
}) => {
|
|
23
|
+
readonly text: string;
|
|
24
|
+
readonly type: string;
|
|
25
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { classMethodValueArmsOf } from '../../../projection/dispatch.js';
|
|
2
|
+
import { createCppEmitBlockedError, operandText } from '../emit-context.js';
|
|
3
|
+
import { cppClassName } from '../types.js';
|
|
4
|
+
/** Render the projected read-time selection using the native allocation header.
|
|
5
|
+
* Each arm returns the ordinary method object, preserving its exact thunk and
|
|
6
|
+
* environment even when Function.call later supplies a different receiver.
|
|
7
|
+
*/
|
|
8
|
+
export const computedOverriddenMethodValueText = (ctx, operation, key, materialize) => {
|
|
9
|
+
return overriddenMethodValueText(ctx, operation.receiver.representation, operandText(ctx, operation.receiver), key, materialize);
|
|
10
|
+
};
|
|
11
|
+
/** A tagged-union leaf uses the same allocation-selected method as a computed
|
|
12
|
+
* read on a lone class; the static arm is not the allocation's exact class.
|
|
13
|
+
*/
|
|
14
|
+
export const overriddenMethodValueText = (ctx, receiver, receiverText, key, materialize) => {
|
|
15
|
+
const arms = receiver.kind === 'class-ref' ? classMethodValueArmsOf(ctx.classes, receiver.declaration, key) : null;
|
|
16
|
+
if (arms === null)
|
|
17
|
+
throw createCppEmitBlockedError('property-access:computed-class-method-virtual', `computed method "${key}" has no complete native prototype selection for this family`);
|
|
18
|
+
const values = arms.map((arm) => ({ ...arm, ...materialize(arm.method) }));
|
|
19
|
+
const type = values[0].type;
|
|
20
|
+
const branches = values.map((arm) => `if (gea::host::hasNativeClassLayoutRef<${cppClassName(arm.allocation)}>(${receiverText})) return ${arm.text};`);
|
|
21
|
+
return { type, text: `([&]() -> ${type} { ${branches.join(' ')} std::abort(); })()` };
|
|
22
|
+
};
|