@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,407 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
export const emptyInstantiatedMembers = { through: () => null };
|
|
3
|
+
/** How deep the pairing walk goes before it stops. A member type nested past this is not worth a table entry. */
|
|
4
|
+
const pairingDepth = 6;
|
|
5
|
+
const memberNameOf = (member) => {
|
|
6
|
+
const name = member.name;
|
|
7
|
+
if (!name)
|
|
8
|
+
return null;
|
|
9
|
+
if (ts.isIdentifier(name) || ts.isStringLiteral(name) || ts.isNumericLiteral(name))
|
|
10
|
+
return name.text;
|
|
11
|
+
return null;
|
|
12
|
+
};
|
|
13
|
+
const isStatic = (member) => ts.canHaveModifiers(member) && (ts.getModifiers(member)?.some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword) ?? false);
|
|
14
|
+
/**
|
|
15
|
+
* The declarations whose types this table pairs: the members a generic
|
|
16
|
+
* class or interface declares.
|
|
17
|
+
*
|
|
18
|
+
* A STATIC is excluded. The instantiated spelling of a class reference is the
|
|
19
|
+
* INSTANCE type, so its property table holds instance members; a static read
|
|
20
|
+
* off it is simply absent, and asking would either answer nothing or -- worse,
|
|
21
|
+
* for a name a class declares both ways -- answer with the wrong one.
|
|
22
|
+
*/
|
|
23
|
+
const membersOf = (declaration) => {
|
|
24
|
+
if (ts.isClassLike(declaration))
|
|
25
|
+
return declaration.members.filter((member) => !isStatic(member));
|
|
26
|
+
if (ts.isInterfaceDeclaration(declaration))
|
|
27
|
+
return declaration.members;
|
|
28
|
+
return [];
|
|
29
|
+
};
|
|
30
|
+
export const createInstantiatedMembers = (checker, specializations) => {
|
|
31
|
+
// Keyed by declaration and ordinal, not by the asking view: a copy's member
|
|
32
|
+
// types are a property of the copy, and every path that passes through it
|
|
33
|
+
// asks the same question. `null` marks a copy with no instantiated spelling,
|
|
34
|
+
// so the miss is paid once.
|
|
35
|
+
const tables = new Map();
|
|
36
|
+
/**
|
|
37
|
+
* Whether `type` has a hole in it at all -- a type parameter, or one of the
|
|
38
|
+
* deferred forms that only a parameter keeps open.
|
|
39
|
+
*
|
|
40
|
+
* This is the admission test for a table entry, and without it the walk
|
|
41
|
+
* records an answer for CLOSED types too. That is not a harmless extra row:
|
|
42
|
+
* `through` is asked before every other question in `structural.ts`'s
|
|
43
|
+
* `translate`, so one wrong row redefines that type for the whole copy.
|
|
44
|
+
* hono's `PatternRouter<T>` produced exactly that -- `string` paired against
|
|
45
|
+
* `[T, ParamIndexMap]` through a positional walk whose two sides did not
|
|
46
|
+
* correspond -- and every `string` in the copy then translated as that
|
|
47
|
+
* tuple, which surfaced four functions away as `parts.join('')` refusing to
|
|
48
|
+
* ToString its elements.
|
|
49
|
+
*
|
|
50
|
+
* A closed type needs no image: it already IS its own instantiation, and the
|
|
51
|
+
* table exists only to answer for the ones that are not.
|
|
52
|
+
*/
|
|
53
|
+
const isOpen = (type, depth, seen, owner) => {
|
|
54
|
+
// `Instantiable` is the checker's own name for exactly this: a type
|
|
55
|
+
// parameter, a conditional, an indexed access, a `keyof`, a substitution
|
|
56
|
+
// or a template-literal mapping -- every form that is unresolved only
|
|
57
|
+
// while something it names is open. Open in THIS copy's parameters,
|
|
58
|
+
// though, not in any parameter at all: see `isCopyHole`.
|
|
59
|
+
if (type.flags & ts.TypeFlags.Instantiable)
|
|
60
|
+
return isCopyHole(type, owner, depth);
|
|
61
|
+
// A primitive, a literal or an enum member has no structure to hold a
|
|
62
|
+
// hole and no image other than itself. Its apparent members are the
|
|
63
|
+
// global interface's (`Number`, `String`), which is where the walk below
|
|
64
|
+
// used to wander -- `number.toString(): string`, `string.concat(...:
|
|
65
|
+
// string[])`, `string[].map<U>` -- and come back "open" on `map`'s own
|
|
66
|
+
// `U`, so that `number` itself was recorded as a key.
|
|
67
|
+
if ((type.flags & (ts.TypeFlags.Object | ts.TypeFlags.UnionOrIntersection)) === 0)
|
|
68
|
+
return false;
|
|
69
|
+
if (depth > pairingDepth || seen.has(type))
|
|
70
|
+
return false;
|
|
71
|
+
seen.add(type);
|
|
72
|
+
if (type.isUnionOrIntersection())
|
|
73
|
+
return type.types.some((one) => isOpen(one, depth + 1, seen, owner));
|
|
74
|
+
for (const argument of type.aliasTypeArguments ?? [])
|
|
75
|
+
if (isOpen(argument, depth + 1, seen, owner))
|
|
76
|
+
return true;
|
|
77
|
+
const reference = type;
|
|
78
|
+
if (reference.target !== undefined) {
|
|
79
|
+
for (const argument of checker.getTypeArguments(reference))
|
|
80
|
+
if (isOpen(argument, depth + 1, seen, owner))
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
for (const property of type.getProperties()) {
|
|
84
|
+
const at = property.valueDeclaration ?? property.declarations?.[0];
|
|
85
|
+
if (at && isOpen(checker.getTypeOfSymbolAtLocation(property, at), depth + 1, seen, owner))
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
for (const signature of [...type.getCallSignatures(), ...type.getConstructSignatures()]) {
|
|
89
|
+
if (isOpen(signature.getReturnType(), depth + 1, seen, owner))
|
|
90
|
+
return true;
|
|
91
|
+
for (const parameter of signature.parameters) {
|
|
92
|
+
const at = parameter.valueDeclaration ?? parameter.declarations?.[0];
|
|
93
|
+
if (at && isOpen(checker.getTypeOfSymbolAtLocation(parameter, at), depth + 1, seen, owner))
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return false;
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* Whether an instantiable type is gated on a parameter THIS copy fills.
|
|
101
|
+
*
|
|
102
|
+
* A type parameter is a hole of the copy when the copy's own declaration,
|
|
103
|
+
* or one enclosing it, writes it -- and when a class, interface or alias
|
|
104
|
+
* does, since those are filled by the reference the copy was minted from.
|
|
105
|
+
* A parameter some OTHER signature writes is not: `Array<string>.map<U>`,
|
|
106
|
+
* reached through a closed member's apparent type, is instantiated by the
|
|
107
|
+
* checker at each call and never by this copy. Counting it recorded
|
|
108
|
+
* `number => T["pos"]` for `setTextRange`'s copy inside `update<T>` -- the
|
|
109
|
+
* copy's own `T` image read through a closed key -- and every `number` in
|
|
110
|
+
* that copy then translated as the indexed access, whose walk re-entered
|
|
111
|
+
* `number` and refused it as self-referential: tsc's `Node.pos`, `id` and
|
|
112
|
+
* the whole `Mutable<Node>` family.
|
|
113
|
+
*
|
|
114
|
+
* The composite forms are walked through the checker's own public fields
|
|
115
|
+
* to the parameters they are gated on; a form this does not know stays
|
|
116
|
+
* open, which is the old answer and the safe one.
|
|
117
|
+
*/
|
|
118
|
+
const isCopyHole = (type, owner, depth) => {
|
|
119
|
+
if (depth > pairingDepth)
|
|
120
|
+
return true;
|
|
121
|
+
const flags = type.flags;
|
|
122
|
+
if (flags & ts.TypeFlags.TypeParameter)
|
|
123
|
+
return parameterBelongsToCopy(type, owner);
|
|
124
|
+
if (flags & ts.TypeFlags.IndexedAccess) {
|
|
125
|
+
const access = type;
|
|
126
|
+
return isCopyHole(access.objectType, owner, depth + 1) || isCopyHole(access.indexType, owner, depth + 1);
|
|
127
|
+
}
|
|
128
|
+
if (flags & ts.TypeFlags.Conditional) {
|
|
129
|
+
const conditional = type;
|
|
130
|
+
return isCopyHole(conditional.checkType, owner, depth + 1) || isCopyHole(conditional.extendsType, owner, depth + 1);
|
|
131
|
+
}
|
|
132
|
+
if (flags & ts.TypeFlags.Index)
|
|
133
|
+
return isCopyHole(type.type, owner, depth + 1);
|
|
134
|
+
if (flags & ts.TypeFlags.StringMapping)
|
|
135
|
+
return isCopyHole(type.type, owner, depth + 1);
|
|
136
|
+
if (flags & ts.TypeFlags.Substitution)
|
|
137
|
+
return isCopyHole(type.baseType, owner, depth + 1);
|
|
138
|
+
if (flags & ts.TypeFlags.TemplateLiteral)
|
|
139
|
+
return type.types.some((one) => isCopyHole(one, owner, depth + 1));
|
|
140
|
+
if (type.isUnionOrIntersection())
|
|
141
|
+
return type.types.some((one) => isCopyHole(one, owner, depth + 1));
|
|
142
|
+
return (flags & ts.TypeFlags.Instantiable) !== 0;
|
|
143
|
+
};
|
|
144
|
+
/**
|
|
145
|
+
* `isOpen` as `pair` asks it: depth 0, a fresh `seen`. With those two fixed
|
|
146
|
+
* the answer is a function of the type and the owner alone, and the walk
|
|
147
|
+
* behind it is the expensive part of building a table -- every property and
|
|
148
|
+
* every signature parameter of the type, each through the checker, six
|
|
149
|
+
* levels down. hono asked it for the same closed member types (`Response`,
|
|
150
|
+
* `Promise<...>`, `Headers`) once per signature position that mentioned
|
|
151
|
+
* them, and paid the whole walk every time; on `hono-hello` that was the
|
|
152
|
+
* single largest checker cost in the frontend. Remembered per owner because
|
|
153
|
+
* `isCopyHole` reads the owner.
|
|
154
|
+
*/
|
|
155
|
+
const openness = new Map();
|
|
156
|
+
const isOpenFor = (type, owner) => {
|
|
157
|
+
let known = openness.get(owner);
|
|
158
|
+
if (!known)
|
|
159
|
+
openness.set(owner, (known = new Map()));
|
|
160
|
+
const remembered = known.get(type);
|
|
161
|
+
if (remembered !== undefined)
|
|
162
|
+
return remembered;
|
|
163
|
+
const answer = isOpen(type, 0, new Set(), owner);
|
|
164
|
+
known.set(type, answer);
|
|
165
|
+
return answer;
|
|
166
|
+
};
|
|
167
|
+
/**
|
|
168
|
+
* Whether `pair` would record anything for `open` at this depth: the three
|
|
169
|
+
* tests `pair` itself makes before it touches the closed side, lifted out so
|
|
170
|
+
* a caller can make them BEFORE it reads the closed side at all.
|
|
171
|
+
*
|
|
172
|
+
* Reading the closed side is what costs. A closed member's type on the
|
|
173
|
+
* instantiated parent is minted by instantiating the member's declared type
|
|
174
|
+
* under the copy's arguments, and for hono's overload sets that is the
|
|
175
|
+
* conditional-and-intersection machinery of `HandlerInterface` evaluated per
|
|
176
|
+
* overload, per verb -- only for `pair` to look at the open side first and
|
|
177
|
+
* return, because the open side had no hole. The open side is read off the
|
|
178
|
+
* generic parent and is cheap; asking it first skips the instantiation for
|
|
179
|
+
* every member that was never going to be paired.
|
|
180
|
+
*/
|
|
181
|
+
const admits = (open, into, depth, owner) => depth <= pairingDepth && !into.has(open) && isOpenFor(open, owner);
|
|
182
|
+
const parameterBelongsToCopy = (parameter, owner) => {
|
|
183
|
+
const declared = parameter.getSymbol()?.declarations?.[0];
|
|
184
|
+
if (!declared || !ts.isTypeParameterDeclaration(declared))
|
|
185
|
+
return true;
|
|
186
|
+
const holder = declared.parent;
|
|
187
|
+
if (!ts.isFunctionLike(holder))
|
|
188
|
+
return true;
|
|
189
|
+
for (let ancestor = owner; ancestor !== undefined; ancestor = ancestor.parent)
|
|
190
|
+
if (ancestor === holder)
|
|
191
|
+
return true;
|
|
192
|
+
return false;
|
|
193
|
+
};
|
|
194
|
+
const pair = (open, closed, into, depth, seen, owner) => {
|
|
195
|
+
if (open === closed || !admits(open, into, depth, owner))
|
|
196
|
+
return;
|
|
197
|
+
// The open side is admitted because it has a genuine hole (`admits` already
|
|
198
|
+
// proved that), so a closed image of `any`/`unknown` here is never the
|
|
199
|
+
// checker reporting a real instantiation -- it is either the checker's own
|
|
200
|
+
// internal error-recovery type surfacing through the public API with no
|
|
201
|
+
// way to tell it apart from a real `any` (observed on
|
|
202
|
+
// `ReadableStreamDefaultController.enqueue`: the class carries an implicit
|
|
203
|
+
// polymorphic `this` type argument alongside `R`, and asking for a member's
|
|
204
|
+
// type at the open declaration's location while only `R` is closed makes
|
|
205
|
+
// `getTypeOfSymbolAtLocation` fail internally and hand back `errorType`,
|
|
206
|
+
// which prints and flag-tests identically to `any`), or a genuine `any`/
|
|
207
|
+
// `unknown` binding that ordinary substitution already resolves the same
|
|
208
|
+
// way `through` would have. Recording it here is strictly worse than not
|
|
209
|
+
// recording it: `through` is asked before every other question in
|
|
210
|
+
// `translate`, so one wrong row collapses every occurrence of the open
|
|
211
|
+
// type in this copy to `any` -- exactly this method's ABI blocker. Refusing
|
|
212
|
+
// the entry falls back to substitution, which is the same answer when the
|
|
213
|
+
// image genuinely is any/unknown, and the correct signature otherwise.
|
|
214
|
+
if ((closed.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) !== 0)
|
|
215
|
+
return;
|
|
216
|
+
into.set(open, closed);
|
|
217
|
+
// Deliberately NOT cut short at `depth === pairingDepth`, although every
|
|
218
|
+
// child below is refused at `depth + 1` and the cut would be exact. On hono
|
|
219
|
+
// 83% of the signatures this walk touches are those leaves, and skipping
|
|
220
|
+
// them saved two seconds here -- then cost ten downstream: the types the
|
|
221
|
+
// leaves resolve are the ones `translate`, representation and lowering go
|
|
222
|
+
// on to ask the checker for, and resolving them on this walk, top-down
|
|
223
|
+
// through the instantiation, is several times cheaper than resolving them
|
|
224
|
+
// from the queries those phases make. Measured 2026-09-16: normalization
|
|
225
|
+
// 3.9s -> 10.7s, lowering 0.9s -> 3.5s, same graph to the operation.
|
|
226
|
+
// A union is its ARMS and nothing else. Its properties and its call
|
|
227
|
+
// signatures are synthesized by the checker from every arm at once, so
|
|
228
|
+
// they are not the "one declared list, mapped" correspondence the walk
|
|
229
|
+
// below relies on: the synthesized `push` of `[[T, Params][]] | [[T,
|
|
230
|
+
// ParamIndexMap][], ParamStash]` carries a parameter built out of both
|
|
231
|
+
// arms, and pairing it positionally against the instantiated union's
|
|
232
|
+
// synthesized `push` recorded `[T, Params][] => [[H, RouterRoute],
|
|
233
|
+
// ParamIndexMap][]` -- hono's `PatternRouter.match`, whose `[handlers]`
|
|
234
|
+
// then had the wrong tuple element and matched neither arm of its own
|
|
235
|
+
// declared result. The arms themselves are matched safely, so nothing is
|
|
236
|
+
// lost by stopping here.
|
|
237
|
+
if (open.isUnion() || closed.isUnion()) {
|
|
238
|
+
if (open.isUnion() && closed.isUnion())
|
|
239
|
+
pairArms(open.types, closed.types, into, depth, seen, owner);
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
if (open.isIntersection() && closed.isIntersection())
|
|
243
|
+
pairArms(open.types, closed.types, into, depth, seen, owner);
|
|
244
|
+
// The ARGUMENTS of a reference, so `Promise<WithId<TSchema>>` records an
|
|
245
|
+
// entry for `WithId<TSchema>` too. The target is checked, not just the
|
|
246
|
+
// count: two references of the same arity to different generics have
|
|
247
|
+
// nothing to do with each other, and a positional pairing across them
|
|
248
|
+
// would record an answer for an unrelated type.
|
|
249
|
+
const openReference = open;
|
|
250
|
+
const closedReference = closed;
|
|
251
|
+
if (openReference.target && openReference.target === closedReference.target) {
|
|
252
|
+
const openArguments = checker.getTypeArguments(openReference);
|
|
253
|
+
const closedArguments = checker.getTypeArguments(closedReference);
|
|
254
|
+
if (openArguments.length === closedArguments.length) {
|
|
255
|
+
for (let index = 0; index < openArguments.length; index += 1) {
|
|
256
|
+
const one = openArguments[index];
|
|
257
|
+
const other = closedArguments[index];
|
|
258
|
+
if (one && other)
|
|
259
|
+
pair(one, other, into, depth + 1, seen, owner);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
// Members BY NAME. A record's own fields are where the remaining holes sit
|
|
264
|
+
// once the signature positions are paired -- mongodb's `Filter<TSchema>` is
|
|
265
|
+
// a mapped type whose every property is a `Condition<WithId<TSchema>[P]>` --
|
|
266
|
+
// and a name is an exact correspondence rather than a position, so nothing
|
|
267
|
+
// has to be assumed about ordering or about a collapse.
|
|
268
|
+
for (const property of open.getProperties()) {
|
|
269
|
+
const at = property.valueDeclaration ?? property.declarations?.[0];
|
|
270
|
+
if (!at)
|
|
271
|
+
continue;
|
|
272
|
+
const openMember = checker.getTypeOfSymbolAtLocation(property, at);
|
|
273
|
+
if (!admits(openMember, into, depth + 1, owner))
|
|
274
|
+
continue;
|
|
275
|
+
const counterpart = checker.getPropertyOfType(closed, property.getName());
|
|
276
|
+
if (!counterpart)
|
|
277
|
+
continue;
|
|
278
|
+
pair(openMember, checker.getTypeOfSymbolAtLocation(counterpart, at), into, depth + 1, seen, owner);
|
|
279
|
+
}
|
|
280
|
+
pairSignatures(open.getCallSignatures(), closed.getCallSignatures(), into, depth, seen, owner);
|
|
281
|
+
pairSignatures(open.getConstructSignatures(), closed.getConstructSignatures(), into, depth, seen, owner);
|
|
282
|
+
};
|
|
283
|
+
/**
|
|
284
|
+
* A union's arms, matched by IDENTITY and then by elimination -- never by
|
|
285
|
+
* position.
|
|
286
|
+
*
|
|
287
|
+
* The checker orders a union's members by internal type id, and an
|
|
288
|
+
* instantiated arm is a freshly interned type whose id bears no relation to
|
|
289
|
+
* the one it replaced, so the two lists are routinely in different orders.
|
|
290
|
+
* hono's `PatternRouter<T>` produced exactly that: an open
|
|
291
|
+
* `ArrayIterator<[T, ParamIndexMap]> | ArrayIterator<string> |
|
|
292
|
+
* ArrayIterator<[T, Params]>` against a closed list whose `Params` arm had
|
|
293
|
+
* moved to the front. Pairing those by position records an answer relating
|
|
294
|
+
* two types that are not each other's image, and because `through` is asked
|
|
295
|
+
* before every other question in `translate`, one such row redefines that
|
|
296
|
+
* type for the whole copy -- surfacing four functions away as
|
|
297
|
+
* `parts.join('')` refusing to ToString its elements.
|
|
298
|
+
*
|
|
299
|
+
* A CLOSED arm identifies itself: it has no hole, so instantiation left it
|
|
300
|
+
* alone and the same `ts.Type` object appears on both sides. Striking those
|
|
301
|
+
* off leaves the open arms and their images. Only a one-to-one leftover is
|
|
302
|
+
* unambiguous, so that is the only case that records anything; anything else
|
|
303
|
+
* is a collapse or a genuine ambiguity, and the honest answer is no entry.
|
|
304
|
+
*/
|
|
305
|
+
const pairArms = (open, closed, into, depth, seen, owner) => {
|
|
306
|
+
const remaining = [...closed];
|
|
307
|
+
const unmatched = [];
|
|
308
|
+
for (const arm of open) {
|
|
309
|
+
const at = remaining.indexOf(arm);
|
|
310
|
+
if (at >= 0)
|
|
311
|
+
remaining.splice(at, 1);
|
|
312
|
+
else
|
|
313
|
+
unmatched.push(arm);
|
|
314
|
+
}
|
|
315
|
+
const sole = unmatched.length === 1 ? unmatched[0] : undefined;
|
|
316
|
+
const image = remaining.length === 1 ? remaining[0] : undefined;
|
|
317
|
+
if (sole && image)
|
|
318
|
+
pair(sole, image, into, depth + 1, seen, owner);
|
|
319
|
+
};
|
|
320
|
+
const pairSignatures = (open, closed, into, depth, seen, owner) => {
|
|
321
|
+
if (open.length !== closed.length)
|
|
322
|
+
return;
|
|
323
|
+
for (let index = 0; index < open.length; index += 1) {
|
|
324
|
+
const left = open[index];
|
|
325
|
+
const right = closed[index];
|
|
326
|
+
if (!left || !right)
|
|
327
|
+
continue;
|
|
328
|
+
const openReturn = left.getReturnType();
|
|
329
|
+
if (admits(openReturn, into, depth + 1, owner))
|
|
330
|
+
pair(openReturn, right.getReturnType(), into, depth + 1, seen, owner);
|
|
331
|
+
if (left.parameters.length !== right.parameters.length)
|
|
332
|
+
continue;
|
|
333
|
+
for (let position = 0; position < left.parameters.length; position += 1) {
|
|
334
|
+
const leftParameter = left.parameters[position];
|
|
335
|
+
const rightParameter = right.parameters[position];
|
|
336
|
+
const at = leftParameter?.valueDeclaration ?? leftParameter?.declarations?.[0];
|
|
337
|
+
if (!leftParameter || !rightParameter || !at)
|
|
338
|
+
continue;
|
|
339
|
+
const openParameter = checker.getTypeOfSymbolAtLocation(leftParameter, at);
|
|
340
|
+
if (!admits(openParameter, into, depth + 1, owner))
|
|
341
|
+
continue;
|
|
342
|
+
pair(openParameter, checker.getTypeOfSymbolAtLocation(rightParameter, at), into, depth + 1, seen, owner);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
};
|
|
346
|
+
const build = (declaration, ordinal) => {
|
|
347
|
+
const copy = specializations.specializationsOf(declaration)[ordinal];
|
|
348
|
+
if (!copy)
|
|
349
|
+
return null;
|
|
350
|
+
const closedParent = copy.instantiated;
|
|
351
|
+
const signatures = copy.instantiatedSignature;
|
|
352
|
+
if (!closedParent && !signatures)
|
|
353
|
+
return null;
|
|
354
|
+
const table = new Map();
|
|
355
|
+
if (signatures)
|
|
356
|
+
pairSignatures([signatures[0]], [signatures[1]], table, 0, new Set(), declaration);
|
|
357
|
+
if (!closedParent)
|
|
358
|
+
return table;
|
|
359
|
+
for (const member of membersOf(declaration)) {
|
|
360
|
+
const name = memberNameOf(member);
|
|
361
|
+
if (name === null)
|
|
362
|
+
continue;
|
|
363
|
+
const openSymbol = checker.getSymbolAtLocation(member.name);
|
|
364
|
+
if (!openSymbol)
|
|
365
|
+
continue;
|
|
366
|
+
const openMember = checker.getTypeOfSymbolAtLocation(openSymbol, member);
|
|
367
|
+
if (!admits(openMember, table, 0, declaration))
|
|
368
|
+
continue;
|
|
369
|
+
const closedSymbol = checker.getPropertyOfType(closedParent, name);
|
|
370
|
+
if (!closedSymbol)
|
|
371
|
+
continue;
|
|
372
|
+
pair(openMember, checker.getTypeOfSymbolAtLocation(closedSymbol, member), table, 0, new Set(), declaration);
|
|
373
|
+
}
|
|
374
|
+
return table;
|
|
375
|
+
};
|
|
376
|
+
const tableFor = (declaration, ordinal) => {
|
|
377
|
+
const known = tables.get(declaration) ?? [];
|
|
378
|
+
const remembered = known[ordinal];
|
|
379
|
+
if (remembered !== undefined)
|
|
380
|
+
return remembered;
|
|
381
|
+
const built = build(declaration, ordinal);
|
|
382
|
+
known[ordinal] = built;
|
|
383
|
+
tables.set(declaration, known);
|
|
384
|
+
return built;
|
|
385
|
+
};
|
|
386
|
+
/**
|
|
387
|
+
* Innermost copy first, for the reason `createPathBinding` searches that way:
|
|
388
|
+
* the nearest enclosing instantiation is the one in scope.
|
|
389
|
+
*/
|
|
390
|
+
return (path) => {
|
|
391
|
+
if (path.length === 0)
|
|
392
|
+
return emptyInstantiatedMembers;
|
|
393
|
+
return {
|
|
394
|
+
through: (type) => {
|
|
395
|
+
for (let index = path.length - 1; index >= 0; index -= 1) {
|
|
396
|
+
const step = path[index];
|
|
397
|
+
if (!step)
|
|
398
|
+
continue;
|
|
399
|
+
const answer = tableFor(step.owner, step.ordinal)?.get(type);
|
|
400
|
+
if (answer)
|
|
401
|
+
return answer;
|
|
402
|
+
}
|
|
403
|
+
return null;
|
|
404
|
+
}
|
|
405
|
+
};
|
|
406
|
+
};
|
|
407
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { StructuralTypeId } from '../../identity/ids.js';
|
|
3
|
+
import type { StructuralTypeTable } from '../model/structural-type-table.js';
|
|
4
|
+
/**
|
|
5
|
+
* One physical signature for an INTERSECTION of function types whose frames
|
|
6
|
+
* differ only at parameter positions.
|
|
7
|
+
*
|
|
8
|
+
* An intersection of callables is one value that must satisfy every member,
|
|
9
|
+
* and `derive.ts`'s `deriveIntersection` pools their signatures and hands
|
|
10
|
+
* them to `sharedAbiOf` as an overload set -- which refuses, correctly for an
|
|
11
|
+
* overload set: a caller reaching one overload through another's frame passes
|
|
12
|
+
* the wrong arguments. But this is not an overload set. A value of `((a: A)
|
|
13
|
+
* => R) & ((b: B) => R)` is a SINGLE function that has to accept an `A` and
|
|
14
|
+
* a `B`, so the frame it physically has takes `A | B` -- and a caller with an
|
|
15
|
+
* `A` in hand reaches it by the ordinary widening into that union, which is
|
|
16
|
+
* a conversion this compiler already renders.
|
|
17
|
+
*
|
|
18
|
+
* TypeScript builds exactly this shape by contravariance and hono hits it:
|
|
19
|
+
* `this.#matchResult[0].map(([[, route]]) => route)` (`request.ts:421`) has a
|
|
20
|
+
* receiver that is a union of two array types, so `map`'s callback parameter
|
|
21
|
+
* is the INTERSECTION of the two arms' callbacks. Fourteen mandatory
|
|
22
|
+
* obligations on two lines, and the arrow written there has one parameter
|
|
23
|
+
* list, which is the whole point.
|
|
24
|
+
*
|
|
25
|
+
* Congruence is required, not assumed: same arity, same minimum arity, same
|
|
26
|
+
* optional/rest/initializer state at every position, same receiver, same
|
|
27
|
+
* result. Anything else really is a set of different frames and stays an
|
|
28
|
+
* intersection, refused by name downstream. A member that is not a pure
|
|
29
|
+
* function type -- one carrying properties, or a construct signature -- is
|
|
30
|
+
* not this shape either; the callable-and-record intersection is what the
|
|
31
|
+
* ordinary intersection merge exists for.
|
|
32
|
+
*/
|
|
33
|
+
export declare const joinedCallableOf: (table: StructuralTypeTable, type: ts.IntersectionType, members: readonly StructuralTypeId[]) => StructuralTypeId | null;
|
|
34
|
+
/**
|
|
35
|
+
* Join compatible index-signature arms even inside a mixed union. A table
|
|
36
|
+
* must keep the same storage when it enters `Table | string`: leaving its
|
|
37
|
+
* component table types separate there would require splitting one mutable
|
|
38
|
+
* object into several homogeneous dictionaries and lose aliasing.
|
|
39
|
+
*
|
|
40
|
+
* Each group requires exactly one index signature, the same key type and
|
|
41
|
+
* readonly state, no named members, and no call or construct signatures.
|
|
42
|
+
* Non-table arms and incompatible tables remain separate union members.
|
|
43
|
+
*/
|
|
44
|
+
export declare const joinedIndexUnionOf: (checker: ts.TypeChecker, table: StructuralTypeTable, typeOf: (type: ts.Type) => StructuralTypeId, members: readonly ts.Type[]) => StructuralTypeId | null;
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
/**
|
|
3
|
+
* One physical signature for an INTERSECTION of function types whose frames
|
|
4
|
+
* differ only at parameter positions.
|
|
5
|
+
*
|
|
6
|
+
* An intersection of callables is one value that must satisfy every member,
|
|
7
|
+
* and `derive.ts`'s `deriveIntersection` pools their signatures and hands
|
|
8
|
+
* them to `sharedAbiOf` as an overload set -- which refuses, correctly for an
|
|
9
|
+
* overload set: a caller reaching one overload through another's frame passes
|
|
10
|
+
* the wrong arguments. But this is not an overload set. A value of `((a: A)
|
|
11
|
+
* => R) & ((b: B) => R)` is a SINGLE function that has to accept an `A` and
|
|
12
|
+
* a `B`, so the frame it physically has takes `A | B` -- and a caller with an
|
|
13
|
+
* `A` in hand reaches it by the ordinary widening into that union, which is
|
|
14
|
+
* a conversion this compiler already renders.
|
|
15
|
+
*
|
|
16
|
+
* TypeScript builds exactly this shape by contravariance and hono hits it:
|
|
17
|
+
* `this.#matchResult[0].map(([[, route]]) => route)` (`request.ts:421`) has a
|
|
18
|
+
* receiver that is a union of two array types, so `map`'s callback parameter
|
|
19
|
+
* is the INTERSECTION of the two arms' callbacks. Fourteen mandatory
|
|
20
|
+
* obligations on two lines, and the arrow written there has one parameter
|
|
21
|
+
* list, which is the whole point.
|
|
22
|
+
*
|
|
23
|
+
* Congruence is required, not assumed: same arity, same minimum arity, same
|
|
24
|
+
* optional/rest/initializer state at every position, same receiver, same
|
|
25
|
+
* result. Anything else really is a set of different frames and stays an
|
|
26
|
+
* intersection, refused by name downstream. A member that is not a pure
|
|
27
|
+
* function type -- one carrying properties, or a construct signature -- is
|
|
28
|
+
* not this shape either; the callable-and-record intersection is what the
|
|
29
|
+
* ordinary intersection merge exists for.
|
|
30
|
+
*/
|
|
31
|
+
export const joinedCallableOf = (table, type, members) => {
|
|
32
|
+
if (members.length < 2 || members.length !== type.types.length)
|
|
33
|
+
return null;
|
|
34
|
+
const pure = type.types.every((member) => member.getCallSignatures().length === 1 && member.getConstructSignatures().length === 0 && member.getProperties().length === 0);
|
|
35
|
+
if (!pure)
|
|
36
|
+
return null;
|
|
37
|
+
const calls = [];
|
|
38
|
+
for (const member of members) {
|
|
39
|
+
const shape = table.get(member).shape;
|
|
40
|
+
const call = shape.kind === 'signature' && shape.construct.length === 0 ? shape.call[0] : undefined;
|
|
41
|
+
if (!call || shape.kind !== 'signature' || shape.call.length !== 1)
|
|
42
|
+
return null;
|
|
43
|
+
calls.push(call);
|
|
44
|
+
}
|
|
45
|
+
const first = calls[0];
|
|
46
|
+
if (!first)
|
|
47
|
+
return null;
|
|
48
|
+
const congruent = calls.every((call) => call.parameters.length === first.parameters.length &&
|
|
49
|
+
call.minimumArity === first.minimumArity &&
|
|
50
|
+
call.thisParameter === first.thisParameter &&
|
|
51
|
+
call.result === first.result &&
|
|
52
|
+
call.parameters.every((parameter, index) => parameter.optional === first.parameters[index]?.optional &&
|
|
53
|
+
parameter.rest === first.parameters[index]?.rest &&
|
|
54
|
+
parameter.hasInitializer === first.parameters[index]?.hasInitializer));
|
|
55
|
+
if (!congruent)
|
|
56
|
+
return null;
|
|
57
|
+
const widen = (at, read) => {
|
|
58
|
+
const seen = [];
|
|
59
|
+
for (const call of calls) {
|
|
60
|
+
const parameter = call.parameters[at];
|
|
61
|
+
const id = parameter ? read(parameter) : null;
|
|
62
|
+
if (id !== null && !seen.includes(id))
|
|
63
|
+
seen.push(id);
|
|
64
|
+
}
|
|
65
|
+
const only = seen.length === 1 ? seen[0] : undefined;
|
|
66
|
+
return only ?? table.intern({ kind: 'union', members: seen });
|
|
67
|
+
};
|
|
68
|
+
return table.intern({
|
|
69
|
+
kind: 'signature',
|
|
70
|
+
construct: [],
|
|
71
|
+
call: [
|
|
72
|
+
{
|
|
73
|
+
minimumArity: first.minimumArity,
|
|
74
|
+
thisParameter: first.thisParameter,
|
|
75
|
+
result: first.result,
|
|
76
|
+
parameters: first.parameters.map((parameter, index) => ({
|
|
77
|
+
...parameter,
|
|
78
|
+
type: widen(index, (one) => one.type),
|
|
79
|
+
slot: widen(index, (one) => one.slot)
|
|
80
|
+
}))
|
|
81
|
+
}
|
|
82
|
+
]
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Join compatible index-signature arms even inside a mixed union. A table
|
|
87
|
+
* must keep the same storage when it enters `Table | string`: leaving its
|
|
88
|
+
* component table types separate there would require splitting one mutable
|
|
89
|
+
* object into several homogeneous dictionaries and lose aliasing.
|
|
90
|
+
*
|
|
91
|
+
* Each group requires exactly one index signature, the same key type and
|
|
92
|
+
* readonly state, no named members, and no call or construct signatures.
|
|
93
|
+
* Non-table arms and incompatible tables remain separate union members.
|
|
94
|
+
*/
|
|
95
|
+
export const joinedIndexUnionOf = (checker, table, typeOf, members) => {
|
|
96
|
+
const groups = [];
|
|
97
|
+
for (const member of members) {
|
|
98
|
+
const indexes = checker.getIndexInfosOfType(member);
|
|
99
|
+
const index = indexes.length === 1 ? indexes[0] : undefined;
|
|
100
|
+
const key = index ? keyDomainOf(index.keyType) : null;
|
|
101
|
+
if (!index ||
|
|
102
|
+
key === null ||
|
|
103
|
+
member.getProperties().length !== 0 ||
|
|
104
|
+
member.getCallSignatures().length !== 0 ||
|
|
105
|
+
member.getConstructSignatures().length !== 0)
|
|
106
|
+
continue;
|
|
107
|
+
const group = groups.find((candidate) => candidate.index.keyType === index.keyType && candidate.index.isReadonly === index.isReadonly);
|
|
108
|
+
if (group) {
|
|
109
|
+
group.members.push(member);
|
|
110
|
+
group.values.push(index.type);
|
|
111
|
+
}
|
|
112
|
+
else
|
|
113
|
+
groups.push({ key, index, members: [member], values: [index.type] });
|
|
114
|
+
}
|
|
115
|
+
const joined = groups.filter((group) => group.members.length > 1);
|
|
116
|
+
if (joined.length === 0)
|
|
117
|
+
return null;
|
|
118
|
+
const replacements = new Map();
|
|
119
|
+
for (const group of joined) {
|
|
120
|
+
const values = [...new Set(group.values.map(typeOf))];
|
|
121
|
+
const value = values.length === 1 ? values[0] : undefined;
|
|
122
|
+
const id = table.intern({
|
|
123
|
+
kind: 'object',
|
|
124
|
+
members: [],
|
|
125
|
+
membersDropped: false,
|
|
126
|
+
index: [{ key: group.key, value: value ?? table.intern({ kind: 'union', members: values }), readonly: group.index.isReadonly }]
|
|
127
|
+
});
|
|
128
|
+
for (const member of group.members)
|
|
129
|
+
replacements.set(member, id);
|
|
130
|
+
}
|
|
131
|
+
const result = [...new Set(members.map((member) => replacements.get(member) ?? typeOf(member)))];
|
|
132
|
+
return result.length === 1 ? (result[0] ?? null) : table.intern({ kind: 'union', members: result });
|
|
133
|
+
};
|
|
134
|
+
/** The key domain an index signature's key type names, or `null` for one this layer does not model. */
|
|
135
|
+
const keyDomainOf = (keyType) => {
|
|
136
|
+
if ((keyType.flags & ts.TypeFlags.String) !== 0)
|
|
137
|
+
return 'string';
|
|
138
|
+
if ((keyType.flags & ts.TypeFlags.Number) !== 0)
|
|
139
|
+
return 'number';
|
|
140
|
+
if ((keyType.flags & ts.TypeFlags.ESSymbol) !== 0)
|
|
141
|
+
return 'symbol';
|
|
142
|
+
return null;
|
|
143
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
export declare const layoutRelevantParameterIndices: (checker: ts.TypeChecker, declaration: ts.ClassLikeDeclaration | ts.InterfaceDeclaration) => ReadonlySet<number>;
|
|
3
|
+
/**
|
|
4
|
+
* The parameter positions this class keeps in MUTABLE storage of its own.
|
|
5
|
+
*
|
|
6
|
+
* Folding two copies of a class onto one layout is only sound where the
|
|
7
|
+
* folded-away filling cannot be stored. `class Queue<R> { private items: R[] }`
|
|
8
|
+
* held at `unknown` and at `Uint8Array` is one struct storing `Uint8Array[]`
|
|
9
|
+
* the moment the copies fold, and the `unknown` copy then pushes a string into
|
|
10
|
+
* it -- measured, and it aborts at runtime reading the value back out
|
|
11
|
+
* ("an assertion out of a dynamic value ... is not of the declared type").
|
|
12
|
+
* A position listed here must never be folded; those copies are genuinely two
|
|
13
|
+
* layouts and split.
|
|
14
|
+
*
|
|
15
|
+
* `readonly` is NOT an exclusion, though it reads like one. A readonly field
|
|
16
|
+
* is still WRITTEN, by the constructor, with whatever that copy was handed:
|
|
17
|
+
* `class Handle<T> { constructor(readonly bag: Bag<T>) {} }` folded onto its
|
|
18
|
+
* `Uint8Array` copy declares the field `Bag<Uint8Array>` and the `unknown`
|
|
19
|
+
* copy's own constructor then stores a `Bag<unknown>` in it. Only `static`
|
|
20
|
+
* is excluded -- that is class state, shaped by no instantiation.
|
|
21
|
+
*
|
|
22
|
+
* A BASE's storage is this class's storage. `class ReadableStreamBYOBReader<R>
|
|
23
|
+
* extends ReadableStreamDefaultReader<R>` declares no member at all: the
|
|
24
|
+
* `stream_` field that actually carries `R` is the base's. Reading only this
|
|
25
|
+
* declaration's own members answered "stores nothing", so its copies folded
|
|
26
|
+
* onto the byte one and `getReader` on an `unknown` stream constructed a
|
|
27
|
+
* reader whose inherited field was typed at the other stream class.
|
|
28
|
+
*/
|
|
29
|
+
export declare const parametersInInstanceStorage: (checker: ts.TypeChecker, declaration: ts.ClassLikeDeclaration | ts.InterfaceDeclaration) => ReadonlySet<number>;
|