@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,49 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { PropertyKeyShape, StructuralShape } from '../model/structural-types.js';
|
|
3
|
+
import type { IdentityTable } from './identities.js';
|
|
4
|
+
/**
|
|
5
|
+
* A `ts.Type` that is a leaf: it maps straight to its shape with no walk.
|
|
6
|
+
*
|
|
7
|
+
* These three answers share one property that earns them a file of their own --
|
|
8
|
+
* none of them can recur. A primitive, a literal, and a property key are
|
|
9
|
+
* terminal by construction, so none needs the interning table, the in-progress
|
|
10
|
+
* set, or the self-reference machinery the rest of the mapper is built around.
|
|
11
|
+
* Keeping them out of that closure keeps the fact that they cannot participate
|
|
12
|
+
* in a cycle visible in the code rather than merely true of it.
|
|
13
|
+
*/
|
|
14
|
+
export declare const primitiveFor: (type: ts.Type) => StructuralShape | null;
|
|
15
|
+
export declare const literalFor: (type: ts.Type) => StructuralShape | null;
|
|
16
|
+
/**
|
|
17
|
+
* The declaration a symbol-named member's key is anchored to: the SYMBOL's own
|
|
18
|
+
* declaration, reached through the member's computed name.
|
|
19
|
+
*
|
|
20
|
+
* `class C { [GEA_DISPOSER]: D }` declares a member whose key is
|
|
21
|
+
* `GEA_DISPOSER`, and the member declaration is not that key -- it is a
|
|
22
|
+
* *use* of it. Anchoring on the member would give two classes that declare
|
|
23
|
+
* the same symbol-named member two different keys, and `keyof.ts` already
|
|
24
|
+
* assumes the opposite: it turns a member key straight into
|
|
25
|
+
* `{ kind: 'unique-symbol', declaration }`, which `structural.ts`'s own
|
|
26
|
+
* `UniqueESSymbol` branch mints from the SYMBOL's declaration. Two spellings
|
|
27
|
+
* of one identity is exactly the drift this compiler refuses elsewhere, and
|
|
28
|
+
* here it is load-bearing: `records.ts` names the struct member
|
|
29
|
+
* `gea_sym_<declaration>` while `producers/properties.ts` resolves
|
|
30
|
+
* `this[GEA_DISPOSER]` through the same text, so a disagreement is a field
|
|
31
|
+
* write that lands on a member no read finds.
|
|
32
|
+
*
|
|
33
|
+
* `null` when the member has no computed name to resolve through -- a
|
|
34
|
+
* synthesized or late-bound symbol with no declaration -- and the caller falls
|
|
35
|
+
* back to the member's own declaration, which is still a stable identity, just
|
|
36
|
+
* a per-declaration one.
|
|
37
|
+
*/
|
|
38
|
+
export declare const symbolKeyDeclarationOf: (checker: ts.TypeChecker, identities: IdentityTable, member: ts.Symbol) => ts.Declaration | null;
|
|
39
|
+
/**
|
|
40
|
+
* The shape of the property key a symbol declares.
|
|
41
|
+
*
|
|
42
|
+
* A well-known symbol member arrives with the checker's own `__@`-prefixed
|
|
43
|
+
* name, which is not the key -- the key is the symbol's declaration, so the
|
|
44
|
+
* shape cites that instead of the mangled spelling. A numeric name is a number
|
|
45
|
+
* key only when it round-trips exactly, so `'01'` and `'1.5'` stay string keys.
|
|
46
|
+
*/
|
|
47
|
+
export declare const createLeafKeying: (identities: IdentityTable, checker: ts.TypeChecker) => {
|
|
48
|
+
keyOfSymbol: (symbol: ts.Symbol) => PropertyKeyShape | null;
|
|
49
|
+
};
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
/**
|
|
3
|
+
* A `ts.Type` that is a leaf: it maps straight to its shape with no walk.
|
|
4
|
+
*
|
|
5
|
+
* These three answers share one property that earns them a file of their own --
|
|
6
|
+
* none of them can recur. A primitive, a literal, and a property key are
|
|
7
|
+
* terminal by construction, so none needs the interning table, the in-progress
|
|
8
|
+
* set, or the self-reference machinery the rest of the mapper is built around.
|
|
9
|
+
* Keeping them out of that closure keeps the fact that they cannot participate
|
|
10
|
+
* in a cycle visible in the code rather than merely true of it.
|
|
11
|
+
*/
|
|
12
|
+
export const primitiveFor = (type) => {
|
|
13
|
+
const flags = type.flags;
|
|
14
|
+
if (flags & ts.TypeFlags.Never)
|
|
15
|
+
return { kind: 'primitive', primitive: 'never' };
|
|
16
|
+
if (flags & ts.TypeFlags.Void)
|
|
17
|
+
return { kind: 'primitive', primitive: 'void' };
|
|
18
|
+
if (flags & ts.TypeFlags.Undefined)
|
|
19
|
+
return { kind: 'primitive', primitive: 'undefined' };
|
|
20
|
+
if (flags & ts.TypeFlags.Null)
|
|
21
|
+
return { kind: 'primitive', primitive: 'null' };
|
|
22
|
+
if (flags & ts.TypeFlags.BooleanLiteral)
|
|
23
|
+
return { kind: 'primitive', primitive: 'boolean' };
|
|
24
|
+
if (flags & ts.TypeFlags.Boolean)
|
|
25
|
+
return { kind: 'primitive', primitive: 'boolean' };
|
|
26
|
+
if (flags & ts.TypeFlags.Number)
|
|
27
|
+
return { kind: 'primitive', primitive: 'number' };
|
|
28
|
+
if (flags & ts.TypeFlags.BigInt)
|
|
29
|
+
return { kind: 'primitive', primitive: 'bigint' };
|
|
30
|
+
if (flags & ts.TypeFlags.String)
|
|
31
|
+
return { kind: 'primitive', primitive: 'string' };
|
|
32
|
+
// A template-literal type (`` `${number}%` ``) and a string-mapping type
|
|
33
|
+
// (`Uppercase<T>`) are constraints on which strings a value may be, not a
|
|
34
|
+
// separate kind of value: every inhabitant is a string, and the constraint is
|
|
35
|
+
// checked by the checker and then has nothing left to say about storage. They
|
|
36
|
+
// are deliberately not `literal` shapes -- a literal names one exact value a
|
|
37
|
+
// union can be discriminated on, and these name a set -- so the honest answer
|
|
38
|
+
// is the primitive they inhabit. Without this a `style={{ width: `${n}%` }}`
|
|
39
|
+
// reaches representation as an unmodelled checker type and takes the whole
|
|
40
|
+
// enclosing object literal down with it.
|
|
41
|
+
if (flags & (ts.TypeFlags.TemplateLiteral | ts.TypeFlags.StringMapping))
|
|
42
|
+
return { kind: 'primitive', primitive: 'string' };
|
|
43
|
+
if (flags & ts.TypeFlags.ESSymbol)
|
|
44
|
+
return { kind: 'primitive', primitive: 'symbol' };
|
|
45
|
+
if (flags & ts.TypeFlags.Unknown)
|
|
46
|
+
return { kind: 'primitive', primitive: 'unknown' };
|
|
47
|
+
if (flags & ts.TypeFlags.Any)
|
|
48
|
+
return { kind: 'primitive', primitive: 'any' };
|
|
49
|
+
return null;
|
|
50
|
+
};
|
|
51
|
+
export const literalFor = (type) => {
|
|
52
|
+
if (type.isStringLiteral())
|
|
53
|
+
return { kind: 'literal', primitive: 'string', text: type.value };
|
|
54
|
+
if (type.isNumberLiteral())
|
|
55
|
+
return { kind: 'literal', primitive: 'number', text: String(type.value) };
|
|
56
|
+
if (type.flags & ts.TypeFlags.BigIntLiteral) {
|
|
57
|
+
const literal = type.value;
|
|
58
|
+
return { kind: 'literal', primitive: 'bigint', text: `${literal.negative ? '-' : ''}${literal.base10Value}` };
|
|
59
|
+
}
|
|
60
|
+
return null;
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* The declaration a symbol-named member's key is anchored to: the SYMBOL's own
|
|
64
|
+
* declaration, reached through the member's computed name.
|
|
65
|
+
*
|
|
66
|
+
* `class C { [GEA_DISPOSER]: D }` declares a member whose key is
|
|
67
|
+
* `GEA_DISPOSER`, and the member declaration is not that key -- it is a
|
|
68
|
+
* *use* of it. Anchoring on the member would give two classes that declare
|
|
69
|
+
* the same symbol-named member two different keys, and `keyof.ts` already
|
|
70
|
+
* assumes the opposite: it turns a member key straight into
|
|
71
|
+
* `{ kind: 'unique-symbol', declaration }`, which `structural.ts`'s own
|
|
72
|
+
* `UniqueESSymbol` branch mints from the SYMBOL's declaration. Two spellings
|
|
73
|
+
* of one identity is exactly the drift this compiler refuses elsewhere, and
|
|
74
|
+
* here it is load-bearing: `records.ts` names the struct member
|
|
75
|
+
* `gea_sym_<declaration>` while `producers/properties.ts` resolves
|
|
76
|
+
* `this[GEA_DISPOSER]` through the same text, so a disagreement is a field
|
|
77
|
+
* write that lands on a member no read finds.
|
|
78
|
+
*
|
|
79
|
+
* `null` when the member has no computed name to resolve through -- a
|
|
80
|
+
* synthesized or late-bound symbol with no declaration -- and the caller falls
|
|
81
|
+
* back to the member's own declaration, which is still a stable identity, just
|
|
82
|
+
* a per-declaration one.
|
|
83
|
+
*/
|
|
84
|
+
export const symbolKeyDeclarationOf = (checker, identities, member) => {
|
|
85
|
+
for (const declaration of member.getDeclarations() ?? []) {
|
|
86
|
+
const name = declaration.name;
|
|
87
|
+
if (!name || !ts.isComputedPropertyName(name))
|
|
88
|
+
continue;
|
|
89
|
+
const keySymbol = checker.getSymbolAtLocation(name.expression);
|
|
90
|
+
// Through `identities`, never `keySymbol.getDeclarations()` directly: the
|
|
91
|
+
// name expression is an imported identifier in every real case, so the
|
|
92
|
+
// symbol at that location is the IMPORT SPECIFIER and its first
|
|
93
|
+
// declaration is the import statement in the consuming file. Two files
|
|
94
|
+
// importing one symbol would then anchor its key on two different
|
|
95
|
+
// declarations. `declarationOfSymbol` follows the alias to the `const`
|
|
96
|
+
// itself, which is exactly the anchor `structural.ts`'s `UniqueESSymbol`
|
|
97
|
+
// branch mints for the key expression's own type.
|
|
98
|
+
const resolved = keySymbol ? identities.declarationOfSymbol(keySymbol) : null;
|
|
99
|
+
if (resolved)
|
|
100
|
+
return resolved;
|
|
101
|
+
}
|
|
102
|
+
return null;
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* The shape of the property key a symbol declares.
|
|
106
|
+
*
|
|
107
|
+
* A well-known symbol member arrives with the checker's own `__@`-prefixed
|
|
108
|
+
* name, which is not the key -- the key is the symbol's declaration, so the
|
|
109
|
+
* shape cites that instead of the mangled spelling. A numeric name is a number
|
|
110
|
+
* key only when it round-trips exactly, so `'01'` and `'1.5'` stay string keys.
|
|
111
|
+
*/
|
|
112
|
+
export const createLeafKeying = (identities, checker) => {
|
|
113
|
+
const keyOfSymbol = (symbol) => {
|
|
114
|
+
const name = symbol.getName();
|
|
115
|
+
if (name.startsWith('__@')) {
|
|
116
|
+
const declaration = symbolKeyDeclarationOf(checker, identities, symbol) ?? identities.declarationOfSymbol(symbol);
|
|
117
|
+
return declaration ? { kind: 'symbol', declaration: identities.declarationIdOf(declaration) } : null;
|
|
118
|
+
}
|
|
119
|
+
const asIndex = Number(name);
|
|
120
|
+
if (String(asIndex) === name && Number.isInteger(asIndex) && asIndex >= 0)
|
|
121
|
+
return { kind: 'number', value: asIndex };
|
|
122
|
+
return { kind: 'string', value: name };
|
|
123
|
+
};
|
|
124
|
+
return { keyOfSymbol };
|
|
125
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { StructuralTypeId } from '../../identity/ids.js';
|
|
3
|
+
import type { StructuralTypeTable } from '../model/structural-type-table.js';
|
|
4
|
+
import type { ValueFlowIndex } from './flow/model.js';
|
|
5
|
+
import type { ParameterBindingCensus } from './parameter-bindings.js';
|
|
6
|
+
/**
|
|
7
|
+
* Complete a synthesized local union in the SAME specialization view as its
|
|
8
|
+
* writes. A ts.Type member list can still contain erased positions (Function
|
|
9
|
+
* inside a parameter tuple); the source expression's structural type already
|
|
10
|
+
* has their physical callable signatures. Storing that value must not erase it
|
|
11
|
+
* back to Function. The flow index supplies every write, never a syntax scan.
|
|
12
|
+
*/
|
|
13
|
+
export declare const createLocalUnionResolver: (checker: ts.TypeChecker, table: StructuralTypeTable, census: ParameterBindingCensus, flow: ValueFlowIndex | undefined, read: (node: ts.Node) => StructuralTypeId, refinedSourceAt?: (node: ts.Node) => StructuralTypeId | null) => ((node: ts.Node) => StructuralTypeId | null);
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { containsUnstatedPosition } from './derived-expression-type.js';
|
|
3
|
+
/**
|
|
4
|
+
* Complete a synthesized local union in the SAME specialization view as its
|
|
5
|
+
* writes. A ts.Type member list can still contain erased positions (Function
|
|
6
|
+
* inside a parameter tuple); the source expression's structural type already
|
|
7
|
+
* has their physical callable signatures. Storing that value must not erase it
|
|
8
|
+
* back to Function. The flow index supplies every write, never a syntax scan.
|
|
9
|
+
*/
|
|
10
|
+
export const createLocalUnionResolver = (checker, table, census, flow, read, refinedSourceAt = () => null) => {
|
|
11
|
+
const memo = new Map();
|
|
12
|
+
const pending = new Set();
|
|
13
|
+
const sourceRefined = new Set();
|
|
14
|
+
const concreteRefinement = (id, visited = new Set()) => {
|
|
15
|
+
if (visited.has(id))
|
|
16
|
+
return true;
|
|
17
|
+
visited.add(id);
|
|
18
|
+
const shape = table.get(id).shape;
|
|
19
|
+
if (shape.kind === 'primitive')
|
|
20
|
+
return shape.primitive !== 'any' && shape.primitive !== 'unknown';
|
|
21
|
+
if (shape.kind === 'union')
|
|
22
|
+
return shape.members.every((member) => concreteRefinement(member, visited));
|
|
23
|
+
if (shape.kind === 'object')
|
|
24
|
+
return shape.members.every((member) => concreteRefinement(member.type, visited));
|
|
25
|
+
return shape.kind !== 'unresolved';
|
|
26
|
+
};
|
|
27
|
+
const resolve = (declaration) => {
|
|
28
|
+
if (!flow || declaration.type || !ts.isIdentifier(declaration.name))
|
|
29
|
+
return null;
|
|
30
|
+
if (memo.has(declaration))
|
|
31
|
+
return memo.get(declaration) ?? null;
|
|
32
|
+
if (pending.has(declaration))
|
|
33
|
+
return null;
|
|
34
|
+
const writes = flow.writesToDeclaration(declaration).filter((write) => write.slot === 'whole');
|
|
35
|
+
if (!writes.length ||
|
|
36
|
+
writes.some((write) => !write.value || (write.edge !== 'declaration-initializer' && write.edge !== 'identifier-assignment')))
|
|
37
|
+
return null;
|
|
38
|
+
// Some authenticated intrinsic calls publish a more precise structural
|
|
39
|
+
// result than their non-generic ambient signature. Its unannotated local
|
|
40
|
+
// must retain that same carrier. Reuse the complete write set, requiring
|
|
41
|
+
// every incoming source to establish the identical concrete refinement;
|
|
42
|
+
// one unknown or incompatible writer prevents partial narrowing.
|
|
43
|
+
pending.add(declaration);
|
|
44
|
+
const unionArms = census.unionArmsAt(declaration);
|
|
45
|
+
if (!unionArms) {
|
|
46
|
+
const refinements = writes.map((write) => refinedSourceAt(write.value));
|
|
47
|
+
const first = refinements[0];
|
|
48
|
+
if (!first || refinements.some((id) => id !== first) || !concreteRefinement(first)) {
|
|
49
|
+
pending.delete(declaration);
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
sourceRefined.add(declaration);
|
|
53
|
+
}
|
|
54
|
+
const members = writes.map((write) => read(write.value));
|
|
55
|
+
pending.delete(declaration);
|
|
56
|
+
// An uninitialized lexical binding holds undefined until its first write.
|
|
57
|
+
if (!declaration.initializer)
|
|
58
|
+
members.push(table.intern({ kind: 'primitive', primitive: 'undefined' }));
|
|
59
|
+
const result = table.intern({ kind: 'union', members });
|
|
60
|
+
memo.set(declaration, result);
|
|
61
|
+
return result;
|
|
62
|
+
};
|
|
63
|
+
return (node) => {
|
|
64
|
+
if (ts.isVariableDeclaration(node))
|
|
65
|
+
return resolve(node);
|
|
66
|
+
if (!ts.isIdentifier(node))
|
|
67
|
+
return null;
|
|
68
|
+
const declarations = checker.getSymbolAtLocation(node)?.declarations;
|
|
69
|
+
const declaration = declarations?.length === 1 ? declarations[0] : undefined;
|
|
70
|
+
if (!declaration || !ts.isVariableDeclaration(declaration))
|
|
71
|
+
return null;
|
|
72
|
+
// Resolve the narrow candidate before asking the checker for this read's
|
|
73
|
+
// potentially enormous instantiated type. Almost every identifier is not
|
|
74
|
+
// such a candidate; querying all of them overflowed TypeScript's own
|
|
75
|
+
// conditional-type instantiation stack on Hono's route types.
|
|
76
|
+
const result = resolve(declaration);
|
|
77
|
+
if (!result || node === declaration.name)
|
|
78
|
+
return result;
|
|
79
|
+
// Calling a union-held local does not first convert the cell into the
|
|
80
|
+
// checker's common signature. The callable value remains whichever arm
|
|
81
|
+
// was stored, and [[Call]] dispatches through that arm's own convention.
|
|
82
|
+
// Preserve the physical union at the direct callee site so the invocation
|
|
83
|
+
// lowering can perform its existing per-arm dispatch, including dropping
|
|
84
|
+
// arguments for a zero-parameter arm. Any non-callable or incompatible
|
|
85
|
+
// arm still fails closed in that lowering.
|
|
86
|
+
if (ts.isCallExpression(node.parent) && node.parent.expression === node)
|
|
87
|
+
return result;
|
|
88
|
+
const raw = checker.getTypeAtLocation(node);
|
|
89
|
+
// `Array.isArray(local)` deliberately narrows the true branch to `any[]`,
|
|
90
|
+
// even when this census already knows the local's sole array write arm and
|
|
91
|
+
// its concrete element type. The predicate selects that existing arm; it
|
|
92
|
+
// neither allocates a new Array<any> nor converts the elements. Recover it
|
|
93
|
+
// from the physical write union when exactly one array carrier is possible.
|
|
94
|
+
// A union with two array arms remains ambiguous and keeps the checker's
|
|
95
|
+
// view, as does a genuinely declared any[] cell whose physical shape is
|
|
96
|
+
// already just that array.
|
|
97
|
+
if (checker.isArrayType(raw)) {
|
|
98
|
+
const [element] = checker.getTypeArguments(raw);
|
|
99
|
+
const shape = table.get(result).shape;
|
|
100
|
+
if (element && (element.flags & ts.TypeFlags.Any) !== 0 && shape.kind === 'union') {
|
|
101
|
+
const arrays = shape.members.filter((id) => table.get(id).shape.kind === 'array');
|
|
102
|
+
if (arrays.length === 1)
|
|
103
|
+
return arrays[0] ?? null;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// A real flow narrowing keeps its own type. An erased Function/any at a
|
|
107
|
+
// read is not such a narrowing, but may still prove nullish exclusion.
|
|
108
|
+
if (!sourceRefined.has(declaration) && !containsUnstatedPosition(checker, node, raw))
|
|
109
|
+
return null;
|
|
110
|
+
if ((raw.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) !== 0)
|
|
111
|
+
return result;
|
|
112
|
+
if ((raw.flags & ts.TypeFlags.Undefined) !== 0)
|
|
113
|
+
return table.intern({ kind: 'primitive', primitive: 'undefined' });
|
|
114
|
+
if ((raw.flags & ts.TypeFlags.Null) !== 0)
|
|
115
|
+
return table.intern({ kind: 'primitive', primitive: 'null' });
|
|
116
|
+
const shape = table.get(result).shape;
|
|
117
|
+
if (shape.kind !== 'union')
|
|
118
|
+
return result;
|
|
119
|
+
const rawMembers = raw.isUnion() ? raw.types : [raw];
|
|
120
|
+
const allows = (flag) => rawMembers.some((member) => (member.flags & flag) !== 0);
|
|
121
|
+
const kept = shape.members.filter((id) => {
|
|
122
|
+
const member = table.get(id).shape;
|
|
123
|
+
if (member.kind !== 'primitive')
|
|
124
|
+
return true;
|
|
125
|
+
if (member.primitive === 'undefined')
|
|
126
|
+
return allows(ts.TypeFlags.Undefined);
|
|
127
|
+
if (member.primitive === 'null')
|
|
128
|
+
return allows(ts.TypeFlags.Null);
|
|
129
|
+
return true;
|
|
130
|
+
});
|
|
131
|
+
return kept.length === 1 ? (kept[0] ?? null) : table.intern({ kind: 'union', members: kept });
|
|
132
|
+
};
|
|
133
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { IdentityTable } from './identities.js';
|
|
3
|
+
/**
|
|
4
|
+
* Which members of an object type a LAYOUT carries.
|
|
5
|
+
*
|
|
6
|
+
* Three modes, and the difference between them is the whole subject of this
|
|
7
|
+
* file:
|
|
8
|
+
*
|
|
9
|
+
* - `all` -- an in-program object literal or a non-ambient declaration. Every
|
|
10
|
+
* member is written in this program, so every member is storage.
|
|
11
|
+
* - `data-only` -- a CLASS instance, and a declarationless object type. A class
|
|
12
|
+
* method lives on the prototype; putting it in the instance would claim
|
|
13
|
+
* per-instance storage the language does not allocate. (`typeof globalThis`
|
|
14
|
+
* needs the same filter for an unrelated reason: its own `globalThis`
|
|
15
|
+
* property mentions the type again, and the ambient `var`/`function` bindings
|
|
16
|
+
* at global scope are checker-flagged `Module`, not `Property`, so filtering
|
|
17
|
+
* to `Property` is what keeps that walk finite.)
|
|
18
|
+
* - `interface` -- an ambient interface or type alias. See `keeperFor`.
|
|
19
|
+
*/
|
|
20
|
+
export type MemberMode = 'all' | 'data-only' | 'interface';
|
|
21
|
+
/** Which of the two filters a mode selects, given the full member list it will be applied to. */
|
|
22
|
+
export type MemberKeeper = (properties: readonly ts.Symbol[], members: 'data-only' | 'interface') => (property: ts.Symbol) => boolean;
|
|
23
|
+
/** The member rules, bound to the identity table they need to read declarations from. */
|
|
24
|
+
export declare const createMemberRules: (identities: IdentityTable) => {
|
|
25
|
+
readonly keeperFor: MemberKeeper;
|
|
26
|
+
};
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
/** The member rules, bound to the identity table they need to read declarations from. */
|
|
3
|
+
export const createMemberRules = (identities) => {
|
|
4
|
+
const declarationOfSymbol = (property) => identities.declarationOfSymbol(property);
|
|
5
|
+
const isDataMember = (property) => (property.flags & ts.SymbolFlags.Property) !== 0;
|
|
6
|
+
/**
|
|
7
|
+
* A method no layout can carry a slot for.
|
|
8
|
+
*
|
|
9
|
+
* Three reasons, each fail-closed:
|
|
10
|
+
*
|
|
11
|
+
* GENERIC. This is the member `data-only` was written to exclude, and the
|
|
12
|
+
* exclusion is about termination, not implementation: every instantiation of
|
|
13
|
+
* `Promise.then<TResult1, TResult2>` mints a fresh anchor whose return type
|
|
14
|
+
* is a fresh `Promise` of fresh parameters, so walking one never converges.
|
|
15
|
+
*
|
|
16
|
+
* OVERLOADED. A symbol with more than one declaration has more than one call
|
|
17
|
+
* signature, and a field holding it would have to name ONE calling
|
|
18
|
+
* convention. `RegExp`'s `[Symbol.replace]`
|
|
19
|
+
* (`lib.es2015.symbol.wellknown.d.ts`) is the standing case: two signatures
|
|
20
|
+
* differing in whether `replaceValue` is a string or a callback. Carrying it
|
|
21
|
+
* reached the emitter as `unresolved(no primitive joining 2 overload
|
|
22
|
+
* signatures into one calling convention)` and refused the whole record
|
|
23
|
+
* layout -- a member the layout cannot name is not a member the layout can
|
|
24
|
+
* hold, and the honest place to refuse is the USE, which already does.
|
|
25
|
+
*
|
|
26
|
+
* UNIDENTIFIABLE. A symbol whose declaration cannot be found answers no
|
|
27
|
+
* question at all; treating it as uncarriable keeps the walk finite.
|
|
28
|
+
*/
|
|
29
|
+
const isUncarriableMethod = (property) => {
|
|
30
|
+
if ((property.getDeclarations()?.length ?? 0) > 1)
|
|
31
|
+
return true;
|
|
32
|
+
const declaration = declarationOfSymbol(property);
|
|
33
|
+
if (declaration === null)
|
|
34
|
+
return true;
|
|
35
|
+
if (!ts.isMethodSignature(declaration) && !ts.isMethodDeclaration(declaration))
|
|
36
|
+
return true;
|
|
37
|
+
return (declaration.typeParameters?.length ?? 0) > 0;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* A member an ambient *interface* contributes to the layout.
|
|
41
|
+
*
|
|
42
|
+
* `Property` plus every NON-generic method. An interface has no
|
|
43
|
+
* implementation to be missing -- it names a shape, and whoever creates a
|
|
44
|
+
* value of it supplies the members. A program that does supply one stores a
|
|
45
|
+
* callable into that slot: `core/packages/core/runtime/host.ts` builds
|
|
46
|
+
* `const photo: CameraPhoto = { imageId, width, height, orientation,
|
|
47
|
+
* dispose() { image.dispose(id) } }` against an interface declared in
|
|
48
|
+
* `core/packages/core/index.d.ts`. Filtering `dispose` out left the
|
|
49
|
+
* allocation writing a field the record type did not declare -- the
|
|
50
|
+
* object-literal walk and the layout disagreeing, with the layout wrong.
|
|
51
|
+
*
|
|
52
|
+
* Methods no layout can name a slot for stay filtered -- see
|
|
53
|
+
* `isUncarriableMethod`. This is deliberately NOT the rule for
|
|
54
|
+
* a class instance: a class method lives on the prototype, so `isDataMember`
|
|
55
|
+
* alone stays correct there and claiming per-instance storage for it would be
|
|
56
|
+
* a second, opposite defect.
|
|
57
|
+
*/
|
|
58
|
+
const isInterfaceMember = (property) => isDataMember(property) || ((property.flags & ts.SymbolFlags.Method) !== 0 && !isUncarriableMethod(property));
|
|
59
|
+
/**
|
|
60
|
+
* Whether an interface's methods can be carried AS A SET.
|
|
61
|
+
*
|
|
62
|
+
* All or none, deliberately. A layout either represents the interface
|
|
63
|
+
* faithfully or it is the data-only projection; keeping some methods and
|
|
64
|
+
* silently dropping others is neither, and it is actively worse than either
|
|
65
|
+
* -- it grows the struct with members whose siblings are missing, so the
|
|
66
|
+
* shape claims to be the interface while answering a different member set.
|
|
67
|
+
*
|
|
68
|
+
* The two cases this separates are real. `CameraPhoto`
|
|
69
|
+
* (`core/packages/core/index.d.ts`) is four data properties and one plain
|
|
70
|
+
* `dispose(): void`: nothing is dropped, every member is storage, and an
|
|
71
|
+
* object literal in `runtime/host.ts` really does write all five. `RegExp`
|
|
72
|
+
* (`lib.es5.d.ts`) is the opposite -- `[Symbol.replace]` is overloaded,
|
|
73
|
+
* others are generic -- so its layout is a projection no matter what, and
|
|
74
|
+
* admitting `exec`/`test` into it only dragged `RegExpExecArray` and
|
|
75
|
+
* `RegExpMatchArray` in behind them as native handles for protocols nothing
|
|
76
|
+
* claims. A builtin whose values are not object literals belongs behind a
|
|
77
|
+
* native protocol (v1 carries `RegExp` as `gea::runtime::regex::Pattern`),
|
|
78
|
+
* not in a record; until it is, the data-only projection is the honest
|
|
79
|
+
* answer for it, and this rule reaches that answer without naming it.
|
|
80
|
+
*/
|
|
81
|
+
const methodsAreCarriable = (properties) => properties.every((property) => (property.flags & ts.SymbolFlags.Method) === 0 || !isUncarriableMethod(property));
|
|
82
|
+
const keeperFor = (properties, members) => members === 'interface' && methodsAreCarriable(properties) ? isInterfaceMember : isDataMember;
|
|
83
|
+
return { keeperFor };
|
|
84
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { StructuralTypeId } from '../../identity/ids.js';
|
|
3
|
+
import type { StructuralTypeTable } from '../model/structural-type-table.js';
|
|
4
|
+
import type { SignatureShape } from '../model/structural-types.js';
|
|
5
|
+
import type { ValueFlowIndex } from './flow/model.js';
|
|
6
|
+
/** A mutable method is a storage cell, not its initial function body. Its
|
|
7
|
+
* public frame must transport the arguments consumed by every published
|
|
8
|
+
* replacement. Shorter implementations ignore the unused suffix through the
|
|
9
|
+
* ordinary certified callable adapter. The inventory is the shared flow
|
|
10
|
+
* index; neither member reads nor invocation producers rescan assignments.
|
|
11
|
+
*/
|
|
12
|
+
export declare const createMutableMethodResolver: (checker: ts.TypeChecker, table: StructuralTypeTable, flow: ValueFlowIndex | undefined, signatureOf: (signature: ts.Signature) => SignatureShape, read: (node: ts.Node) => StructuralTypeId, receiverTypeAt: (node: ts.Expression) => ts.Type) => {
|
|
13
|
+
readonly storageTypeAt: (node: ts.MethodDeclaration) => StructuralTypeId | null;
|
|
14
|
+
readonly readTypeAt: (node: ts.Node) => StructuralTypeId | null;
|
|
15
|
+
};
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { structuralCallSignatures } from './structural-callable.js';
|
|
3
|
+
/** A mutable method is a storage cell, not its initial function body. Its
|
|
4
|
+
* public frame must transport the arguments consumed by every published
|
|
5
|
+
* replacement. Shorter implementations ignore the unused suffix through the
|
|
6
|
+
* ordinary certified callable adapter. The inventory is the shared flow
|
|
7
|
+
* index; neither member reads nor invocation producers rescan assignments.
|
|
8
|
+
*/
|
|
9
|
+
export const createMutableMethodResolver = (checker, table, flow, signatureOf, read, receiverTypeAt) => {
|
|
10
|
+
const cache = new Map();
|
|
11
|
+
const pending = new Set();
|
|
12
|
+
const resolve = (symbol) => {
|
|
13
|
+
if (cache.has(symbol))
|
|
14
|
+
return cache.get(symbol) ?? null;
|
|
15
|
+
if (!flow || pending.has(symbol))
|
|
16
|
+
return null;
|
|
17
|
+
const declarations = symbol.declarations ?? [];
|
|
18
|
+
const methods = declarations.filter(ts.isMethodDeclaration);
|
|
19
|
+
const body = methods.find((method) => method.body !== undefined);
|
|
20
|
+
if (!body || methods.some((method) => method.parent !== body.parent))
|
|
21
|
+
return null;
|
|
22
|
+
if (ts.getCombinedModifierFlags(body) & ts.ModifierFlags.Static)
|
|
23
|
+
return null;
|
|
24
|
+
const writes = new Set([
|
|
25
|
+
...flow.writesToSymbol(symbol),
|
|
26
|
+
...declarations.flatMap((declaration) => flow.writesToDeclaration(declaration))
|
|
27
|
+
]);
|
|
28
|
+
const replacements = [...writes].filter((write) => write.slot === 'whole' || write.slot === 'member');
|
|
29
|
+
if (!replacements.some((write) => write.value !== null))
|
|
30
|
+
return null;
|
|
31
|
+
pending.add(symbol);
|
|
32
|
+
try {
|
|
33
|
+
const original = checker.getSignatureFromDeclaration(body);
|
|
34
|
+
if (!original)
|
|
35
|
+
return null;
|
|
36
|
+
const initial = signatureOf(original);
|
|
37
|
+
const signatures = checker
|
|
38
|
+
.getTypeOfSymbolAtLocation(symbol, body)
|
|
39
|
+
.getCallSignatures()
|
|
40
|
+
.map((signature) => signatureOf(signature));
|
|
41
|
+
for (const write of replacements) {
|
|
42
|
+
if (!write.value)
|
|
43
|
+
continue;
|
|
44
|
+
const alternatives = structuralCallSignatures(table, read(write.value));
|
|
45
|
+
// An unknown/noncallable replacement cannot be represented by a
|
|
46
|
+
// fabricated native function frame. Leave its existing refusal intact.
|
|
47
|
+
if (!alternatives)
|
|
48
|
+
return null;
|
|
49
|
+
signatures.push(...alternatives);
|
|
50
|
+
}
|
|
51
|
+
if (!signatures.length)
|
|
52
|
+
return null;
|
|
53
|
+
const widest = signatures.reduce((held, next) => (next.parameters.length > held.parameters.length ? next : held));
|
|
54
|
+
// Rest tails have independent positional semantics; never manufacture a
|
|
55
|
+
// fixed frame by truncating one. Equal frames need no new authority.
|
|
56
|
+
if (signatures.some((signature) => signature.parameters.some((parameter) => parameter.rest)))
|
|
57
|
+
return null;
|
|
58
|
+
const join = (values) => {
|
|
59
|
+
const members = [...new Set(values)];
|
|
60
|
+
return members.length === 1 ? members[0] : table.intern({ kind: 'union', members });
|
|
61
|
+
};
|
|
62
|
+
const result = table.intern({
|
|
63
|
+
kind: 'signature',
|
|
64
|
+
construct: [],
|
|
65
|
+
call: [
|
|
66
|
+
{
|
|
67
|
+
...widest,
|
|
68
|
+
thisParameter: initial.thisParameter,
|
|
69
|
+
result: join(signatures.map((signature) => signature.result)),
|
|
70
|
+
parameters: widest.parameters.map((parameter, ordinal) => {
|
|
71
|
+
const present = signatures.flatMap((signature) => (signature.parameters[ordinal] ? [signature.parameters[ordinal]] : []));
|
|
72
|
+
return {
|
|
73
|
+
...parameter,
|
|
74
|
+
type: join(present.map((entry) => entry.type)),
|
|
75
|
+
slot: join(present.map((entry) => entry.slot))
|
|
76
|
+
};
|
|
77
|
+
})
|
|
78
|
+
}
|
|
79
|
+
]
|
|
80
|
+
});
|
|
81
|
+
cache.set(symbol, result);
|
|
82
|
+
return result;
|
|
83
|
+
}
|
|
84
|
+
finally {
|
|
85
|
+
pending.delete(symbol);
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
return {
|
|
89
|
+
storageTypeAt: (node) => {
|
|
90
|
+
const symbol = checker.getSymbolAtLocation(node.name);
|
|
91
|
+
return symbol ? resolve(symbol) : null;
|
|
92
|
+
},
|
|
93
|
+
readTypeAt: (node) => {
|
|
94
|
+
if (!ts.isPropertyAccessExpression(node) && !ts.isElementAccessExpression(node))
|
|
95
|
+
return null;
|
|
96
|
+
const key = ts.isPropertyAccessExpression(node)
|
|
97
|
+
? node.name.text
|
|
98
|
+
: ts.isStringLiteralLike(node.argumentExpression) || ts.isNumericLiteral(node.argumentExpression)
|
|
99
|
+
? node.argumentExpression.text
|
|
100
|
+
: null;
|
|
101
|
+
// A JS parameter can be checker-any while the settled parameter census
|
|
102
|
+
// proves its class. Ask that same receiver authority for the member;
|
|
103
|
+
// otherwise a call inside a helper silently rediscovers the old body ABI.
|
|
104
|
+
const symbol = checker.getSymbolAtLocation(ts.isPropertyAccessExpression(node) ? node.name : node) ??
|
|
105
|
+
(key === null ? undefined : checker.getPropertyOfType(checker.getApparentType(receiverTypeAt(node.expression)), key));
|
|
106
|
+
return symbol ? resolve(symbol) : null;
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
};
|