@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,587 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Solve a lazily discovered dependency graph. `all-dependencies` admits a
|
|
3
|
+
* recursive component when every member has complete local facts and every
|
|
4
|
+
* dependency outside it is complete. `seeded-origin` preserves the legacy
|
|
5
|
+
* seed rule. `grounding-domains` enforces only domains required by members of
|
|
6
|
+
* a cycle and propagates witnesses over explicitly labelled dependency edges.
|
|
7
|
+
* An acyclic unseeded node remains a complete, vacuous answer.
|
|
8
|
+
*/
|
|
9
|
+
export const dependencyComponentSolver = (expand, mode) => {
|
|
10
|
+
const nodes = new Map();
|
|
11
|
+
// No `groundedDomains` here. It is a pure function of the expanded graph
|
|
12
|
+
// (`groundingDomainsFrom`, memoized by key), never of how components closed,
|
|
13
|
+
// so storing it per node only meant computing it for every node of every
|
|
14
|
+
// component -- the whole value-origin subgraph walked ~115,000 times on
|
|
15
|
+
// the three.js app -- when the only places it can change an answer are a cyclic
|
|
16
|
+
// component's requirement check and the published result of a node someone
|
|
17
|
+
// actually asks about.
|
|
18
|
+
const results = new Map();
|
|
19
|
+
const componentOf = new Map();
|
|
20
|
+
const nodeOf = (key) => {
|
|
21
|
+
let node = nodes.get(key);
|
|
22
|
+
if (node === undefined) {
|
|
23
|
+
node = expand(key);
|
|
24
|
+
nodes.set(key, node);
|
|
25
|
+
// Checked here, once per node, rather than inside the grounding walk.
|
|
26
|
+
// There it was `dependencies.includes(...)` per grounding edge, so a node
|
|
27
|
+
// carrying g grounding edges over d required ones paid g*d comparisons --
|
|
28
|
+
// and paid them again for every root whose walk reached it. One Set of
|
|
29
|
+
// the node's own dependencies answers all g in O(d + g), and moving the
|
|
30
|
+
// check to expansion makes it cover EVERY node the solver sees instead of
|
|
31
|
+
// only the ones some grounding walk happened to reach.
|
|
32
|
+
const grounding = node.groundingDependencies;
|
|
33
|
+
if (grounding !== undefined && grounding.length > 0) {
|
|
34
|
+
const declared = new Set(node.dependencies);
|
|
35
|
+
for (const edge of grounding)
|
|
36
|
+
if (!declared.has(edge.dependency))
|
|
37
|
+
throw new Error('grounding dependency must also be a closure dependency');
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return node;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Grounding walks only the domain-labelled subgraph, never all closure edges.
|
|
44
|
+
*
|
|
45
|
+
* One walk, labelled by the domain of the edge it arrived on -- not a walk to
|
|
46
|
+
* collect the domain universe followed by a per-domain walk to search it. The
|
|
47
|
+
* collecting walk visited every node reachable over ANY grounding edge and
|
|
48
|
+
* could not stop early, because its purpose was to enumerate; the searching
|
|
49
|
+
* walk stops at the first witness. In this compiler there is exactly one
|
|
50
|
+
* domain (`source-value-session.ts`'s `VALUE_ORIGIN`), so the enumeration
|
|
51
|
+
* pass was a full traversal of the value-origin subgraph -- repeated for
|
|
52
|
+
* every node of every component -- to rediscover the single domain the
|
|
53
|
+
* search was about to walk anyway.
|
|
54
|
+
*
|
|
55
|
+
* Dropping it is answer-preserving, not an approximation. A domain can only
|
|
56
|
+
* enter the result by being witnessed on a path of its OWN edges from the
|
|
57
|
+
* root, so the domains the enumeration pass added from a node's
|
|
58
|
+
* `groundingRequirements`, or from an edge of some other domain, could never
|
|
59
|
+
* survive the search: the search would walk no edge of such a domain out of
|
|
60
|
+
* the root and would find nothing but the root's own seeds -- which are
|
|
61
|
+
* admitted here unconditionally, before any edge is walked.
|
|
62
|
+
*/
|
|
63
|
+
const NO_DOMAINS = new Set();
|
|
64
|
+
const groundingCache = new Map();
|
|
65
|
+
const groundingDomainsFrom = (root) => {
|
|
66
|
+
const known = groundingCache.get(root);
|
|
67
|
+
if (known !== undefined)
|
|
68
|
+
return known;
|
|
69
|
+
const rootNode = nodeOf(root);
|
|
70
|
+
// A node that neither witnesses a domain nor labels an edge with one can
|
|
71
|
+
// only ever answer the empty set, and that is most of them: `seeded-origin`
|
|
72
|
+
// clients (`seeded-origins.ts`) never set a grounding field at all, and a
|
|
73
|
+
// solver is built per query there. Answering without allocating a walk is
|
|
74
|
+
// what keeps this off that path entirely.
|
|
75
|
+
if (!rootNode.groundingSeeds?.length && !rootNode.groundingDependencies?.length) {
|
|
76
|
+
groundingCache.set(root, NO_DOMAINS);
|
|
77
|
+
return NO_DOMAINS;
|
|
78
|
+
}
|
|
79
|
+
const found = new Set(rootNode.groundingSeeds ?? []);
|
|
80
|
+
const seen = new Map();
|
|
81
|
+
const frontier = [];
|
|
82
|
+
const follow = (node, domain) => {
|
|
83
|
+
for (const edge of node.groundingDependencies ?? [])
|
|
84
|
+
if (domain === null || edge.domain === domain)
|
|
85
|
+
frontier.push({ key: edge.dependency, domain: edge.domain });
|
|
86
|
+
};
|
|
87
|
+
follow(rootNode, null);
|
|
88
|
+
for (let cursor = 0; cursor < frontier.length; cursor++) {
|
|
89
|
+
const { key, domain } = frontier[cursor];
|
|
90
|
+
if (found.has(domain))
|
|
91
|
+
continue;
|
|
92
|
+
let visited = seen.get(domain);
|
|
93
|
+
if (visited === undefined)
|
|
94
|
+
seen.set(domain, (visited = new Set()));
|
|
95
|
+
if (visited.has(key))
|
|
96
|
+
continue;
|
|
97
|
+
visited.add(key);
|
|
98
|
+
const node = nodeOf(key);
|
|
99
|
+
if (node.groundingSeeds?.includes(domain)) {
|
|
100
|
+
found.add(domain);
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
follow(node, domain);
|
|
104
|
+
}
|
|
105
|
+
groundingCache.set(root, found);
|
|
106
|
+
return found;
|
|
107
|
+
};
|
|
108
|
+
const explainFrom = (root) => {
|
|
109
|
+
const paths = new Map([[root, [root]]]);
|
|
110
|
+
const queue = [root];
|
|
111
|
+
const emittedOpaque = new Map();
|
|
112
|
+
const emittedIncomplete = new Set();
|
|
113
|
+
const emittedCycles = new Set();
|
|
114
|
+
const emittedDomainCycles = new Map();
|
|
115
|
+
const causes = [];
|
|
116
|
+
for (let cursor = 0; cursor < queue.length; cursor++) {
|
|
117
|
+
const key = queue[cursor];
|
|
118
|
+
const node = nodeOf(key);
|
|
119
|
+
const path = paths.get(key);
|
|
120
|
+
const reasons = node.causes ?? [];
|
|
121
|
+
if (!node.locallyComplete && reasons.length === 0 && !emittedIncomplete.has(key)) {
|
|
122
|
+
emittedIncomplete.add(key);
|
|
123
|
+
causes.push({ kind: 'incomplete-node', root: key, path });
|
|
124
|
+
}
|
|
125
|
+
if (!node.locallyComplete) {
|
|
126
|
+
let emitted = emittedOpaque.get(key);
|
|
127
|
+
if (!emitted)
|
|
128
|
+
emittedOpaque.set(key, (emitted = new Set()));
|
|
129
|
+
for (const cause of reasons) {
|
|
130
|
+
if (emitted.has(cause))
|
|
131
|
+
continue;
|
|
132
|
+
emitted.add(cause);
|
|
133
|
+
causes.push({ kind: 'opaque', root: key, cause, path });
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
const component = componentOf.get(key);
|
|
137
|
+
if (component?.unseededCycle && !emittedCycles.has(component)) {
|
|
138
|
+
emittedCycles.add(component);
|
|
139
|
+
causes.push({ kind: 'unseeded-cycle', members: component.members, path });
|
|
140
|
+
}
|
|
141
|
+
if (component?.unseededDomains.size) {
|
|
142
|
+
let emitted = emittedDomainCycles.get(component);
|
|
143
|
+
if (!emitted)
|
|
144
|
+
emittedDomainCycles.set(component, (emitted = new Set()));
|
|
145
|
+
for (const domain of component.unseededDomains) {
|
|
146
|
+
if (emitted.has(domain))
|
|
147
|
+
continue;
|
|
148
|
+
emitted.add(domain);
|
|
149
|
+
causes.push({ kind: 'unseeded-cycle', domain, members: component.members, unmet: component.unmet, path });
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
for (const dependency of node.dependencies) {
|
|
153
|
+
if (paths.has(dependency))
|
|
154
|
+
continue;
|
|
155
|
+
paths.set(dependency, [...path, dependency]);
|
|
156
|
+
queue.push(dependency);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return causes;
|
|
160
|
+
};
|
|
161
|
+
/**
|
|
162
|
+
* A node's published grounding, computed when someone asks for it rather than
|
|
163
|
+
* when its component closed. Same function, same memo, same answer: the walk
|
|
164
|
+
* reads only `expand`ed nodes, which never change, so when it runs cannot
|
|
165
|
+
* change what it returns. In `grounding-domains` mode the legacy aggregate
|
|
166
|
+
* flag is the domain set's emptiness, exactly as the component loop used to
|
|
167
|
+
* record it; in the other modes it stays the seed witness that loop computes.
|
|
168
|
+
*
|
|
169
|
+
* A plain object, not one with accessors. Deferring these two fields behind
|
|
170
|
+
* getters was tried and cost 4.7% of a whole compile in this one function:
|
|
171
|
+
* a result is built for every top-level query, a solver is built per query,
|
|
172
|
+
* and an object literal carrying accessors is far more expensive to create
|
|
173
|
+
* than one carrying values. The walk itself is memoized and answers the
|
|
174
|
+
* no-grounding case without allocating, which is the cheap half anyway.
|
|
175
|
+
*/
|
|
176
|
+
const publish = (root, known) => {
|
|
177
|
+
const groundedDomains = groundingDomainsFrom(root);
|
|
178
|
+
return {
|
|
179
|
+
status: known.status,
|
|
180
|
+
grounded: mode === 'grounding-domains' ? groundedDomains.size > 0 : known.grounded,
|
|
181
|
+
groundedDomains,
|
|
182
|
+
explain: () => explainFrom(root)
|
|
183
|
+
};
|
|
184
|
+
};
|
|
185
|
+
return (root) => {
|
|
186
|
+
const known = results.get(root);
|
|
187
|
+
if (known !== undefined)
|
|
188
|
+
return publish(root, known);
|
|
189
|
+
const indices = new Map();
|
|
190
|
+
const low = new Map();
|
|
191
|
+
const stack = [];
|
|
192
|
+
const active = new Set();
|
|
193
|
+
let next = 0;
|
|
194
|
+
// The low-link is kept in a local for the length of the loop and written to
|
|
195
|
+
// `low` once, on the way out. Nothing reads a node's low-link while its own
|
|
196
|
+
// visit is running -- a back edge reads `indices`, and a tree edge reads the
|
|
197
|
+
// child's low-link only after that child's visit has returned -- so the
|
|
198
|
+
// read-modify-write through the map on every edge was three map operations
|
|
199
|
+
// per edge to maintain a number only this frame could see.
|
|
200
|
+
const visit = (key) => {
|
|
201
|
+
const index = next++;
|
|
202
|
+
indices.set(key, index);
|
|
203
|
+
let lowest = index;
|
|
204
|
+
stack.push(key);
|
|
205
|
+
active.add(key);
|
|
206
|
+
for (const dependency of nodeOf(key).dependencies) {
|
|
207
|
+
if (results.has(dependency))
|
|
208
|
+
continue;
|
|
209
|
+
const seen = indices.get(dependency);
|
|
210
|
+
if (seen === undefined) {
|
|
211
|
+
visit(dependency);
|
|
212
|
+
const reached = low.get(dependency);
|
|
213
|
+
if (reached < lowest)
|
|
214
|
+
lowest = reached;
|
|
215
|
+
}
|
|
216
|
+
else if (seen < lowest && active.has(dependency))
|
|
217
|
+
lowest = seen;
|
|
218
|
+
}
|
|
219
|
+
low.set(key, lowest);
|
|
220
|
+
if (lowest !== index)
|
|
221
|
+
return;
|
|
222
|
+
const members = [];
|
|
223
|
+
let member;
|
|
224
|
+
do {
|
|
225
|
+
member = stack.pop();
|
|
226
|
+
active.delete(member);
|
|
227
|
+
members.push(member);
|
|
228
|
+
} while (member !== key);
|
|
229
|
+
// A singleton component's only member is `key` itself, so membership is
|
|
230
|
+
// an identity test. Most components are singletons, and building a Set to
|
|
231
|
+
// ask one question about one element is the allocation that shows up.
|
|
232
|
+
const memberSet = members.length === 1 ? null : new Set(members);
|
|
233
|
+
let complete = true;
|
|
234
|
+
let grounded = false;
|
|
235
|
+
let cyclic = members.length > 1;
|
|
236
|
+
const unseededDomains = new Set();
|
|
237
|
+
const unmet = [];
|
|
238
|
+
for (const current of members) {
|
|
239
|
+
const node = nodeOf(current);
|
|
240
|
+
complete &&= node.locallyComplete;
|
|
241
|
+
grounded ||= node.seed === true;
|
|
242
|
+
for (const dependency of node.dependencies) {
|
|
243
|
+
if (memberSet === null ? dependency === key : memberSet.has(dependency)) {
|
|
244
|
+
cyclic = true;
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
const dependencyResult = results.get(dependency);
|
|
248
|
+
complete &&= dependencyResult?.status === 'complete';
|
|
249
|
+
grounded ||= dependencyResult?.grounded === true;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
const unseededCycle = mode === 'seeded-origin' && complete && cyclic && !grounded;
|
|
253
|
+
if (unseededCycle)
|
|
254
|
+
complete = false;
|
|
255
|
+
// Only a cyclic component can fail a grounding requirement -- an acyclic
|
|
256
|
+
// node's requirement is discharged by the ordinary completeness rule --
|
|
257
|
+
// so this is the one place the walk has to run before an answer is
|
|
258
|
+
// published, and the members of one cycle are all it has to run for.
|
|
259
|
+
if (mode === 'grounding-domains' && complete && cyclic) {
|
|
260
|
+
for (const current of members) {
|
|
261
|
+
const groundedForNode = groundingDomainsFrom(current);
|
|
262
|
+
for (const domain of nodeOf(current).groundingRequirements ?? []) {
|
|
263
|
+
if (groundedForNode.has(domain))
|
|
264
|
+
continue;
|
|
265
|
+
unseededDomains.add(domain);
|
|
266
|
+
unmet.push(current);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
if (unseededDomains.size > 0)
|
|
270
|
+
complete = false;
|
|
271
|
+
}
|
|
272
|
+
const component = { members, unseededCycle, unseededDomains, unmet };
|
|
273
|
+
for (const current of members) {
|
|
274
|
+
componentOf.set(current, component);
|
|
275
|
+
results.set(current, { status: complete ? 'complete' : 'refused', grounded });
|
|
276
|
+
}
|
|
277
|
+
};
|
|
278
|
+
visit(root);
|
|
279
|
+
return publish(root, results.get(root));
|
|
280
|
+
};
|
|
281
|
+
};
|
|
282
|
+
export const dependencyFactSolver = (expand, mode) => {
|
|
283
|
+
const states = new Map();
|
|
284
|
+
// States, not keys: `propagate` used to hold keys and call `stateOf(key)`
|
|
285
|
+
// on every drain, a Map lookup per edge fire across the three.js app's 14.7M
|
|
286
|
+
// observe edges. The State is already in hand wherever an edge fires or is
|
|
287
|
+
// created, so the queue (and `dependents`, on State above) carry it
|
|
288
|
+
// directly and dedupe on State identity, which is 1:1 with key identity
|
|
289
|
+
// because `states` is the only minter.
|
|
290
|
+
const queue = [];
|
|
291
|
+
const queued = new Set();
|
|
292
|
+
let dependencyRevision = 0;
|
|
293
|
+
// Every reason a node's TRANSFER must run again is a reason its SEAL must run
|
|
294
|
+
// again: the seal is the same transfer with `sealing` set, so it reads the
|
|
295
|
+
// same dependencies and answers differently only when they do. `queue` is
|
|
296
|
+
// drained by `propagate`; this set outlives it, because a seal pass happens
|
|
297
|
+
// after the drain and needs to know what the drain touched.
|
|
298
|
+
const sealDirty = new Set();
|
|
299
|
+
const enqueue = (state) => {
|
|
300
|
+
sealDirty.add(state.key);
|
|
301
|
+
if (queued.has(state))
|
|
302
|
+
return;
|
|
303
|
+
queued.add(state);
|
|
304
|
+
queue.push(state);
|
|
305
|
+
};
|
|
306
|
+
const stateOf = (key) => {
|
|
307
|
+
let state = states.get(key);
|
|
308
|
+
if (state === undefined) {
|
|
309
|
+
const built = {
|
|
310
|
+
key,
|
|
311
|
+
definition: expand(key),
|
|
312
|
+
observedDependencies: new Map(),
|
|
313
|
+
requiredDependencies: new Set(),
|
|
314
|
+
facts: new Set(),
|
|
315
|
+
dependents: new Set(),
|
|
316
|
+
read: (dependency) => readFrom(built, dependency),
|
|
317
|
+
observe: (dependency) => observeFrom(built, dependency),
|
|
318
|
+
holdersOf: (fact) => holdersOfFrom(built, fact)
|
|
319
|
+
};
|
|
320
|
+
state = built;
|
|
321
|
+
states.set(key, state);
|
|
322
|
+
enqueue(built);
|
|
323
|
+
}
|
|
324
|
+
return state;
|
|
325
|
+
};
|
|
326
|
+
/**
|
|
327
|
+
* `seed` is exactly this, exposed: create the state (a no-op if it already
|
|
328
|
+
* exists) and let `stateOf`'s own `enqueue` schedule its first transfer.
|
|
329
|
+
* No edge is recorded anywhere -- nothing subscribes and nothing is
|
|
330
|
+
* subscribed to -- because the only purpose is to make the node exist and
|
|
331
|
+
* run, not to make anyone depend on it.
|
|
332
|
+
*/
|
|
333
|
+
const seed = (key) => {
|
|
334
|
+
stateOf(key);
|
|
335
|
+
};
|
|
336
|
+
// The reverse of `observedDependencies`/`dependents`: every state that has
|
|
337
|
+
// published a given fact VALUE, and every state that has ever asked
|
|
338
|
+
// `holdersOf` about it. Global across every query kind on purpose -- a fact
|
|
339
|
+
// is a fact regardless of which kind of node published it, and the size
|
|
340
|
+
// this costs is bounded by facts actually published (three.js app: ~205,000
|
|
341
|
+
// (state, fact) pairs total), not by how many candidates asked about them
|
|
342
|
+
// (the 456,000 edges this primitive exists to avoid storing).
|
|
343
|
+
const holders = new Map();
|
|
344
|
+
const valueSubscribers = new Map();
|
|
345
|
+
const NO_HOLDERS = [];
|
|
346
|
+
const holdersOfFrom = (ownerState, fact) => {
|
|
347
|
+
let subscribers = valueSubscribers.get(fact);
|
|
348
|
+
if (subscribers === undefined)
|
|
349
|
+
valueSubscribers.set(fact, (subscribers = new Set()));
|
|
350
|
+
// Idempotent by construction (a Set), so re-asking on every re-evaluation
|
|
351
|
+
// of the same node costs a lookup and nothing else -- no revision to bump,
|
|
352
|
+
// no queue entry to make, because registering the subscription changes
|
|
353
|
+
// nothing about what THIS transfer already computed with the holders it
|
|
354
|
+
// just read below. It only matters for facts published AFTER this call,
|
|
355
|
+
// which `propagate` below wakes through this same set.
|
|
356
|
+
subscribers.add(ownerState);
|
|
357
|
+
const holding = holders.get(fact);
|
|
358
|
+
if (holding === undefined)
|
|
359
|
+
return NO_HOLDERS;
|
|
360
|
+
const found = [];
|
|
361
|
+
for (const holder of holding)
|
|
362
|
+
found.push(holder.key);
|
|
363
|
+
return found;
|
|
364
|
+
};
|
|
365
|
+
// The owner's state is handed in rather than looked up: every transfer and
|
|
366
|
+
// every seal reads its dependencies through this, so a map lookup per edge
|
|
367
|
+
// for a state the caller is already holding was, on the three.js app, a quarter of
|
|
368
|
+
// the whole compile.
|
|
369
|
+
const factsFrom = (ownerState, dependency, required) => {
|
|
370
|
+
let dependencyState = ownerState.observedDependencies.get(dependency);
|
|
371
|
+
let changed = false;
|
|
372
|
+
if (dependencyState === undefined) {
|
|
373
|
+
dependencyState = stateOf(dependency);
|
|
374
|
+
ownerState.observedDependencies.set(dependency, dependencyState);
|
|
375
|
+
dependencyState.dependents.add(ownerState);
|
|
376
|
+
dependencyRevision++;
|
|
377
|
+
changed = true;
|
|
378
|
+
}
|
|
379
|
+
if (required && !ownerState.requiredDependencies.has(dependency)) {
|
|
380
|
+
ownerState.requiredDependencies.add(dependency);
|
|
381
|
+
dependencyRevision++;
|
|
382
|
+
changed = true;
|
|
383
|
+
}
|
|
384
|
+
// A new observation may expose facts on the next pass. An upgrade also
|
|
385
|
+
// invalidates the current seal even though the fact edge already existed.
|
|
386
|
+
if (changed)
|
|
387
|
+
enqueue(ownerState);
|
|
388
|
+
// The fact set is handed over as `ReadonlySet`, not as a copy. Copying per
|
|
389
|
+
// edge read was quadratic and made three's WebGLRenderer unfinishable;
|
|
390
|
+
// copying per (node, size) fixed the time and doubled the memory, which is
|
|
391
|
+
// what put the three.js app's third solve into a 4 GB OOM. Neither is necessary:
|
|
392
|
+
// `propagate` adds a node's facts only AFTER its transfer has returned --
|
|
393
|
+
// `evaluate` builds its result eagerly and hands back a set of its own --
|
|
394
|
+
// so no reader is ever iterating a set that is being written.
|
|
395
|
+
return dependencyState.facts;
|
|
396
|
+
};
|
|
397
|
+
const readFrom = (ownerState, dependency) => factsFrom(ownerState, dependency, true);
|
|
398
|
+
const observeFrom = (ownerState, dependency) => factsFrom(ownerState, dependency, false);
|
|
399
|
+
const propagate = () => {
|
|
400
|
+
for (let cursor = 0; cursor < queue.length; cursor++) {
|
|
401
|
+
const state = queue[cursor];
|
|
402
|
+
queued.delete(state);
|
|
403
|
+
counts.transfers++;
|
|
404
|
+
if (countsEnabled && counts.transfers % 200000 === 0)
|
|
405
|
+
report();
|
|
406
|
+
for (const fact of state.definition.transfer(state.read, state.observe, state.holdersOf)) {
|
|
407
|
+
if (state.facts.has(fact))
|
|
408
|
+
continue;
|
|
409
|
+
state.facts.add(fact);
|
|
410
|
+
// This state is now a holder of `fact` -- recorded at the exact point
|
|
411
|
+
// a fact is genuinely NEW, same as `state.facts.add` beside it, so
|
|
412
|
+
// `holders` never grows for a re-observed fact.
|
|
413
|
+
let holding = holders.get(fact);
|
|
414
|
+
if (holding === undefined)
|
|
415
|
+
holders.set(fact, (holding = new Set()));
|
|
416
|
+
holding.add(state);
|
|
417
|
+
for (const dependent of state.dependents)
|
|
418
|
+
enqueue(dependent);
|
|
419
|
+
// A node that asked `holdersOf(fact)` before this state held it named
|
|
420
|
+
// no `K` to depend on -- there was nothing to name -- so an ordinary
|
|
421
|
+
// dependent edge cannot wake it. This is the other half of that
|
|
422
|
+
// subscription: without it, a container whose holder shows up only
|
|
423
|
+
// after `unknown-reads` first ran would publish an incomplete answer
|
|
424
|
+
// forever and never be asked again, which is the silently-wrong
|
|
425
|
+
// result SEMANTIC-AUTHORITY ranks below a slow one.
|
|
426
|
+
const subscribers = valueSubscribers.get(fact);
|
|
427
|
+
if (subscribers !== undefined)
|
|
428
|
+
for (const subscriber of subscribers)
|
|
429
|
+
enqueue(subscriber);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
queue.length = 0;
|
|
433
|
+
};
|
|
434
|
+
// Seals survive between roots. A solved node whose facts and dependencies
|
|
435
|
+
// have not moved seals to the same answer, and re-deriving it is the cost
|
|
436
|
+
// that made this solver quadratic in (top-level queries x nodes discovered):
|
|
437
|
+
// every query re-sealed the whole graph it had explored so far, so the last
|
|
438
|
+
// query of a large program paid for all of it. Only what `enqueue` marked is
|
|
439
|
+
// re-sealed, which is exactly what could have changed.
|
|
440
|
+
const sealed = new Map();
|
|
441
|
+
// `sealRevision` invalidates the hoisted component-solve memo below, so
|
|
442
|
+
// bumping it on a re-seal that reproduces the same answer throws that memo
|
|
443
|
+
// away and forces a full component rebuild for nothing -- on the three.js app every
|
|
444
|
+
// seal was doing exactly that. The grounding fields compare soundly by
|
|
445
|
+
// value: `DependencyGroundingDomain` is `string | symbol`, and a grounding
|
|
446
|
+
// edge's `dependency` is a `K`, which this solver's own contract already
|
|
447
|
+
// requires to have stable identity. `causes` is `R`, a type this solver
|
|
448
|
+
// never gives an equality contract to -- source-value-session's `Cause` is
|
|
449
|
+
// a fresh `{reason, node}` object literal built on every seal call, so
|
|
450
|
+
// `===` per element is the only sound comparison available here. That
|
|
451
|
+
// reports "changed" for a content-identical-but-freshly-allocated cause
|
|
452
|
+
// list, which only over-invalidates (safe, never wrong); the common case --
|
|
453
|
+
// a node that resolves, whose `causes` is `[]` on every seal -- still
|
|
454
|
+
// compares equal by length alone, which is where the savings are.
|
|
455
|
+
const domainsEqual = (a, b) => a.length === b.length && a.every((domain, index) => domain === b[index]);
|
|
456
|
+
const groundingEdgesEqual = (a, b) => a.length === b.length && a.every((edge, index) => edge.domain === b[index].domain && edge.dependency === b[index].dependency);
|
|
457
|
+
const causesEqual = (a, b) => a.length === b.length && a.every((cause, index) => cause === b[index]);
|
|
458
|
+
const sealChanged = (previous, next) => previous === undefined ||
|
|
459
|
+
previous.locallyComplete !== next.locallyComplete ||
|
|
460
|
+
previous.seed !== next.seed ||
|
|
461
|
+
!causesEqual(previous.causes ?? [], next.causes ?? []) ||
|
|
462
|
+
!domainsEqual(previous.groundingRequirements ?? [], next.groundingRequirements ?? []) ||
|
|
463
|
+
!domainsEqual(previous.groundingSeeds ?? [], next.groundingSeeds ?? []) ||
|
|
464
|
+
!groundingEdgesEqual(previous.groundingDependencies ?? [], next.groundingDependencies ?? []);
|
|
465
|
+
const counts = { roots: 0, transfers: 0, seals: 0, componentNodes: 0 };
|
|
466
|
+
// What the heap is actually holding, for the runs where memory is the wall
|
|
467
|
+
// rather than time. Counted only when asked for: it walks every state.
|
|
468
|
+
const sizes = () => {
|
|
469
|
+
if (process.env['GEA_SOLVER_SIZES'] === undefined)
|
|
470
|
+
return '';
|
|
471
|
+
let observed = 0;
|
|
472
|
+
let required = 0;
|
|
473
|
+
let dependents = 0;
|
|
474
|
+
let facts = 0;
|
|
475
|
+
// This solver is generic over K by design -- SEMANTIC-AUTHORITY section 3
|
|
476
|
+
// requires one solved graph, not a solver bespoke to one key shape -- so
|
|
477
|
+
// nothing outside this debug path may assume a key has a `kind`. But
|
|
478
|
+
// attributing the three.js app's 14.7M observe edges to a fix means knowing which
|
|
479
|
+
// caller's loop owns them, and the one real caller's key (`Query` in
|
|
480
|
+
// source-value-session.ts) is a `{ kind: ... }` discriminated union. This
|
|
481
|
+
// reflects into that shape defensively, only inside the
|
|
482
|
+
// GEA_SOLVER_SIZES-gated path that prints nothing in production, and
|
|
483
|
+
// falls back to a single 'unknown' bucket for any key not shaped this way.
|
|
484
|
+
const perKind = new Map();
|
|
485
|
+
for (const state of states.values()) {
|
|
486
|
+
observed += state.observedDependencies.size;
|
|
487
|
+
required += state.requiredDependencies.size;
|
|
488
|
+
dependents += state.dependents.size;
|
|
489
|
+
facts += state.facts.size;
|
|
490
|
+
const kind = state.key.kind;
|
|
491
|
+
const bucketKey = typeof kind === 'string' ? kind : 'unknown';
|
|
492
|
+
let bucket = perKind.get(bucketKey);
|
|
493
|
+
if (bucket === undefined)
|
|
494
|
+
perKind.set(bucketKey, (bucket = { states: 0, observed: 0, required: 0, facts: 0 }));
|
|
495
|
+
bucket.states++;
|
|
496
|
+
bucket.observed += state.observedDependencies.size;
|
|
497
|
+
bucket.required += state.requiredDependencies.size;
|
|
498
|
+
bucket.facts += state.facts.size;
|
|
499
|
+
}
|
|
500
|
+
const byKind = [...perKind]
|
|
501
|
+
.sort(([, a], [, b]) => b.observed - a.observed)
|
|
502
|
+
.map(([kind, kindSizes]) => `\n[SOLVER-KIND] kind=${kind} states=${kindSizes.states} observed=${kindSizes.observed} required=${kindSizes.required} facts=${kindSizes.facts}`)
|
|
503
|
+
.join('');
|
|
504
|
+
return ` observed=${observed} required=${required} dependents=${dependents} facts=${facts}${byKind}`;
|
|
505
|
+
};
|
|
506
|
+
let sealRevision = 0;
|
|
507
|
+
let componentSolve = null;
|
|
508
|
+
let componentDependencyRevision = -1;
|
|
509
|
+
let componentSealRevision = -1;
|
|
510
|
+
const countsEnabled = process.env['GEA_SOLVER_COUNTS'] !== undefined;
|
|
511
|
+
const report = () => {
|
|
512
|
+
if (!countsEnabled)
|
|
513
|
+
return;
|
|
514
|
+
console.error(`[SOLVER] roots=${counts.roots} states=${states.size} transfers=${counts.transfers} seals=${counts.seals} component-expansions=${counts.componentNodes}${sizes()}`);
|
|
515
|
+
};
|
|
516
|
+
if (countsEnabled)
|
|
517
|
+
process.on('exit', report);
|
|
518
|
+
const NO_DEPENDENCIES = [];
|
|
519
|
+
const solve = (root) => {
|
|
520
|
+
counts.roots++;
|
|
521
|
+
// Reported as it goes, not only at exit: a run that has to be killed to be
|
|
522
|
+
// observed reports nothing, which is how a 20-minute compile stayed
|
|
523
|
+
// unattributed for two profiling attempts.
|
|
524
|
+
stateOf(root);
|
|
525
|
+
// Sealing may itself discover a dependency. In that case its transfer and
|
|
526
|
+
// every affected dependent must run again before any status is published.
|
|
527
|
+
while (true) {
|
|
528
|
+
propagate();
|
|
529
|
+
const revisionBeforeSeal = dependencyRevision;
|
|
530
|
+
const dirty = [...sealDirty];
|
|
531
|
+
sealDirty.clear();
|
|
532
|
+
for (const key of dirty) {
|
|
533
|
+
const state = states.get(key);
|
|
534
|
+
if (state === undefined)
|
|
535
|
+
continue;
|
|
536
|
+
counts.seals++;
|
|
537
|
+
if (countsEnabled && counts.seals % 200000 === 0)
|
|
538
|
+
report();
|
|
539
|
+
const next = state.definition.seal(state.read, state.observe, state.holdersOf);
|
|
540
|
+
if (sealChanged(sealed.get(key), next))
|
|
541
|
+
sealRevision++;
|
|
542
|
+
sealed.set(key, next);
|
|
543
|
+
}
|
|
544
|
+
if (queue.length === 0 && sealDirty.size === 0 && dependencyRevision === revisionBeforeSeal)
|
|
545
|
+
break;
|
|
546
|
+
}
|
|
547
|
+
// The component solve reads the SEALED graph, so its answer stands for
|
|
548
|
+
// exactly as long as no node's seal and no node's dependency set has moved
|
|
549
|
+
// -- and both of those are counted. Built inside this per-root call it was
|
|
550
|
+
// thrown away and rebuilt for every root, taking its `results`, `nodes` and
|
|
551
|
+
// `componentOf` caches with it: on the three.js app the graph stopped growing at the
|
|
552
|
+
// eighth root and the next twenty-two thousand each re-expanded ~470 nodes
|
|
553
|
+
// of it, 10.4M expansions of an answer that had not changed. Rebuilding on
|
|
554
|
+
// a revision rather than on every call is the same walk, done once per
|
|
555
|
+
// change instead of once per question.
|
|
556
|
+
if (componentSolve === null || componentDependencyRevision !== dependencyRevision || componentSealRevision !== sealRevision) {
|
|
557
|
+
componentSolve = dependencyComponentSolver((key) => {
|
|
558
|
+
counts.componentNodes++;
|
|
559
|
+
if (countsEnabled && counts.componentNodes % 200000 === 0)
|
|
560
|
+
report();
|
|
561
|
+
const state = states.get(key);
|
|
562
|
+
const local = sealed.get(key);
|
|
563
|
+
if (state === undefined || local === undefined)
|
|
564
|
+
throw new Error('unsealed dependency fact node');
|
|
565
|
+
return { ...local, dependencies: [...state.requiredDependencies] };
|
|
566
|
+
}, mode);
|
|
567
|
+
componentDependencyRevision = dependencyRevision;
|
|
568
|
+
componentSealRevision = sealRevision;
|
|
569
|
+
}
|
|
570
|
+
const result = componentSolve(root);
|
|
571
|
+
if (result.status === 'complete')
|
|
572
|
+
return {
|
|
573
|
+
status: 'complete',
|
|
574
|
+
grounded: result.grounded,
|
|
575
|
+
groundedDomains: result.groundedDomains,
|
|
576
|
+
facts: new Set(stateOf(root).facts),
|
|
577
|
+
explain: result.explain
|
|
578
|
+
};
|
|
579
|
+
return {
|
|
580
|
+
status: 'refused',
|
|
581
|
+
grounded: result.grounded,
|
|
582
|
+
groundedDomains: result.groundedDomains,
|
|
583
|
+
explain: result.explain
|
|
584
|
+
};
|
|
585
|
+
};
|
|
586
|
+
return { solve, requiredDependenciesOf: (key) => states.get(key)?.requiredDependencies ?? NO_DEPENDENCIES, seed };
|
|
587
|
+
};
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { type ValueFlowIndex } from './model.js';
|
|
3
|
+
import type { PrototypeKeyQuery } from '../host-mutation-keys.js';
|
|
4
|
+
import type { OriginAuthority } from './origin-authority.js';
|
|
5
|
+
/**
|
|
6
|
+
* Which property keys a computed key can take, proven from closed callers.
|
|
7
|
+
*
|
|
8
|
+
* Three's `Material.setValues( values )` and `Texture.setValues( values )`
|
|
9
|
+
* store `this[ key ] = newValue` for every `key` of `for ( const key in
|
|
10
|
+
* values )`. Read as "a store under any key", that one write tells every
|
|
11
|
+
* class-family, array-cell, host-mutation and reflection census that each
|
|
12
|
+
* material and texture may have grown an arbitrary property. But `values`
|
|
13
|
+
* only ever holds the options literals the program itself writes --
|
|
14
|
+
* `new MeshPhongMaterial( { color, flatShading: true } )` through the
|
|
15
|
+
* subclass's `this.setValues( parameters )`, and RenderTarget's local
|
|
16
|
+
* `values` literal plus its named writes -- so the key is one of a finite,
|
|
17
|
+
* enumerable set of names.
|
|
18
|
+
*
|
|
19
|
+
* The answer is an UPPER bound: every key the expression can evaluate to at
|
|
20
|
+
* run time is in the set. It is proven, never assumed:
|
|
21
|
+
*
|
|
22
|
+
* - A key spelled as a string (or numeric) literal, a conditional of such,
|
|
23
|
+
* or a binding whose every write is one of those. When the checker types
|
|
24
|
+
* the key as a literal union, the flow proof must fall inside it.
|
|
25
|
+
* - The binding of `for ( k in o )`: every own enumerable key of every value
|
|
26
|
+
* `o` can hold, plus the intrinsic `Object.prototype`'s -- which is why that
|
|
27
|
+
* arm carries an `Object` protocol requirement.
|
|
28
|
+
* - The binding of `for ( k of Object.keys( o ) )` or the first parameter of
|
|
29
|
+
* `Object.keys( o ).forEach( ( k ) => ... )`: own keys only, requiring the
|
|
30
|
+
* intact `Object.keys` and Array protocol.
|
|
31
|
+
*
|
|
32
|
+
* What `o` can hold comes from `sourceRecordDataWritePlanOf`, the shared
|
|
33
|
+
* record-origin authority (cells, complete parameter frames, factories,
|
|
34
|
+
* storage reads). Every origin must be an object literal with static keys, no
|
|
35
|
+
* spread, no accessor and no `__proto__`; `null`/`undefined` add nothing.
|
|
36
|
+
* Then each literal's key set is closed forward: every alias it reaches --
|
|
37
|
+
* cells, and parameters through resolved calls, including every override a
|
|
38
|
+
* method call can dispatch to -- is enumerated, a NAMED write through any of
|
|
39
|
+
* them adds its name, and any computed write, `delete`, bulk merge, method
|
|
40
|
+
* call through the record (which hands it out as `this`), `arguments`
|
|
41
|
+
* exposure, or escape into storage, a return, or an unresolved callee
|
|
42
|
+
* refuses. The order of writes does not matter: the set holds every name any
|
|
43
|
+
* write can add.
|
|
44
|
+
*
|
|
45
|
+
* `GEA_KEY_SET_DEBUG=1` prints every refusal with its reason and location.
|
|
46
|
+
*/
|
|
47
|
+
/** @semanticCategory generic-primitive */
|
|
48
|
+
export interface ComputedKeySetAuthority extends OriginAuthority {
|
|
49
|
+
/**
|
|
50
|
+
* The intrinsic an enumeration depends on is intact: `('Object', undefined)`
|
|
51
|
+
* -- `Object.prototype` carries no enumerable string key a `for-in` would
|
|
52
|
+
* walk; `('Object', 'keys')` -- the static `Object.keys` is the original;
|
|
53
|
+
* `('Array', undefined)` -- the array iteration protocol. Absent, each
|
|
54
|
+
* requirement is registered on the flow's deferred intrinsic ledger (the
|
|
55
|
+
* production path, discharged by the sealed host-mutation census); with
|
|
56
|
+
* neither, the enumeration refuses.
|
|
57
|
+
*/
|
|
58
|
+
readonly intrinsicIntact?: (intrinsic: 'Object' | 'Array', member: string | undefined, location: ts.Node) => boolean;
|
|
59
|
+
}
|
|
60
|
+
export type ComputedKeySetVerdict = {
|
|
61
|
+
readonly kind: 'keys';
|
|
62
|
+
readonly keys: ReadonlySet<string>;
|
|
63
|
+
} | {
|
|
64
|
+
readonly kind: 'refused';
|
|
65
|
+
readonly reason: string;
|
|
66
|
+
readonly at: ts.Node;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* The complete set of property keys `keyExpression` can evaluate to, with the
|
|
70
|
+
* reason and location when that set cannot be proven. See the module comment.
|
|
71
|
+
*/
|
|
72
|
+
export declare const computedKeySetVerdictOf: (checker: ts.TypeChecker, flow: ValueFlowIndex, keyExpression: ts.Expression, authority: ComputedKeySetAuthority) => ComputedKeySetVerdict;
|
|
73
|
+
/** `for ( k of Object.keys( o ) )` and `Object.keys( o ).forEach( ... )` read these from Array.prototype and its iterator. */
|
|
74
|
+
export declare const arrayIterationKeys: PrototypeKeyQuery;
|
|
75
|
+
/**
|
|
76
|
+
* The complete set of property keys `keyExpression` can evaluate to, or null
|
|
77
|
+
* when the set is open or unknown. A for-in arm registers an `Object`
|
|
78
|
+
* prototype requirement (and an `Object.keys` arm an `Object.keys` member and
|
|
79
|
+
* `Array` requirement) through `authority.intrinsicIntact`, else on the flow's
|
|
80
|
+
* deferred intrinsic ledger -- so a consumer asks this inside its own ledger
|
|
81
|
+
* capture, exactly as it does for `sourceRecordDataWritePlanOf`'s prototype
|
|
82
|
+
* obligation.
|
|
83
|
+
*/
|
|
84
|
+
export declare const computedKeySetOf: (checker: ts.TypeChecker, flow: ValueFlowIndex, keyExpression: ts.Expression, authority: ComputedKeySetAuthority) => ReadonlySet<string> | null;
|