@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,391 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
/**
|
|
3
|
+
* Which of a generic class or interface's own type parameters actually reach
|
|
4
|
+
* a STORED value.
|
|
5
|
+
*
|
|
6
|
+
* `structural.ts`'s `buildDeclaredShape` folds every one of a declared type's
|
|
7
|
+
* ARGUMENTS into its structural key (`class-instance:${declaration}:${
|
|
8
|
+
* typeArguments.join(',')}`), because in general two different arguments mean
|
|
9
|
+
* two different physical layouts. That is correct for `Context<E,...>`,
|
|
10
|
+
* whose `env: E['Bindings']` field genuinely differs in C++ type per `E`. It
|
|
11
|
+
* is NOT correct for a type parameter that participates only in a method's
|
|
12
|
+
* overload/return-type composition and never in an instance field's own
|
|
13
|
+
* type: hono's `Hono<E,S,BasePath,CurrentPath>` names `S` inside
|
|
14
|
+
* `get!: HandlerInterface<E,'get',S,BasePath,CurrentPath>`, but
|
|
15
|
+
* `HandlerInterface` is a pure call-signature bag with no data field of its
|
|
16
|
+
* own, so no C++ struct anywhere actually stores a value shaped by `S`.
|
|
17
|
+
* Folding it into the key anyway mints one `Hono` specialization per distinct
|
|
18
|
+
* route-registration call in the program -- `#addRoute`'s own generic
|
|
19
|
+
* recursion is self-similar across them, and the census walks each copy
|
|
20
|
+
* again, which is the shape of the stack overflow this module exists to cut
|
|
21
|
+
* off at the root.
|
|
22
|
+
*
|
|
23
|
+
* The test is deliberately NOT "does the parameter appear, textually, in a
|
|
24
|
+
* member's type" -- `S` appears that way too, nested inside
|
|
25
|
+
* `HandlerInterface`'s own argument list, and a syntactic-appearance test
|
|
26
|
+
* cannot tell that occurrence apart from `E`'s in `E['Bindings']`. It is
|
|
27
|
+
* whether the parameter reaches a storage position, followed through nested
|
|
28
|
+
* generic references: a member typed `Other<Args>` propagates relevance only
|
|
29
|
+
* through the positions of `Other` that `Other`'s OWN fields (computed by
|
|
30
|
+
* this same analysis, recursively) actually store into.
|
|
31
|
+
*
|
|
32
|
+
* `HandlerInterface` is safe to fold NOT because it is "a member with call
|
|
33
|
+
* signatures" -- an earlier version of this module tested exactly that, at
|
|
34
|
+
* the top of `typeMentionsParameter`, and it was wrong: `derive.ts`'s
|
|
35
|
+
* `function` representation carries a real `abi` that DOES vary by the
|
|
36
|
+
* callable's own signature, so a genuinely STORED callable field --
|
|
37
|
+
* `class Emitter<T> { listener: (v: T) => void }`, an ordinary observer/
|
|
38
|
+
* event-handler idiom -- physically differs in C++ type across `T`, exactly
|
|
39
|
+
* like a data field does. Blanket-exempting "any member typed as callable"
|
|
40
|
+
* let two `Emitter<T>` instantiations that differ only through `listener`
|
|
41
|
+
* collapse onto one shared, wrong shape (`structural.ts`'s `buildDeclaredShape`
|
|
42
|
+
* runs once per folded key; whichever instantiation reaches it first wins for
|
|
43
|
+
* every later one). By the time a `ts.Type` has call signatures, a pure
|
|
44
|
+
* method-signature bag and a stored callback value are the same shape --
|
|
45
|
+
* `HandlerInterface` and a hypothetical `interface OnChange<T> { (v: T): void
|
|
46
|
+
* }` used as `onChange: OnChange<T>` are indistinguishable at that level --
|
|
47
|
+
* so the type-shape question is the wrong one to ask.
|
|
48
|
+
*
|
|
49
|
+
* `HandlerInterface` is safe for a narrower, decidable reason this module
|
|
50
|
+
* already has the machinery for: it is a NAMED declared interface, and
|
|
51
|
+
* walking ITS OWN members (the identical recursive question this module asks
|
|
52
|
+
* of every other named generic reference, `Other<Args>` above) finds zero
|
|
53
|
+
* `PropertyDeclaration`/`PropertySignature` members to prove any of its own
|
|
54
|
+
* type parameters relevant -- HandlerInterface's members are all bare
|
|
55
|
+
* `CallSignatureDeclaration`s, a third AST kind this module's member loop
|
|
56
|
+
* was never asking about either way. So the fix is not a new callable
|
|
57
|
+
* special case; it is the ABSENCE of one: an anonymous callable-typed
|
|
58
|
+
* member -- no declared interface/class backing it, nothing this module can
|
|
59
|
+
* recurse into -- now falls straight through to the same "not modeled, so
|
|
60
|
+
* not trusted" default every other unrecognized shape gets, below.
|
|
61
|
+
*
|
|
62
|
+
* The residual gap this narrower reasoning leaves, named honestly rather than
|
|
63
|
+
* hidden: a genuinely-NAMED, call-signature-only interface used as directly
|
|
64
|
+
* STORED data (`onChange: OnChange<T>`, not `HandlerInterface`'s own
|
|
65
|
+
* invoke-only usage) still folds its type parameters as not-relevant, the
|
|
66
|
+
* same way `HandlerInterface` correctly does, because this module has no
|
|
67
|
+
* whole-program fact distinguishing "reached only by invocation" from
|
|
68
|
+
* "stored, read back, passed around" for a member it can already prove has
|
|
69
|
+
* no OWN data fields. Closing that would need a use-site (escape) census this
|
|
70
|
+
* module does not have; the common real-world idiom for a stored callback --
|
|
71
|
+
* an inline function-type annotation, `(v: T) => void` -- is the anonymous
|
|
72
|
+
* case above and is NOT affected by this gap.
|
|
73
|
+
*
|
|
74
|
+
* Fails closed at every turn: an ambient (`.d.ts`) declaration with no stated
|
|
75
|
+
* storage fields keeps every parameter relevant (`Promise`, `Array`, `Map`,
|
|
76
|
+
* ... already have dedicated derivation in `representation/derive.ts`, which
|
|
77
|
+
* reads `shape.typeArguments` directly). An ambient class that does state its
|
|
78
|
+
* fields can be analyzed from those declarations just like a source class;
|
|
79
|
+
* this is what lets Hono's declarations prove its schema and path parameters
|
|
80
|
+
* occur only through call-signature-only interfaces. The standard library's
|
|
81
|
+
* own no-default-lib declarations remain conservative even when they expose a
|
|
82
|
+
* descriptive property such as `Set.size`: their native carrier can store a
|
|
83
|
+
* type parameter that no declared JavaScript field names. A declaration
|
|
84
|
+
* mid-computation (a genuine cycle -- `Hono` naming
|
|
85
|
+
* itself through a field, say) answers "every parameter relevant" for that
|
|
86
|
+
* reentrant call rather than guessing at a fixed point. Any type shape this
|
|
87
|
+
* module does not model (a conditional type, a mapped type, an anonymous
|
|
88
|
+
* object type with no declaration to recurse into, an anonymous callable
|
|
89
|
+
* type) is treated as though it might mention the parameter. An unproven
|
|
90
|
+
* parameter keeps forking exactly as it does today.
|
|
91
|
+
*/
|
|
92
|
+
const cache = new WeakMap();
|
|
93
|
+
const inProgress = new WeakSet();
|
|
94
|
+
const allIndices = (count) => new Set(Array.from({ length: count }, (_, index) => index));
|
|
95
|
+
/** Flags whose bearer is a leaf value no type parameter could hide inside -- worth naming explicitly so it does not fall through to the conservative "unmodeled" answer below. */
|
|
96
|
+
const leafFlags = ts.TypeFlags.StringLike |
|
|
97
|
+
ts.TypeFlags.NumberLike |
|
|
98
|
+
ts.TypeFlags.BooleanLike |
|
|
99
|
+
ts.TypeFlags.BigIntLike |
|
|
100
|
+
ts.TypeFlags.ESSymbolLike |
|
|
101
|
+
ts.TypeFlags.Null |
|
|
102
|
+
ts.TypeFlags.Undefined |
|
|
103
|
+
ts.TypeFlags.Void |
|
|
104
|
+
ts.TypeFlags.Never |
|
|
105
|
+
ts.TypeFlags.Any |
|
|
106
|
+
ts.TypeFlags.Unknown;
|
|
107
|
+
const isDeclaredGenericOwner = (node) => ts.isClassLike(node) || ts.isInterfaceDeclaration(node);
|
|
108
|
+
/**
|
|
109
|
+
* The members that are instance state, which is a wider set than the
|
|
110
|
+
* `PropertyDeclaration`/`PropertySignature` pair this module first asked for.
|
|
111
|
+
*
|
|
112
|
+
* A CONSTRUCTOR PARAMETER PROPERTY (`constructor(readonly bag: Bag<T>) {}`)
|
|
113
|
+
* is a field declared in parameter position; the member loop never saw one,
|
|
114
|
+
* so a class whose only state was declared that way proved no parameter
|
|
115
|
+
* relevant at all and every instantiation folded onto one anchor.
|
|
116
|
+
*
|
|
117
|
+
* A METHOD SIGNATURE on an interface is a stored callable, not a call
|
|
118
|
+
* convention the way a bare `CallSignatureDeclaration` is: `interface
|
|
119
|
+
* Sink<T> { take?(handle: Handle<T>): void }` is a record with a `take`
|
|
120
|
+
* field, and `derive.ts`'s `function` representation carries an `abi` that
|
|
121
|
+
* varies with `Handle<T>`'s own carrier. That only became observable once a
|
|
122
|
+
* generic class could split: with `Handle<Uint8Array>` and `Handle<unknown>`
|
|
123
|
+
* two physical classes, `Sink`'s one erased record holds whichever
|
|
124
|
+
* convention was derived first and the other copy's read of `take` has
|
|
125
|
+
* nothing to convert through. A class METHOD is deliberately not here -- it
|
|
126
|
+
* dispatches statically and occupies no slot in the instance.
|
|
127
|
+
*/
|
|
128
|
+
const storageMembersOf = (declaration) => [
|
|
129
|
+
...declaration.members.filter((member) => ts.isPropertyDeclaration(member) || ts.isPropertySignature(member) || ts.isMethodSignature(member)),
|
|
130
|
+
...declaration.members
|
|
131
|
+
.filter(ts.isConstructorDeclaration)
|
|
132
|
+
.flatMap((constructor) => constructor.parameters.filter((parameter) => ts.getModifiers(parameter)?.length))
|
|
133
|
+
];
|
|
134
|
+
/** Class state, not instance state -- a static holds no value shaped by an instantiation's arguments. */
|
|
135
|
+
const isStaticMember = (member) => (ts.canHaveModifiers(member) ? ts.getModifiers(member) : undefined)?.some((one) => one.kind === ts.SyntaxKind.StaticKeyword) === true;
|
|
136
|
+
/**
|
|
137
|
+
* Whether `type` structurally contains `parameter` in a position that would
|
|
138
|
+
* make a value of `type` actually carry one -- the recursive half of this
|
|
139
|
+
* module's own question, asked about one field's type rather than a whole
|
|
140
|
+
* declaration's.
|
|
141
|
+
*/
|
|
142
|
+
const typeMentionsParameter = (checker, type, parameter, depth) => {
|
|
143
|
+
if (type === parameter)
|
|
144
|
+
return true;
|
|
145
|
+
if (depth > 40)
|
|
146
|
+
return true; // a recursion this deep is not one this analysis trusts itself to have modeled correctly -- fail closed rather than risk never returning.
|
|
147
|
+
if ((type.flags & leafFlags) !== 0)
|
|
148
|
+
return false;
|
|
149
|
+
if (type.isUnion() || type.isIntersection())
|
|
150
|
+
return type.types.some((member) => typeMentionsParameter(checker, member, parameter, depth + 1));
|
|
151
|
+
if (checker.isArrayType(type) || checker.isTupleType(type)) {
|
|
152
|
+
const elements = checker.getTypeArguments(type) ?? [];
|
|
153
|
+
return elements.some((element) => typeMentionsParameter(checker, element, parameter, depth + 1));
|
|
154
|
+
}
|
|
155
|
+
if ((type.flags & ts.TypeFlags.IndexedAccess) !== 0) {
|
|
156
|
+
const indexed = type;
|
|
157
|
+
return (typeMentionsParameter(checker, indexed.objectType, parameter, depth + 1) ||
|
|
158
|
+
typeMentionsParameter(checker, indexed.indexType, parameter, depth + 1));
|
|
159
|
+
}
|
|
160
|
+
// Deliberately NO blanket exemption for "this member's type has call
|
|
161
|
+
// signatures" here -- see the top-of-file comment for why that shape
|
|
162
|
+
// question cannot tell `HandlerInterface` (a pure method-signature bag,
|
|
163
|
+
// safe to fold) apart from a genuinely STORED callable field (not safe:
|
|
164
|
+
// `derive.ts`'s `function` representation carries an `abi` that varies by
|
|
165
|
+
// signature, so a class field of a differently-signatured callable is a
|
|
166
|
+
// differently-typed C++ field). A callable reached through a NAMED
|
|
167
|
+
// declared interface/class still falls into the recursion just below,
|
|
168
|
+
// exactly like any other `Other<Args>` reference, and answers correctly
|
|
169
|
+
// for `HandlerInterface` on its own merits: it has zero
|
|
170
|
+
// `PropertyDeclaration`/`PropertySignature` members (only bare call
|
|
171
|
+
// signatures), so `layoutRelevantParameterIndices` finds nothing proving
|
|
172
|
+
// any of its type parameters relevant, with no special case required. An
|
|
173
|
+
// ANONYMOUS callable type -- no declared owner to recurse into, the
|
|
174
|
+
// common shape for a real stored callback field (`(v: T) => void`) --
|
|
175
|
+
// now falls through to this function's own fail-closed default at the
|
|
176
|
+
// bottom instead.
|
|
177
|
+
const symbol = type.getSymbol();
|
|
178
|
+
const declaration = symbol?.declarations?.[0];
|
|
179
|
+
if (declaration && isDeclaredGenericOwner(declaration)) {
|
|
180
|
+
const typeArguments = checker.getTypeArguments(type) ?? [];
|
|
181
|
+
if (typeArguments.length === 0)
|
|
182
|
+
return false;
|
|
183
|
+
const relevant = layoutRelevantParameterIndices(checker, declaration);
|
|
184
|
+
return typeArguments.some((argument, index) => relevant.has(index) && typeMentionsParameter(checker, argument, parameter, depth + 1));
|
|
185
|
+
}
|
|
186
|
+
// A function-type ANNOTATION -- `(v: T) => void`, the ordinary spelling for
|
|
187
|
+
// a stored callback field -- is not an unmodeled shape. Its parameters and
|
|
188
|
+
// its result are written down right here, so the module's own question has
|
|
189
|
+
// a precise answer instead of a guess: `Emitter<T> { listener: (v: T) =>
|
|
190
|
+
// void }` still proves `T` relevant, now THROUGH the parameter that carries
|
|
191
|
+
// it, while `describe = (): string => ...` -- a callable field naming no
|
|
192
|
+
// type parameter at all -- stops forcing one physical copy of its class per
|
|
193
|
+
// instantiation. That mattered once physical class identity started
|
|
194
|
+
// following this analysis: `return-type-mints-no-copy.ts`'s `Chain<T>`
|
|
195
|
+
// stores only `value: number` and such a callable, so a blanket "might
|
|
196
|
+
// mention T" here split it into two structs whose fields are identical,
|
|
197
|
+
// and the fluent `tag(): Chain<T[]>` then had to convert between them.
|
|
198
|
+
// Only a FUNCTION-LIKE declaration qualifies -- the written `(v: T) => void`
|
|
199
|
+
// annotation and equally the arrow whose inferred type a field initializer
|
|
200
|
+
// gives it (`describe = (): string => ...`, which has no annotation at all)
|
|
201
|
+
// -- and only while the type carries no properties of its own beside its
|
|
202
|
+
// signatures. An anonymous object type of any other provenance keeps the
|
|
203
|
+
// conservative answer below.
|
|
204
|
+
if (declaration && ts.isFunctionLike(declaration) && type.getProperties().length === 0) {
|
|
205
|
+
const signatures = [...type.getCallSignatures(), ...type.getConstructSignatures()];
|
|
206
|
+
if (signatures.length > 0)
|
|
207
|
+
return signatures.some((signature) => {
|
|
208
|
+
const slots = signature.getParameters().map((slot) => slot.valueDeclaration);
|
|
209
|
+
if (slots.some((slot) => slot === undefined))
|
|
210
|
+
return true;
|
|
211
|
+
return (slots.some((slot) => slot !== undefined && typeMentionsParameter(checker, checker.getTypeAtLocation(slot), parameter, depth + 1)) || typeMentionsParameter(checker, signature.getReturnType(), parameter, depth + 1));
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
// A conditional type, a mapped type, an anonymous object type with no
|
|
215
|
+
// declaration to recurse into, ... -- not modeled, so not trusted.
|
|
216
|
+
return true;
|
|
217
|
+
};
|
|
218
|
+
/**
|
|
219
|
+
* The set of type-parameter POSITIONS (0-based, declaration order) that
|
|
220
|
+
* `declaration`'s own instance fields prove reach storage. See this module's
|
|
221
|
+
* top-of-file comment for the rule and its fail-closed defaults.
|
|
222
|
+
*/
|
|
223
|
+
const storageCache = new WeakMap();
|
|
224
|
+
const storageInProgress = new WeakSet();
|
|
225
|
+
export const layoutRelevantParameterIndices = (checker, declaration) => {
|
|
226
|
+
const typeParameters = declaration.typeParameters;
|
|
227
|
+
if (!typeParameters || typeParameters.length === 0)
|
|
228
|
+
return new Set();
|
|
229
|
+
const cached = cache.get(declaration);
|
|
230
|
+
if (cached)
|
|
231
|
+
return cached;
|
|
232
|
+
const storageMembers = storageMembersOf(declaration);
|
|
233
|
+
if (declaration.getSourceFile().hasNoDefaultLib) {
|
|
234
|
+
// `Set<T>` is the measured case: its standard-library declaration exposes
|
|
235
|
+
// `size: number` but no field mentioning T, while the native collection
|
|
236
|
+
// carrier stores T as its key. Default-library declarations describe
|
|
237
|
+
// JavaScript behavior rather than a C++ layout, so their own fields cannot
|
|
238
|
+
// prove a generic parameter physically irrelevant.
|
|
239
|
+
return allIndices(typeParameters.length);
|
|
240
|
+
}
|
|
241
|
+
if (declaration.getSourceFile().isDeclarationFile && storageMembers.length === 0) {
|
|
242
|
+
// A pure call-signature interface has no instance storage of its own. It
|
|
243
|
+
// is the declared form of a callable convention, so its generic arguments
|
|
244
|
+
// cannot change an enclosing record's field layout. Other ambient shapes
|
|
245
|
+
// with no stated fields (Promise, Map, host objects) remain conservative:
|
|
246
|
+
// their native carrier may depend on arguments not visible in the .d.ts
|
|
247
|
+
// member list.
|
|
248
|
+
if (ts.isInterfaceDeclaration(declaration) &&
|
|
249
|
+
declaration.members.length > 0 &&
|
|
250
|
+
declaration.members.every(ts.isCallSignatureDeclaration))
|
|
251
|
+
return new Set();
|
|
252
|
+
return allIndices(typeParameters.length);
|
|
253
|
+
}
|
|
254
|
+
if (inProgress.has(declaration))
|
|
255
|
+
return allIndices(typeParameters.length); // reentrant: a genuine cycle, answered without caching so the OUTER call still computes the real fixed point.
|
|
256
|
+
inProgress.add(declaration);
|
|
257
|
+
try {
|
|
258
|
+
// Neither of the two `getTypeAtLocation` calls in this block is a census
|
|
259
|
+
// candidate. Both ask about a DECLARATION's own generic-parameter algebra
|
|
260
|
+
// -- `parameter` is a `TypeParameterDeclaration` (its "type" is the type
|
|
261
|
+
// variable `T` itself, an identity to compare against, never a runtime
|
|
262
|
+
// value), and `member` is a class/interface field's ANNOTATED type, asked
|
|
263
|
+
// for the sole purpose of testing whether that annotation structurally
|
|
264
|
+
// mentions `T`. This whole module answers a question about a
|
|
265
|
+
// DECLARATION's shape, not about any expression's held value, so there is
|
|
266
|
+
// no node here a parameter/return/local census could ever have an opinion
|
|
267
|
+
// on -- see `parameter-bindings.ts`'s own domain (call-site/write-set
|
|
268
|
+
// evidence for an expression) versus this file's (type-parameter
|
|
269
|
+
// propagation through declared field types).
|
|
270
|
+
const parameterTypes = typeParameters.map((parameter) => checker.getTypeAtLocation(parameter));
|
|
271
|
+
const relevant = new Set();
|
|
272
|
+
for (const member of storageMembers) {
|
|
273
|
+
if (ts.canHaveModifiers(member) && ts.getModifiers(member)?.some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword))
|
|
274
|
+
continue;
|
|
275
|
+
const propertyType = checker.getTypeAtLocation(member);
|
|
276
|
+
parameterTypes.forEach((parameterType, index) => {
|
|
277
|
+
if (!relevant.has(index) && typeMentionsParameter(checker, propertyType, parameterType, 0))
|
|
278
|
+
relevant.add(index);
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
// A parameter that reaches storage through the HERITAGE clause is as
|
|
282
|
+
// relevant as one a field names. `interface NodeArray<T> extends
|
|
283
|
+
// ReadonlyArray<T>, ReadonlyTextRange` declares no field mentioning `T`,
|
|
284
|
+
// and its layout is the array `structural.ts`'s `arrayHeritageShapeOf`
|
|
285
|
+
// builds from that very `T` -- so folding `T` keyed every instantiation
|
|
286
|
+
// to ONE anchor, `NodeArray<any>`, whose body carried whichever element
|
|
287
|
+
// the first instantiation had. A `for`-`of` over an `ArrayBindingPattern`'s
|
|
288
|
+
// elements then read `OmittedExpression`s as the `BindingElement`s of the
|
|
289
|
+
// `ObjectBindingPattern` interned before it, caught only by the emitter's
|
|
290
|
+
// cursor-element guard. The base is asked the same way a field's declared
|
|
291
|
+
// type is, so a default-library base (every standard array) keeps every
|
|
292
|
+
// argument, and a source base answers with its own proven positions.
|
|
293
|
+
for (const clause of declaration.heritageClauses ?? []) {
|
|
294
|
+
for (const base of clause.types) {
|
|
295
|
+
const baseType = checker.getTypeFromTypeNode(base);
|
|
296
|
+
parameterTypes.forEach((parameterType, index) => {
|
|
297
|
+
if (!relevant.has(index) && typeMentionsParameter(checker, baseType, parameterType, 0))
|
|
298
|
+
relevant.add(index);
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
cache.set(declaration, relevant);
|
|
303
|
+
return relevant;
|
|
304
|
+
}
|
|
305
|
+
finally {
|
|
306
|
+
inProgress.delete(declaration);
|
|
307
|
+
}
|
|
308
|
+
};
|
|
309
|
+
/**
|
|
310
|
+
* The parameter positions this class keeps in MUTABLE storage of its own.
|
|
311
|
+
*
|
|
312
|
+
* Folding two copies of a class onto one layout is only sound where the
|
|
313
|
+
* folded-away filling cannot be stored. `class Queue<R> { private items: R[] }`
|
|
314
|
+
* held at `unknown` and at `Uint8Array` is one struct storing `Uint8Array[]`
|
|
315
|
+
* the moment the copies fold, and the `unknown` copy then pushes a string into
|
|
316
|
+
* it -- measured, and it aborts at runtime reading the value back out
|
|
317
|
+
* ("an assertion out of a dynamic value ... is not of the declared type").
|
|
318
|
+
* A position listed here must never be folded; those copies are genuinely two
|
|
319
|
+
* layouts and split.
|
|
320
|
+
*
|
|
321
|
+
* `readonly` is NOT an exclusion, though it reads like one. A readonly field
|
|
322
|
+
* is still WRITTEN, by the constructor, with whatever that copy was handed:
|
|
323
|
+
* `class Handle<T> { constructor(readonly bag: Bag<T>) {} }` folded onto its
|
|
324
|
+
* `Uint8Array` copy declares the field `Bag<Uint8Array>` and the `unknown`
|
|
325
|
+
* copy's own constructor then stores a `Bag<unknown>` in it. Only `static`
|
|
326
|
+
* is excluded -- that is class state, shaped by no instantiation.
|
|
327
|
+
*
|
|
328
|
+
* A BASE's storage is this class's storage. `class ReadableStreamBYOBReader<R>
|
|
329
|
+
* extends ReadableStreamDefaultReader<R>` declares no member at all: the
|
|
330
|
+
* `stream_` field that actually carries `R` is the base's. Reading only this
|
|
331
|
+
* declaration's own members answered "stores nothing", so its copies folded
|
|
332
|
+
* onto the byte one and `getReader` on an `unknown` stream constructed a
|
|
333
|
+
* reader whose inherited field was typed at the other stream class.
|
|
334
|
+
*/
|
|
335
|
+
export const parametersInInstanceStorage = (checker, declaration) => {
|
|
336
|
+
const typeParameters = declaration.typeParameters;
|
|
337
|
+
if (!typeParameters || typeParameters.length === 0)
|
|
338
|
+
return new Set();
|
|
339
|
+
const cached = storageCache.get(declaration);
|
|
340
|
+
if (cached)
|
|
341
|
+
return cached;
|
|
342
|
+
// A cycle answers "every parameter stored" for the reentrant call only, so
|
|
343
|
+
// the outer one still computes the real set -- the same fail-closed shape
|
|
344
|
+
// `layoutRelevantParameterIndices` uses.
|
|
345
|
+
if (storageInProgress.has(declaration))
|
|
346
|
+
return allIndices(typeParameters.length);
|
|
347
|
+
storageInProgress.add(declaration);
|
|
348
|
+
try {
|
|
349
|
+
const parameterTypes = typeParameters.map((parameter) => checker.getTypeAtLocation(parameter));
|
|
350
|
+
const stored = new Set();
|
|
351
|
+
const prove = (type) => {
|
|
352
|
+
parameterTypes.forEach((parameterType, index) => {
|
|
353
|
+
if (!stored.has(index) && typeMentionsParameter(checker, type, parameterType, 0))
|
|
354
|
+
stored.add(index);
|
|
355
|
+
});
|
|
356
|
+
};
|
|
357
|
+
for (const member of storageMembersOf(declaration)) {
|
|
358
|
+
if (isStaticMember(member))
|
|
359
|
+
continue;
|
|
360
|
+
prove(checker.getTypeAtLocation(member));
|
|
361
|
+
}
|
|
362
|
+
for (const clause of declaration.heritageClauses ?? []) {
|
|
363
|
+
// `implements` states a contract, not a field. Only what a value
|
|
364
|
+
// physically inherits can carry a parameter into this instance.
|
|
365
|
+
if (clause.token !== ts.SyntaxKind.ExtendsKeyword)
|
|
366
|
+
continue;
|
|
367
|
+
for (const base of clause.types) {
|
|
368
|
+
const baseType = checker.getTypeFromTypeNode(base);
|
|
369
|
+
const baseDeclaration = baseType.getSymbol()?.declarations?.[0];
|
|
370
|
+
const baseArguments = checker.getTypeArguments(baseType) ?? [];
|
|
371
|
+
if (baseDeclaration === undefined || !isDeclaredGenericOwner(baseDeclaration) || baseArguments.length === 0) {
|
|
372
|
+
// Not a declaration this module can open -- an ambient base, a
|
|
373
|
+
// mapped or conditional base. Whatever it stores is unknown, so
|
|
374
|
+
// every parameter reaching it is treated as reaching storage.
|
|
375
|
+
prove(baseType);
|
|
376
|
+
continue;
|
|
377
|
+
}
|
|
378
|
+
const baseStored = parametersInInstanceStorage(checker, baseDeclaration);
|
|
379
|
+
baseArguments.forEach((argument, index) => {
|
|
380
|
+
if (baseStored.has(index))
|
|
381
|
+
prove(argument);
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
storageCache.set(declaration, stored);
|
|
386
|
+
return stored;
|
|
387
|
+
}
|
|
388
|
+
finally {
|
|
389
|
+
storageInProgress.delete(declaration);
|
|
390
|
+
}
|
|
391
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { type AbsentGlobalCensus } from './absent-globals.js';
|
|
3
|
+
import { type ParameterBindingCensus } from './parameter-bindings.js';
|
|
4
|
+
/**
|
|
5
|
+
* Which type an object or array literal is laid out as.
|
|
6
|
+
*
|
|
7
|
+
* Split out of `structural.ts` -- it closes over nothing but the checker, and
|
|
8
|
+
* that file's own subject is the walk that interns a type, not the question of
|
|
9
|
+
* which type to walk.
|
|
10
|
+
*/
|
|
11
|
+
export declare const createLayoutTypeResolver: (checker: ts.TypeChecker, parameters?: ParameterBindingCensus, absent?: AbsentGlobalCensus) => ((node: ts.Node) => ts.Type);
|