@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,13 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
/**
|
|
3
|
+
* Shape half of the ordinary instanceof protocol proof. The caller must also
|
|
4
|
+
* prove the constructor family's references closed: definitions cannot show
|
|
5
|
+
* later defineProperty/setPrototypeOf calls or constructor escapes.
|
|
6
|
+
*
|
|
7
|
+
* Every source class initially inherits the realm's Function.prototype hook.
|
|
8
|
+
* That intrinsic own property is nonwritable and nonconfigurable. Replacing a
|
|
9
|
+
* global Function binding, or changing Function.prototype's parent, cannot
|
|
10
|
+
* change it. Source static computed members can shadow it, so admit only keys
|
|
11
|
+
* proven to be strings/numbers; unknown and symbol keys remain conservative.
|
|
12
|
+
*/
|
|
13
|
+
export declare const sourceClassHasDefaultInstanceOfShape: (checker: ts.TypeChecker, instance: ts.InterfaceType) => boolean;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { heritageClassOrInterfaceOf } from './model.js';
|
|
3
|
+
/**
|
|
4
|
+
* Shape half of the ordinary instanceof protocol proof. The caller must also
|
|
5
|
+
* prove the constructor family's references closed: definitions cannot show
|
|
6
|
+
* later defineProperty/setPrototypeOf calls or constructor escapes.
|
|
7
|
+
*
|
|
8
|
+
* Every source class initially inherits the realm's Function.prototype hook.
|
|
9
|
+
* That intrinsic own property is nonwritable and nonconfigurable. Replacing a
|
|
10
|
+
* global Function binding, or changing Function.prototype's parent, cannot
|
|
11
|
+
* change it. Source static computed members can shadow it, so admit only keys
|
|
12
|
+
* proven to be strings/numbers; unknown and symbol keys remain conservative.
|
|
13
|
+
*/
|
|
14
|
+
export const sourceClassHasDefaultInstanceOfShape = (checker, instance) => {
|
|
15
|
+
const seen = new Set();
|
|
16
|
+
const nonSymbolKey = (type) => type.isUnion() ? type.types.every(nonSymbolKey) : (type.flags & (ts.TypeFlags.StringLike | ts.TypeFlags.NumberLike)) !== 0;
|
|
17
|
+
const visit = (type) => {
|
|
18
|
+
if (seen.has(type))
|
|
19
|
+
return false;
|
|
20
|
+
seen.add(type);
|
|
21
|
+
const owner = type.getSymbol()?.valueDeclaration;
|
|
22
|
+
if (!owner || (!ts.isClassDeclaration(owner) && !ts.isClassExpression(owner)) || owner.getSourceFile().isDeclarationFile)
|
|
23
|
+
return false;
|
|
24
|
+
for (const member of owner.members) {
|
|
25
|
+
if ((ts.getCombinedModifierFlags(member) & ts.ModifierFlags.Static) === 0 || !member.name || !ts.isComputedPropertyName(member.name))
|
|
26
|
+
continue;
|
|
27
|
+
if (!nonSymbolKey(checker.getTypeAtLocation(member.name.expression)))
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
const bases = checker.getBaseTypes(type) ?? [];
|
|
31
|
+
return bases.every((base) => {
|
|
32
|
+
const declared = heritageClassOrInterfaceOf(base);
|
|
33
|
+
return declared !== null && visit(declared);
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
return visit(instance);
|
|
37
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { ValueFlowIndex } from './model.js';
|
|
3
|
+
/** A constructor's data field is a separate value, not a publication of the
|
|
4
|
+
* constructor. The caller still checks every constructor reference, which
|
|
5
|
+
* rejects descriptor/prototype mutation and ordinary constructor aliases.
|
|
6
|
+
* Static `this` captures and callable values need receiver-flow evidence and
|
|
7
|
+
* cannot use this data-only path.
|
|
8
|
+
*
|
|
9
|
+
* Data-ness is judged by the values actually written, never by the declared
|
|
10
|
+
* type. Because the caller has explained every mention of the constructor,
|
|
11
|
+
* no alias can store into the static, so its named writes are all it holds.
|
|
12
|
+
* A declared type only states what a write MAY store: three's
|
|
13
|
+
* `@type {?Image} Texture.DEFAULT_IMAGE = null` names a constructor type that
|
|
14
|
+
* no write realises.
|
|
15
|
+
*/
|
|
16
|
+
export declare const sourceClassStaticDataUseOf: (checker: ts.TypeChecker, flow: ValueFlowIndex, reference: ts.Expression) => boolean;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
/** A value no call or construction can invoke. `object` is refused with
|
|
3
|
+
* `any`: it admits every function, so it cannot vouch that the value is data. */
|
|
4
|
+
const dataValue = (type) => type.isUnion()
|
|
5
|
+
? type.types.every(dataValue)
|
|
6
|
+
: (type.flags &
|
|
7
|
+
(ts.TypeFlags.Any | ts.TypeFlags.Unknown | ts.TypeFlags.TypeParameter | ts.TypeFlags.Never | ts.TypeFlags.NonPrimitive)) ===
|
|
8
|
+
0 &&
|
|
9
|
+
type.getCallSignatures().length === 0 &&
|
|
10
|
+
type.getConstructSignatures().length === 0;
|
|
11
|
+
/** A constructor's data field is a separate value, not a publication of the
|
|
12
|
+
* constructor. The caller still checks every constructor reference, which
|
|
13
|
+
* rejects descriptor/prototype mutation and ordinary constructor aliases.
|
|
14
|
+
* Static `this` captures and callable values need receiver-flow evidence and
|
|
15
|
+
* cannot use this data-only path.
|
|
16
|
+
*
|
|
17
|
+
* Data-ness is judged by the values actually written, never by the declared
|
|
18
|
+
* type. Because the caller has explained every mention of the constructor,
|
|
19
|
+
* no alias can store into the static, so its named writes are all it holds.
|
|
20
|
+
* A declared type only states what a write MAY store: three's
|
|
21
|
+
* `@type {?Image} Texture.DEFAULT_IMAGE = null` names a constructor type that
|
|
22
|
+
* no write realises.
|
|
23
|
+
*/
|
|
24
|
+
export const sourceClassStaticDataUseOf = (checker, flow, reference) => {
|
|
25
|
+
const access = reference.parent;
|
|
26
|
+
if ((!ts.isPropertyAccessExpression(access) && !ts.isElementAccessExpression(access)) || access.expression !== reference)
|
|
27
|
+
return false;
|
|
28
|
+
const target = flow.targetOf(access);
|
|
29
|
+
const declaration = target?.declaration;
|
|
30
|
+
if (!declaration || declaration.getSourceFile().isDeclarationFile)
|
|
31
|
+
return false;
|
|
32
|
+
const staticField = ts.isPropertyDeclaration(declaration) && (ts.getCombinedModifierFlags(declaration) & ts.ModifierFlags.Static) !== 0;
|
|
33
|
+
const expando = (ts.isPropertyAccessExpression(declaration) || ts.isElementAccessExpression(declaration)) &&
|
|
34
|
+
ts.isBinaryExpression(declaration.parent) &&
|
|
35
|
+
declaration.parent.left === declaration &&
|
|
36
|
+
declaration.parent.operatorToken.kind === ts.SyntaxKind.EqualsToken;
|
|
37
|
+
if (!staticField && !expando)
|
|
38
|
+
return false;
|
|
39
|
+
if (flow.receiverReferencesToDeclaration(declaration).length > 0)
|
|
40
|
+
return false;
|
|
41
|
+
const writes = flow.writesToDeclaration(declaration);
|
|
42
|
+
return (writes.length > 0 &&
|
|
43
|
+
writes.every((write) => write.slot === 'whole' &&
|
|
44
|
+
(write.edge === 'class-field-initializer' || write.edge === 'property-assignment') &&
|
|
45
|
+
write.value !== null &&
|
|
46
|
+
dataValue(checker.getTypeAtLocation(write.value))));
|
|
47
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { type SourceClass, type ValueFlowIndex } from './model.js';
|
|
3
|
+
export interface SourceConstructionFrames {
|
|
4
|
+
/** Runtime classes and source bases whose instance construction work can execute. */
|
|
5
|
+
readonly receiverOwnersOf: (call: ts.NewExpression) => readonly SourceClass[] | null;
|
|
6
|
+
/** The explicit source constructor frames entered by this construction or `super()`. */
|
|
7
|
+
readonly targetsOf: (call: ts.NewExpression | ts.CallExpression) => readonly ts.SignatureDeclaration[] | null;
|
|
8
|
+
}
|
|
9
|
+
/** Construction and constructor execution are different facts: an explicit
|
|
10
|
+
* derived constructor runs its base body with the arguments at `super()`, not
|
|
11
|
+
* with the arguments originally passed to `new Derived(...)`. */
|
|
12
|
+
export declare const sourceConstructionFramesOf: (checker: ts.TypeChecker, flow: ValueFlowIndex) => SourceConstructionFrames;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { exactSourceConstructionOf, sourceConstructorSelectionsOf } from './member-call-forwarding.js';
|
|
3
|
+
import { isClassSpelledSourceClass } from './model.js';
|
|
4
|
+
const caches = new WeakMap();
|
|
5
|
+
/** Construction and constructor execution are different facts: an explicit
|
|
6
|
+
* derived constructor runs its base body with the arguments at `super()`, not
|
|
7
|
+
* with the arguments originally passed to `new Derived(...)`. */
|
|
8
|
+
export const sourceConstructionFramesOf = (checker, flow) => {
|
|
9
|
+
let cache = caches.get(flow);
|
|
10
|
+
if (!cache) {
|
|
11
|
+
cache = { receiverOwners: new WeakMap(), targets: new WeakMap() };
|
|
12
|
+
caches.set(flow, cache);
|
|
13
|
+
}
|
|
14
|
+
const baseSelectionsOf = (owner) => {
|
|
15
|
+
const clauses = owner.heritageClauses?.filter((clause) => clause.token === ts.SyntaxKind.ExtendsKeyword) ?? [];
|
|
16
|
+
if (clauses.length === 0)
|
|
17
|
+
return [];
|
|
18
|
+
if (clauses.length !== 1 || clauses[0]?.types.length !== 1)
|
|
19
|
+
return null;
|
|
20
|
+
const base = clauses[0].types[0];
|
|
21
|
+
return base ? sourceConstructorSelectionsOf(checker, flow, base.expression) : null;
|
|
22
|
+
};
|
|
23
|
+
const receiverOwnersOf = (call) => {
|
|
24
|
+
if (cache.receiverOwners.has(call))
|
|
25
|
+
return cache.receiverOwners.get(call);
|
|
26
|
+
const construction = exactSourceConstructionOf(checker, flow, call);
|
|
27
|
+
if (!construction) {
|
|
28
|
+
cache.receiverOwners.set(call, null);
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
const owners = new Set();
|
|
32
|
+
const active = new Set();
|
|
33
|
+
const include = (selected) => {
|
|
34
|
+
if (active.has(selected))
|
|
35
|
+
return false;
|
|
36
|
+
if (owners.has(selected))
|
|
37
|
+
return true;
|
|
38
|
+
owners.add(selected);
|
|
39
|
+
if (!isClassSpelledSourceClass(selected))
|
|
40
|
+
return true;
|
|
41
|
+
active.add(selected);
|
|
42
|
+
const bases = baseSelectionsOf(selected);
|
|
43
|
+
const complete = bases !== null && bases.every(include);
|
|
44
|
+
active.delete(selected);
|
|
45
|
+
return complete;
|
|
46
|
+
};
|
|
47
|
+
const complete = construction.alternatives.every(include);
|
|
48
|
+
const answer = complete ? [...owners] : null;
|
|
49
|
+
cache.receiverOwners.set(call, answer);
|
|
50
|
+
return answer;
|
|
51
|
+
};
|
|
52
|
+
const firstExplicitConstructorOf = (selected, active = new Set()) => {
|
|
53
|
+
if (active.has(selected))
|
|
54
|
+
return null;
|
|
55
|
+
if (!isClassSpelledSourceClass(selected))
|
|
56
|
+
return [selected];
|
|
57
|
+
const constructors = selected.members.filter(ts.isConstructorDeclaration);
|
|
58
|
+
const implementation = constructors.find((constructor) => constructor.body !== undefined);
|
|
59
|
+
if (implementation)
|
|
60
|
+
return [implementation];
|
|
61
|
+
if (constructors.length > 0)
|
|
62
|
+
return null;
|
|
63
|
+
active.add(selected);
|
|
64
|
+
const bases = baseSelectionsOf(selected);
|
|
65
|
+
if (bases === null) {
|
|
66
|
+
active.delete(selected);
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
const targets = new Set();
|
|
70
|
+
for (const base of bases) {
|
|
71
|
+
const inherited = firstExplicitConstructorOf(base, active);
|
|
72
|
+
if (inherited === null) {
|
|
73
|
+
active.delete(selected);
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
inherited.forEach((target) => targets.add(target));
|
|
77
|
+
}
|
|
78
|
+
active.delete(selected);
|
|
79
|
+
return [...targets];
|
|
80
|
+
};
|
|
81
|
+
const targetsOf = (call) => {
|
|
82
|
+
if (cache.targets.has(call))
|
|
83
|
+
return cache.targets.get(call);
|
|
84
|
+
let selections;
|
|
85
|
+
if (ts.isNewExpression(call)) {
|
|
86
|
+
const construction = exactSourceConstructionOf(checker, flow, call);
|
|
87
|
+
selections = construction?.alternatives ?? null;
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
const site = flow.callSiteOf(call);
|
|
91
|
+
const dispatch = site?.operands.dispatch;
|
|
92
|
+
if (call.expression.kind !== ts.SyntaxKind.SuperKeyword || dispatch?.kind !== 'super-constructor' || !dispatch.home) {
|
|
93
|
+
cache.targets.set(call, null);
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
selections = baseSelectionsOf(dispatch.home);
|
|
97
|
+
if (selections?.length === 0)
|
|
98
|
+
selections = null;
|
|
99
|
+
}
|
|
100
|
+
if (selections === null) {
|
|
101
|
+
cache.targets.set(call, null);
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
const targets = new Set();
|
|
105
|
+
for (const selected of selections) {
|
|
106
|
+
const found = firstExplicitConstructorOf(selected);
|
|
107
|
+
if (found === null) {
|
|
108
|
+
cache.targets.set(call, null);
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
found.forEach((target) => targets.add(target));
|
|
112
|
+
}
|
|
113
|
+
const answer = [...targets];
|
|
114
|
+
cache.targets.set(call, answer);
|
|
115
|
+
return answer;
|
|
116
|
+
};
|
|
117
|
+
return { receiverOwnersOf, targetsOf };
|
|
118
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { FlowInvocationOperands, ReceiverReference, ValueFlowIndex } from './model.js';
|
|
3
|
+
import { type SourceInvocationReceiverFact } from './source-invocation-receiver.js';
|
|
4
|
+
export type SourceInvocationParameterSlot = {
|
|
5
|
+
readonly kind: 'single';
|
|
6
|
+
readonly parameter: ts.ParameterDeclaration;
|
|
7
|
+
readonly actual: ts.Expression | null;
|
|
8
|
+
/** Evaluated only when the actual value is undefined, including omission. */
|
|
9
|
+
readonly defaultValue: ts.Expression | null;
|
|
10
|
+
readonly defaultActivation: 'never' | 'always' | 'maybe';
|
|
11
|
+
} | {
|
|
12
|
+
readonly kind: 'rest';
|
|
13
|
+
readonly parameter: ts.ParameterDeclaration;
|
|
14
|
+
readonly actuals: readonly ts.Expression[];
|
|
15
|
+
};
|
|
16
|
+
/** Immutable source frame inventory. Value and effect queries consume these
|
|
17
|
+
* positions; neither the caller's checker signature nor its inferred type can
|
|
18
|
+
* change the executable frame. */
|
|
19
|
+
export interface SourceInvocationFrameLayout {
|
|
20
|
+
readonly call: ts.CallExpression | ts.NewExpression;
|
|
21
|
+
readonly body: ts.SignatureDeclaration;
|
|
22
|
+
readonly operands: FlowInvocationOperands;
|
|
23
|
+
readonly receiver: SourceInvocationReceiverFact;
|
|
24
|
+
readonly receiverUses: readonly ReceiverReference[];
|
|
25
|
+
readonly parameters: readonly ts.ParameterDeclaration[];
|
|
26
|
+
readonly arguments: {
|
|
27
|
+
readonly kind: 'positional';
|
|
28
|
+
readonly slots: readonly SourceInvocationParameterSlot[];
|
|
29
|
+
} | {
|
|
30
|
+
readonly kind: 'spread';
|
|
31
|
+
readonly values: readonly ts.Expression[];
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
export declare const sourceInvocationFrameLayoutOf: (flow: ValueFlowIndex, call: ts.CallExpression | ts.NewExpression, body: ts.SignatureDeclaration) => SourceInvocationFrameLayout | null;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { unwrapErasedExpression } from '../producers/erasure.js';
|
|
3
|
+
import { runtimeParametersOf } from './targets.js';
|
|
4
|
+
import { sourceInvocationReceiverOf } from './source-invocation-receiver.js';
|
|
5
|
+
const layouts = new WeakMap();
|
|
6
|
+
const unwrapped = (expression) => {
|
|
7
|
+
let current = unwrapErasedExpression(expression);
|
|
8
|
+
while (ts.isParenthesizedExpression(current))
|
|
9
|
+
current = unwrapErasedExpression(current.expression);
|
|
10
|
+
return current;
|
|
11
|
+
};
|
|
12
|
+
const isBoundUndefined = (flow, expression) => {
|
|
13
|
+
const value = unwrapped(expression);
|
|
14
|
+
if (!ts.isIdentifier(value) || value.text !== 'undefined')
|
|
15
|
+
return false;
|
|
16
|
+
const declaration = flow.targetOf(value)?.declaration;
|
|
17
|
+
return !declaration || declaration.getSourceFile().hasNoDefaultLib;
|
|
18
|
+
};
|
|
19
|
+
const isDefinitelyDefined = (expression) => {
|
|
20
|
+
const value = unwrapped(expression);
|
|
21
|
+
return (ts.isLiteralExpression(value) ||
|
|
22
|
+
ts.isNoSubstitutionTemplateLiteral(value) ||
|
|
23
|
+
value.kind === ts.SyntaxKind.NullKeyword ||
|
|
24
|
+
value.kind === ts.SyntaxKind.TrueKeyword ||
|
|
25
|
+
value.kind === ts.SyntaxKind.FalseKeyword ||
|
|
26
|
+
ts.isObjectLiteralExpression(value) ||
|
|
27
|
+
ts.isArrayLiteralExpression(value) ||
|
|
28
|
+
ts.isFunctionExpression(value) ||
|
|
29
|
+
ts.isArrowFunction(value) ||
|
|
30
|
+
ts.isClassExpression(value) ||
|
|
31
|
+
ts.isNewExpression(value));
|
|
32
|
+
};
|
|
33
|
+
const defaultActivationOf = (flow, actual, defaultValue) => {
|
|
34
|
+
if (!defaultValue)
|
|
35
|
+
return 'never';
|
|
36
|
+
if (actual === null || ts.isVoidExpression(unwrapped(actual)) || isBoundUndefined(flow, actual))
|
|
37
|
+
return 'always';
|
|
38
|
+
if (isDefinitelyDefined(actual))
|
|
39
|
+
return 'never';
|
|
40
|
+
return 'maybe';
|
|
41
|
+
};
|
|
42
|
+
export const sourceInvocationFrameLayoutOf = (flow, call, body) => {
|
|
43
|
+
let calls = layouts.get(flow);
|
|
44
|
+
if (!calls)
|
|
45
|
+
layouts.set(flow, (calls = new WeakMap()));
|
|
46
|
+
let bodies = calls.get(call);
|
|
47
|
+
if (!bodies)
|
|
48
|
+
calls.set(call, (bodies = new WeakMap()));
|
|
49
|
+
if (bodies.has(body))
|
|
50
|
+
return bodies.get(body);
|
|
51
|
+
const site = flow.callSiteOf(call);
|
|
52
|
+
if (!site || !flow.callableBodyIsIndexed(body)) {
|
|
53
|
+
bodies.set(body, null);
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
const parameters = runtimeParametersOf(body);
|
|
57
|
+
const args = site.operands.args;
|
|
58
|
+
const slots = parameters.map((parameter, index) => parameter.dotDotDotToken
|
|
59
|
+
? { kind: 'rest', parameter, actuals: args.slice(index) }
|
|
60
|
+
: {
|
|
61
|
+
kind: 'single',
|
|
62
|
+
parameter,
|
|
63
|
+
actual: args[index] ?? null,
|
|
64
|
+
defaultValue: parameter.initializer ?? null,
|
|
65
|
+
defaultActivation: defaultActivationOf(flow, args[index] ?? null, parameter.initializer ?? null)
|
|
66
|
+
});
|
|
67
|
+
const layout = {
|
|
68
|
+
call,
|
|
69
|
+
body,
|
|
70
|
+
operands: site.operands,
|
|
71
|
+
receiver: sourceInvocationReceiverOf(flow, call, body),
|
|
72
|
+
receiverUses: ts.isArrowFunction(body) ? [] : flow.receiverReferencesToDeclaration(body),
|
|
73
|
+
parameters,
|
|
74
|
+
arguments: args.some(ts.isSpreadElement) ? { kind: 'spread', values: args } : { kind: 'positional', slots }
|
|
75
|
+
};
|
|
76
|
+
bodies.set(body, layout);
|
|
77
|
+
return layout;
|
|
78
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { ValueFlowIndex } from './model.js';
|
|
3
|
+
export type SourceInvocationReceiverFact = {
|
|
4
|
+
readonly kind: 'expression';
|
|
5
|
+
readonly expression: ts.Expression;
|
|
6
|
+
readonly conversion: 'identity' | 'sloppy-this';
|
|
7
|
+
} | {
|
|
8
|
+
readonly kind: 'undefined';
|
|
9
|
+
readonly reason: 'strict-direct' | 'strict-missing-this-argument';
|
|
10
|
+
} | {
|
|
11
|
+
readonly kind: 'global-object';
|
|
12
|
+
readonly reason: 'sloppy-direct' | 'sloppy-missing-this-argument' | 'sloppy-nullish-this-argument';
|
|
13
|
+
readonly expression?: ts.Expression;
|
|
14
|
+
} | {
|
|
15
|
+
readonly kind: 'lexical';
|
|
16
|
+
readonly source: 'arrow';
|
|
17
|
+
readonly owner: ts.Node | null;
|
|
18
|
+
} | {
|
|
19
|
+
readonly kind: 'lexical';
|
|
20
|
+
readonly source: 'super-member';
|
|
21
|
+
readonly owner: ts.Node;
|
|
22
|
+
readonly static: boolean;
|
|
23
|
+
} | {
|
|
24
|
+
readonly kind: 'lexical';
|
|
25
|
+
readonly source: 'super-constructor';
|
|
26
|
+
readonly owner: ts.Node;
|
|
27
|
+
} | {
|
|
28
|
+
readonly kind: 'constructed';
|
|
29
|
+
readonly call: ts.NewExpression;
|
|
30
|
+
} | {
|
|
31
|
+
readonly kind: 'unsupported';
|
|
32
|
+
readonly reason: 'unindexed-call' | 'unresolved-super-home' | 'nullish-member-base';
|
|
33
|
+
};
|
|
34
|
+
/** Project only JavaScript's receiver binding rules for one already-admitted
|
|
35
|
+
* invocation/body pair. It deliberately states coercion; proving the source
|
|
36
|
+
* value is a native object belongs to the consumer's existing graph proof. */
|
|
37
|
+
export declare const sourceInvocationReceiverOf: (flow: ValueFlowIndex, call: ts.CallExpression | ts.NewExpression, body: ts.SignatureDeclaration) => SourceInvocationReceiverFact;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { isStrictContext } from '../producers/shared.js';
|
|
3
|
+
import { unwrapErasedExpression } from '../producers/erasure.js';
|
|
4
|
+
const unwrapped = (expression) => {
|
|
5
|
+
let current = unwrapErasedExpression(expression);
|
|
6
|
+
while (ts.isParenthesizedExpression(current))
|
|
7
|
+
current = unwrapErasedExpression(current.expression);
|
|
8
|
+
return current;
|
|
9
|
+
};
|
|
10
|
+
const definitelyNullish = (flow, expression) => {
|
|
11
|
+
const value = unwrapped(expression);
|
|
12
|
+
if (value.kind === ts.SyntaxKind.NullKeyword || ts.isVoidExpression(value))
|
|
13
|
+
return true;
|
|
14
|
+
if (!ts.isIdentifier(value) || value.text !== 'undefined')
|
|
15
|
+
return false;
|
|
16
|
+
const declaration = flow.targetOf(value)?.declaration;
|
|
17
|
+
return !declaration || declaration.getSourceFile().hasNoDefaultLib;
|
|
18
|
+
};
|
|
19
|
+
const lexicalOwnerOf = (flow, body) => {
|
|
20
|
+
let indexedOwner = null;
|
|
21
|
+
const findIndexedReference = (node) => {
|
|
22
|
+
if (indexedOwner)
|
|
23
|
+
return;
|
|
24
|
+
if (node !== body && (ts.isClassLike(node) || (ts.isFunctionLike(node) && !ts.isArrowFunction(node))))
|
|
25
|
+
return;
|
|
26
|
+
if (node.kind === ts.SyntaxKind.ThisKeyword || node.kind === ts.SyntaxKind.SuperKeyword) {
|
|
27
|
+
indexedOwner = flow.receiverOwnerOf(node);
|
|
28
|
+
if (indexedOwner)
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
ts.forEachChild(node, findIndexedReference);
|
|
32
|
+
};
|
|
33
|
+
findIndexedReference(body.body);
|
|
34
|
+
if (indexedOwner)
|
|
35
|
+
return indexedOwner;
|
|
36
|
+
let branch = body;
|
|
37
|
+
for (let current = body.parent; current; branch = current, current = current.parent) {
|
|
38
|
+
if ((ts.isMethodDeclaration(current) ||
|
|
39
|
+
ts.isGetAccessorDeclaration(current) ||
|
|
40
|
+
ts.isSetAccessorDeclaration(current) ||
|
|
41
|
+
ts.isPropertyDeclaration(current)) &&
|
|
42
|
+
current.name === branch)
|
|
43
|
+
continue;
|
|
44
|
+
if (ts.isArrowFunction(current))
|
|
45
|
+
continue;
|
|
46
|
+
if (ts.isFunctionLike(current) || ts.isPropertyDeclaration(current) || ts.isClassStaticBlockDeclaration(current))
|
|
47
|
+
return current;
|
|
48
|
+
if (ts.isSourceFile(current))
|
|
49
|
+
return current;
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
};
|
|
53
|
+
/** Project only JavaScript's receiver binding rules for one already-admitted
|
|
54
|
+
* invocation/body pair. It deliberately states coercion; proving the source
|
|
55
|
+
* value is a native object belongs to the consumer's existing graph proof. */
|
|
56
|
+
export const sourceInvocationReceiverOf = (flow, call, body) => {
|
|
57
|
+
const site = flow.callSiteOf(call);
|
|
58
|
+
if (!site)
|
|
59
|
+
return { kind: 'unsupported', reason: 'unindexed-call' };
|
|
60
|
+
const operands = site.operands;
|
|
61
|
+
if (ts.isNewExpression(call))
|
|
62
|
+
return { kind: 'constructed', call };
|
|
63
|
+
if (operands.dispatch.kind === 'super-constructor') {
|
|
64
|
+
return operands.dispatch.home
|
|
65
|
+
? { kind: 'lexical', source: 'super-constructor', owner: operands.dispatch.home }
|
|
66
|
+
: { kind: 'unsupported', reason: 'unresolved-super-home' };
|
|
67
|
+
}
|
|
68
|
+
if (ts.isArrowFunction(body))
|
|
69
|
+
return { kind: 'lexical', source: 'arrow', owner: lexicalOwnerOf(flow, body) };
|
|
70
|
+
const strict = isStrictContext(body, flow.buildIsStrict);
|
|
71
|
+
if (operands.explicitThis) {
|
|
72
|
+
const receiver = operands.receiver;
|
|
73
|
+
if (receiver === null)
|
|
74
|
+
return strict
|
|
75
|
+
? { kind: 'undefined', reason: 'strict-missing-this-argument' }
|
|
76
|
+
: { kind: 'global-object', reason: 'sloppy-missing-this-argument' };
|
|
77
|
+
if (definitelyNullish(flow, receiver) && !strict)
|
|
78
|
+
return { kind: 'global-object', reason: 'sloppy-nullish-this-argument', expression: receiver };
|
|
79
|
+
return { kind: 'expression', expression: receiver, conversion: strict ? 'identity' : 'sloppy-this' };
|
|
80
|
+
}
|
|
81
|
+
if (operands.dispatch.kind === 'lexical-super') {
|
|
82
|
+
return operands.dispatch.home
|
|
83
|
+
? { kind: 'lexical', source: 'super-member', owner: operands.dispatch.home, static: operands.dispatch.static }
|
|
84
|
+
: { kind: 'unsupported', reason: 'unresolved-super-home' };
|
|
85
|
+
}
|
|
86
|
+
if (operands.dispatch.kind === 'member') {
|
|
87
|
+
const receiver = operands.receiver;
|
|
88
|
+
if (receiver === null)
|
|
89
|
+
return { kind: 'unsupported', reason: 'unindexed-call' };
|
|
90
|
+
if (definitelyNullish(flow, receiver))
|
|
91
|
+
return { kind: 'unsupported', reason: 'nullish-member-base' };
|
|
92
|
+
return { kind: 'expression', expression: receiver, conversion: strict ? 'identity' : 'sloppy-this' };
|
|
93
|
+
}
|
|
94
|
+
return strict ? { kind: 'undefined', reason: 'strict-direct' } : { kind: 'global-object', reason: 'sloppy-direct' };
|
|
95
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { ValueFlowIndex } from './model.js';
|
|
3
|
+
/**
|
|
4
|
+
* A declaration that puts a source method in a class's non-static prototype
|
|
5
|
+
* slot -- the only member shape whose value is a body this compiler has walked
|
|
6
|
+
* and whose slot the class itself, rather than a constructor assignment,
|
|
7
|
+
* created.
|
|
8
|
+
*
|
|
9
|
+
* Exported because two proofs need the same admission and a second spelling of
|
|
10
|
+
* it would be two authorities on what a method slot is: the identity
|
|
11
|
+
* observation below, and `sourceClassCallableMemberPlanOf`'s question of which
|
|
12
|
+
* bodies a key on this family resolves to.
|
|
13
|
+
*/
|
|
14
|
+
export declare const isSourceInstanceMethod: (declaration: ts.Declaration) => boolean;
|
|
15
|
+
/** A source prototype METHOD can be observed for strict identity without
|
|
16
|
+
* handing out the prototype or executing a receiver-bearing callback. The
|
|
17
|
+
* caller still validates every constructor/prototype reference, including
|
|
18
|
+
* the declaring base classes: this helper alone does not prove descriptors
|
|
19
|
+
* immutable. Aliases are accepted only when all their graph-visible uses are
|
|
20
|
+
* identity observations. Module import/export references use the same closed
|
|
21
|
+
* source graph inventory as their owning constructor.
|
|
22
|
+
*/
|
|
23
|
+
export declare const sourcePrototypeMethodIdentityUseOf: (checker: ts.TypeChecker, flow: ValueFlowIndex, reference: ts.Expression, instance: ts.InterfaceType) => boolean;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { outermostErasureOf } from '../producers/erasure.js';
|
|
3
|
+
import { isTypePositionReference, namespaceMemberDeclarationOf } from './targets.js';
|
|
4
|
+
/**
|
|
5
|
+
* A declaration that puts a source method in a class's non-static prototype
|
|
6
|
+
* slot -- the only member shape whose value is a body this compiler has walked
|
|
7
|
+
* and whose slot the class itself, rather than a constructor assignment,
|
|
8
|
+
* created.
|
|
9
|
+
*
|
|
10
|
+
* Exported because two proofs need the same admission and a second spelling of
|
|
11
|
+
* it would be two authorities on what a method slot is: the identity
|
|
12
|
+
* observation below, and `sourceClassCallableMemberPlanOf`'s question of which
|
|
13
|
+
* bodies a key on this family resolves to.
|
|
14
|
+
*/
|
|
15
|
+
export const isSourceInstanceMethod = (declaration) => ts.isMethodDeclaration(declaration) &&
|
|
16
|
+
declaration.body !== undefined &&
|
|
17
|
+
!declaration.getSourceFile().isDeclarationFile &&
|
|
18
|
+
(ts.getCombinedModifierFlags(declaration) & ts.ModifierFlags.Static) === 0;
|
|
19
|
+
const keyOf = (access) => ts.isPropertyAccessExpression(access)
|
|
20
|
+
? access.name.text
|
|
21
|
+
: ts.isStringLiteralLike(access.argumentExpression)
|
|
22
|
+
? access.argumentExpression.text
|
|
23
|
+
: null;
|
|
24
|
+
/** A source prototype METHOD can be observed for strict identity without
|
|
25
|
+
* handing out the prototype or executing a receiver-bearing callback. The
|
|
26
|
+
* caller still validates every constructor/prototype reference, including
|
|
27
|
+
* the declaring base classes: this helper alone does not prove descriptors
|
|
28
|
+
* immutable. Aliases are accepted only when all their graph-visible uses are
|
|
29
|
+
* identity observations. Module import/export references use the same closed
|
|
30
|
+
* source graph inventory as their owning constructor.
|
|
31
|
+
*/
|
|
32
|
+
export const sourcePrototypeMethodIdentityUseOf = (checker, flow, reference, instance) => {
|
|
33
|
+
const prototype = reference.parent;
|
|
34
|
+
if ((!ts.isPropertyAccessExpression(prototype) && !ts.isElementAccessExpression(prototype)) ||
|
|
35
|
+
prototype.expression !== reference ||
|
|
36
|
+
keyOf(prototype) !== 'prototype')
|
|
37
|
+
return false;
|
|
38
|
+
const selected = outermostErasureOf(prototype);
|
|
39
|
+
const access = selected.parent;
|
|
40
|
+
if ((!ts.isPropertyAccessExpression(access) && !ts.isElementAccessExpression(access)) || access.expression !== selected)
|
|
41
|
+
return false;
|
|
42
|
+
const key = keyOf(access);
|
|
43
|
+
const method = key === null ? undefined : checker.getPropertyOfType(instance, key);
|
|
44
|
+
if (!method?.declarations?.length || !method.declarations.every(isSourceInstanceMethod))
|
|
45
|
+
return false;
|
|
46
|
+
const seen = new Set();
|
|
47
|
+
const observed = (expression) => {
|
|
48
|
+
if (seen.has(expression))
|
|
49
|
+
return true;
|
|
50
|
+
seen.add(expression);
|
|
51
|
+
const current = outermostErasureOf(expression);
|
|
52
|
+
const parent = current.parent;
|
|
53
|
+
if (!parent)
|
|
54
|
+
return false;
|
|
55
|
+
if (ts.isBinaryExpression(parent) &&
|
|
56
|
+
(parent.operatorToken.kind === ts.SyntaxKind.EqualsEqualsEqualsToken ||
|
|
57
|
+
parent.operatorToken.kind === ts.SyntaxKind.ExclamationEqualsEqualsToken))
|
|
58
|
+
return true;
|
|
59
|
+
if (!ts.isVariableDeclaration(parent) || parent.initializer !== current || !ts.isIdentifier(parent.name))
|
|
60
|
+
return false;
|
|
61
|
+
if ((parent.parent.flags & ts.NodeFlags.Const) === 0)
|
|
62
|
+
return false;
|
|
63
|
+
const writes = flow.writesToDeclaration(parent).filter((write) => write.slot === 'whole');
|
|
64
|
+
if (writes.some((write) => write.edge !== 'declaration-initializer' || write.value !== parent.initializer))
|
|
65
|
+
return false;
|
|
66
|
+
return flow.referencesToDeclaration(parent).every((mention) => {
|
|
67
|
+
if (mention === parent.name || isTypePositionReference(mention))
|
|
68
|
+
return true;
|
|
69
|
+
const use = mention.parent;
|
|
70
|
+
if (ts.isImportSpecifier(use) || ts.isExportSpecifier(use))
|
|
71
|
+
return true;
|
|
72
|
+
const selected = ((ts.isPropertyAccessExpression(use) && use.name === mention) ||
|
|
73
|
+
(ts.isElementAccessExpression(use) && use.argumentExpression === mention)) &&
|
|
74
|
+
namespaceMemberDeclarationOf(checker, use) === parent
|
|
75
|
+
? use
|
|
76
|
+
: mention;
|
|
77
|
+
return observed(selected);
|
|
78
|
+
});
|
|
79
|
+
};
|
|
80
|
+
return observed(access);
|
|
81
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { ValueFlowIndex } from './model.js';
|
|
3
|
+
import { callableCompletionValuesOf } from './callable-completions.js';
|
|
4
|
+
import { type OriginAuthority } from './origin-authority.js';
|
|
5
|
+
import { type IntrinsicProtocolRequirement } from '../deferred-intrinsic-protocols.js';
|
|
6
|
+
export interface SourceRecordDataWritePlan {
|
|
7
|
+
/** Every allocation whose descriptors and publications the caller must close. */
|
|
8
|
+
readonly roots: readonly ts.ObjectLiteralExpression[];
|
|
9
|
+
/** Missing own slots additionally depend on the intrinsic Object prototype. */
|
|
10
|
+
readonly needsDefaultPrototype: boolean;
|
|
11
|
+
/** Deferred protocol obligations discovered while following cached origins. */
|
|
12
|
+
readonly requirements: readonly IntrinsicProtocolRequirement[];
|
|
13
|
+
}
|
|
14
|
+
/** @semanticCategory generic-primitive */
|
|
15
|
+
export type { SourceRecordOriginAuthority } from './origin-authority.js';
|
|
16
|
+
/** A source callable a record slot can hold, independent of completion support. */
|
|
17
|
+
export type RecordMethodTarget = ts.FunctionDeclaration | ts.FunctionExpression | ts.ArrowFunction;
|
|
18
|
+
export { callableCompletionValuesOf };
|
|
19
|
+
export declare const recordMethodCallTargetsOf: (flow: ValueFlowIndex, call: ts.CallExpression, authority: OriginAuthority) => readonly RecordMethodTarget[] | null;
|
|
20
|
+
/** Every value `record.key( ... )` can return: the completions of every
|
|
21
|
+
* callable `recordMethodCallTargetsOf` names, or null when any target's
|
|
22
|
+
* normal completion is unsupported. Target admission remains useful when
|
|
23
|
+
* this separate result query refuses. */
|
|
24
|
+
export declare const recordMethodCallResultsOf: (flow: ValueFlowIndex, call: ts.CallExpression, authority: OriginAuthority) => readonly ts.Expression[] | null;
|
|
25
|
+
export declare const sourceRecordDataWritePlanOf: (flow: ValueFlowIndex, receiver: ts.Expression, key: string, authority: OriginAuthority) => SourceRecordDataWritePlan | null;
|
|
26
|
+
/** The stored values of a closed own record slot. The allocation, descriptor,
|
|
27
|
+
* alias and replacement checks are shared with nested record-origin reads;
|
|
28
|
+
* a consumer must still establish the provenance of each returned value. */
|
|
29
|
+
export declare const sourceRecordSlotValuesOf: (flow: ValueFlowIndex, access: ts.PropertyAccessExpression | ts.ElementAccessExpression, authority: OriginAuthority) => readonly ts.Expression[] | null;
|