@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,27 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { type ValueFlowIndex } from './model.js';
|
|
3
|
+
/**
|
|
4
|
+
* # Parameter values over closed callers
|
|
5
|
+
*
|
|
6
|
+
* Every expression a parameter can be bound to, or `null` when some caller
|
|
7
|
+
* cannot be enumerated. A parameter is a cell whose writes are the arguments
|
|
8
|
+
* of its calls, so the question is only whether every call is known:
|
|
9
|
+
*
|
|
10
|
+
* - A constructor's calls are the constructions of its class family, which
|
|
11
|
+
* `ownedClassReceiverInventoryOf` enumerates completely or refuses, plus
|
|
12
|
+
* every `super(...)` of a subclass whose base constructor it is. A
|
|
13
|
+
* subclass with no constructor of its own forwards its arguments unchanged.
|
|
14
|
+
* - Any other callable needs callable reach's closed call-site proof beside
|
|
15
|
+
* the calls the checker names directly. A `.call`/`.apply` site shifts
|
|
16
|
+
* argument positions and refuses, as does an `arguments` mention in a
|
|
17
|
+
* non-class function: in sloppy mode that object aliases the parameters.
|
|
18
|
+
*
|
|
19
|
+
* A missing argument binds `undefined`, which holds nothing, so it adds no
|
|
20
|
+
* value. A default initializer adds one whenever any call exists. Stores to the
|
|
21
|
+
* parameter inside its body are plain writes and add their values too.
|
|
22
|
+
*/
|
|
23
|
+
type Call = ts.CallExpression | ts.NewExpression;
|
|
24
|
+
/** Every call that runs this constructor: family constructions it is the nearest constructor of, and subclass `super(...)` calls. */
|
|
25
|
+
export declare const constructorCallsOf: (checker: ts.TypeChecker, flow: ValueFlowIndex, constructor: ts.ConstructorDeclaration) => Call[] | null;
|
|
26
|
+
export declare const parameterValuesOf: (checker: ts.TypeChecker, flow: ValueFlowIndex, parameter: ts.ParameterDeclaration) => readonly ts.Expression[] | null;
|
|
27
|
+
export {};
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { outermostErasureOf } from '../producers/erasure.js';
|
|
3
|
+
import { isClassSpelledSourceClass } from './model.js';
|
|
4
|
+
import { indexCallableReach } from './callable-reach.js';
|
|
5
|
+
import { ownedClassReceiverInventoryOf } from './owned-class-receivers.js';
|
|
6
|
+
import { isModuleExportedDeclaration, isTypePositionReference, runtimeParametersOf } from './targets.js';
|
|
7
|
+
import { enterHypothesisGuard, exitHypothesisGuard, hypothesisGuardIsOpen, noteHypothesis } from './proof-hypotheses.js';
|
|
8
|
+
const reaches = new WeakMap();
|
|
9
|
+
const answers = new WeakMap();
|
|
10
|
+
/** Body writes that bind the whole parameter to a stated value; the argument edges are enumerated from the calls instead. */
|
|
11
|
+
const BODY_WRITES = new Set([
|
|
12
|
+
'identifier-assignment',
|
|
13
|
+
'logical-assignment',
|
|
14
|
+
'declaration-initializer',
|
|
15
|
+
'default-parameter'
|
|
16
|
+
]);
|
|
17
|
+
const ARGUMENT_WRITES = new Set(['call-argument', 'super-argument']);
|
|
18
|
+
const isThisParameter = (parameter) => ts.isIdentifier(parameter.name) && parameter.name.text === 'this';
|
|
19
|
+
const baseClassOf = (checker, owner) => {
|
|
20
|
+
// A constructor function has no `extends`, and the prototype-chain spelling
|
|
21
|
+
// that stands in for one is refused at admission (`familyRootsOf`), so a
|
|
22
|
+
// root that reaches here provably has no base rather than merely no
|
|
23
|
+
// heritage clause.
|
|
24
|
+
if (!isClassSpelledSourceClass(owner))
|
|
25
|
+
return null;
|
|
26
|
+
const extended = owner.heritageClauses?.find((clause) => clause.token === ts.SyntaxKind.ExtendsKeyword)?.types[0];
|
|
27
|
+
if (!extended)
|
|
28
|
+
return null;
|
|
29
|
+
const declaration = checker.getTypeAtLocation(extended.expression).getSymbol()?.valueDeclaration;
|
|
30
|
+
return declaration && (ts.isClassDeclaration(declaration) || ts.isClassExpression(declaration)) ? declaration : null;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* The `constructor(...)` member `owner` declares, or null.
|
|
34
|
+
*
|
|
35
|
+
* Null for a constructor function is the right answer, not a refusal: its
|
|
36
|
+
* parameters are an ordinary function's, bound by the `call-argument` edges
|
|
37
|
+
* the flow index already records at `new F( ... )`. This census exists for the
|
|
38
|
+
* case those edges cannot see -- a constructor reached through a SUBCLASS
|
|
39
|
+
* construction or a `super(...)` -- and neither is reachable for a root with
|
|
40
|
+
* no base.
|
|
41
|
+
*/
|
|
42
|
+
const ownConstructorOf = (owner) => (isClassSpelledSourceClass(owner)
|
|
43
|
+
? owner.members.find((member) => ts.isConstructorDeclaration(member) && member.body !== undefined)
|
|
44
|
+
: undefined) ?? null;
|
|
45
|
+
/** The constructor `new owner(...)` runs, or `null` when no source constructor is on the chain. */
|
|
46
|
+
const constructorRunBy = (checker, owner) => {
|
|
47
|
+
const seen = new Set();
|
|
48
|
+
for (let current = owner; current && !seen.has(current); current = baseClassOf(checker, current)) {
|
|
49
|
+
seen.add(current);
|
|
50
|
+
const own = ownConstructorOf(current);
|
|
51
|
+
if (own)
|
|
52
|
+
return own;
|
|
53
|
+
}
|
|
54
|
+
return null;
|
|
55
|
+
};
|
|
56
|
+
/** `super(...)` calls in a constructor; an arrow function shares its `super`, a nested function or class does not. */
|
|
57
|
+
const superCallsIn = (constructor) => {
|
|
58
|
+
const calls = [];
|
|
59
|
+
const visit = (node) => {
|
|
60
|
+
if (ts.isCallExpression(node) && node.expression.kind === ts.SyntaxKind.SuperKeyword)
|
|
61
|
+
calls.push(node);
|
|
62
|
+
if (ts.isFunctionLike(node) && !ts.isArrowFunction(node))
|
|
63
|
+
return;
|
|
64
|
+
if (ts.isClassLike(node))
|
|
65
|
+
return;
|
|
66
|
+
ts.forEachChild(node, visit);
|
|
67
|
+
};
|
|
68
|
+
if (constructor.body)
|
|
69
|
+
ts.forEachChild(constructor.body, visit);
|
|
70
|
+
return calls;
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* A class body is UNCONDITIONALLY strict code (ECMA-262 `ClassTail`), with or
|
|
74
|
+
* without a `'use strict'` directive.
|
|
75
|
+
*
|
|
76
|
+
* That settles the only question the `arguments` refusal below exists to ask.
|
|
77
|
+
* A MAPPED `arguments` -- the one whose elements alias the parameter bindings,
|
|
78
|
+
* so that `arguments[ 0 ] = x` rewrites the first parameter -- is created only
|
|
79
|
+
* for a NON-strict function with a simple parameter list
|
|
80
|
+
* (`FunctionDeclarationInstantiation`). Inside a class element the object is
|
|
81
|
+
* always the unmapped kind: writing the parameter cannot change the frame and
|
|
82
|
+
* writing the frame cannot change the parameter, so enumerating the call
|
|
83
|
+
* arguments still enumerates every value the parameter can hold.
|
|
84
|
+
*
|
|
85
|
+
* three's `Object3D.add( object )` walks its own `arguments` to add several
|
|
86
|
+
* children at once, and that alone refused `object`'s value set -- which is
|
|
87
|
+
* the cell behind the `array-element` carriers, the largest single group in
|
|
88
|
+
* the three.js app's nested population.
|
|
89
|
+
*
|
|
90
|
+
* ⚠ Narrow on purpose. A plain function in an ES module, or under an explicit
|
|
91
|
+
* `'use strict'`, is also always unmapped and could join this -- but proving
|
|
92
|
+
* "this file is a module" is a different question, and a class element is the
|
|
93
|
+
* slice that is unambiguous from syntax alone.
|
|
94
|
+
*/
|
|
95
|
+
const isAlwaysStrictClassElement = (callable) => ts.isClassElement(callable) && (ts.isClassDeclaration(callable.parent) || ts.isClassExpression(callable.parent));
|
|
96
|
+
const mentionsArguments = (callable) => {
|
|
97
|
+
let found = false;
|
|
98
|
+
const visit = (node) => {
|
|
99
|
+
if (found)
|
|
100
|
+
return;
|
|
101
|
+
if (ts.isIdentifier(node) && node.text === 'arguments')
|
|
102
|
+
found = true;
|
|
103
|
+
if (ts.isFunctionLike(node) && !ts.isArrowFunction(node))
|
|
104
|
+
return;
|
|
105
|
+
ts.forEachChild(node, visit);
|
|
106
|
+
};
|
|
107
|
+
if ('body' in callable && callable.body)
|
|
108
|
+
ts.forEachChild(callable.body, visit);
|
|
109
|
+
return found;
|
|
110
|
+
};
|
|
111
|
+
/** Every call that runs this constructor: family constructions it is the nearest constructor of, and subclass `super(...)` calls. */
|
|
112
|
+
export const constructorCallsOf = (checker, flow, constructor) => {
|
|
113
|
+
const owner = constructor.parent;
|
|
114
|
+
const inventory = ownedClassReceiverInventoryOf(checker, flow, new Set([owner]));
|
|
115
|
+
if (!inventory)
|
|
116
|
+
return null;
|
|
117
|
+
const calls = [];
|
|
118
|
+
for (const { call, familyProjection } of inventory.constructionFacts) {
|
|
119
|
+
if (familyProjection.some((constructed) => constructorRunBy(checker, constructed) === constructor))
|
|
120
|
+
calls.push(call);
|
|
121
|
+
}
|
|
122
|
+
for (const member of inventory.classes) {
|
|
123
|
+
const own = member === owner ? null : ownConstructorOf(member);
|
|
124
|
+
const base = own && baseClassOf(checker, member);
|
|
125
|
+
if (own && base && constructorRunBy(checker, base) === constructor)
|
|
126
|
+
calls.push(...superCallsIn(own));
|
|
127
|
+
}
|
|
128
|
+
return calls;
|
|
129
|
+
};
|
|
130
|
+
/**
|
|
131
|
+
* The calls of a callable bound once to an unexported name that only direct
|
|
132
|
+
* calls mention (three's `uploadTexture`). Callable reach leaves exactly
|
|
133
|
+
* these to its consumer. Any other mention -- an alias, an export, a
|
|
134
|
+
* publication -- is callable reach's to prove.
|
|
135
|
+
*/
|
|
136
|
+
const directCallsOf = (checker, flow, callable) => {
|
|
137
|
+
const position = outermostErasureOf(callable);
|
|
138
|
+
const binding = ts.isFunctionDeclaration(callable)
|
|
139
|
+
? callable
|
|
140
|
+
: ts.isVariableDeclaration(position.parent) && position.parent.initializer === position && ts.isIdentifier(position.parent.name)
|
|
141
|
+
? position.parent
|
|
142
|
+
: null;
|
|
143
|
+
if (!binding?.name || isModuleExportedDeclaration(checker, binding, checker.getSymbolAtLocation(binding.name) ?? null))
|
|
144
|
+
return null;
|
|
145
|
+
const rebound = flow
|
|
146
|
+
.writesToDeclaration(binding)
|
|
147
|
+
.some((write) => write.slot === 'whole' && write.edge !== 'return' && write.edge !== 'declaration-initializer');
|
|
148
|
+
if (rebound)
|
|
149
|
+
return null;
|
|
150
|
+
const calls = [];
|
|
151
|
+
for (const reference of flow.referencesToDeclaration(binding)) {
|
|
152
|
+
if (reference === binding.name || isTypePositionReference(reference))
|
|
153
|
+
continue;
|
|
154
|
+
const callee = outermostErasureOf(reference);
|
|
155
|
+
const call = callee.parent;
|
|
156
|
+
if (!(ts.isCallExpression(call) || ts.isNewExpression(call)) || call.expression !== callee)
|
|
157
|
+
return null;
|
|
158
|
+
calls.push(call);
|
|
159
|
+
}
|
|
160
|
+
return calls;
|
|
161
|
+
};
|
|
162
|
+
const callableCallsOf = (checker, flow, callable) => {
|
|
163
|
+
if (mentionsArguments(callable) && !isAlwaysStrictClassElement(callable))
|
|
164
|
+
return null;
|
|
165
|
+
const direct = directCallsOf(checker, flow, callable);
|
|
166
|
+
const calls = new Set(direct ?? []);
|
|
167
|
+
if (!direct) {
|
|
168
|
+
let reach = reaches.get(flow);
|
|
169
|
+
if (!reach)
|
|
170
|
+
reaches.set(flow, (reach = indexCallableReach(checker, flow)));
|
|
171
|
+
const enumerated = reach.enumeratedCallSitesOf(callable);
|
|
172
|
+
if (!enumerated)
|
|
173
|
+
return null;
|
|
174
|
+
for (const call of enumerated)
|
|
175
|
+
calls.add(call);
|
|
176
|
+
for (const site of flow.calls) {
|
|
177
|
+
if (site.checkerDeclaration !== callable && site.inferredDeclaration !== callable && !site.targets.includes(callable))
|
|
178
|
+
continue;
|
|
179
|
+
if (site.explicitThis)
|
|
180
|
+
return null;
|
|
181
|
+
calls.add(site.call);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
for (const call of calls) {
|
|
185
|
+
const callee = call.expression;
|
|
186
|
+
if (ts.isPropertyAccessExpression(callee) && (callee.name.text === 'call' || callee.name.text === 'apply'))
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
return [...calls];
|
|
190
|
+
};
|
|
191
|
+
const computeParameterValues = (checker, flow, parameter) => {
|
|
192
|
+
if (!ts.isIdentifier(parameter.name) || parameter.dotDotDotToken || isThisParameter(parameter))
|
|
193
|
+
return null;
|
|
194
|
+
const callable = parameter.parent;
|
|
195
|
+
if (!ts.isFunctionLike(callable) || callable.getSourceFile().isDeclarationFile)
|
|
196
|
+
return null;
|
|
197
|
+
// An ambient or overload signature is not the code the call runs.
|
|
198
|
+
if (!('body' in callable) || !callable.body)
|
|
199
|
+
return null;
|
|
200
|
+
const index = runtimeParametersOf(callable).indexOf(parameter);
|
|
201
|
+
const calls = ts.isConstructorDeclaration(callable)
|
|
202
|
+
? constructorCallsOf(checker, flow, callable)
|
|
203
|
+
: callableCallsOf(checker, flow, callable);
|
|
204
|
+
if (!calls)
|
|
205
|
+
return null;
|
|
206
|
+
const values = [];
|
|
207
|
+
for (const call of calls) {
|
|
208
|
+
const args = call.arguments ?? [];
|
|
209
|
+
// A spread before or at this position may fill it with anything.
|
|
210
|
+
if (args.slice(0, index + 1).some(ts.isSpreadElement))
|
|
211
|
+
return null;
|
|
212
|
+
if (args[index])
|
|
213
|
+
values.push(args[index]);
|
|
214
|
+
}
|
|
215
|
+
if (calls.length > 0 && parameter.initializer)
|
|
216
|
+
values.push(parameter.initializer);
|
|
217
|
+
for (const write of flow.writesToDeclaration(parameter)) {
|
|
218
|
+
if (write.slot !== 'whole' || ARGUMENT_WRITES.has(write.edge))
|
|
219
|
+
continue;
|
|
220
|
+
if (!BODY_WRITES.has(write.edge) || write.value === null)
|
|
221
|
+
return null;
|
|
222
|
+
if (write.value !== parameter.initializer)
|
|
223
|
+
values.push(write.value);
|
|
224
|
+
}
|
|
225
|
+
return values;
|
|
226
|
+
};
|
|
227
|
+
export const parameterValuesOf = (checker, flow, parameter) => {
|
|
228
|
+
let held = answers.get(flow);
|
|
229
|
+
if (!held)
|
|
230
|
+
answers.set(flow, (held = new Map()));
|
|
231
|
+
if (held.has(parameter)) {
|
|
232
|
+
// The recursive `null` below is a HYPOTHESIS, not a result, and a caller
|
|
233
|
+
// that keeps a refusal must know it leaned on one: the settled answer is
|
|
234
|
+
// written over it moments later, so an answer computed inside the window
|
|
235
|
+
// is only valid while this same parameter is still being proven.
|
|
236
|
+
if (hypothesisGuardIsOpen(parameter))
|
|
237
|
+
noteHypothesis(parameter);
|
|
238
|
+
return held.get(parameter);
|
|
239
|
+
}
|
|
240
|
+
// A recursive query for the same parameter is refused while it is proven.
|
|
241
|
+
held.set(parameter, null);
|
|
242
|
+
enterHypothesisGuard(parameter);
|
|
243
|
+
try {
|
|
244
|
+
const values = computeParameterValues(checker, flow, parameter);
|
|
245
|
+
held.set(parameter, values);
|
|
246
|
+
return values;
|
|
247
|
+
}
|
|
248
|
+
finally {
|
|
249
|
+
exitHypothesisGuard(parameter, true);
|
|
250
|
+
}
|
|
251
|
+
};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/** Record that the computation now running leaned on `key` being assumed. */
|
|
2
|
+
export declare const noteHypothesis: (key: object) => void;
|
|
3
|
+
export declare const hypothesisNotes: () => number;
|
|
4
|
+
/** Begin collecting what a computation leans on; the returned set is its trail. */
|
|
5
|
+
export declare const pushHypothesisTrail: () => Set<object>;
|
|
6
|
+
export declare const popHypothesisTrail: () => void;
|
|
7
|
+
export declare const hypothesisSettledAsTruth: (key: object) => boolean;
|
|
8
|
+
export declare const enterHypothesisGuard: (key: object) => void;
|
|
9
|
+
/**
|
|
10
|
+
* An answer a memo holds whose applicability still names hypotheses.
|
|
11
|
+
*
|
|
12
|
+
* `assumed` is deliberately mutable: a hypothesis is not permanent. The guard
|
|
13
|
+
* that issued it eventually produces the REAL answer to the same question, and
|
|
14
|
+
* when that answer is what the guard handed out, the hypothesis has become a
|
|
15
|
+
* fact -- so the answers that leaned on it stop depending on it and are
|
|
16
|
+
* reusable everywhere.
|
|
17
|
+
*/
|
|
18
|
+
export interface GuardedAnswer {
|
|
19
|
+
readonly assumed: Set<object>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* A key nothing ever parks and no guard ever opens. An answer carrying it can
|
|
23
|
+
* never apply again -- which is exactly what should happen to one that leaned
|
|
24
|
+
* on a hypothesis the real answer went on to contradict.
|
|
25
|
+
*/
|
|
26
|
+
export declare const REFUTED_HYPOTHESIS: object;
|
|
27
|
+
/**
|
|
28
|
+
* Hold `answer` for every open guard it leaned on, so closing that guard can
|
|
29
|
+
* settle it. Without this a guard-leaning answer was simply discarded, and
|
|
30
|
+
* measurement says that is nearly all of them: in 200,000 three.js proof
|
|
31
|
+
* entries the member-closure memo computed 156,070 answers and KEPT 119 --
|
|
32
|
+
* 155,951 were thrown away for naming an open guard. Every later ask of those
|
|
33
|
+
* same questions then had to prove them again, which is where millions of
|
|
34
|
+
* proof entries over 64 distinct questions come from.
|
|
35
|
+
*/
|
|
36
|
+
export declare const registerGuardedAnswer: (answer: GuardedAnswer, discard?: () => void) => void;
|
|
37
|
+
/**
|
|
38
|
+
* `confirmed` says whether the answers that leaned on this hypothesis are
|
|
39
|
+
* still sound once the real answer is known.
|
|
40
|
+
*
|
|
41
|
+
* Which way that falls depends on the KIND of hypothesis, and the two kinds
|
|
42
|
+
* are opposites. A RE-ENTRY guard is pessimistic: it hands its re-entries
|
|
43
|
+
* "unknown" -- a refusal, a null, an empty set -- so an answer computed under
|
|
44
|
+
* it is conservative. If the real answer turns out to be KNOWN, that does not
|
|
45
|
+
* make the conservative answer wrong; it only makes it weaker than it needed
|
|
46
|
+
* to be, and a weaker sound answer is still sound. Such a guard confirms
|
|
47
|
+
* either way. An OPTIMISTIC park is the reverse: it hands out "closed/true",
|
|
48
|
+
* so an answer leaning on it is only as good as that claim and must be struck
|
|
49
|
+
* when the claim fails.
|
|
50
|
+
*
|
|
51
|
+
* Getting this backwards is expensive and silent. Every guard enrolled here
|
|
52
|
+
* is pessimistic, and every site reported "cannot tell": of 787,705 answers
|
|
53
|
+
* registered in one three.js run, 0 were ever confirmed and 668,256 were struck
|
|
54
|
+
* AND spliced out of their buckets. The memo then held almost nothing, which
|
|
55
|
+
* is why the buckets never reached their cap (`droppedByLimit=0`) while the
|
|
56
|
+
* same questions kept missing and re-proving.
|
|
57
|
+
*/
|
|
58
|
+
/** TEMPORARY INSTRUMENT -- not for landing. Counts how the discharge actually settles. */
|
|
59
|
+
export declare const hypothesisStats: {
|
|
60
|
+
registered: number;
|
|
61
|
+
confirmed: number;
|
|
62
|
+
struck: number;
|
|
63
|
+
discarded: number;
|
|
64
|
+
};
|
|
65
|
+
export declare const exitHypothesisGuard: (key: object, confirmed?: boolean, settled?: boolean) => void;
|
|
66
|
+
export declare const hypothesisGuardIsOpen: (key: object) => boolean;
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The hypotheses a whole-program proof is answering UNDER, and the trail each
|
|
3
|
+
* computation leaves of the ones it leaned on.
|
|
4
|
+
*
|
|
5
|
+
* Two different things park a question in this compiler and both are
|
|
6
|
+
* hypotheses in exactly the same sense:
|
|
7
|
+
*
|
|
8
|
+
* - an OPTIMISTIC park -- `activeMembers`, `activeFamilies`, an open record or
|
|
9
|
+
* value proof -- answers "closed" on the strength of a proof still running,
|
|
10
|
+
* so a POSITIVE answer that leaned on it is reusable only where the same
|
|
11
|
+
* park is in force. `callable-reach.ts` has always recorded these.
|
|
12
|
+
* - a RE-ENTRY guard -- an invocation fact, a record method call, a slot read
|
|
13
|
+
* or a member-implementation walk already on the stack -- answers "unknown"
|
|
14
|
+
* for the same reason, so a REFUSAL that leaned on it is reusable only where
|
|
15
|
+
* that same question is still open. These were recorded nowhere, which is
|
|
16
|
+
* why no memo in the proof could keep a refusal: a refusal might have been
|
|
17
|
+
* false, and nothing said which ones could have been.
|
|
18
|
+
*
|
|
19
|
+
* Both are trails of object keys and one stack carries them, so a memo asks
|
|
20
|
+
* one question of an answer -- "is every key it leaned on still in force" --
|
|
21
|
+
* whichever kind of hypothesis produced it.
|
|
22
|
+
*
|
|
23
|
+
* MODULE level, not per proof: a nested question re-enters through a fresh
|
|
24
|
+
* `indexCallableReach`, and only a shared stack sees across those frames.
|
|
25
|
+
*/
|
|
26
|
+
const trails = [];
|
|
27
|
+
let notes = 0;
|
|
28
|
+
/** Record that the computation now running leaned on `key` being assumed. */
|
|
29
|
+
export const noteHypothesis = (key) => {
|
|
30
|
+
notes++;
|
|
31
|
+
trails[trails.length - 1]?.add(key);
|
|
32
|
+
};
|
|
33
|
+
export const hypothesisNotes = () => notes;
|
|
34
|
+
/** Begin collecting what a computation leans on; the returned set is its trail. */
|
|
35
|
+
export const pushHypothesisTrail = () => {
|
|
36
|
+
const trail = new Set();
|
|
37
|
+
trails.push(trail);
|
|
38
|
+
return trail;
|
|
39
|
+
};
|
|
40
|
+
export const popHypothesisTrail = () => {
|
|
41
|
+
trails.pop();
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Re-entry guards open right now, counted because the same question can be
|
|
45
|
+
* re-entered through two nesting proofs and the outer one must keep it open
|
|
46
|
+
* after the inner one returns.
|
|
47
|
+
*
|
|
48
|
+
* Counted rather than a plain set for a second reason: the guard SETS
|
|
49
|
+
* themselves are proof-local (`activeInvocationFacts` is a fresh `Set` per
|
|
50
|
+
* `indexCallableReach`), so "is this question still being answered" is a
|
|
51
|
+
* question about the STACK, not about one proof's bookkeeping.
|
|
52
|
+
*/
|
|
53
|
+
const openGuards = new Map();
|
|
54
|
+
/**
|
|
55
|
+
* Keys whose guard closed having handed every re-entry exactly the answer the
|
|
56
|
+
* question turned out to have.
|
|
57
|
+
*
|
|
58
|
+
* This is a STRICTLY STRONGER claim than `confirmed` below, and the two must
|
|
59
|
+
* not be conflated. `confirmed` says a conservative answer stays SOUND now that
|
|
60
|
+
* the real answer is known, which is true of every pessimistic guard by
|
|
61
|
+
* construction. That is enough to keep an answer the memo already holds. It is
|
|
62
|
+
* NOT enough to promote a REFUSAL from "true while this question was open" to
|
|
63
|
+
* "true": a refusal computed under a guard that went on to answer something
|
|
64
|
+
* knowable is weaker than the question deserves, and replaying it refuses
|
|
65
|
+
* where a fresh walk would have succeeded -- a program that compiled stops
|
|
66
|
+
* compiling. Certification needs completeness, not only soundness.
|
|
67
|
+
*
|
|
68
|
+
* `settled` is the completeness half: the guard handed out a refusal, and the
|
|
69
|
+
* refusal was the truth. An answer that leaned on it lost nothing by leaning.
|
|
70
|
+
*
|
|
71
|
+
* A guard that reopens on the same key is answering the question again and may
|
|
72
|
+
* answer it differently, so entering clears any settlement from last time; a
|
|
73
|
+
* key is only ever noted while its guard is open, so no trail can carry a
|
|
74
|
+
* settlement that belongs to a previous episode.
|
|
75
|
+
*/
|
|
76
|
+
const settledAsTruth = new WeakSet();
|
|
77
|
+
export const hypothesisSettledAsTruth = (key) => settledAsTruth.has(key);
|
|
78
|
+
export const enterHypothesisGuard = (key) => {
|
|
79
|
+
settledAsTruth.delete(key);
|
|
80
|
+
openGuards.set(key, (openGuards.get(key) ?? 0) + 1);
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* A key nothing ever parks and no guard ever opens. An answer carrying it can
|
|
84
|
+
* never apply again -- which is exactly what should happen to one that leaned
|
|
85
|
+
* on a hypothesis the real answer went on to contradict.
|
|
86
|
+
*/
|
|
87
|
+
export const REFUTED_HYPOTHESIS = Object.freeze({ hypothesis: 'refuted' });
|
|
88
|
+
const guardDependents = new Map();
|
|
89
|
+
/**
|
|
90
|
+
* Hold `answer` for every open guard it leaned on, so closing that guard can
|
|
91
|
+
* settle it. Without this a guard-leaning answer was simply discarded, and
|
|
92
|
+
* measurement says that is nearly all of them: in 200,000 three.js proof
|
|
93
|
+
* entries the member-closure memo computed 156,070 answers and KEPT 119 --
|
|
94
|
+
* 155,951 were thrown away for naming an open guard. Every later ask of those
|
|
95
|
+
* same questions then had to prove them again, which is where millions of
|
|
96
|
+
* proof entries over 64 distinct questions come from.
|
|
97
|
+
*/
|
|
98
|
+
export const registerGuardedAnswer = (answer, discard) => {
|
|
99
|
+
for (const key of answer.assumed) {
|
|
100
|
+
if (!openGuards.has(key))
|
|
101
|
+
continue;
|
|
102
|
+
let dependents = guardDependents.get(key);
|
|
103
|
+
if (!dependents)
|
|
104
|
+
guardDependents.set(key, (dependents = []));
|
|
105
|
+
dependents.push({ answer, discard });
|
|
106
|
+
hypothesisStats.registered++;
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
/**
|
|
110
|
+
* `confirmed` says whether the answers that leaned on this hypothesis are
|
|
111
|
+
* still sound once the real answer is known.
|
|
112
|
+
*
|
|
113
|
+
* Which way that falls depends on the KIND of hypothesis, and the two kinds
|
|
114
|
+
* are opposites. A RE-ENTRY guard is pessimistic: it hands its re-entries
|
|
115
|
+
* "unknown" -- a refusal, a null, an empty set -- so an answer computed under
|
|
116
|
+
* it is conservative. If the real answer turns out to be KNOWN, that does not
|
|
117
|
+
* make the conservative answer wrong; it only makes it weaker than it needed
|
|
118
|
+
* to be, and a weaker sound answer is still sound. Such a guard confirms
|
|
119
|
+
* either way. An OPTIMISTIC park is the reverse: it hands out "closed/true",
|
|
120
|
+
* so an answer leaning on it is only as good as that claim and must be struck
|
|
121
|
+
* when the claim fails.
|
|
122
|
+
*
|
|
123
|
+
* Getting this backwards is expensive and silent. Every guard enrolled here
|
|
124
|
+
* is pessimistic, and every site reported "cannot tell": of 787,705 answers
|
|
125
|
+
* registered in one three.js run, 0 were ever confirmed and 668,256 were struck
|
|
126
|
+
* AND spliced out of their buckets. The memo then held almost nothing, which
|
|
127
|
+
* is why the buckets never reached their cap (`droppedByLimit=0`) while the
|
|
128
|
+
* same questions kept missing and re-proving.
|
|
129
|
+
*/
|
|
130
|
+
/** TEMPORARY INSTRUMENT -- not for landing. Counts how the discharge actually settles. */
|
|
131
|
+
export const hypothesisStats = { registered: 0, confirmed: 0, struck: 0, discarded: 0 };
|
|
132
|
+
export const exitHypothesisGuard = (key, confirmed, settled) => {
|
|
133
|
+
const remaining = (openGuards.get(key) ?? 0) - 1;
|
|
134
|
+
if (remaining > 0) {
|
|
135
|
+
openGuards.set(key, remaining);
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
openGuards.delete(key);
|
|
139
|
+
if (settled === true)
|
|
140
|
+
settledAsTruth.add(key);
|
|
141
|
+
const dependents = guardDependents.get(key);
|
|
142
|
+
if (dependents === undefined)
|
|
143
|
+
return;
|
|
144
|
+
guardDependents.delete(key);
|
|
145
|
+
for (const { answer, discard } of dependents) {
|
|
146
|
+
answer.assumed.delete(key);
|
|
147
|
+
if (confirmed === true) {
|
|
148
|
+
hypothesisStats.confirmed++;
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
hypothesisStats.struck++;
|
|
152
|
+
if (discard !== undefined)
|
|
153
|
+
hypothesisStats.discarded++;
|
|
154
|
+
// The answer rested on something the real answer contradicted. Striking it
|
|
155
|
+
// is not enough: a memo bucket is BOUNDED, and a dead answer sitting in it
|
|
156
|
+
// keeps a live one out. The three.js app filled every bucket to the cap within the
|
|
157
|
+
// first 200,000 proof entries and then refused 148,185 further answers.
|
|
158
|
+
answer.assumed.add(REFUTED_HYPOTHESIS);
|
|
159
|
+
discard?.();
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
export const hypothesisGuardIsOpen = (key) => openGuards.has(key);
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { ValueFlowIndex } from './model.js';
|
|
3
|
+
/** The static key an object-literal entry is published under, or null when it has none. */
|
|
4
|
+
export declare const objectLiteralEntryKeyOf: (name: ts.PropertyName) => string | null;
|
|
5
|
+
export declare const recordAllocationAliasesClosed: (checker: ts.TypeChecker, flow: ValueFlowIndex, root: ts.ObjectLiteralExpression) => boolean;
|
|
6
|
+
/**
|
|
7
|
+
* Whether `this`, in a function this literal was written holding, can only
|
|
8
|
+
* ever be one of the literal's own allocations.
|
|
9
|
+
*
|
|
10
|
+
* A function written in place in a literal is reachable only through the
|
|
11
|
+
* literal's slot. If no alias of the literal hands that slot's function out as
|
|
12
|
+
* a value, and every alias reaches only uses this proof enumerates, then every
|
|
13
|
+
* call of the function is `alias.key( ... )`, and its receiver is the literal.
|
|
14
|
+
* Three's `ColorManagement` is such a record: `convert` reads `this.enabled`,
|
|
15
|
+
* and the checker names the literal's `enabled: true` for it -- a name a second
|
|
16
|
+
* literal with a getter under that key would satisfy just as well, which is why
|
|
17
|
+
* the checker's answer alone is not evidence.
|
|
18
|
+
*
|
|
19
|
+
* The walk is the slot proof's, with three differences. A store into a data
|
|
20
|
+
* slot is admitted: it keeps the slot data and hands the record to no one. A
|
|
21
|
+
* call of a slot whose function reads `this` follows that function's every
|
|
22
|
+
* `this` as one more alias, where the slot proof refused it. And an exported
|
|
23
|
+
* cell is followed into every importer (`inProgramImportReferencesOf`). A read
|
|
24
|
+
* of a `this`-reading function as a value still refuses: that is the function
|
|
25
|
+
* leaving the record.
|
|
26
|
+
*/
|
|
27
|
+
export declare const recordLiteralReceiverClosed: (checker: ts.TypeChecker, flow: ValueFlowIndex, root: ts.ObjectLiteralExpression) => boolean;
|