@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,491 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { impliedPatternParameterOf, isUnusableEvidence, widestOf, withoutUndefinedMember } from './derived-expression-type.js';
|
|
3
|
+
/**
|
|
4
|
+
* What an UNANNOTATED rest parameter's checker-inferred type actually is, when
|
|
5
|
+
* that type is an open-arity array rather than the closed tuple it might look
|
|
6
|
+
* like at first read.
|
|
7
|
+
*
|
|
8
|
+
* `fetch: (request, Env?, executionCtx?) => ... = (request, ...rest) => {...}`
|
|
9
|
+
* -- hono's own `Hono.fetch` -- is the concrete case this exists for: the
|
|
10
|
+
* arrow function's declared type comes from the field it initializes, whose
|
|
11
|
+
* signature has THREE named parameters and no rest at all. TypeScript's
|
|
12
|
+
* contextual typing still has to give `rest` SOME type, and does so by
|
|
13
|
+
* matching the excess of the target signature positionally into a TUPLE --
|
|
14
|
+
* here `[(E['Bindings'] | {})?, ExecutionContext?]` -- which reads exactly
|
|
15
|
+
* like a real, closed, two-element shape and is not one: it is the target
|
|
16
|
+
* signature's tail, re-packaged, and the only reason it has a fixed arity at
|
|
17
|
+
* all is that the target signature does. A caller of `fetch` is free to pass
|
|
18
|
+
* zero, one, or two of those trailing arguments -- the language's own rest
|
|
19
|
+
* binding, unaffected by how the contextual type happened to spell it.
|
|
20
|
+
*
|
|
21
|
+
* `structural.ts`'s `typeAt` already reaches exactly this conclusion for a
|
|
22
|
+
* REFERENCE to such a parameter inside the function's own body (`rest[0]`,
|
|
23
|
+
* `rest[1]`, a spread) -- see `restParameterArrayElementAt`, which shares
|
|
24
|
+
* this function's core test. `structural-parts.ts`'s `parameterOf` (the
|
|
25
|
+
* callable's own published ABI) is a second authority describing the
|
|
26
|
+
* identical parameter, and calls THIS function (`restParameterArrayTypeOf`)
|
|
27
|
+
* directly -- it already has the declaration in hand, having resolved it
|
|
28
|
+
* itself, so it never needed `restParameterArrayElementAt`'s own node-shape
|
|
29
|
+
* dispatch.
|
|
30
|
+
*
|
|
31
|
+
* A THIRD authority describes the same parameter again, through
|
|
32
|
+
* `restParameterArrayElementAt`, and used to disagree with the other two:
|
|
33
|
+
* `contributeParameter` (`producers/bindings.ts`) builds the binding that
|
|
34
|
+
* INITIALIZES `rest` -- the frame slot both the signature and every
|
|
35
|
+
* body-side read ultimately answer through -- by asking `structural.ts`'s
|
|
36
|
+
* `typeAt` for the PARAMETER DECLARATION node itself, not a reference to it.
|
|
37
|
+
* `restParameterArrayElementAt` used to require an identifier
|
|
38
|
+
* (`ts.isIdentifier(node)`), so that call never reached this collapse at
|
|
39
|
+
* all and published the checker's raw closed tuple straight into the
|
|
40
|
+
* binding -- correct for the SIGNATURE (`parameterOf`) and for every
|
|
41
|
+
* REFERENCE inside the body, wrong for the one binding both of those
|
|
42
|
+
* actually read through. `restParameterArrayElementAt` now accepts the
|
|
43
|
+
* declaration node directly (see `restParameterDeclarationAt`, below), so
|
|
44
|
+
* all three authorities derive the identical collapse from the identical
|
|
45
|
+
* source and cannot disagree.
|
|
46
|
+
*
|
|
47
|
+
* Gated exactly as its body-side counterpart is, for the same reasons:
|
|
48
|
+
* - UNANNOTATED only (`declaration.type === undefined`) -- an explicit
|
|
49
|
+
* `...args: [string, number]` is the program stating a real, closed
|
|
50
|
+
* shape, and this must never override that;
|
|
51
|
+
* - the checker's answer must be a tuple with at least one NON-required
|
|
52
|
+
* element. A checker-inferred CLOSED tuple (every position required) is
|
|
53
|
+
* left exactly alone -- that is a real, settled arity, not an artifact of
|
|
54
|
+
* contextual matching against a shorter signature.
|
|
55
|
+
*
|
|
56
|
+
* `null` means "the checker's own answer stands", the same safe default
|
|
57
|
+
* every function in this file shares.
|
|
58
|
+
*/
|
|
59
|
+
/**
|
|
60
|
+
* The per-position types of a rest parameter whose DECLARED type is a closed
|
|
61
|
+
* tuple -- every position required, no optional, rest or variadic element --
|
|
62
|
+
* or `null` for anything else.
|
|
63
|
+
*
|
|
64
|
+
* `/** @param {[number, number, number, number, number]} args *\/ function
|
|
65
|
+
* texStorage2D( ...args ) { gl.texStorage2D( ...args ) }`: three's
|
|
66
|
+
* `WebGLState.js` as the native-webgl-angle plugin rewrites its `...arguments`
|
|
67
|
+
* forwarders. The parameter's cell is an array (the rest slot materializes
|
|
68
|
+
* one), but its declaration states its LENGTH and the type at each position,
|
|
69
|
+
* and the checker refuses any call that passes a different count. Two
|
|
70
|
+
* consumers read this one fact: `producers/tuple-spread.ts` expands a spread
|
|
71
|
+
* of such a parameter into that many constant-index reads, and
|
|
72
|
+
* `parameter-bindings.ts` hands the callee's formals the position types --
|
|
73
|
+
* which must agree, or the operands say `number` while the formal's storage
|
|
74
|
+
* says "unresolved".
|
|
75
|
+
*/
|
|
76
|
+
export const declaredClosedTupleRestElementsOf = (checker, declaration) => {
|
|
77
|
+
if (declaration.dotDotDotToken === undefined)
|
|
78
|
+
return null;
|
|
79
|
+
const declared = checker.getTypeAtLocation(declaration);
|
|
80
|
+
if (!checker.isTupleType(declared))
|
|
81
|
+
return null;
|
|
82
|
+
const reference = declared;
|
|
83
|
+
const elements = checker.getTypeArguments(reference);
|
|
84
|
+
if (elements.length === 0)
|
|
85
|
+
return null;
|
|
86
|
+
const allRequired = elements.every((_, index) => (reference.target.elementFlags[index] ?? ts.ElementFlags.Required) === ts.ElementFlags.Required);
|
|
87
|
+
return allRequired ? elements : null;
|
|
88
|
+
};
|
|
89
|
+
export const restParameterArrayTypeOf = (checker, declaration) => {
|
|
90
|
+
if (declaration.dotDotDotToken === undefined || declaration.type !== undefined)
|
|
91
|
+
return null;
|
|
92
|
+
// STATED, not HOLDS: this asks what the checker's own CONTEXTUAL TYPING
|
|
93
|
+
// produced for this unannotated rest parameter -- a `ts.TupleTypeReference`
|
|
94
|
+
// whose internal shape (`.target`, `.elementFlags`) this function unwraps
|
|
95
|
+
// by hand -- not what value the parameter carries at runtime. A census
|
|
96
|
+
// answer is a real `ts.Type` too, but for a DIFFERENT node (a call-site
|
|
97
|
+
// argument, a write), with no reason to be the tuple-from-target-signature
|
|
98
|
+
// artifact this specifically detects and widens; substituting it here would
|
|
99
|
+
// desync this function from the two other authorities the module comment
|
|
100
|
+
// names (`structural.ts`'s `restParameterArrayElementAt`,
|
|
101
|
+
// `structural-parts.ts`'s `parameterOf`) that all derive this collapse from
|
|
102
|
+
// this SAME checker-native tuple. Left as a direct checker call.
|
|
103
|
+
const own = checker.getTypeAtLocation(declaration);
|
|
104
|
+
if (!checker.isTupleType(own))
|
|
105
|
+
return null;
|
|
106
|
+
const reference = own;
|
|
107
|
+
const target = reference.target;
|
|
108
|
+
const elements = checker.getTypeArguments(reference);
|
|
109
|
+
if (elements.length === 0)
|
|
110
|
+
return null;
|
|
111
|
+
const allRequired = elements.every((_, index) => (target.elementFlags[index] ?? ts.ElementFlags.Required) === ts.ElementFlags.Required);
|
|
112
|
+
if (allRequired)
|
|
113
|
+
return null;
|
|
114
|
+
return restTupleElementTypeOf(checker, elements);
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* The ONE type an open-arity rest array's every position can hold.
|
|
118
|
+
*
|
|
119
|
+
* `widestOf` answers first and usually answers: when every position genuinely
|
|
120
|
+
* joins under one of them, that type keeps the forwarding array a well-typed
|
|
121
|
+
* native array instead of a tagged union nobody wrote.
|
|
122
|
+
*
|
|
123
|
+
* Its REFUSAL is the part that needed an answer here. Before its own vacuous-
|
|
124
|
+
* coverage veto existed (`derived-expression-type.ts`), hono's
|
|
125
|
+
* `HonoBase.fetch` -- declared `(request, Env?: E['Bindings'] | {},
|
|
126
|
+
* executionCtx?: ExecutionContext) => ...` and implemented `(request,
|
|
127
|
+
* ...rest) => ...` -- joined the contextual tuple
|
|
128
|
+
* `[(E['Bindings'] | {})?, ExecutionContext?]` down to position 0 alone,
|
|
129
|
+
* because every object type is assignable to `{}`. The array published
|
|
130
|
+
* `array-object(optional(dynamic | record{}))`, naming no `ExecutionContext`
|
|
131
|
+
* at all, and `request(path, init, Env, executionCtx)` forwarding a real one
|
|
132
|
+
* had no conversion into it. `widestOf` now refuses that join instead of
|
|
133
|
+
* lying about it, and a refusal used to leave the checker's raw CLOSED tuple
|
|
134
|
+
* standing as the rest parameter's type -- the very shape this file's header
|
|
135
|
+
* explains is not what `rest` holds.
|
|
136
|
+
*
|
|
137
|
+
* So a refusal states the union of every position, which is exactly the
|
|
138
|
+
* policy `restParameterUnionOfTuplesElementTypeOf` already states for the
|
|
139
|
+
* other of TypeScript's two notations for variable arity ("the union of every
|
|
140
|
+
* arm's every element states exactly what the array holds and nothing more").
|
|
141
|
+
* The two notations now agree on this case as well.
|
|
142
|
+
*
|
|
143
|
+
* `undefined` is deliberately NOT stripped from that union, unlike in the
|
|
144
|
+
* sibling. There the positions come from different ARMS and the read past a
|
|
145
|
+
* shorter arm's end is what supplies absence; here they are the checker's own
|
|
146
|
+
* OPTIONAL elements of one tuple, whose `undefined` is a value the caller may
|
|
147
|
+
* actually pass (`request(path, init, undefined, ctx)` is how hono's own
|
|
148
|
+
* `request` forwards a missing `Env`), so dropping it would publish an
|
|
149
|
+
* element narrower than the calls the signature admits.
|
|
150
|
+
*/
|
|
151
|
+
const restTupleElementTypeOf = (checker, elements) => {
|
|
152
|
+
const widest = widestOf(checker, elements);
|
|
153
|
+
if (widest !== null)
|
|
154
|
+
return widest;
|
|
155
|
+
const kept = [...new Set(elements.filter((element) => (element.flags & ts.TypeFlags.Never) === 0))];
|
|
156
|
+
if (kept.length === 0)
|
|
157
|
+
return null;
|
|
158
|
+
return kept.length === 1 ? kept[0] : unionTypeOf(checker, kept);
|
|
159
|
+
};
|
|
160
|
+
/**
|
|
161
|
+
* The widened element type of an EXPLICITLY ANNOTATED rest parameter whose
|
|
162
|
+
* declared type is a union of tuples -- `...args: [] | [TNext]`, exactly how
|
|
163
|
+
* `lib.es2015.generator.d.ts` spells `Generator.prototype.next`'s "zero or one
|
|
164
|
+
* argument" parameter.
|
|
165
|
+
*
|
|
166
|
+
* This says the same thing `[TNext?]` -- one tuple with an optional trailing
|
|
167
|
+
* element -- would say, in the other of TypeScript's two notations for
|
|
168
|
+
* variable arity: a single tuple whose optional positions
|
|
169
|
+
* `restParameterArrayTypeOf` above already widens by reading `elementFlags`
|
|
170
|
+
* off ONE `TupleTypeReference`. A union of several distinctly-lengthed tuples
|
|
171
|
+
* is the same fact spread across several types instead of several positions
|
|
172
|
+
* of one, so this collects every element type out of every arm and widens
|
|
173
|
+
* across all of them the identical way -- `widestOf` does not care which
|
|
174
|
+
* tuple or which position an element came from, only whether every element it
|
|
175
|
+
* is handed agrees on one wider type.
|
|
176
|
+
*
|
|
177
|
+
* Left ungated by `declaration.type`, unlike its sibling: there is no bare
|
|
178
|
+
* checker-inferred form of this shape to guard against overriding -- a
|
|
179
|
+
* program can only reach a union of tuples here by writing the annotation out
|
|
180
|
+
* (`restParameterArrayTypeOf` already owns the unannotated, single-tuple
|
|
181
|
+
* case), so an explicit `[] | [TNext]` is exactly the input this exists to
|
|
182
|
+
* widen, not a real, closed shape it would be wrong to touch.
|
|
183
|
+
*
|
|
184
|
+
* Without this, `structural-parts.ts`'s `parameterOf` finds `declared` is
|
|
185
|
+
* neither `isArrayType` nor `isTupleType` (a union of tuples is itself
|
|
186
|
+
* neither), falls into `restNotArrayShaped`'s bare-`any` fallback, and wraps
|
|
187
|
+
* the WHOLE UNION as if it were one element: `Array<[] | [TNext]>` instead of
|
|
188
|
+
* `Array<TNext>`. Every call site then argument-packs a raw `TNext` value
|
|
189
|
+
* against a parameter slot declaring a one-tuple record, which is `next(v)`'s
|
|
190
|
+
* "passes a scalar argument into a parameter slot carrying record(...)"
|
|
191
|
+
* emission refusal for any generator whose `TNext` resolved to a native
|
|
192
|
+
* carrier.
|
|
193
|
+
*
|
|
194
|
+
* `widestOf` REFUSING is not a reason to hand the union back untouched. The
|
|
195
|
+
* arms of a real overload-shaped rest -- hono's `defineWebSocketHelper`,
|
|
196
|
+
* `...args: [createEvents, options?] | [c, events, options?]` -- state
|
|
197
|
+
* unrelated types at the same ordinal, so no one element covers the rest, and
|
|
198
|
+
* before this the whole union fell through to `parameterOf`'s
|
|
199
|
+
* `restNotArrayShaped` fallback and became `Array<[A, B?] | [C, D, E?]>`:
|
|
200
|
+
* every element of the array claimed to be a whole argument LIST. That is not
|
|
201
|
+
* a widening that failed, it is a wrong statement about the value -- the array
|
|
202
|
+
* holds one argument per slot, never a tuple -- and it is what the binding
|
|
203
|
+
* (`structural.ts`'s `rest-parameter-array-element`) could never agree with,
|
|
204
|
+
* since the binding kept the union itself and derived a tagged union of
|
|
205
|
+
* positional records. The union of every arm's every element states exactly
|
|
206
|
+
* what the array holds and nothing more, and both authorities derive it from
|
|
207
|
+
* this one function, so they cannot disagree about it.
|
|
208
|
+
*
|
|
209
|
+
* An optional position's `undefined` is dropped from that union, for the reason
|
|
210
|
+
* `impliedPatternElementOfArms` below already states about the same kind of
|
|
211
|
+
* evidence: a position's `undefined` is POSITIONAL -- an arm that is shorter,
|
|
212
|
+
* or a trailing `options?` nobody passed -- and the READ past the end of the
|
|
213
|
+
* array is what supplies it, per position. Keeping it would wrap the whole
|
|
214
|
+
* element in `optional(...)`, which says every slot of the array may be absent
|
|
215
|
+
* even where an arm requires one.
|
|
216
|
+
*/
|
|
217
|
+
export const restParameterUnionOfTuplesElementTypeOf = (checker, declared) => {
|
|
218
|
+
if (!declared.isUnion())
|
|
219
|
+
return null;
|
|
220
|
+
if (!declared.types.every((member) => checker.isTupleType(member)))
|
|
221
|
+
return null;
|
|
222
|
+
const elements = declared.types.flatMap((member) => checker.getTypeArguments(member));
|
|
223
|
+
if (elements.length === 0)
|
|
224
|
+
return null;
|
|
225
|
+
const widest = widestOf(checker, elements);
|
|
226
|
+
if (widest)
|
|
227
|
+
return widest;
|
|
228
|
+
// `never` only: a position nothing states contributes nothing, while an `any`
|
|
229
|
+
// one genuinely widens the element and must stay -- dropping it would publish
|
|
230
|
+
// an array narrower than the program's own annotation.
|
|
231
|
+
const stated = elements
|
|
232
|
+
.map((element) => withoutUndefinedMember(checker, element))
|
|
233
|
+
.filter((element) => (element.flags & ts.TypeFlags.Never) === 0);
|
|
234
|
+
return stated.length === 0 ? null : unionTypeOf(checker, [...new Set(stated)]);
|
|
235
|
+
};
|
|
236
|
+
/**
|
|
237
|
+
* The type the physical parameter SLOT holds.
|
|
238
|
+
*
|
|
239
|
+
* An omitted argument is `undefined`, and a defaulted parameter's initializer
|
|
240
|
+
* runs inside the callee over exactly this slot, so an optional or defaulted
|
|
241
|
+
* slot has to hold `undefined` alongside whatever the body ends up binding.
|
|
242
|
+
*
|
|
243
|
+
* The widening is done as a TYPE, by the checker, rather than as an absence
|
|
244
|
+
* flag layered over an already-derived carrier. Those two are not the same
|
|
245
|
+
* answer: a flag can only say "absent or not", so a parameter whose declared
|
|
246
|
+
* type already spends absence on `null` -- `f(x: T | null = null)`, and the
|
|
247
|
+
* JSDoc spelling `@param {?T} [x=null]` that three.js writes throughout -- had
|
|
248
|
+
* no state left to say WHICH absent value it holds, and was refused outright.
|
|
249
|
+
* As a type it is just a three-armed union, which `representation/union.ts`
|
|
250
|
+
* has always carried as a tagged union with a `null` arm, an `undefined` arm
|
|
251
|
+
* and a `present` arm.
|
|
252
|
+
*
|
|
253
|
+
* `getNullableType` is the same public API TypeScript's own `addOptionality`
|
|
254
|
+
* uses, and it flattens: the result is one flat union, never a union nested
|
|
255
|
+
* inside a union, which matters because the two are different interned shapes
|
|
256
|
+
* and only the flat one derives to the three-armed carrier.
|
|
257
|
+
*
|
|
258
|
+
* A rest parameter is left alone -- its declared type is already the array the
|
|
259
|
+
* language binds, and there is no omission to encode.
|
|
260
|
+
*/
|
|
261
|
+
export const parameterSlotTypeOf = (internUnion, undefinedType, flags, type) => (flags.rest || (!flags.optional && !flags.hasInitializer) ? type : internUnion([type, undefinedType]));
|
|
262
|
+
/**
|
|
263
|
+
* AN UNANNOTATED REST PARAMETER IS ALWAYS AN ARRAY AT RUNTIME, WHATEVER
|
|
264
|
+
* ARITY-TRACKING TUPLE THE CHECKER GAVE IT FOR CHECKING PURPOSES.
|
|
265
|
+
*
|
|
266
|
+
* `FunctionDeclarationInstantiation` (ECMA-262 10.2.11 step 28) binds a rest
|
|
267
|
+
* parameter to a fresh `Array`, unconditionally -- that is what the value
|
|
268
|
+
* physically is, regardless of how the checker typed the binding. When an
|
|
269
|
+
* unannotated `...args` is contextually typed against a target with more
|
|
270
|
+
* than one possible tail shape -- an overloaded call type
|
|
271
|
+
* (`hono/src/context.ts`'s `NewResponse` has two signatures, `(data,
|
|
272
|
+
* status?, headers?)` and `(data, init?)`), or a single signature with its
|
|
273
|
+
* own optional trailing parameters -- the checker states that as a TUPLE
|
|
274
|
+
* with optional/rest/variadic elements, one arity per possible call shape
|
|
275
|
+
* joined into one type. That tuple is real and correct for checking a call
|
|
276
|
+
* `args` is forwarded into, but it does not describe `args` itself: the
|
|
277
|
+
* program never wrote a fixed-arity value there, and no two calls into this
|
|
278
|
+
* function are required to pass the same number of arguments.
|
|
279
|
+
*
|
|
280
|
+
* `tuple-spread.ts`'s `closedTupleElementTypesOf` already refuses to expand
|
|
281
|
+
* exactly this shape positionally (an optional/rest/variadic element means
|
|
282
|
+
* the arity is not settled), which is correct -- but leaving the binding
|
|
283
|
+
* typed as a tuple after that refusal is what actually breaks: representing
|
|
284
|
+
* an open-arity tuple needs a dictionary-shaped carrier with no
|
|
285
|
+
* `[Symbol.iterator]`, so every consumer that needs to iterate or
|
|
286
|
+
* range-copy `args` (a spread into another call, `for`-`of`) is refused for
|
|
287
|
+
* a reason that names a carrier this value was never supposed to have.
|
|
288
|
+
* Collapsing it to the array it actually is restores the native iteration
|
|
289
|
+
* cursor `hasNativeIterationCursor` already grants any other `T[]`.
|
|
290
|
+
*
|
|
291
|
+
* Gated tightly, to touch only the binding itself:
|
|
292
|
+
* - the parameter must be UNANNOTATED (`declaration.type === undefined`).
|
|
293
|
+
* An explicit `...args: [string, number]` is the program stating a real,
|
|
294
|
+
* closed shape, and this must not override that;
|
|
295
|
+
* - the checker's type must be a tuple whose elements are NOT all
|
|
296
|
+
* `Required` -- a checker-inferred CLOSED tuple (every position
|
|
297
|
+
* required, one arity) is left alone: `tuple-spread.ts` already expands
|
|
298
|
+
* that positionally, and collapsing it here would throw away real
|
|
299
|
+
* per-position typing a sound expansion could still use.
|
|
300
|
+
*
|
|
301
|
+
* The array's element type is `widestOf` the tuple's own elements -- the
|
|
302
|
+
* same join two `return` statements or two branches of a conditional must
|
|
303
|
+
* already agree through (`derived-expression-type.ts`). When every element
|
|
304
|
+
* genuinely joins under one type, using it keeps a well-typed forwarding
|
|
305
|
+
* array native instead of boxing it. When no single element type covers
|
|
306
|
+
* every position (`widestOf` refuses), this refuses too, rather than
|
|
307
|
+
* inventing a join the checker never stated -- the existing tuple/record
|
|
308
|
+
* path is the fallback, unchanged.
|
|
309
|
+
*/
|
|
310
|
+
export const restParameterArrayElementAt = (checker, identities, node) => {
|
|
311
|
+
const declaration = restParameterDeclarationAt(checker, identities, node);
|
|
312
|
+
if (!declaration)
|
|
313
|
+
return null;
|
|
314
|
+
// The core test -- unannotated, checker-tupled, not every element
|
|
315
|
+
// required -- is shared with the signature side of this same question;
|
|
316
|
+
// see `parameter-slot.ts`'s `restParameterArrayTypeOf` for why there is
|
|
317
|
+
// only one function answering it.
|
|
318
|
+
return restParameterArrayTypeOf(checker, declaration);
|
|
319
|
+
};
|
|
320
|
+
/**
|
|
321
|
+
* The body-side entry to `restParameterUnionOfTuplesElementTypeOf` above --
|
|
322
|
+
* the same collapse `structural-parts.ts`'s `parameterOf` applies to the ABI
|
|
323
|
+
* slot, reached from either shape a node names (`restParameterDeclarationAt`).
|
|
324
|
+
*
|
|
325
|
+
* That collapse was wired into `parameterOf` alone when `Generator.next`'s
|
|
326
|
+
* `[] | [TNext]` needed it, re-opening exactly the disagreement this file's
|
|
327
|
+
* header describes: the ABI published `array-object(...)` for a rest
|
|
328
|
+
* parameter annotated as a union of tuples while the binding kept the
|
|
329
|
+
* checker's raw union, which `derive.ts` lays out as a tagged-union of
|
|
330
|
+
* positional records once any arm has a non-uniform or optional position.
|
|
331
|
+
* `projection/abi.ts` then refused the function -- hono's
|
|
332
|
+
* `defineWebSocketHelper` (`...args: [createEvents, options?] | [c, events,
|
|
333
|
+
* options?]`) with 'parameter 0 is bound as "tagged-union(...)" but the ABI
|
|
334
|
+
* declares "array-object(...)"'. `[] | [T]` never showed it only because both
|
|
335
|
+
* arms happen to derive to the array carrier anyway. The ABI is the right
|
|
336
|
+
* authority: FunctionDeclarationInstantiation binds a rest parameter to one
|
|
337
|
+
* fresh Array whatever static shapes describe it, and `packRestArguments`
|
|
338
|
+
* has no convention for a discriminated rest slot.
|
|
339
|
+
*/
|
|
340
|
+
export const restParameterUnionOfTuplesElementAt = (checker, identities, node) => {
|
|
341
|
+
const declaration = restParameterDeclarationAt(checker, identities, node);
|
|
342
|
+
// A REST parameter only, as `parameterOf` gates its own call on `flags.rest`:
|
|
343
|
+
// a destructured ordinary parameter can also be typed as a union of tuples
|
|
344
|
+
// (hono's `([[, route]]) => route` over `[[H, Route], ParamIndexMap] |
|
|
345
|
+
// [[H, Route], Params]` elements) and holds ONE tuple value, not an array
|
|
346
|
+
// of arms -- collapsing it here made the binding an array while the ABI
|
|
347
|
+
// kept the union, the same disagreement in the other direction.
|
|
348
|
+
if (!declaration || declaration.dotDotDotToken === undefined)
|
|
349
|
+
return null;
|
|
350
|
+
return restParameterUnionOfTuplesElementTypeOf(checker, checker.getTypeAtLocation(declaration));
|
|
351
|
+
};
|
|
352
|
+
/**
|
|
353
|
+
* `restParameterArrayElementAt`'s sibling for CALL-SITE evidence rather
|
|
354
|
+
* than the checker's own contextual-tuple widening: `parameter-bindings.ts`'s
|
|
355
|
+
* `restElementTypeAt` joins the actual arguments every reachable call passes
|
|
356
|
+
* at or past the rest parameter's own ordinal, which is real evidence about
|
|
357
|
+
* what the array holds and outranks a bare checker guess -- the same
|
|
358
|
+
* priority `structural-parts.ts`'s `parameterOf` already gives an ordinary
|
|
359
|
+
* parameter's census answer over `restArray`. Resolves the same DECLARATION
|
|
360
|
+
* `restParameterArrayElementAt` does, from either shape a node names, so a
|
|
361
|
+
* body-side reference (`structural.ts`'s `typeAt`) and the ABI's own slot
|
|
362
|
+
* (`parameterOf`) read the identical fact and cannot disagree about it.
|
|
363
|
+
*/
|
|
364
|
+
export const censusRestElementAt = (checker, identities, parameters, node) => {
|
|
365
|
+
const declaration = restParameterDeclarationAt(checker, identities, node);
|
|
366
|
+
return declaration ? (parameters.restElementTypeAt?.(declaration) ?? null) : null;
|
|
367
|
+
};
|
|
368
|
+
/**
|
|
369
|
+
* The rest parameter `node` names, whichever of the two shapes names one:
|
|
370
|
+
* the DECLARATION itself -- `contributeParameter`'s own binding-initialize
|
|
371
|
+
* site (`producers/bindings.ts`), which types the frame slot before any
|
|
372
|
+
* reference to it exists -- or an IDENTIFIER that reads it (`rest[0]`,
|
|
373
|
+
* `rest.length`, a spread, anywhere inside the function's own body). Both
|
|
374
|
+
* name the same physical rest parameter and must resolve to the same
|
|
375
|
+
* declaration for `restParameterArrayTypeOf` to answer both identically;
|
|
376
|
+
* see this file's header comment for the third authority
|
|
377
|
+
* (`structural-parts.ts`'s `parameterOf`), which resolves its own
|
|
378
|
+
* declaration and calls `restParameterArrayTypeOf` directly, bypassing this
|
|
379
|
+
* dispatch entirely -- unaffected by this change and already agreeing with
|
|
380
|
+
* it.
|
|
381
|
+
*/
|
|
382
|
+
const restParameterDeclarationAt = (checker, identities, node) => {
|
|
383
|
+
if (ts.isParameter(node))
|
|
384
|
+
return node;
|
|
385
|
+
if (!ts.isIdentifier(node))
|
|
386
|
+
return null;
|
|
387
|
+
const symbol = checker.getSymbolAtLocation(node);
|
|
388
|
+
const declaration = symbol ? identities.declarationOfSymbol(symbol) : null;
|
|
389
|
+
return declaration && ts.isParameter(declaration) ? declaration : null;
|
|
390
|
+
};
|
|
391
|
+
/**
|
|
392
|
+
* The element an implied array pattern's value is STORED as, read out of the
|
|
393
|
+
* tuple arms its call sites (and its own default) pass: every stated position
|
|
394
|
+
* of every arm, plus -- for a position no arm reaches -- the pattern element's
|
|
395
|
+
* own default, which is then the only value that position ever binds. One
|
|
396
|
+
* covering type when the positions agree (`widestOf`); their union when they
|
|
397
|
+
* do not, because `[null, 0, false, '']` is a real array of four kinds and
|
|
398
|
+
* the pattern reads each position back out of it. A position's `undefined`
|
|
399
|
+
* is positional (an optional tuple element, a shorter arm) and the read
|
|
400
|
+
* supplies it per position (`patternReadTypeAt`), so it is not an element.
|
|
401
|
+
* `any` when nothing states a position at all.
|
|
402
|
+
*/
|
|
403
|
+
/** The non-null arms a set of holders offers -- a union holder contributes each member by itself. */
|
|
404
|
+
const holderArmsOf = (checker, holders) => holders.flatMap((holder) => {
|
|
405
|
+
const nonNull = checker.getNonNullableType(holder);
|
|
406
|
+
return nonNull.isUnion() ? nonNull.types.map((arm) => checker.getNonNullableType(arm)) : [nonNull];
|
|
407
|
+
});
|
|
408
|
+
/**
|
|
409
|
+
* Whether every holder PROVES a value at `position`: each arm is a tuple whose
|
|
410
|
+
* required prefix reaches past it. The pattern reads out of the array the
|
|
411
|
+
* parameter stores, so a position is `element | undefined` in general -- but
|
|
412
|
+
* `[x, y = 2] = [1]` reached only as `m()` never leaves `x` absent, and
|
|
413
|
+
* spelling it optional there hands `x + y` an optional operand for nothing.
|
|
414
|
+
* A plain-array arm proves no position; an optional tuple element proves none
|
|
415
|
+
* either.
|
|
416
|
+
*/
|
|
417
|
+
export const impliedPatternPositionPresentEverywhere = (checker, holders, position) => {
|
|
418
|
+
const arms = holderArmsOf(checker, holders);
|
|
419
|
+
const holdsUndefined = (type) => (type.flags & (ts.TypeFlags.Undefined | ts.TypeFlags.Void | ts.TypeFlags.Any | ts.TypeFlags.Unknown)) !== 0 ||
|
|
420
|
+
(type.isUnion() && type.types.some(holdsUndefined));
|
|
421
|
+
return (arms.length > 0 &&
|
|
422
|
+
arms.every((arm) => {
|
|
423
|
+
if (!checker.isTupleType(arm) || arm.target.minLength <= position)
|
|
424
|
+
return false;
|
|
425
|
+
// A required tuple position typed `undefined` is a HOLE (`[,]` types
|
|
426
|
+
// as `[undefined]`), and a hole reads as absent: not a proof.
|
|
427
|
+
const at = checker.getTypeArguments(arm)[position];
|
|
428
|
+
return at !== undefined && !holdsUndefined(at);
|
|
429
|
+
}));
|
|
430
|
+
};
|
|
431
|
+
export const impliedPatternElementOfArms = (checker, holders, pattern) => {
|
|
432
|
+
const arms = holderArmsOf(checker, holders);
|
|
433
|
+
if (arms.length === 0 || !arms.every((arm) => checker.isTupleType(arm) || checker.isArrayType(arm)))
|
|
434
|
+
return null;
|
|
435
|
+
const usable = (type) => !isUnusableEvidence(type) && (type.flags & ts.TypeFlags.Undefined) === 0;
|
|
436
|
+
const settle = (type) => withoutUndefinedMember(checker, checker.getBaseTypeOfLiteralType(type));
|
|
437
|
+
// A plain-array arm (`f(values)` for `var values = [1, 2, 3]`) states its
|
|
438
|
+
// element at EVERY position, a tuple arm states each position by itself.
|
|
439
|
+
const everywhere = arms.flatMap((arm) => {
|
|
440
|
+
if (checker.isTupleType(arm))
|
|
441
|
+
return [];
|
|
442
|
+
const element = checker.getIndexTypeOfType(arm, ts.IndexKind.Number);
|
|
443
|
+
return element ? [settle(element)] : [];
|
|
444
|
+
});
|
|
445
|
+
const byPosition = arms.map((arm) => (checker.isTupleType(arm) ? checker.getTypeArguments(arm).map(settle) : []));
|
|
446
|
+
const width = Math.max(pattern.elements.length, ...byPosition.map((positions) => positions.length));
|
|
447
|
+
const stated = [];
|
|
448
|
+
let sawDynamic = false;
|
|
449
|
+
for (let position = 0; position < width; position++) {
|
|
450
|
+
const offered = [
|
|
451
|
+
...everywhere,
|
|
452
|
+
...byPosition.flatMap((positions) => (positions[position] === undefined ? [] : [positions[position]]))
|
|
453
|
+
];
|
|
454
|
+
if (offered.some((type) => (type.flags & ts.TypeFlags.Any) !== 0))
|
|
455
|
+
sawDynamic = true;
|
|
456
|
+
const at = offered.filter(usable);
|
|
457
|
+
if (at.length > 0) {
|
|
458
|
+
stated.push(...at);
|
|
459
|
+
continue;
|
|
460
|
+
}
|
|
461
|
+
const element = pattern.elements[position];
|
|
462
|
+
if (element && ts.isBindingElement(element) && element.initializer && !element.dotDotDotToken) {
|
|
463
|
+
const fallback = settle(checker.getTypeAtLocation(element.initializer));
|
|
464
|
+
if (usable(fallback))
|
|
465
|
+
stated.push(fallback);
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
// Arms that state NO position (`f([])` against `[{ x }]`) hold nothing: the
|
|
469
|
+
// element is `never`, the read past every arm is `undefined`, and a nested
|
|
470
|
+
// pattern over it throws where the language throws. Only an `any` somewhere
|
|
471
|
+
// in the evidence makes the element genuinely unknown.
|
|
472
|
+
if (stated.length === 0)
|
|
473
|
+
return sawDynamic ? checker.getAnyType() : checker.getNeverType();
|
|
474
|
+
return widestOf(checker, stated) ?? unionTypeOf(checker, [...new Set(stated)]) ?? checker.getAnyType();
|
|
475
|
+
};
|
|
476
|
+
/** The internal union constructor; the public checker exposes none (the same reach `field-bindings.ts` takes). */
|
|
477
|
+
const unionTypeOf = (checker, types) => {
|
|
478
|
+
const constructing = checker;
|
|
479
|
+
return typeof constructing.getUnionType === 'function' ? constructing.getUnionType(types) : null;
|
|
480
|
+
};
|
|
481
|
+
export const impliedPatternArrayElementAt = (checker, parameters, node) => {
|
|
482
|
+
const parameter = impliedPatternParameterOf(checker, node);
|
|
483
|
+
if (!parameter || !ts.isArrayBindingPattern(parameter.name))
|
|
484
|
+
return null;
|
|
485
|
+
// The census publishes a disagreement it settled as SYNTHESIZED arms
|
|
486
|
+
// (`unionArmsAt`), never as one `ts.Type` -- `f([1, 2])` next to `f([])`
|
|
487
|
+
// is exactly that -- so the arms are asked for before the single answer.
|
|
488
|
+
const synthesized = parameters.unionArmsAt(parameter);
|
|
489
|
+
const holders = synthesized ?? [parameters.typeAt(parameter) ?? checker.getTypeAtLocation(parameter)];
|
|
490
|
+
return impliedPatternElementOfArms(checker, holders, parameter.name);
|
|
491
|
+
};
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
/**
|
|
3
|
+
* What a call to an OVERLOAD SET whose one implementation is a GENERATOR
|
|
4
|
+
* physically produces.
|
|
5
|
+
*
|
|
6
|
+
* `implementationSignatureOf` (`structural-declarations.ts`) already states the
|
|
7
|
+
* rule for the callee: an overload set declares several ways to CALL a name and
|
|
8
|
+
* exactly one body, so the one signature that physically exists is the
|
|
9
|
+
* implementation's, and `valueTypeAt` publishes the function object from it.
|
|
10
|
+
* The CALL's result was left out of that, and for a generator the two answers
|
|
11
|
+
* are not interchangeable: a generator's body returns the generator object
|
|
12
|
+
* `EvaluateGeneratorBody` creates, which this compiler carries as `iterator`,
|
|
13
|
+
* while the overload signature above it is free to spell that object as any
|
|
14
|
+
* interface it satisfies. node-compat's `URLSearchParams`
|
|
15
|
+
* (`runtime/node/globals.ts`) spells it `IterableIterator<string>` over
|
|
16
|
+
* `*entries(): Generator<string>`, and an interface is a `native-record-ref` --
|
|
17
|
+
* so the call site asked for a record result from a callee whose convention
|
|
18
|
+
* returns an iterator, and cpp refused the conversion.
|
|
19
|
+
*
|
|
20
|
+
* BOTH halves of an invocation read this, which is why it lives in a module of
|
|
21
|
+
* its own rather than beside either: `structural.ts`'s `typeAt` publishes the
|
|
22
|
+
* call expression's own result through it, and `producers/invocations.ts`'s
|
|
23
|
+
* `buildSelectedSignature` publishes the selected signature's return type
|
|
24
|
+
* through it. Those two are compared by `validateInvocationResult`, which fails
|
|
25
|
+
* the producer closed on any disagreement it has no declared divergence for --
|
|
26
|
+
* correctly, because a producer that answers a question twice has published two
|
|
27
|
+
* answers for one operation. There is no divergence to declare here and there
|
|
28
|
+
* should not be one: this is not a case where the checker and this compiler
|
|
29
|
+
* know different things, it is one physical return type that both sides must
|
|
30
|
+
* read from the same place.
|
|
31
|
+
*
|
|
32
|
+
* Narrow on purpose, to the one disagreement a body can have with its own
|
|
33
|
+
* overloads that the overloads cannot express. The ordinary overload idiom --
|
|
34
|
+
* `f(x: string): string; f(x: number): number; f(x: any): any {...}` -- is the
|
|
35
|
+
* exact opposite case: there the implementation's `any` is the widened frame
|
|
36
|
+
* the several signatures share, and preferring it would box every call result
|
|
37
|
+
* in the program. A generator body states no such widening; `asteriskToken` is
|
|
38
|
+
* the whole gate.
|
|
39
|
+
*
|
|
40
|
+
* A generic implementation is refused rather than guessed at: its own return
|
|
41
|
+
* type still names its signature's type parameters, and this has no call-site
|
|
42
|
+
* instantiation to bind them with, so answering would trade a wrong carrier for
|
|
43
|
+
* an unresolved one. A call anywhere in an OPTIONAL CHAIN is refused for the
|
|
44
|
+
* mirror reason `presentReturnTypeOf` exists: `a?.b()` really is `T |
|
|
45
|
+
* undefined`, and that `undefined` is a fact about the call expression rather
|
|
46
|
+
* than about the callee, so replacing the whole expression's type with the
|
|
47
|
+
* callee's return would strip the absent branch the guard was written for.
|
|
48
|
+
* `ts.isOptionalChain` rather than the call's own `questionDotToken`, because
|
|
49
|
+
* `a?.b()` carries the `?.` on the property access and every later link of the
|
|
50
|
+
* chain publishes the same short circuit.
|
|
51
|
+
*
|
|
52
|
+
* Asked of the callee's SYMBOL rather than of `getResolvedSignature`, which is
|
|
53
|
+
* the answer this wants and the one thing that must not be asked from inside
|
|
54
|
+
* `typeAt`: `structural-callable.ts`'s own comment records resolving every
|
|
55
|
+
* arbitrary call there recursively instantiating hono's conditional route types
|
|
56
|
+
* until the host stack overflowed. Nothing is lost by not asking -- TypeScript
|
|
57
|
+
* never resolves a call to the implementation signature while overloads exist,
|
|
58
|
+
* so a symbol carrying both shapes resolves to a bodiless overload at every call
|
|
59
|
+
* site by construction.
|
|
60
|
+
*/
|
|
61
|
+
export declare const physicalGeneratorOverloadResultAt: (checker: ts.TypeChecker, node: ts.Node) => ts.Type | null;
|
|
62
|
+
/**
|
|
63
|
+
* The same answer for a MEMBER SYMBOL rather than a call site.
|
|
64
|
+
*
|
|
65
|
+
* `producers/iteration-yield.ts`'s `iteratorRecordTypesOf` reads what a
|
|
66
|
+
* resolved `[Symbol.iterator]` returns straight off the member symbol's own
|
|
67
|
+
* callable type, and TypeScript shows an overload set's bodiless signatures
|
|
68
|
+
* there and never its implementation -- so `*[Symbol.iterator](): Generator<T>`
|
|
69
|
+
* behind an `[Symbol.iterator](): IterableIterator<T>` overload read back as
|
|
70
|
+
* the interface. `producers/protocol.ts`'s `generatorRecordTypeOf` then failed
|
|
71
|
+
* its `isGeneratorType` test and published the synthetic ECMA-262 `{ next() }`
|
|
72
|
+
* record for a method whose body hands back a native cursor, which is the
|
|
73
|
+
* `method "..." body convention cannot fill its published bound-method
|
|
74
|
+
* convention` refusal (`emit-class-properties.ts`) -- the same one fact
|
|
75
|
+
* disagreeing with itself, one authority over from the call result above.
|
|
76
|
+
*/
|
|
77
|
+
export declare const physicalGeneratorOverloadReturnOf: (checker: ts.TypeChecker, declarations: readonly ts.Declaration[]) => ts.Type | null;
|