@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,66 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
/**
|
|
3
|
+
* The first `this` a function-like body reads in its OWN scope, or `null`.
|
|
4
|
+
*
|
|
5
|
+
* Scoping rules are `bodyReadsThis`'s exactly -- an arrow is walked through,
|
|
6
|
+
* an ordinary nested function is not -- so the keyword this returns is one the
|
|
7
|
+
* enclosing declaration's own frame supplies. Callers need the NODE, not the
|
|
8
|
+
* boolean, when the answer they want is the checker's type of that receiver.
|
|
9
|
+
*/
|
|
10
|
+
export declare const firstOwnThisKeyword: (node: ts.Node) => ts.Node | null;
|
|
11
|
+
/**
|
|
12
|
+
* The type of a `this` read inside an object literal member when the
|
|
13
|
+
* literal's CONTEXT, not the literal, types it -- or `null` for an ordinary
|
|
14
|
+
* member.
|
|
15
|
+
*
|
|
16
|
+
* TypeScript types a literal member's `this` as the literal unless the
|
|
17
|
+
* contextual type carries a `ThisType<T>` marker, and the standard library
|
|
18
|
+
* puts one on every property descriptor: `Object.defineProperty`'s third
|
|
19
|
+
* parameter is `PropertyDescriptor & ThisType<any>`. That is the language
|
|
20
|
+
* stating a fact, not a gap in the checker: a descriptor's `get` or `value`
|
|
21
|
+
* function is installed onto the defineProperty TARGET and entered with
|
|
22
|
+
* whatever object the later lookup resolved on -- `@hono/node-server`
|
|
23
|
+
* installs `text()` onto its request prototype this way, and the object that
|
|
24
|
+
* reaches it is a request, never the descriptor literal. Taking the literal
|
|
25
|
+
* as the receiver declared a convention whose frame is the descriptor record,
|
|
26
|
+
* so the dynamic call through the installed property refused the request it
|
|
27
|
+
* was handed at runtime.
|
|
28
|
+
*
|
|
29
|
+
* Only the `any` answer is read, and only when the literal HAS a context that
|
|
30
|
+
* is not itself `any`: a JS literal with no context also reads `any` at the
|
|
31
|
+
* keyword, but there nothing says the receiver is anyone but the literal
|
|
32
|
+
* (`local-bindings.ts`'s `thisValueTypeOf`). What remains is exactly the
|
|
33
|
+
* declared dynamic boundary, so the frame and the read both take the
|
|
34
|
+
* checker's own `any` -- `structural-receiver.ts` for the frame,
|
|
35
|
+
* `local-bindings.ts` for the read.
|
|
36
|
+
*/
|
|
37
|
+
export declare const contextTypedLiteralThisOf: (checker: ts.TypeChecker, literal: ts.ObjectLiteralExpression, keyword: ts.Node) => ts.Type | null;
|
|
38
|
+
export declare const bodyReadsThis: (node: ts.Node, includeSuper?: boolean) => boolean;
|
|
39
|
+
/**
|
|
40
|
+
* The receiver a signature is invoked with, when the language supplies one
|
|
41
|
+
* that the type system never spells.
|
|
42
|
+
*
|
|
43
|
+
* A non-static class member's `this` is the class instance -- that is what
|
|
44
|
+
* `[[Call]]` binds -- but TypeScript records a `thisParameter` only where one
|
|
45
|
+
* was written down. Reading only the written one leaves every method with a
|
|
46
|
+
* convention that declares no receiver, and a body that then reads `this`
|
|
47
|
+
* from a frame slot its own signature says does not exist.
|
|
48
|
+
*
|
|
49
|
+
* An interface or object-type method member (`ts.MethodSignature`) has the
|
|
50
|
+
* same gap in principle -- `{ start(): boolean }`'s `[[Call]]` still binds
|
|
51
|
+
* whatever object a property access resolved on -- but extending this to
|
|
52
|
+
* that case was tried and reverted: an object-type method's implicit
|
|
53
|
+
* receiver is the very type that contains it, and for an *anonymous* object
|
|
54
|
+
* type (no declared name to anchor a cycle on, unlike a class or interface)
|
|
55
|
+
* that is a genuine self-reference with no nominal carrier for
|
|
56
|
+
* `representation/derive.ts` to fall back on -- it hit that deriver's
|
|
57
|
+
* "recurs without a nominal carrier" guard rather than a carrier. Solving it
|
|
58
|
+
* needs a nominal carrier for a self-referential anonymous shape, which
|
|
59
|
+
* `deriveObject` does not have and this function cannot manufacture.
|
|
60
|
+
*/
|
|
61
|
+
import { type DeclaredMemberCensus } from './structural-declarations.js';
|
|
62
|
+
export declare const createReceiverResolver: (checker: ts.TypeChecker, layoutTypeAt: (node: ts.Node) => ts.Type, declaredMembers?: DeclaredMemberCensus) => {
|
|
63
|
+
implicitReceiverOf: (declaration: ts.SignatureDeclaration) => ts.Type | null;
|
|
64
|
+
declaredMemberSignatureOf: (declaration: ts.MethodDeclaration, literal: ts.ObjectLiteralExpression) => ts.MethodSignature | null;
|
|
65
|
+
};
|
|
66
|
+
export declare const isAsyncSignature: (declaration: ts.SignatureDeclaration | undefined) => boolean;
|
|
@@ -0,0 +1,551 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
// Whether a function-like body reads `this` anywhere in its OWN scope -- an
|
|
3
|
+
// arrow function is walked through (lexical `this`, so an arrow nested
|
|
4
|
+
// inside a method still reads the method's receiver), but a nested ordinary
|
|
5
|
+
// function/method/accessor/class introduces its own `this` binding and is
|
|
6
|
+
// not descended into.
|
|
7
|
+
/**
|
|
8
|
+
* The first `this` a function-like body reads in its OWN scope, or `null`.
|
|
9
|
+
*
|
|
10
|
+
* Scoping rules are `bodyReadsThis`'s exactly -- an arrow is walked through,
|
|
11
|
+
* an ordinary nested function is not -- so the keyword this returns is one the
|
|
12
|
+
* enclosing declaration's own frame supplies. Callers need the NODE, not the
|
|
13
|
+
* boolean, when the answer they want is the checker's type of that receiver.
|
|
14
|
+
*/
|
|
15
|
+
export const firstOwnThisKeyword = (node) => {
|
|
16
|
+
let found = null;
|
|
17
|
+
const visit = (n) => {
|
|
18
|
+
if (found)
|
|
19
|
+
return;
|
|
20
|
+
if (n.kind === ts.SyntaxKind.ThisKeyword) {
|
|
21
|
+
found = n;
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
if (ts.isFunctionDeclaration(n) ||
|
|
25
|
+
ts.isFunctionExpression(n) ||
|
|
26
|
+
ts.isMethodDeclaration(n) ||
|
|
27
|
+
ts.isGetAccessorDeclaration(n) ||
|
|
28
|
+
ts.isSetAccessorDeclaration(n) ||
|
|
29
|
+
ts.isClassLike(n)) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
ts.forEachChild(n, visit);
|
|
33
|
+
};
|
|
34
|
+
ts.forEachChild(node, visit);
|
|
35
|
+
return found;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* The type of a `this` read inside an object literal member when the
|
|
39
|
+
* literal's CONTEXT, not the literal, types it -- or `null` for an ordinary
|
|
40
|
+
* member.
|
|
41
|
+
*
|
|
42
|
+
* TypeScript types a literal member's `this` as the literal unless the
|
|
43
|
+
* contextual type carries a `ThisType<T>` marker, and the standard library
|
|
44
|
+
* puts one on every property descriptor: `Object.defineProperty`'s third
|
|
45
|
+
* parameter is `PropertyDescriptor & ThisType<any>`. That is the language
|
|
46
|
+
* stating a fact, not a gap in the checker: a descriptor's `get` or `value`
|
|
47
|
+
* function is installed onto the defineProperty TARGET and entered with
|
|
48
|
+
* whatever object the later lookup resolved on -- `@hono/node-server`
|
|
49
|
+
* installs `text()` onto its request prototype this way, and the object that
|
|
50
|
+
* reaches it is a request, never the descriptor literal. Taking the literal
|
|
51
|
+
* as the receiver declared a convention whose frame is the descriptor record,
|
|
52
|
+
* so the dynamic call through the installed property refused the request it
|
|
53
|
+
* was handed at runtime.
|
|
54
|
+
*
|
|
55
|
+
* Only the `any` answer is read, and only when the literal HAS a context that
|
|
56
|
+
* is not itself `any`: a JS literal with no context also reads `any` at the
|
|
57
|
+
* keyword, but there nothing says the receiver is anyone but the literal
|
|
58
|
+
* (`local-bindings.ts`'s `thisValueTypeOf`). What remains is exactly the
|
|
59
|
+
* declared dynamic boundary, so the frame and the read both take the
|
|
60
|
+
* checker's own `any` -- `structural-receiver.ts` for the frame,
|
|
61
|
+
* `local-bindings.ts` for the read.
|
|
62
|
+
*/
|
|
63
|
+
export const contextTypedLiteralThisOf = (checker, literal, keyword) => {
|
|
64
|
+
const contextual = checker.getContextualType(literal);
|
|
65
|
+
if (!contextual || (contextual.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) !== 0)
|
|
66
|
+
return null;
|
|
67
|
+
const receiver = checker.getTypeAtLocation(keyword);
|
|
68
|
+
return (receiver.flags & ts.TypeFlags.Any) === 0 ? null : receiver;
|
|
69
|
+
};
|
|
70
|
+
export const bodyReadsThis = (node, includeSuper = false) => {
|
|
71
|
+
let found = false;
|
|
72
|
+
const visit = (n) => {
|
|
73
|
+
if (found)
|
|
74
|
+
return;
|
|
75
|
+
if (n.kind === ts.SyntaxKind.ThisKeyword || (includeSuper && n.kind === ts.SyntaxKind.SuperKeyword)) {
|
|
76
|
+
found = true;
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
// A nested class's heritage and computed names evaluate in the outer
|
|
80
|
+
// scope. Retain the static receiver conservatively for that boundary.
|
|
81
|
+
if (includeSuper && ts.isClassLike(n)) {
|
|
82
|
+
found = true;
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
if (includeSuper && (ts.isMethodDeclaration(n) || ts.isGetAccessorDeclaration(n) || ts.isSetAccessorDeclaration(n))) {
|
|
86
|
+
if (ts.isComputedPropertyName(n.name))
|
|
87
|
+
visit(n.name.expression);
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (ts.isFunctionDeclaration(n) ||
|
|
91
|
+
ts.isFunctionExpression(n) ||
|
|
92
|
+
ts.isMethodDeclaration(n) ||
|
|
93
|
+
ts.isGetAccessorDeclaration(n) ||
|
|
94
|
+
ts.isSetAccessorDeclaration(n) ||
|
|
95
|
+
ts.isClassLike(n)) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
ts.forEachChild(n, visit);
|
|
99
|
+
};
|
|
100
|
+
ts.forEachChild(node, visit);
|
|
101
|
+
return found;
|
|
102
|
+
};
|
|
103
|
+
/**
|
|
104
|
+
* The receiver a signature is invoked with, when the language supplies one
|
|
105
|
+
* that the type system never spells.
|
|
106
|
+
*
|
|
107
|
+
* A non-static class member's `this` is the class instance -- that is what
|
|
108
|
+
* `[[Call]]` binds -- but TypeScript records a `thisParameter` only where one
|
|
109
|
+
* was written down. Reading only the written one leaves every method with a
|
|
110
|
+
* convention that declares no receiver, and a body that then reads `this`
|
|
111
|
+
* from a frame slot its own signature says does not exist.
|
|
112
|
+
*
|
|
113
|
+
* An interface or object-type method member (`ts.MethodSignature`) has the
|
|
114
|
+
* same gap in principle -- `{ start(): boolean }`'s `[[Call]]` still binds
|
|
115
|
+
* whatever object a property access resolved on -- but extending this to
|
|
116
|
+
* that case was tried and reverted: an object-type method's implicit
|
|
117
|
+
* receiver is the very type that contains it, and for an *anonymous* object
|
|
118
|
+
* type (no declared name to anchor a cycle on, unlike a class or interface)
|
|
119
|
+
* that is a genuine self-reference with no nominal carrier for
|
|
120
|
+
* `representation/derive.ts` to fall back on -- it hit that deriver's
|
|
121
|
+
* "recurs without a nominal carrier" guard rather than a carrier. Solving it
|
|
122
|
+
* needs a nominal carrier for a self-referential anonymous shape, which
|
|
123
|
+
* `deriveObject` does not have and this function cannot manufacture.
|
|
124
|
+
*/
|
|
125
|
+
import { emptyDeclaredMemberCensus } from './structural-declarations.js';
|
|
126
|
+
export const createReceiverResolver = (checker, layoutTypeAt, declaredMembers = emptyDeclaredMemberCensus) => {
|
|
127
|
+
/**
|
|
128
|
+
* The member declaration this literal method IMPLEMENTS -- the one the
|
|
129
|
+
* record field's own carrier is built from.
|
|
130
|
+
*
|
|
131
|
+
* ONE authority with two consumers, and they are the two halves of the same
|
|
132
|
+
* store: `declaredMemberReceiverOf` below asks it which receiver the
|
|
133
|
+
* convention carries, and `structural-parts.ts`'s `signatureOf` asks it
|
|
134
|
+
* which RESULT the convention returns for a literal method that annotates
|
|
135
|
+
* none. Both exist because the field and the value assigned into it are
|
|
136
|
+
* derived from different declarations, and any component of the convention
|
|
137
|
+
* the two derive separately is a store C++ has no conversion for.
|
|
138
|
+
*
|
|
139
|
+
* A record field's C++ carrier comes from the member signature of the type
|
|
140
|
+
* the literal is checked against -- for `type Demo = { render(t: number):
|
|
141
|
+
* void }` that is the `MethodSignature`, which the type-literal branch below
|
|
142
|
+
* gives a receiver. The literal's own `render(t) { ... }` derives its
|
|
143
|
+
* callable from its `MethodDeclaration` instead, and the `bodyReadsThis`
|
|
144
|
+
* gate below answers that one `null` whenever the body happens not to
|
|
145
|
+
* mention `this`. Two rules, one member: the field is
|
|
146
|
+
* `CallableObject<void(Self, double)>` and the value assigned into it is
|
|
147
|
+
* `CallableObject<void(double)>`, which is not a conversion C++ has -- the
|
|
148
|
+
* emitted unit is rejected at the store. (`examples/canvas-3d-cube`'s
|
|
149
|
+
* `createCanvasCubeDemo` is exactly this; so is a 20-line reproducer.)
|
|
150
|
+
*
|
|
151
|
+
* So when the body does not settle the question, the DECLARED member does --
|
|
152
|
+
* by asking this same function about that member's own declaration, so there
|
|
153
|
+
* is one rule rather than a second copy of it here. That answer is `null`
|
|
154
|
+
* for every shape the branches below refuse (an interface member, a type
|
|
155
|
+
* literal with no enclosing alias), which is what keeps this additive: a
|
|
156
|
+
* literal whose declared member carries no receiver still derives none, and
|
|
157
|
+
* a literal with no contextual type at all is untouched.
|
|
158
|
+
*/
|
|
159
|
+
const declaredMemberSignatureOf = (declaration, literal) => {
|
|
160
|
+
const contextual = checker.getContextualType(literal);
|
|
161
|
+
if (!contextual)
|
|
162
|
+
return null;
|
|
163
|
+
// Matched on the member's own SYMBOL, not on its written name. A computed
|
|
164
|
+
// well-known-symbol member (`[Symbol.iterator]() { ... }`) has no
|
|
165
|
+
// identifier or string name to look up, and reading only the two written
|
|
166
|
+
// spellings left exactly that member unmatched -- so a cursor factory
|
|
167
|
+
// whose body never says `this` took no receiver while the member it
|
|
168
|
+
// implements (`type TypedSource = { [Symbol.iterator](): TypedCursor }`,
|
|
169
|
+
// whose alias branch below DOES give one) took the source's, and the two
|
|
170
|
+
// conventions for one member had no conversion between them
|
|
171
|
+
// (`typed-custom-iterator-close.ts`). `escapedName` is the checker's own
|
|
172
|
+
// key for both sides, `__@iterator` included, so the two are compared the
|
|
173
|
+
// way the checker compares them rather than by re-deriving a name.
|
|
174
|
+
const own = checker.getSymbolAtLocation(declaration.name);
|
|
175
|
+
if (!own)
|
|
176
|
+
return null;
|
|
177
|
+
const member = contextual.getProperties().find((candidate) => candidate.escapedName === own.escapedName);
|
|
178
|
+
return member?.declarations?.find(ts.isMethodSignature) ?? null;
|
|
179
|
+
};
|
|
180
|
+
const declaredMemberReceiverOf = (declaration, literal) => {
|
|
181
|
+
const signature = declaredMemberSignatureOf(declaration, literal);
|
|
182
|
+
return signature ? implicitReceiverOf(signature) : null;
|
|
183
|
+
};
|
|
184
|
+
/**
|
|
185
|
+
* The ordinary function whose `this` a `this.X = function () {}` initializer
|
|
186
|
+
* is entered with -- or `null` when the function is not installed that way.
|
|
187
|
+
*
|
|
188
|
+
* Only an ordinary function/method introduces a `this` binding, so an arrow
|
|
189
|
+
* between the assignment and the host is walked THROUGH (its `this` is the
|
|
190
|
+
* host's), exactly as `bodyReadsThis` walks through one. The nearest such
|
|
191
|
+
* host is the answer even when the assignment is nested inside another
|
|
192
|
+
* `this.Y = function () {}`: that inner function is then the object whose
|
|
193
|
+
* `this` the assignment writes.
|
|
194
|
+
*/
|
|
195
|
+
const installedThisMethodHostOf = (declaration) => {
|
|
196
|
+
const assignment = declaration.parent;
|
|
197
|
+
if (!ts.isBinaryExpression(assignment) || assignment.operatorToken.kind !== ts.SyntaxKind.EqualsToken)
|
|
198
|
+
return null;
|
|
199
|
+
if (assignment.right !== declaration)
|
|
200
|
+
return null;
|
|
201
|
+
const target = assignment.left;
|
|
202
|
+
if (!ts.isPropertyAccessExpression(target) && !ts.isElementAccessExpression(target))
|
|
203
|
+
return null;
|
|
204
|
+
if (target.expression.kind !== ts.SyntaxKind.ThisKeyword)
|
|
205
|
+
return null;
|
|
206
|
+
for (let scope = assignment.parent; scope; scope = scope.parent) {
|
|
207
|
+
if (ts.isFunctionDeclaration(scope) || ts.isFunctionExpression(scope) || ts.isMethodDeclaration(scope))
|
|
208
|
+
return scope;
|
|
209
|
+
if (ts.isClassLike(scope) || ts.isSourceFile(scope))
|
|
210
|
+
return null;
|
|
211
|
+
}
|
|
212
|
+
return null;
|
|
213
|
+
};
|
|
214
|
+
/**
|
|
215
|
+
* The constructor function whose OWN "prototype" object this function
|
|
216
|
+
* expression/declaration is installed directly onto -- `F.prototype.n =
|
|
217
|
+
* function () {...}` (or the element-access spelling, `F.prototype['n'] =
|
|
218
|
+
* ...`) -- or `null` when it is not installed that way.
|
|
219
|
+
*
|
|
220
|
+
* ECMA-262 10.2.5 MakeConstructor gives every ordinary function a real,
|
|
221
|
+
* mutable "prototype" object, and `new F()`'s instance has that object as
|
|
222
|
+
* its `[[Prototype]]` (10.2.2 OrdinaryCreateFromConstructor) -- so a
|
|
223
|
+
* function reached by walking that chain (`g.get()` for
|
|
224
|
+
* `G.prototype.get = function () { return this.v }`) is entered with the
|
|
225
|
+
* INSTANCE as `this`, not with `G.prototype` itself. Distinct from
|
|
226
|
+
* `installedThisMethodHostOf`'s `this.X = function(){}` pattern: that one
|
|
227
|
+
* runs INSIDE an enclosing function whose own receiver is what the
|
|
228
|
+
* assignment writes onto, while this is a plain top-level statement naming
|
|
229
|
+
* the constructor by its own binding, with no enclosing function to walk
|
|
230
|
+
* out to and no `this` anywhere in the assignment's own target.
|
|
231
|
+
*/
|
|
232
|
+
const prototypeMethodConstructorOf = (declaration) => {
|
|
233
|
+
const assignment = declaration.parent;
|
|
234
|
+
if (!ts.isBinaryExpression(assignment) || assignment.operatorToken.kind !== ts.SyntaxKind.EqualsToken)
|
|
235
|
+
return null;
|
|
236
|
+
if (assignment.right !== declaration)
|
|
237
|
+
return null;
|
|
238
|
+
const target = assignment.left;
|
|
239
|
+
if (!ts.isPropertyAccessExpression(target) && !ts.isElementAccessExpression(target))
|
|
240
|
+
return null;
|
|
241
|
+
const prototypeAccess = target.expression;
|
|
242
|
+
if (!ts.isPropertyAccessExpression(prototypeAccess) || prototypeAccess.name.text !== 'prototype')
|
|
243
|
+
return null;
|
|
244
|
+
return checker.getTypeAtLocation(prototypeAccess.expression);
|
|
245
|
+
};
|
|
246
|
+
/**
|
|
247
|
+
* The receiver an ordinary JavaScript function is entered with, for the one
|
|
248
|
+
* shape where the language supplies one the type system never spells: the
|
|
249
|
+
* pre-`class` constructor function three.js's renderer is built out of.
|
|
250
|
+
*
|
|
251
|
+
* `function WebGLClipping( properties ) { this.uniform = uniform; ... }`,
|
|
252
|
+
* invoked as `new WebGLClipping(...)`. TypeScript's own JS inference already
|
|
253
|
+
* gives such a function BOTH a call signature and exactly one construct
|
|
254
|
+
* signature, and gives the construct signature's return type ("Constructed")
|
|
255
|
+
* the property set those `this.x = ` assignments produce -- so the receiver
|
|
256
|
+
* is not derived here, it is READ from the construct signature the checker
|
|
257
|
+
* already resolved. Without it the convention declares no receiver while the
|
|
258
|
+
* body reads `this` from a frame slot that does not exist, and the whole
|
|
259
|
+
* body is withheld: ten of them in one program (`WebGLTextures`,
|
|
260
|
+
* `WebGLProgram`, `WebGLShadowMap`, `WebGLClipping`, ...), which is the
|
|
261
|
+
* renderer.
|
|
262
|
+
*
|
|
263
|
+
* The candidate rule: exactly one construct signature and at least one
|
|
264
|
+
* call signature. Zero call signatures is a real constructor (a class, or
|
|
265
|
+
* `constructor-value-dispatch`), which needs none of this; more than one
|
|
266
|
+
* construct signature is an overload set no single frame answers for. An
|
|
267
|
+
* arrow is never a candidate -- ECMA-262 15.3 gives it no `[[Construct]]`,
|
|
268
|
+
* so the checker never gives one a construct signature.
|
|
269
|
+
*
|
|
270
|
+
* A function INSTALLED as a method (`this.setState = function ( material )
|
|
271
|
+
* { this.numPlanes += n; }`) is the case this must not read its own
|
|
272
|
+
* construct signature for. TypeScript's constructor-function inference fires
|
|
273
|
+
* on it too -- any function with top-level `this.x = ` writes gets a
|
|
274
|
+
* construct signature, and its "Constructed" type is the subset of fields
|
|
275
|
+
* IT assigns (`{ numPlanes, numIntersection }` for `setState`) -- but that
|
|
276
|
+
* type is a fiction as a receiver: at runtime `this` inside it is the whole
|
|
277
|
+
* instance, because the only way the program reaches it is
|
|
278
|
+
* `scope.setState( material )`. Reading its own construct signature there
|
|
279
|
+
* would declare a convention taking a two-field record while every call site
|
|
280
|
+
* passes the instance. So the host's Constructed type answers for it, which
|
|
281
|
+
* is what the call actually passes.
|
|
282
|
+
*/
|
|
283
|
+
const jsConstructorReceiverOf = (declaration) => {
|
|
284
|
+
if (!ts.isFunctionDeclaration(declaration) && !ts.isFunctionExpression(declaration))
|
|
285
|
+
return null;
|
|
286
|
+
if (!declaration.body || !bodyReadsThis(declaration.body))
|
|
287
|
+
return null;
|
|
288
|
+
const host = installedThisMethodHostOf(declaration);
|
|
289
|
+
if (host !== null)
|
|
290
|
+
return jsConstructorReceiverOf(host);
|
|
291
|
+
// A `function` expression stored as an object literal's PROPERTY
|
|
292
|
+
// (`{ m: function () { return this } }`) is the literal's method spelled
|
|
293
|
+
// the ES5 way: `o.m()` binds `this` to the literal, and the checker types
|
|
294
|
+
// the keyword in the body as the literal. Only the spelling differs from
|
|
295
|
+
// `implicitReceiverOf`'s `MethodDeclaration` branch, so it takes the same
|
|
296
|
+
// receiver, behind the same `bodyReadsThis` gate (above) and for the same
|
|
297
|
+
// reason: a body that never mentions `this` says nothing about the frame,
|
|
298
|
+
// and granting every property-held function a receiver would walk the
|
|
299
|
+
// enclosing literal for essentially every one in a real program.
|
|
300
|
+
const owner = ts.isFunctionExpression(declaration) && ts.isPropertyAssignment(declaration.parent) && declaration.parent.initializer === declaration
|
|
301
|
+
? declaration.parent.parent
|
|
302
|
+
: null;
|
|
303
|
+
if (owner && ts.isObjectLiteralExpression(owner))
|
|
304
|
+
return overriddenLiteralReceiverOf(declaration, owner) ?? layoutTypeAt(owner);
|
|
305
|
+
const prototypeConstructor = prototypeMethodConstructorOf(declaration);
|
|
306
|
+
if (prototypeConstructor !== null) {
|
|
307
|
+
const construct = prototypeConstructor.getConstructSignatures();
|
|
308
|
+
if (construct.length !== 1)
|
|
309
|
+
return null;
|
|
310
|
+
const constructed = construct[0];
|
|
311
|
+
return constructed ? constructed.getReturnType() : null;
|
|
312
|
+
}
|
|
313
|
+
const type = checker.getTypeAtLocation(declaration);
|
|
314
|
+
const construct = type.getConstructSignatures();
|
|
315
|
+
const constructed = type.getCallSignatures().length === 0 || construct.length !== 1 ? undefined : construct[0];
|
|
316
|
+
if (constructed)
|
|
317
|
+
return constructed.getReturnType();
|
|
318
|
+
return implicitAnyReceiverOf(declaration);
|
|
319
|
+
};
|
|
320
|
+
/**
|
|
321
|
+
* The receiver of an ordinary function the language supplies and the type
|
|
322
|
+
* system spells only as `any`.
|
|
323
|
+
*
|
|
324
|
+
* `function replacement(value) { return `${this}:${value}` }`, installed as
|
|
325
|
+
* six different callables' own `call` property: every branch above answers
|
|
326
|
+
* `null` for it -- there is no enclosing literal, no `this.x =` host, no
|
|
327
|
+
* `F.prototype.m =` owner, and no construct signature, because the body
|
|
328
|
+
* never writes a field. Its `this` is nonetheless real at runtime, and the
|
|
329
|
+
* checker already says what it knows about it: `any`. Reading that answer
|
|
330
|
+
* rather than inventing one keeps this the checker's fact, and keeps it
|
|
331
|
+
* narrow -- a body whose `this` the checker types as anything CONCRETE is
|
|
332
|
+
* a shape one of the branches above is meant to resolve, and inventing a
|
|
333
|
+
* boxed receiver for it would box a value that has a static type.
|
|
334
|
+
*
|
|
335
|
+
* Without it the convention declares no receiver while the body reads one,
|
|
336
|
+
* which lowering refuses by name; so this can only turn a refused program
|
|
337
|
+
* into an emitted one.
|
|
338
|
+
*/
|
|
339
|
+
const implicitAnyReceiverOf = (declaration) => {
|
|
340
|
+
if (!declaration.body)
|
|
341
|
+
return null;
|
|
342
|
+
const keyword = firstOwnThisKeyword(declaration.body);
|
|
343
|
+
if (keyword === null)
|
|
344
|
+
return null;
|
|
345
|
+
const receiver = checker.getTypeAtLocation(keyword);
|
|
346
|
+
return (receiver.flags & ts.TypeFlags.Any) === 0 ? null : receiver;
|
|
347
|
+
};
|
|
348
|
+
/**
|
|
349
|
+
* The receiver the callable type of a DECLARED member carries.
|
|
350
|
+
*
|
|
351
|
+
* `interface GetterCursor { readonly next: () => Step }` spells a member
|
|
352
|
+
* whose type is a callable, and the two spellings `next(): Step` and
|
|
353
|
+
* `readonly next: () => Step` are the same member as far as `o.next()` is
|
|
354
|
+
* concerned -- ECMA-262 binds `o` as the receiver either way. So the same
|
|
355
|
+
* census answers both: this member carries a receiver iff the value some
|
|
356
|
+
* implementer stores into it does. Without it the implementer's
|
|
357
|
+
* `function (this: GetterCursor) { ... }` derives a callable WITH a frame
|
|
358
|
+
* slot while the slot it is stored into derives one without, and that store
|
|
359
|
+
* is not a conversion C++ has (`typed-custom-iterator-receiver.runtime.ts`).
|
|
360
|
+
*
|
|
361
|
+
* Program-declared only, for the same reason the `MethodSignature` branch is:
|
|
362
|
+
* a standard-library member is backed by the native intrinsic protocols,
|
|
363
|
+
* which carry their receiver separately from a JavaScript callable's frame.
|
|
364
|
+
*/
|
|
365
|
+
const declaredMemberCallableReceiverOf = (member) => {
|
|
366
|
+
if (!declaredMembers.implementationReadsReceiver(member))
|
|
367
|
+
return null;
|
|
368
|
+
const owner = member.declarations?.[0]?.parent;
|
|
369
|
+
if (!owner || !ts.isInterfaceDeclaration(owner) || owner.getSourceFile().hasNoDefaultLib)
|
|
370
|
+
return null;
|
|
371
|
+
const declared = checker.getSymbolAtLocation(owner.name);
|
|
372
|
+
return declared ? checker.getDeclaredTypeOfSymbol(declared) : null;
|
|
373
|
+
};
|
|
374
|
+
/**
|
|
375
|
+
* The same answer, reached from either NODE that spells one member's
|
|
376
|
+
* callable type: the member's own `readonly next: () => Step`, and the
|
|
377
|
+
* implementing `get next(): () => Step`'s return annotation. They are two
|
|
378
|
+
* spellings of one type, so a receiver on one and none on the other is the
|
|
379
|
+
* store the whole census exists to remove -- and the getter's annotation is
|
|
380
|
+
* the node the `return function (this: GetterCursor) {...}` inside it is
|
|
381
|
+
* actually converted to.
|
|
382
|
+
*/
|
|
383
|
+
const declaredCallableMemberReceiverOf = (declaration) => {
|
|
384
|
+
const holder = declaration.parent;
|
|
385
|
+
if (ts.isPropertySignature(holder)) {
|
|
386
|
+
const member = checker.getSymbolAtLocation(holder.name);
|
|
387
|
+
return member ? declaredMemberCallableReceiverOf(member) : null;
|
|
388
|
+
}
|
|
389
|
+
if (!ts.isGetAccessorDeclaration(holder) || holder.type !== declaration)
|
|
390
|
+
return null;
|
|
391
|
+
const member = declaredMembers.declaredMemberImplementedBy(holder.name);
|
|
392
|
+
return member ? declaredMemberCallableReceiverOf(member) : null;
|
|
393
|
+
};
|
|
394
|
+
const overriddenLiteralReceiverOf = (declaration, literal) => {
|
|
395
|
+
if (!('body' in declaration) || !declaration.body)
|
|
396
|
+
return null;
|
|
397
|
+
const keyword = firstOwnThisKeyword(declaration.body);
|
|
398
|
+
return keyword === null ? null : contextTypedLiteralThisOf(checker, literal, keyword);
|
|
399
|
+
};
|
|
400
|
+
const implicitReceiverOf = (declaration) => {
|
|
401
|
+
if (!ts.isMethodDeclaration(declaration) &&
|
|
402
|
+
!ts.isGetAccessorDeclaration(declaration) &&
|
|
403
|
+
!ts.isSetAccessorDeclaration(declaration) &&
|
|
404
|
+
!ts.isMethodSignature(declaration)) {
|
|
405
|
+
if (ts.isFunctionTypeNode(declaration))
|
|
406
|
+
return declaredCallableMemberReceiverOf(declaration);
|
|
407
|
+
return jsConstructorReceiverOf(declaration);
|
|
408
|
+
}
|
|
409
|
+
const parent = declaration.parent;
|
|
410
|
+
if ((ts.getCombinedModifierFlags(declaration) & ts.ModifierFlags.Static) !== 0) {
|
|
411
|
+
// A receiver-free implementation must not demand conversion of a
|
|
412
|
+
// derived constructor into its declaring constructor at inherited calls.
|
|
413
|
+
// Include parameter initializers and lexical arrows; super calls also
|
|
414
|
+
// consume the current receiver even without an explicit `this` token.
|
|
415
|
+
// A declaration without a body provides no such implementation proof.
|
|
416
|
+
if (!ts.isMethodSignature(declaration) && declaration.body && !bodyReadsThis(declaration, true))
|
|
417
|
+
return null;
|
|
418
|
+
// A static method still receives `this`; its value is the class
|
|
419
|
+
// constructor object rather than an instance. TypeScript does not spell
|
|
420
|
+
// that implicit receiver as a `thisParameter`, just as it does not spell
|
|
421
|
+
// the instance receiver below. Read the owning class's value-side type so
|
|
422
|
+
// the callable ABI, its call site, and a body-side `this` all carry the
|
|
423
|
+
// same constructor-family value.
|
|
424
|
+
if (!ts.isClassLike(parent))
|
|
425
|
+
return null;
|
|
426
|
+
// An ANONYMOUS class expression (`var C = class { static get m() {
|
|
427
|
+
// return this.#x } }`) has no name node to ask a symbol of, and the
|
|
428
|
+
// checker answers no symbol for the expression node itself; asking the
|
|
429
|
+
// expression's own TYPE gives its value side -- the constructor type --
|
|
430
|
+
// directly, which is exactly what the named path reads through the
|
|
431
|
+
// symbol. (A class DECLARATION's node type is its instance type, so the
|
|
432
|
+
// symbol path stays for it.)
|
|
433
|
+
if (ts.isClassExpression(parent) && !parent.name)
|
|
434
|
+
return checker.getTypeAtLocation(parent);
|
|
435
|
+
const symbol = checker.getSymbolAtLocation(parent.name ?? parent);
|
|
436
|
+
return symbol ? checker.getTypeOfSymbolAtLocation(symbol, parent) : null;
|
|
437
|
+
}
|
|
438
|
+
// An object literal's own *method*. Unlike an accessor (below, still
|
|
439
|
+
// unconditional -- an accessor's member type in the containing shape is
|
|
440
|
+
// the property's type, not this signature, so walking the literal never
|
|
441
|
+
// re-enters through it, exactly as before this patch), a method member's
|
|
442
|
+
// type IS its signature, so `objectShapeOf`'s member walk calls straight
|
|
443
|
+
// back into `signatureOf` for it -- and granting EVERY method a receiver
|
|
444
|
+
// regardless of whether its body reads `this` reaches `typeOf` on the
|
|
445
|
+
// enclosing literal for essentially every method-bearing object literal in
|
|
446
|
+
// a real program. Gating on `bodyReadsThis` scopes the eager anchor
|
|
447
|
+
// (`translate`'s plain-object branch, edit 6) to genuinely
|
|
448
|
+
// self-referential literals only -- the blocker shape this
|
|
449
|
+
// mechanism exists for -- and leaves an ordinary method-bearing literal's
|
|
450
|
+
// identity, and every downstream consumer of it, completely untouched.
|
|
451
|
+
if (ts.isObjectLiteralExpression(parent)) {
|
|
452
|
+
const overridden = overriddenLiteralReceiverOf(declaration, parent);
|
|
453
|
+
if (overridden !== null)
|
|
454
|
+
return overridden;
|
|
455
|
+
if (ts.isMethodDeclaration(declaration)) {
|
|
456
|
+
if (declaration.body && bodyReadsThis(declaration.body))
|
|
457
|
+
return layoutTypeAt(parent);
|
|
458
|
+
// The body does not read `this`, so it says nothing about the frame.
|
|
459
|
+
// The member this method implements does -- see
|
|
460
|
+
// `declaredMemberReceiverOf` above.
|
|
461
|
+
return declaredMemberReceiverOf(declaration, parent);
|
|
462
|
+
}
|
|
463
|
+
return layoutTypeAt(parent);
|
|
464
|
+
}
|
|
465
|
+
// An interface's own signature member has NO body of its own, so there is
|
|
466
|
+
// no `this`-reading body to gate on the way an object literal's method is
|
|
467
|
+
// gated. Granting one a receiver UNCONDITIONALLY is actively harmful, and
|
|
468
|
+
// that is measured, not feared: it costs `overload-set-as-value.ts` and
|
|
469
|
+
// `control-flow-structural-view.ts`, whose members no implementer reads a
|
|
470
|
+
// receiver for. This file said so, and it was retried anyway.
|
|
471
|
+
//
|
|
472
|
+
// But answering `null` unconditionally is the same defect mirrored: it let
|
|
473
|
+
// the SPELLING of a declaration decide the calling convention, so the
|
|
474
|
+
// implementing literal's `next() { return this.label }` took a receiver
|
|
475
|
+
// while the interface member it satisfies took none, and storing one into
|
|
476
|
+
// the other is a conversion between two conventions C++ does not have
|
|
477
|
+
// (`typed-custom-iterator-receiver.runtime.ts`). One member, one answer.
|
|
478
|
+
//
|
|
479
|
+
// The proof a `MethodSignature` lacks is held by its IMPLEMENTERS, which is
|
|
480
|
+
// what `censusDeclaredMembers` supplies: this member carries a receiver iff
|
|
481
|
+
// some object literal implementing it reads one. Program-declared only --
|
|
482
|
+
// a standard-library member is implemented by the native intrinsic
|
|
483
|
+
// protocols, which carry their receiver separately from a JavaScript
|
|
484
|
+
// callable's frame, and its declaration is the open `Map<K, V>` rather than
|
|
485
|
+
// the instantiated receiver at a use site.
|
|
486
|
+
if (ts.isInterfaceDeclaration(parent) && ts.isMethodSignature(declaration) && !parent.getSourceFile().hasNoDefaultLib) {
|
|
487
|
+
const member = checker.getSymbolAtLocation(declaration.name);
|
|
488
|
+
if (member && declaredMembers.implementationReadsReceiver(member)) {
|
|
489
|
+
const declared = checker.getSymbolAtLocation(parent.name);
|
|
490
|
+
if (declared)
|
|
491
|
+
return checker.getDeclaredTypeOfSymbol(declared);
|
|
492
|
+
}
|
|
493
|
+
return null;
|
|
494
|
+
}
|
|
495
|
+
//
|
|
496
|
+
// A type-literal's own signature member IS safe, but only when the
|
|
497
|
+
// literal is the direct body of a named `type X = { ... }` alias --
|
|
498
|
+
// `declaredAnchorOf` anchors THAT case eagerly (with this patch's
|
|
499
|
+
// alias-priority fix, edit 5), same as an interface. A type literal
|
|
500
|
+
// reached any other way -- nested inside another type (`host.ts`'s
|
|
501
|
+
// ambient `declare const bluetooth: { connect(): Promise<{ device: {...}
|
|
502
|
+
// }> }`-shaped host surfaces are full of these), a function's own inline
|
|
503
|
+
// return-type annotation, anywhere with no enclosing alias -- has NO
|
|
504
|
+
// anchor at all: `declaredAnchorOf` only resolves through
|
|
505
|
+
// `type.getSymbol() ?? type.aliasSymbol`, and a type literal with no
|
|
506
|
+
// enclosing alias has no `aliasSymbol` for that fallback to find.
|
|
507
|
+
// Granting such a member a receiver reaches `typeOf` on a type with no
|
|
508
|
+
// anchor reserved, straight into the exact `walking.has` collision this
|
|
509
|
+
// whole mechanism exists to avoid -- measured directly: a version of this
|
|
510
|
+
// patch that omitted the `isTypeAliasDeclaration(parent.parent)` check
|
|
511
|
+
// below broke 25/116 corpus programs, ALL of them failing through dozens
|
|
512
|
+
// of distinct anonymous `__type` collisions inside
|
|
513
|
+
// `core/packages/core/runtime/host.ts`'s nested ambient object types (see
|
|
514
|
+
// `risks.md`). Returning `null` for every other type-literal parent
|
|
515
|
+
// matches this signature's ORIGINAL, pre-patch behavior exactly (this
|
|
516
|
+
// whole branch did not exist before this patch), so nothing about a
|
|
517
|
+
// nested/unnamed type literal's identity or receiver treatment changes.
|
|
518
|
+
if (ts.isTypeLiteralNode(parent) && parent.parent && ts.isTypeAliasDeclaration(parent.parent)) {
|
|
519
|
+
// STATED, and not an expression to begin with: `parent` is a
|
|
520
|
+
// `TypeLiteralNode` syntax node -- the receiver this returns is the
|
|
521
|
+
// named TYPE ALIAS's own declared shape, used purely as a nominal
|
|
522
|
+
// identity anchor (see the surrounding comment on why an anchor is
|
|
523
|
+
// needed here at all). No value flows through this node for a
|
|
524
|
+
// parameter/write-set census to have evidence about.
|
|
525
|
+
return checker.getTypeAtLocation(parent);
|
|
526
|
+
}
|
|
527
|
+
if (ts.isTypeLiteralNode(parent)) {
|
|
528
|
+
return null;
|
|
529
|
+
}
|
|
530
|
+
if (!ts.isClassLike(parent))
|
|
531
|
+
return null;
|
|
532
|
+
if (ts.isClassExpression(parent) && !parent.name) {
|
|
533
|
+
// Same anonymous-expression gap as the static branch above: the instance
|
|
534
|
+
// type is what the expression's constructor type constructs.
|
|
535
|
+
const construct = checker.getTypeAtLocation(parent).getConstructSignatures()[0];
|
|
536
|
+
return construct ? construct.getReturnType() : null;
|
|
537
|
+
}
|
|
538
|
+
const symbol = checker.getSymbolAtLocation(parent.name ?? parent);
|
|
539
|
+
return symbol ? checker.getDeclaredTypeOfSymbol(symbol) : null;
|
|
540
|
+
};
|
|
541
|
+
return { implicitReceiverOf, declaredMemberSignatureOf };
|
|
542
|
+
};
|
|
543
|
+
// Whether a signature's own declaration carries the `async` modifier.
|
|
544
|
+
// Mirrors `implicitReceiverOf`'s `getCombinedModifierFlags` check
|
|
545
|
+
// immediately above, rather than re-deriving the answer a different way.
|
|
546
|
+
// `semantics/normalize/producers/invocations.ts` duplicates this same
|
|
547
|
+
// two-line check independently (a call's own resolved-signature return
|
|
548
|
+
// type, and the call expression's own published result, both need the
|
|
549
|
+
// identical answer) -- see citations.md finding 2 for why it is duplicated
|
|
550
|
+
// rather than shared across the two files.
|
|
551
|
+
export const isAsyncSignature = (declaration) => declaration !== undefined && (ts.getCombinedModifierFlags(declaration) & ts.ModifierFlags.Async) !== 0;
|