@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,35 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
export interface IntrinsicDataDefinitionPlan {
|
|
3
|
+
readonly owner: 'Object' | 'Reflect';
|
|
4
|
+
readonly member: 'defineProperty' | 'defineProperties';
|
|
5
|
+
readonly keys: readonly string[];
|
|
6
|
+
/** Every descriptor's `value` initializer, in definition order: what the definitions store on the target. */
|
|
7
|
+
readonly values: readonly ts.Expression[];
|
|
8
|
+
readonly returnsTarget: boolean;
|
|
9
|
+
/**
|
|
10
|
+
* The descriptor fields no descriptor literal spells, which
|
|
11
|
+
* ToPropertyDescriptor reads through `Object.prototype`: a `{ value }`
|
|
12
|
+
* descriptor turns into an accessor the moment someone defines
|
|
13
|
+
* `Object.prototype.get`. Empty exactly when every descriptor carries
|
|
14
|
+
* `__proto__: null`. Asked per key, not as the whole prototype: the three.js app's
|
|
15
|
+
* final census records single keys written through receivers it cannot
|
|
16
|
+
* attribute, which fails the whole-object question for every `Object
|
|
17
|
+
* .defineProperty( this, 'id', { value } )` in three while leaving
|
|
18
|
+
* `writable`, `enumerable`, `configurable`, `get` and `set` untouched.
|
|
19
|
+
*/
|
|
20
|
+
readonly descriptorPrototypeKeys: readonly string[];
|
|
21
|
+
readonly call: ts.CallExpression;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Whether every mention of a binding is one this proof already accounts for --
|
|
25
|
+
* its own declaration name, or the argument being inspected.
|
|
26
|
+
*/
|
|
27
|
+
export type SoleUseOfBinding = (declaration: ts.VariableDeclaration, argument: ts.Expression) => boolean;
|
|
28
|
+
/** The target argument of a data-only intrinsic definition is not published
|
|
29
|
+
* to user code by that operation. This plan still requires authenticated final
|
|
30
|
+
* static-member identity and, for ordinary descriptor literals, an intact
|
|
31
|
+
* Object prototype: ToPropertyDescriptor reads inherited get/set and flags.
|
|
32
|
+
* Callers must follow Object's returned target, and cannot ignore replacement
|
|
33
|
+
* of the member whose callable or containing-field identity they are proving.
|
|
34
|
+
*/
|
|
35
|
+
export declare const intrinsicDataDefinitionTargetOf: (checker: ts.TypeChecker, reference: ts.Expression, soleUseOfBinding?: SoleUseOfBinding) => IntrinsicDataDefinitionPlan | null;
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { unwrapErasedExpression } from '../producers/erasure.js';
|
|
3
|
+
const DESCRIPTOR_FIELDS = ['value', 'writable', 'get', 'set', 'enumerable', 'configurable'];
|
|
4
|
+
const literalKey = (expression) => ts.isStringLiteralLike(expression) || ts.isNumericLiteral(expression) ? expression.text : null;
|
|
5
|
+
const propertyKey = (name) => ts.isComputedPropertyName(name)
|
|
6
|
+
? literalKey(unwrapErasedExpression(name.expression))
|
|
7
|
+
: ts.isIdentifier(name)
|
|
8
|
+
? name.text
|
|
9
|
+
: literalKey(name);
|
|
10
|
+
/** The target argument of a data-only intrinsic definition is not published
|
|
11
|
+
* to user code by that operation. This plan still requires authenticated final
|
|
12
|
+
* static-member identity and, for ordinary descriptor literals, an intact
|
|
13
|
+
* Object prototype: ToPropertyDescriptor reads inherited get/set and flags.
|
|
14
|
+
* Callers must follow Object's returned target, and cannot ignore replacement
|
|
15
|
+
* of the member whose callable or containing-field identity they are proving.
|
|
16
|
+
*/
|
|
17
|
+
export const intrinsicDataDefinitionTargetOf = (checker, reference, soleUseOfBinding) => {
|
|
18
|
+
const call = reference.parent;
|
|
19
|
+
if (!ts.isCallExpression(call) || call.arguments[0] !== reference || call.arguments.some(ts.isSpreadElement))
|
|
20
|
+
return null;
|
|
21
|
+
const callee = unwrapErasedExpression(call.expression);
|
|
22
|
+
if (!ts.isPropertyAccessExpression(callee) && !ts.isElementAccessExpression(callee))
|
|
23
|
+
return null;
|
|
24
|
+
const member = ts.isPropertyAccessExpression(callee) ? callee.name.text : literalKey(callee.argumentExpression);
|
|
25
|
+
if (member !== 'defineProperty' && member !== 'defineProperties')
|
|
26
|
+
return null;
|
|
27
|
+
const receiver = unwrapErasedExpression(callee.expression);
|
|
28
|
+
if (!ts.isIdentifier(receiver))
|
|
29
|
+
return null;
|
|
30
|
+
const symbol = checker.getSymbolAtLocation(receiver);
|
|
31
|
+
if (!symbol ||
|
|
32
|
+
(symbol.name !== 'Object' && symbol.name !== 'Reflect') ||
|
|
33
|
+
!symbol.declarations?.length ||
|
|
34
|
+
!symbol.declarations.every((declaration) => declaration.getSourceFile().hasNoDefaultLib))
|
|
35
|
+
return null;
|
|
36
|
+
const owner = symbol.name;
|
|
37
|
+
if (owner === 'Reflect' && member === 'defineProperties')
|
|
38
|
+
return null;
|
|
39
|
+
const method = checker.getPropertyOfType(checker.getTypeAtLocation(receiver), member);
|
|
40
|
+
if (!method?.declarations?.length || !method.declarations.every((declaration) => declaration.getSourceFile().hasNoDefaultLib))
|
|
41
|
+
return null;
|
|
42
|
+
const keys = new Set();
|
|
43
|
+
const values = [];
|
|
44
|
+
const descriptorPrototypeKeys = new Set();
|
|
45
|
+
/**
|
|
46
|
+
* The descriptor literal an argument names.
|
|
47
|
+
*
|
|
48
|
+
* `define-property-source-transform.ts` lowers `Object.defineProperties( o,
|
|
49
|
+
* { ... } )` into one `Object.defineProperty` per key, hoisting each
|
|
50
|
+
* descriptor into its own `const` first so that `defineProperties`' two
|
|
51
|
+
* phases -- evaluate every descriptor, THEN define -- are preserved. That
|
|
52
|
+
* hoist hands this proof an IDENTIFIER where the pre-transform call handed
|
|
53
|
+
* it a literal, and the plan was refused for it: three's `Object3D`
|
|
54
|
+
* constructor defines `position`, `rotation`, `quaternion`, `scale`,
|
|
55
|
+
* `modelViewMatrix` and `normalMatrix` that way, and the receiver `this`
|
|
56
|
+
* was reported escaping through its own lowering.
|
|
57
|
+
*
|
|
58
|
+
* Followed only to a `const` whose single declaration initializes it
|
|
59
|
+
* directly with the literal, and only when nothing else mentions the
|
|
60
|
+
* binding: an alias could otherwise write `d.get = fn` between the `const`
|
|
61
|
+
* and the call, which would turn a data definition into an accessor
|
|
62
|
+
* invocation ON the target and void the premise that the target is not
|
|
63
|
+
* published. Those are exactly the conditions the transform's own output
|
|
64
|
+
* satisfies by construction.
|
|
65
|
+
*/
|
|
66
|
+
const descriptorLiteralOf = (expression) => {
|
|
67
|
+
const value = unwrapErasedExpression(expression);
|
|
68
|
+
if (ts.isObjectLiteralExpression(value))
|
|
69
|
+
return value;
|
|
70
|
+
if (!ts.isIdentifier(value) || soleUseOfBinding === undefined)
|
|
71
|
+
return null;
|
|
72
|
+
const declarations = checker.getSymbolAtLocation(value)?.declarations ?? [];
|
|
73
|
+
const declaration = declarations.length === 1 ? declarations[0] : undefined;
|
|
74
|
+
if (!declaration || !ts.isVariableDeclaration(declaration) || !declaration.initializer)
|
|
75
|
+
return null;
|
|
76
|
+
if ((ts.getCombinedNodeFlags(declaration) & ts.NodeFlags.Const) === 0)
|
|
77
|
+
return null;
|
|
78
|
+
if (!soleUseOfBinding(declaration, value))
|
|
79
|
+
return null;
|
|
80
|
+
const initializer = unwrapErasedExpression(declaration.initializer);
|
|
81
|
+
return ts.isObjectLiteralExpression(initializer) ? initializer : null;
|
|
82
|
+
};
|
|
83
|
+
const descriptor = (expression) => {
|
|
84
|
+
const value = descriptorLiteralOf(expression);
|
|
85
|
+
if (value === null)
|
|
86
|
+
return false;
|
|
87
|
+
let nullPrototype = false;
|
|
88
|
+
const spelled = new Set();
|
|
89
|
+
for (const property of value.properties) {
|
|
90
|
+
if (!ts.isPropertyAssignment(property) && !ts.isShorthandPropertyAssignment(property))
|
|
91
|
+
return false;
|
|
92
|
+
const key = propertyKey(property.name);
|
|
93
|
+
if (key !== null)
|
|
94
|
+
spelled.add(key);
|
|
95
|
+
if (key === '__proto__' &&
|
|
96
|
+
ts.isPropertyAssignment(property) &&
|
|
97
|
+
!ts.isComputedPropertyName(property.name) &&
|
|
98
|
+
unwrapErasedExpression(property.initializer).kind === ts.SyntaxKind.NullKeyword) {
|
|
99
|
+
nullPrototype = true;
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
if (key !== 'value' && key !== 'writable' && key !== 'enumerable' && key !== 'configurable')
|
|
103
|
+
return false;
|
|
104
|
+
if (key === 'value')
|
|
105
|
+
values.push(ts.isPropertyAssignment(property) ? property.initializer : property.name);
|
|
106
|
+
}
|
|
107
|
+
if (!nullPrototype)
|
|
108
|
+
for (const field of DESCRIPTOR_FIELDS)
|
|
109
|
+
if (!spelled.has(field))
|
|
110
|
+
descriptorPrototypeKeys.add(field);
|
|
111
|
+
return true;
|
|
112
|
+
};
|
|
113
|
+
const entry = (key, value) => {
|
|
114
|
+
if (key === null || key === '__proto__' || key === 'constructor' || !descriptor(value))
|
|
115
|
+
return false;
|
|
116
|
+
keys.add(key);
|
|
117
|
+
return true;
|
|
118
|
+
};
|
|
119
|
+
if (member === 'defineProperty') {
|
|
120
|
+
if (call.arguments.length !== 3 || !entry(literalKey(unwrapErasedExpression(call.arguments[1])), call.arguments[2]))
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
if (call.arguments.length !== 2)
|
|
125
|
+
return null;
|
|
126
|
+
const definitions = unwrapErasedExpression(call.arguments[1]);
|
|
127
|
+
if (!ts.isObjectLiteralExpression(definitions) ||
|
|
128
|
+
!definitions.properties.every((property) => ts.isPropertyAssignment(property) && entry(propertyKey(property.name), property.initializer)))
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
return {
|
|
132
|
+
owner,
|
|
133
|
+
member,
|
|
134
|
+
keys: [...keys],
|
|
135
|
+
values,
|
|
136
|
+
returnsTarget: owner === 'Object',
|
|
137
|
+
descriptorPrototypeKeys: [...descriptorPrototypeKeys],
|
|
138
|
+
call
|
|
139
|
+
};
|
|
140
|
+
};
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { FlowInvocationOperands, ReceiverReference, ValueFlowIndex } from './model.js';
|
|
3
|
+
import type { IntrinsicProtocolRequirement } from '../deferred-intrinsic-protocols.js';
|
|
4
|
+
import { type CallableCompletionSummary } from './callable-completions.js';
|
|
5
|
+
import { type SourceInvocationFrameLayout } from './source-invocation-frame-layout.js';
|
|
6
|
+
declare const invocationFactIdentity: unique symbol;
|
|
7
|
+
export interface InvocationValueUses {
|
|
8
|
+
readonly value: ts.Expression;
|
|
9
|
+
readonly parameter: ts.ParameterDeclaration | null;
|
|
10
|
+
/** Only actual arguments inhabit the arguments object. */
|
|
11
|
+
readonly argumentPosition: number | null;
|
|
12
|
+
readonly restElementPosition: number | null;
|
|
13
|
+
/** Defaults conservatively continue only along the undefined-argument branch. */
|
|
14
|
+
readonly activation: 'always' | 'argument-undefined';
|
|
15
|
+
readonly uses: readonly ts.Expression[];
|
|
16
|
+
/** Uses of an actual argument after it is packed into an identifier rest array. */
|
|
17
|
+
readonly elementUses: readonly ts.Expression[];
|
|
18
|
+
}
|
|
19
|
+
export interface SourceInvocationFrame {
|
|
20
|
+
readonly layout: SourceInvocationFrameLayout;
|
|
21
|
+
readonly body: ts.SignatureDeclaration;
|
|
22
|
+
readonly parameters: readonly ts.ParameterDeclaration[];
|
|
23
|
+
readonly receiverUses: readonly ReceiverReference[];
|
|
24
|
+
/** Known body outcomes survive an unresolved exact-result projection. */
|
|
25
|
+
readonly completionSummary: CallableCompletionSummary;
|
|
26
|
+
/** Complete continuation into this body, or a named unsupported frame. */
|
|
27
|
+
readonly forwarding: {
|
|
28
|
+
readonly kind: 'values';
|
|
29
|
+
readonly entries: readonly InvocationValueUses[];
|
|
30
|
+
} | {
|
|
31
|
+
readonly kind: 'unresolved';
|
|
32
|
+
readonly reason: 'spread-arguments' | 'destructured-parameter' | 'arguments-object';
|
|
33
|
+
};
|
|
34
|
+
/** Source normal completions in this call's receiver frame. */
|
|
35
|
+
readonly completions: {
|
|
36
|
+
readonly kind: 'values';
|
|
37
|
+
readonly values: readonly ts.Expression[];
|
|
38
|
+
} | {
|
|
39
|
+
readonly kind: 'unresolved';
|
|
40
|
+
readonly reason: 'optional-call' | 'deferred-or-unnamed-completion' | 'implicit-receiver';
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/** The admitted target set and operand mapping belong to the same proof. */
|
|
44
|
+
export interface SourceInvocationFact {
|
|
45
|
+
readonly [invocationFactIdentity]: true;
|
|
46
|
+
readonly call: ts.CallExpression;
|
|
47
|
+
readonly operands: FlowInvocationOperands;
|
|
48
|
+
readonly frames: readonly SourceInvocationFrame[];
|
|
49
|
+
readonly requirements: readonly IntrinsicProtocolRequirement[];
|
|
50
|
+
}
|
|
51
|
+
/** Only the invocation authority may publish an admitted frame family. */
|
|
52
|
+
export declare const sourceInvocationFact: (call: ts.CallExpression, operands: FlowInvocationOperands, frames: readonly SourceInvocationFrame[], requirements: readonly IntrinsicProtocolRequirement[]) => SourceInvocationFact;
|
|
53
|
+
/**
|
|
54
|
+
* Constructed only by the invocation authority after target admission. Keeping
|
|
55
|
+
* the frame builder separate from admission lets recursive target proofs follow
|
|
56
|
+
* a known body's continuations without pretending the whole invocation closed.
|
|
57
|
+
*/
|
|
58
|
+
export declare const sourceInvocationFrame: (flow: ValueFlowIndex, call: ts.CallExpression, body: ts.SignatureDeclaration, argumentsUsesAt: (body: ts.SignatureDeclaration) => readonly ts.Identifier[] | undefined) => SourceInvocationFrame | null;
|
|
59
|
+
/** Complete uses of an actual operand across every admitted target. */
|
|
60
|
+
export declare const invocationValueUsesOf: (fact: SourceInvocationFact, value: ts.Expression) => readonly ts.Expression[] | null;
|
|
61
|
+
export interface InvocationValueContinuation {
|
|
62
|
+
readonly expression: ts.Expression;
|
|
63
|
+
readonly projection: 'value' | 'array-element';
|
|
64
|
+
}
|
|
65
|
+
/** Complete actual-argument continuations, retaining the rest-array element hop. */
|
|
66
|
+
export declare const invocationValueContinuationsOf: (fact: SourceInvocationFact, value: ts.Expression) => readonly InvocationValueContinuation[] | null;
|
|
67
|
+
export declare const invocationCompletionValuesOf: (fact: SourceInvocationFact) => readonly ts.Expression[] | null;
|
|
68
|
+
/**
|
|
69
|
+
* The parameter cell one actual argument binds to in this body's frame, or
|
|
70
|
+
* `null` when the frame resolves it to no single such cell.
|
|
71
|
+
*
|
|
72
|
+
* Which parameter an argument binds to is this contract's fact. A consumer that
|
|
73
|
+
* asks it of `call.arguments` and `runtimeParametersOf` instead gets a
|
|
74
|
+
* position, and a position is not the fact: it does not know that a spread
|
|
75
|
+
* makes every later slot unknown, that a destructured parameter names no cell
|
|
76
|
+
* at all, or that a body reading its own `arguments` object reaches the
|
|
77
|
+
* argument through a cell no parameter names. The frame states all three as
|
|
78
|
+
* named unresolved reasons, so a projection of it cannot forget one.
|
|
79
|
+
*
|
|
80
|
+
* A rest slot resolves to a parameter whose value is a FRESH ARRAY holding the
|
|
81
|
+
* argument, which is a different cell from the argument; `elementUses` is how
|
|
82
|
+
* the frame says so, and this projection refuses rather than hand back a
|
|
83
|
+
* parameter that does not hold the value asked about.
|
|
84
|
+
*/
|
|
85
|
+
/**
|
|
86
|
+
* The argument this call binds to `parameter`, or null when the frame does not
|
|
87
|
+
* state exactly one.
|
|
88
|
+
*
|
|
89
|
+
* The mirror of `frameForwardedParameterOf`, and it lives beside it for the
|
|
90
|
+
* reason §3 item 1 gives: which argument binds which parameter is the call
|
|
91
|
+
* frame contract's fact, and a consumer that recomputes it from
|
|
92
|
+
* `call.arguments` writes a second spelling that will disagree. A rest element,
|
|
93
|
+
* a destructured element use, or anything but a single stated entry is not one
|
|
94
|
+
* argument and answers null rather than guessing which.
|
|
95
|
+
*/
|
|
96
|
+
export declare const frameForwardedArgumentOf: (checker: ts.TypeChecker, flow: ValueFlowIndex, call: ts.CallExpression, body: ts.SignatureDeclaration, parameter: ts.ParameterDeclaration) => ts.Expression | null;
|
|
97
|
+
export declare const frameForwardedParameterOf: (checker: ts.TypeChecker, flow: ValueFlowIndex, call: ts.CallExpression, body: ts.SignatureDeclaration, value: ts.Expression) => ts.ParameterDeclaration | null;
|
|
98
|
+
export {};
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { callableCompletionSummaryOf, callableCompletionValuesOf } from './callable-completions.js';
|
|
3
|
+
import { isTypePositionReference } from './targets.js';
|
|
4
|
+
import { sourceInvocationFrameLayoutOf } from './source-invocation-frame-layout.js';
|
|
5
|
+
import { unwrapErasedExpression } from '../producers/erasure.js';
|
|
6
|
+
import { argumentsObjectUsesAt } from '../arguments-objects.js';
|
|
7
|
+
const invocationFactIdentity = Symbol('source-invocation-fact');
|
|
8
|
+
/** Only the invocation authority may publish an admitted frame family. */
|
|
9
|
+
export const sourceInvocationFact = (call, operands, frames, requirements) => ({ [invocationFactIdentity]: true, call, operands, frames, requirements });
|
|
10
|
+
/** The frame access is written, deleted, or appears in a destructuring target. */
|
|
11
|
+
const frameWrite = (access) => {
|
|
12
|
+
let target = access;
|
|
13
|
+
let context = target.parent;
|
|
14
|
+
while (ts.isParenthesizedExpression(context) && context.expression === target) {
|
|
15
|
+
target = context;
|
|
16
|
+
context = context.parent;
|
|
17
|
+
}
|
|
18
|
+
if (ts.isBinaryExpression(context) &&
|
|
19
|
+
context.left === target &&
|
|
20
|
+
context.operatorToken.kind >= ts.SyntaxKind.FirstAssignment &&
|
|
21
|
+
context.operatorToken.kind <= ts.SyntaxKind.LastAssignment)
|
|
22
|
+
return true;
|
|
23
|
+
if ((ts.isPrefixUnaryExpression(context) || ts.isPostfixUnaryExpression(context)) &&
|
|
24
|
+
(context.operator === ts.SyntaxKind.PlusPlusToken || context.operator === ts.SyntaxKind.MinusMinusToken))
|
|
25
|
+
return true;
|
|
26
|
+
return (ts.isDeleteExpression(context) ||
|
|
27
|
+
ts.isArrayLiteralExpression(context) ||
|
|
28
|
+
ts.isPropertyAssignment(context) ||
|
|
29
|
+
ts.isShorthandPropertyAssignment(context) ||
|
|
30
|
+
ts.isSpreadElement(context));
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Every read of a callable's own arguments object that can yield an argument.
|
|
34
|
+
* A null result means the object is used in a way whose carried values cannot
|
|
35
|
+
* be represented by a finite invocation frame.
|
|
36
|
+
*/
|
|
37
|
+
const argumentsElementReadsOf = (body, argumentsUsesAt) => {
|
|
38
|
+
const reads = [];
|
|
39
|
+
for (const identifier of argumentsUsesAt(body) ?? []) {
|
|
40
|
+
const access = identifier.parent;
|
|
41
|
+
if (ts.isPropertyAccessExpression(access) && access.expression === identifier && access.name.text === 'length' && !frameWrite(access))
|
|
42
|
+
continue;
|
|
43
|
+
if (ts.isElementAccessExpression(access) && access.expression === identifier && !frameWrite(access)) {
|
|
44
|
+
reads.push(access);
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
return reads;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Constructed only by the invocation authority after target admission. Keeping
|
|
53
|
+
* the frame builder separate from admission lets recursive target proofs follow
|
|
54
|
+
* a known body's continuations without pretending the whole invocation closed.
|
|
55
|
+
*/
|
|
56
|
+
export const sourceInvocationFrame = (flow, call, body, argumentsUsesAt) => {
|
|
57
|
+
const layout = sourceInvocationFrameLayoutOf(flow, call, body);
|
|
58
|
+
const completionSummary = callableCompletionSummaryOf(flow, body);
|
|
59
|
+
if (layout === null || completionSummary === null)
|
|
60
|
+
return null;
|
|
61
|
+
const { parameters, receiverUses, operands } = layout;
|
|
62
|
+
const entries = [];
|
|
63
|
+
const parameterUses = (parameter) => flow.referencesToDeclaration(parameter).filter((reference) => reference !== parameter.name && !isTypePositionReference(reference));
|
|
64
|
+
const frameReads = argumentsElementReadsOf(body, argumentsUsesAt);
|
|
65
|
+
const restPosition = parameters.findIndex((parameter) => parameter.dotDotDotToken !== undefined);
|
|
66
|
+
const restParameter = restPosition < 0 ? undefined : parameters[restPosition];
|
|
67
|
+
const restUses = restParameter && ts.isIdentifier(restParameter.name) ? parameterUses(restParameter) : [];
|
|
68
|
+
for (let position = 0; position < operands.args.length; position++) {
|
|
69
|
+
const value = operands.args[position];
|
|
70
|
+
const parameter = restPosition >= 0 && position >= restPosition ? restParameter : parameters[position];
|
|
71
|
+
const uses = new Set(frameReads ?? []);
|
|
72
|
+
const elementUses = new Set();
|
|
73
|
+
if (restPosition >= 0 && position >= restPosition) {
|
|
74
|
+
for (const use of restUses)
|
|
75
|
+
elementUses.add(use);
|
|
76
|
+
}
|
|
77
|
+
else if (parameter && ts.isIdentifier(parameter.name)) {
|
|
78
|
+
for (const use of parameterUses(parameter))
|
|
79
|
+
uses.add(use);
|
|
80
|
+
}
|
|
81
|
+
entries.push({
|
|
82
|
+
value,
|
|
83
|
+
parameter: parameter ?? null,
|
|
84
|
+
argumentPosition: position,
|
|
85
|
+
restElementPosition: restPosition >= 0 && position >= restPosition ? position - restPosition : null,
|
|
86
|
+
activation: 'always',
|
|
87
|
+
uses: [...uses],
|
|
88
|
+
elementUses: [...elementUses]
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
if (layout.arguments.kind === 'positional')
|
|
92
|
+
for (const slot of layout.arguments.slots)
|
|
93
|
+
if (slot.kind === 'single' && slot.defaultValue && slot.defaultActivation !== 'never' && ts.isIdentifier(slot.parameter.name))
|
|
94
|
+
entries.push({
|
|
95
|
+
value: slot.defaultValue,
|
|
96
|
+
parameter: slot.parameter,
|
|
97
|
+
argumentPosition: null,
|
|
98
|
+
restElementPosition: null,
|
|
99
|
+
activation: 'argument-undefined',
|
|
100
|
+
uses: parameterUses(slot.parameter),
|
|
101
|
+
elementUses: []
|
|
102
|
+
});
|
|
103
|
+
if (layout.receiver.kind === 'expression')
|
|
104
|
+
entries.push({
|
|
105
|
+
value: layout.receiver.expression,
|
|
106
|
+
parameter: null,
|
|
107
|
+
argumentPosition: null,
|
|
108
|
+
restElementPosition: null,
|
|
109
|
+
activation: 'always',
|
|
110
|
+
uses: receiverUses,
|
|
111
|
+
elementUses: []
|
|
112
|
+
});
|
|
113
|
+
// An arrow still evaluates its explicit/member receiver operand, but never
|
|
114
|
+
// binds it to this. Retain the discarded operand's empty continuation.
|
|
115
|
+
if (layout.receiver.kind === 'lexical' && layout.receiver.source === 'arrow' && operands.receiver)
|
|
116
|
+
entries.push({
|
|
117
|
+
value: operands.receiver,
|
|
118
|
+
parameter: null,
|
|
119
|
+
argumentPosition: null,
|
|
120
|
+
restElementPosition: null,
|
|
121
|
+
activation: 'always',
|
|
122
|
+
uses: [],
|
|
123
|
+
elementUses: []
|
|
124
|
+
});
|
|
125
|
+
const forwarding = layout.arguments.kind === 'spread'
|
|
126
|
+
? { kind: 'unresolved', reason: 'spread-arguments' }
|
|
127
|
+
: parameters.some((parameter) => !ts.isIdentifier(parameter.name))
|
|
128
|
+
? { kind: 'unresolved', reason: 'destructured-parameter' }
|
|
129
|
+
: frameReads === null
|
|
130
|
+
? { kind: 'unresolved', reason: 'arguments-object' }
|
|
131
|
+
: { kind: 'values', entries };
|
|
132
|
+
const values = ts.isMethodDeclaration(body) || ts.isFunctionDeclaration(body) || ts.isFunctionExpression(body) || ts.isArrowFunction(body)
|
|
133
|
+
? callableCompletionValuesOf(flow, body)
|
|
134
|
+
: null;
|
|
135
|
+
let completions = { kind: 'unresolved', reason: 'deferred-or-unnamed-completion' };
|
|
136
|
+
if (ts.isCallChain(call))
|
|
137
|
+
completions = { kind: 'unresolved', reason: 'optional-call' };
|
|
138
|
+
else if (values !== null) {
|
|
139
|
+
const returned = [];
|
|
140
|
+
let complete = true;
|
|
141
|
+
for (const value of values) {
|
|
142
|
+
if (unwrapErasedExpression(value).kind === ts.SyntaxKind.ThisKeyword && !ts.isArrowFunction(body)) {
|
|
143
|
+
if (layout.receiver.kind !== 'expression' || layout.receiver.conversion !== 'identity') {
|
|
144
|
+
complete = false;
|
|
145
|
+
break;
|
|
146
|
+
}
|
|
147
|
+
returned.push(layout.receiver.expression);
|
|
148
|
+
}
|
|
149
|
+
else
|
|
150
|
+
returned.push(value);
|
|
151
|
+
}
|
|
152
|
+
completions = complete ? { kind: 'values', values: returned } : { kind: 'unresolved', reason: 'implicit-receiver' };
|
|
153
|
+
}
|
|
154
|
+
return { layout, body, parameters, receiverUses, completionSummary, forwarding, completions };
|
|
155
|
+
};
|
|
156
|
+
/** Complete uses of an actual operand across every admitted target. */
|
|
157
|
+
export const invocationValueUsesOf = (fact, value) => {
|
|
158
|
+
const uses = new Set();
|
|
159
|
+
for (const frame of fact.frames) {
|
|
160
|
+
if (frame.forwarding.kind !== 'values')
|
|
161
|
+
return null;
|
|
162
|
+
const entries = frame.forwarding.entries.filter((entry) => entry.value === value);
|
|
163
|
+
if (entries.length === 0)
|
|
164
|
+
return null;
|
|
165
|
+
for (const entry of entries) {
|
|
166
|
+
if (entry.elementUses.length > 0)
|
|
167
|
+
return null;
|
|
168
|
+
for (const use of entry.uses)
|
|
169
|
+
uses.add(use);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return [...uses];
|
|
173
|
+
};
|
|
174
|
+
/** Complete actual-argument continuations, retaining the rest-array element hop. */
|
|
175
|
+
export const invocationValueContinuationsOf = (fact, value) => {
|
|
176
|
+
const valueUses = new Set();
|
|
177
|
+
const elementUses = new Set();
|
|
178
|
+
for (const frame of fact.frames) {
|
|
179
|
+
if (frame.forwarding.kind !== 'values')
|
|
180
|
+
return null;
|
|
181
|
+
const entries = frame.forwarding.entries.filter((entry) => entry.value === value);
|
|
182
|
+
if (entries.length === 0)
|
|
183
|
+
return null;
|
|
184
|
+
for (const entry of entries) {
|
|
185
|
+
for (const expression of entry.uses)
|
|
186
|
+
valueUses.add(expression);
|
|
187
|
+
for (const expression of entry.elementUses)
|
|
188
|
+
elementUses.add(expression);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return [
|
|
192
|
+
...[...valueUses].map((expression) => ({ expression, projection: 'value' })),
|
|
193
|
+
...[...elementUses].map((expression) => ({ expression, projection: 'array-element' }))
|
|
194
|
+
];
|
|
195
|
+
};
|
|
196
|
+
export const invocationCompletionValuesOf = (fact) => {
|
|
197
|
+
const values = new Set();
|
|
198
|
+
for (const frame of fact.frames) {
|
|
199
|
+
if (frame.completions.kind !== 'values')
|
|
200
|
+
return null;
|
|
201
|
+
for (const value of frame.completions.values)
|
|
202
|
+
values.add(value);
|
|
203
|
+
}
|
|
204
|
+
return [...values];
|
|
205
|
+
};
|
|
206
|
+
/**
|
|
207
|
+
* The parameter cell one actual argument binds to in this body's frame, or
|
|
208
|
+
* `null` when the frame resolves it to no single such cell.
|
|
209
|
+
*
|
|
210
|
+
* Which parameter an argument binds to is this contract's fact. A consumer that
|
|
211
|
+
* asks it of `call.arguments` and `runtimeParametersOf` instead gets a
|
|
212
|
+
* position, and a position is not the fact: it does not know that a spread
|
|
213
|
+
* makes every later slot unknown, that a destructured parameter names no cell
|
|
214
|
+
* at all, or that a body reading its own `arguments` object reaches the
|
|
215
|
+
* argument through a cell no parameter names. The frame states all three as
|
|
216
|
+
* named unresolved reasons, so a projection of it cannot forget one.
|
|
217
|
+
*
|
|
218
|
+
* A rest slot resolves to a parameter whose value is a FRESH ARRAY holding the
|
|
219
|
+
* argument, which is a different cell from the argument; `elementUses` is how
|
|
220
|
+
* the frame says so, and this projection refuses rather than hand back a
|
|
221
|
+
* parameter that does not hold the value asked about.
|
|
222
|
+
*/
|
|
223
|
+
/**
|
|
224
|
+
* The argument this call binds to `parameter`, or null when the frame does not
|
|
225
|
+
* state exactly one.
|
|
226
|
+
*
|
|
227
|
+
* The mirror of `frameForwardedParameterOf`, and it lives beside it for the
|
|
228
|
+
* reason §3 item 1 gives: which argument binds which parameter is the call
|
|
229
|
+
* frame contract's fact, and a consumer that recomputes it from
|
|
230
|
+
* `call.arguments` writes a second spelling that will disagree. A rest element,
|
|
231
|
+
* a destructured element use, or anything but a single stated entry is not one
|
|
232
|
+
* argument and answers null rather than guessing which.
|
|
233
|
+
*/
|
|
234
|
+
export const frameForwardedArgumentOf = (checker, flow, call, body, parameter) => {
|
|
235
|
+
const frame = sourceInvocationFrame(flow, call, body, (owner) => argumentsObjectUsesAt(checker, owner));
|
|
236
|
+
if (!frame || frame.forwarding.kind !== 'values')
|
|
237
|
+
return null;
|
|
238
|
+
const entries = frame.forwarding.entries.filter((entry) => entry.parameter === parameter);
|
|
239
|
+
if (entries.length !== 1)
|
|
240
|
+
return null;
|
|
241
|
+
const entry = entries[0];
|
|
242
|
+
if (entry.restElementPosition !== null || entry.elementUses.length > 0)
|
|
243
|
+
return null;
|
|
244
|
+
return entry.value;
|
|
245
|
+
};
|
|
246
|
+
export const frameForwardedParameterOf = (checker, flow, call, body, value) => {
|
|
247
|
+
const frame = sourceInvocationFrame(flow, call, body, (owner) => argumentsObjectUsesAt(checker, owner));
|
|
248
|
+
if (!frame || frame.forwarding.kind !== 'values')
|
|
249
|
+
return null;
|
|
250
|
+
const entries = frame.forwarding.entries.filter((entry) => entry.value === value);
|
|
251
|
+
if (entries.length !== 1)
|
|
252
|
+
return null;
|
|
253
|
+
const entry = entries[0];
|
|
254
|
+
if (entry.parameter === null || entry.restElementPosition !== null || entry.elementUses.length > 0)
|
|
255
|
+
return null;
|
|
256
|
+
return entry.parameter;
|
|
257
|
+
};
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { type SourceClass, type ValueFlowIndex } from './model.js';
|
|
3
|
+
import type { SharedProvenanceAnswer } from './origin-authority.js';
|
|
4
|
+
export interface ExactClassAllocationOrigins {
|
|
5
|
+
readonly classes: ReadonlySet<SourceClass>;
|
|
6
|
+
/** Alternatives reaching this value, projected when the value is a frame's `this`. */
|
|
7
|
+
readonly constructions: ReadonlyMap<ts.NewExpression, readonly SourceClass[]>;
|
|
8
|
+
}
|
|
9
|
+
export interface SourceConstructionFact {
|
|
10
|
+
readonly call: ts.NewExpression;
|
|
11
|
+
readonly alternatives: readonly SourceClass[];
|
|
12
|
+
}
|
|
13
|
+
export declare const namedDeclarationAt: (checker: ts.TypeChecker, expression: ts.Expression) => ts.Declaration | null;
|
|
14
|
+
/** Keyed by the index alone: this walk reads the index and the AST, nothing a
|
|
15
|
+
* solve can revise, so an answer taken once is the answer. It is asked per
|
|
16
|
+
* heritage clause of every class the receiver walks, which is why it is worth
|
|
17
|
+
* holding onto -- following a constructor through a parameter made each answer
|
|
18
|
+
* cost a frame layout per caller. */
|
|
19
|
+
/**
|
|
20
|
+
* The owned class family `this.constructor` allocates from when `callee` is
|
|
21
|
+
* that spelling inside an instance member of a class-spelled source class,
|
|
22
|
+
* or null: the class and every source subclass in the program
|
|
23
|
+
* (`sourceClassFamilyOf`). The `constructor` slot must still be
|
|
24
|
+
* `Object.prototype.constructor` on every member.
|
|
25
|
+
*/
|
|
26
|
+
export declare const thisConstructorFamilyOf: (checker: ts.TypeChecker, flow: ValueFlowIndex, callee: ts.Expression) => readonly SourceClass[] | null;
|
|
27
|
+
export declare const sourceConstructorSelectionsOf: (checker: ts.TypeChecker, flow: ValueFlowIndex, expression: ts.Expression) => readonly SourceClass[] | null;
|
|
28
|
+
export declare const sourceConstructorReturnValuesOf: (checker: ts.TypeChecker, flow: ValueFlowIndex, owner: SourceClass) => readonly ts.Expression[] | null;
|
|
29
|
+
export type ParameterValuesAt = (parameter: ts.ParameterDeclaration) => readonly ts.Expression[] | null;
|
|
30
|
+
/** Constructor/prototype references must be closed even for a subclass with no
|
|
31
|
+
* visible allocation: handing its constructor elsewhere can create instances
|
|
32
|
+
* with inherited method slots that the local construction list does not name. */
|
|
33
|
+
export declare const classConstructorKeepsInstanceOf: (checker: ts.TypeChecker, flow: ValueFlowIndex, instance: ts.InterfaceType) => boolean;
|
|
34
|
+
/** The complete source constructor proof shared by receiver observations. */
|
|
35
|
+
export declare const ordinarySourceClassInstanceTestOf: (checker: ts.TypeChecker, flow: ValueFlowIndex, expression: ts.BinaryExpression) => boolean;
|
|
36
|
+
/** Actual allocations reaching a held reference through the shared write and
|
|
37
|
+
* factory-return inventory. A checker class type alone cannot establish this:
|
|
38
|
+
* it also admits subclasses and constructors returning alternate objects. */
|
|
39
|
+
/**
|
|
40
|
+
* The family a `this` denotes, injected rather than imported.
|
|
41
|
+
*
|
|
42
|
+
* `this` in a class member denotes an instance of that member's class OR any
|
|
43
|
+
* subclass of it, and enumerating that -- with the proof that no unknown
|
|
44
|
+
* subclass exists -- is `ownedClassReceiverInventoryOf`'s job. This module
|
|
45
|
+
* cannot import it: `owned-class-receivers.ts` and `source-class-data.ts`
|
|
46
|
+
* both import FROM here, so the dependency only runs one way. It arrives as a
|
|
47
|
+
* callback for the same reason `parameterValuesAt` does.
|
|
48
|
+
*/
|
|
49
|
+
export type ThisFamilyAt = (expression: ts.Expression) => ExactClassAllocationOrigins | null;
|
|
50
|
+
/** Complete contents of a source data slot, including its mutation and alias
|
|
51
|
+
* proof. Allocation discovery must not mistake visible writes for all writes. */
|
|
52
|
+
export type BindingValuesAt = (declaration: ts.VariableDeclaration) => readonly ts.Expression[] | null;
|
|
53
|
+
export type FieldValuesAt = (expression: ts.PropertyAccessExpression | ts.ElementAccessExpression) => readonly ts.Expression[] | null;
|
|
54
|
+
/** Complete values produced by a closed source invocation. */
|
|
55
|
+
export type CallCompletionValuesAt = (call: ts.CallExpression) => readonly ts.Expression[] | null;
|
|
56
|
+
/** Every edge of the origin graph is answered by the same enclosing authority.
|
|
57
|
+
* @semanticCategory generic-primitive
|
|
58
|
+
*/
|
|
59
|
+
export interface ClassAllocationAuthority {
|
|
60
|
+
readonly parameterValuesOf: ParameterValuesAt;
|
|
61
|
+
readonly thisFamilyOf: ThisFamilyAt;
|
|
62
|
+
readonly fieldValuesOf: FieldValuesAt;
|
|
63
|
+
readonly bindingValuesOf: BindingValuesAt;
|
|
64
|
+
readonly callCompletionValuesOf: CallCompletionValuesAt;
|
|
65
|
+
/** The complete values an expression holds, or null: the joint value graph's
|
|
66
|
+
* answer. Asked for a destructured binding's reference, which it follows
|
|
67
|
+
* through the record literals `nested` came out of, and for a
|
|
68
|
+
* `new this.constructor()` construction, where a non-null answer is the
|
|
69
|
+
* graph's proof that `this` there holds only the named family's constructions. */
|
|
70
|
+
readonly graphValuesOf?: (expression: ts.Expression) => readonly ts.Expression[] | null;
|
|
71
|
+
/** Publish a cache entry only after the enclosing recursive assumptions settle. */
|
|
72
|
+
readonly whenSettled: (publish: () => void) => void;
|
|
73
|
+
/**
|
|
74
|
+
* Share one answer across every proof holding the same coinductive parks --
|
|
75
|
+
* see `OriginAuthority.sharedAnswerOf`, which is the same function.
|
|
76
|
+
*
|
|
77
|
+
* The caches below are keyed on the authority OBJECT, and every proof mints
|
|
78
|
+
* a fresh one, so they answer a proof's own repeats and nothing else. That
|
|
79
|
+
* is the difference between a walk that runs once per question and one that
|
|
80
|
+
* runs once per (proof, question): a live three.js profile counted 11,363,007
|
|
81
|
+
* seeded-origin solvers built from zero, and charged the resulting Tarjan
|
|
82
|
+
* walk 35% of self time, with this walk the largest named caller.
|
|
83
|
+
*
|
|
84
|
+
* Optional because the answer only depends on the asking proof through its
|
|
85
|
+
* parks and its key functions, which is a property of the authorities this
|
|
86
|
+
* compiler builds rather than of the interface; a caller that cannot promise
|
|
87
|
+
* it (the tests) simply omits it and keeps the per-authority behaviour.
|
|
88
|
+
*/
|
|
89
|
+
readonly sharedAnswerOf?: <T>(identity: string, compute: () => T | null, shareable?: (value: T | null) => boolean) => SharedProvenanceAnswer<T>;
|
|
90
|
+
}
|
|
91
|
+
export declare const exactSourceConstructionOf: (checker: ts.TypeChecker, flow: ValueFlowIndex, call: ts.NewExpression) => SourceConstructionFact | null;
|
|
92
|
+
export declare const exactClassAllocationOriginsOf: (checker: ts.TypeChecker, flow: ValueFlowIndex, expression: ts.Expression, authority: ClassAllocationAuthority) => ExactClassAllocationOrigins | null;
|
|
93
|
+
/**
|
|
94
|
+
* The value a constructor-function member's own `this.<key> = <value>`
|
|
95
|
+
* declares, or null when the declaration is not that shape or does not sit
|
|
96
|
+
* inside a source constructor function.
|
|
97
|
+
*
|
|
98
|
+
* Three's pre-class renderer factories declare every member this way:
|
|
99
|
+
* `function WebGLTextures( _gl, ... ) { function setTexture2D( texture, slot
|
|
100
|
+
* ) { ... } this.setTexture2D = setTexture2D }`. TypeScript files such an
|
|
101
|
+
* assignment's `this.<key>` as the property's OWN declaration -- there is no
|
|
102
|
+
* `MethodDeclaration` to find -- so the former class-only forwarding resolver refused
|
|
103
|
+
* every call through the whole factory family before this recognized the
|
|
104
|
+
* shape at all. Requiring the enclosing function to be `isConstructorFunction`
|
|
105
|
+
* keeps an ordinary assignment to some unrelated object's property
|
|
106
|
+
* (`obj.setSize = ...` where `obj` is not `this` of a source constructor) out
|
|
107
|
+
* of this arm entirely -- that shape is a class-family question this proof
|
|
108
|
+
* does not otherwise ask, and is not what "this member's own declaration" is
|
|
109
|
+
* supposed to mean.
|
|
110
|
+
*/
|
|
111
|
+
export declare const constructorFunctionMemberAssignment: (declaration: ts.Declaration) => {
|
|
112
|
+
readonly value: ts.Expression;
|
|
113
|
+
} | null;
|
|
114
|
+
export interface ClosedConstructorForwardingTarget {
|
|
115
|
+
readonly body: ts.ConstructorDeclaration;
|
|
116
|
+
readonly parameters: readonly ts.ParameterDeclaration[];
|
|
117
|
+
}
|
|
118
|
+
/** An ordinary argument entering a source class constructor reaches its
|
|
119
|
+
* explicit formal slots. Default derived constructors forward the same slots
|
|
120
|
+
* to their base. Unknown constructor identities, replacement returns and
|
|
121
|
+
* arguments/rest aliases remain outside this closed forwarding proof. */
|
|
122
|
+
export declare const closedConstructorForwardingTargetsOf: (checker: ts.TypeChecker, flow: ValueFlowIndex, call: ts.CallExpression | ts.NewExpression, argumentsUsesAt: (declaration: ts.SignatureDeclaration) => readonly ts.Identifier[] | undefined) => readonly ClosedConstructorForwardingTarget[] | null;
|