@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,432 @@
|
|
|
1
|
+
import { classMemberOf } from '../../projection/fields.js';
|
|
2
|
+
import { operandsOfIrOperation } from '../../ir/queries.js';
|
|
3
|
+
import { fieldDeclaringStructOf, structNameOfReceiver } from './class-layout.js';
|
|
4
|
+
const operationsByResult = (body) => {
|
|
5
|
+
const byResult = new Map();
|
|
6
|
+
for (const block of body.blocks.values()) {
|
|
7
|
+
for (const operation of block.operations) {
|
|
8
|
+
const result = 'result' in operation ? operation.result : null;
|
|
9
|
+
if (result)
|
|
10
|
+
byResult.set(result.id, operation);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return byResult;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Every value in this body that can reach a BRANCH condition.
|
|
17
|
+
*
|
|
18
|
+
* The backward slice a node child's dependency narrowing is cut along. A read
|
|
19
|
+
* that reaches a branch selects which subtree the body produces; a read that
|
|
20
|
+
* only flows into a value the body hands onward does not, and -- when the body
|
|
21
|
+
* is a component whose own JSX binds that value -- the caller re-running is
|
|
22
|
+
* the one thing that cannot be justified by it. Conservative in the safe
|
|
23
|
+
* direction: a `get`'s receiver is walked too, and an argument of a call whose
|
|
24
|
+
* result reaches a branch counts as reaching it.
|
|
25
|
+
*/
|
|
26
|
+
const branchInfluencedValues = (body) => {
|
|
27
|
+
const byResult = operationsByResult(body);
|
|
28
|
+
const reached = new Set();
|
|
29
|
+
const pending = [];
|
|
30
|
+
const visit = (operand) => {
|
|
31
|
+
if (reached.has(operand.value))
|
|
32
|
+
return;
|
|
33
|
+
reached.add(operand.value);
|
|
34
|
+
pending.push(operand.value);
|
|
35
|
+
};
|
|
36
|
+
for (const block of body.blocks.values()) {
|
|
37
|
+
const terminator = block.terminator;
|
|
38
|
+
if (terminator.kind === 'branch')
|
|
39
|
+
visit(terminator.condition);
|
|
40
|
+
else if (terminator.kind === 'switch') {
|
|
41
|
+
visit(terminator.discriminant);
|
|
42
|
+
for (const branch of terminator.cases)
|
|
43
|
+
visit(branch.test);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
while (pending.length > 0) {
|
|
47
|
+
const value = pending.pop();
|
|
48
|
+
const operation = byResult.get(value);
|
|
49
|
+
if (!operation)
|
|
50
|
+
continue;
|
|
51
|
+
for (const operand of operandsOfIrOperation(operation))
|
|
52
|
+
visit(operand);
|
|
53
|
+
}
|
|
54
|
+
return reached;
|
|
55
|
+
};
|
|
56
|
+
const dependenciesOfBody = (body, classes, reactive) => {
|
|
57
|
+
const byResult = operationsByResult(body);
|
|
58
|
+
const influenced = branchInfluencedValues(body);
|
|
59
|
+
const found = [];
|
|
60
|
+
const at = new Map();
|
|
61
|
+
for (const block of body.blocks.values()) {
|
|
62
|
+
for (const operation of block.operations) {
|
|
63
|
+
if (operation.kind !== 'get')
|
|
64
|
+
continue;
|
|
65
|
+
const receiver = operation.receiver.representation;
|
|
66
|
+
const keyOperation = byResult.get(operation.key.value);
|
|
67
|
+
if (!keyOperation || keyOperation.kind !== 'constant')
|
|
68
|
+
continue;
|
|
69
|
+
const key = keyOperation.text;
|
|
70
|
+
// A class resolves the DECLARING struct along its inheritance chain; a
|
|
71
|
+
// record -- an element of a reactive array -- is its own declaring
|
|
72
|
+
// struct. Both end at the struct name a member pointer must name, which
|
|
73
|
+
// is what the reactive plan is keyed by, and both are one function.
|
|
74
|
+
const declaring = fieldDeclaringStructOf(classes, receiver, key);
|
|
75
|
+
if (declaring === null)
|
|
76
|
+
continue;
|
|
77
|
+
const revision = reactive.revisions.get(declaring)?.has(key) === true;
|
|
78
|
+
if (!revision && reactive.celled.get(declaring)?.has(key) !== true)
|
|
79
|
+
continue;
|
|
80
|
+
const receiverOperation = byResult.get(operation.receiver.value);
|
|
81
|
+
const source = receiverOperation?.kind === 'binding-read'
|
|
82
|
+
? { kind: 'binding', declaration: receiverOperation.declaration }
|
|
83
|
+
: receiverOperation?.kind === 'receiver'
|
|
84
|
+
? { kind: 'receiver' }
|
|
85
|
+
: null;
|
|
86
|
+
if (!source)
|
|
87
|
+
continue;
|
|
88
|
+
const structural = influenced.has(operation.result.id);
|
|
89
|
+
const token = `${declaring}|${key}|${source.kind}|${source.kind === 'binding' ? source.declaration : ''}`;
|
|
90
|
+
const existing = at.get(token);
|
|
91
|
+
if (existing !== undefined) {
|
|
92
|
+
// The same field read twice: structural if EITHER read is. One read
|
|
93
|
+
// that steers a branch is enough to make the field select structure.
|
|
94
|
+
if (structural && !found[existing].structural)
|
|
95
|
+
found[existing] = { ...found[existing], structural: true };
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
at.set(token, found.length);
|
|
99
|
+
found.push({ dependency: { struct: declaring, key, revision, source }, structural });
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return found;
|
|
103
|
+
};
|
|
104
|
+
const tokenOf = (dependency) => `${dependency.struct}|${dependency.key}|${dependency.source.kind}|${dependency.source.kind === 'binding' ? dependency.source.declaration : ''}`;
|
|
105
|
+
/**
|
|
106
|
+
* One callee dependency as the CALLER owns it, or `null` when the caller has no
|
|
107
|
+
* expression for its owner.
|
|
108
|
+
*
|
|
109
|
+
* A `binding` source survives unchanged: it names a module-scope cell by a
|
|
110
|
+
* global C++ name, and that name is the same one in every frame. A `receiver`
|
|
111
|
+
* source is the callee's `this`, which the caller knows only as whatever it
|
|
112
|
+
* passed -- so it is re-pointed through that operand under the SAME two shapes
|
|
113
|
+
* `dependenciesOfBody` accepts for a read of its own, and refused otherwise.
|
|
114
|
+
*/
|
|
115
|
+
const throughReceiver = (dependency, receiver, byResult) => {
|
|
116
|
+
if (dependency.source.kind === 'binding')
|
|
117
|
+
return dependency;
|
|
118
|
+
if (!receiver)
|
|
119
|
+
return null;
|
|
120
|
+
const receiverOperation = byResult.get(receiver.value);
|
|
121
|
+
if (receiverOperation?.kind === 'binding-read') {
|
|
122
|
+
return { ...dependency, source: { kind: 'binding', declaration: receiverOperation.declaration } };
|
|
123
|
+
}
|
|
124
|
+
if (receiverOperation?.kind === 'receiver')
|
|
125
|
+
return { ...dependency, source: { kind: 'receiver' } };
|
|
126
|
+
return null;
|
|
127
|
+
};
|
|
128
|
+
/**
|
|
129
|
+
* Every body this one enters with a receiver it names, as (callee, receiver)
|
|
130
|
+
* edges for the closure below.
|
|
131
|
+
*
|
|
132
|
+
* TWO shapes, and the second is the one that matters here. A `call` whose
|
|
133
|
+
* callee this IR closed is the obvious edge. An ACCESSOR read is not a call in
|
|
134
|
+
* the IR at all -- `{reader.pageNumberLabel}` is a `get`, and it is
|
|
135
|
+
* `emit-class-properties.ts` that renders it as a call of the getter's body
|
|
136
|
+
* (`site.accessor.getter`) -- so a walk that looked only for `call` would miss
|
|
137
|
+
* every getter in the program, which is exactly the shape a computed JSX slot
|
|
138
|
+
* takes. The resolution asked here is `classMemberOf`, the same authority that
|
|
139
|
+
* emitter uses, rather than a second reading of the layout.
|
|
140
|
+
*/
|
|
141
|
+
const receiverEdgesOf = (body, classes) => {
|
|
142
|
+
const edges = [];
|
|
143
|
+
const byResult = operationsByResult(body);
|
|
144
|
+
for (const block of body.blocks.values()) {
|
|
145
|
+
for (const operation of block.operations) {
|
|
146
|
+
if (operation.kind === 'call') {
|
|
147
|
+
const closed = operation.closedCallee;
|
|
148
|
+
if (closed && closed.kind === 'exact')
|
|
149
|
+
edges.push({
|
|
150
|
+
callee: closed.functionId,
|
|
151
|
+
receiver: operation.receiver,
|
|
152
|
+
lifted: byResult.get(operation.callee.value)?.kind === 'allocate-callable'
|
|
153
|
+
});
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
if (operation.kind !== 'get')
|
|
157
|
+
continue;
|
|
158
|
+
const receiver = operation.receiver.representation;
|
|
159
|
+
if (receiver.kind !== 'class-ref')
|
|
160
|
+
continue;
|
|
161
|
+
const keyOperation = byResult.get(operation.key.value);
|
|
162
|
+
if (!keyOperation || keyOperation.kind !== 'constant')
|
|
163
|
+
continue;
|
|
164
|
+
const site = classMemberOf(classes, receiver.declaration, keyOperation.text);
|
|
165
|
+
if (site === null || site.kind !== 'accessor' || site.accessor.getter === null)
|
|
166
|
+
continue;
|
|
167
|
+
edges.push({ callee: site.accessor.getter, receiver: operation.receiver, lifted: false });
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return edges;
|
|
171
|
+
};
|
|
172
|
+
/**
|
|
173
|
+
* A seed grown to a fixed point over the call graph.
|
|
174
|
+
*
|
|
175
|
+
* Two passes rather than one recursion: a call graph with a cycle (a getter
|
|
176
|
+
* reading another getter that reads it back) has no bottom to recurse from,
|
|
177
|
+
* and a monotone worklist over a finite set of (owner, dependency) pairs simply
|
|
178
|
+
* terminates.
|
|
179
|
+
*/
|
|
180
|
+
const closeOverCalls = (seed, calls, results, callers, admits) => {
|
|
181
|
+
const grown = new Map();
|
|
182
|
+
const tokens = new Map();
|
|
183
|
+
for (const [owner, dependencies] of seed) {
|
|
184
|
+
grown.set(owner, [...dependencies]);
|
|
185
|
+
tokens.set(owner, new Set(dependencies.map(tokenOf)));
|
|
186
|
+
}
|
|
187
|
+
const pending = [...grown.keys()];
|
|
188
|
+
while (pending.length > 0) {
|
|
189
|
+
const callee = pending.pop();
|
|
190
|
+
const calleeDependencies = grown.get(callee);
|
|
191
|
+
if (!calleeDependencies || calleeDependencies.length === 0)
|
|
192
|
+
continue;
|
|
193
|
+
for (const caller of callers.get(callee) ?? []) {
|
|
194
|
+
const own = grown.get(caller);
|
|
195
|
+
const seen = tokens.get(caller);
|
|
196
|
+
const byResult = results.get(caller);
|
|
197
|
+
if (!own || !seen || !byResult)
|
|
198
|
+
continue;
|
|
199
|
+
let grew = false;
|
|
200
|
+
for (const call of calls.get(caller) ?? []) {
|
|
201
|
+
if (call.callee !== callee || !admits(call))
|
|
202
|
+
continue;
|
|
203
|
+
for (const dependency of calleeDependencies) {
|
|
204
|
+
const carried = throughReceiver(dependency, call.receiver, byResult);
|
|
205
|
+
if (!carried)
|
|
206
|
+
continue;
|
|
207
|
+
const token = tokenOf(carried);
|
|
208
|
+
if (seen.has(token))
|
|
209
|
+
continue;
|
|
210
|
+
seen.add(token);
|
|
211
|
+
own.push(carried);
|
|
212
|
+
grew = true;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
if (grew)
|
|
216
|
+
pending.push(caller);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return grown;
|
|
220
|
+
};
|
|
221
|
+
export const reactiveDependenciesOfBodies = (bodies, classes, reactive) => {
|
|
222
|
+
const empty = new Map();
|
|
223
|
+
if (reactive.cell === null || (reactive.celled.size === 0 && reactive.revisions.size === 0))
|
|
224
|
+
return { all: empty, node: empty };
|
|
225
|
+
const direct = new Map();
|
|
226
|
+
const directStructural = new Map();
|
|
227
|
+
const calls = new Map();
|
|
228
|
+
const results = new Map();
|
|
229
|
+
const callers = new Map();
|
|
230
|
+
for (const body of bodies) {
|
|
231
|
+
const owner = body.sourceOwner;
|
|
232
|
+
const found = dependenciesOfBody(body, classes, reactive);
|
|
233
|
+
direct.set(owner, found.map((entry) => entry.dependency));
|
|
234
|
+
directStructural.set(owner, found.filter((entry) => entry.structural).map((entry) => entry.dependency));
|
|
235
|
+
results.set(owner, operationsByResult(body));
|
|
236
|
+
const bodyCalls = receiverEdgesOf(body, classes);
|
|
237
|
+
calls.set(owner, bodyCalls);
|
|
238
|
+
for (const call of bodyCalls) {
|
|
239
|
+
const existing = callers.get(call.callee);
|
|
240
|
+
if (existing)
|
|
241
|
+
existing.add(owner);
|
|
242
|
+
else
|
|
243
|
+
callers.set(call.callee, new Set([owner]));
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
const bound = (edge) => !edge.lifted;
|
|
247
|
+
const all = closeOverCalls(direct, calls, results, callers, () => true);
|
|
248
|
+
const structural = closeOverCalls(directStructural, calls, results, callers, bound);
|
|
249
|
+
// The node census: this body's own reads, plus only what its callees BRANCH
|
|
250
|
+
// on. Assembled here rather than by a third closure because it is not a
|
|
251
|
+
// fixed point -- it is one step out of `structural`, which already is one.
|
|
252
|
+
const node = new Map();
|
|
253
|
+
for (const [owner, own] of direct) {
|
|
254
|
+
const merged = [...own];
|
|
255
|
+
const seen = new Set(merged.map(tokenOf));
|
|
256
|
+
const byResult = results.get(owner);
|
|
257
|
+
if (!byResult)
|
|
258
|
+
continue;
|
|
259
|
+
for (const call of calls.get(owner) ?? []) {
|
|
260
|
+
if (!bound(call))
|
|
261
|
+
continue;
|
|
262
|
+
for (const dependency of structural.get(call.callee) ?? []) {
|
|
263
|
+
const carried = throughReceiver(dependency, call.receiver, byResult);
|
|
264
|
+
if (!carried)
|
|
265
|
+
continue;
|
|
266
|
+
const token = tokenOf(carried);
|
|
267
|
+
if (seen.has(token))
|
|
268
|
+
continue;
|
|
269
|
+
seen.add(token);
|
|
270
|
+
merged.push(carried);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
if (merged.length > 0)
|
|
274
|
+
node.set(owner, merged);
|
|
275
|
+
}
|
|
276
|
+
const allByOwner = new Map();
|
|
277
|
+
for (const [owner, dependencies] of all) {
|
|
278
|
+
if (dependencies.length > 0)
|
|
279
|
+
allByOwner.set(owner, dependencies);
|
|
280
|
+
}
|
|
281
|
+
return { all: allByOwner, node };
|
|
282
|
+
};
|
|
283
|
+
/**
|
|
284
|
+
* Which RECORD fields a JSX site actually binds, keyed by struct name.
|
|
285
|
+
*
|
|
286
|
+
* The elements of a reactive array are only worth celling when a rendered row
|
|
287
|
+
* reads them -- `records.ts` cells exactly this set. Celling every element
|
|
288
|
+
* record of every array field instead is not merely wasteful, it is wrong:
|
|
289
|
+
* `Signal<T>` is not the field's declared carrier, so a struct that is also
|
|
290
|
+
* read by something carrier-sensitive stops compiling. `gea-bench` holds both
|
|
291
|
+
* `rows` (rendered) and `items` (parsed out of JSON), and celling `Item.id`
|
|
292
|
+
* made `gea_json_read(reader, out.id)` an error -- a real defect found by the
|
|
293
|
+
* corpus, not a hypothetical.
|
|
294
|
+
*
|
|
295
|
+
* Two shapes reach a JSX slot, and both are recorded:
|
|
296
|
+
*
|
|
297
|
+
* - a DIRECT read -- `id={cell.id}` -- whose `get` result is the operand of
|
|
298
|
+
* an `element-prop`/`element-child`, possibly through the record that a
|
|
299
|
+
* `style={{...}}` object is built up as.
|
|
300
|
+
* - a THUNK read -- `width={cell.filled ? a : b}`, which
|
|
301
|
+
* `plugins/gea/reactive-slots.ts` rewrites to an immediately-called arrow.
|
|
302
|
+
* The operand is then the CALL, and the fields live in the callee's own
|
|
303
|
+
* body, which is a separate `IrBody`. The callee is recognised by its
|
|
304
|
+
* `allocate-callable` defining the callee operand -- the shape only an
|
|
305
|
+
* IIFE has -- and its body is swept in a second pass.
|
|
306
|
+
*
|
|
307
|
+
* Deliberately computed WITHOUT consulting `ReactiveCellPlan.celled`: that map
|
|
308
|
+
* is derived from this one, so asking it here would be a cycle. This answers
|
|
309
|
+
* the prior question -- what does the program bind -- and celling follows.
|
|
310
|
+
*/
|
|
311
|
+
export const reactiveBoundRecordFields = (bodies) => {
|
|
312
|
+
const bound = new Map();
|
|
313
|
+
const thunks = new Set();
|
|
314
|
+
const noteRead = (operation, byResult) => {
|
|
315
|
+
if (operation.kind !== 'get')
|
|
316
|
+
return;
|
|
317
|
+
// Only RECORD receivers. A class field is celled by the plugin's own
|
|
318
|
+
// `ReactiveCellPlan.fields`, which states the component's reactive members
|
|
319
|
+
// directly; this map exists solely to narrow the ELEMENT records derived
|
|
320
|
+
// from those fields.
|
|
321
|
+
const representation = operation.receiver.representation;
|
|
322
|
+
if (representation.kind !== 'record' && representation.kind !== 'native-record-ref')
|
|
323
|
+
return;
|
|
324
|
+
const struct = structNameOfReceiver(representation);
|
|
325
|
+
const keyOperation = byResult.get(operation.key.value);
|
|
326
|
+
if (struct === null || !keyOperation || keyOperation.kind !== 'constant')
|
|
327
|
+
return;
|
|
328
|
+
const keys = bound.get(struct) ?? new Set();
|
|
329
|
+
keys.add(keyOperation.text);
|
|
330
|
+
bound.set(struct, keys);
|
|
331
|
+
};
|
|
332
|
+
const noteThunk = (operation, byResult) => {
|
|
333
|
+
if (operation.kind !== 'call')
|
|
334
|
+
return;
|
|
335
|
+
const callee = byResult.get(operation.callee.value);
|
|
336
|
+
if (callee && callee.kind === 'allocate-callable')
|
|
337
|
+
thunks.add(callee.functionId);
|
|
338
|
+
};
|
|
339
|
+
// Which values a `style={{...}}` record is built out of. The members of an
|
|
340
|
+
// object literal in a JSX attribute do not arrive as `allocate-record`
|
|
341
|
+
// fields -- they are installed as separate stores onto the allocated result
|
|
342
|
+
// -- so reaching them means following the receiver, not the constructor.
|
|
343
|
+
const storedInto = (body) => {
|
|
344
|
+
const byReceiver = new Map();
|
|
345
|
+
for (const block of body.blocks.values()) {
|
|
346
|
+
for (const operation of block.operations) {
|
|
347
|
+
if (operation.kind !== 'set' && operation.kind !== 'define-own-property')
|
|
348
|
+
continue;
|
|
349
|
+
const target = byReceiver.get(operation.receiver.value) ?? [];
|
|
350
|
+
target.push(operation.value.value);
|
|
351
|
+
byReceiver.set(operation.receiver.value, target);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
return byReceiver;
|
|
355
|
+
};
|
|
356
|
+
// Pass one: what each body binds DIRECTLY into a JSX slot, and which thunks
|
|
357
|
+
// those slots call.
|
|
358
|
+
for (const body of bodies) {
|
|
359
|
+
const byResult = operationsByResult(body);
|
|
360
|
+
const stores = storedInto(body);
|
|
361
|
+
const queue = [];
|
|
362
|
+
for (const block of body.blocks.values()) {
|
|
363
|
+
for (const operation of block.operations) {
|
|
364
|
+
if (operation.kind === 'element-prop')
|
|
365
|
+
queue.push(operation.value.value);
|
|
366
|
+
else if (operation.kind === 'element-child')
|
|
367
|
+
queue.push(operation.child.value);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
const seen = new Set();
|
|
371
|
+
while (queue.length > 0) {
|
|
372
|
+
const value = queue.pop();
|
|
373
|
+
if (value === undefined || seen.has(value))
|
|
374
|
+
continue;
|
|
375
|
+
seen.add(value);
|
|
376
|
+
for (const stored of stores.get(value) ?? [])
|
|
377
|
+
queue.push(stored);
|
|
378
|
+
const operation = byResult.get(value);
|
|
379
|
+
if (!operation)
|
|
380
|
+
continue;
|
|
381
|
+
noteRead(operation, byResult);
|
|
382
|
+
noteThunk(operation, byResult);
|
|
383
|
+
if (operation.kind === 'allocate-record')
|
|
384
|
+
for (const field of operation.fields)
|
|
385
|
+
queue.push(field.value.value);
|
|
386
|
+
// A store THREADS its receiver: `style={{a, b}}` is
|
|
387
|
+
// `allocate-record -> v29`, `set(v29,'a') -> v30`, `set(v30,'b') -> v31`,
|
|
388
|
+
// and the attribute's operand is v31. Reaching the members means walking
|
|
389
|
+
// back down that chain -- taking each store's own value AND its receiver
|
|
390
|
+
// -- not looking up v31 as a receiver, which it never is.
|
|
391
|
+
if (operation.kind === 'set' || operation.kind === 'define-own-property') {
|
|
392
|
+
queue.push(operation.value.value);
|
|
393
|
+
queue.push(operation.receiver.value);
|
|
394
|
+
}
|
|
395
|
+
// A carrier change is not a new value. Since lowering owns conversions,
|
|
396
|
+
// a thunk call whose `double` lands in a style member's
|
|
397
|
+
// `Optional<double>` is a `convert` between the call and the store, and
|
|
398
|
+
// stopping here left the call unseen: the thunk was never swept, the
|
|
399
|
+
// fields it reads were never bound, and so never celled -- every row of
|
|
400
|
+
// button-tetris's settled stack rendered once and a locked piece
|
|
401
|
+
// vanished, while the `key={cell.id}` read beside it, which needs no
|
|
402
|
+
// conversion, was celled as before.
|
|
403
|
+
if (operation.kind === 'convert')
|
|
404
|
+
queue.push(operation.source.value);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
// Pass two: a thunk's whole body is its dependency set -- every field it
|
|
408
|
+
// reads is one the slot re-reads when it re-runs -- so there is nothing to
|
|
409
|
+
// trace inside it. Repeated to a fixpoint because a thunk can call another
|
|
410
|
+
// (a style member's slot inside a row's slot), and a callee's body may sit
|
|
411
|
+
// anywhere in `bodies` relative to its caller's.
|
|
412
|
+
const swept = new Set();
|
|
413
|
+
for (;;) {
|
|
414
|
+
let grew = false;
|
|
415
|
+
for (const body of bodies) {
|
|
416
|
+
if (!thunks.has(body.sourceOwner) || swept.has(body.sourceOwner))
|
|
417
|
+
continue;
|
|
418
|
+
swept.add(body.sourceOwner);
|
|
419
|
+
grew = true;
|
|
420
|
+
const byResult = operationsByResult(body);
|
|
421
|
+
for (const block of body.blocks.values()) {
|
|
422
|
+
for (const operation of block.operations) {
|
|
423
|
+
noteRead(operation, byResult);
|
|
424
|
+
noteThunk(operation, byResult);
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
if (!grew)
|
|
429
|
+
break;
|
|
430
|
+
}
|
|
431
|
+
return bound;
|
|
432
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { IrBody } from '../../ir/model.js';
|
|
2
|
+
import type { DeclarationId, IrValueId } from '../../identity/ids.js';
|
|
3
|
+
import type { EmitContext, ReactiveRevisionOrigin } from './emit-context.js';
|
|
4
|
+
export interface ReactiveOrigins {
|
|
5
|
+
readonly origins: ReadonlyMap<IrValueId, ReactiveRevisionOrigin>;
|
|
6
|
+
readonly bindingOrigins: ReadonlyMap<DeclarationId, ReactiveRevisionOrigin>;
|
|
7
|
+
readonly fieldReads: ReadonlyMap<IrValueId, ReactiveRevisionOrigin>;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Which values in one body carry a reactive revision cell, and which reads owe
|
|
11
|
+
* a subscription -- settled before the body renders a line.
|
|
12
|
+
*
|
|
13
|
+
* Distinct from `reactive-dependencies.ts`, which answers a whole-program
|
|
14
|
+
* question for the JSX caller (which fields does this THUNK read, and through
|
|
15
|
+
* what nameable owner). This is the per-body flow: which SSA values in THIS
|
|
16
|
+
* body came out of reactive state, so that a store through one of them ticks
|
|
17
|
+
* the right cell.
|
|
18
|
+
*
|
|
19
|
+
* The channel used to be five render-time side effects: two seeds inside
|
|
20
|
+
* resolvers deep in the get ladder, and three relays (`emitGet`,
|
|
21
|
+
* `arrayMemberText`, `emitBindingRead`/`emitBindingWrite`) that copied an
|
|
22
|
+
* origin from one value to the next as each happened to render. That made the
|
|
23
|
+
* printer's own visiting order the authority over a dataflow fact, and it made
|
|
24
|
+
* the seeds conditional on which rung of the ladder answered the access --
|
|
25
|
+
* exactly the way a fact goes missing.
|
|
26
|
+
*
|
|
27
|
+
* The seeds are now two claims (`reactiveClassFieldClaim`,
|
|
28
|
+
* `reactiveRecordFieldClaim`) living with the layout each asks about, and this
|
|
29
|
+
* is their single walk. The relay is stated once, here: an origin is a property
|
|
30
|
+
* of the VALUE, so anything read THROUGH a value that came out of reactive
|
|
31
|
+
* array state keeps that state's revision cell -- `this.cells[i]` is the
|
|
32
|
+
* element, `cell.color` is a field of it, and a write to either has to tick the
|
|
33
|
+
* same cell. It survives the local a program parks it in, which is what the
|
|
34
|
+
* binding pair carries.
|
|
35
|
+
*
|
|
36
|
+
* Deliberately ONE forward pass in `blockOrder`, not a fixed point. A fixed
|
|
37
|
+
* point is the stronger dataflow answer and would additionally reach a binding
|
|
38
|
+
* whose only write is later in the body than its read -- around a loop back
|
|
39
|
+
* edge, say. That is a real difference in what gets subscribed, so it is a
|
|
40
|
+
* change to make on its own evidence and gate on its own, not something to
|
|
41
|
+
* smuggle in under a refactor whose whole claim is that the emitted set does
|
|
42
|
+
* not move.
|
|
43
|
+
*/
|
|
44
|
+
export declare const reactiveOriginsOf: (ctx: EmitContext, body: IrBody) => ReactiveOrigins;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { allOperationsOf } from '../../ir/model.js';
|
|
2
|
+
import { reactiveClassFieldClaim } from './class-properties/emit-class-properties.js';
|
|
3
|
+
import { reactiveRecordFieldClaim } from './emit-properties.js';
|
|
4
|
+
/**
|
|
5
|
+
* Which values in one body carry a reactive revision cell, and which reads owe
|
|
6
|
+
* a subscription -- settled before the body renders a line.
|
|
7
|
+
*
|
|
8
|
+
* Distinct from `reactive-dependencies.ts`, which answers a whole-program
|
|
9
|
+
* question for the JSX caller (which fields does this THUNK read, and through
|
|
10
|
+
* what nameable owner). This is the per-body flow: which SSA values in THIS
|
|
11
|
+
* body came out of reactive state, so that a store through one of them ticks
|
|
12
|
+
* the right cell.
|
|
13
|
+
*
|
|
14
|
+
* The channel used to be five render-time side effects: two seeds inside
|
|
15
|
+
* resolvers deep in the get ladder, and three relays (`emitGet`,
|
|
16
|
+
* `arrayMemberText`, `emitBindingRead`/`emitBindingWrite`) that copied an
|
|
17
|
+
* origin from one value to the next as each happened to render. That made the
|
|
18
|
+
* printer's own visiting order the authority over a dataflow fact, and it made
|
|
19
|
+
* the seeds conditional on which rung of the ladder answered the access --
|
|
20
|
+
* exactly the way a fact goes missing.
|
|
21
|
+
*
|
|
22
|
+
* The seeds are now two claims (`reactiveClassFieldClaim`,
|
|
23
|
+
* `reactiveRecordFieldClaim`) living with the layout each asks about, and this
|
|
24
|
+
* is their single walk. The relay is stated once, here: an origin is a property
|
|
25
|
+
* of the VALUE, so anything read THROUGH a value that came out of reactive
|
|
26
|
+
* array state keeps that state's revision cell -- `this.cells[i]` is the
|
|
27
|
+
* element, `cell.color` is a field of it, and a write to either has to tick the
|
|
28
|
+
* same cell. It survives the local a program parks it in, which is what the
|
|
29
|
+
* binding pair carries.
|
|
30
|
+
*
|
|
31
|
+
* Deliberately ONE forward pass in `blockOrder`, not a fixed point. A fixed
|
|
32
|
+
* point is the stronger dataflow answer and would additionally reach a binding
|
|
33
|
+
* whose only write is later in the body than its read -- around a loop back
|
|
34
|
+
* edge, say. That is a real difference in what gets subscribed, so it is a
|
|
35
|
+
* change to make on its own evidence and gate on its own, not something to
|
|
36
|
+
* smuggle in under a refactor whose whole claim is that the emitted set does
|
|
37
|
+
* not move.
|
|
38
|
+
*/
|
|
39
|
+
export const reactiveOriginsOf = (ctx, body) => {
|
|
40
|
+
const origins = new Map();
|
|
41
|
+
const bindingOrigins = new Map();
|
|
42
|
+
const fieldReads = new Map();
|
|
43
|
+
for (const blockId of body.blockOrder) {
|
|
44
|
+
const block = body.blocks.get(blockId);
|
|
45
|
+
if (block === undefined)
|
|
46
|
+
continue;
|
|
47
|
+
for (const operation of allOperationsOf(block)) {
|
|
48
|
+
if (operation.kind === 'get') {
|
|
49
|
+
// The relay runs BEFORE the seeds: a field that is itself reactive
|
|
50
|
+
// state names its own cell, and that outranks the one it was reached
|
|
51
|
+
// through -- `cell.filled = 1` notifies the props that read that field,
|
|
52
|
+
// not every row of the list the cell belongs to.
|
|
53
|
+
const inherited = origins.get(operation.receiver.value);
|
|
54
|
+
if (inherited !== undefined)
|
|
55
|
+
origins.set(operation.result.id, inherited);
|
|
56
|
+
const classField = reactiveClassFieldClaim(ctx, operation);
|
|
57
|
+
if (classField !== null) {
|
|
58
|
+
if (classField.kind === 'revision')
|
|
59
|
+
origins.set(operation.result.id, classField.origin);
|
|
60
|
+
else
|
|
61
|
+
fieldReads.set(operation.result.id, classField.origin);
|
|
62
|
+
}
|
|
63
|
+
const recordField = reactiveRecordFieldClaim(ctx, operation);
|
|
64
|
+
if (recordField !== null)
|
|
65
|
+
fieldReads.set(operation.result.id, recordField);
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
if (operation.kind === 'binding-read') {
|
|
69
|
+
const origin = bindingOrigins.get(operation.declaration);
|
|
70
|
+
if (origin !== undefined)
|
|
71
|
+
origins.set(operation.result.id, origin);
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
if (operation.kind === 'binding-write') {
|
|
75
|
+
const written = origins.get(operation.value.value);
|
|
76
|
+
if (written !== undefined)
|
|
77
|
+
bindingOrigins.set(operation.declaration, written);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return { origins, bindingOrigins, fieldReads };
|
|
82
|
+
};
|