@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,357 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
/**
|
|
3
|
+
* ONE enumeration of the ways a value reaches a storage cell in JavaScript.
|
|
4
|
+
*
|
|
5
|
+
* Six censuses in `semantics/normalize/` each walked the whole program and
|
|
6
|
+
* each re-derived "who writes to this cell" from scratch -- incompletely, and
|
|
7
|
+
* differently. Every defect fixed across a day of work was one census missing
|
|
8
|
+
* one edge another census already knew: `field-bindings.ts` could not see an
|
|
9
|
+
* INDEX write, `collection-bindings.ts` could not see an ALIAS, and
|
|
10
|
+
* `object-bag-bindings.ts` could not see `Object.assign` until two separate
|
|
11
|
+
* sessions taught it to. Each fix taught exactly one census; the other five
|
|
12
|
+
* stayed blind. That is the whack-a-mole generator, and the cure is not a
|
|
13
|
+
* seventh fix -- it is enumerating the edges ONCE, here, so a census that
|
|
14
|
+
* gains one gains it for every cell kind it owns.
|
|
15
|
+
*
|
|
16
|
+
* This layer states edges, not a cell's final type. Receiver protocol
|
|
17
|
+
* recognition may consult the previous census where the checker has no useful
|
|
18
|
+
* type, so the frontend can rebuild the index between inference rounds.
|
|
19
|
+
* Consumers share the resulting inventory while retaining their domain's
|
|
20
|
+
* evidence policy, joins, and refusal vocabulary.
|
|
21
|
+
*/
|
|
22
|
+
export type FlowEdgeKind =
|
|
23
|
+
/** `const x = expr` / `let x = expr` -- the declaration's own initializer. */
|
|
24
|
+
'declaration-initializer'
|
|
25
|
+
/** `x = expr`, the target a plain identifier. */
|
|
26
|
+
| 'identifier-assignment'
|
|
27
|
+
/** `o.p = expr`, or a named object-literal property publishing its initial value. */
|
|
28
|
+
| 'property-assignment'
|
|
29
|
+
/** `{ __proto__: value }` publishes a prototype, never a data-property cell. */
|
|
30
|
+
| 'prototype-assignment'
|
|
31
|
+
/** `o[k] = expr`. A literal `k` is a named member spelled with brackets and is reported as one. */
|
|
32
|
+
| 'index-assignment'
|
|
33
|
+
/** `x += 1`, `x++`, `--x` -- the slot's own previous contents participate, so this states EXISTENCE and a derived value, never a fresh one. */
|
|
34
|
+
| 'compound-assignment'
|
|
35
|
+
/** `x ||= v`, `x &&= v`, `x ??= v` -- the slot holds either its previous contents or `v`, so `v` is ordinary write evidence beside every other write. */
|
|
36
|
+
| 'logical-assignment'
|
|
37
|
+
/** An argument at a call whose callee this walk could name, reaching that callee's parameter slot. */
|
|
38
|
+
| 'call-argument'
|
|
39
|
+
/** `super(...)` -- the same edge, to the base constructor's parameter slot. */
|
|
40
|
+
| 'super-argument'
|
|
41
|
+
/**
|
|
42
|
+
* An argument at a call whose callee this walk could name, reaching a REST
|
|
43
|
+
* parameter -- so the callee's binding holds it as an ELEMENT of a fresh
|
|
44
|
+
* array, never as the parameter's whole value. Kept apart from
|
|
45
|
+
* `call-argument` because every consumer of that edge reads the parameter as
|
|
46
|
+
* the argument itself, which a rest slot is not.
|
|
47
|
+
*/
|
|
48
|
+
| 'rest-argument'
|
|
49
|
+
/** `return expr` -- reaching the enclosing function's return cell. */
|
|
50
|
+
| 'return'
|
|
51
|
+
/** `a.push(v)` / `a.unshift(v)`. */
|
|
52
|
+
| 'array-append'
|
|
53
|
+
/** `a.fill(v)`. */
|
|
54
|
+
| 'array-fill'
|
|
55
|
+
/** The KEY argument of `m.get/set/has/delete/add(k)`. */
|
|
56
|
+
| 'collection-key'
|
|
57
|
+
/** The VALUE argument of `m.set(k, v)`. */
|
|
58
|
+
| 'collection-value'
|
|
59
|
+
/** `Object.assign(target, source)` -- a bulk write whose key set is the source's, not this layer's to enumerate. */
|
|
60
|
+
| 'object-assign'
|
|
61
|
+
/** `{ ...source }` / `[ ...source ]` reaching a cell -- an unenumerable key set. */
|
|
62
|
+
| 'spread'
|
|
63
|
+
/** A destructured binding element (`const { a } = o`, `const [x] = a`, `({ p: o.q } = v)`). */
|
|
64
|
+
| 'destructuring'
|
|
65
|
+
/** The DEFAULT of a destructured binding element (`const { a = 1 } = o`) -- a second value the slot can hold. */
|
|
66
|
+
| 'destructuring-default'
|
|
67
|
+
/** `function f(x = v)` -- a value the slot holds when a caller omits the argument. */
|
|
68
|
+
| 'default-parameter'
|
|
69
|
+
/** `class C { x = v }`. */
|
|
70
|
+
| 'class-field-initializer'
|
|
71
|
+
/** `catch (e)`. */
|
|
72
|
+
| 'catch-binding'
|
|
73
|
+
/** The binding of `for (const x of a)` / `for (const k in o)`. */
|
|
74
|
+
| 'iteration-binding'
|
|
75
|
+
/** `yield expr` / `yield* expr` reaching the generator's yield cell. */
|
|
76
|
+
| 'yield'
|
|
77
|
+
/** `delete o.p` / `delete o[k]` -- states the slot EXISTS and nothing about what it holds. */
|
|
78
|
+
| 'delete';
|
|
79
|
+
/** Which part of the cell the write lands in. */
|
|
80
|
+
export type FlowSlotKind =
|
|
81
|
+
/** The cell's own value. */
|
|
82
|
+
'whole'
|
|
83
|
+
/** A NAMED member of the cell (`cell.p = v`, or `cell['p'] = v`). */
|
|
84
|
+
| 'member'
|
|
85
|
+
/** An unnamed element/index slot (`cell[k] = v`, `cell.push(v)`). */
|
|
86
|
+
| 'element'
|
|
87
|
+
/** A keyed collection's key slot. */
|
|
88
|
+
| 'collection-key'
|
|
89
|
+
/** A keyed collection's value slot. */
|
|
90
|
+
| 'collection-value'
|
|
91
|
+
/** An unenumerable set of the cell's slots (`Object.assign`, a spread). */
|
|
92
|
+
| 'bulk';
|
|
93
|
+
/** The iterable/key source of an indexed loop binding, captured at the write site. */
|
|
94
|
+
export interface IterationOrigin {
|
|
95
|
+
readonly source: ts.Expression;
|
|
96
|
+
readonly mode: 'values' | 'keys';
|
|
97
|
+
readonly asynchronous: boolean;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* The identity of a storage cell, in all three currencies its consumers hold.
|
|
101
|
+
*
|
|
102
|
+
* The census interface being NODE-keyed only is itself a documented cause of
|
|
103
|
+
* bypasses, and the three keys are genuinely different questions rather than
|
|
104
|
+
* three spellings of one:
|
|
105
|
+
*
|
|
106
|
+
* - `symbol` is `checker.getSymbolAtLocation` AT THE NAMING EXPRESSION. It is
|
|
107
|
+
* what `field-bindings.ts` keys a class field on, and what makes a
|
|
108
|
+
* subclass's `this.aspect = ...` land on the BASE class's slot.
|
|
109
|
+
* - `nameSymbol` is the same call asked at a property access's `.name`. It is
|
|
110
|
+
* NOT the same symbol: measured on the three.js app, 1339 of 22556 property accesses
|
|
111
|
+
* resolve to a different symbol object through the two spellings, and 55
|
|
112
|
+
* resolve through `.name` alone. Both are recorded rather than one being
|
|
113
|
+
* picked, because picking would silently change what an existing consumer
|
|
114
|
+
* sees, and this layer's whole point is that a census's answer may change
|
|
115
|
+
* only by seeing MORE writes, never by seeing different ones.
|
|
116
|
+
* - `declaration` is `nameSymbol`'s (else `symbol`'s) first declaration node.
|
|
117
|
+
* A property symbol object is late-bound per lookup and not stable across
|
|
118
|
+
* references; its declaration node IS, which is why
|
|
119
|
+
* `collection-bindings.ts` and `object-bag-bindings.ts` both track ownership
|
|
120
|
+
* by it.
|
|
121
|
+
*/
|
|
122
|
+
export interface FlowTarget {
|
|
123
|
+
readonly symbol: ts.Symbol | null;
|
|
124
|
+
readonly nameSymbol: ts.Symbol | null;
|
|
125
|
+
readonly declaration: ts.Node | null;
|
|
126
|
+
}
|
|
127
|
+
/** One write, as this layer states it: an edge, a slot, and the expression that is the evidence. */
|
|
128
|
+
export interface ValueWrite {
|
|
129
|
+
readonly edge: FlowEdgeKind;
|
|
130
|
+
readonly slot: FlowSlotKind;
|
|
131
|
+
/** The member name for a `member` slot; `null` for every other slot. */
|
|
132
|
+
readonly member: string | null;
|
|
133
|
+
/**
|
|
134
|
+
* The expression whose type is this write's evidence -- `null` when the edge
|
|
135
|
+
* states only that the slot EXISTS (a `delete`, an unenumerable spread, an
|
|
136
|
+
* iteration binding whose source this layer does not open).
|
|
137
|
+
*/
|
|
138
|
+
readonly value: ts.Expression | null;
|
|
139
|
+
/** Where the write is spelled, for attribution. */
|
|
140
|
+
readonly site: ts.Node;
|
|
141
|
+
/** The cell written. */
|
|
142
|
+
readonly target: FlowTarget;
|
|
143
|
+
/**
|
|
144
|
+
* The expression that NAMED the cell -- `o.p` for `o.p = v`, the declared
|
|
145
|
+
* name for a declaration, the parameter's name for a call argument.
|
|
146
|
+
*
|
|
147
|
+
* Recorded because a consumer asking "is every mention of this cell
|
|
148
|
+
* accounted for" has to be able to tell a mention that WRITES the cell from
|
|
149
|
+
* a mention that hands its value somewhere this layer cannot follow. Without
|
|
150
|
+
* it that consumer must re-derive write-target positions from syntax --
|
|
151
|
+
* which is the private, differently-incomplete re-derivation this whole
|
|
152
|
+
* layer exists to end.
|
|
153
|
+
*/
|
|
154
|
+
readonly naming: ts.Expression | null;
|
|
155
|
+
/** The addressed property operation, retained across receiver-cell projections. */
|
|
156
|
+
readonly propertyAccess: ts.PropertyAccessExpression | ts.ElementAccessExpression | null;
|
|
157
|
+
/** Present only for a simple `for (... of/in ...)` binding; `value` remains null. */
|
|
158
|
+
readonly iterationOrigin?: IterationOrigin;
|
|
159
|
+
}
|
|
160
|
+
/** A lexical receiver reference. `super` performs lookup from a home object,
|
|
161
|
+
* but its receiver is still the current `this`; keeping both spellings in the
|
|
162
|
+
* same inventory prevents receiver-sensitive consumers from losing that edge.
|
|
163
|
+
*/
|
|
164
|
+
export type ReceiverReference = ts.ThisExpression | ts.SuperExpression;
|
|
165
|
+
/** One `.call`/`.apply` wrapper after resolving its executable frame.
|
|
166
|
+
* `receiver` is the wrapper's `thisArg` expression (the explicit `undefined`
|
|
167
|
+
* expression stays an expression); `null` means the wrapper omitted that
|
|
168
|
+
* operand. `args` contains only ordinary operands reaching the target.
|
|
169
|
+
*/
|
|
170
|
+
export interface ExplicitThisCallFrame {
|
|
171
|
+
readonly callee: ts.Expression;
|
|
172
|
+
readonly receiver: ts.Expression | null;
|
|
173
|
+
readonly args: readonly ts.Expression[];
|
|
174
|
+
}
|
|
175
|
+
/** One normalized set of runtime operands for an invocation. */
|
|
176
|
+
export type FlowInvocationDispatch = {
|
|
177
|
+
readonly kind: 'direct';
|
|
178
|
+
} | {
|
|
179
|
+
readonly kind: 'member';
|
|
180
|
+
readonly lookup: ts.Expression;
|
|
181
|
+
readonly key: string | null;
|
|
182
|
+
} | {
|
|
183
|
+
readonly kind: 'lexical-super';
|
|
184
|
+
readonly home: ts.ClassDeclaration | ts.ClassExpression | ts.ObjectLiteralExpression | null;
|
|
185
|
+
readonly static: boolean;
|
|
186
|
+
readonly key: string | null;
|
|
187
|
+
} | {
|
|
188
|
+
readonly kind: 'super-constructor';
|
|
189
|
+
readonly home: ts.ClassDeclaration | ts.ClassExpression | null;
|
|
190
|
+
};
|
|
191
|
+
export interface FlowInvocationOperands {
|
|
192
|
+
/** `super()` forwards to a base constructor; `construct` creates a fresh receiver. */
|
|
193
|
+
readonly kind: 'call' | 'construct' | 'super';
|
|
194
|
+
/** Complete lookup semantics; unsupported lexical-super details remain explicit for refusal. */
|
|
195
|
+
readonly dispatch: FlowInvocationDispatch;
|
|
196
|
+
/** True only when the source invocation was authenticated as Function.call/apply. */
|
|
197
|
+
readonly explicitThis: boolean;
|
|
198
|
+
/** The executable callee after wrappers that erase at runtime are removed. */
|
|
199
|
+
readonly callee: ts.Expression;
|
|
200
|
+
/** Ordinary receiver or explicit thisArg; lexical `super` remains the receiver marker until frame projection. */
|
|
201
|
+
readonly receiver: ts.Expression | null;
|
|
202
|
+
/** Ordinary arguments reaching the invocation target, never including thisArg. */
|
|
203
|
+
readonly args: readonly ts.Expression[];
|
|
204
|
+
}
|
|
205
|
+
/** Syntax and checker attribution are recorded once; census-dependent attribution remains a solver operation. */
|
|
206
|
+
export interface FlowCallSite {
|
|
207
|
+
/** All discovered source bodies. This is positive reachability evidence, not call-target closure. */
|
|
208
|
+
readonly targets: readonly ts.SignatureDeclaration[];
|
|
209
|
+
readonly call: ts.CallExpression | ts.NewExpression;
|
|
210
|
+
readonly checkerDeclaration: ts.SignatureDeclaration | ts.JSDocSignature | null;
|
|
211
|
+
/** Attribution from the preceding inference round; argument edges cite this same declaration. */
|
|
212
|
+
readonly inferredDeclaration?: ts.SignatureDeclaration | ts.JSDocSignature;
|
|
213
|
+
readonly explicitThis: ExplicitThisCallFrame | null;
|
|
214
|
+
/** The actual source invocation operands. Synthetic callback frames are represented separately by their proof. */
|
|
215
|
+
readonly operands: FlowInvocationOperands;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* The whole-program value-flow index: for any storage cell, every write that
|
|
219
|
+
* reaches it, tagged by edge kind -- and the reverse, every write elsewhere
|
|
220
|
+
* whose VALUE names this cell.
|
|
221
|
+
*/
|
|
222
|
+
/**
|
|
223
|
+
* The declaration a class-typed instance is nominally an instance of, when that
|
|
224
|
+
* declaration is source-authored rather than ambient.
|
|
225
|
+
*
|
|
226
|
+
* Six modules spelled this out identically and each re-derived it the same way
|
|
227
|
+
* -- `type.getSymbol()?.valueDeclaration`, gated on the two class kinds and on
|
|
228
|
+
* `!isDeclarationFile`. It is one concept with one answer, and the duplication
|
|
229
|
+
* is the reason widening it (three's pre-ES6 `function F() { this.x = ... }`
|
|
230
|
+
* renderer idiom is not a `ClassDeclaration`) reads as a six-file change
|
|
231
|
+
* instead of a one-line one.
|
|
232
|
+
*/
|
|
233
|
+
export type SourceClass = ts.ClassDeclaration | ts.ClassExpression | ts.FunctionDeclaration | ts.FunctionExpression;
|
|
234
|
+
/**
|
|
235
|
+
* A source class spelled as a class, which is where its heritage and its member
|
|
236
|
+
* list are readable as syntax.
|
|
237
|
+
*
|
|
238
|
+
* A constructor function has both facts, but neither is a `ts.ClassElement`:
|
|
239
|
+
* its members are the top-level `this.<key> = <value>` writes in its body, and
|
|
240
|
+
* its heritage is a `F.prototype = Object.create( B.prototype )` or a
|
|
241
|
+
* `B.call( this, ... )` that TypeScript does not model as heritage at all --
|
|
242
|
+
* `getBaseTypes` on such a type returns `[]` whether or not the program chains
|
|
243
|
+
* one. That empty answer is the one place this widening could UNDER-count a
|
|
244
|
+
* family silently rather than refuse, so every consumer that walks heritage or
|
|
245
|
+
* members must reach it through this predicate and state what it does with the
|
|
246
|
+
* other case.
|
|
247
|
+
*/
|
|
248
|
+
export declare const isClassSpelledSourceClass: (node: SourceClass) => node is ts.ClassDeclaration | ts.ClassExpression;
|
|
249
|
+
/**
|
|
250
|
+
* The class or interface a heritage walk reached, through the instantiation
|
|
251
|
+
* `checker.getBaseTypes` puts in the way.
|
|
252
|
+
*
|
|
253
|
+
* `extends Base` where `Base` declares even ONE type parameter hands back a
|
|
254
|
+
* `TypeReference` -- a fresh wrapper carrying `ObjectFlags.Reference` and not
|
|
255
|
+
* `Class`/`Interface` -- whether or not type arguments are written, whether the
|
|
256
|
+
* parameter is defaulted, and whether anything reads it. `isClassOrInterface()`
|
|
257
|
+
* tests only the object's own flags, so it answers `false` for every generic
|
|
258
|
+
* base and `true` for every non-generic one, and a walk that asks it directly
|
|
259
|
+
* silently decides a class has an unknown ancestry the moment its base takes a
|
|
260
|
+
* type parameter. The declared class is one hop away, on `.target`.
|
|
261
|
+
*
|
|
262
|
+
* Ancestry is an identity question, so it is asked of the declaration the
|
|
263
|
+
* reference points at, never of the instantiation standing in front of it. Any
|
|
264
|
+
* walk over `getBaseTypes` must come through here.
|
|
265
|
+
*/
|
|
266
|
+
export declare const heritageClassOrInterfaceOf: (type: ts.Type) => ts.InterfaceType | null;
|
|
267
|
+
export declare const isConstructorFunction: (node: ts.Node) => node is ts.FunctionDeclaration | ts.FunctionExpression;
|
|
268
|
+
export interface ValueFlowIndex {
|
|
269
|
+
/** The build's strict-mode input, shared by every inference and production consumer. */
|
|
270
|
+
readonly buildIsStrict: boolean;
|
|
271
|
+
readonly calls: readonly FlowCallSite[];
|
|
272
|
+
/** `calls` keyed by its call node. Three walks scanned the list linearly per
|
|
273
|
+
* (call, body) pair to answer this, which is quadratic in a program's call
|
|
274
|
+
* count and was invisible until the single graph started asking per query. */
|
|
275
|
+
readonly callSiteOf: (call: ts.CallExpression | ts.NewExpression) => FlowCallSite | undefined;
|
|
276
|
+
/** `allWrites` keyed by `site`. Asked per reference inside the closed-use
|
|
277
|
+
* walk, where a linear scan of every write in the program is the shape that
|
|
278
|
+
* turns a proof into minutes. */
|
|
279
|
+
readonly writesAtSite: (site: ts.Node) => readonly ValueWrite[];
|
|
280
|
+
/** Reachable runtime property reads and writes from the same source walk. */
|
|
281
|
+
readonly propertyAccesses: readonly (ts.PropertyAccessExpression | ts.ElementAccessExpression)[];
|
|
282
|
+
/**
|
|
283
|
+
* Reachable binding elements, from the same walk.
|
|
284
|
+
*
|
|
285
|
+
* A binding element READS a slot of the object being taken apart, exactly as
|
|
286
|
+
* a property access does, and a consumer enumerating "everything that can
|
|
287
|
+
* read this key" has to see both. `propertyAccesses` alone made
|
|
288
|
+
* `const { app } = p` invisible to that enumeration, so a value reached only
|
|
289
|
+
* by destructuring had a closure proof with a hole in it -- the reason the
|
|
290
|
+
* two spellings of one read must be inventoried together rather than by
|
|
291
|
+
* whoever remembers to look for patterns.
|
|
292
|
+
*/
|
|
293
|
+
readonly bindingPatternReads: readonly ts.BindingElement[];
|
|
294
|
+
/** Literal Array allocations in the same reachable discovery walk, including discarded and direct-call values. */
|
|
295
|
+
readonly arrayLiterals: readonly ts.ArrayLiteralExpression[];
|
|
296
|
+
/** Reachable source classes, including classes with no visible construction. */
|
|
297
|
+
readonly classDeclarations: readonly SourceClass[];
|
|
298
|
+
/**
|
|
299
|
+
* Every member name declared by a reachable `get`/`set` accessor -- on a
|
|
300
|
+
* class, or in an object literal.
|
|
301
|
+
*
|
|
302
|
+
* A consumer reasoning about what a member SLOT can hold has to be able to
|
|
303
|
+
* tell a stored slot from an accessor, because an accessor's value is
|
|
304
|
+
* whatever its body returns and NO write in this index records it. Collected
|
|
305
|
+
* in the same reachable walk as `classDeclarations` so no consumer has to
|
|
306
|
+
* re-traverse for it, and so an object-literal getter -- which a
|
|
307
|
+
* class-declaration scan would miss entirely -- is seen.
|
|
308
|
+
*/
|
|
309
|
+
readonly accessorNames: ReadonlySet<string>;
|
|
310
|
+
/**
|
|
311
|
+
* Whether any reachable accessor's name is COMPUTED, so `accessorNames` is
|
|
312
|
+
* incomplete and a consumer asking about member slots must refuse outright.
|
|
313
|
+
*/
|
|
314
|
+
readonly hasComputedAccessorName: boolean;
|
|
315
|
+
/** Lexical receiver mentions (`this` and `super`) keyed by their actual non-arrow callable or class-field owner. */
|
|
316
|
+
readonly receiverReferencesToDeclaration: (declaration: ts.Node) => readonly ReceiverReference[];
|
|
317
|
+
/** The exact lexical owner recorded for an indexed `this` or `super` token. */
|
|
318
|
+
readonly receiverOwnerOf: (reference: ts.Node) => ts.Node | null;
|
|
319
|
+
/** Whether this index traversed the executable body of this callable declaration. */
|
|
320
|
+
readonly callableBodyIsIndexed: (declaration: ts.Node) => boolean;
|
|
321
|
+
/** Exact member-name references, including private names; used for callable escape and narrowing evidence. */
|
|
322
|
+
readonly memberReferencesToSymbol: (symbol: ts.Symbol) => readonly ts.MemberName[];
|
|
323
|
+
/** The cell an expression names, or `null` when it names none this layer can resolve. */
|
|
324
|
+
readonly targetOf: (expression: ts.Expression) => FlowTarget | null;
|
|
325
|
+
/** Every write whose target resolved to this symbol, at the naming expression (`FlowTarget.symbol`). */
|
|
326
|
+
readonly writesToSymbol: (symbol: ts.Symbol) => readonly ValueWrite[];
|
|
327
|
+
/** Every write whose target resolved to this declaration node (`FlowTarget.declaration`). */
|
|
328
|
+
readonly writesToDeclaration: (declaration: ts.Node) => readonly ValueWrite[];
|
|
329
|
+
/** Every write elsewhere whose VALUE expression names this cell -- where this cell's value flows TO. */
|
|
330
|
+
readonly flowsFromDeclaration: (declaration: ts.Node) => readonly ValueWrite[];
|
|
331
|
+
/** Every write elsewhere whose VALUE expression names this symbol. */
|
|
332
|
+
readonly flowsFromSymbol: (symbol: ts.Symbol) => readonly ValueWrite[];
|
|
333
|
+
/**
|
|
334
|
+
* Every expression in the program that NAMES this cell, in any position --
|
|
335
|
+
* a read, a write target, a callee, a declaration's own name.
|
|
336
|
+
*
|
|
337
|
+
* The completeness question a value-flow consumer actually has is negative:
|
|
338
|
+
* "is there a mention of this cell I cannot explain?" Answering it needs the
|
|
339
|
+
* mentions, not the writes, and every census that has ever asked it built a
|
|
340
|
+
* private identifier index to do so (`parameter-bindings.ts`'s
|
|
341
|
+
* `referencesBySymbol`) -- keyed on identifiers only, so a member reached as
|
|
342
|
+
* `o.p` was invisible to it. Recorded here under ALL THREE of a
|
|
343
|
+
* `FlowTarget`'s keys (see `FlowTarget`), deliberately over-approximating:
|
|
344
|
+
* an extra mention can only make a consumer refuse, never make it answer.
|
|
345
|
+
*/
|
|
346
|
+
readonly referencesToSymbol: (symbol: ts.Symbol) => readonly ts.Expression[];
|
|
347
|
+
/** Every expression naming the cell whose stable key is this declaration node. */
|
|
348
|
+
readonly referencesToDeclaration: (declaration: ts.Node) => readonly ts.Expression[];
|
|
349
|
+
/** Every write this index holds, in source order -- for a consumer that must consider the whole edge set rather than one cell's. */
|
|
350
|
+
readonly allWrites: readonly ValueWrite[];
|
|
351
|
+
/** How many writes of each edge kind this index holds, for measurement. */
|
|
352
|
+
readonly edgeCounts: ReadonlyMap<FlowEdgeKind, number>;
|
|
353
|
+
/** Total writes indexed. */
|
|
354
|
+
readonly writeCount: number;
|
|
355
|
+
}
|
|
356
|
+
/** An index over no program, for callers that state none. */
|
|
357
|
+
export declare const emptyValueFlowIndex: ValueFlowIndex;
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
/**
|
|
3
|
+
* A source class spelled as a class, which is where its heritage and its member
|
|
4
|
+
* list are readable as syntax.
|
|
5
|
+
*
|
|
6
|
+
* A constructor function has both facts, but neither is a `ts.ClassElement`:
|
|
7
|
+
* its members are the top-level `this.<key> = <value>` writes in its body, and
|
|
8
|
+
* its heritage is a `F.prototype = Object.create( B.prototype )` or a
|
|
9
|
+
* `B.call( this, ... )` that TypeScript does not model as heritage at all --
|
|
10
|
+
* `getBaseTypes` on such a type returns `[]` whether or not the program chains
|
|
11
|
+
* one. That empty answer is the one place this widening could UNDER-count a
|
|
12
|
+
* family silently rather than refuse, so every consumer that walks heritage or
|
|
13
|
+
* members must reach it through this predicate and state what it does with the
|
|
14
|
+
* other case.
|
|
15
|
+
*/
|
|
16
|
+
export const isClassSpelledSourceClass = (node) => ts.isClassDeclaration(node) || ts.isClassExpression(node);
|
|
17
|
+
/**
|
|
18
|
+
* The class or interface a heritage walk reached, through the instantiation
|
|
19
|
+
* `checker.getBaseTypes` puts in the way.
|
|
20
|
+
*
|
|
21
|
+
* `extends Base` where `Base` declares even ONE type parameter hands back a
|
|
22
|
+
* `TypeReference` -- a fresh wrapper carrying `ObjectFlags.Reference` and not
|
|
23
|
+
* `Class`/`Interface` -- whether or not type arguments are written, whether the
|
|
24
|
+
* parameter is defaulted, and whether anything reads it. `isClassOrInterface()`
|
|
25
|
+
* tests only the object's own flags, so it answers `false` for every generic
|
|
26
|
+
* base and `true` for every non-generic one, and a walk that asks it directly
|
|
27
|
+
* silently decides a class has an unknown ancestry the moment its base takes a
|
|
28
|
+
* type parameter. The declared class is one hop away, on `.target`.
|
|
29
|
+
*
|
|
30
|
+
* Ancestry is an identity question, so it is asked of the declaration the
|
|
31
|
+
* reference points at, never of the instantiation standing in front of it. Any
|
|
32
|
+
* walk over `getBaseTypes` must come through here.
|
|
33
|
+
*/
|
|
34
|
+
export const heritageClassOrInterfaceOf = (type) => {
|
|
35
|
+
if (type.isClassOrInterface())
|
|
36
|
+
return type;
|
|
37
|
+
const target = type.target;
|
|
38
|
+
return target !== undefined && target !== type && target.isClassOrInterface() ? target : null;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Whether a plain function is a CLASS: the pre-ES6 `function F() { this.x = ... }`
|
|
42
|
+
* idiom three's whole renderer is written in.
|
|
43
|
+
*
|
|
44
|
+
* TypeScript already models these as classes -- `getDeclaredTypeOfSymbol` on
|
|
45
|
+
* such a function returns a type carrying `ObjectFlags.Class`, answering
|
|
46
|
+
* `isClassOrInterface()`, with exactly the members those `this.x =` writes
|
|
47
|
+
* produce. The compiler's own gates were the only thing that did not, and they
|
|
48
|
+
* were syntactic: `ts.isClassDeclaration(d) || ts.isClassExpression(d)`,
|
|
49
|
+
* spelled once per consumer.
|
|
50
|
+
*
|
|
51
|
+
* Three admission conditions, each of which is the reason a whole class of
|
|
52
|
+
* silent wrong answers cannot happen rather than a convenience:
|
|
53
|
+
*
|
|
54
|
+
* - at least one top-level `this.<name> = ...`. This is the same evidence
|
|
55
|
+
* TypeScript's own JS inference keys on, so the checker's answer and this
|
|
56
|
+
* one cannot disagree about which functions are classes.
|
|
57
|
+
* - no top-level `return <expression>` OTHER THAN `return this`. `new F()`
|
|
58
|
+
* yields the returned object instead of `this` when a constructor returns
|
|
59
|
+
* one, so a revealing-module factory (`function WebGLState() { ... return {
|
|
60
|
+
* setMask, ... } }` -- three has as many of those as it has of these) is a
|
|
61
|
+
* DIFFERENT mechanism whose instances are object literals, and admitting it
|
|
62
|
+
* here would attribute its instances to a family they are not in. A bare
|
|
63
|
+
* `return;` is the ordinary early exit and is not a value.
|
|
64
|
+
*
|
|
65
|
+
* `return this` is the one expression return that is not that hazard: what
|
|
66
|
+
* `new F()` yields is `this` either way, which is the invariant every
|
|
67
|
+
* consumer actually depends on (`classConstructorKeepsInstanceUncached`
|
|
68
|
+
* spells it "construction always yields `this`"). Refusing it tested the
|
|
69
|
+
* PROXY -- "does a return statement carry an expression" -- instead of the
|
|
70
|
+
* property, and three's `WebGLProgram` ends exactly that way, which starved
|
|
71
|
+
* `familyRootsOf` for every receiver typed `WebGLProgram` and left
|
|
72
|
+
* `program.usedTimes` unattributable in `WebGLPrograms.acquireProgram`.
|
|
73
|
+
* Widen this ONLY to `this`: dropping the check, or admitting any return,
|
|
74
|
+
* readmits the `WebGLState` factory above and turns a refusal into a wrong
|
|
75
|
+
* answer.
|
|
76
|
+
* - no prototype-chain heritage. `F.prototype = Object.create( B.prototype )`
|
|
77
|
+
* and `B.call( this, ... )` are how this idiom spells `extends`, and
|
|
78
|
+
* TypeScript does NOT model either as heritage: `getBaseTypes` answers `[]`
|
|
79
|
+
* whether or not the program chains one. Every consumer reads that empty
|
|
80
|
+
* answer as "no base, the family ends here", so a chained constructor
|
|
81
|
+
* function would make the family silently SMALLER than it is -- a wrong
|
|
82
|
+
* answer, not a refusal. Refusing the candidate outright is what keeps the
|
|
83
|
+
* empty answer honest. (Measured: none of three's constructor functions
|
|
84
|
+
* chains, so this guard costs nothing and buys the soundness argument.)
|
|
85
|
+
*/
|
|
86
|
+
/**
|
|
87
|
+
* ⚠ Memoized because it is asked tens of thousands of times per node, not as a
|
|
88
|
+
* micro-optimization. Ten call sites across the hottest modules ask it, several
|
|
89
|
+
* from INSIDE the coinductive escape proof, which re-enters per (path,
|
|
90
|
+
* reference) -- and `spellsPrototypeHeritage` walks the whole function body on
|
|
91
|
+
* every call. Measured unmemoized at 154 s of a 746 s three.js compile: 20.7%,
|
|
92
|
+
* the single hottest frame in the program. The answer is a pure, deterministic
|
|
93
|
+
* classification of an immutable AST node, so caching it by node identity
|
|
94
|
+
* changes nothing but the repeated work.
|
|
95
|
+
*/
|
|
96
|
+
const constructorFunctions = new WeakMap();
|
|
97
|
+
export const isConstructorFunction = (node) => {
|
|
98
|
+
const known = constructorFunctions.get(node);
|
|
99
|
+
if (known !== undefined)
|
|
100
|
+
return known;
|
|
101
|
+
const answer = computeIsConstructorFunction(node);
|
|
102
|
+
constructorFunctions.set(node, answer);
|
|
103
|
+
return answer;
|
|
104
|
+
};
|
|
105
|
+
const computeIsConstructorFunction = (node) => {
|
|
106
|
+
if (!ts.isFunctionDeclaration(node) && !ts.isFunctionExpression(node))
|
|
107
|
+
return false;
|
|
108
|
+
const body = node.body;
|
|
109
|
+
if (!body)
|
|
110
|
+
return false;
|
|
111
|
+
let writesThis = false;
|
|
112
|
+
for (const statement of body.statements) {
|
|
113
|
+
if (ts.isReturnStatement(statement) && statement.expression !== undefined && statement.expression.kind !== ts.SyntaxKind.ThisKeyword)
|
|
114
|
+
return false;
|
|
115
|
+
if (!ts.isExpressionStatement(statement))
|
|
116
|
+
continue;
|
|
117
|
+
const expression = statement.expression;
|
|
118
|
+
if (ts.isBinaryExpression(expression) &&
|
|
119
|
+
expression.operatorToken.kind === ts.SyntaxKind.EqualsToken &&
|
|
120
|
+
ts.isPropertyAccessExpression(expression.left) &&
|
|
121
|
+
expression.left.expression.kind === ts.SyntaxKind.ThisKeyword)
|
|
122
|
+
writesThis = true;
|
|
123
|
+
}
|
|
124
|
+
return writesThis && !spellsPrototypeHeritage(body);
|
|
125
|
+
};
|
|
126
|
+
/** `F.prototype = ...` or `B.call( this, ... )` / `B.apply( this, ... )` anywhere in the body. */
|
|
127
|
+
const spellsPrototypeHeritage = (body) => {
|
|
128
|
+
let found = false;
|
|
129
|
+
const visit = (node) => {
|
|
130
|
+
if (found)
|
|
131
|
+
return;
|
|
132
|
+
const parent = node.parent;
|
|
133
|
+
if (ts.isPropertyAccessExpression(node) &&
|
|
134
|
+
node.name.text === 'prototype' &&
|
|
135
|
+
ts.isBinaryExpression(parent) &&
|
|
136
|
+
parent.operatorToken.kind === ts.SyntaxKind.EqualsToken &&
|
|
137
|
+
parent.left === node)
|
|
138
|
+
found = true;
|
|
139
|
+
if (ts.isCallExpression(node) &&
|
|
140
|
+
ts.isPropertyAccessExpression(node.expression) &&
|
|
141
|
+
(node.expression.name.text === 'call' || node.expression.name.text === 'apply') &&
|
|
142
|
+
node.arguments[0]?.kind === ts.SyntaxKind.ThisKeyword)
|
|
143
|
+
found = true;
|
|
144
|
+
ts.forEachChild(node, visit);
|
|
145
|
+
};
|
|
146
|
+
visit(body);
|
|
147
|
+
return found;
|
|
148
|
+
};
|
|
149
|
+
const NO_WRITES = [];
|
|
150
|
+
const NO_REFERENCES = [];
|
|
151
|
+
/** An index over no program, for callers that state none. */
|
|
152
|
+
export const emptyValueFlowIndex = {
|
|
153
|
+
buildIsStrict: false,
|
|
154
|
+
receiverReferencesToDeclaration: () => [],
|
|
155
|
+
receiverOwnerOf: () => null,
|
|
156
|
+
callableBodyIsIndexed: () => false,
|
|
157
|
+
calls: [],
|
|
158
|
+
callSiteOf: () => undefined,
|
|
159
|
+
writesAtSite: () => NO_WRITES,
|
|
160
|
+
propertyAccesses: [],
|
|
161
|
+
bindingPatternReads: [],
|
|
162
|
+
classDeclarations: [],
|
|
163
|
+
arrayLiterals: [],
|
|
164
|
+
accessorNames: new Set(),
|
|
165
|
+
hasComputedAccessorName: false,
|
|
166
|
+
memberReferencesToSymbol: () => [],
|
|
167
|
+
targetOf: () => null,
|
|
168
|
+
writesToSymbol: () => NO_WRITES,
|
|
169
|
+
writesToDeclaration: () => NO_WRITES,
|
|
170
|
+
flowsFromDeclaration: () => NO_WRITES,
|
|
171
|
+
flowsFromSymbol: () => NO_WRITES,
|
|
172
|
+
referencesToSymbol: () => NO_REFERENCES,
|
|
173
|
+
referencesToDeclaration: () => NO_REFERENCES,
|
|
174
|
+
allWrites: NO_WRITES,
|
|
175
|
+
edgeCounts: new Map(),
|
|
176
|
+
writeCount: 0
|
|
177
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { ValueFlowIndex } from './model.js';
|
|
3
|
+
import type { PrototypeKeyQuery } from '../host-mutation-keys.js';
|
|
4
|
+
export interface NativeCollectionProtocolPlan {
|
|
5
|
+
readonly intrinsic: 'Array' | 'Map' | 'WeakMap';
|
|
6
|
+
readonly location: ts.Node;
|
|
7
|
+
/** Final sealed census must discharge this plan; finite roots are not a global proof. */
|
|
8
|
+
readonly deferred: boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Every key of the intrinsic's prototype `terminalUse` can make the
|
|
11
|
+
* compiled program depend on: the methods it admits, the iterator
|
|
12
|
+
* protocol behind `for...of`/spread, `constructor` for species creation,
|
|
13
|
+
* and -- for arrays -- every index, since a hole read falls through to the
|
|
14
|
+
* prototype. The deferred obligation is `requirePrototypeKeys(intrinsic,
|
|
15
|
+
* prototypeKeys, location)`; the whole-prototype `require` also discharges
|
|
16
|
+
* it, only less precisely.
|
|
17
|
+
*/
|
|
18
|
+
readonly prototypeKeys: PrototypeKeyQuery;
|
|
19
|
+
readonly roots: readonly ts.Expression[];
|
|
20
|
+
/** null delegates aliases/publications to the shared value-closure engine. */
|
|
21
|
+
readonly terminalUse: (reference: ts.Expression) => boolean | null;
|
|
22
|
+
}
|
|
23
|
+
export declare const nativeCollectionProtocolPlanOf: (checker: ts.TypeChecker, flow: ValueFlowIndex, publication: ts.Node, family: "Map" | "WeakMap", constructions: ReadonlySet<ts.NewExpression>) => NativeCollectionProtocolPlan | null;
|
|
24
|
+
export declare const nativeArrayProtocolPlanOf: (checker: ts.TypeChecker, flow: ValueFlowIndex, array: ts.Expression) => NativeCollectionProtocolPlan | null;
|