@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,44 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { ObjectBagIdentity } from '../../object-bag-bindings.js';
|
|
3
|
+
import type { CellEvidencePolicy } from '../policy.js';
|
|
4
|
+
/**
|
|
5
|
+
* The BAG domain: `object-bag-bindings.ts`'s open-property-bag question,
|
|
6
|
+
* restated as evidence rules over the shared flow index's
|
|
7
|
+
* `property-assignment`/`index-assignment` edges, joined per MEMBER NAME
|
|
8
|
+
* (`write.member`) rather than per cell -- the same
|
|
9
|
+
* `CellEvidenceContribution` extension `collection.ts` introduced, applied to
|
|
10
|
+
* the obstacle `policies/index.ts`'s header used to call the harder one:
|
|
11
|
+
* the member-name join was never the blocker.
|
|
12
|
+
*
|
|
13
|
+
* What this policy does NOT do, and could not without duplicating
|
|
14
|
+
* `object-bag-bindings.ts`'s own fixpoint a second time: decide which
|
|
15
|
+
* declarations are the SAME bag. That is `identity`'s published answer
|
|
16
|
+
* (`ObjectBagIdentity` -- `bagOf`/`returnsBag`/`conflicted`/`ungrounded`,
|
|
17
|
+
* settled once by a whole-program worklist over assignments, exhaustive
|
|
18
|
+
* `return`s, and one layer of callee-alias unwrapping). This policy CONSUMES
|
|
19
|
+
* that settled fixpoint rather than re-deriving it: `candidatesOf` is not a
|
|
20
|
+
* per-node syntactic test over `files` at all (every other domain's is) --
|
|
21
|
+
* it is `identity.roots`, the set the fixpoint already found, handed to this
|
|
22
|
+
* policy at construction alongside the checker.
|
|
23
|
+
*
|
|
24
|
+
* `writesOf` reads `identity.bagOf`'s own entries to pool one root's aliases
|
|
25
|
+
* -- every declaration the fixpoint proved is the same storage -- exactly
|
|
26
|
+
* the way `collection.ts`'s `writesOverAliasClosure` widens WHERE evidence is
|
|
27
|
+
* gathered from, except the closure here is not walked again: it was already
|
|
28
|
+
* computed, so this is a lookup into the published map rather than a second
|
|
29
|
+
* BFS over `flow.flowsFromDeclaration`.
|
|
30
|
+
*
|
|
31
|
+
* What is left unported, matching `collection.ts`'s own posture toward its
|
|
32
|
+
* gaps: `conflicted`/`ungrounded` roots are NOT excluded from `candidatesOf`
|
|
33
|
+
* -- a root is a candidate here exactly as an unwritten field is still a
|
|
34
|
+
* `field` candidate, and `combine` answering `null` for it (no admissible
|
|
35
|
+
* evidence, or a disagreement) is the same "no override" this table gives
|
|
36
|
+
* every other domain's failed candidate. Excluding them would hide a
|
|
37
|
+
* genuine collision from `twoOwnerClaims` for no gain, since nothing
|
|
38
|
+
* downstream reads this domain's answer yet. The `delete`/`Object.assign`/
|
|
39
|
+
* spread refusal vocabulary `object-bag-bindings.ts` applies before binding a
|
|
40
|
+
* shape is not restated: an opaque use simply contributes no evidence here,
|
|
41
|
+
* the same "narrower, not wrong" trade `collection.ts`'s header already
|
|
42
|
+
* accepts for its own left-out refusals.
|
|
43
|
+
*/
|
|
44
|
+
export declare const createBagCellPolicy: (checker: ts.TypeChecker, identity: ObjectBagIdentity) => CellEvidencePolicy;
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { cellType } from '../model.js';
|
|
2
|
+
import { rulesFor } from '../policy.js';
|
|
3
|
+
import { joinCellTypeValues } from './shared.js';
|
|
4
|
+
/**
|
|
5
|
+
* The BAG domain: `object-bag-bindings.ts`'s open-property-bag question,
|
|
6
|
+
* restated as evidence rules over the shared flow index's
|
|
7
|
+
* `property-assignment`/`index-assignment` edges, joined per MEMBER NAME
|
|
8
|
+
* (`write.member`) rather than per cell -- the same
|
|
9
|
+
* `CellEvidenceContribution` extension `collection.ts` introduced, applied to
|
|
10
|
+
* the obstacle `policies/index.ts`'s header used to call the harder one:
|
|
11
|
+
* the member-name join was never the blocker.
|
|
12
|
+
*
|
|
13
|
+
* What this policy does NOT do, and could not without duplicating
|
|
14
|
+
* `object-bag-bindings.ts`'s own fixpoint a second time: decide which
|
|
15
|
+
* declarations are the SAME bag. That is `identity`'s published answer
|
|
16
|
+
* (`ObjectBagIdentity` -- `bagOf`/`returnsBag`/`conflicted`/`ungrounded`,
|
|
17
|
+
* settled once by a whole-program worklist over assignments, exhaustive
|
|
18
|
+
* `return`s, and one layer of callee-alias unwrapping). This policy CONSUMES
|
|
19
|
+
* that settled fixpoint rather than re-deriving it: `candidatesOf` is not a
|
|
20
|
+
* per-node syntactic test over `files` at all (every other domain's is) --
|
|
21
|
+
* it is `identity.roots`, the set the fixpoint already found, handed to this
|
|
22
|
+
* policy at construction alongside the checker.
|
|
23
|
+
*
|
|
24
|
+
* `writesOf` reads `identity.bagOf`'s own entries to pool one root's aliases
|
|
25
|
+
* -- every declaration the fixpoint proved is the same storage -- exactly
|
|
26
|
+
* the way `collection.ts`'s `writesOverAliasClosure` widens WHERE evidence is
|
|
27
|
+
* gathered from, except the closure here is not walked again: it was already
|
|
28
|
+
* computed, so this is a lookup into the published map rather than a second
|
|
29
|
+
* BFS over `flow.flowsFromDeclaration`.
|
|
30
|
+
*
|
|
31
|
+
* What is left unported, matching `collection.ts`'s own posture toward its
|
|
32
|
+
* gaps: `conflicted`/`ungrounded` roots are NOT excluded from `candidatesOf`
|
|
33
|
+
* -- a root is a candidate here exactly as an unwritten field is still a
|
|
34
|
+
* `field` candidate, and `combine` answering `null` for it (no admissible
|
|
35
|
+
* evidence, or a disagreement) is the same "no override" this table gives
|
|
36
|
+
* every other domain's failed candidate. Excluding them would hide a
|
|
37
|
+
* genuine collision from `twoOwnerClaims` for no gain, since nothing
|
|
38
|
+
* downstream reads this domain's answer yet. The `delete`/`Object.assign`/
|
|
39
|
+
* spread refusal vocabulary `object-bag-bindings.ts` applies before binding a
|
|
40
|
+
* shape is not restated: an opaque use simply contributes no evidence here,
|
|
41
|
+
* the same "narrower, not wrong" trade `collection.ts`'s header already
|
|
42
|
+
* accepts for its own left-out refusals.
|
|
43
|
+
*/
|
|
44
|
+
export const createBagCellPolicy = (checker, identity) => {
|
|
45
|
+
const aliasesOfRoot = new Map();
|
|
46
|
+
for (const [declaration, root] of identity.bagOf) {
|
|
47
|
+
const bucket = aliasesOfRoot.get(root);
|
|
48
|
+
if (bucket)
|
|
49
|
+
bucket.push(declaration);
|
|
50
|
+
else
|
|
51
|
+
aliasesOfRoot.set(root, [declaration]);
|
|
52
|
+
}
|
|
53
|
+
const writesOverIdentity = (declaration, flow) => {
|
|
54
|
+
const aliases = aliasesOfRoot.get(declaration) ?? [declaration];
|
|
55
|
+
const writes = [];
|
|
56
|
+
for (const alias of aliases)
|
|
57
|
+
writes.push(...flow.writesToDeclaration(alias));
|
|
58
|
+
return writes;
|
|
59
|
+
};
|
|
60
|
+
const valueRule = (write) => (write.value ? cellType(checker.getTypeAtLocation(write.value)) : null);
|
|
61
|
+
return {
|
|
62
|
+
domain: 'bag',
|
|
63
|
+
// Not a `cellCandidatesOf` walk: the fixpoint already decided this set (see this
|
|
64
|
+
// module's own header), so `files` -- every other domain's input -- is not asked.
|
|
65
|
+
candidatesOf: () => [...identity.roots].map((root) => root),
|
|
66
|
+
// A root's own literal is admitted only when it declares no type of its own
|
|
67
|
+
// (`object-bag-bindings.ts`'s `declaresOwnType`), so every candidate here is
|
|
68
|
+
// unannotated by construction -- the same reason `local.ts`'s `statedAt` is
|
|
69
|
+
// a real read that always answers `null` rather than a shortcut.
|
|
70
|
+
statedAt: () => null,
|
|
71
|
+
checkerAt: (declaration) => cellType(checker.getTypeAtLocation(declaration)),
|
|
72
|
+
writesOf: writesOverIdentity,
|
|
73
|
+
rules: rulesFor([
|
|
74
|
+
['property-assignment', valueRule],
|
|
75
|
+
['index-assignment', valueRule]
|
|
76
|
+
]),
|
|
77
|
+
// Per-MEMBER-NAME join, not per-cell: `write.slot === 'member'` groups by
|
|
78
|
+
// `write.member` into the bag's named members, and `write.slot === 'element'`
|
|
79
|
+
// (a computed key, `flow/value-flow.ts`'s own partition) is the index sidecar --
|
|
80
|
+
// exactly the two-question split `collection.ts` already makes for K/V, applied
|
|
81
|
+
// to a bag's members/index instead. Either half joining to `null` (no evidence,
|
|
82
|
+
// or a disagreement `joinCellTypeValues` refuses) contributes nothing to that
|
|
83
|
+
// half alone, matching `object-bag-bindings.ts`'s own per-slot degradation.
|
|
84
|
+
combine: (contributions) => {
|
|
85
|
+
const named = new Map();
|
|
86
|
+
const indexed = [];
|
|
87
|
+
for (const contribution of contributions) {
|
|
88
|
+
if (contribution.write.slot === 'member' && contribution.write.member !== null) {
|
|
89
|
+
const bucket = named.get(contribution.write.member);
|
|
90
|
+
if (bucket)
|
|
91
|
+
bucket.push(contribution.value);
|
|
92
|
+
else
|
|
93
|
+
named.set(contribution.write.member, [contribution.value]);
|
|
94
|
+
}
|
|
95
|
+
else if (contribution.write.slot === 'element') {
|
|
96
|
+
indexed.push(contribution.value);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
if (named.size === 0 && indexed.length === 0)
|
|
100
|
+
return null;
|
|
101
|
+
const members = new Map();
|
|
102
|
+
for (const [key, values] of named) {
|
|
103
|
+
const joined = joinCellTypeValues(checker, values);
|
|
104
|
+
if (joined)
|
|
105
|
+
members.set(key, joined);
|
|
106
|
+
}
|
|
107
|
+
const index = indexed.length > 0 ? joinCellTypeValues(checker, indexed) : null;
|
|
108
|
+
if (members.size === 0 && index === null)
|
|
109
|
+
return null;
|
|
110
|
+
const shape = { members, index };
|
|
111
|
+
return { kind: 'bag-shape', shape };
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { ProgramReachability } from '../../reachability.js';
|
|
3
|
+
import type { CellEvidencePolicy } from '../policy.js';
|
|
4
|
+
/**
|
|
5
|
+
* The COLLECTION domain: `collection-bindings.ts`'s Map/Set/WeakMap/WeakSet
|
|
6
|
+
* question (`CollectionTypeArguments`'s K/V), restated as two evidence rules
|
|
7
|
+
* (`collection-key`, `collection-value`) over `flow`'s edges of the same
|
|
8
|
+
* name, joined per SLOT rather than into one value -- see `combine` below.
|
|
9
|
+
*
|
|
10
|
+
* Deliberately NOT ported, and left for a later phase exactly as
|
|
11
|
+
* `parameter.ts`'s header leaves its own gap documented rather than silent:
|
|
12
|
+
*
|
|
13
|
+
* - The checker-only half of `argumentType`'s `known ?? resolve` rule.
|
|
14
|
+
* `collection-bindings.ts` falls back to the COMPOSED PARAMETER CENSUS when
|
|
15
|
+
* the checker's own answer for a key/value argument is unusable evidence --
|
|
16
|
+
* the majority case in practice, since most of these sites are an untyped
|
|
17
|
+
* local function parameter. This policy has no composed census to fall
|
|
18
|
+
* back to (nothing wires one in for `defaultCellEvidencePolicies`, and
|
|
19
|
+
* wiring one would be the exact kind of cross-domain coupling
|
|
20
|
+
* `policies/index.ts`'s header calls out for the bag census's own
|
|
21
|
+
* `valueEvidence` half), so it reads the checker alone. This makes the
|
|
22
|
+
* policy narrower, not wrong: a slot this policy cannot bind still answers
|
|
23
|
+
* `null` (no override), never a guess.
|
|
24
|
+
* - The `weak-key-not-reference` refusal (`collection-bindings.ts:485-511`):
|
|
25
|
+
* a `WeakMap`/`WeakSet` key that resolves to a union is still published
|
|
26
|
+
* here as `key`, where the existing census would refuse the whole owner
|
|
27
|
+
* instead. Safe for this table's current, diagnostic-only readership
|
|
28
|
+
* (nothing downstream consumes `cellFacts` yet -- see `facts.ts`'s own
|
|
29
|
+
* header), and flagged here for whoever wires a consumer to close before
|
|
30
|
+
* this table's `collection` domain becomes load-bearing.
|
|
31
|
+
* - The array-element half of `collection-bindings.ts` (an empty array
|
|
32
|
+
* literal's inferred element type) is a DIFFERENT question that already
|
|
33
|
+
* fits the four ported domains' plain `ts.Type` shape -- it is not part of
|
|
34
|
+
* `CollectionTypeArguments`, and `CellDomain` names no domain for it. Out
|
|
35
|
+
* of scope for "port the collection domain" as this table's own `CellValue`
|
|
36
|
+
* union defines it.
|
|
37
|
+
* - `family-disagreement` (two `new X()` sites for one owner naming different
|
|
38
|
+
* families) is not tracked; a mixed owner simply answers from whichever
|
|
39
|
+
* evidence its writes admit rather than refusing outright. Diagnostic-only
|
|
40
|
+
* readership again makes this safe rather than silently wrong.
|
|
41
|
+
*/
|
|
42
|
+
export declare const createCollectionCellPolicy: (checker: ts.TypeChecker, reachable: ProgramReachability) => CellEvidencePolicy;
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { cellCandidatesOf } from '../candidates.js';
|
|
3
|
+
import { cellType } from '../model.js';
|
|
4
|
+
import { rulesFor } from '../policy.js';
|
|
5
|
+
import { joinCellTypeValues, statedTypeOf } from './shared.js';
|
|
6
|
+
/** The four standard collection constructors, exactly `collection-bindings.ts`'s own table -- core ECMAScript, not a host's to configure. */
|
|
7
|
+
const CONSTRUCTOR_NAMES = new Map([
|
|
8
|
+
['Map', 'map'],
|
|
9
|
+
['Set', 'set'],
|
|
10
|
+
['WeakMap', 'weak-map'],
|
|
11
|
+
['WeakSet', 'weak-set']
|
|
12
|
+
]);
|
|
13
|
+
/** A symbol's first declaration node -- the stable key every owner-tracking census in this compiler uses (see `flow/targets.ts`'s own header on why). */
|
|
14
|
+
const declNodeOf = (symbol) => symbol?.getDeclarations()?.[0] ?? null;
|
|
15
|
+
/**
|
|
16
|
+
* The declaration a plain identifier or `x.prop` access names -- this
|
|
17
|
+
* policy's own restatement of `collection-bindings.ts`'s `ownerDeclOfExpr`.
|
|
18
|
+
* Restated rather than imported: every policy in this directory recognises
|
|
19
|
+
* its own candidates from scratch (`field.ts`'s `isUnannotatedUninitializedField`,
|
|
20
|
+
* `local.ts`'s sibling), and this phase's "stay in `cells/**`" boundary rules
|
|
21
|
+
* out reaching into `collection-bindings.ts` for a shared helper it does not
|
|
22
|
+
* export.
|
|
23
|
+
*/
|
|
24
|
+
const ownerDeclOfExpr = (checker, expr) => {
|
|
25
|
+
if (ts.isIdentifier(expr))
|
|
26
|
+
return declNodeOf(checker.getSymbolAtLocation(expr));
|
|
27
|
+
if (ts.isPropertyAccessExpression(expr))
|
|
28
|
+
return declNodeOf(checker.getSymbolAtLocation(expr.name));
|
|
29
|
+
return null;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* The declaration a `new Map()`/`new Set()`/`new WeakMap()`/`new WeakSet()`
|
|
33
|
+
* is bound to -- a variable's own name, a class field's own initializer, or
|
|
34
|
+
* a plain `x = new WeakMap()` / `this.m = new WeakMap()` reassignment target.
|
|
35
|
+
* `null` for anything else (an inline argument, a destructuring target): this
|
|
36
|
+
* policy's CELL is the owner, not the allocation site, so a construction with
|
|
37
|
+
* no trackable owner is not a candidate at all -- the same rule
|
|
38
|
+
* `collection-bindings.ts` applies, restated (see `ownerDeclOfExpr`'s note).
|
|
39
|
+
*/
|
|
40
|
+
const ownerDeclOf = (checker, node) => {
|
|
41
|
+
const parent = node.parent;
|
|
42
|
+
if (ts.isVariableDeclaration(parent) && parent.initializer === node && ts.isIdentifier(parent.name)) {
|
|
43
|
+
return declNodeOf(checker.getSymbolAtLocation(parent.name));
|
|
44
|
+
}
|
|
45
|
+
if (ts.isPropertyDeclaration(parent) && parent.initializer === node && ts.isIdentifier(parent.name)) {
|
|
46
|
+
return declNodeOf(checker.getSymbolAtLocation(parent.name));
|
|
47
|
+
}
|
|
48
|
+
if (ts.isBinaryExpression(parent) && parent.operatorToken.kind === ts.SyntaxKind.EqualsToken && parent.right === node) {
|
|
49
|
+
return ownerDeclOfExpr(checker, parent.left);
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Every declaration a `whole`-slot write carries this owner's identity INTO,
|
|
55
|
+
* transitively -- `collection-bindings.ts`'s `aliasClosureOf`, restated over
|
|
56
|
+
* the same `flow.flowsFromDeclaration` reverse edge. This is the answer to
|
|
57
|
+
* `policies/index.ts`'s stated obstacle: a candidate's OWN
|
|
58
|
+
* `flow.writesToDeclaration` sees only writes made directly through its own
|
|
59
|
+
* name, so `const helper = []; fill(helper)` (where `fill`'s body does
|
|
60
|
+
* `arr.push(x)` on its PARAMETER) or `this.cache.set(k, v)` reached only
|
|
61
|
+
* through a parameter the cache was passed to are both invisible to a
|
|
62
|
+
* single-declaration read. Rather than forcing this into the generic
|
|
63
|
+
* `flow.writesToDeclaration(declaration)` default every OTHER ported domain
|
|
64
|
+
* uses, this policy states its own `writesOf` (see `policy.ts`'s doc on that
|
|
65
|
+
* hook) and pools the writes of the whole closure -- an honest widening of
|
|
66
|
+
* WHERE evidence is gathered, not a rule about what counts as evidence.
|
|
67
|
+
*/
|
|
68
|
+
const ALIAS_EDGES = new Set([
|
|
69
|
+
'declaration-initializer',
|
|
70
|
+
'identifier-assignment',
|
|
71
|
+
'property-assignment',
|
|
72
|
+
'index-assignment',
|
|
73
|
+
'call-argument'
|
|
74
|
+
]);
|
|
75
|
+
const writesOverAliasClosure = (owner, flow) => {
|
|
76
|
+
const seen = new Set([owner]);
|
|
77
|
+
const queue = [owner];
|
|
78
|
+
const writes = [];
|
|
79
|
+
while (queue.length > 0) {
|
|
80
|
+
const current = queue.shift();
|
|
81
|
+
writes.push(...flow.writesToDeclaration(current));
|
|
82
|
+
for (const write of flow.flowsFromDeclaration(current)) {
|
|
83
|
+
if (write.slot !== 'whole' || !ALIAS_EDGES.has(write.edge))
|
|
84
|
+
continue;
|
|
85
|
+
const target = write.target.declaration;
|
|
86
|
+
if (target && !seen.has(target)) {
|
|
87
|
+
seen.add(target);
|
|
88
|
+
queue.push(target);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return writes;
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* The owner's own type node, when its declaration shape carries one --
|
|
96
|
+
* `const m: Map<string, number> = new Map()` states its own answer, and this
|
|
97
|
+
* policy's `stated` must defer to it exactly as `field.ts`/`return.ts` do for
|
|
98
|
+
* theirs. `collection-bindings.ts` itself never asks this (its `bareConstruction`
|
|
99
|
+
* check only inspects the `new X()` expression's own type arguments, not the
|
|
100
|
+
* OWNER's annotation), so a program shaped this way binds here where the
|
|
101
|
+
* existing census is silent -- a real, deliberate difference, not a
|
|
102
|
+
* fidelity gap, and one every ported `ts.Type`-space policy already gets by
|
|
103
|
+
* asking `stated` at all.
|
|
104
|
+
*/
|
|
105
|
+
const ownerTypeNodeOf = (declaration) => {
|
|
106
|
+
if (ts.isVariableDeclaration(declaration) || ts.isPropertyDeclaration(declaration) || ts.isParameter(declaration)) {
|
|
107
|
+
return declaration.type;
|
|
108
|
+
}
|
|
109
|
+
return undefined;
|
|
110
|
+
};
|
|
111
|
+
/**
|
|
112
|
+
* The COLLECTION domain: `collection-bindings.ts`'s Map/Set/WeakMap/WeakSet
|
|
113
|
+
* question (`CollectionTypeArguments`'s K/V), restated as two evidence rules
|
|
114
|
+
* (`collection-key`, `collection-value`) over `flow`'s edges of the same
|
|
115
|
+
* name, joined per SLOT rather than into one value -- see `combine` below.
|
|
116
|
+
*
|
|
117
|
+
* Deliberately NOT ported, and left for a later phase exactly as
|
|
118
|
+
* `parameter.ts`'s header leaves its own gap documented rather than silent:
|
|
119
|
+
*
|
|
120
|
+
* - The checker-only half of `argumentType`'s `known ?? resolve` rule.
|
|
121
|
+
* `collection-bindings.ts` falls back to the COMPOSED PARAMETER CENSUS when
|
|
122
|
+
* the checker's own answer for a key/value argument is unusable evidence --
|
|
123
|
+
* the majority case in practice, since most of these sites are an untyped
|
|
124
|
+
* local function parameter. This policy has no composed census to fall
|
|
125
|
+
* back to (nothing wires one in for `defaultCellEvidencePolicies`, and
|
|
126
|
+
* wiring one would be the exact kind of cross-domain coupling
|
|
127
|
+
* `policies/index.ts`'s header calls out for the bag census's own
|
|
128
|
+
* `valueEvidence` half), so it reads the checker alone. This makes the
|
|
129
|
+
* policy narrower, not wrong: a slot this policy cannot bind still answers
|
|
130
|
+
* `null` (no override), never a guess.
|
|
131
|
+
* - The `weak-key-not-reference` refusal (`collection-bindings.ts:485-511`):
|
|
132
|
+
* a `WeakMap`/`WeakSet` key that resolves to a union is still published
|
|
133
|
+
* here as `key`, where the existing census would refuse the whole owner
|
|
134
|
+
* instead. Safe for this table's current, diagnostic-only readership
|
|
135
|
+
* (nothing downstream consumes `cellFacts` yet -- see `facts.ts`'s own
|
|
136
|
+
* header), and flagged here for whoever wires a consumer to close before
|
|
137
|
+
* this table's `collection` domain becomes load-bearing.
|
|
138
|
+
* - The array-element half of `collection-bindings.ts` (an empty array
|
|
139
|
+
* literal's inferred element type) is a DIFFERENT question that already
|
|
140
|
+
* fits the four ported domains' plain `ts.Type` shape -- it is not part of
|
|
141
|
+
* `CollectionTypeArguments`, and `CellDomain` names no domain for it. Out
|
|
142
|
+
* of scope for "port the collection domain" as this table's own `CellValue`
|
|
143
|
+
* union defines it.
|
|
144
|
+
* - `family-disagreement` (two `new X()` sites for one owner naming different
|
|
145
|
+
* families) is not tracked; a mixed owner simply answers from whichever
|
|
146
|
+
* evidence its writes admit rather than refusing outright. Diagnostic-only
|
|
147
|
+
* readership again makes this safe rather than silently wrong.
|
|
148
|
+
*/
|
|
149
|
+
export const createCollectionCellPolicy = (checker, reachable) => {
|
|
150
|
+
let constructorSymbols = null;
|
|
151
|
+
const constructorSymbolsFor = (anchor) => {
|
|
152
|
+
if (constructorSymbols)
|
|
153
|
+
return constructorSymbols;
|
|
154
|
+
const resolved = new Map();
|
|
155
|
+
for (const [name, family] of CONSTRUCTOR_NAMES) {
|
|
156
|
+
const symbol = checker.resolveName(name, anchor, ts.SymbolFlags.Value, false);
|
|
157
|
+
if (symbol)
|
|
158
|
+
resolved.set(family, symbol);
|
|
159
|
+
}
|
|
160
|
+
constructorSymbols = resolved;
|
|
161
|
+
return resolved;
|
|
162
|
+
};
|
|
163
|
+
/** The family this expression constructs, only when it is genuinely the standard-library constructor -- never a program's own `class WeakMap`. */
|
|
164
|
+
const realConstructorFamily = (anchor, node) => {
|
|
165
|
+
if (!ts.isIdentifier(node.expression))
|
|
166
|
+
return null;
|
|
167
|
+
const family = CONSTRUCTOR_NAMES.get(node.expression.text);
|
|
168
|
+
if (!family)
|
|
169
|
+
return null;
|
|
170
|
+
const expected = constructorSymbolsFor(anchor).get(family);
|
|
171
|
+
if (!expected)
|
|
172
|
+
return null;
|
|
173
|
+
return checker.getSymbolAtLocation(node.expression) === expected ? family : null;
|
|
174
|
+
};
|
|
175
|
+
const bareConstruction = (node) => (node.typeArguments === undefined || node.typeArguments.length === 0) && (node.arguments === undefined || node.arguments.length === 0);
|
|
176
|
+
return {
|
|
177
|
+
domain: 'collection',
|
|
178
|
+
candidatesOf: (files) => {
|
|
179
|
+
const anchor = files[0];
|
|
180
|
+
if (!anchor)
|
|
181
|
+
return [];
|
|
182
|
+
const isBareCollectionNew = (node) => ts.isNewExpression(node) && bareConstruction(node) && realConstructorFamily(anchor, node) !== null;
|
|
183
|
+
const owners = new Set();
|
|
184
|
+
for (const node of cellCandidatesOf(reachable, files, isBareCollectionNew)) {
|
|
185
|
+
const owner = ownerDeclOf(checker, node);
|
|
186
|
+
if (owner)
|
|
187
|
+
owners.add(owner);
|
|
188
|
+
}
|
|
189
|
+
return owners;
|
|
190
|
+
},
|
|
191
|
+
statedAt: (declaration) => statedTypeOf(checker, ownerTypeNodeOf(declaration)),
|
|
192
|
+
checkerAt: (declaration) => cellType(checker.getTypeAtLocation(declaration)),
|
|
193
|
+
writesOf: writesOverAliasClosure,
|
|
194
|
+
rules: rulesFor([
|
|
195
|
+
['collection-key', (write) => (write.value ? cellType(checker.getTypeAtLocation(write.value)) : null)],
|
|
196
|
+
['collection-value', (write) => (write.value ? cellType(checker.getTypeAtLocation(write.value)) : null)]
|
|
197
|
+
]),
|
|
198
|
+
// Per-SLOT join, not per-cell: K and V are independent questions about one
|
|
199
|
+
// storage (`collection-bindings.ts`'s own header, "K and V are INDEPENDENT
|
|
200
|
+
// questions"), so a `Map`'s key evidence and value evidence are grouped by
|
|
201
|
+
// `write.slot` and joined separately -- exactly the extension
|
|
202
|
+
// `policies/index.ts` asked for, now that `combine` receives the write
|
|
203
|
+
// alongside the value (`CellEvidenceContribution`). Either half joining to
|
|
204
|
+
// `null` (no evidence, or disagreement) is "no override" for that half
|
|
205
|
+
// alone, matching `collection-bindings.ts`'s own `boundArgumentsFor`,
|
|
206
|
+
// which folds "refused" and "never asked" into the same absent answer.
|
|
207
|
+
combine: (contributions) => {
|
|
208
|
+
const keys = contributions.filter((c) => c.write.slot === 'collection-key').map((c) => c.value);
|
|
209
|
+
const values = contributions.filter((c) => c.write.slot === 'collection-value').map((c) => c.value);
|
|
210
|
+
if (keys.length === 0 && values.length === 0)
|
|
211
|
+
return null;
|
|
212
|
+
const key = keys.length > 0 ? joinCellTypeValues(checker, keys) : null;
|
|
213
|
+
const value = values.length > 0 ? joinCellTypeValues(checker, values) : null;
|
|
214
|
+
const arguments_ = { key, value, valueEvidence: [] };
|
|
215
|
+
return { kind: 'collection-arguments', arguments: arguments_ };
|
|
216
|
+
}
|
|
217
|
+
};
|
|
218
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { ProgramReachability } from '../../reachability.js';
|
|
3
|
+
import type { CellEvidencePolicy } from '../policy.js';
|
|
4
|
+
/**
|
|
5
|
+
* The FIELD domain: `field-bindings.ts`'s question, restated over the shared
|
|
6
|
+
* flow index's `property-assignment` edge.
|
|
7
|
+
*
|
|
8
|
+
* Scoped to an explicit `PropertyDeclaration` with no initializer -- the
|
|
9
|
+
* the shape called note 16 ("a `PropertyDeclaration` WITH an
|
|
10
|
+
* initializer is not a candidate at all"). What is NOT ported: a field TypeScript
|
|
11
|
+
* infers purely from a JS constructor's `this.x = v` with no
|
|
12
|
+
* `PropertyDeclaration` node at all ("TS JS-class
|
|
13
|
+
* inference decl"). `field-bindings.ts` keys that case by SYMBOL because there
|
|
14
|
+
* is no declaration node to key it by, and this policy interface keys every
|
|
15
|
+
* candidate by a `ts.Declaration` for `identities.declarationIdOf` -- the same
|
|
16
|
+
* "one answer language" constraint this whole table exists to hold everyone
|
|
17
|
+
* to. Closing that gap needs either a synthetic per-symbol identity or
|
|
18
|
+
* widening `CellEvidencePolicy.candidatesOf` to a symbol-keyed variant; left
|
|
19
|
+
* for a later step rather than forced here. See the report for the exact
|
|
20
|
+
* count this leaves unproven.
|
|
21
|
+
*
|
|
22
|
+
* `flow/model.ts` already resolves `this.x = v` (and a subclass's write, and
|
|
23
|
+
* `this.a.b = v`'s outer member) to THIS declaration by symbol identity
|
|
24
|
+
* (`FlowTarget.symbol`/`.declaration`, `flow/model.ts`'s own header), so no
|
|
25
|
+
* receiver-walk of this policy's own is needed -- exactly the property
|
|
26
|
+
* `parameter.ts` and `return.ts` already lean on for their own edges.
|
|
27
|
+
*/
|
|
28
|
+
export declare const createFieldCellPolicy: (checker: ts.TypeChecker, reachable: ProgramReachability) => CellEvidencePolicy;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { cellCandidatesOf } from '../candidates.js';
|
|
3
|
+
import { cellType } from '../model.js';
|
|
4
|
+
import { rulesFor } from '../policy.js';
|
|
5
|
+
import { combineTypesByJoin, statedTypeOf } from './shared.js';
|
|
6
|
+
const isUnannotatedUninitializedField = (node) => ts.isPropertyDeclaration(node) && node.type === undefined && node.initializer === undefined;
|
|
7
|
+
/**
|
|
8
|
+
* The FIELD domain: `field-bindings.ts`'s question, restated over the shared
|
|
9
|
+
* flow index's `property-assignment` edge.
|
|
10
|
+
*
|
|
11
|
+
* Scoped to an explicit `PropertyDeclaration` with no initializer -- the
|
|
12
|
+
* the shape called note 16 ("a `PropertyDeclaration` WITH an
|
|
13
|
+
* initializer is not a candidate at all"). What is NOT ported: a field TypeScript
|
|
14
|
+
* infers purely from a JS constructor's `this.x = v` with no
|
|
15
|
+
* `PropertyDeclaration` node at all ("TS JS-class
|
|
16
|
+
* inference decl"). `field-bindings.ts` keys that case by SYMBOL because there
|
|
17
|
+
* is no declaration node to key it by, and this policy interface keys every
|
|
18
|
+
* candidate by a `ts.Declaration` for `identities.declarationIdOf` -- the same
|
|
19
|
+
* "one answer language" constraint this whole table exists to hold everyone
|
|
20
|
+
* to. Closing that gap needs either a synthetic per-symbol identity or
|
|
21
|
+
* widening `CellEvidencePolicy.candidatesOf` to a symbol-keyed variant; left
|
|
22
|
+
* for a later step rather than forced here. See the report for the exact
|
|
23
|
+
* count this leaves unproven.
|
|
24
|
+
*
|
|
25
|
+
* `flow/model.ts` already resolves `this.x = v` (and a subclass's write, and
|
|
26
|
+
* `this.a.b = v`'s outer member) to THIS declaration by symbol identity
|
|
27
|
+
* (`FlowTarget.symbol`/`.declaration`, `flow/model.ts`'s own header), so no
|
|
28
|
+
* receiver-walk of this policy's own is needed -- exactly the property
|
|
29
|
+
* `parameter.ts` and `return.ts` already lean on for their own edges.
|
|
30
|
+
*/
|
|
31
|
+
export const createFieldCellPolicy = (checker, reachable) => ({
|
|
32
|
+
domain: 'field',
|
|
33
|
+
candidatesOf: (files) => cellCandidatesOf(reachable, files, isUnannotatedUninitializedField),
|
|
34
|
+
statedAt: (declaration) => statedTypeOf(checker, declaration.type),
|
|
35
|
+
checkerAt: (declaration) => cellType(checker.getTypeAtLocation(declaration)),
|
|
36
|
+
rules: rulesFor([
|
|
37
|
+
['property-assignment', (write) => (write.value ? cellType(checker.getTypeAtLocation(write.value)) : null)]
|
|
38
|
+
]),
|
|
39
|
+
combine: combineTypesByJoin(checker)
|
|
40
|
+
});
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type ts from 'typescript';
|
|
2
|
+
import type { ProgramReachability } from '../../reachability.js';
|
|
3
|
+
import type { ObjectBagIdentity } from '../../object-bag-bindings.js';
|
|
4
|
+
import type { CellEvidencePolicy } from '../policy.js';
|
|
5
|
+
export { createParameterCellPolicy } from './parameter.js';
|
|
6
|
+
export { createReturnCellPolicy } from './return.js';
|
|
7
|
+
export { createLocalCellPolicy } from './local.js';
|
|
8
|
+
export { createFieldCellPolicy } from './field.js';
|
|
9
|
+
export { createCollectionCellPolicy } from './collection.js';
|
|
10
|
+
export { createBagCellPolicy } from './bag.js';
|
|
11
|
+
/**
|
|
12
|
+
* Five of the six domains are ported to an evidence policy as of this phase:
|
|
13
|
+
* parameter, return, local, field (already `ts.Type`-space censuses), and now
|
|
14
|
+
* collection (`CollectionTypeArguments`'s independent key/value pair -- see
|
|
15
|
+
* `collection.ts`'s own header for what was and was not carried over).
|
|
16
|
+
*
|
|
17
|
+
* Porting `collection` needed a real extension to the shape, not a policy
|
|
18
|
+
* bent to fit the existing one: `combine` used to receive a flat
|
|
19
|
+
* `CellValue[]`, discarding which write and which slot produced each one, so
|
|
20
|
+
* nothing could join K and V independently. `CellEvidenceContribution`
|
|
21
|
+
* (`policy.ts`) pairs the value back with its `ValueWrite`, and `writesOf`
|
|
22
|
+
* (also `policy.ts`) lets a policy widen WHERE evidence is gathered from
|
|
23
|
+
* (`collection.ts`'s alias-closure walk) without forcing every other domain
|
|
24
|
+
* to pay for a closure it never needed. Both are honest widenings of the
|
|
25
|
+
* question `CellEvidencePolicy` can state, not a narrower reading of
|
|
26
|
+
* `collection-bindings.ts`'s own question -- see `collection.ts` for the
|
|
27
|
+
* three pieces of that census deliberately left unported and why each is
|
|
28
|
+
* safe for this table's current, diagnostic-only readership.
|
|
29
|
+
*
|
|
30
|
+
* BAG is now here too, and the obstacle that kept it out was never "needs a
|
|
31
|
+
* slot-aware rule" -- the frontend's evidence-policy tables
|
|
32
|
+
* records the full history. `object-bag-bindings.ts`'s identity (which
|
|
33
|
+
* declarations name the SAME bag) is not decided per write or even per
|
|
34
|
+
* declaration -- it is the fixed point of a whole-program worklist
|
|
35
|
+
* (`bagOf`/`returnsBag`, propagated through assignments, provably-exhaustive
|
|
36
|
+
* `return`s, and one layer of callee-alias unwrapping, with `conflicted`/
|
|
37
|
+
* `ungrounded` bookkeeping deciding which candidates survive), and a
|
|
38
|
+
* `candidatesOf` that enumerates nodes by a per-node syntactic test --
|
|
39
|
+
* everything this table's `cellCandidatesOf` walk assumes -- cannot state
|
|
40
|
+
* "one candidate becomes known to be one cell only once a closure over the
|
|
41
|
+
* WHOLE program has converged." The fix taken was the second of the two
|
|
42
|
+
* choices this header used to weigh: `object-bag-bindings.ts` now publishes
|
|
43
|
+
* that fixpoint as `ObjectBagCensus.identity` (`ObjectBagIdentity`), and
|
|
44
|
+
* `bag.ts`'s policy consumes it rather than reimplementing it -- `bagIdentity`
|
|
45
|
+
* is threaded in as a construction-time argument, not discovered via `files`,
|
|
46
|
+
* because the fixpoint needs the whole program already settled before any
|
|
47
|
+
* single node can be called a candidate.
|
|
48
|
+
*/
|
|
49
|
+
export declare const defaultCellEvidencePolicies: (checker: ts.TypeChecker, reachable: ProgramReachability, bagIdentity: ObjectBagIdentity) => readonly CellEvidencePolicy[];
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { createBagCellPolicy } from './bag.js';
|
|
2
|
+
import { createCollectionCellPolicy } from './collection.js';
|
|
3
|
+
import { createFieldCellPolicy } from './field.js';
|
|
4
|
+
import { createLocalCellPolicy } from './local.js';
|
|
5
|
+
import { createParameterCellPolicy } from './parameter.js';
|
|
6
|
+
import { createReturnCellPolicy } from './return.js';
|
|
7
|
+
export { createParameterCellPolicy } from './parameter.js';
|
|
8
|
+
export { createReturnCellPolicy } from './return.js';
|
|
9
|
+
export { createLocalCellPolicy } from './local.js';
|
|
10
|
+
export { createFieldCellPolicy } from './field.js';
|
|
11
|
+
export { createCollectionCellPolicy } from './collection.js';
|
|
12
|
+
export { createBagCellPolicy } from './bag.js';
|
|
13
|
+
/**
|
|
14
|
+
* Five of the six domains are ported to an evidence policy as of this phase:
|
|
15
|
+
* parameter, return, local, field (already `ts.Type`-space censuses), and now
|
|
16
|
+
* collection (`CollectionTypeArguments`'s independent key/value pair -- see
|
|
17
|
+
* `collection.ts`'s own header for what was and was not carried over).
|
|
18
|
+
*
|
|
19
|
+
* Porting `collection` needed a real extension to the shape, not a policy
|
|
20
|
+
* bent to fit the existing one: `combine` used to receive a flat
|
|
21
|
+
* `CellValue[]`, discarding which write and which slot produced each one, so
|
|
22
|
+
* nothing could join K and V independently. `CellEvidenceContribution`
|
|
23
|
+
* (`policy.ts`) pairs the value back with its `ValueWrite`, and `writesOf`
|
|
24
|
+
* (also `policy.ts`) lets a policy widen WHERE evidence is gathered from
|
|
25
|
+
* (`collection.ts`'s alias-closure walk) without forcing every other domain
|
|
26
|
+
* to pay for a closure it never needed. Both are honest widenings of the
|
|
27
|
+
* question `CellEvidencePolicy` can state, not a narrower reading of
|
|
28
|
+
* `collection-bindings.ts`'s own question -- see `collection.ts` for the
|
|
29
|
+
* three pieces of that census deliberately left unported and why each is
|
|
30
|
+
* safe for this table's current, diagnostic-only readership.
|
|
31
|
+
*
|
|
32
|
+
* BAG is now here too, and the obstacle that kept it out was never "needs a
|
|
33
|
+
* slot-aware rule" -- the frontend's evidence-policy tables
|
|
34
|
+
* records the full history. `object-bag-bindings.ts`'s identity (which
|
|
35
|
+
* declarations name the SAME bag) is not decided per write or even per
|
|
36
|
+
* declaration -- it is the fixed point of a whole-program worklist
|
|
37
|
+
* (`bagOf`/`returnsBag`, propagated through assignments, provably-exhaustive
|
|
38
|
+
* `return`s, and one layer of callee-alias unwrapping, with `conflicted`/
|
|
39
|
+
* `ungrounded` bookkeeping deciding which candidates survive), and a
|
|
40
|
+
* `candidatesOf` that enumerates nodes by a per-node syntactic test --
|
|
41
|
+
* everything this table's `cellCandidatesOf` walk assumes -- cannot state
|
|
42
|
+
* "one candidate becomes known to be one cell only once a closure over the
|
|
43
|
+
* WHOLE program has converged." The fix taken was the second of the two
|
|
44
|
+
* choices this header used to weigh: `object-bag-bindings.ts` now publishes
|
|
45
|
+
* that fixpoint as `ObjectBagCensus.identity` (`ObjectBagIdentity`), and
|
|
46
|
+
* `bag.ts`'s policy consumes it rather than reimplementing it -- `bagIdentity`
|
|
47
|
+
* is threaded in as a construction-time argument, not discovered via `files`,
|
|
48
|
+
* because the fixpoint needs the whole program already settled before any
|
|
49
|
+
* single node can be called a candidate.
|
|
50
|
+
*/
|
|
51
|
+
export const defaultCellEvidencePolicies = (checker, reachable, bagIdentity) => [
|
|
52
|
+
createParameterCellPolicy(checker, reachable),
|
|
53
|
+
createReturnCellPolicy(checker, reachable),
|
|
54
|
+
createLocalCellPolicy(checker, reachable),
|
|
55
|
+
createFieldCellPolicy(checker, reachable),
|
|
56
|
+
createCollectionCellPolicy(checker, reachable),
|
|
57
|
+
createBagCellPolicy(checker, bagIdentity)
|
|
58
|
+
];
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { ProgramReachability } from '../../reachability.js';
|
|
3
|
+
import type { CellEvidencePolicy } from '../policy.js';
|
|
4
|
+
/**
|
|
5
|
+
* The LOCAL domain: `local-bindings.ts`'s question ("an unannotated
|
|
6
|
+
* `let`/`var` cell with no initializer, filled in by exactly the writes the
|
|
7
|
+
* program makes to it"), restated over the shared flow index's
|
|
8
|
+
* `identifier-assignment` and `logical-assignment` edges.
|
|
9
|
+
*
|
|
10
|
+
* `compound-assignment` (`x += 1`) is deliberately given no rule: per
|
|
11
|
+
* `flow/model.ts`'s own doc, that edge states existence and a DERIVED value,
|
|
12
|
+
* never a fresh one, so admitting it here would join the cell's own prior
|
|
13
|
+
* (unknown) contents into its write-join. `rulesFor` skipping an edge is the
|
|
14
|
+
* correct, sound default -- soundness cuts one way here:
|
|
15
|
+
* missing evidence is a box, joining the wrong evidence is a silent
|
|
16
|
+
* miscompile, and this domain refuses the second, never the first.
|
|
17
|
+
*/
|
|
18
|
+
export declare const createLocalCellPolicy: (checker: ts.TypeChecker, reachable: ProgramReachability) => CellEvidencePolicy;
|