@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,25 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { StructuralTypeId } from '../../identity/ids.js';
|
|
3
|
+
import type { StructuralShape } from '../model/structural-types.js';
|
|
4
|
+
import type { StructuralTypeTable } from '../model/structural-type-table.js';
|
|
5
|
+
/**
|
|
6
|
+
* The structure a declared name stands for.
|
|
7
|
+
*
|
|
8
|
+
* A name without a body is a name the later layers cannot lay out, so the body
|
|
9
|
+
* is interned while the nominal identity is still anchored -- a member that
|
|
10
|
+
* refers back to the declaration resolves to the anchor instead of re-entering
|
|
11
|
+
* translation. It lives beside `structural.ts` rather than inside it because
|
|
12
|
+
* everything it needs is already an argument: the table, the walk, and the two
|
|
13
|
+
* shape builders.
|
|
14
|
+
*/
|
|
15
|
+
export interface DeclaredBodyParts {
|
|
16
|
+
readonly table: StructuralTypeTable;
|
|
17
|
+
readonly typeOf: (type: ts.Type) => StructuralTypeId;
|
|
18
|
+
readonly signatureOf: (signature: ts.Signature) => import('../model/structural-types.js').SignatureShape;
|
|
19
|
+
readonly objectShapeOf: (type: ts.Type, location: ts.Node | null, members: 'all' | 'interface' | 'data-only') => StructuralShape;
|
|
20
|
+
/** The array an interface extending `Array`/`ReadonlyArray` is, with its own fields -- see `structural.ts`. */
|
|
21
|
+
readonly arrayHeritageShapeOf: (type: ts.Type, location: ts.Node) => StructuralShape | null;
|
|
22
|
+
}
|
|
23
|
+
export declare const createDeclaredBodyResolver: ({ table, typeOf, signatureOf, objectShapeOf, arrayHeritageShapeOf }: DeclaredBodyParts) => {
|
|
24
|
+
declaredBodyOf: (type: ts.Type, declarationLocation: ts.Node) => StructuralTypeId | null;
|
|
25
|
+
};
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
/**
|
|
3
|
+
* Which type-level function is still gated, by the name it was written under.
|
|
4
|
+
*
|
|
5
|
+
* The alias symbol is the only handle on a conditional that means anything to a
|
|
6
|
+
* reader: the checker's own rendering of an unresolved conditional is the whole
|
|
7
|
+
* `A extends B ? C : D` text with every argument still open, which is unreadable
|
|
8
|
+
* once several of them nest, and the refusals aggregate to nothing because each
|
|
9
|
+
* nesting depth prints differently. `EnhancedOmit` names the defect.
|
|
10
|
+
*/
|
|
11
|
+
const conditionalName = (type) => type.aliasSymbol?.getName() ?? '<anonymous>';
|
|
12
|
+
/**
|
|
13
|
+
* Whether `type` is the INSTANCE type TypeScript infers for a pre-`class`
|
|
14
|
+
* JavaScript constructor function -- the "Constructed" type of `function
|
|
15
|
+
* SourceNode(line) { this.line = line }`, named after the function itself.
|
|
16
|
+
*
|
|
17
|
+
* It matters because such a type's members come from two different places and
|
|
18
|
+
* only one of them is storage. `this.line = line` in the body is a per-instance
|
|
19
|
+
* field; `SourceNode.prototype.add = function () {}` is a prototype member every
|
|
20
|
+
* instance merely SEES. The checker already tells them apart -- the first symbol
|
|
21
|
+
* carries `SymbolFlags.Property`, the second `SymbolFlags.Method` -- which is
|
|
22
|
+
* exactly the distinction `structural-members.ts`'s `data-only` mode is written
|
|
23
|
+
* around, and exactly the one a `class` instance already gets. A pre-`class`
|
|
24
|
+
* constructor and a `class` describe the same object, so one rule has to answer
|
|
25
|
+
* for both; laying this one out as `all` made every prototype method a struct
|
|
26
|
+
* field, and nothing ever wrote it (`X.prototype.m = f` lowers to a dynamic set
|
|
27
|
+
* on the prototype object, not a store into the instance), so the field held a
|
|
28
|
+
* null callable and calling it segfaulted.
|
|
29
|
+
*
|
|
30
|
+
* Recognised from the type's own symbol rather than from `declarationLocation`,
|
|
31
|
+
* because the symbol of such an instance type carries BOTH the function and the
|
|
32
|
+
* expando identifiers that assign statics onto it, and which one
|
|
33
|
+
* `declarationOfSymbol` picks is not this rule's question. The type having no
|
|
34
|
+
* call or construct signature of its own is already established by the caller --
|
|
35
|
+
* the function type itself returned a `signature` shape well above here.
|
|
36
|
+
*/
|
|
37
|
+
const isJsConstructorInstanceType = (type) => (type.getSymbol()?.getDeclarations() ?? []).some((declaration) => (ts.isFunctionDeclaration(declaration) || ts.isFunctionExpression(declaration)) && declaration.body !== undefined);
|
|
38
|
+
export const createDeclaredBodyResolver = ({ table, typeOf, signatureOf, objectShapeOf, arrayHeritageShapeOf }) => {
|
|
39
|
+
const declaredBodyOf = (type, declarationLocation) => {
|
|
40
|
+
// An interface or type alias has no implementation to be missing: it names
|
|
41
|
+
// a shape, and a shape is exactly what a layout is. Whether it was written
|
|
42
|
+
// in a `.ts` or a `.d.ts` changes nothing about that -- what a declaration
|
|
43
|
+
// file changes is where *values* come from, and that boundary is refused
|
|
44
|
+
// where it actually is, at the ambient binding that produces the value.
|
|
45
|
+
// Refusing the type instead left every framework's public record types with
|
|
46
|
+
// no carrier at all, which is a gap reported in the wrong place.
|
|
47
|
+
//
|
|
48
|
+
// Expansion terminates because every cycle in the type graph passes through
|
|
49
|
+
// a declared name, and `typeOf` anchors that name before walking its
|
|
50
|
+
// members: `Promise.then` returning a `Promise` resolves to the anchor
|
|
51
|
+
// already in flight rather than re-entering translation.
|
|
52
|
+
// A UNION is asked first, before its call signatures. TypeScript answers
|
|
53
|
+
// `getCallSignatures()` on a union of function types with the signatures of
|
|
54
|
+
// ALL its arms, which reads here exactly like an overload set -- and an
|
|
55
|
+
// overload set is a claim that one value has several conventions, which
|
|
56
|
+
// `sharedAbiOf` (derive.ts) then has to join or refuse. A union is the
|
|
57
|
+
// opposite claim: several values, each with its own convention, told apart
|
|
58
|
+
// by the arm. hono's `type H = Handler<...> | MiddlewareHandler<...>`
|
|
59
|
+
// (`types.ts:90`) is the case -- two arrow types whose return types differ,
|
|
60
|
+
// refused as "no primitive joining 2 overload signatures" at every site
|
|
61
|
+
// that holds a handler.
|
|
62
|
+
//
|
|
63
|
+
// Only the union. An INTERSECTION of callables really is an overload set
|
|
64
|
+
// (that is how a `.d.ts` spells one across merged declarations), so it
|
|
65
|
+
// keeps the signature path below.
|
|
66
|
+
if (type.isUnion())
|
|
67
|
+
return table.intern({ kind: 'union', members: type.types.map(typeOf) });
|
|
68
|
+
const callSignatures = type.getCallSignatures();
|
|
69
|
+
const constructSignatures = type.getConstructSignatures();
|
|
70
|
+
if (callSignatures.length > 0 || constructSignatures.length > 0) {
|
|
71
|
+
return table.intern({
|
|
72
|
+
kind: 'signature',
|
|
73
|
+
call: callSignatures.map((one) => signatureOf(one)),
|
|
74
|
+
construct: constructSignatures.map((one) => signatureOf(one))
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
// A method declared in a declaration file is behavior this compiler does not
|
|
78
|
+
// implement: it belongs to whatever ships the type, so putting it in the
|
|
79
|
+
// layout would claim a slot nothing fills. Walking one is also what makes
|
|
80
|
+
// the enumeration diverge -- a generic method's return type is a fresh
|
|
81
|
+
// instantiation, every instantiation is a fresh anchor, and `Promise.then`
|
|
82
|
+
// returning a `Promise` of a new parameter never converges. A use of such a
|
|
83
|
+
// member refuses at the access, which is where the host protocol is actually
|
|
84
|
+
// missing.
|
|
85
|
+
const ambient = declarationLocation.getSourceFile().isDeclarationFile;
|
|
86
|
+
if (type.flags & ts.TypeFlags.Object) {
|
|
87
|
+
// Before the object enumeration: an interface that extends an Array is
|
|
88
|
+
// that array, and enumerating it as an object is the defect.
|
|
89
|
+
const array = arrayHeritageShapeOf(type, declarationLocation);
|
|
90
|
+
if (array)
|
|
91
|
+
return table.intern(array);
|
|
92
|
+
const members = isJsConstructorInstanceType(type) ? 'data-only' : ambient ? 'interface' : 'all';
|
|
93
|
+
return table.intern(objectShapeOf(type, declarationLocation, members));
|
|
94
|
+
}
|
|
95
|
+
// A name for a UNION or an INTERSECTION is a name for a structure that has
|
|
96
|
+
// no layout of its own, and reporting no body at all for it is not honest
|
|
97
|
+
// -- it says the declaration is ambient, which is what `derive.ts` then
|
|
98
|
+
// reports ("is ambient and has no installed host protocol"). hono's
|
|
99
|
+
// `export type Result<T> = [[T, ParamIndexMap][], ParamStash] | [[T,
|
|
100
|
+
// Params][]]` (`router.ts`) is the case: an ordinary source type alias, 32
|
|
101
|
+
// mandatory obligations, refused as though nothing had declared it.
|
|
102
|
+
//
|
|
103
|
+
// The members are walked here rather than by re-entering `typeOf` on the
|
|
104
|
+
// alias itself, which would resolve straight back to the anchor this body
|
|
105
|
+
// belongs to. That is the same walk `translate`'s own union and
|
|
106
|
+
// intersection branches do, minus their substitution and absorption rules,
|
|
107
|
+
// which belong to a type reached WITHOUT a declared name: those rules
|
|
108
|
+
// rewrite the union, and rewriting it under a nominal anchor would make
|
|
109
|
+
// the name and its body disagree.
|
|
110
|
+
if (type.isIntersection()) {
|
|
111
|
+
// The checker's reconciliation of the members rides along; see the
|
|
112
|
+
// `resolved` field's doc comment in `model/structural-types.ts`.
|
|
113
|
+
return table.intern({
|
|
114
|
+
kind: 'intersection',
|
|
115
|
+
members: type.types.map(typeOf),
|
|
116
|
+
declaration: null,
|
|
117
|
+
resolved: table.intern(objectShapeOf(type, declarationLocation, ambient ? 'interface' : 'all'))
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
// A CONDITIONAL that never resolved is not an ambient declaration, and
|
|
121
|
+
// saying so out loud is the whole point of this branch. `null` here is read
|
|
122
|
+
// downstream as "the compiler did not define this shape, so a host protocol
|
|
123
|
+
// must carry it" -- which sent every reader of the mongodb probe's compass
|
|
124
|
+
// toward installing bindings for `EnhancedOmit`, `InferIdType`,
|
|
125
|
+
// `OptionalUnlessRequiredId`, `AlternativeType`, `IsAny` and lib.es5's own
|
|
126
|
+
// `Awaited`/`ReturnType`/`Parameters`/`InstanceType`/`ThisParameterType`.
|
|
127
|
+
// Not one of those wants a binding: they are ordinary type-level functions
|
|
128
|
+
// the checker evaluates as soon as it is given a concrete argument, and the
|
|
129
|
+
// argument is still a type parameter. 378 of that probe's 644 mandatory
|
|
130
|
+
// obligations were this, reported as something else.
|
|
131
|
+
//
|
|
132
|
+
// The reason is interned as the BODY rather than returned as `null` so it
|
|
133
|
+
// reaches `derive.ts` intact; nothing else about a declared name changes.
|
|
134
|
+
if (type.flags & ts.TypeFlags.Conditional) {
|
|
135
|
+
return table.intern({
|
|
136
|
+
kind: 'unresolved',
|
|
137
|
+
fallback: 'erased-type-expression',
|
|
138
|
+
reason: `the conditional type ${conditionalName(type)} is still gated on a type parameter (${declarationLocation.getSourceFile().isDeclarationFile ? 'ambient' : 'source'} declaration); monomorphization never filled it`
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
// An enum names a set of literal values, not a structure. Reporting `null`
|
|
142
|
+
// states that honestly; synthesizing an empty object body would claim the
|
|
143
|
+
// declaration has a layout it does not have.
|
|
144
|
+
return null;
|
|
145
|
+
};
|
|
146
|
+
return { declaredBodyOf };
|
|
147
|
+
};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { IdentityTable, SpecializationPath } from './identities.js';
|
|
3
|
+
import type { InstantiationCensus } from './instantiation.js';
|
|
4
|
+
import type { SpecializationCensus } from './specialization.js';
|
|
5
|
+
/**
|
|
6
|
+
* What a specialized copy substitutes for a type parameter.
|
|
7
|
+
*
|
|
8
|
+
* This is the one place that answers "given this copy of a generic, what is
|
|
9
|
+
* `T` actually bound to". `structural.ts` asks it from two different branches
|
|
10
|
+
* -- the `TypeParameter` branch, which substitutes directly, and the union
|
|
11
|
+
* branch, which must substitute *before* it can decide the union's own shape
|
|
12
|
+
* (`T | null` with `T` bound to `unknown` is plain `unknown`, because
|
|
13
|
+
* `unknown` absorbs every other member). Keeping both callers on one lookup is
|
|
14
|
+
* what stops those two answers from drifting apart.
|
|
15
|
+
*/
|
|
16
|
+
export interface TypeParameterSubstitution {
|
|
17
|
+
/** What this copy binds a type parameter's declaration to, or `null` when no enclosing copy binds it. */
|
|
18
|
+
readonly boundByPath: (declaration: ts.Declaration) => ts.Type | null;
|
|
19
|
+
/**
|
|
20
|
+
* What binds a type parameter no copy on the path binds: the program-wide
|
|
21
|
+
* instantiation census first, then the sole copy of a function TYPE that
|
|
22
|
+
* owns the parameter. Both branches of `structural.ts` and the path
|
|
23
|
+
* substitution read this one answer, so a cell whose declared type is
|
|
24
|
+
* `EmitFunction` and a value the census copied for `EmitFunction`'s only
|
|
25
|
+
* instantiation cannot disagree about what `T` is.
|
|
26
|
+
*/
|
|
27
|
+
readonly bindingOf: (declaration: ts.Declaration) => ts.Type | null;
|
|
28
|
+
/**
|
|
29
|
+
* The non-recursive "what does this copy substitute for this type" answer.
|
|
30
|
+
* Returns the type unchanged when it is not a type parameter, has no binding
|
|
31
|
+
* in this copy, or is the polymorphic `this` parameter -- which is never a
|
|
32
|
+
* real substitution target, since its symbol's declaration is the class
|
|
33
|
+
* itself rather than a type-parameter declaration.
|
|
34
|
+
*/
|
|
35
|
+
readonly substituteTypeParameter: (candidate: ts.Type) => ts.Type;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Searched innermost first: a parameter shadowed by a nested generic's own
|
|
39
|
+
* parameter of the same declaration cannot happen -- declarations are distinct
|
|
40
|
+
* objects -- but the innermost binding is still the one in scope, and finding it
|
|
41
|
+
* first is what makes nesting compose.
|
|
42
|
+
*/
|
|
43
|
+
export declare const createPathBinding: (specializations: SpecializationCensus, path: SpecializationPath) => (declaration: ts.Declaration) => ts.Type | null;
|
|
44
|
+
/**
|
|
45
|
+
* The substitution one copy performs, stated over a symbol resolver rather than
|
|
46
|
+
* over the whole `IdentityTable`.
|
|
47
|
+
*
|
|
48
|
+
* `identities.ts` needs this same answer while it is still building that table:
|
|
49
|
+
* a name that reaches a generic reaches the copy its own arguments select, and
|
|
50
|
+
* the arguments of a site written inside another generic are only concrete once
|
|
51
|
+
* this substitution has run. One definition is the point -- a second, private
|
|
52
|
+
* copy of the rule is exactly how two authorities over "what is `T` here" drift
|
|
53
|
+
* apart.
|
|
54
|
+
*/
|
|
55
|
+
export declare const createPathSubstitution: (declarationOfSymbol: (symbol: ts.Symbol) => ts.Declaration | null, specializations: SpecializationCensus, path: SpecializationPath, fallback?: (declaration: ts.Declaration) => ts.Type | null) => ((candidate: ts.Type) => ts.Type);
|
|
56
|
+
export declare const createTypeParameterSubstitution: (identities: IdentityTable, instantiations: InstantiationCensus, specializations: SpecializationCensus, path: SpecializationPath) => TypeParameterSubstitution;
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
/**
|
|
3
|
+
* Searched innermost first: a parameter shadowed by a nested generic's own
|
|
4
|
+
* parameter of the same declaration cannot happen -- declarations are distinct
|
|
5
|
+
* objects -- but the innermost binding is still the one in scope, and finding it
|
|
6
|
+
* first is what makes nesting compose.
|
|
7
|
+
*/
|
|
8
|
+
export const createPathBinding = (specializations, path) => (declaration) => {
|
|
9
|
+
for (let index = path.length - 1; index >= 0; index -= 1) {
|
|
10
|
+
const step = path[index];
|
|
11
|
+
if (!step)
|
|
12
|
+
continue;
|
|
13
|
+
const copy = specializations.specializationsOf(step.owner)[step.ordinal];
|
|
14
|
+
const bound = copy?.bindingOf(declaration);
|
|
15
|
+
if (bound)
|
|
16
|
+
return bound;
|
|
17
|
+
}
|
|
18
|
+
return null;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* The substitution one copy performs, stated over a symbol resolver rather than
|
|
22
|
+
* over the whole `IdentityTable`.
|
|
23
|
+
*
|
|
24
|
+
* `identities.ts` needs this same answer while it is still building that table:
|
|
25
|
+
* a name that reaches a generic reaches the copy its own arguments select, and
|
|
26
|
+
* the arguments of a site written inside another generic are only concrete once
|
|
27
|
+
* this substitution has run. One definition is the point -- a second, private
|
|
28
|
+
* copy of the rule is exactly how two authorities over "what is `T` here" drift
|
|
29
|
+
* apart.
|
|
30
|
+
*/
|
|
31
|
+
export const createPathSubstitution = (declarationOfSymbol, specializations, path, fallback = () => null) => {
|
|
32
|
+
const boundByPath = createPathBinding(specializations, path);
|
|
33
|
+
const filledByPath = (open) => {
|
|
34
|
+
for (let index = path.length - 1; index >= 0; index -= 1) {
|
|
35
|
+
const step = path[index];
|
|
36
|
+
if (!step)
|
|
37
|
+
continue;
|
|
38
|
+
const filling = specializations.specializationsOf(step.owner)[step.ordinal]?.fillingOf(open);
|
|
39
|
+
if (filling)
|
|
40
|
+
return filling;
|
|
41
|
+
}
|
|
42
|
+
return null;
|
|
43
|
+
};
|
|
44
|
+
return (candidate) => {
|
|
45
|
+
// A composite the enclosing copy's own call closed -- `T[]` written at a
|
|
46
|
+
// site inside `outer<T>`, `string[]` in the copy `outer(words)` minted.
|
|
47
|
+
// See `Specialization.fillingOf`.
|
|
48
|
+
if (!(candidate.flags & ts.TypeFlags.TypeParameter)) {
|
|
49
|
+
return (candidate.flags & (ts.TypeFlags.Object | ts.TypeFlags.UnionOrIntersection)) !== 0
|
|
50
|
+
? (filledByPath(candidate) ?? candidate)
|
|
51
|
+
: candidate;
|
|
52
|
+
}
|
|
53
|
+
const symbol = candidate.getSymbol();
|
|
54
|
+
const declaration = symbol ? declarationOfSymbol(symbol) : null;
|
|
55
|
+
if (!declaration || ts.isClassLike(declaration))
|
|
56
|
+
return candidate;
|
|
57
|
+
const bound = boundByPath(declaration) ?? fallback(declaration);
|
|
58
|
+
return bound && bound !== candidate ? bound : candidate;
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* A type parameter owned by a function TYPE -- `type EmitFunction = <T extends
|
|
63
|
+
* Node>(node: T) => void` -- has no body a copy could specialize, so no path
|
|
64
|
+
* step ever binds it, and the instantiation census cannot bind it either when
|
|
65
|
+
* every call through the type happens inside another generic (`emitFn(c)` with
|
|
66
|
+
* `c: Child` records a hole, which that census rightly drops). The
|
|
67
|
+
* specialization census's fixpoint does fill those holes from the enclosing
|
|
68
|
+
* copies, so when it minted exactly ONE copy of the function type, that copy's
|
|
69
|
+
* tuple is the type's only instantiation in the program: the cell declared
|
|
70
|
+
* with the type holds the value specialized on that tuple (`closeOpenValueUses`
|
|
71
|
+
* and the fixpoint's `typeOwners` branch key the value use on it), and the
|
|
72
|
+
* type read at the cell must say the same. Two or more copies fall through to
|
|
73
|
+
* the constraint, which is what the value use then closes over too.
|
|
74
|
+
*/
|
|
75
|
+
const createSoleTypeCopyBinding = (specializations) => (declaration) => {
|
|
76
|
+
if (!ts.isTypeParameterDeclaration(declaration))
|
|
77
|
+
return null;
|
|
78
|
+
const owner = declaration.parent;
|
|
79
|
+
if (!(ts.isFunctionTypeNode(owner) ||
|
|
80
|
+
ts.isConstructorTypeNode(owner) ||
|
|
81
|
+
ts.isCallSignatureDeclaration(owner) ||
|
|
82
|
+
ts.isConstructSignatureDeclaration(owner)))
|
|
83
|
+
return null;
|
|
84
|
+
// A call/construct signature that is one arm of an OVERLOADED interface
|
|
85
|
+
// or type literal (`interface Respond { <T,U>(v: T, flag?: U): string;
|
|
86
|
+
// <T,U>(v: T, init?: U): string }`) owns its own, textually separate `T` --
|
|
87
|
+
// a distinct declaration per arm even though every arm spells it the same
|
|
88
|
+
// way. "Exactly one copy" is a fact about ONE arm's own recorded calls,
|
|
89
|
+
// never about the callable value as a whole: the checker resolves any one
|
|
90
|
+
// call to exactly one arm, so the arm it picks racks up a copy from that
|
|
91
|
+
// call's own concrete argument while every sibling arm -- never itself
|
|
92
|
+
// selected -- sits at zero and falls through to the constraint below. The
|
|
93
|
+
// two arms then answered `T` differently (the call's own argument shape
|
|
94
|
+
// versus the bare constraint) for what is one physical calling
|
|
95
|
+
// convention, and `sharedAbiOf` (representation/derive.ts) read that as
|
|
96
|
+
// the arms disagreeing at the parameter they in fact agree on --
|
|
97
|
+
// `generic-field-initializer.ts`'s `Respond`, unjoinable at parameter 0.
|
|
98
|
+
// A function TYPE's own signature has no siblings (`type EmitFunction =
|
|
99
|
+
// <T>(...) => void` is the whole type), so this guard is a no-op there:
|
|
100
|
+
// the sole-copy reasoning stays exactly as documented above for the case
|
|
101
|
+
// it was built for, and only turns off where a second arm makes "the
|
|
102
|
+
// type's only instantiation" a claim about one arm rather than the type.
|
|
103
|
+
const container = owner.parent;
|
|
104
|
+
if (ts.isInterfaceDeclaration(container) || ts.isTypeLiteralNode(container)) {
|
|
105
|
+
const siblings = container.members.filter((member) => ts.isCallSignatureDeclaration(owner) ? ts.isCallSignatureDeclaration(member) : ts.isConstructSignatureDeclaration(member));
|
|
106
|
+
if (siblings.length > 1)
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
const copies = specializations.specializationsOf(owner);
|
|
110
|
+
return copies.length === 1 ? (copies[0]?.bindingOf(declaration) ?? null) : null;
|
|
111
|
+
};
|
|
112
|
+
export const createTypeParameterSubstitution = (identities, instantiations, specializations, path) => {
|
|
113
|
+
const soleTypeCopy = createSoleTypeCopyBinding(specializations);
|
|
114
|
+
const bindingOf = (declaration) => instantiations.bindingOf(declaration) ?? soleTypeCopy(declaration);
|
|
115
|
+
return {
|
|
116
|
+
boundByPath: createPathBinding(specializations, path),
|
|
117
|
+
bindingOf,
|
|
118
|
+
substituteTypeParameter: createPathSubstitution(identities.declarationOfSymbol, specializations, path, bindingOf)
|
|
119
|
+
};
|
|
120
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
/**
|
|
3
|
+
* The member types `objectType[indexType]` resolves to, or `null` when the
|
|
4
|
+
* access cannot be resolved from what the object type declares.
|
|
5
|
+
*
|
|
6
|
+
* An empty result is `null` too, deliberately: `O[K]` naming no member at all
|
|
7
|
+
* is not the empty union (which would be `never`, a claim this has no grounds
|
|
8
|
+
* to make) -- it means the key set and the object type disagreed, and the
|
|
9
|
+
* caller should keep refusing.
|
|
10
|
+
*/
|
|
11
|
+
export declare const indexedAccessMemberTypes: (checker: ts.TypeChecker, objectType: ts.Type, indexType: ts.Type) => readonly ts.Type[] | null;
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
/**
|
|
3
|
+
* `T[K]` -- an indexed access the checker left DEFERRED.
|
|
4
|
+
*
|
|
5
|
+
* A concrete one never reaches here: `Rec['a']` and `Rec[keyof Rec]` are both
|
|
6
|
+
* resolved by the checker itself before this layer ever sees them (verified
|
|
7
|
+
* directly -- they arrive already flagged `Number`/`Union`, never
|
|
8
|
+
* `IndexedAccess`). What does reach here is the generic form, `S[keyof S]`
|
|
9
|
+
* written inside a body whose `S` is still a type parameter, and that is
|
|
10
|
+
* exactly what monomorphization exists to answer: inside the copy that binds
|
|
11
|
+
* `S` to a real type, `S[keyof S]` is an ordinary union of that type's own
|
|
12
|
+
* member types.
|
|
13
|
+
*
|
|
14
|
+
* The substitution has to be applied by hand because `structural.ts`'s
|
|
15
|
+
* `TypeParameter` branch only fires when the type IS a parameter. `S[keyof S]`
|
|
16
|
+
* is an `IndexedAccess` whose *operand* is one, so the substitution never
|
|
17
|
+
* descended into it and the whole access fell through to
|
|
18
|
+
* "checker type with flags 8388608 is not modelled" -- one unmodelled form,
|
|
19
|
+
* reported as hundreds of unrelated-looking unresolved carriers, because a
|
|
20
|
+
* bottom carrier propagates into every value derived from it.
|
|
21
|
+
*
|
|
22
|
+
* Nothing here guesses. Every answer is a member the object type declares, read
|
|
23
|
+
* out of the checker after the copy's own binding is substituted in; a key this
|
|
24
|
+
* cannot name resolves to nothing and the caller keeps its honest refusal.
|
|
25
|
+
*/
|
|
26
|
+
/** The keys an index type names against one object type, or `null` when it names something this cannot enumerate. */
|
|
27
|
+
const keysOf = (checker, objectType, indexType) => {
|
|
28
|
+
const constituents = indexType.isUnion() ? indexType.types : [indexType];
|
|
29
|
+
const keys = [];
|
|
30
|
+
for (const constituent of constituents) {
|
|
31
|
+
// `keyof O` names every property O has. Enumerating them is citing O's own
|
|
32
|
+
// declaration, not inventing a key set: `getProperties()` is the same list
|
|
33
|
+
// `keyof` itself is built from.
|
|
34
|
+
if ((constituent.flags & ts.TypeFlags.Index) !== 0) {
|
|
35
|
+
keys.push(...objectType.getProperties().map((property) => property.name));
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
if (constituent.isStringLiteral()) {
|
|
39
|
+
keys.push(constituent.value);
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
// `ToPropertyKey(0)` is the key `"0"`, which is how a tuple's own element
|
|
43
|
+
// is named -- the number literal is a key, not a different kind of access.
|
|
44
|
+
if (constituent.isNumberLiteral()) {
|
|
45
|
+
keys.push(String(constituent.value));
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
// A key this cannot name exactly, but which the CHECKER says is a string,
|
|
49
|
+
// names the whole key set. `for (const k in o) o[k]` inside a generic is
|
|
50
|
+
// the case: TypeScript types `k` as `Extract<keyof T, string>`, a
|
|
51
|
+
// conditional it defers while `T` is open and never reduces afterwards, so
|
|
52
|
+
// the access had no key set at all -- tsc's `assign` and `copyProperties`,
|
|
53
|
+
// and every read and write in their loop bodies. The answer is not a guess:
|
|
54
|
+
// a read through such a key produces one of the object's own members and a
|
|
55
|
+
// write through it must be accepted by any of them, which is precisely what
|
|
56
|
+
// the `keyof` arm above already answers. Asked of the checker rather than
|
|
57
|
+
// matched on a library alias, so a hand-written `T extends string ? T :
|
|
58
|
+
// never` reaches the same answer as `Extract`.
|
|
59
|
+
if (checker.isTypeAssignableTo(constituent, checker.getStringType())) {
|
|
60
|
+
keys.push(...objectType.getProperties().map((property) => property.name));
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
return keys;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* The member types `objectType[indexType]` resolves to, or `null` when the
|
|
69
|
+
* access cannot be resolved from what the object type declares.
|
|
70
|
+
*
|
|
71
|
+
* An empty result is `null` too, deliberately: `O[K]` naming no member at all
|
|
72
|
+
* is not the empty union (which would be `never`, a claim this has no grounds
|
|
73
|
+
* to make) -- it means the key set and the object type disagreed, and the
|
|
74
|
+
* caller should keep refusing.
|
|
75
|
+
*/
|
|
76
|
+
export const indexedAccessMemberTypes = (checker, objectType, indexType) => {
|
|
77
|
+
const keys = keysOf(checker, objectType, indexType);
|
|
78
|
+
if (keys === null)
|
|
79
|
+
return null;
|
|
80
|
+
const members = [];
|
|
81
|
+
for (const key of keys) {
|
|
82
|
+
const property = objectType.getProperty(key);
|
|
83
|
+
if (property) {
|
|
84
|
+
// STATED, and no node to ask a census about either way: this resolves
|
|
85
|
+
// `T[K]`'s member types from `objectType`'s own DECLARED shape --
|
|
86
|
+
// `objectType`/`indexType` are already-resolved `ts.Type`s (see this
|
|
87
|
+
// module's header), not expression nodes, so there is nothing here a
|
|
88
|
+
// parameter/return/write-set census (keyed by node) could be consulted
|
|
89
|
+
// through. `getTypeOfSymbol` is the correct, only question: what does
|
|
90
|
+
// this member's own declaration say.
|
|
91
|
+
members.push(checker.getTypeOfSymbol(property));
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
// A key no named member covers is answered by the object's own index
|
|
95
|
+
// signature when it has one -- `Counts[string]` over
|
|
96
|
+
// `interface Counts { [k: string]: number }` is `number`, declared, not
|
|
97
|
+
// guessed. `getIndexInfosOfType` is asked rather than a key-domain
|
|
98
|
+
// assumption because an object can carry several.
|
|
99
|
+
const index = checker.getIndexInfosOfType(objectType)[0];
|
|
100
|
+
if (index) {
|
|
101
|
+
members.push(index.type);
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
// A key an OBJECT type declares no member for is `undefined`, which is the
|
|
105
|
+
// language's own answer rather than a guess: reading an absent property is
|
|
106
|
+
// `undefined` in JavaScript, and a key that reached here as a literal came
|
|
107
|
+
// from the source, so there is nothing left to disagree about. A key
|
|
108
|
+
// enumerated from `keyof` cannot land here at all -- that list is built
|
|
109
|
+
// from `getProperties()`, so every one of them resolves above.
|
|
110
|
+
//
|
|
111
|
+
// hono is the case this exists for. `class Hono<E extends Env = Env>`'s
|
|
112
|
+
// body reads `E['Bindings']` throughout, and the copy the program actually
|
|
113
|
+
// instantiates binds `E` to `BlankEnv`, which is `{}` -- so `Bindings` is
|
|
114
|
+
// declared by the CONSTRAINT and absent from the ARGUMENT, and the value
|
|
115
|
+
// really is `undefined` at every one of those reads.
|
|
116
|
+
//
|
|
117
|
+
// Only for a real object type. `any`/`unknown` have no members for a
|
|
118
|
+
// different reason -- nothing is known about them, not that the key is
|
|
119
|
+
// missing -- and answering `undefined` there would turn "unknown" into a
|
|
120
|
+
// claim. Those keep the caller's refusal.
|
|
121
|
+
if ((objectType.flags & ts.TypeFlags.Object) === 0)
|
|
122
|
+
return null;
|
|
123
|
+
members.push(checker.getUndefinedType());
|
|
124
|
+
}
|
|
125
|
+
return members.length > 0 ? members : null;
|
|
126
|
+
};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { SpecializationPath } from './identities.js';
|
|
3
|
+
import type { SpecializationCensus } from './specialization.js';
|
|
4
|
+
/**
|
|
5
|
+
* What a monomorphized copy's members actually hold, read off the copy's own
|
|
6
|
+
* instantiated spelling instead of derived by substituting a parameter.
|
|
7
|
+
*
|
|
8
|
+
* Substitution rewrites a BARE type parameter and nothing else. That is all it
|
|
9
|
+
* can do -- the public checker API offers no way to instantiate a type, a gap
|
|
10
|
+
* `specialization.ts`'s `induceFromHeritage` records for the same reason -- so a
|
|
11
|
+
* member whose type merely *mentions* a parameter keeps the hole: `filter:
|
|
12
|
+
* Filter<TSchema>`, `Promise<WithId<TSchema> | null>`, `AlternativeType<WithId<
|
|
13
|
+
* TSchema>["_id"]>`. Every deferred conditional inside such a type stays
|
|
14
|
+
* deferred, because a conditional is deferred exactly while its check type is
|
|
15
|
+
* open, and representation then has no structure to lay out. On the mongodb
|
|
16
|
+
* CMAP probe that one gap was 312 of 642 mandatory obligations, spread over five
|
|
17
|
+
* copies of `Collection` whose fillings -- `Document`, `GridFSFile`,
|
|
18
|
+
* `GridFSChunk`, `any`, `DataKey` -- were all recorded and all available.
|
|
19
|
+
*
|
|
20
|
+
* The instantiated spelling closes it without instantiating anything. A copy
|
|
21
|
+
* minted from a type reference carries the type the checker resolved that
|
|
22
|
+
* reference to (`Specialization.instantiated`), and reading a member off THAT
|
|
23
|
+
* hands back the member's type with every conditional already evaluated,
|
|
24
|
+
* because evaluating them is what instantiating meant. Pairing the
|
|
25
|
+
* uninstantiated member against the instantiated one then yields a plain
|
|
26
|
+
* type-to-type table, which is the one thing substitution could not build: an
|
|
27
|
+
* answer for a composite.
|
|
28
|
+
*
|
|
29
|
+
* ## Why pairing by position is exact here
|
|
30
|
+
*
|
|
31
|
+
* Both sides come from the SAME symbol -- one read off the generic parent, one
|
|
32
|
+
* off its instantiation -- so the instantiated member is the image of the
|
|
33
|
+
* uninstantiated one under a single mapping. Signature `i` corresponds to
|
|
34
|
+
* signature `i`, parameter `j` to parameter `j`, return to return. This is not
|
|
35
|
+
* the situation `specialization.ts`'s `unifySignatures` guards against, where a
|
|
36
|
+
* generic is paired against a concrete type *inferred from a call's arguments*
|
|
37
|
+
* and nothing orders the two overload sets alike; here the order is the same
|
|
38
|
+
* list, mapped.
|
|
39
|
+
*
|
|
40
|
+
* The counts are still checked at every level and the walk stops on any
|
|
41
|
+
* mismatch, because instantiation can collapse a shape -- an overload set can
|
|
42
|
+
* lose a signature to an argument that makes it identical to another, a union
|
|
43
|
+
* arm can vanish -- and a pairing across a collapse would record an answer for
|
|
44
|
+
* a type that is not its image.
|
|
45
|
+
*
|
|
46
|
+
* ## Why an OVERLOAD's parameters answer for the IMPLEMENTATION's
|
|
47
|
+
*
|
|
48
|
+
* `getTypeOfSymbolAtLocation` on an overloaded member publishes the overload
|
|
49
|
+
* signatures and not the implementation, so the implementation's own parameter
|
|
50
|
+
* declarations -- which is where `Collection.findOne`'s `filter: Filter<TSchema>
|
|
51
|
+
* = {}` actually is -- have no instantiated signature of their own to read.
|
|
52
|
+
* They do not need one. The table is keyed by the OPEN TYPE, and the checker
|
|
53
|
+
* interns types: the implementation's annotation and the overload's are one
|
|
54
|
+
* `ts.Type` object whenever they are the same written type, so the entry the
|
|
55
|
+
* overload records is the entry the implementation looks up. Where the two
|
|
56
|
+
* annotations genuinely differ they are different objects and no entry is
|
|
57
|
+
* found, which is the honest answer.
|
|
58
|
+
*/
|
|
59
|
+
export interface InstantiatedMembers {
|
|
60
|
+
/** The instantiated image of an open type under the copies this view is inside, or `null` when none is known. */
|
|
61
|
+
readonly through: (type: ts.Type) => ts.Type | null;
|
|
62
|
+
}
|
|
63
|
+
export declare const emptyInstantiatedMembers: InstantiatedMembers;
|
|
64
|
+
export declare const createInstantiatedMembers: (checker: ts.TypeChecker, specializations: SpecializationCensus) => (path: SpecializationPath) => InstantiatedMembers;
|