@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,298 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { outermostErasureOf, unwrapErasedExpression } from '../producers/erasure.js';
|
|
3
|
+
import { constructionYieldsCompletionOf } from './callable-completions.js';
|
|
4
|
+
import { inProgramImportReferencesOf } from './export-importers.js';
|
|
5
|
+
import { isModuleExportedDeclaration, isTypePositionReference, resolveFlowSymbolAlias, returnOwnerOf } from './targets.js';
|
|
6
|
+
/** The static key an object-literal entry is published under, or null when it has none. */
|
|
7
|
+
export const objectLiteralEntryKeyOf = (name) => {
|
|
8
|
+
if (ts.isIdentifier(name) || ts.isStringLiteralLike(name) || ts.isNumericLiteral(name))
|
|
9
|
+
return name.text;
|
|
10
|
+
if (!ts.isComputedPropertyName(name))
|
|
11
|
+
return null;
|
|
12
|
+
const inner = unwrapErasedExpression(name.expression);
|
|
13
|
+
return ts.isStringLiteralLike(inner) || ts.isNumericLiteral(inner) ? inner.text : null;
|
|
14
|
+
};
|
|
15
|
+
/** A function declaration whose binding is reassigned names different functions over time. */
|
|
16
|
+
const bindingWritten = (flow, declaration) => flow
|
|
17
|
+
.writesToDeclaration(declaration)
|
|
18
|
+
.some((write) => write.slot === 'whole' &&
|
|
19
|
+
(write.edge === 'identifier-assignment' || write.edge === 'compound-assignment' || write.edge === 'logical-assignment'));
|
|
20
|
+
/** Whether `node` (already at its outermost erasure) is written rather than read. */
|
|
21
|
+
const isWriteTarget = (node) => {
|
|
22
|
+
const parent = node.parent;
|
|
23
|
+
if (ts.isBinaryExpression(parent) &&
|
|
24
|
+
parent.left === node &&
|
|
25
|
+
parent.operatorToken.kind >= ts.SyntaxKind.FirstAssignment &&
|
|
26
|
+
parent.operatorToken.kind <= ts.SyntaxKind.LastAssignment)
|
|
27
|
+
return true;
|
|
28
|
+
if (ts.isDeleteExpression(parent))
|
|
29
|
+
return true;
|
|
30
|
+
if ((ts.isPrefixUnaryExpression(parent) || ts.isPostfixUnaryExpression(parent)) &&
|
|
31
|
+
(parent.operator === ts.SyntaxKind.PlusPlusToken || parent.operator === ts.SyntaxKind.MinusMinusToken))
|
|
32
|
+
return true;
|
|
33
|
+
if ((ts.isForOfStatement(parent) || ts.isForInStatement(parent)) && parent.initializer === node)
|
|
34
|
+
return true;
|
|
35
|
+
// A destructuring assignment pattern: `[ r.get ] = xs`, `({ a: r.get } = o)`.
|
|
36
|
+
let pattern = node;
|
|
37
|
+
for (;;) {
|
|
38
|
+
const container = pattern.parent;
|
|
39
|
+
if (ts.isArrayLiteralExpression(container) ||
|
|
40
|
+
ts.isObjectLiteralExpression(container) ||
|
|
41
|
+
ts.isSpreadElement(container) ||
|
|
42
|
+
ts.isSpreadAssignment(container) ||
|
|
43
|
+
ts.isParenthesizedExpression(container) ||
|
|
44
|
+
ts.isShorthandPropertyAssignment(container) ||
|
|
45
|
+
(ts.isPropertyAssignment(container) && container.initializer === pattern)) {
|
|
46
|
+
pattern = container;
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
if (pattern === node)
|
|
52
|
+
return false;
|
|
53
|
+
const holder = pattern.parent;
|
|
54
|
+
return ((ts.isBinaryExpression(holder) && holder.left === pattern && holder.operatorToken.kind === ts.SyntaxKind.EqualsToken) ||
|
|
55
|
+
((ts.isForOfStatement(holder) || ts.isForInStatement(holder)) && holder.initializer === pattern));
|
|
56
|
+
};
|
|
57
|
+
const isNullish = (expression) => {
|
|
58
|
+
const value = unwrapErasedExpression(expression);
|
|
59
|
+
return value.kind === ts.SyntaxKind.NullKeyword || (ts.isIdentifier(value) && value.text === 'undefined');
|
|
60
|
+
};
|
|
61
|
+
const proofs = {
|
|
62
|
+
slots: new WeakMap(),
|
|
63
|
+
receiver: new WeakMap()
|
|
64
|
+
};
|
|
65
|
+
const memoized = (checker, flow, root, proof) => {
|
|
66
|
+
let memo = proofs[proof].get(flow);
|
|
67
|
+
if (!memo)
|
|
68
|
+
proofs[proof].set(flow, (memo = new Map()));
|
|
69
|
+
const held = memo.get(root);
|
|
70
|
+
if (held !== undefined)
|
|
71
|
+
return held;
|
|
72
|
+
const answer = proveAliasesClosed(checker, flow, root, proof);
|
|
73
|
+
memo.set(root, answer);
|
|
74
|
+
return answer;
|
|
75
|
+
};
|
|
76
|
+
export const recordAllocationAliasesClosed = (checker, flow, root) => memoized(checker, flow, root, 'slots');
|
|
77
|
+
/**
|
|
78
|
+
* Whether `this`, in a function this literal was written holding, can only
|
|
79
|
+
* ever be one of the literal's own allocations.
|
|
80
|
+
*
|
|
81
|
+
* A function written in place in a literal is reachable only through the
|
|
82
|
+
* literal's slot. If no alias of the literal hands that slot's function out as
|
|
83
|
+
* a value, and every alias reaches only uses this proof enumerates, then every
|
|
84
|
+
* call of the function is `alias.key( ... )`, and its receiver is the literal.
|
|
85
|
+
* Three's `ColorManagement` is such a record: `convert` reads `this.enabled`,
|
|
86
|
+
* and the checker names the literal's `enabled: true` for it -- a name a second
|
|
87
|
+
* literal with a getter under that key would satisfy just as well, which is why
|
|
88
|
+
* the checker's answer alone is not evidence.
|
|
89
|
+
*
|
|
90
|
+
* The walk is the slot proof's, with three differences. A store into a data
|
|
91
|
+
* slot is admitted: it keeps the slot data and hands the record to no one. A
|
|
92
|
+
* call of a slot whose function reads `this` follows that function's every
|
|
93
|
+
* `this` as one more alias, where the slot proof refused it. And an exported
|
|
94
|
+
* cell is followed into every importer (`inProgramImportReferencesOf`). A read
|
|
95
|
+
* of a `this`-reading function as a value still refuses: that is the function
|
|
96
|
+
* leaving the record.
|
|
97
|
+
*/
|
|
98
|
+
export const recordLiteralReceiverClosed = (checker, flow, root) => memoized(checker, flow, root, 'receiver');
|
|
99
|
+
const proveAliasesClosed = (checker, flow, root, proof) => {
|
|
100
|
+
const receiver = proof === 'receiver';
|
|
101
|
+
const slots = new Map();
|
|
102
|
+
const callableOf = (property) => {
|
|
103
|
+
if (ts.isMethodDeclaration(property))
|
|
104
|
+
return property;
|
|
105
|
+
const value = ts.isPropertyAssignment(property) ? unwrapErasedExpression(property.initializer) : null;
|
|
106
|
+
if (value && (ts.isFunctionExpression(value) || ts.isArrowFunction(value)))
|
|
107
|
+
return value;
|
|
108
|
+
const symbol = ts.isShorthandPropertyAssignment(property)
|
|
109
|
+
? checker.getShorthandAssignmentValueSymbol(property)
|
|
110
|
+
: value && ts.isIdentifier(value)
|
|
111
|
+
? checker.getSymbolAtLocation(value)
|
|
112
|
+
: undefined;
|
|
113
|
+
const declaration = resolveFlowSymbolAlias(checker, symbol)?.valueDeclaration;
|
|
114
|
+
return declaration && ts.isFunctionDeclaration(declaration) && !bindingWritten(flow, declaration) ? declaration : null;
|
|
115
|
+
};
|
|
116
|
+
for (const property of root.properties) {
|
|
117
|
+
if (ts.isSpreadAssignment(property) || ts.isGetAccessorDeclaration(property) || ts.isSetAccessorDeclaration(property))
|
|
118
|
+
return false;
|
|
119
|
+
const key = objectLiteralEntryKeyOf(property.name);
|
|
120
|
+
if (key === null)
|
|
121
|
+
return false;
|
|
122
|
+
if (key === '__proto__') {
|
|
123
|
+
// Only a null prototype is closed; any other prototype supplies inherited slots.
|
|
124
|
+
if (!ts.isPropertyAssignment(property) || !isNullish(property.initializer))
|
|
125
|
+
return false;
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
slots.set(key, callableOf(property));
|
|
129
|
+
}
|
|
130
|
+
const seen = new Set();
|
|
131
|
+
const readsReceiver = (callable) => !ts.isArrowFunction(callable) && flow.receiverReferencesToDeclaration(callable).length > 0;
|
|
132
|
+
/** An assignment or increment of a slot -- not a `delete`, and not a destructuring or loop target. */
|
|
133
|
+
const dataStore = (positioned) => {
|
|
134
|
+
const parent = positioned.parent;
|
|
135
|
+
return ((ts.isBinaryExpression(parent) && parent.left === positioned) ||
|
|
136
|
+
ts.isPrefixUnaryExpression(parent) ||
|
|
137
|
+
ts.isPostfixUnaryExpression(parent));
|
|
138
|
+
};
|
|
139
|
+
/** A named slot of an alias: a read is inert; a call runs the slot's callable with the record as `this`. */
|
|
140
|
+
const member = (access, key) => {
|
|
141
|
+
if (key === null || !slots.has(key))
|
|
142
|
+
return false;
|
|
143
|
+
const positioned = outermostErasureOf(access);
|
|
144
|
+
const callable = slots.get(key) ?? null;
|
|
145
|
+
if (isWriteTarget(positioned))
|
|
146
|
+
return receiver && callable === null && dataStore(positioned);
|
|
147
|
+
const parent = positioned.parent;
|
|
148
|
+
const called = (ts.isCallExpression(parent) && parent.expression === positioned) ||
|
|
149
|
+
(ts.isTaggedTemplateExpression(parent) && parent.tag === positioned);
|
|
150
|
+
if (!called)
|
|
151
|
+
return !receiver || callable === null || !readsReceiver(callable);
|
|
152
|
+
if (callable === null)
|
|
153
|
+
return false;
|
|
154
|
+
if (!readsReceiver(callable))
|
|
155
|
+
return true;
|
|
156
|
+
return receiver && flow.receiverReferencesToDeclaration(callable).every(value);
|
|
157
|
+
};
|
|
158
|
+
/** A cell holding the record: every mention of it must be followed. */
|
|
159
|
+
const cell = (declaration) => {
|
|
160
|
+
if (seen.has(declaration))
|
|
161
|
+
return true;
|
|
162
|
+
seen.add(declaration);
|
|
163
|
+
if (!ts.isIdentifier(declaration.name))
|
|
164
|
+
return false;
|
|
165
|
+
const exported = ts.isVariableDeclaration(declaration) &&
|
|
166
|
+
isModuleExportedDeclaration(checker, declaration, checker.getSymbolAtLocation(declaration.name) ?? null);
|
|
167
|
+
if (exported && !receiver)
|
|
168
|
+
return false;
|
|
169
|
+
const references = new Set(flow.referencesToDeclaration(declaration));
|
|
170
|
+
if (exported) {
|
|
171
|
+
const imported = inProgramImportReferencesOf(checker, flow, declaration);
|
|
172
|
+
if (imported === null)
|
|
173
|
+
return false;
|
|
174
|
+
for (const reference of imported)
|
|
175
|
+
references.add(reference);
|
|
176
|
+
}
|
|
177
|
+
for (const reference of references) {
|
|
178
|
+
if (reference === declaration.name)
|
|
179
|
+
continue;
|
|
180
|
+
if (ts.isIdentifier(reference) && (isTypePositionReference(reference) || ts.isTypeQueryNode(reference.parent)))
|
|
181
|
+
continue;
|
|
182
|
+
// The binding itself, not a use of its value: every importer's mention
|
|
183
|
+
// is already among the references above.
|
|
184
|
+
if (exported &&
|
|
185
|
+
(ts.isImportSpecifier(reference.parent) || ts.isImportClause(reference.parent) || ts.isExportSpecifier(reference.parent)))
|
|
186
|
+
continue;
|
|
187
|
+
if (ts.isExportSpecifier(reference.parent) || ts.isShorthandPropertyAssignment(reference.parent))
|
|
188
|
+
return false;
|
|
189
|
+
const positioned = outermostErasureOf(reference);
|
|
190
|
+
const parent = positioned.parent;
|
|
191
|
+
// Overwritten: the cell now holds the assigned value, not this record.
|
|
192
|
+
if (ts.isBinaryExpression(parent) && parent.left === positioned && parent.operatorToken.kind === ts.SyntaxKind.EqualsToken)
|
|
193
|
+
continue;
|
|
194
|
+
if (isWriteTarget(positioned) || !value(reference))
|
|
195
|
+
return false;
|
|
196
|
+
}
|
|
197
|
+
return true;
|
|
198
|
+
};
|
|
199
|
+
const assigned = (target) => {
|
|
200
|
+
const named = unwrapErasedExpression(target);
|
|
201
|
+
if (!ts.isIdentifier(named))
|
|
202
|
+
return false;
|
|
203
|
+
const declaration = flow.targetOf(named)?.declaration;
|
|
204
|
+
return !!declaration && (ts.isVariableDeclaration(declaration) || ts.isParameter(declaration)) && cell(declaration);
|
|
205
|
+
};
|
|
206
|
+
/** Every call of a factory whose `return` carries the record yields it. */
|
|
207
|
+
const callers = (factory) => {
|
|
208
|
+
if (seen.has(factory))
|
|
209
|
+
return true;
|
|
210
|
+
seen.add(factory);
|
|
211
|
+
if (!factory.name || factory.asteriskToken || factory.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.AsyncKeyword))
|
|
212
|
+
return false;
|
|
213
|
+
const references = new Set(flow.referencesToDeclaration(factory));
|
|
214
|
+
if (isModuleExportedDeclaration(checker, factory, checker.getSymbolAtLocation(factory.name) ?? null)) {
|
|
215
|
+
const imported = inProgramImportReferencesOf(checker, flow, factory);
|
|
216
|
+
if (imported === null)
|
|
217
|
+
return false;
|
|
218
|
+
for (const reference of imported)
|
|
219
|
+
references.add(reference);
|
|
220
|
+
}
|
|
221
|
+
for (const reference of references) {
|
|
222
|
+
if (reference === factory.name)
|
|
223
|
+
continue;
|
|
224
|
+
const parent = reference.parent;
|
|
225
|
+
if (ts.isIdentifier(reference) && (isTypePositionReference(reference) || ts.isTypeQueryNode(parent)))
|
|
226
|
+
continue;
|
|
227
|
+
if (ts.isImportSpecifier(parent) || ts.isImportClause(parent) || ts.isNamespaceImport(parent) || ts.isExportSpecifier(parent))
|
|
228
|
+
continue;
|
|
229
|
+
if (ts.isExportAssignment(parent) && !parent.isExportEquals)
|
|
230
|
+
continue;
|
|
231
|
+
// `ns.factory` is indexed under both the access and its name.
|
|
232
|
+
const site = ts.isPropertyAccessExpression(parent) && parent.name === reference ? parent : reference;
|
|
233
|
+
const positioned = outermostErasureOf(site);
|
|
234
|
+
const call = positioned.parent;
|
|
235
|
+
if ((ts.isCallExpression(call) || ts.isNewExpression(call)) && call.expression === positioned) {
|
|
236
|
+
// Under `new`, a non-object completion yields `this` instead.
|
|
237
|
+
if (ts.isNewExpression(call) && !constructionYieldsCompletionOf(flow, factory))
|
|
238
|
+
return false;
|
|
239
|
+
if (!value(call))
|
|
240
|
+
return false;
|
|
241
|
+
continue;
|
|
242
|
+
}
|
|
243
|
+
return false;
|
|
244
|
+
}
|
|
245
|
+
return true;
|
|
246
|
+
};
|
|
247
|
+
const value = (expression) => {
|
|
248
|
+
if (seen.has(expression))
|
|
249
|
+
return true;
|
|
250
|
+
seen.add(expression);
|
|
251
|
+
const parent = expression.parent;
|
|
252
|
+
if (ts.isParenthesizedExpression(parent) ||
|
|
253
|
+
ts.isAsExpression(parent) ||
|
|
254
|
+
ts.isSatisfiesExpression(parent) ||
|
|
255
|
+
ts.isNonNullExpression(parent) ||
|
|
256
|
+
ts.isTypeAssertionExpression(parent))
|
|
257
|
+
return value(parent);
|
|
258
|
+
if (ts.isPropertyAccessExpression(parent) && parent.expression === expression)
|
|
259
|
+
return member(parent, parent.name.text);
|
|
260
|
+
if (ts.isElementAccessExpression(parent) && parent.expression === expression) {
|
|
261
|
+
const argument = unwrapErasedExpression(parent.argumentExpression);
|
|
262
|
+
return member(parent, ts.isStringLiteralLike(argument) || ts.isNumericLiteral(argument) ? argument.text : null);
|
|
263
|
+
}
|
|
264
|
+
if (ts.isBinaryExpression(parent)) {
|
|
265
|
+
const operator = parent.operatorToken.kind;
|
|
266
|
+
if (operator === ts.SyntaxKind.EqualsEqualsEqualsToken || operator === ts.SyntaxKind.ExclamationEqualsEqualsToken)
|
|
267
|
+
return true;
|
|
268
|
+
// Loose equality with anything but null/undefined runs ToPrimitive on the record.
|
|
269
|
+
if (operator === ts.SyntaxKind.EqualsEqualsToken || operator === ts.SyntaxKind.ExclamationEqualsToken)
|
|
270
|
+
return isNullish(parent.left === expression ? parent.right : parent.left);
|
|
271
|
+
if (operator === ts.SyntaxKind.AmpersandAmpersandToken ||
|
|
272
|
+
operator === ts.SyntaxKind.BarBarToken ||
|
|
273
|
+
operator === ts.SyntaxKind.QuestionQuestionToken)
|
|
274
|
+
return value(parent);
|
|
275
|
+
if (operator === ts.SyntaxKind.CommaToken)
|
|
276
|
+
return parent.left === expression || value(parent);
|
|
277
|
+
if (operator === ts.SyntaxKind.EqualsToken && parent.right === expression)
|
|
278
|
+
return assigned(parent.left) && (ts.isExpressionStatement(parent.parent) || value(parent));
|
|
279
|
+
return false;
|
|
280
|
+
}
|
|
281
|
+
if (ts.isConditionalExpression(parent))
|
|
282
|
+
return parent.condition === expression || value(parent);
|
|
283
|
+
if (ts.isPrefixUnaryExpression(parent))
|
|
284
|
+
return parent.operator === ts.SyntaxKind.ExclamationToken;
|
|
285
|
+
if (ts.isTypeOfExpression(parent) || ts.isVoidExpression(parent) || ts.isExpressionStatement(parent))
|
|
286
|
+
return true;
|
|
287
|
+
if ((ts.isIfStatement(parent) || ts.isWhileStatement(parent) || ts.isDoStatement(parent)) && parent.expression === expression)
|
|
288
|
+
return true;
|
|
289
|
+
if (ts.isVariableDeclaration(parent) && parent.initializer === expression)
|
|
290
|
+
return cell(parent);
|
|
291
|
+
if (ts.isReturnStatement(parent)) {
|
|
292
|
+
const owner = returnOwnerOf(parent);
|
|
293
|
+
return !!owner && ts.isFunctionDeclaration(owner) && callers(owner);
|
|
294
|
+
}
|
|
295
|
+
return false;
|
|
296
|
+
};
|
|
297
|
+
return value(root);
|
|
298
|
+
};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Allocation provenance solved one strongly connected component at a time.
|
|
3
|
+
*
|
|
4
|
+
* An origin graph is cyclic wherever storage is reused. Three's
|
|
5
|
+
* `WebGLRenderList.getNextRenderItem` reads `renderItems[ renderItemsIndex ]`
|
|
6
|
+
* into `renderItem`, and on a miss stores a fresh literal back into
|
|
7
|
+
* `renderItems` through that same `renderItem` -- so the element read's
|
|
8
|
+
* origins include the very cell being proven. A depth-first proof that treats
|
|
9
|
+
* a node still being visited as false refuses that pool outright; a plain
|
|
10
|
+
* greatest fixpoint accepts it, but then an origin-only cycle (`a = b; b = a`,
|
|
11
|
+
* which never holds any allocation at all) borrows the literal of a sibling
|
|
12
|
+
* conditional branch and "proves" a value set it never had.
|
|
13
|
+
*
|
|
14
|
+
* The component is the unit that decides. A cycle is admitted exactly when
|
|
15
|
+
* the component itself, or a proven component it depends on, contains a real
|
|
16
|
+
* allocation; an unseeded cycle stays refused. A node that can only ever hold
|
|
17
|
+
* `null`/`undefined` is vacuous: it contributes no allocation and refuses
|
|
18
|
+
* nothing, so a reuse pool initialised to `null` still closes on the literal
|
|
19
|
+
* that fills it.
|
|
20
|
+
*/
|
|
21
|
+
import ts from 'typescript';
|
|
22
|
+
import type { ValueFlowIndex } from './model.js';
|
|
23
|
+
export type SeededOriginVerdict = 'refused' | 'vacuous' | 'allocated';
|
|
24
|
+
/**
|
|
25
|
+
* `null`, the global `undefined`, or `void x`: an origin that holds no object.
|
|
26
|
+
* Three's renderer starts `let currentRenderList = null` and `let _opaqueSort
|
|
27
|
+
* = null`; neither empty slot can be a receiver or a callee, so it widens no
|
|
28
|
+
* value set -- but it must not count as the allocation a set needs either. A
|
|
29
|
+
* local binding that shadows `undefined` has a declaration and is an ordinary
|
|
30
|
+
* cell instead.
|
|
31
|
+
*/
|
|
32
|
+
export declare const isVacuousOrigin: (flow: ValueFlowIndex, expression: ts.Expression) => boolean;
|
|
33
|
+
/** One provenance node as its domain expands it. */
|
|
34
|
+
export interface SeededOriginNode<K> {
|
|
35
|
+
/** This node IS an allocation the domain accepts as a value-set root. */
|
|
36
|
+
readonly seed: boolean;
|
|
37
|
+
/** False when the node's value set cannot be enumerated at all. */
|
|
38
|
+
readonly admitted: boolean;
|
|
39
|
+
/** Every node whose values this node can hold. */
|
|
40
|
+
readonly dependencies: readonly K[];
|
|
41
|
+
}
|
|
42
|
+
export declare const seededOriginSolvers: () => number;
|
|
43
|
+
export declare const seededOriginSolver: <K>(expand: (key: K) => SeededOriginNode<K>) => ((key: K) => SeededOriginVerdict);
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Allocation provenance solved one strongly connected component at a time.
|
|
3
|
+
*
|
|
4
|
+
* An origin graph is cyclic wherever storage is reused. Three's
|
|
5
|
+
* `WebGLRenderList.getNextRenderItem` reads `renderItems[ renderItemsIndex ]`
|
|
6
|
+
* into `renderItem`, and on a miss stores a fresh literal back into
|
|
7
|
+
* `renderItems` through that same `renderItem` -- so the element read's
|
|
8
|
+
* origins include the very cell being proven. A depth-first proof that treats
|
|
9
|
+
* a node still being visited as false refuses that pool outright; a plain
|
|
10
|
+
* greatest fixpoint accepts it, but then an origin-only cycle (`a = b; b = a`,
|
|
11
|
+
* which never holds any allocation at all) borrows the literal of a sibling
|
|
12
|
+
* conditional branch and "proves" a value set it never had.
|
|
13
|
+
*
|
|
14
|
+
* The component is the unit that decides. A cycle is admitted exactly when
|
|
15
|
+
* the component itself, or a proven component it depends on, contains a real
|
|
16
|
+
* allocation; an unseeded cycle stays refused. A node that can only ever hold
|
|
17
|
+
* `null`/`undefined` is vacuous: it contributes no allocation and refuses
|
|
18
|
+
* nothing, so a reuse pool initialised to `null` still closes on the literal
|
|
19
|
+
* that fills it.
|
|
20
|
+
*/
|
|
21
|
+
import ts from 'typescript';
|
|
22
|
+
import { dependencyComponentSolver } from './component-solver.js';
|
|
23
|
+
/**
|
|
24
|
+
* `null`, the global `undefined`, or `void x`: an origin that holds no object.
|
|
25
|
+
* Three's renderer starts `let currentRenderList = null` and `let _opaqueSort
|
|
26
|
+
* = null`; neither empty slot can be a receiver or a callee, so it widens no
|
|
27
|
+
* value set -- but it must not count as the allocation a set needs either. A
|
|
28
|
+
* local binding that shadows `undefined` has a declaration and is an ordinary
|
|
29
|
+
* cell instead.
|
|
30
|
+
*/
|
|
31
|
+
export const isVacuousOrigin = (flow, expression) => expression.kind === ts.SyntaxKind.NullKeyword ||
|
|
32
|
+
ts.isVoidExpression(expression) ||
|
|
33
|
+
(ts.isIdentifier(expression) && expression.text === 'undefined' && !flow.targetOf(expression)?.declaration);
|
|
34
|
+
/**
|
|
35
|
+
* A memoized verdict function over a lazily expanded origin graph. `expand`
|
|
36
|
+
* runs once per reachable key and may record domain facts (roots, stored
|
|
37
|
+
* values) as it goes: every expanded key is reachable from a queried root, and
|
|
38
|
+
* a refusal anywhere on a path refuses every node above it, so an `allocated`
|
|
39
|
+
* root certifies everything expanded on its behalf.
|
|
40
|
+
*/
|
|
41
|
+
/** How many origin solvers this process has built; `GEA_PROOF_STATS` prints it. */
|
|
42
|
+
let solversBuilt = 0;
|
|
43
|
+
export const seededOriginSolvers = () => solversBuilt;
|
|
44
|
+
export const seededOriginSolver = (expand) => {
|
|
45
|
+
solversBuilt++;
|
|
46
|
+
const solve = dependencyComponentSolver((key) => {
|
|
47
|
+
const node = expand(key);
|
|
48
|
+
return { locallyComplete: node.admitted, seed: node.seed, dependencies: node.dependencies };
|
|
49
|
+
}, 'seeded-origin');
|
|
50
|
+
return (key) => {
|
|
51
|
+
const result = solve(key);
|
|
52
|
+
return result.status === 'refused' ? 'refused' : result.grounded ? 'allocated' : 'vacuous';
|
|
53
|
+
};
|
|
54
|
+
};
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { type SourceClass, type ValueFlowIndex } from './model.js';
|
|
3
|
+
import type { ExactClassAllocationOrigins } from './member-call-forwarding.js';
|
|
4
|
+
/**
|
|
5
|
+
* The declaration-only spelling `define-property-source-transform.ts` emits for
|
|
6
|
+
* a `this`-receiver `Object.defineProperties` data descriptor: a bare
|
|
7
|
+
* `/** @type {...} *\/ this.key;` access standing as its own statement.
|
|
8
|
+
*
|
|
9
|
+
* It is the DECLARATION of a data member and executes nothing -- the property
|
|
10
|
+
* is created by the definition call the transform keeps beside it, with that
|
|
11
|
+
* call's own attributes. TypeScript's JS class inference reads it as a member
|
|
12
|
+
* declaration and hands it back as the property's declaration node, so a proof
|
|
13
|
+
* that accepts `this.key = value` and refuses this one is refusing the same
|
|
14
|
+
* fact written in the spelling this compiler itself chose. Three's `LOD`
|
|
15
|
+
* declares `levels` that way, and reading it was the terminal of 35 escapes.
|
|
16
|
+
*/
|
|
17
|
+
export declare const declaredDataMemberAccess: (declaration: ts.Node) => boolean;
|
|
18
|
+
/** A declared descriptor family and a value's allocation family are distinct queries. */
|
|
19
|
+
export type SourceClassFamilyQuery = {
|
|
20
|
+
readonly kind: 'declared';
|
|
21
|
+
readonly receiver: ts.Type;
|
|
22
|
+
} | {
|
|
23
|
+
readonly kind: 'value';
|
|
24
|
+
readonly receiver: ts.Type;
|
|
25
|
+
readonly expression: ts.Expression;
|
|
26
|
+
readonly originsOf: (expression: ts.Expression) => ExactClassAllocationOrigins | null;
|
|
27
|
+
};
|
|
28
|
+
export declare const constructorInstalledMemberDeclarationsOf: (flow: ValueFlowIndex, owner: SourceClass) => ReadonlyMap<string, readonly ts.BinaryExpression[]>;
|
|
29
|
+
/** A source family's inherited constructor slot, with no own override or recorded replacement. */
|
|
30
|
+
export declare const sourceClassConstructorSlotIsOriginal: (checker: ts.TypeChecker, flow: ValueFlowIndex, query: SourceClassFamilyQuery) => boolean;
|
|
31
|
+
export declare const classConstructorSlotIsOriginal: (checker: ts.TypeChecker, flow: ValueFlowIndex, owner: SourceClass) => boolean;
|
|
32
|
+
/** A descriptor-family proof, not a receiver-origin or escape proof. The
|
|
33
|
+
* caller already follows a particular source owner through its aliases.
|
|
34
|
+
* Unrelated function constructors with checker type `any` must not become
|
|
35
|
+
* members of that owner's family merely through structural assignability.
|
|
36
|
+
*/
|
|
37
|
+
export declare const sourceClassDataMemberPlanOf: (checker: ts.TypeChecker, flow: ValueFlowIndex, query: SourceClassFamilyQuery, key: string) => {
|
|
38
|
+
readonly declarations: readonly ts.Declaration[];
|
|
39
|
+
} | null;
|
|
40
|
+
export declare const sourceClassDataMemberOf: (checker: ts.TypeChecker, flow: ValueFlowIndex, receiver: ts.Type, key: string) => boolean;
|
|
41
|
+
/**
|
|
42
|
+
* The source method bodies a key resolves to on this class family.
|
|
43
|
+
*
|
|
44
|
+
* A sibling of `sourceClassDataMemberPlanOf`, deliberately not a widening of
|
|
45
|
+
* it. They answer different questions -- "what plain data does this key hold"
|
|
46
|
+
* and "which bodies does this key dispatch to" -- and a consumer asking the
|
|
47
|
+
* first must keep getting `null` for a method, so they get separate caches as
|
|
48
|
+
* well as separate names.
|
|
49
|
+
*
|
|
50
|
+
* **Slot integrity is not proven here, and that separation is the point.**
|
|
51
|
+
* `ownedClassReceiverInventoryOf` admits a family only when
|
|
52
|
+
* `classConstructorKeepsInstanceOf` holds for every class in it, and that
|
|
53
|
+
* inventory refuses any constructor or prototype reference it cannot explain,
|
|
54
|
+
* `C.prototype.m = other` included. What remains -- an instance-side `a.m = f`
|
|
55
|
+
* -- belongs to whoever holds the construction: the value graph's slot transfer
|
|
56
|
+
* enumerates every write to this key on that allocation and refuses the ones it
|
|
57
|
+
* cannot model. This function answers only which declarations the key names,
|
|
58
|
+
* which is §4's distinction between a virtual callable slot and prototype-slot
|
|
59
|
+
* integrity, kept apart on purpose.
|
|
60
|
+
*/
|
|
61
|
+
export declare const sourceClassCallableMemberPlanOf: (checker: ts.TypeChecker, flow: ValueFlowIndex, query: SourceClassFamilyQuery, key: string) => {
|
|
62
|
+
readonly declarations: readonly ts.Declaration[];
|
|
63
|
+
} | null;
|
|
64
|
+
/** How one family class answers a read of the key: no member anywhere on its
|
|
65
|
+
* chain, a plain data member, or something that runs code or cannot be seen. */
|
|
66
|
+
export type SourceClassKeyRead = 'absent' | 'data' | 'other';
|
|
67
|
+
export interface SourceClassKeyReadPlan {
|
|
68
|
+
/** Every class the receiver can be an instance of, classified for the key. */
|
|
69
|
+
readonly classes: ReadonlyMap<SourceClass, SourceClassKeyRead>;
|
|
70
|
+
/** The declared data member of every `data` class, with its checker carrier. */
|
|
71
|
+
readonly carriers: readonly {
|
|
72
|
+
readonly owner: SourceClass;
|
|
73
|
+
readonly declaration: ts.Declaration;
|
|
74
|
+
readonly type: ts.Type;
|
|
75
|
+
}[];
|
|
76
|
+
/** No class on any family chain has a method, accessor or unseen member for the key. */
|
|
77
|
+
readonly codeFree: boolean;
|
|
78
|
+
/** Every carrier is a primitive, `null` or `undefined`: the read can never yield an object. */
|
|
79
|
+
readonly primitive: boolean;
|
|
80
|
+
/** Some class lacks the key, so its read falls through to the intrinsic Object prototype. */
|
|
81
|
+
readonly needsDefaultPrototype: boolean;
|
|
82
|
+
/** Complete source setters a plain assignment can execute, or null when its effects are opaque. */
|
|
83
|
+
readonly writeBodies: readonly ts.SetAccessorDeclaration[] | null;
|
|
84
|
+
/** Complete source getters a read executes, or null when a read's effects are opaque (a method, an unseen member kind, a bodiless getter). */
|
|
85
|
+
readonly readBodies: readonly ts.GetAccessorDeclaration[] | null;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* A read of `key` through a receiver of this source class family, classified
|
|
89
|
+
* per class -- including keys the receiver's own class never declares.
|
|
90
|
+
*
|
|
91
|
+
* Three's renderer asks every drawable `object.isInstancedMesh` and
|
|
92
|
+
* `object.isSkinnedMesh` (`WebGLRenderLists.js`, `WebGLObjects.js`,
|
|
93
|
+
* `WebGLPrograms.js`, ...). Only `InstancedMesh`/`SkinnedMesh` declare them,
|
|
94
|
+
* and neither is in the three.js app's import graph, so on a `Mesh` the read is simply
|
|
95
|
+
* absent. The read runs no code exactly when no class in the family -- nor
|
|
96
|
+
* any class on its prototype chain up to `Object.prototype` -- has a method
|
|
97
|
+
* or accessor for the key. An absent key further needs the key not to be an
|
|
98
|
+
* `Object.prototype` member and the intrinsic Object prototype intact (the
|
|
99
|
+
* same ledger obligation a record's missing slot pays).
|
|
100
|
+
*
|
|
101
|
+
* `carriers`/`primitive` let a caller that follows the receiver require that
|
|
102
|
+
* the read can never yield the receiver back (`this.self = this`) or a
|
|
103
|
+
* function that captures it. "Absent" states that no class DECLARES the key;
|
|
104
|
+
* an expando store onto an instance is a store the caller's own publication
|
|
105
|
+
* tracking must see. Like the data plan, this assumes a receiver typed as a
|
|
106
|
+
* family class really holds a family instance.
|
|
107
|
+
*/
|
|
108
|
+
export declare const sourceClassKeyReadPlanOf: (checker: ts.TypeChecker, flow: ValueFlowIndex, query: SourceClassFamilyQuery, key: string) => SourceClassKeyReadPlan | null;
|
|
109
|
+
/**
|
|
110
|
+
* Whether any reflective definition anywhere in the program -- `Object.defineProperty`/
|
|
111
|
+
* `defineProperties`, `Reflect.defineProperty`, `x.__defineGetter__`/`__defineSetter__`,
|
|
112
|
+
* a prototype swap, or an unaccounted-for alias of one of the `Object`/`Reflect`
|
|
113
|
+
* mutators -- could install a GETTER under `key` on some object.
|
|
114
|
+
*
|
|
115
|
+
* `sourceClassKeyReadPlanOf` classifies a key from the checker's own STATIC
|
|
116
|
+
* declared members; it has no way to see an accessor a reflective call
|
|
117
|
+
* installs on one instance at runtime, on a class the checker still types as
|
|
118
|
+
* plain data. A member-read proof built on that plan must refuse whenever
|
|
119
|
+
* this holds, however data-only the plan itself says the family is.
|
|
120
|
+
*
|
|
121
|
+
* Deliberately conservative and receiver-blind: it does not try to prove the
|
|
122
|
+
* reflective call's TARGET cannot be one of this proof's family instances --
|
|
123
|
+
* that precision is `class-family-member-read.ts`'s own (unexported)
|
|
124
|
+
* `reflectionMayCreate`, not reused here because importing it would cycle
|
|
125
|
+
* back through `callable-reach.ts`, which `class-family-member-read.ts`
|
|
126
|
+
* itself imports (`closedCallableAuthorityOf`). Over-refusing is always
|
|
127
|
+
* sound: this can only ever make a read refuse, never accept one it should
|
|
128
|
+
* not have. `Object.assign`/`Reflect.set` are deliberately excluded -- both
|
|
129
|
+
* write through [[Set]], which invokes an EXISTING accessor or creates a
|
|
130
|
+
* plain data property, but installs no new one.
|
|
131
|
+
*/
|
|
132
|
+
export declare const reflectiveDefinitionMayInstallGetterOf: (checker: ts.TypeChecker, flow: ValueFlowIndex, key: string) => boolean;
|