@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,737 @@
|
|
|
1
|
+
import { implicitArgumentsSlotOf } from './implicit-arguments.js';
|
|
2
|
+
import ts from 'typescript';
|
|
3
|
+
import { emptyParameterBindingCensus } from './parameter-bindings.js';
|
|
4
|
+
import { emptyCollectionBindingCensus } from './collection-bindings.js';
|
|
5
|
+
import { bagReturnTypeOf, bagShapeTypeAt, emptyObjectBagCensus } from './object-bag-bindings.js';
|
|
6
|
+
import { accessorPassthroughMemberTargetOf, emptyDeclaredMemberCensus, literalAccessorOf, physicalInitializerTypeOf } from './structural-declarations.js';
|
|
7
|
+
import { parameterSlotTypeOf, restParameterArrayTypeOf, restParameterUnionOfTuplesElementTypeOf, impliedPatternArrayElementAt } from './parameter-slot.js';
|
|
8
|
+
import { isUnusableEvidence } from './derived-expression-type.js';
|
|
9
|
+
import { inferredArrayElementAt, inferredCollectionTypeArgumentsAt } from './structural-array-element.js';
|
|
10
|
+
/**
|
|
11
|
+
* Only the standard library's bind protocol describes a synthetic flattened
|
|
12
|
+
* entry. Its instantiated A/B tuples name captured arguments and the native
|
|
13
|
+
* bound wrapper's remaining scalar slots; they do not name a source body's
|
|
14
|
+
* rest container. This also covers the callable type in bind's `this` slot.
|
|
15
|
+
*
|
|
16
|
+
* An ordinary declaration, including a generic or a callable type annotation,
|
|
17
|
+
* keeps one rest parameter even when its tuple has a statically known length.
|
|
18
|
+
* Tuple cardinality alone is never evidence for changing a physical ABI.
|
|
19
|
+
*/
|
|
20
|
+
const isBuiltinBindParameter = (declaration) => {
|
|
21
|
+
if (!declaration.getSourceFile().hasNoDefaultLib)
|
|
22
|
+
return false;
|
|
23
|
+
let owner = declaration.parent;
|
|
24
|
+
while (owner && !ts.isMethodSignature(owner))
|
|
25
|
+
owner = owner.parent;
|
|
26
|
+
return (owner !== undefined &&
|
|
27
|
+
ts.isMethodSignature(owner) &&
|
|
28
|
+
ts.isIdentifier(owner.name) &&
|
|
29
|
+
owner.name.text === 'bind' &&
|
|
30
|
+
ts.isInterfaceDeclaration(owner.parent) &&
|
|
31
|
+
(owner.parent.name.text === 'CallableFunction' || owner.parent.name.text === 'NewableFunction'));
|
|
32
|
+
};
|
|
33
|
+
const closedRestTupleElementsAt = (checker, declaration, declared) => {
|
|
34
|
+
if (declaration.dotDotDotToken === undefined || declaration.type === undefined || !isBuiltinBindParameter(declaration))
|
|
35
|
+
return null;
|
|
36
|
+
if (!checker.isTupleType(declared))
|
|
37
|
+
return null;
|
|
38
|
+
const reference = declared;
|
|
39
|
+
const target = reference.target;
|
|
40
|
+
const elements = checker.getTypeArguments(reference);
|
|
41
|
+
const flagsAt = (index) => target.elementFlags[index] ?? ts.ElementFlags.Required;
|
|
42
|
+
if (elements.some((_, index) => (flagsAt(index) & (ts.ElementFlags.Rest | ts.ElementFlags.Variadic)) !== 0))
|
|
43
|
+
return null;
|
|
44
|
+
return elements.map((element, index) => ({ type: element, optional: (flagsAt(index) & ts.ElementFlags.Optional) !== 0 }));
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* A type the checker INVENTED for an object literal, as opposed to one the
|
|
48
|
+
* program named. Anonymous alone is not enough -- a type alias to a type
|
|
49
|
+
* literal is anonymous too, and it IS a name the program wrote -- so the
|
|
50
|
+
* literal's own declaration is what identifies it.
|
|
51
|
+
*/
|
|
52
|
+
const inferredObjectLiteralType = (type) => {
|
|
53
|
+
if ((type.flags & ts.TypeFlags.Object) === 0)
|
|
54
|
+
return false;
|
|
55
|
+
if ((type.objectFlags & ts.ObjectFlags.Anonymous) === 0)
|
|
56
|
+
return false;
|
|
57
|
+
return (type.symbol?.declarations ?? []).some(ts.isObjectLiteralExpression);
|
|
58
|
+
};
|
|
59
|
+
/** `GEA_MEMBER_DEBUG=<member>` reports which of the three sources answered that one member. */
|
|
60
|
+
const memberDebug = process.env['GEA_MEMBER_DEBUG'];
|
|
61
|
+
export const createStructuralParts = (input) => {
|
|
62
|
+
const { checker, identities, typeOf, implicitReceiverOf, declaredMemberSignatureOf, keyOfSymbol, internArray } = input;
|
|
63
|
+
const declaredMembers = input.declaredMembers ?? emptyDeclaredMemberCensus;
|
|
64
|
+
const parameters = input.parameters ?? emptyParameterBindingCensus;
|
|
65
|
+
const collections = input.collections ?? emptyCollectionBindingCensus;
|
|
66
|
+
const table = input.table ?? null;
|
|
67
|
+
const bags = input.bags ?? emptyObjectBagCensus;
|
|
68
|
+
const minimumArityOf = (signature) => {
|
|
69
|
+
const parameters = signature.getParameters();
|
|
70
|
+
let required = 0;
|
|
71
|
+
for (const parameter of parameters) {
|
|
72
|
+
const declaration = identities.declarationOfSymbol(parameter);
|
|
73
|
+
if (!declaration || !ts.isParameter(declaration))
|
|
74
|
+
break;
|
|
75
|
+
if (checker.isOptionalParameter(declaration) || declaration.dotDotDotToken)
|
|
76
|
+
break;
|
|
77
|
+
required += 1;
|
|
78
|
+
}
|
|
79
|
+
return required;
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* The type of a symbol, asked at a declaration when it has one.
|
|
83
|
+
*
|
|
84
|
+
* A signature's parameter symbol does not always have a declaration: an
|
|
85
|
+
* *inferred* signature -- what JavaScript sources reach the checker as, and
|
|
86
|
+
* what a union or instantiation of signatures synthesizes -- carries parameter
|
|
87
|
+
* symbols the checker minted rather than parsed. There is no node to ask at,
|
|
88
|
+
* and there used to be no answer for that: the symbol itself was cast to a
|
|
89
|
+
* node and handed to `getTypeOfSymbolAtLocation`, which reads `location.parent`
|
|
90
|
+
* and crashed inside TypeScript on `Cannot read properties of undefined
|
|
91
|
+
* (reading 'kind')`. Every candidate whose type reached one of those
|
|
92
|
+
* signatures was blocked by a producer failure -- 496 of the three.js app's, 392 of
|
|
93
|
+
* three-angle-metal's -- because three.js is compiled from source and its
|
|
94
|
+
* signatures are inferred, not declared.
|
|
95
|
+
*
|
|
96
|
+
* `getTypeOfSymbol` is the location-free form of the same question and the
|
|
97
|
+
* right one to ask when there is no location; `structural-indexed-access.ts`
|
|
98
|
+
* already asks it that way. The located form stays wherever a declaration
|
|
99
|
+
* exists, because a location is what resolves a `this` type and narrows a
|
|
100
|
+
* parameter to the site being asked about.
|
|
101
|
+
*
|
|
102
|
+
* Deliberately checker-only, not routed through `censusedTypeAt`: this asks
|
|
103
|
+
* about a SYMBOL, not a node, and every real call site already gates its use
|
|
104
|
+
* behind a census check of its own (`parameterOf`'s `bound = ... parameters.
|
|
105
|
+
* typeAt(declaration)`, `memberOf`'s `fromCensus`/`censusResult` above) --
|
|
106
|
+
* this is the shared fallback primitive those sites reach for only once the
|
|
107
|
+
* census has already had, and declined, first say.
|
|
108
|
+
*/
|
|
109
|
+
const typeOfSymbolAt = (symbol, location) => location ? checker.getTypeOfSymbolAtLocation(symbol, location) : checker.getTypeOfSymbol(symbol);
|
|
110
|
+
/**
|
|
111
|
+
* `parameterOf` for exactly one element of a rest parameter's
|
|
112
|
+
* INSTANTIATED type, once `closedRestTupleElementsAt` (below) has already
|
|
113
|
+
* proved that instantiation is a settled, closed tuple rather than an open
|
|
114
|
+
* array -- `signatureOf`'s expansion caller, never `parameterOf` itself,
|
|
115
|
+
* decides WHEN this applies.
|
|
116
|
+
*
|
|
117
|
+
* Deliberately bypasses every declaration-derived branch `parameterOf`
|
|
118
|
+
* otherwise walks (the census, `restParameterArrayTypeOf`, the phantom/
|
|
119
|
+
* union-of-tuples widenings): those all answer "what does the WHOLE rest
|
|
120
|
+
* parameter hold", and a closed tuple's Nth element is a plain, ordinary
|
|
121
|
+
* slot with its own settled type -- exactly the fact `tupleElementsOf`
|
|
122
|
+
* already publishes for a tuple met anywhere else in this module. The one
|
|
123
|
+
* piece still shared with an ordinary parameter is the absence widening
|
|
124
|
+
* (`parameterSlotTypeOf`): an optional trailing tuple element still has to
|
|
125
|
+
* hold `undefined` when the call omits it.
|
|
126
|
+
*/
|
|
127
|
+
const parameterOfTupleElement = (element) => {
|
|
128
|
+
const flags = { optional: element.optional, rest: false, hasInitializer: false };
|
|
129
|
+
const type = typeOf(element.type);
|
|
130
|
+
return { type, slot: parameterSlotTypeOf(input.internUnion, typeOf(checker.getUndefinedType()), flags, type), ...flags };
|
|
131
|
+
};
|
|
132
|
+
const parameterOf = (parameter, forceRest = false) => {
|
|
133
|
+
const declaration = identities.declarationOfSymbol(parameter);
|
|
134
|
+
const isParameter = declaration !== null && ts.isParameter(declaration);
|
|
135
|
+
const bound = isParameter ? parameters.typeAt(declaration) : null;
|
|
136
|
+
const boundArms = isParameter ? parameters.unionArmsAt(declaration) : null;
|
|
137
|
+
// The published ABI and the body it wraps read the SAME rest parameter --
|
|
138
|
+
// see `parameter-slot.ts`'s `restParameterArrayTypeOf`, which the body's
|
|
139
|
+
// own binding (`structural.ts`'s `typeAt`) already consults. Asked here,
|
|
140
|
+
// ahead of the raw checker fallback, so a rest parameter's SLOT never
|
|
141
|
+
// publishes the closed tuple the body itself was never bound to.
|
|
142
|
+
//
|
|
143
|
+
// `restParameterArrayTypeOf` returns the tuple's widened ELEMENT type --
|
|
144
|
+
// its own doc says so ("The array's element type is `widestOf` ...") --
|
|
145
|
+
// not the array. `structural.ts`'s `typeAt` (the body-side reference to
|
|
146
|
+
// this same parameter) already wraps that element into an `array` shape
|
|
147
|
+
// rather than publishing it bare; this is that same wrap, so the
|
|
148
|
+
// signature's declared parameter type and the body's own binding of it
|
|
149
|
+
// agree, and `derive.ts`'s `abiOf` -- which trusts a rest parameter's
|
|
150
|
+
// slot is already the Array the language binds it to -- finds one there.
|
|
151
|
+
const restArray = isParameter ? restParameterArrayTypeOf(checker, declaration) : null;
|
|
152
|
+
// Real call-site evidence for an UNANNOTATED rest parameter --
|
|
153
|
+
// `parameter-bindings.ts`'s `restElementTypeAt`, joined over every
|
|
154
|
+
// reachable caller's actual arguments at or past this parameter's own
|
|
155
|
+
// ordinal -- outranks `restArray`'s bare checker-tuple widening exactly
|
|
156
|
+
// as `bound` already outranks it for the reasons stated below: it is a
|
|
157
|
+
// fact about what callers actually pass, not a guess reconstructed from
|
|
158
|
+
// a contextual type. Gated to `bound === null` because a rest parameter
|
|
159
|
+
// is never itself a `bound` candidate (`isUnannotated` refuses it, see
|
|
160
|
+
// that function's own doc), so this is the one real "the census bound
|
|
161
|
+
// this rest parameter" answer that exists.
|
|
162
|
+
const censusRestElement = isParameter && declaration.dotDotDotToken !== undefined && bound === null
|
|
163
|
+
? (parameters.restElementTypeAt?.(declaration) ?? null)
|
|
164
|
+
: null;
|
|
165
|
+
const declared = bound ?? typeOfSymbolAt(parameter, declaration ?? parameter.valueDeclaration);
|
|
166
|
+
const flags = {
|
|
167
|
+
optional: isParameter ? checker.isOptionalParameter(declaration) && declaration.initializer === undefined : false,
|
|
168
|
+
rest: forceRest || (isParameter ? declaration.dotDotDotToken !== undefined : false),
|
|
169
|
+
hasInitializer: isParameter ? declaration.initializer !== undefined : false
|
|
170
|
+
};
|
|
171
|
+
// `bound` (the parameter binding census) outranks `restArray` exactly as
|
|
172
|
+
// it did before this wrap existed -- when the census has already bound
|
|
173
|
+
// this declaration, that answer is shared with the body and is never the
|
|
174
|
+
// bare tuple-derived element `restParameterArrayTypeOf` produces.
|
|
175
|
+
//
|
|
176
|
+
// A THIRD rest-parameter shape neither of the two branches above covers:
|
|
177
|
+
// `...args: any`, an EXPLICIT annotation, so `restParameterArrayTypeOf`
|
|
178
|
+
// (gated to `declaration.type === undefined`) never runs, and `bound`
|
|
179
|
+
// has nothing published for a declaration this census does not bind.
|
|
180
|
+
// `declared` is then the checker's own answer at the parameter symbol --
|
|
181
|
+
// and for a rest parameter TypeScript lets the program spell `any`
|
|
182
|
+
// instead of `any[]`, the checker reports the symbol's type back exactly
|
|
183
|
+
// as written: bare `any`, never wrapped in an array. `abi.ts`'s
|
|
184
|
+
// `derive.ts` (`abiOf`) has one primitive for a rest slot, `array`, so a
|
|
185
|
+
// bare `any` reaching it derives to plain `dynamic` and every call that
|
|
186
|
+
// spreads a real array into it refuses to pack -- hono's `mount()`
|
|
187
|
+
// (`hono-base.ts`) forwards `...getOptions(c)`, a genuine `unknown[]`,
|
|
188
|
+
// into `applicationHandler: (request, ...args: any) => ...` this exact
|
|
189
|
+
// way. A rest parameter is ALWAYS the array ECMAScript's own
|
|
190
|
+
// `FunctionDeclarationInstantiation` binds it to (see this file's
|
|
191
|
+
// `parameterSlotTypeOf` sibling comment for the identical fact about the
|
|
192
|
+
// UNANNOTATED case) -- an explicit `any` describes the ELEMENT the
|
|
193
|
+
// program declined to narrow, never the container, so it is wrapped
|
|
194
|
+
// rather than left bare: `array<dynamic>` is what the value physically
|
|
195
|
+
// is, and boxing the whole parameter to avoid saying so is the same
|
|
196
|
+
// shortcut CLAUDE.md's carve-out never licenses for a container.
|
|
197
|
+
// A THIRD form an EXPLICITLY ANNOTATED rest parameter takes, alongside the
|
|
198
|
+
// bare-`any` fallback below: a union of tuples -- `...args: [] | [TNext]`,
|
|
199
|
+
// `lib.es2015.generator.d.ts`'s own spelling of `Generator.next`'s "zero or
|
|
200
|
+
// one argument". `restArray` above never fires here (it is gated to the
|
|
201
|
+
// UNANNOTATED case), and neither `checker.isArrayType` nor
|
|
202
|
+
// `checker.isTupleType` is true of the union itself, so without this the
|
|
203
|
+
// program falls straight into `restNotArrayShaped` and wraps the WHOLE
|
|
204
|
+
// union as if it were one element -- see
|
|
205
|
+
// `parameter-slot.ts`'s `restParameterUnionOfTuplesElementTypeOf` for the
|
|
206
|
+
// emission refusal that produces.
|
|
207
|
+
const restUnionOfTuples = isParameter && flags.rest && bound === null ? restParameterUnionOfTuplesElementTypeOf(checker, declared) : null;
|
|
208
|
+
// A constrained type parameter already denotes its container. `typeOf`
|
|
209
|
+
// follows that constraint for the body's binding too; wrapping T again
|
|
210
|
+
// here would publish Array<Array<number>> for T extends [number, number].
|
|
211
|
+
const restContainer = flags.rest ? (checker.getBaseConstraintOfType(declared) ?? declared) : declared;
|
|
212
|
+
const restNotArrayShaped = flags.rest &&
|
|
213
|
+
bound === null &&
|
|
214
|
+
restArray === null &&
|
|
215
|
+
restUnionOfTuples === null &&
|
|
216
|
+
!checker.isArrayType(restContainer) &&
|
|
217
|
+
!checker.isTupleType(restContainer);
|
|
218
|
+
// The destructured-parameter twin of the rest wrap below -- one function
|
|
219
|
+
// (`impliedPatternArrayElementAt`) answers it for the body's own binding
|
|
220
|
+
// (`structural.ts`'s `typeAt`) and for this slot, so the two agree.
|
|
221
|
+
const impliedElement = isParameter ? impliedPatternArrayElementAt(checker, parameters, declaration) : null;
|
|
222
|
+
const overridden = isParameter
|
|
223
|
+
? (input.parameterOverrideAt?.(declaration) ?? (table ? bagShapeTypeAt(table, typeOf, bags, declaration) : null))
|
|
224
|
+
: null;
|
|
225
|
+
const type = overridden
|
|
226
|
+
? overridden
|
|
227
|
+
: impliedElement
|
|
228
|
+
? internArray(typeOf(impliedElement))
|
|
229
|
+
: boundArms
|
|
230
|
+
? input.internUnion(boundArms.map(typeOf))
|
|
231
|
+
: censusRestElement !== null
|
|
232
|
+
? internArray(typeOf(censusRestElement))
|
|
233
|
+
: bound === null && restUnionOfTuples !== null
|
|
234
|
+
? internArray(typeOf(restUnionOfTuples))
|
|
235
|
+
: bound === null && restArray !== null
|
|
236
|
+
? internArray(typeOf(restArray))
|
|
237
|
+
: restNotArrayShaped
|
|
238
|
+
? internArray(typeOf(declared))
|
|
239
|
+
: typeOf(declared);
|
|
240
|
+
// The slot widens the SAME type the body binds -- the census's answer when
|
|
241
|
+
// it has one, the checker's otherwise -- for the reason stated on the
|
|
242
|
+
// `parameters` field above: one census, both ends, one answer.
|
|
243
|
+
return { type, slot: parameterSlotTypeOf(input.internUnion, typeOf(checker.getUndefinedType()), flags, type), ...flags };
|
|
244
|
+
};
|
|
245
|
+
/**
|
|
246
|
+
* `resultOverride` is how an optional call's callee gets the return its method
|
|
247
|
+
* actually has: the checker's resolved signature carries the chain's added
|
|
248
|
+
* `undefined`, which is a fact about the call expression and not about the
|
|
249
|
+
* function being called (`producers/optional-chain.ts`).
|
|
250
|
+
*/
|
|
251
|
+
const signatureOf = (signature, resultOverride) => {
|
|
252
|
+
const thisParameter = signature.thisParameter;
|
|
253
|
+
const written = thisParameter ? typeOfSymbolAt(thisParameter, thisParameter.valueDeclaration) : null;
|
|
254
|
+
const declaration = signature.getDeclaration();
|
|
255
|
+
const receiver = written ?? (declaration ? implicitReceiverOf(declaration) : null);
|
|
256
|
+
// The checker gives a union call signature its first declaration, but that
|
|
257
|
+
// declaration does not own every possible method receiver. Preserve the
|
|
258
|
+
// component receivers before publishing one physical callable convention.
|
|
259
|
+
// An explicit `this` remains the checker's own resolved constraint.
|
|
260
|
+
const composite = signature;
|
|
261
|
+
const implicitReceivers = written === null && composite.compositeKind === ts.TypeFlags.Union
|
|
262
|
+
? (composite.compositeSignatures ?? []).flatMap((part) => {
|
|
263
|
+
const own = part.getDeclaration();
|
|
264
|
+
const implicit = own ? implicitReceiverOf(own) : null;
|
|
265
|
+
return implicit ? [typeOf(implicit)] : [];
|
|
266
|
+
})
|
|
267
|
+
: [];
|
|
268
|
+
const receiverType = implicitReceivers.length > 0 ? input.internUnion(implicitReceivers) : receiver ? typeOf(receiver) : null;
|
|
269
|
+
// The return census (`return-bindings.ts`, composed into `parameters` by
|
|
270
|
+
// `withReturnBindings`/`composeReturnBindings` -- see this file's own
|
|
271
|
+
// `parameters` field doc) answers exactly this question for a function
|
|
272
|
+
// DECLARATION, not only for a call site: `ReturnBindingCensus.typeAt`
|
|
273
|
+
// special-cases `isReturnCandidateKind(node)` to return its own bound
|
|
274
|
+
// answer straight from the declaration. `parameterOf` above already asks
|
|
275
|
+
// the same composed census for every parameter (`parameters.typeAt(declaration)`);
|
|
276
|
+
// the result was the one slot of a signature that never asked at all --
|
|
277
|
+
// reaching for the checker's raw, un-narrowed `signature.getReturnType()`
|
|
278
|
+
// even where the census had already resolved the join of the function's
|
|
279
|
+
// own `return` statements. That is the two-authorities defect this module's
|
|
280
|
+
// header describes for parameters, recurring at the result: a value used as
|
|
281
|
+
// a first-class callable (an object literal's method value, a dispatch-table
|
|
282
|
+
// entry) gets its ABI from THIS function, and an unconsulted census here is
|
|
283
|
+
// exactly what makes `abi.result` publish `dynamic` for a function the
|
|
284
|
+
// census already typed. `resultOverride` still wins outright -- it is a
|
|
285
|
+
// fact about the CALL, not the callee, and the census has nothing to say
|
|
286
|
+
// about it.
|
|
287
|
+
const checkerResult = signature.getReturnType();
|
|
288
|
+
// The RESULT half of the same store `implicitReceiverOf` answers the
|
|
289
|
+
// receiver half of, and it outranks every source below because it IS the
|
|
290
|
+
// slot: a contextually typed object literal is laid out as the declared
|
|
291
|
+
// type (`structural-layout-type.ts`), so its `next` field's carrier is
|
|
292
|
+
// built from `TypedCursor`'s `next(): TypedStep`, while the literal's own
|
|
293
|
+
// unannotated `next() { return { value: 0, done: true } }` derived an
|
|
294
|
+
// ANONYMOUS record of identical shape but different interned identity --
|
|
295
|
+
// two conventions for one member, and no conversion between a named record
|
|
296
|
+
// and an anonymous one (`typed-custom-iterator-close.ts`, both directions:
|
|
297
|
+
// the cursor factory's result and the step's).
|
|
298
|
+
//
|
|
299
|
+
// Gated on the literal method annotating NO return type of its own: a
|
|
300
|
+
// written annotation is the program's own statement about this
|
|
301
|
+
// declaration and still wins, and a declared member with no annotation
|
|
302
|
+
// either leaves both sides on the inference they already shared.
|
|
303
|
+
const declaredMemberResult = (() => {
|
|
304
|
+
if (resultOverride !== undefined || !declaration)
|
|
305
|
+
return null;
|
|
306
|
+
if (!ts.isMethodDeclaration(declaration) || declaration.type !== undefined)
|
|
307
|
+
return null;
|
|
308
|
+
if (!ts.isObjectLiteralExpression(declaration.parent))
|
|
309
|
+
return null;
|
|
310
|
+
const member = declaredMemberSignatureOf(declaration, declaration.parent);
|
|
311
|
+
if (!member || member.type === undefined)
|
|
312
|
+
return null;
|
|
313
|
+
return checker.getSignatureFromDeclaration(member)?.getReturnType() ?? null;
|
|
314
|
+
})();
|
|
315
|
+
// The same statement as `declaredMemberResult` above, one level out: a
|
|
316
|
+
// function LITERAL written straight into a slot whose declared type states
|
|
317
|
+
// the result. The literal annotates no return type of its own, so the
|
|
318
|
+
// slot's statement is the only one the program makes, and the literal's
|
|
319
|
+
// inference of an ANONYMOUS record where the slot names `Events` is two
|
|
320
|
+
// identities for one value -- with no conversion between them, and none
|
|
321
|
+
// possible, because the target is a UNION and a value only widens into a
|
|
322
|
+
// union by already BEING one of its arms. `() => ({ onOpen: () => 2 })`
|
|
323
|
+
// against `((c: Ctx) => Events) | Ctx | Events | number` is the measured
|
|
324
|
+
// case: the argument published `() -> record#<literal>`, and certification
|
|
325
|
+
// refused both the widening of that callable into the tagged union and the
|
|
326
|
+
// store of the body's `Events` into the arrow's own record return slot --
|
|
327
|
+
// two refusals, one disagreement. The identical arrow written
|
|
328
|
+
// `(): Events => ...` certified, which is what named the RESULT as the one
|
|
329
|
+
// slot at fault: the parameter lists never mattered.
|
|
330
|
+
//
|
|
331
|
+
// Union slots only. A non-union slot already reaches the value through
|
|
332
|
+
// `declaredValueTypeOf` (a named binding) or through an ordinary callable
|
|
333
|
+
// conversion, neither of which this may pre-empt. One assignable arm with
|
|
334
|
+
// one call signature only -- two callable arms is a choice this cannot
|
|
335
|
+
// make, and the literal's own inference remains the answer.
|
|
336
|
+
//
|
|
337
|
+
// NARROWED TO THE IDENTITY QUESTION, because a slot's result is not always
|
|
338
|
+
// a restatement of the literal's own: measured over the 342 runtime
|
|
339
|
+
// programs, the rule without the shape test below also fires on every
|
|
340
|
+
// `.then` callback, whose slot result is the WIDER `T | PromiseLike<T>`,
|
|
341
|
+
// and on one slot result of `any`. Adopting either would be a widening --
|
|
342
|
+
// a boxed carrier in the `any` case -- not an identity correction. So it
|
|
343
|
+
// applies only where the literal RETURNS AN OBJECT LITERAL whose inferred
|
|
344
|
+
// type is anonymous and the slot names a record that literal already
|
|
345
|
+
// satisfies: the same shape under two identities, which is the whole
|
|
346
|
+
// defect and the only thing no conversion can bridge. With that test: one
|
|
347
|
+
// site across the 342 runtime programs and none across the 158 corpus
|
|
348
|
+
// fixtures.
|
|
349
|
+
const contextualSlotResult = (() => {
|
|
350
|
+
if (resultOverride !== undefined || !declaration)
|
|
351
|
+
return null;
|
|
352
|
+
if (!ts.isArrowFunction(declaration) && !ts.isFunctionExpression(declaration))
|
|
353
|
+
return null;
|
|
354
|
+
if (declaration.type !== undefined)
|
|
355
|
+
return null;
|
|
356
|
+
const contextual = checker.getContextualType(declaration);
|
|
357
|
+
if (!contextual || !contextual.isUnion())
|
|
358
|
+
return null;
|
|
359
|
+
const own = checker.getTypeAtLocation(declaration);
|
|
360
|
+
const arms = contextual.types.filter((member) => member.getCallSignatures().length === 1 && checker.isTypeAssignableTo(own, member));
|
|
361
|
+
const stated = arms.length === 1 ? arms[0]?.getCallSignatures()[0] : undefined;
|
|
362
|
+
if (!stated)
|
|
363
|
+
return null;
|
|
364
|
+
const slot = checker.getReturnTypeOfSignature(stated);
|
|
365
|
+
if (slot === checkerResult || slot.isUnion() || (slot.flags & ts.TypeFlags.Object) === 0)
|
|
366
|
+
return null;
|
|
367
|
+
if (!inferredObjectLiteralType(checkerResult) || !checker.isTypeAssignableTo(checkerResult, slot))
|
|
368
|
+
return null;
|
|
369
|
+
return slot;
|
|
370
|
+
})();
|
|
371
|
+
const censusResult = declaration ? parameters.typeAt(declaration) : null;
|
|
372
|
+
const censusUnionArms = resultOverride === undefined && declaration ? parameters.unionArmsAt(declaration) : null;
|
|
373
|
+
const bagResult = resultOverride === undefined && declaration && table ? bagReturnTypeOf(table, typeOf, bags, declaration) : null;
|
|
374
|
+
const collectionResult = (() => {
|
|
375
|
+
if (resultOverride !== undefined || !declaration || !table)
|
|
376
|
+
return null;
|
|
377
|
+
const expressions = [];
|
|
378
|
+
const visit = (node) => {
|
|
379
|
+
if (node !== declaration && ts.isFunctionLike(node))
|
|
380
|
+
return;
|
|
381
|
+
if (ts.isReturnStatement(node)) {
|
|
382
|
+
if (node.expression)
|
|
383
|
+
expressions.push(node.expression);
|
|
384
|
+
return;
|
|
385
|
+
}
|
|
386
|
+
ts.forEachChild(node, visit);
|
|
387
|
+
};
|
|
388
|
+
if (ts.isArrowFunction(declaration) && !ts.isBlock(declaration.body))
|
|
389
|
+
expressions.push(declaration.body);
|
|
390
|
+
else {
|
|
391
|
+
const body = ts.isFunctionDeclaration(declaration) ||
|
|
392
|
+
ts.isFunctionExpression(declaration) ||
|
|
393
|
+
ts.isArrowFunction(declaration) ||
|
|
394
|
+
ts.isMethodDeclaration(declaration) ||
|
|
395
|
+
ts.isConstructorDeclaration(declaration) ||
|
|
396
|
+
ts.isGetAccessorDeclaration(declaration) ||
|
|
397
|
+
ts.isSetAccessorDeclaration(declaration)
|
|
398
|
+
? declaration.body
|
|
399
|
+
: undefined;
|
|
400
|
+
if (body)
|
|
401
|
+
visit(body);
|
|
402
|
+
}
|
|
403
|
+
if (expressions.length === 0)
|
|
404
|
+
return null;
|
|
405
|
+
let agreed = null;
|
|
406
|
+
for (const expression of expressions) {
|
|
407
|
+
const inferred = inferredCollectionTypeArgumentsAt(collections, table, typeOf, bags, checker.getTypeAtLocation(expression), expression);
|
|
408
|
+
if (inferred === null || (agreed !== null && inferred !== agreed))
|
|
409
|
+
return null;
|
|
410
|
+
agreed = inferred;
|
|
411
|
+
}
|
|
412
|
+
return agreed;
|
|
413
|
+
})();
|
|
414
|
+
// An `async` function's own declared type really IS `Promise<T>` -- this
|
|
415
|
+
// used to unwrap it to `T` here via `checker.getAwaitedType`, making
|
|
416
|
+
// every async function compile as an ordinary synchronous function. That
|
|
417
|
+
// was scaffolding for an earlier false-certification patch (see
|
|
418
|
+
// `.scratch/HANDOVER-2026-08-31-session3.md`), not the target design; it
|
|
419
|
+
// is reverted now that `promise` is a real, statically-typed carrier
|
|
420
|
+
// (`representation/derive.ts`'s `PromiseDeclarationPolicy`). `await`
|
|
421
|
+
// still unwraps at its own site (`contributeAwait`,
|
|
422
|
+
// `producers/control.ts`), which is the only place ECMAScript actually
|
|
423
|
+
// performs this unwrap -- see citations.md finding 2.
|
|
424
|
+
const signatureParameters = signature.getParameters();
|
|
425
|
+
const phantomIndex = implicitArgumentsSlotOf(signature)?.ordinal ?? null;
|
|
426
|
+
// A JSDoc closure-style function type (`function(this: T, ...number):
|
|
427
|
+
// string`, the shape `@returns` synthesizes for an ABI-recovery callback)
|
|
428
|
+
// parses its rest parameter into a plain `ts.ParameterDeclaration` with NO
|
|
429
|
+
// `dotDotDotToken` -- there is no `...` token to parse, because the
|
|
430
|
+
// rest-ness is spelled by the JSDoc tag, not by punctuation on a real
|
|
431
|
+
// parameter list. `parameterOf`'s `rest` flag reads `dotDotDotToken`
|
|
432
|
+
// directly and was therefore blind to this shape, silently deriving a
|
|
433
|
+
// FIXED array-typed parameter instead of a runtime-sized rest slot --
|
|
434
|
+
// `test/runtime/dynamic-callable-rest-adapter.runtime.js`'s
|
|
435
|
+
// `recoverMethodRest` return type lost its rest convention this way, and
|
|
436
|
+
// a later `formatted.call(receiver, 4, 5)` had no rest frame to pack `4`
|
|
437
|
+
// and `5` into. `ts.signatureHasRestParameter` is the checker's own
|
|
438
|
+
// semantic answer (it reads the parameter SYMBOL's rest flag, which the
|
|
439
|
+
// JSDoc parser does set), independent of which syntax produced the
|
|
440
|
+
// signature, so it is asked once per signature and applied to the last
|
|
441
|
+
// parameter exactly the way an explicit phantom rest is forced below.
|
|
442
|
+
// Not part of the public `typescript` `.d.ts` (unlike the checker-cast
|
|
443
|
+
// escape hatches elsewhere in this module for the same reason), so it is
|
|
444
|
+
// reached the same way: a narrow, optional-typed cast rather than `any`.
|
|
445
|
+
const hasRestParameter = ts
|
|
446
|
+
.signatureHasRestParameter;
|
|
447
|
+
const semanticRestIndex = hasRestParameter?.(signature) ? signatureParameters.length - 1 : -1;
|
|
448
|
+
// Expand only a checker-authenticated bind protocol tuple. A source
|
|
449
|
+
// function's tuple rest retains the container its body actually binds.
|
|
450
|
+
const parametersOf = (parameter, index) => {
|
|
451
|
+
const declaration = identities.declarationOfSymbol(parameter);
|
|
452
|
+
if (declaration && ts.isParameter(declaration)) {
|
|
453
|
+
// Mirrors `parameterOf`'s own `declared` precedence exactly (census
|
|
454
|
+
// answer first, the checker's otherwise) so this expansion decision
|
|
455
|
+
// and `parameterOf`'s single-parameter answer can never look at two
|
|
456
|
+
// different types for the same declaration.
|
|
457
|
+
const declared = parameters.typeAt(declaration) ?? typeOfSymbolAt(parameter, declaration);
|
|
458
|
+
const closedElements = closedRestTupleElementsAt(checker, declaration, declared);
|
|
459
|
+
if (closedElements !== null)
|
|
460
|
+
return closedElements.map(parameterOfTupleElement);
|
|
461
|
+
}
|
|
462
|
+
return [parameterOf(parameter, index === semanticRestIndex)];
|
|
463
|
+
};
|
|
464
|
+
const parameterShapes = phantomIndex === null
|
|
465
|
+
? signatureParameters.flatMap(parametersOf)
|
|
466
|
+
: [
|
|
467
|
+
...signatureParameters.slice(0, phantomIndex).flatMap(parametersOf),
|
|
468
|
+
parameterOf(signatureParameters[phantomIndex], true)
|
|
469
|
+
];
|
|
470
|
+
// The census's arguments frame: a closed tuple when every body read names
|
|
471
|
+
// a fixed position (each position its own joined fact, the ones some
|
|
472
|
+
// caller omits optional), the runtime-sized Array of one element when the
|
|
473
|
+
// body indexes it at run time. See `implicit-arguments-tuple.ts`.
|
|
474
|
+
const implicitFrame = declaration && phantomIndex !== null ? parameters.implicitArgumentsTupleAt?.(declaration) : null;
|
|
475
|
+
if (implicitFrame && phantomIndex !== null) {
|
|
476
|
+
const parameter = parameterShapes[phantomIndex];
|
|
477
|
+
const type = implicitFrame.frame === 'array'
|
|
478
|
+
? internArray(typeOf(implicitFrame.element))
|
|
479
|
+
: table?.intern({
|
|
480
|
+
kind: 'tuple',
|
|
481
|
+
readonly: false,
|
|
482
|
+
elements: implicitFrame.elements.map((element, position) => ({
|
|
483
|
+
type: typeOf(element),
|
|
484
|
+
optional: position >= implicitFrame.required,
|
|
485
|
+
rest: false,
|
|
486
|
+
variadic: false
|
|
487
|
+
}))
|
|
488
|
+
});
|
|
489
|
+
if (parameter && type !== undefined)
|
|
490
|
+
parameterShapes[phantomIndex] = { ...parameter, type, slot: type };
|
|
491
|
+
}
|
|
492
|
+
return {
|
|
493
|
+
parameters: parameterShapes,
|
|
494
|
+
minimumArity: minimumArityOf(signature),
|
|
495
|
+
// An explicit `this` is a type-system device, not an argument. Keeping it
|
|
496
|
+
// out of the parameter list is what stops it becoming a physical argument.
|
|
497
|
+
thisParameter: receiverType,
|
|
498
|
+
result: (declaredMemberResult ? typeOf(declaredMemberResult) : null) ??
|
|
499
|
+
(contextualSlotResult ? typeOf(contextualSlotResult) : null) ??
|
|
500
|
+
bagResult ??
|
|
501
|
+
collectionResult ??
|
|
502
|
+
(censusUnionArms ? input.internUnion(censusUnionArms.map(typeOf)) : typeOf(resultOverride ?? censusResult ?? checkerResult))
|
|
503
|
+
};
|
|
504
|
+
};
|
|
505
|
+
/**
|
|
506
|
+
* The expression a member's OWN declaration states its value from, when that
|
|
507
|
+
* declaration is one of the shapes `parameters` (the fully composed
|
|
508
|
+
* parameter+return+local+field census, despite the name -- see
|
|
509
|
+
* `frontend.ts`'s `compose`) already knows how to answer about: an object
|
|
510
|
+
* LITERAL property's initializer (`shaderID: shaderID` -- the identifier
|
|
511
|
+
* `shaderID` is exactly the node `local-bindings.ts` published an answer
|
|
512
|
+
* for), or a shorthand property's own name (`{ shaderID }`, which names the
|
|
513
|
+
* same outer binding). A class field's declaration is one one of its OWN
|
|
514
|
+
* writes -- `field-bindings.ts` already joins every write reaching the
|
|
515
|
+
* FIELD's symbol under one answer, so the declaration node itself, not its
|
|
516
|
+
* "value", is what should be asked; see the call site below.
|
|
517
|
+
*/
|
|
518
|
+
const censusValueNodeOf = (declaration) => {
|
|
519
|
+
if (ts.isPropertyAssignment(declaration))
|
|
520
|
+
return declaration.initializer;
|
|
521
|
+
if (ts.isShorthandPropertyAssignment(declaration))
|
|
522
|
+
return declaration.name;
|
|
523
|
+
return null;
|
|
524
|
+
};
|
|
525
|
+
/** Accessor members currently being resolved through their passthrough target; see `memberOf`. */
|
|
526
|
+
const passthroughSeen = new Set();
|
|
527
|
+
/**
|
|
528
|
+
* `location` is a FALLBACK, never an override: a member with its own
|
|
529
|
+
* declaration is always asked at that declaration, and the borrowed location
|
|
530
|
+
* only ever answered for a member that has none. `null` is admitted because
|
|
531
|
+
* that borrowed answer is not always available and was never needed --
|
|
532
|
+
* `typeOfSymbolAt` asks the location-free question instead. See
|
|
533
|
+
* `structural.ts`'s declarationless-object branch.
|
|
534
|
+
*/
|
|
535
|
+
const memberOf = (symbol, location) => {
|
|
536
|
+
if (memberDebug === symbol.name)
|
|
537
|
+
process.stderr.write(`\n[MEMBER-ENTER] ${symbol.name}\n`);
|
|
538
|
+
const key = keyOfSymbol(symbol);
|
|
539
|
+
if (!key)
|
|
540
|
+
return null;
|
|
541
|
+
// An accessor pair that does nothing but forward to another field IS that
|
|
542
|
+
// field, so it must be answered by the SAME authority -- this function,
|
|
543
|
+
// recursively -- rather than by its own annotation. See
|
|
544
|
+
// `accessorPassthroughMemberTargetOf`: three's `Texture.image` is
|
|
545
|
+
// `get image() { return this.source.data }` carrying `@type {?Object}`,
|
|
546
|
+
// and that upper bound otherwise wins outright over the census that knows
|
|
547
|
+
// the slot holds `Source.data`.
|
|
548
|
+
//
|
|
549
|
+
// Only the TYPE is taken from the target. `optional`, `readonly` and the
|
|
550
|
+
// accessor bodies stay this member's own, because those are facts about
|
|
551
|
+
// how the alias is spelled here, not about the storage behind it.
|
|
552
|
+
//
|
|
553
|
+
// `passthroughSeen` is a cycle guard, not an optimisation: a pair of
|
|
554
|
+
// accessors forwarding to each other is a program this must refuse rather
|
|
555
|
+
// than recurse forever on.
|
|
556
|
+
if (!passthroughSeen.has(symbol)) {
|
|
557
|
+
const target = accessorPassthroughMemberTargetOf(checker, symbol);
|
|
558
|
+
if (target) {
|
|
559
|
+
passthroughSeen.add(symbol);
|
|
560
|
+
try {
|
|
561
|
+
const forwarded = memberOf(target.symbol, target.declaration);
|
|
562
|
+
if (forwarded)
|
|
563
|
+
return { ...forwarded, key, accessor: literalAccessorOf(symbol, identities) ?? declaredMembers.accessorBodiesOf(symbol) };
|
|
564
|
+
}
|
|
565
|
+
finally {
|
|
566
|
+
passthroughSeen.delete(symbol);
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
const declaration = identities.declarationOfSymbol(symbol);
|
|
571
|
+
const checkerAnswer = typeOfSymbolAt(symbol, declaration ?? location ?? undefined);
|
|
572
|
+
// The checker answers an object-literal PROPERTY's or a class FIELD's own
|
|
573
|
+
// type by asking the checker DIRECTLY at the member's declaration -- a
|
|
574
|
+
// question the checker itself can only answer from what IT can see, which
|
|
575
|
+
// for `shaderID: shaderID` (the value an unannotated `x[k]` index read
|
|
576
|
+
// produced) or `this.morphTargetDictionary = Object.assign({}, ...)` (a
|
|
577
|
+
// self-referential write the checker's own JS inference gives up on) is
|
|
578
|
+
// `any`, even though `parameters` -- the SAME composed census `structural.ts`
|
|
579
|
+
// already threads through this module for PARAMETER declarations
|
|
580
|
+
// (`parameterOf` above) -- has a real, better answer for the identical
|
|
581
|
+
// symbol via `local-bindings.ts`/`field-bindings.ts`. Consulted only as a
|
|
582
|
+
// FALLBACK, and only past the checker's own unusable-evidence gate: a
|
|
583
|
+
// checker answer that IS usable is never second-guessed here, the same
|
|
584
|
+
// discipline `parameter-bindings.ts`'s own `known()` keeps for a bound
|
|
585
|
+
// parameter's narrowed use.
|
|
586
|
+
const censusNode = declaration ? (censusValueNodeOf(declaration) ?? declaration) : null;
|
|
587
|
+
const fromCensus = isUnusableEvidence(checkerAnswer) && censusNode ? parameters.typeAt(censusNode) : null;
|
|
588
|
+
// Which of the three sources actually answered one named member. A record
|
|
589
|
+
// that carries ONE dynamic field among 130 gives the reader no way to tell
|
|
590
|
+
// "the checker was fine" from "the census had nothing to add".
|
|
591
|
+
if (memberDebug === symbol.name) {
|
|
592
|
+
const where = censusNode?.getSourceFile();
|
|
593
|
+
process.stderr.write(`[MEMBER] ${symbol.name} checker=${checker.typeToString(checkerAnswer)} unusable=${isUnusableEvidence(checkerAnswer)} ` +
|
|
594
|
+
`censusNode=${censusNode ? ts.SyntaxKind[censusNode.kind] : 'none'}@${where ? `${where.fileName.split('/').pop()}:${where.getLineAndCharacterOfPosition(censusNode.getStart()).line + 1}` : '-'} ` +
|
|
595
|
+
`fromCensus=${fromCensus ? checker.typeToString(fromCensus) : 'null'}\n`);
|
|
596
|
+
}
|
|
597
|
+
// A STATED ANNOTATION THAT WAS ONLY EVER AN UPPER BOUND, and -- exactly as
|
|
598
|
+
// in `structural-layout-type.ts`'s `layoutTypeAt`, which takes it FIRST for
|
|
599
|
+
// the same reason -- the one census answer this module takes over a checker
|
|
600
|
+
// answer it is happy with. The `isUnusableEvidence` gate above cannot serve
|
|
601
|
+
// it: the checker's answer for hono's `#matchResult: Result<[unknown,
|
|
602
|
+
// RouterRoute]>` is a perfectly good two-armed union of tuples, and the
|
|
603
|
+
// fact is that its one `unknown` leaf is filled in concretely by the
|
|
604
|
+
// program's only writer. This is the ABI side of that one storage
|
|
605
|
+
// location; the body side already answers the narrowing, so leaving this
|
|
606
|
+
// on the checker is what makes them two authorities -- a field "stored as"
|
|
607
|
+
// the annotation while every read of it "publishes" the narrowing, which
|
|
608
|
+
// is a refusal at the store and again at the return that hands it back.
|
|
609
|
+
const narrowedByStatement = censusNode ? parameters.statedTypeAt(censusNode) : null;
|
|
610
|
+
const declared = narrowedByStatement ?? fromCensus ?? checkerAnswer;
|
|
611
|
+
// A member initialized with a function literal carries the LITERAL's one
|
|
612
|
+
// convention, not its annotation's overload set -- see
|
|
613
|
+
// `physicalInitializerTypeOf`. `null` for every other member, which is
|
|
614
|
+
// then asked exactly as before.
|
|
615
|
+
const physical = declaration === null ? null : physicalInitializerTypeOf(checker, declaration, declared, parameters);
|
|
616
|
+
// `private store = new Map()` types `store` as `Map<unknown, unknown>` --
|
|
617
|
+
// a real, non-`any` type, so `isUnusableEvidence` above never fires and
|
|
618
|
+
// `fromCensus` is never even asked. That is not a gap `parameters` above
|
|
619
|
+
// could close anyway: `collection-bindings.ts`'s answer is a different
|
|
620
|
+
// census, keyed by a different node (the allocation or the owning
|
|
621
|
+
// declaration, not a value-flow write into the field's OWN symbol). Asked
|
|
622
|
+
// here, past `physical`, so a member the checker already resolved through
|
|
623
|
+
// a function literal keeps that answer untouched -- a keyed-collection
|
|
624
|
+
// field is never also that shape. See this field's own `collections`/
|
|
625
|
+
// `table` doc above and `inferredCollectionTypeArgumentsAt`'s header
|
|
626
|
+
// (`structural-array-element.ts`) for why the checker's answer needs a
|
|
627
|
+
// second opinion here at all.
|
|
628
|
+
const inferredCollection = table && declaration ? inferredCollectionTypeArgumentsAt(collections, table, typeOf, bags, declared, declaration) : null;
|
|
629
|
+
const arrayElement = censusNode
|
|
630
|
+
? inferredArrayElementAt(checker, collections, (node) => checker.getTypeAtLocation(node), censusNode)
|
|
631
|
+
: null;
|
|
632
|
+
const inferredArray = arrayElement ? internArray(typeOf(arrayElement)) : null;
|
|
633
|
+
// The field half of an open bag must ask the same owner-keyed census as
|
|
634
|
+
// every read. This matters most for a JavaScript assignment declaration:
|
|
635
|
+
// `this.children = {}` is checker-typed as `{}`, yet its computed writes
|
|
636
|
+
// state an index of native `Child` instances. A class anchor is already
|
|
637
|
+
// reserved while its body is built, so feeding that concrete index through
|
|
638
|
+
// the bag shape closes a finite Child -> Parent.children -> Child cycle at
|
|
639
|
+
// the nominal identity. Leaving the member at the checker-empty object
|
|
640
|
+
// creates two carriers for one cell and turns that finite recurrence into
|
|
641
|
+
// an unresolved expression/binding cycle downstream.
|
|
642
|
+
const inferredBag = table && declaration ? bagShapeTypeAt(table, typeOf, bags, declaration) : null;
|
|
643
|
+
const optional = (symbol.getFlags() & ts.SymbolFlags.Optional) !== 0;
|
|
644
|
+
const arraySlot = inferredArray && optional ? input.internUnion([inferredArray, typeOf(checker.getUndefinedType())]) : inferredArray;
|
|
645
|
+
// ⛔ An optional member's ABSENCE is a state of its own and has to be in
|
|
646
|
+
// the member's TYPE, because that type is the only thing
|
|
647
|
+
// `representation/` derives the field's carrier from -- `recordFieldsOf`
|
|
648
|
+
// never wraps on the `optional` flag beside it, and nothing downstream
|
|
649
|
+
// does either.
|
|
650
|
+
//
|
|
651
|
+
// Under `exactOptionalPropertyTypes` the checker does NOT put it there:
|
|
652
|
+
// `slot?: Extension | null` reports `Extension | null`, and that alone is
|
|
653
|
+
// a silent miscompile. `representation/optional.ts` collapses `T | null`
|
|
654
|
+
// onto a refcounted reference, so the field became a bare
|
|
655
|
+
// `gea::Ref<Extension>` whose only absent state, `nullptr`, was already
|
|
656
|
+
// spoken for by `null` -- and `{}` read its slot back as `null`.
|
|
657
|
+
// `test/fixtures/optional-slot-holds-null.ts` printed `null,null,value:7`
|
|
658
|
+
// where the language says `absent,null,value:7`: compiled, linked, ran,
|
|
659
|
+
// wrong. Widening restores the third state, and `union.ts` gives it an
|
|
660
|
+
// arm of its own.
|
|
661
|
+
//
|
|
662
|
+
// A no-op wherever the checker already answered with `undefined` in the
|
|
663
|
+
// union -- which is every optional member without
|
|
664
|
+
// `exactOptionalPropertyTypes`, and every one whose payload cannot
|
|
665
|
+
// absorb an absence -- so this adds a state only where one was missing.
|
|
666
|
+
const stated = physical ?? declared;
|
|
667
|
+
return {
|
|
668
|
+
key,
|
|
669
|
+
type: inferredBag ??
|
|
670
|
+
arraySlot ??
|
|
671
|
+
inferredCollection ??
|
|
672
|
+
typeOf(optional ? checker.getNullableType(stated, ts.TypeFlags.Undefined) : stated),
|
|
673
|
+
optional,
|
|
674
|
+
readonly: declaration !== null && ts.canHaveModifiers(declaration)
|
|
675
|
+
? (ts.getModifiers(declaration) ?? []).some((modifier) => modifier.kind === ts.SyntaxKind.ReadonlyKeyword)
|
|
676
|
+
: false,
|
|
677
|
+
// The literal's own bodies first; then the ones an implementer supplies
|
|
678
|
+
// for a member this DECLARED shape spells as data.
|
|
679
|
+
accessor: literalAccessorOf(symbol, identities) ?? declaredMembers.accessorBodiesOf(symbol)
|
|
680
|
+
};
|
|
681
|
+
};
|
|
682
|
+
const indexesOf = (type) => checker.getIndexInfosOfType(type).flatMap((info) => {
|
|
683
|
+
const key = info.keyType.flags & ts.TypeFlags.String
|
|
684
|
+
? 'string'
|
|
685
|
+
: info.keyType.flags & ts.TypeFlags.Number
|
|
686
|
+
? 'number'
|
|
687
|
+
: info.keyType.flags & ts.TypeFlags.ESSymbolLike
|
|
688
|
+
? 'symbol'
|
|
689
|
+
: null;
|
|
690
|
+
return key ? [{ key, value: typeOf(info.type), readonly: info.isReadonly }] : [];
|
|
691
|
+
});
|
|
692
|
+
const tupleElementsOf = (type) => {
|
|
693
|
+
const target = type.target;
|
|
694
|
+
return checker.getTypeArguments(type).map((argument, index) => {
|
|
695
|
+
const flags = target.elementFlags[index] ?? ts.ElementFlags.Required;
|
|
696
|
+
return {
|
|
697
|
+
type: typeOf(argument),
|
|
698
|
+
optional: (flags & ts.ElementFlags.Optional) !== 0,
|
|
699
|
+
rest: (flags & ts.ElementFlags.Rest) !== 0,
|
|
700
|
+
variadic: (flags & ts.ElementFlags.Variadic) !== 0
|
|
701
|
+
};
|
|
702
|
+
});
|
|
703
|
+
};
|
|
704
|
+
/**
|
|
705
|
+
* Whether a member is per-value storage rather than shared behavior.
|
|
706
|
+
*
|
|
707
|
+
* A method and an accessor are installed once, on a prototype; a property is
|
|
708
|
+
* a slot in the value. A property that *holds* a function (`onClick: () =>
|
|
709
|
+
* void`) is storage, and the symbol flags are what tell the two apart -- not
|
|
710
|
+
* the type of the value the member holds.
|
|
711
|
+
*/
|
|
712
|
+
return { signatureOf, memberOf, indexesOf, tupleElementsOf };
|
|
713
|
+
};
|
|
714
|
+
// A callable (a method's own function type) can end up the OUTER frame of a
|
|
715
|
+
// walking collision purely by processing order: the census does not promise
|
|
716
|
+
// an object literal's own allocation runs before one of its methods', and
|
|
717
|
+
// `objectShapeOf`'s member walk can re-enter a method's own signature type
|
|
718
|
+
// via `checker.getTypeOfSymbolAtLocation`, which hands back the identical
|
|
719
|
+
// `ts.Type` the census started from. When that happens, THIS is the type
|
|
720
|
+
// `selfReferentialShapeOf` retries -- and none of its four modelled kinds
|
|
721
|
+
// (union, intersection, tuple, array) match a callable. Giving it the plain
|
|
722
|
+
// `signature` shape the ordinary call-signature branch would have produced
|
|
723
|
+
// is correct: the object it references as `this` is anchored separately, so
|
|
724
|
+
// re-deriving the signature only needs to avoid degrading to `unresolved`
|
|
725
|
+
// for a shape this layer genuinely knows how to build. Lives here, beside
|
|
726
|
+
// `signatureOf` itself, since `structural.ts` is at its file-length cap.
|
|
727
|
+
export const selfReferentialCallableShapeOf = (type, signatureOf) => {
|
|
728
|
+
const callSignatures = type.getCallSignatures();
|
|
729
|
+
const constructSignatures = type.getConstructSignatures();
|
|
730
|
+
if (callSignatures.length === 0 && constructSignatures.length === 0)
|
|
731
|
+
return null;
|
|
732
|
+
return {
|
|
733
|
+
kind: 'signature',
|
|
734
|
+
call: callSignatures.map((one) => signatureOf(one)),
|
|
735
|
+
construct: constructSignatures.map((one) => signatureOf(one))
|
|
736
|
+
};
|
|
737
|
+
};
|