@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,36 @@
|
|
|
1
|
+
import type { ParameterBindingCensus } from './parameter-bindings.js';
|
|
2
|
+
/**
|
|
3
|
+
* One round's whole output: the parameter census the fixpoint settles on, and
|
|
4
|
+
* every other artifact that round produced.
|
|
5
|
+
*
|
|
6
|
+
* `facts` is generic because this module settles a fixpoint and has no business
|
|
7
|
+
* knowing which censuses a round happens to build. What matters is that a round
|
|
8
|
+
* RETURNS them. They used to be published by assigning to `let`s captured from
|
|
9
|
+
* the enclosing scope, which made `compose` a function that answered one
|
|
10
|
+
* question and silently republished four more -- so "which round's collection
|
|
11
|
+
* census does the structural mapper read" was answered by the last write to
|
|
12
|
+
* survive the loop rather than by anything a reader could see. That is the same
|
|
13
|
+
* two-authorities shape this refactor removes everywhere else
|
|
14
|
+
* (the frontend's evidence-policy tables).
|
|
15
|
+
*/
|
|
16
|
+
export interface RoundCensus<Facts> {
|
|
17
|
+
readonly parameters: ParameterBindingCensus;
|
|
18
|
+
readonly facts: Facts;
|
|
19
|
+
}
|
|
20
|
+
/** A settled `RoundCensus`, and which round settled it. */
|
|
21
|
+
export interface CensusSnapshot<Facts> extends RoundCensus<Facts> {
|
|
22
|
+
readonly round: number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Count equality cannot establish a fixed point: a cell may change carrier
|
|
26
|
+
* while another loses its answer. Record the actual census queries a round
|
|
27
|
+
* depends on, then require its output to answer those queries identically.
|
|
28
|
+
* Type identity is the checker's identity, never a rendered name or a second
|
|
29
|
+
* structural-type classifier. Union lists compare their ordered type identities.
|
|
30
|
+
*
|
|
31
|
+
* The returned snapshot is the SETTLING round's own, in full -- not merely its
|
|
32
|
+
* parameter census. Every artifact in it was built by one round from one
|
|
33
|
+
* upstream view, so a consumer cannot pair a census from one round with a flow
|
|
34
|
+
* index from another.
|
|
35
|
+
*/
|
|
36
|
+
export declare const settleBindingCensus: <Facts>(compose: (upstream?: ParameterBindingCensus) => RoundCensus<Facts>, limit?: number) => CensusSnapshot<Facts>;
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { sameImplicitArgumentsTuple } from './implicit-arguments-tuple.js';
|
|
2
|
+
/** A frame fact is a fresh object each round; it settles when it states the same frame, not when it is the same object. */
|
|
3
|
+
const isFrameFact = (fact) => fact !== null && !Array.isArray(fact) && 'frame' in fact;
|
|
4
|
+
// Derive the keys from the public census interface. A new fact query must be
|
|
5
|
+
// included here or TypeScript rejects the build; it cannot escape convergence.
|
|
6
|
+
const queries = {
|
|
7
|
+
argumentsAt: (view, node) => view.argumentsAt?.(node) ?? null,
|
|
8
|
+
callTargetsAt: (view, node) => view.callTargetsAt?.(node) ?? null,
|
|
9
|
+
callDeclarationAt: (view, node) => view.callDeclarationAt?.(node) ?? null,
|
|
10
|
+
typeAt: (view, node) => view.typeAt(node),
|
|
11
|
+
implicitArgumentsTupleAt: (view, node) => view.implicitArgumentsTupleAt?.(node) ?? null,
|
|
12
|
+
restElementTypeAt: (view, node) => view.restElementTypeAt?.(node) ?? null,
|
|
13
|
+
statedTypeAt: (view, node) => view.statedTypeAt(node),
|
|
14
|
+
unionArmsAt: (view, node) => view.unionArmsAt(node),
|
|
15
|
+
preferredTypeAt: (view, node) => view.preferredTypeAt?.(node) ?? null,
|
|
16
|
+
patternReadTypeAt: (view, node) => view.patternReadTypeAt?.(node) ?? null
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Count equality cannot establish a fixed point: a cell may change carrier
|
|
20
|
+
* while another loses its answer. Record the actual census queries a round
|
|
21
|
+
* depends on, then require its output to answer those queries identically.
|
|
22
|
+
* Type identity is the checker's identity, never a rendered name or a second
|
|
23
|
+
* structural-type classifier. Union lists compare their ordered type identities.
|
|
24
|
+
*
|
|
25
|
+
* The returned snapshot is the SETTLING round's own, in full -- not merely its
|
|
26
|
+
* parameter census. Every artifact in it was built by one round from one
|
|
27
|
+
* upstream view, so a consumer cannot pair a census from one round with a flow
|
|
28
|
+
* index from another.
|
|
29
|
+
*/
|
|
30
|
+
export const settleBindingCensus = (compose, limit = 64) => {
|
|
31
|
+
// Carry only the `ParameterBindingCensus` forward between rounds, never the
|
|
32
|
+
// whole `RoundCensus`. For the real caller (`frontend.ts`) `RoundCensus.facts`
|
|
33
|
+
// holds that round's `ValueFlowIndex`, and `sourceValueSessionOf`
|
|
34
|
+
// (flow/source-value-session.ts) memoizes an ~80,000-state, ~14.7M-edge
|
|
35
|
+
// dependency graph in a WeakMap keyed on that index object -- roughly 1GB
|
|
36
|
+
// live per session on the three.js app. A `let round: RoundCensus<Facts>` reassigned
|
|
37
|
+
// only after `compose` returns keeps the PREVIOUS round's index (and its
|
|
38
|
+
// graph) reachable for the whole duration of the `compose` call that builds
|
|
39
|
+
// the NEXT round's index, so both graphs are live at once: measured as
|
|
40
|
+
// the three.js app's ~2.1GB fixpoint peak. Only `.parameters` is ever read back out of
|
|
41
|
+
// a settled round (to seed the next round's `observed` view and to compare
|
|
42
|
+
// `boundCount`), so only `.parameters` needs to survive the boundary.
|
|
43
|
+
let previousCensus = compose().parameters;
|
|
44
|
+
let unsettled = [];
|
|
45
|
+
const identities = new Map();
|
|
46
|
+
const factLabel = (fact) => {
|
|
47
|
+
if (fact === null)
|
|
48
|
+
return 'null';
|
|
49
|
+
if (Array.isArray(fact))
|
|
50
|
+
return `[${fact.map((type) => factLabel(type)).join(',')}]`;
|
|
51
|
+
if (isFrameFact(fact)) {
|
|
52
|
+
return fact.frame === 'array'
|
|
53
|
+
? `arguments-array(${factLabel(fact.element)})`
|
|
54
|
+
: `arguments-tuple(${fact.required}/${fact.elements.map((type) => factLabel(type)).join(',')})`;
|
|
55
|
+
}
|
|
56
|
+
if ('kind' in fact)
|
|
57
|
+
return `declaration:${fact.kind}`;
|
|
58
|
+
const type = fact;
|
|
59
|
+
if (!identities.has(type))
|
|
60
|
+
identities.set(type, identities.size + 1);
|
|
61
|
+
return `${identities.get(type)}:${type.flags}:${type.symbol?.name ?? '-'}`;
|
|
62
|
+
};
|
|
63
|
+
for (let rounds = 2; rounds <= limit; rounds += 1) {
|
|
64
|
+
const reads = new Map();
|
|
65
|
+
const read = (name, node, value) => {
|
|
66
|
+
let nodes = reads.get(name);
|
|
67
|
+
if (!nodes) {
|
|
68
|
+
nodes = new Map();
|
|
69
|
+
reads.set(name, nodes);
|
|
70
|
+
}
|
|
71
|
+
nodes.set(node, value);
|
|
72
|
+
return value;
|
|
73
|
+
};
|
|
74
|
+
// Bind THIS round's upstream to a fresh per-iteration const. Every round's
|
|
75
|
+
// `observed` wrapper closes over the view it forwards to, and those
|
|
76
|
+
// wrappers outlive their round: a census composed in round N keeps round
|
|
77
|
+
// N's `observed` as its own upstream, and asks it again whenever a later
|
|
78
|
+
// round consults round N's answers. Reading the carried `previousCensus`
|
|
79
|
+
// variable from inside the wrapper instead pointed EVERY round's wrapper
|
|
80
|
+
// at whatever the variable held last, so once it advanced to round N's
|
|
81
|
+
// census, round N-1's wrapper forwarded into round N, whose upstream is
|
|
82
|
+
// that same wrapper -- `statedTypeAt` recursed between the two until the
|
|
83
|
+
// stack died, 58s into a three.js compile.
|
|
84
|
+
const upstream = previousCensus;
|
|
85
|
+
const observed = { ...upstream };
|
|
86
|
+
// `Object.keys` preserves the closed query table's keys. The wrapper
|
|
87
|
+
// preserves each method's result kind and normalizes an absent optional
|
|
88
|
+
// method to the same null answer used when checking the next view.
|
|
89
|
+
for (const name of Object.keys(queries)) {
|
|
90
|
+
Object.defineProperty(observed, name, {
|
|
91
|
+
value: (node) => read(name, node, queries[name](upstream, node)),
|
|
92
|
+
enumerable: true
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
const previousBoundCount = upstream.boundCount;
|
|
96
|
+
// `compose` is called with nothing in this function's own scope naming the
|
|
97
|
+
// previous round's `facts` -- `observed` closes over `previousCensus`
|
|
98
|
+
// (a `ParameterBindingCensus`), never over the `RoundCensus` it came from.
|
|
99
|
+
const next = compose(observed);
|
|
100
|
+
let changed = next.parameters.boundCount !== previousBoundCount;
|
|
101
|
+
unsettled = changed ? [`boundCount ${previousBoundCount} -> ${next.parameters.boundCount}`] : [];
|
|
102
|
+
// Reads may lazily consult earlier views. Snapshot before querying `next`
|
|
103
|
+
// so forwarding to `observed` cannot extend the map during iteration.
|
|
104
|
+
const pending = [...reads].map(([name, nodes]) => [name, [...nodes]]);
|
|
105
|
+
for (const [name, nodes] of pending) {
|
|
106
|
+
for (const [node, previous] of nodes) {
|
|
107
|
+
const answer = queries[name](next.parameters, node);
|
|
108
|
+
const equal = previous === answer ||
|
|
109
|
+
(Array.isArray(previous) &&
|
|
110
|
+
Array.isArray(answer) &&
|
|
111
|
+
previous.length === answer.length &&
|
|
112
|
+
previous.every((type, index) => type === answer[index])) ||
|
|
113
|
+
(isFrameFact(previous) && isFrameFact(answer) && sameImplicitArgumentsTuple(previous, answer));
|
|
114
|
+
if (!equal) {
|
|
115
|
+
changed = true;
|
|
116
|
+
if (unsettled.length < 8 && typeof node.getSourceFile === 'function') {
|
|
117
|
+
const file = node.getSourceFile();
|
|
118
|
+
const line = file.getLineAndCharacterOfPosition(node.getStart()).line + 1;
|
|
119
|
+
unsettled.push(`${name} ${file.fileName}:${line} ${node.getText().slice(0, 70)}: ${factLabel(previous)} -> ${factLabel(answer)}`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (process.env['GEA_BINDING_CONVERGENCE_DEBUG'])
|
|
125
|
+
process.stderr.write(`[CONVERGENCE ${rounds}] ${unsettled.join('\n')}\n`);
|
|
126
|
+
// Return `next` directly rather than stashing it in an outer `round` first:
|
|
127
|
+
// a settling round's `facts` (this round's `ValueFlowIndex` included) must
|
|
128
|
+
// reach the caller, but a NON-settling round's `facts` must not survive
|
|
129
|
+
// this iteration at all -- there is no next reader for them, ever, settled
|
|
130
|
+
// or not. `next` is a `const` scoped to this iteration; once `previousCensus`
|
|
131
|
+
// below takes only its `.parameters`, nothing in this function still names
|
|
132
|
+
// this round's `facts` and the round's index/session graph is free the
|
|
133
|
+
// moment `next` goes out of scope, unlike the old flow where the outer
|
|
134
|
+
// `round` binding kept it reachable until being overwritten one line later.
|
|
135
|
+
if (!changed)
|
|
136
|
+
return { ...next, round: rounds };
|
|
137
|
+
previousCensus = next.parameters;
|
|
138
|
+
}
|
|
139
|
+
throw new Error(`binding census did not reach a fixed point after ${limit} rounds; refusing to publish unsettled value facts\n${unsettled.join('\n')}`);
|
|
140
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { ValueFlowIndex } from './flow/model.js';
|
|
3
|
+
export interface CallbackParameterContract {
|
|
4
|
+
readonly signature: ts.Signature;
|
|
5
|
+
readonly location: ts.CallExpression | ts.NewExpression;
|
|
6
|
+
}
|
|
7
|
+
/** Resolve at the receiving call so instantiated generic contracts stay instantiated. */
|
|
8
|
+
export declare const callbackContractParameterType: (checker: ts.TypeChecker, contract: CallbackParameterContract, position: number) => ts.Type | null;
|
|
9
|
+
/**
|
|
10
|
+
* Every stated callback input contract receiving a local named function.
|
|
11
|
+
* These signatures are additional caller evidence, never a substitute for
|
|
12
|
+
* its direct calls. Unknown escapes fail closed. In particular a receiving
|
|
13
|
+
* `(value: any) => void` signature is retained so the parameter join sees the
|
|
14
|
+
* open input rather than inferring from only the convenient typed boundary.
|
|
15
|
+
*/
|
|
16
|
+
export declare const callbackParameterContractsFor: (checker: ts.TypeChecker, flow: ValueFlowIndex, declaration: ts.SignatureDeclaration, countedCalls: ReadonlySet<ts.CallExpression | ts.NewExpression>) => readonly CallbackParameterContract[] | null;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { classifyCallableMention } from './flow/callable-reach.js';
|
|
3
|
+
import { isModuleExportedDeclaration } from './flow/targets.js';
|
|
4
|
+
/** Resolve at the receiving call so instantiated generic contracts stay instantiated. */
|
|
5
|
+
export const callbackContractParameterType = (checker, contract, position) => {
|
|
6
|
+
const parameter = contract.signature.parameters[position];
|
|
7
|
+
const declaration = parameter?.valueDeclaration ?? parameter?.declarations?.[0];
|
|
8
|
+
if (!parameter || !declaration || !ts.isParameter(declaration) || declaration.dotDotDotToken)
|
|
9
|
+
return null;
|
|
10
|
+
return checker.getTypeOfSymbolAtLocation(parameter, contract.location);
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Every stated callback input contract receiving a local named function.
|
|
14
|
+
* These signatures are additional caller evidence, never a substitute for
|
|
15
|
+
* its direct calls. Unknown escapes fail closed. In particular a receiving
|
|
16
|
+
* `(value: any) => void` signature is retained so the parameter join sees the
|
|
17
|
+
* open input rather than inferring from only the convenient typed boundary.
|
|
18
|
+
*/
|
|
19
|
+
export const callbackParameterContractsFor = (checker, flow, declaration, countedCalls) => {
|
|
20
|
+
if (!ts.isFunctionDeclaration(declaration) || !declaration.name || !declaration.body)
|
|
21
|
+
return null;
|
|
22
|
+
if ((ts.getCombinedModifierFlags(declaration) & (ts.ModifierFlags.Export | ts.ModifierFlags.Default)) !== 0)
|
|
23
|
+
return null;
|
|
24
|
+
const symbol = checker.getSymbolAtLocation(declaration.name);
|
|
25
|
+
if (!symbol || symbol.declarations?.length !== 1)
|
|
26
|
+
return null;
|
|
27
|
+
const signatures = [];
|
|
28
|
+
const acceptedArguments = new Set();
|
|
29
|
+
const flows = new Set([...flow.flowsFromDeclaration(declaration), ...flow.flowsFromSymbol(symbol)]);
|
|
30
|
+
const contractAt = (write) => {
|
|
31
|
+
if (write.edge !== 'call-argument' || write.slot !== 'whole' || !write.value)
|
|
32
|
+
return null;
|
|
33
|
+
const call = write.value.parent;
|
|
34
|
+
if (!ts.isCallExpression(call) && !ts.isNewExpression(call))
|
|
35
|
+
return null;
|
|
36
|
+
const args = call.arguments;
|
|
37
|
+
if (!args || args.some(ts.isSpreadElement))
|
|
38
|
+
return null;
|
|
39
|
+
const position = args.indexOf(write.value);
|
|
40
|
+
if (position < 0)
|
|
41
|
+
return null;
|
|
42
|
+
const signature = checker.getResolvedSignature(call);
|
|
43
|
+
const parameter = signature?.parameters[position];
|
|
44
|
+
if (!parameter)
|
|
45
|
+
return null;
|
|
46
|
+
const parameterDeclaration = parameter.valueDeclaration ?? parameter.declarations?.[0];
|
|
47
|
+
if (!parameterDeclaration || !ts.isParameter(parameterDeclaration) || parameterDeclaration.dotDotDotToken)
|
|
48
|
+
return null;
|
|
49
|
+
const type = checker.getTypeOfSymbolAtLocation(parameter, call);
|
|
50
|
+
// An optional callable is still a stated contract; any other alternative
|
|
51
|
+
// is an open destination, not permission to discard that incoming use.
|
|
52
|
+
const arms = type.isUnion() ? type.types : [type];
|
|
53
|
+
const result = [];
|
|
54
|
+
for (const arm of arms) {
|
|
55
|
+
if ((arm.flags & (ts.TypeFlags.Null | ts.TypeFlags.Undefined | ts.TypeFlags.Never)) !== 0)
|
|
56
|
+
continue;
|
|
57
|
+
if ((arm.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown | ts.TypeFlags.TypeParameter)) !== 0)
|
|
58
|
+
return null;
|
|
59
|
+
const calls = checker.getSignaturesOfType(arm, ts.SignatureKind.Call);
|
|
60
|
+
if (calls.length === 0)
|
|
61
|
+
return null;
|
|
62
|
+
result.push(...calls.map((signature) => ({ signature, location: call })));
|
|
63
|
+
}
|
|
64
|
+
return result.length === 0 ? null : result;
|
|
65
|
+
};
|
|
66
|
+
for (const write of flows) {
|
|
67
|
+
const contracts = contractAt(write);
|
|
68
|
+
if (contracts === null || write.value === null)
|
|
69
|
+
return null;
|
|
70
|
+
acceptedArguments.add(write.value);
|
|
71
|
+
signatures.push(...contracts);
|
|
72
|
+
}
|
|
73
|
+
if (signatures.length === 0)
|
|
74
|
+
return null;
|
|
75
|
+
// An export-list alias is not an expression reference in the value-flow
|
|
76
|
+
// index. Its checker identity still publishes this callable to open callers.
|
|
77
|
+
if (isModuleExportedDeclaration(checker, declaration, symbol))
|
|
78
|
+
return null;
|
|
79
|
+
const references = new Set([...flow.referencesToDeclaration(declaration), ...flow.referencesToSymbol(symbol)]);
|
|
80
|
+
for (const reference of references) {
|
|
81
|
+
if (acceptedArguments.has(reference))
|
|
82
|
+
continue;
|
|
83
|
+
const mention = classifyCallableMention(checker, reference, declaration.name);
|
|
84
|
+
if (mention.kind === 'inert')
|
|
85
|
+
continue;
|
|
86
|
+
if (mention.kind === 'call' && countedCalls.has(mention.call))
|
|
87
|
+
continue;
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
return signatures;
|
|
91
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { StructuralMapper } from '../structural.js';
|
|
2
|
+
import type { CellFactsTable } from './model.js';
|
|
3
|
+
/**
|
|
4
|
+
* The instrument phase 4.1 asks for: per program, how many declarations the
|
|
5
|
+
* new table answers IDENTICALLY to `structural.ts`'s existing `typeAt` chain,
|
|
6
|
+
* how many DIFFERENTLY, and how many this table has no opinion on at all.
|
|
7
|
+
*
|
|
8
|
+
* Compared as interned `StructuralTypeId`s, not as `ts.Type`s: two checker
|
|
9
|
+
* types the mapper's own `typeOf` collapses onto one structural shape (a
|
|
10
|
+
* literal and its widened form, say) are the SAME answer for every purpose
|
|
11
|
+
* downstream of `structural.ts`, and comparing raw `ts.Type` identity would
|
|
12
|
+
* report disagreement `structural.ts` itself does not have.
|
|
13
|
+
*
|
|
14
|
+
* This is diagnostic only -- nothing downstream reads it, and it changes
|
|
15
|
+
* nothing about what `types.typeAt` returns. `bagShape`/`collectionArguments`
|
|
16
|
+
* facts count as NOT COMPARABLE rather than as an unanswered cell: the table
|
|
17
|
+
* did answer, just not in the `ts.Type` language `typeAt` speaks, and folding
|
|
18
|
+
* that into "unanswered" would make phase 4.2's two-owner audit undercount
|
|
19
|
+
* how much of the table this instrument can actually check today.
|
|
20
|
+
*/
|
|
21
|
+
export interface CellFactsAgreement {
|
|
22
|
+
readonly total: number;
|
|
23
|
+
readonly identical: number;
|
|
24
|
+
readonly different: number;
|
|
25
|
+
readonly unanswered: number;
|
|
26
|
+
readonly notComparable: number;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* What `FrontendResult.cellFacts` actually publishes: the table, plus the
|
|
30
|
+
* agreement instrument when it was asked for.
|
|
31
|
+
*
|
|
32
|
+
* `agreement` is `null` unless a caller asked to measure, and that is not a
|
|
33
|
+
* convenience: `cellFactsAgreementOf` asks `types.typeAt` about declarations
|
|
34
|
+
* the compilation itself never asks about, and `typeAt` MINTS -- it interns a
|
|
35
|
+
* `StructuralTypeId` on first sight. Interning an id nobody needed shifts every
|
|
36
|
+
* later id, which renumbers the derived representations, which renumbers
|
|
37
|
+
* `gea_record_type_N` in the emitted C++. Measuring 68 corpus programs
|
|
38
|
+
* renumbered exactly that way is what found this. An instrument that changes
|
|
39
|
+
* the artifact it measures is not an instrument, so it runs only when asked.
|
|
40
|
+
*/
|
|
41
|
+
export interface CellFactsPublication {
|
|
42
|
+
readonly table: CellFactsTable;
|
|
43
|
+
readonly agreement: CellFactsAgreement | null;
|
|
44
|
+
}
|
|
45
|
+
export declare const publishCellFacts: (table: CellFactsTable, types: StructuralMapper, measure: boolean) => CellFactsPublication;
|
|
46
|
+
export declare const cellFactsAgreementOf: (table: CellFactsTable, types: StructuralMapper) => CellFactsAgreement;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export const publishCellFacts = (table, types, measure) => ({
|
|
2
|
+
table,
|
|
3
|
+
agreement: measure ? cellFactsAgreementOf(table, types) : null
|
|
4
|
+
});
|
|
5
|
+
export const cellFactsAgreementOf = (table, types) => {
|
|
6
|
+
let identical = 0;
|
|
7
|
+
let different = 0;
|
|
8
|
+
let unanswered = 0;
|
|
9
|
+
let notComparable = 0;
|
|
10
|
+
for (const facts of table.all) {
|
|
11
|
+
if (facts.resolved === null) {
|
|
12
|
+
unanswered++;
|
|
13
|
+
continue;
|
|
14
|
+
}
|
|
15
|
+
if (facts.resolved.kind !== 'type') {
|
|
16
|
+
notComparable++;
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
let chainAnswer;
|
|
20
|
+
try {
|
|
21
|
+
chainAnswer = types.typeAt(facts.declaration);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
unanswered++;
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
const cellAnswer = types.typeOf(facts.resolved.type);
|
|
28
|
+
if (cellAnswer === chainAnswer)
|
|
29
|
+
identical++;
|
|
30
|
+
else
|
|
31
|
+
different++;
|
|
32
|
+
}
|
|
33
|
+
return { total: table.all.length, identical, different, unanswered, notComparable };
|
|
34
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { type ProgramReachability } from '../reachability.js';
|
|
3
|
+
/**
|
|
4
|
+
* Every reachable node in the program that `test` admits -- one walk shared
|
|
5
|
+
* by every domain's `candidatesOf`, instead of the six private walks
|
|
6
|
+
* the value-flow survey measured (9, 4, 6, 7, 6 and 8 of them). A policy states
|
|
7
|
+
* WHAT shape of declaration it is looking for; it never re-derives which part
|
|
8
|
+
* of the program it is allowed to look at.
|
|
9
|
+
*
|
|
10
|
+
* Mirrors `census.ts`'s own walk: an ambient module's body describes host
|
|
11
|
+
* values none of which execute, a type annotation contains no operations
|
|
12
|
+
* (except the one a heritage clause's expression really evaluates), and a
|
|
13
|
+
* class member the program never names is exactly as dead as an unreferenced
|
|
14
|
+
* top-level declaration -- `reachability.ts` is the one authority on the
|
|
15
|
+
* latter two, asked here for the identical reason `census.ts` asks it.
|
|
16
|
+
*/
|
|
17
|
+
export declare const cellCandidatesOf: <T extends ts.Node>(reachable: ProgramReachability, files: readonly ts.SourceFile[], test: (node: ts.Node) => node is T) => T[];
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { isAmbientDeclaration } from '../../ambient.js';
|
|
3
|
+
import { forEachReachableStatement } from '../reachability.js';
|
|
4
|
+
/**
|
|
5
|
+
* Every reachable node in the program that `test` admits -- one walk shared
|
|
6
|
+
* by every domain's `candidatesOf`, instead of the six private walks
|
|
7
|
+
* the value-flow survey measured (9, 4, 6, 7, 6 and 8 of them). A policy states
|
|
8
|
+
* WHAT shape of declaration it is looking for; it never re-derives which part
|
|
9
|
+
* of the program it is allowed to look at.
|
|
10
|
+
*
|
|
11
|
+
* Mirrors `census.ts`'s own walk: an ambient module's body describes host
|
|
12
|
+
* values none of which execute, a type annotation contains no operations
|
|
13
|
+
* (except the one a heritage clause's expression really evaluates), and a
|
|
14
|
+
* class member the program never names is exactly as dead as an unreferenced
|
|
15
|
+
* top-level declaration -- `reachability.ts` is the one authority on the
|
|
16
|
+
* latter two, asked here for the identical reason `census.ts` asks it.
|
|
17
|
+
*/
|
|
18
|
+
export const cellCandidatesOf = (reachable, files, test) => {
|
|
19
|
+
const found = [];
|
|
20
|
+
for (const file of files) {
|
|
21
|
+
const visit = (node) => {
|
|
22
|
+
if (ts.isModuleDeclaration(node) && isAmbientDeclaration(node))
|
|
23
|
+
return;
|
|
24
|
+
if (ts.isTypeNode(node) && !ts.isExpressionWithTypeArguments(node))
|
|
25
|
+
return;
|
|
26
|
+
if (reachable.memberIsPruned(node))
|
|
27
|
+
return;
|
|
28
|
+
if (test(node))
|
|
29
|
+
found.push(node);
|
|
30
|
+
ts.forEachChild(node, visit);
|
|
31
|
+
};
|
|
32
|
+
forEachReachableStatement(reachable, file, visit);
|
|
33
|
+
}
|
|
34
|
+
return found;
|
|
35
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { IdentityTable } from '../identities.js';
|
|
3
|
+
import type { ValueFlowIndex } from '../flow/model.js';
|
|
4
|
+
import type { CellFactsTable } from './model.js';
|
|
5
|
+
import type { CellPolicyRegistry } from './registry.js';
|
|
6
|
+
/**
|
|
7
|
+
* The engine every evidence policy runs through: for each candidate
|
|
8
|
+
* declaration, read the shared flow index's writes to it, let the policy's
|
|
9
|
+
* per-edge rules decide which ones are evidence, join what is admitted, and
|
|
10
|
+
* resolve `stated ?? writeJoin ?? checker` -- the one join
|
|
11
|
+
* the single-census frontend asks for, computed once here instead
|
|
12
|
+
* of once per domain.
|
|
13
|
+
*
|
|
14
|
+
* This function is the whole of what used to be six private compositions. A
|
|
15
|
+
* policy states WHAT counts as evidence and how to join it; this states HOW
|
|
16
|
+
* a cell's three primitives combine into one answer, and it is the only place
|
|
17
|
+
* that does.
|
|
18
|
+
*/
|
|
19
|
+
export declare const buildCellFactsTable: (identities: IdentityTable, flow: ValueFlowIndex, files: readonly ts.SourceFile[], registry: CellPolicyRegistry) => CellFactsTable;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
/**
|
|
3
|
+
* The engine every evidence policy runs through: for each candidate
|
|
4
|
+
* declaration, read the shared flow index's writes to it, let the policy's
|
|
5
|
+
* per-edge rules decide which ones are evidence, join what is admitted, and
|
|
6
|
+
* resolve `stated ?? writeJoin ?? checker` -- the one join
|
|
7
|
+
* the single-census frontend asks for, computed once here instead
|
|
8
|
+
* of once per domain.
|
|
9
|
+
*
|
|
10
|
+
* This function is the whole of what used to be six private compositions. A
|
|
11
|
+
* policy states WHAT counts as evidence and how to join it; this states HOW
|
|
12
|
+
* a cell's three primitives combine into one answer, and it is the only place
|
|
13
|
+
* that does.
|
|
14
|
+
*/
|
|
15
|
+
export const buildCellFactsTable = (identities, flow, files, registry) => {
|
|
16
|
+
const all = [];
|
|
17
|
+
const byId = new Map();
|
|
18
|
+
for (const policy of registry.policies) {
|
|
19
|
+
for (const declaration of policy.candidatesOf(files)) {
|
|
20
|
+
const writes = policy.writesOf ? policy.writesOf(declaration, flow) : flow.writesToDeclaration(declaration);
|
|
21
|
+
const admitted = [];
|
|
22
|
+
for (const write of writes) {
|
|
23
|
+
const rule = policy.rules[write.edge];
|
|
24
|
+
if (!rule)
|
|
25
|
+
continue;
|
|
26
|
+
const value = rule(write, declaration);
|
|
27
|
+
if (value !== null)
|
|
28
|
+
admitted.push({ write, value });
|
|
29
|
+
}
|
|
30
|
+
const writeJoin = admitted.length > 0 ? policy.combine(admitted) : null;
|
|
31
|
+
const stated = policy.statedAt(declaration);
|
|
32
|
+
const checkerValue = policy.checkerAt(declaration);
|
|
33
|
+
const resolved = stated ?? writeJoin ?? checkerValue;
|
|
34
|
+
// A declaration this program's identity table refuses (an uninstantiated
|
|
35
|
+
// generic's own body, walked by nothing) is not a cell any consumer can
|
|
36
|
+
// NAME either -- `identities.ts` is the one authority on that, and a cell
|
|
37
|
+
// census asking it a second time would be exactly the two-authorities
|
|
38
|
+
// defect this table exists to end.
|
|
39
|
+
let id;
|
|
40
|
+
try {
|
|
41
|
+
id = identities.declarationIdOf(declaration);
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
const facts = { domain: policy.domain, declaration, id, stated, writeJoin, checker: checkerValue, resolved };
|
|
47
|
+
all.push(facts);
|
|
48
|
+
const bucket = byId.get(id);
|
|
49
|
+
if (bucket)
|
|
50
|
+
bucket.push(facts);
|
|
51
|
+
else
|
|
52
|
+
byId.set(id, [facts]);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
const twoOwnerClaims = [];
|
|
56
|
+
const refusals = [];
|
|
57
|
+
for (const [id, facts] of byId) {
|
|
58
|
+
const domains = [...new Set(facts.map((fact) => fact.domain))];
|
|
59
|
+
if (domains.length <= 1)
|
|
60
|
+
continue;
|
|
61
|
+
twoOwnerClaims.push({ id, domains });
|
|
62
|
+
refusals.push(cellOwnerRefusal(id, domains, facts));
|
|
63
|
+
}
|
|
64
|
+
return { all, byId, twoOwnerClaims, refusals };
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Builds the typed refusal for one collision. `facts` all share `id`, and
|
|
68
|
+
* `identities.declarationIdOf` names one declaration node -- every entry's
|
|
69
|
+
* `declaration` is the same node, so the first is as good as any for the
|
|
70
|
+
* `SyntaxKind`/location the reason and key report.
|
|
71
|
+
*/
|
|
72
|
+
const cellOwnerRefusal = (id, domains, facts) => {
|
|
73
|
+
const sortedDomains = [...domains].sort();
|
|
74
|
+
const [first] = facts;
|
|
75
|
+
const declaration = first ? first.declaration : null;
|
|
76
|
+
const kindName = declaration ? ts.SyntaxKind[declaration.kind] : 'unknown';
|
|
77
|
+
const where = declaration
|
|
78
|
+
? (() => {
|
|
79
|
+
const sourceFile = declaration.getSourceFile();
|
|
80
|
+
const { line } = sourceFile.getLineAndCharacterOfPosition(declaration.getStart(sourceFile));
|
|
81
|
+
return `${sourceFile.fileName}:${line + 1}`;
|
|
82
|
+
})()
|
|
83
|
+
: String(id);
|
|
84
|
+
return {
|
|
85
|
+
stage: 'cells',
|
|
86
|
+
key: `cell-owner:${sortedDomains.join('+')}:${kindName}`,
|
|
87
|
+
reason: `${kindName} at ${where} is claimed by ${sortedDomains.length} cell-evidence domains (${sortedDomains.join(', ')}); a two-owner claim is a census disagreement, not a precedence question`,
|
|
88
|
+
owner: String(id)
|
|
89
|
+
};
|
|
90
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type { CellDomain, CellFacts, CellFactsTable, CellOwnerClaim, CellRefusal, CellRefusalKey, CellValue } from './model.js';
|
|
2
|
+
export { cellType } from './model.js';
|
|
3
|
+
export type { CellEvidenceContribution, CellEvidencePolicy, CellEvidenceRule } from './policy.js';
|
|
4
|
+
export { rulesFor } from './policy.js';
|
|
5
|
+
export type { CellPolicyRegistry } from './registry.js';
|
|
6
|
+
export { createCellPolicyRegistry } from './registry.js';
|
|
7
|
+
export { buildCellFactsTable } from './facts.js';
|
|
8
|
+
export type { CellFactsAgreement, CellFactsPublication } from './agreement.js';
|
|
9
|
+
export { cellFactsAgreementOf, publishCellFacts } from './agreement.js';
|
|
10
|
+
export { defaultCellEvidencePolicies } from './policies/index.js';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { cellType } from './model.js';
|
|
2
|
+
export { rulesFor } from './policy.js';
|
|
3
|
+
export { createCellPolicyRegistry } from './registry.js';
|
|
4
|
+
export { buildCellFactsTable } from './facts.js';
|
|
5
|
+
export { cellFactsAgreementOf, publishCellFacts } from './agreement.js';
|
|
6
|
+
export { defaultCellEvidencePolicies } from './policies/index.js';
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import type ts from 'typescript';
|
|
2
|
+
import type { DeclarationId } from '../../../identity/ids.js';
|
|
3
|
+
import type { CollectionTypeArguments } from '../collection-bindings.js';
|
|
4
|
+
import type { ObjectBagShape } from '../object-bag-bindings.js';
|
|
5
|
+
/**
|
|
6
|
+
* Replaced rather than instrumented: the six private censuses that
|
|
7
|
+
* answer "what can this storage cell hold" (`parameter-bindings.ts`,
|
|
8
|
+
* `return-bindings.ts`, `local-bindings.ts`, `field-bindings.ts`,
|
|
9
|
+
* `collection-bindings.ts`, `object-bag-bindings.ts`) become six evidence
|
|
10
|
+
* POLICIES over one shared table, keyed by domain the way every other census
|
|
11
|
+
* in the registry (2.4) is keyed by the question it answers, never by its
|
|
12
|
+
* position in `structural.ts`'s chain.
|
|
13
|
+
*/
|
|
14
|
+
export type CellDomain = 'parameter' | 'return' | 'local' | 'field' | 'collection' | 'bag';
|
|
15
|
+
/**
|
|
16
|
+
* One answer language for all six domains, replacing the three the audit in
|
|
17
|
+
* the value-flow survey found (`ts.Type | null`, an `ObjectBagShape`, a list of
|
|
18
|
+
* union arms). Four domains (parameter, return, local, field) answer in
|
|
19
|
+
* `ts.Type`-space and use only `type`; the other two keep their own richer
|
|
20
|
+
* shape rather than being forced into one that cannot state a key/value pair
|
|
21
|
+
* or a member map -- a census answers one question program-wide, publishes a sealed table,
|
|
22
|
+
* entry and this directory's own README-shaped comment in `facts.ts` for why
|
|
23
|
+
* that is a closed union rather than a fourth private shape.
|
|
24
|
+
*/
|
|
25
|
+
export type CellValue = {
|
|
26
|
+
readonly kind: 'type';
|
|
27
|
+
readonly type: ts.Type;
|
|
28
|
+
} | {
|
|
29
|
+
readonly kind: 'collection-arguments';
|
|
30
|
+
readonly arguments: CollectionTypeArguments;
|
|
31
|
+
} | {
|
|
32
|
+
readonly kind: 'bag-shape';
|
|
33
|
+
readonly shape: ObjectBagShape;
|
|
34
|
+
};
|
|
35
|
+
/** Wraps a `ts.Type` answer -- the language the four ported policies (parameter, return, local, field) speak. */
|
|
36
|
+
export declare const cellType: (type: ts.Type) => CellValue;
|
|
37
|
+
/**
|
|
38
|
+
* One domain's answer for one declaration, in the three primitives
|
|
39
|
+
* The value-flow survey's names: `stated` (the program's own annotation),
|
|
40
|
+
* `writeJoin` (what the evidence policy's admitted writes agree on), and
|
|
41
|
+
* `checker` (the checker's own answer, always present as the fallback of last
|
|
42
|
+
* resort). `resolved` is `stated ?? writeJoin ?? checker` -- the one join,
|
|
43
|
+
* asked once, rather than a position in an ordered chain.
|
|
44
|
+
*/
|
|
45
|
+
export interface CellFacts {
|
|
46
|
+
readonly domain: CellDomain;
|
|
47
|
+
readonly declaration: ts.Node;
|
|
48
|
+
readonly id: DeclarationId;
|
|
49
|
+
readonly stated: CellValue | null;
|
|
50
|
+
readonly writeJoin: CellValue | null;
|
|
51
|
+
readonly checker: CellValue | null;
|
|
52
|
+
readonly resolved: CellValue | null;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* A declaration two domains both published `CellFacts` for -- recorded here,
|
|
56
|
+
* not refused. Phase 4.2 turns each of these into a `CellRefusal` below;
|
|
57
|
+
* this shape stays as the raw evidence (which domains, which id) that the
|
|
58
|
+
* refusal is built from, the way `ir/certify.ts`'s `CapabilityDemand` stays
|
|
59
|
+
* separate from the `Refusal` it can produce.
|
|
60
|
+
*/
|
|
61
|
+
export interface CellOwnerClaim {
|
|
62
|
+
readonly id: DeclarationId;
|
|
63
|
+
readonly domains: readonly CellDomain[];
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Phase 4.2: a `CellOwnerClaim` restated in the compiler's refusal
|
|
67
|
+
* vocabulary (`ir/refusal.ts`'s `Refusal`: `stage`, `key`, `reason`,
|
|
68
|
+
* `owner`) rather than left as a count. Two evidence domains both claiming
|
|
69
|
+
* one declaration is a census disagreement -- the honest answer names both
|
|
70
|
+
* domains and the declaration, the way `field-bindings.ts` and
|
|
71
|
+
* `collection-bindings.ts` disagreeing about one declaration
|
|
72
|
+
* (`collection-bindings.ts:200-224`) never had a name before.
|
|
73
|
+
*
|
|
74
|
+
* `stage: 'cells'` and `key`'s `cell-owner:` prefix are their own namespace,
|
|
75
|
+
* not a member of `ir/refusal.ts`'s `RefusalStage`/`RefusalKey` unions: a
|
|
76
|
+
* cell-domain collision is decided before there is a plan to certify
|
|
77
|
+
* against, and joining `CompileResult.refusals` is a later phase's call
|
|
78
|
+
* (nothing reads this table yet -- see `agreement.ts`'s header on why this
|
|
79
|
+
* whole publication is additive-only for now). The key embeds the domain
|
|
80
|
+
* pair and the declaration's `ts.SyntaxKind` name -- `parameter.ts` and
|
|
81
|
+
* `local-bindings.ts`'s own refusal-key convention
|
|
82
|
+
* (`function-escapes:${ts.SyntaxKind[...]}`) -- so grouping refusals by
|
|
83
|
+
* `key` is grouping by root without parsing `reason`.
|
|
84
|
+
*/
|
|
85
|
+
export type CellRefusalKey = `cell-owner:${string}`;
|
|
86
|
+
export interface CellRefusal {
|
|
87
|
+
readonly stage: 'cells';
|
|
88
|
+
readonly key: CellRefusalKey;
|
|
89
|
+
readonly reason: string;
|
|
90
|
+
readonly owner: string;
|
|
91
|
+
}
|
|
92
|
+
/** The published table: every fact, indexed by declaration identity, plus every collision found while indexing, typed. */
|
|
93
|
+
export interface CellFactsTable {
|
|
94
|
+
readonly all: readonly CellFacts[];
|
|
95
|
+
readonly byId: ReadonlyMap<DeclarationId, readonly CellFacts[]>;
|
|
96
|
+
readonly twoOwnerClaims: readonly CellOwnerClaim[];
|
|
97
|
+
readonly refusals: readonly CellRefusal[];
|
|
98
|
+
}
|