@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,39 @@
|
|
|
1
|
+
import type { NodeId, OperationFamily, OperationId, ResultRole, StructuralTypeId } from '../../../identity/ids.js';
|
|
2
|
+
import type { CensusBlocker } from '../../model/coverage.js';
|
|
3
|
+
import type { OperandEvaluation, OperandSource, SemanticCaller, SemanticOperand, SemanticResult } from '../../model/operands.js';
|
|
4
|
+
import type { PrimitiveFamily } from '../../model/coverage.js';
|
|
5
|
+
/**
|
|
6
|
+
* Shared minting helpers for family producers.
|
|
7
|
+
*
|
|
8
|
+
* One AST node can normalize to several operations, and the ordinal is what
|
|
9
|
+
* keeps them apart. Producers must allocate ordinals from a single counter per
|
|
10
|
+
* node so that two producers cannot mint the same identity for different
|
|
11
|
+
* operations -- which would silently merge two operations into one.
|
|
12
|
+
*/
|
|
13
|
+
export interface OrdinalCounter {
|
|
14
|
+
readonly next: (source: NodeId, family: OperationFamily) => number;
|
|
15
|
+
}
|
|
16
|
+
export declare const createOrdinalCounter: () => OrdinalCounter;
|
|
17
|
+
/**
|
|
18
|
+
* Per-caller evaluation sequencing.
|
|
19
|
+
*
|
|
20
|
+
* Evaluation order is a property of the executing context, not of the family
|
|
21
|
+
* that happens to be publishing. One counter per caller shared by every producer
|
|
22
|
+
* is what keeps two families from handing out the same ordinal inside one
|
|
23
|
+
* function -- which would give two distinct operations one identity.
|
|
24
|
+
*/
|
|
25
|
+
export interface EvaluationOrdinals {
|
|
26
|
+
readonly next: (caller: SemanticCaller) => number;
|
|
27
|
+
}
|
|
28
|
+
export declare const createEvaluationOrdinals: () => EvaluationOrdinals;
|
|
29
|
+
export declare const mintOperationId: (counter: OrdinalCounter, source: NodeId, family: OperationFamily) => OperationId;
|
|
30
|
+
export declare const mintResult: (operation: OperationId, role: ResultRole, type: StructuralTypeId) => SemanticResult;
|
|
31
|
+
export declare const operand: (role: string, ordinal: number, source: OperandSource, type: StructuralTypeId, evaluation?: OperandEvaluation) => SemanticOperand;
|
|
32
|
+
/**
|
|
33
|
+
* A blocker states a missing capability, not a source shape.
|
|
34
|
+
*
|
|
35
|
+
* "cannot normalize `foo.bar` in file X" is not a blocker: it names a site. The
|
|
36
|
+
* blocker must name what the compiler cannot yet do, so that fixing it fixes
|
|
37
|
+
* every site at once.
|
|
38
|
+
*/
|
|
39
|
+
export declare const blocked: (source: NodeId, family: OperationFamily, reason: string, missingPrimitive: PrimitiveFamily | null) => CensusBlocker;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { operationId, semanticResultId } from '../../../identity/ids.js';
|
|
2
|
+
export const createOrdinalCounter = () => {
|
|
3
|
+
const used = new Map();
|
|
4
|
+
return {
|
|
5
|
+
next: (source, family) => {
|
|
6
|
+
const key = `${source}|${family}`;
|
|
7
|
+
const ordinal = used.get(key) ?? 0;
|
|
8
|
+
used.set(key, ordinal + 1);
|
|
9
|
+
return ordinal;
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
const callerKey = (caller) => (caller.kind === 'function' ? `fn|${caller.functionId}` : `region|${caller.regionId}`);
|
|
14
|
+
export const createEvaluationOrdinals = () => {
|
|
15
|
+
const used = new Map();
|
|
16
|
+
return {
|
|
17
|
+
next: (caller) => {
|
|
18
|
+
const key = callerKey(caller);
|
|
19
|
+
const ordinal = used.get(key) ?? 0;
|
|
20
|
+
used.set(key, ordinal + 1);
|
|
21
|
+
return ordinal;
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
export const mintOperationId = (counter, source, family) => operationId(source, family, counter.next(source, family));
|
|
26
|
+
export const mintResult = (operation, role, type) => ({
|
|
27
|
+
id: semanticResultId(operation, role),
|
|
28
|
+
role,
|
|
29
|
+
type
|
|
30
|
+
});
|
|
31
|
+
export const operand = (role, ordinal, source, type, evaluation = { kind: 'runtime' }) => ({ role, ordinal, source, type, evaluation });
|
|
32
|
+
/**
|
|
33
|
+
* A blocker states a missing capability, not a source shape.
|
|
34
|
+
*
|
|
35
|
+
* "cannot normalize `foo.bar` in file X" is not a blocker: it names a site. The
|
|
36
|
+
* blocker must name what the compiler cannot yet do, so that fixing it fixes
|
|
37
|
+
* every site at once.
|
|
38
|
+
*/
|
|
39
|
+
export const blocked = (source, family, reason, missingPrimitive) => ({
|
|
40
|
+
source,
|
|
41
|
+
family,
|
|
42
|
+
reason,
|
|
43
|
+
missingPrimitive
|
|
44
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
/**
|
|
3
|
+
* Whether a type can never be `null` or `undefined`.
|
|
4
|
+
*
|
|
5
|
+
* `any`/`unknown` do not count: neither rules out either value, so a proof
|
|
6
|
+
* built on them is not a proof. `void` does not count either -- a `void` in a
|
|
7
|
+
* stored position is `undefined`, and treating it as a non-nullish type is how
|
|
8
|
+
* an absent value passes for a present one.
|
|
9
|
+
*
|
|
10
|
+
* Two questions in this compiler turn on it, and they must agree. A property
|
|
11
|
+
* access asks it of a receiver to decide whether the `[[Get]]` can throw
|
|
12
|
+
* (`properties.ts`), and both halves of an optional chain ask it of a declared
|
|
13
|
+
* type to decide whether the `undefined` the checker put on their result is the
|
|
14
|
+
* operator's own -- and so removable -- or the declaration's, and not.
|
|
15
|
+
*/
|
|
16
|
+
export declare const excludesNullish: (type: ts.Type) => boolean;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
/**
|
|
3
|
+
* Whether a type can never be `null` or `undefined`.
|
|
4
|
+
*
|
|
5
|
+
* `any`/`unknown` do not count: neither rules out either value, so a proof
|
|
6
|
+
* built on them is not a proof. `void` does not count either -- a `void` in a
|
|
7
|
+
* stored position is `undefined`, and treating it as a non-nullish type is how
|
|
8
|
+
* an absent value passes for a present one.
|
|
9
|
+
*
|
|
10
|
+
* Two questions in this compiler turn on it, and they must agree. A property
|
|
11
|
+
* access asks it of a receiver to decide whether the `[[Get]]` can throw
|
|
12
|
+
* (`properties.ts`), and both halves of an optional chain ask it of a declared
|
|
13
|
+
* type to decide whether the `undefined` the checker put on their result is the
|
|
14
|
+
* operator's own -- and so removable -- or the declaration's, and not.
|
|
15
|
+
*/
|
|
16
|
+
export const excludesNullish = (type) => {
|
|
17
|
+
const constituents = type.isUnion() ? type.types : [type];
|
|
18
|
+
const nullishOrUnproven = ts.TypeFlags.Null |
|
|
19
|
+
ts.TypeFlags.Undefined |
|
|
20
|
+
ts.TypeFlags.Void |
|
|
21
|
+
ts.TypeFlags.Any |
|
|
22
|
+
ts.TypeFlags.Unknown |
|
|
23
|
+
ts.TypeFlags.TypeParameter |
|
|
24
|
+
ts.TypeFlags.Conditional |
|
|
25
|
+
ts.TypeFlags.IndexedAccess;
|
|
26
|
+
return constituents.every((member) => (member.flags & nullishOrUnproven) === 0);
|
|
27
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { type ObjectAssignmentElement } from '../assignment-patterns.js';
|
|
3
|
+
import type { CensusCandidate } from '../census.js';
|
|
4
|
+
import type { CandidateContribution } from '../contribution.js';
|
|
5
|
+
import type { ProducerContext } from '../producer-context.js';
|
|
6
|
+
/** Assignment patterns use the same reads and writes as ordinary expressions. */
|
|
7
|
+
export declare const contributeObjectAssignmentSource: (context: ProducerContext, candidate: CensusCandidate, node: ts.ObjectLiteralExpression) => CandidateContribution;
|
|
8
|
+
export declare const contributeObjectAssignmentElement: (context: ProducerContext, candidate: CensusCandidate, node: ObjectAssignmentElement) => CandidateContribution;
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { operationId, regionId, semanticResultId } from '../../../identity/ids.js';
|
|
3
|
+
import { normalCompletion, throwingCompletion, pureEffects } from '../../model/operands.js';
|
|
4
|
+
import { objectAssignmentSource } from '../assignment-patterns.js';
|
|
5
|
+
import { memberTypeOf } from '../derived-expression-type.js';
|
|
6
|
+
import { bindingKindOf } from './binding-kind.js';
|
|
7
|
+
import { unwrapErasedExpression } from './erasure.js';
|
|
8
|
+
import { mintOperationId, mintResult, operand } from './mint.js';
|
|
9
|
+
import { citeExpressionResult } from './references.js';
|
|
10
|
+
import { asBlocked, isStrictContext, valueEdgesInto } from './shared.js';
|
|
11
|
+
/**
|
|
12
|
+
* This object pattern's own source, in whichever of the two shapes it
|
|
13
|
+
* takes: an ordinary `=` right-hand side (`objectAssignmentSource`), or a
|
|
14
|
+
* for-of LOOP-HEAD pattern (`for ({ x, y } of points)`), which has no `=` at
|
|
15
|
+
* all -- ECMA-262 assigns it from the loop's own IteratorStep, cited by the
|
|
16
|
+
* SAME fixed ordinal `producers/destructuring.ts`'s `arrayAssignmentSourceInfo`
|
|
17
|
+
* already cites for the array-literal sibling of this identical shape
|
|
18
|
+
* (`mintIteratorSteps` reserves `next` at ordinal 2 for exactly this). The
|
|
19
|
+
* loop's own ITERABLE states the per-iteration element -- never the pattern
|
|
20
|
+
* node's own checker type, which for a literal written as an assignment
|
|
21
|
+
* target is a contextually-typed shape matching the TARGET, not the source,
|
|
22
|
+
* the same trap that function's header documents at length.
|
|
23
|
+
*
|
|
24
|
+
* A NESTED object pattern (`{ a: { b } } = ...`) is still refused: its
|
|
25
|
+
* source is another element's own resolved value, which this producer has
|
|
26
|
+
* no citation for yet, exactly as before this loop-head shape was added.
|
|
27
|
+
*/
|
|
28
|
+
const objectAssignmentSourceOf = (context, pattern) => {
|
|
29
|
+
const direct = objectAssignmentSource(pattern);
|
|
30
|
+
if (direct) {
|
|
31
|
+
const cited = citeExpressionResult(direct, context);
|
|
32
|
+
if (cited.kind === 'unmodelled')
|
|
33
|
+
return null;
|
|
34
|
+
return {
|
|
35
|
+
source: cited.source,
|
|
36
|
+
structuralType: context.types.typeAt(direct),
|
|
37
|
+
rawType: context.checker.getNonNullableType(context.types.rawTypeAt(direct))
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
const parent = pattern.parent;
|
|
41
|
+
if (!ts.isForOfStatement(parent) || parent.initializer !== pattern)
|
|
42
|
+
return null;
|
|
43
|
+
const id = operationId(context.identities.nodeIdOf(parent), 'protocol', 2);
|
|
44
|
+
const iterableRaw = context.checker.getNonNullableType(context.types.rawTypeAt(parent.expression));
|
|
45
|
+
const elementRaw = context.checker.getIndexTypeOfType(iterableRaw, ts.IndexKind.Number);
|
|
46
|
+
if (!elementRaw)
|
|
47
|
+
return null;
|
|
48
|
+
const nonNullElement = context.checker.getNonNullableType(elementRaw);
|
|
49
|
+
return {
|
|
50
|
+
source: { kind: 'result', result: semanticResultId(id, 'value') },
|
|
51
|
+
structuralType: context.types.typeOf(elementRaw),
|
|
52
|
+
rawType: nonNullElement
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
/** Assignment patterns use the same reads and writes as ordinary expressions. */
|
|
56
|
+
export const contributeObjectAssignmentSource = (context, candidate, node) => {
|
|
57
|
+
if (node.properties.some((property) => !ts.isPropertyAssignment(property) && !ts.isShorthandPropertyAssignment(property))) {
|
|
58
|
+
return asBlocked(candidate.id, 'destructuring', 'rest properties in object assignment are not yet modelled', null);
|
|
59
|
+
}
|
|
60
|
+
const info = objectAssignmentSourceOf(context, node);
|
|
61
|
+
if (!info)
|
|
62
|
+
return asBlocked(candidate.id, 'destructuring', 'nested object assignment sources are not yet modelled', null);
|
|
63
|
+
const id = mintOperationId(context.ordinals, candidate.id, 'destructuring');
|
|
64
|
+
const op = {
|
|
65
|
+
id,
|
|
66
|
+
family: 'destructuring',
|
|
67
|
+
form: 'object-source',
|
|
68
|
+
caller: candidate.caller,
|
|
69
|
+
evaluationOrdinal: candidate.evaluationOrdinal,
|
|
70
|
+
operands: [operand('base', 0, info.source, info.structuralType)],
|
|
71
|
+
results: [mintResult(id, 'value', info.structuralType)],
|
|
72
|
+
completion: throwingCompletion,
|
|
73
|
+
effects: pureEffects
|
|
74
|
+
};
|
|
75
|
+
return { kind: 'operations', operations: [op], edges: valueEdgesInto(id, op.operands) };
|
|
76
|
+
};
|
|
77
|
+
const staticPropertyName = (name) => ts.isIdentifier(name) || ts.isStringLiteralLike(name) || ts.isNumericLiteral(name) ? name.text : null;
|
|
78
|
+
export const contributeObjectAssignmentElement = (context, candidate, node) => {
|
|
79
|
+
const refuse = (reason) => asBlocked(candidate.id, 'destructuring', reason, null);
|
|
80
|
+
const pattern = node.parent;
|
|
81
|
+
if (!ts.isObjectLiteralExpression(pattern))
|
|
82
|
+
return refuse('object assignment element has no object pattern');
|
|
83
|
+
const info = objectAssignmentSourceOf(context, pattern);
|
|
84
|
+
if (!info)
|
|
85
|
+
return refuse('nested object assignment sources are not yet modelled');
|
|
86
|
+
if (ts.isShorthandPropertyAssignment(node) && node.objectAssignmentInitializer)
|
|
87
|
+
return refuse('defaulted object assignment is not yet modelled');
|
|
88
|
+
const target = unwrapErasedExpression(ts.isPropertyAssignment(node) ? node.initializer : node.name);
|
|
89
|
+
if (!ts.isIdentifier(target) && !ts.isPropertyAccessExpression(target) && !ts.isElementAccessExpression(target)) {
|
|
90
|
+
return refuse('object assignment target requires a name or a property reference; defaults and nested patterns are not yet modelled');
|
|
91
|
+
}
|
|
92
|
+
const key = staticPropertyName(node.name);
|
|
93
|
+
if (key === null)
|
|
94
|
+
return refuse('computed object assignment source keys are not yet modelled');
|
|
95
|
+
const stringType = context.table.intern({ kind: 'primitive', primitive: 'string' });
|
|
96
|
+
const sourceType = info.structuralType;
|
|
97
|
+
const rawSource = info.rawType;
|
|
98
|
+
const rawMember = memberTypeOf(context.checker, rawSource, key, node) ?? context.checker.getIndexTypeOfType(rawSource, ts.IndexKind.String);
|
|
99
|
+
// The extracted property's type belongs to the source, not to the target
|
|
100
|
+
// slot. A real conversion between those two is audited at the store.
|
|
101
|
+
const extractedType = context.types.typeOf(rawMember ?? ((rawSource.flags & ts.TypeFlags.Any) !== 0 ? rawSource : context.checker.getUndefinedType()));
|
|
102
|
+
const sourceResult = semanticResultId(operationId(context.identities.nodeIdOf(pattern), 'destructuring', 0), 'value');
|
|
103
|
+
const getId = mintOperationId(context.ordinals, candidate.id, 'destructuring');
|
|
104
|
+
const get = {
|
|
105
|
+
id: getId,
|
|
106
|
+
family: 'destructuring',
|
|
107
|
+
form: 'object-pattern',
|
|
108
|
+
caller: candidate.caller,
|
|
109
|
+
evaluationOrdinal: candidate.evaluationOrdinal,
|
|
110
|
+
operands: [
|
|
111
|
+
operand('base', 0, { kind: 'result', result: sourceResult }, sourceType),
|
|
112
|
+
operand('key', 0, { kind: 'constant', text: key, literal: 'string' }, stringType)
|
|
113
|
+
],
|
|
114
|
+
results: [mintResult(getId, 'value', extractedType)],
|
|
115
|
+
completion: throwingCompletion,
|
|
116
|
+
effects: { readsMutableState: true, writesMutableState: false, allocates: false, callsUserCode: true }
|
|
117
|
+
};
|
|
118
|
+
const value = { kind: 'result', result: semanticResultId(getId, 'value') };
|
|
119
|
+
let write;
|
|
120
|
+
if (ts.isIdentifier(target)) {
|
|
121
|
+
// Shorthand keys have their own symbol. The value symbol names the cell.
|
|
122
|
+
const symbol = ts.isShorthandPropertyAssignment(node)
|
|
123
|
+
? context.checker.getShorthandAssignmentValueSymbol(node)
|
|
124
|
+
: context.checker.getSymbolAtLocation(target);
|
|
125
|
+
const declaration = symbol ? context.identities.symbolDeclarationId(symbol) : null;
|
|
126
|
+
const declarationNode = symbol ? context.identities.declarationOfSymbol(symbol) : null;
|
|
127
|
+
if (!declaration || !declarationNode)
|
|
128
|
+
return refuse('object assignment target has no declared binding cell');
|
|
129
|
+
const id = mintOperationId(context.ordinals, candidate.id, 'binding');
|
|
130
|
+
const targetType = context.types.typeAt(target);
|
|
131
|
+
write = {
|
|
132
|
+
id,
|
|
133
|
+
family: 'binding',
|
|
134
|
+
action: 'write',
|
|
135
|
+
declaration,
|
|
136
|
+
...bindingKindOf(declarationNode),
|
|
137
|
+
...(context.commonJsBindings.has(declaration)
|
|
138
|
+
? {
|
|
139
|
+
commonJs: {
|
|
140
|
+
global: context.commonJsBindings.get(declaration),
|
|
141
|
+
owner: regionId(context.identities.nodeIdOf(target.getSourceFile()), 'module-body')
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
: {}),
|
|
145
|
+
caller: candidate.caller,
|
|
146
|
+
evaluationOrdinal: candidate.evaluationOrdinal,
|
|
147
|
+
operands: [operand('value', 0, value, targetType)],
|
|
148
|
+
results: [mintResult(id, 'value', targetType)],
|
|
149
|
+
completion: normalCompletion,
|
|
150
|
+
effects: { ...pureEffects, writesMutableState: true }
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
const receiver = citeExpressionResult(target.expression, context);
|
|
155
|
+
if (receiver.kind === 'unmodelled')
|
|
156
|
+
return refuse(receiver.reason);
|
|
157
|
+
const targetKey = ts.isPropertyAccessExpression(target)
|
|
158
|
+
? target.name.text
|
|
159
|
+
: ts.isStringLiteralLike(target.argumentExpression) || ts.isNumericLiteral(target.argumentExpression)
|
|
160
|
+
? target.argumentExpression.text
|
|
161
|
+
: null;
|
|
162
|
+
if (targetKey === null)
|
|
163
|
+
return refuse('computed object assignment target keys are not yet modelled');
|
|
164
|
+
const id = mintOperationId(context.ordinals, candidate.id, 'property');
|
|
165
|
+
const receiverType = context.types.typeAt(target.expression);
|
|
166
|
+
write = {
|
|
167
|
+
id,
|
|
168
|
+
family: 'property',
|
|
169
|
+
internalMethod: 'set',
|
|
170
|
+
strict: isStrictContext(target, context.buildIsStrict),
|
|
171
|
+
keyIsComputed: false,
|
|
172
|
+
descriptor: null,
|
|
173
|
+
caller: candidate.caller,
|
|
174
|
+
evaluationOrdinal: candidate.evaluationOrdinal,
|
|
175
|
+
operands: [
|
|
176
|
+
operand('receiver', 0, receiver.source, receiverType, { kind: 'provenance' }),
|
|
177
|
+
operand('key', 0, { kind: 'constant', text: targetKey, literal: 'string' }, stringType),
|
|
178
|
+
operand('value', 0, value, extractedType)
|
|
179
|
+
],
|
|
180
|
+
results: [mintResult(id, 'value', receiverType)],
|
|
181
|
+
completion: throwingCompletion,
|
|
182
|
+
effects: { readsMutableState: false, writesMutableState: true, allocates: false, callsUserCode: true }
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
const edges = [
|
|
186
|
+
...valueEdgesInto(getId, get.operands),
|
|
187
|
+
...valueEdgesInto(write.id, write.operands),
|
|
188
|
+
{ kind: 'evaluation', from: getId, to: write.id }
|
|
189
|
+
];
|
|
190
|
+
// The write orders BEFORE the enclosing `=` expression's own value -- real
|
|
191
|
+
// only when this pattern IS the left side of one (`({ a } = src)` reads as
|
|
192
|
+
// the whole expression producing `src`, so every write must precede that).
|
|
193
|
+
// A for-of LOOP-HEAD pattern has no such enclosing expression at all: the
|
|
194
|
+
// pattern is the loop's own initializer, and citing a nonexistent
|
|
195
|
+
// `computation` operation at the loop statement's node id pointed this
|
|
196
|
+
// edge at whatever real operation happens to share that identity instead
|
|
197
|
+
// -- silently, and only visible as an unrelated evaluation-graph cycle at
|
|
198
|
+
// lowering.
|
|
199
|
+
const assignmentSource = objectAssignmentSource(pattern);
|
|
200
|
+
if (assignmentSource) {
|
|
201
|
+
edges.push({ kind: 'evaluation', from: write.id, to: operationId(context.identities.nodeIdOf(pattern.parent), 'computation', 0) });
|
|
202
|
+
}
|
|
203
|
+
return { kind: 'operations', operations: [get, write], edges };
|
|
204
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { CensusCandidate } from '../census.js';
|
|
3
|
+
import type { CandidateContribution } from '../contribution.js';
|
|
4
|
+
import type { ProducerContext } from '../producer-context.js';
|
|
5
|
+
/** Authenticate the borrowed algorithm while declarations and mutation facts exist. */
|
|
6
|
+
export declare const isAuthenticatedObjectTag: (context: ProducerContext, node: ts.Node) => node is ts.CallExpression;
|
|
7
|
+
export declare const contributeObjectTag: (context: ProducerContext, candidate: CensusCandidate, node: ts.Node) => CandidateContribution | null;
|
|
8
|
+
/** Proven intrinsic callee reads are consumed by the ObjectTag algorithm itself. */
|
|
9
|
+
export declare const isObjectTagCalleePart: (context: ProducerContext, node: ts.Node) => boolean;
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { outermostErasureOf } from './erasure.js';
|
|
2
|
+
import ts from 'typescript';
|
|
3
|
+
import { throwingCompletion } from '../../model/operands.js';
|
|
4
|
+
import { isGlobalObjectConstructor } from '../derived-expression-type.js';
|
|
5
|
+
import { mintOperationId, mintResult, operand } from './mint.js';
|
|
6
|
+
import { sourceForValue, unwrapErased, valueEdgesInto } from './shared.js';
|
|
7
|
+
import { intactIntrinsicPrototypeKeysType } from '../intrinsic-prototype.js';
|
|
8
|
+
import { intrinsicObjectKeysIntact } from '../host-mutation-keys.js';
|
|
9
|
+
/** Authenticate the borrowed algorithm while declarations and mutation facts exist. */
|
|
10
|
+
export const isAuthenticatedObjectTag = (context, node) => {
|
|
11
|
+
if (!ts.isCallExpression(node) || ts.isOptionalChain(node) || node.arguments.some(ts.isSpreadElement))
|
|
12
|
+
return false;
|
|
13
|
+
const call = unwrapErased(node.expression);
|
|
14
|
+
if (!ts.isPropertyAccessExpression(call) || call.name.text !== 'call')
|
|
15
|
+
return false;
|
|
16
|
+
const method = unwrapErased(call.expression);
|
|
17
|
+
if (!ts.isPropertyAccessExpression(method) || method.name.text !== 'toString')
|
|
18
|
+
return false;
|
|
19
|
+
const prototype = unwrapErased(method.expression);
|
|
20
|
+
if (!ts.isPropertyAccessExpression(prototype) || prototype.name.text !== 'prototype')
|
|
21
|
+
return false;
|
|
22
|
+
const owner = prototype.expression;
|
|
23
|
+
if (!isGlobalObjectConstructor(context.checker, owner, context.checker.getTypeAtLocation(owner)))
|
|
24
|
+
return false;
|
|
25
|
+
const taint = context.globalHostMutationTaint;
|
|
26
|
+
if (taint.has('*'))
|
|
27
|
+
return false;
|
|
28
|
+
// Function.call and CallableFunction.call have distinct checker declarations
|
|
29
|
+
// but borrow the same runtime prototype. Ask its shared mutation identity,
|
|
30
|
+
// for the one key this borrowing reads from it.
|
|
31
|
+
if (intactIntrinsicPrototypeKeysType(context, 'Function', { names: ['call'] }, owner) === null)
|
|
32
|
+
return false;
|
|
33
|
+
// Each link reads one key: `Object.prototype`, then its `toString`, then
|
|
34
|
+
// that function's `call`. A member link must not have been replaced; an
|
|
35
|
+
// owner link must not have had the next key written.
|
|
36
|
+
const keyReadThrough = new Map([
|
|
37
|
+
[owner, 'prototype'],
|
|
38
|
+
[prototype.name, 'toString'],
|
|
39
|
+
[method.name, 'call']
|
|
40
|
+
]);
|
|
41
|
+
for (const location of [owner, prototype.name, method.name, call.name]) {
|
|
42
|
+
const symbol = context.checker.getSymbolAtLocation(location);
|
|
43
|
+
const declarations = location === owner ? (symbol?.valueDeclaration ? [symbol.valueDeclaration] : []) : (symbol?.declarations ?? []);
|
|
44
|
+
if (declarations.length === 0 || !declarations.every((declaration) => context.isStandardLibraryDeclaration?.(declaration) === true))
|
|
45
|
+
return false;
|
|
46
|
+
const identity = symbol
|
|
47
|
+
? location === owner
|
|
48
|
+
? context.identities.symbolValueDeclarationId(symbol, owner)
|
|
49
|
+
: context.identities.symbolDeclarationId(symbol)
|
|
50
|
+
: null;
|
|
51
|
+
if (identity === null)
|
|
52
|
+
return false;
|
|
53
|
+
const next = keyReadThrough.get(location);
|
|
54
|
+
// The owner and `Object.prototype` are objects read through by key; the
|
|
55
|
+
// member declarations are values that must not have been replaced.
|
|
56
|
+
const objectIntact = next === undefined || intrinsicObjectKeysIntact(taint, identity, { names: [next] });
|
|
57
|
+
const replaced = location !== owner && location !== prototype.name && taint.has(identity);
|
|
58
|
+
if (!objectIntact || replaced)
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
const primitivePrototypesIntact = (type) => {
|
|
62
|
+
if (type.isUnion())
|
|
63
|
+
return type.types.every(primitivePrototypesIntact);
|
|
64
|
+
const flags = type.flags;
|
|
65
|
+
const names = (flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) !== 0
|
|
66
|
+
? ['Number', 'String', 'Boolean', 'BigInt', 'Symbol']
|
|
67
|
+
: (flags & ts.TypeFlags.NumberLike) !== 0
|
|
68
|
+
? ['Number']
|
|
69
|
+
: (flags & ts.TypeFlags.StringLike) !== 0
|
|
70
|
+
? ['String']
|
|
71
|
+
: (flags & ts.TypeFlags.BooleanLike) !== 0
|
|
72
|
+
? ['Boolean']
|
|
73
|
+
: (flags & ts.TypeFlags.BigIntLike) !== 0
|
|
74
|
+
? ['BigInt']
|
|
75
|
+
: (flags & ts.TypeFlags.ESSymbolLike) !== 0
|
|
76
|
+
? ['Symbol']
|
|
77
|
+
: [];
|
|
78
|
+
// A primitive receiver's tag is read from its wrapper prototype's @@toStringTag.
|
|
79
|
+
return names.every((name) => intactIntrinsicPrototypeKeysType(context, name, { names: ['@@toStringTag'] }, node) !== null);
|
|
80
|
+
};
|
|
81
|
+
const receiver = node.arguments[0];
|
|
82
|
+
return !receiver || primitivePrototypesIntact(context.checker.getTypeAtLocation(receiver));
|
|
83
|
+
};
|
|
84
|
+
export const contributeObjectTag = (context, candidate, node) => {
|
|
85
|
+
if (!isAuthenticatedObjectTag(context, node))
|
|
86
|
+
return null;
|
|
87
|
+
// Preserve the invocation candidate's published identity: callers already cite it.
|
|
88
|
+
// Authentication changes the operation's algorithm, not the source expression.
|
|
89
|
+
const id = mintOperationId(context.ordinals, candidate.id, 'invocation');
|
|
90
|
+
const args = node.arguments;
|
|
91
|
+
const receiver = args[0];
|
|
92
|
+
const receiverIsVoid = receiver !== undefined && (context.checker.getTypeAtLocation(receiver).flags & ts.TypeFlags.Void) !== 0;
|
|
93
|
+
const operands = [
|
|
94
|
+
receiver && !receiverIsVoid
|
|
95
|
+
? operand('operand', 0, sourceForValue(context, receiver), context.types.typeAt(receiver))
|
|
96
|
+
: operand('operand', 0, { kind: 'constant', text: 'undefined', literal: 'undefined' }, context.types.typeOf(context.checker.getUndefinedType())),
|
|
97
|
+
...(receiverIsVoid ? args : args.slice(1)).map((argument, index) => operand('ignored-argument', index, sourceForValue(context, argument), context.types.typeAt(argument)))
|
|
98
|
+
];
|
|
99
|
+
const operation = {
|
|
100
|
+
id,
|
|
101
|
+
family: 'computation',
|
|
102
|
+
caller: candidate.caller,
|
|
103
|
+
form: 'unary',
|
|
104
|
+
operator: 'ObjectTag',
|
|
105
|
+
operands,
|
|
106
|
+
results: [mintResult(id, 'value', context.types.typeOf(context.checker.getStringType()))],
|
|
107
|
+
completion: throwingCompletion,
|
|
108
|
+
effects: { readsMutableState: true, writesMutableState: false, allocates: false, callsUserCode: true },
|
|
109
|
+
evaluationOrdinal: candidate.evaluationOrdinal
|
|
110
|
+
};
|
|
111
|
+
return { kind: 'operations', operations: [operation], edges: valueEdgesInto(id, operands) };
|
|
112
|
+
};
|
|
113
|
+
/** Proven intrinsic callee reads are consumed by the ObjectTag algorithm itself. */
|
|
114
|
+
export const isObjectTagCalleePart = (context, node) => {
|
|
115
|
+
let current = outermostErasureOf(node);
|
|
116
|
+
while (ts.isPropertyAccessExpression(current.parent) && current.parent.expression === current)
|
|
117
|
+
current = outermostErasureOf(current.parent);
|
|
118
|
+
return ts.isCallExpression(current.parent) && current.parent.expression === current && isAuthenticatedObjectTag(context, current.parent);
|
|
119
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
/**
|
|
3
|
+
* Which link of an optional chain answers for the whole chain, and what it
|
|
4
|
+
* branches on.
|
|
5
|
+
*
|
|
6
|
+
* Three producers ask this -- `properties.ts` builds the gated `[[Get]]`,
|
|
7
|
+
* `invocations.ts` builds the gated `[[Call]]`, and `references.ts` decides
|
|
8
|
+
* which of a link's two results a citer gets -- and they must agree exactly. A
|
|
9
|
+
* link that publishes a `short-circuit` result nobody cites leaves a value
|
|
10
|
+
* unread; a citer that asks for one nobody published names a result no producer
|
|
11
|
+
* installed, which the publication guard withholds silently. So the rule lives
|
|
12
|
+
* here once rather than as three spellings of it.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* The nearest optional link's base, shared by every operation in that chain.
|
|
16
|
+
* ECMA-262 (2025), OptionalExpression / ChainEvaluation: plain suffixes keep
|
|
17
|
+
* the original short-circuit condition; only another ?. introduces a new one.
|
|
18
|
+
* Parentheses end a chain, so the walk follows the checker's OptionalChain
|
|
19
|
+
* flags instead of erasing expression wrappers before asking the question.
|
|
20
|
+
*/
|
|
21
|
+
export declare const optionalChainGuardOf: (node: ts.Node) => ts.Expression | null;
|
|
22
|
+
export declare const optionalCallGuardOf: (node: ts.CallExpression) => ts.Expression | null;
|
|
23
|
+
/** Every value-producing link publishes the whole expression's undefined arm. */
|
|
24
|
+
export declare const publishesShortCircuit: (node: ts.Node) => boolean;
|
|
25
|
+
/**
|
|
26
|
+
* What a call's signature returns on the branch where it actually ran.
|
|
27
|
+
*
|
|
28
|
+
* The checker augments the signature it resolves for an optional call: ask
|
|
29
|
+
* `d?.scale(2)` for its resolved return and it answers `number | undefined`,
|
|
30
|
+
* not `number`. That `undefined` is the *chain's*, not the method's -- the
|
|
31
|
+
* method returns `number` and never runs at all on the other branch -- so a
|
|
32
|
+
* consumer that believes it builds a callee carrier the callee does not have,
|
|
33
|
+
* and the store of the real method into it has no conversion.
|
|
34
|
+
*
|
|
35
|
+
* The strip is licensed rather than assumed, exactly as `presentValueTypeOf`
|
|
36
|
+
* licenses the property half: the signature is asked for its *own* declared
|
|
37
|
+
* return, uninstantiated by any call site, and the `undefined` is removed only
|
|
38
|
+
* when that has none of its own. A signature with no declaration, an inferred
|
|
39
|
+
* return this cannot re-ask, or a genuinely `undefined`-returning one keeps the
|
|
40
|
+
* union -- wider than the truth, and never narrower than it.
|
|
41
|
+
*/
|
|
42
|
+
export declare const presentReturnTypeOf: (checker: ts.TypeChecker, signature: ts.Signature) => ts.Type;
|
|
43
|
+
/** Whether this call is one whose resolved signature the checker augmented with the chain's `undefined`. */
|
|
44
|
+
export declare const isShortCircuitingCall: (call: ts.CallExpression | ts.NewExpression | ts.TaggedTemplateExpression) => boolean;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { excludesNullish } from './nullish.js';
|
|
3
|
+
/**
|
|
4
|
+
* Which link of an optional chain answers for the whole chain, and what it
|
|
5
|
+
* branches on.
|
|
6
|
+
*
|
|
7
|
+
* Three producers ask this -- `properties.ts` builds the gated `[[Get]]`,
|
|
8
|
+
* `invocations.ts` builds the gated `[[Call]]`, and `references.ts` decides
|
|
9
|
+
* which of a link's two results a citer gets -- and they must agree exactly. A
|
|
10
|
+
* link that publishes a `short-circuit` result nobody cites leaves a value
|
|
11
|
+
* unread; a citer that asks for one nobody published names a result no producer
|
|
12
|
+
* installed, which the publication guard withholds silently. So the rule lives
|
|
13
|
+
* here once rather than as three spellings of it.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* The nearest optional link's base, shared by every operation in that chain.
|
|
17
|
+
* ECMA-262 (2025), OptionalExpression / ChainEvaluation: plain suffixes keep
|
|
18
|
+
* the original short-circuit condition; only another ?. introduces a new one.
|
|
19
|
+
* Parentheses end a chain, so the walk follows the checker's OptionalChain
|
|
20
|
+
* flags instead of erasing expression wrappers before asking the question.
|
|
21
|
+
*/
|
|
22
|
+
export const optionalChainGuardOf = (node) => {
|
|
23
|
+
if (!ts.isOptionalChain(node))
|
|
24
|
+
return null;
|
|
25
|
+
if (ts.isNonNullExpression(node))
|
|
26
|
+
return optionalChainGuardOf(node.expression);
|
|
27
|
+
if (node.questionDotToken !== undefined)
|
|
28
|
+
return node.expression;
|
|
29
|
+
return optionalChainGuardOf(node.expression);
|
|
30
|
+
};
|
|
31
|
+
export const optionalCallGuardOf = (node) => optionalChainGuardOf(node);
|
|
32
|
+
/** Every value-producing link publishes the whole expression's undefined arm. */
|
|
33
|
+
export const publishesShortCircuit = (node) => optionalChainGuardOf(node) !== null;
|
|
34
|
+
/**
|
|
35
|
+
* What a call's signature returns on the branch where it actually ran.
|
|
36
|
+
*
|
|
37
|
+
* The checker augments the signature it resolves for an optional call: ask
|
|
38
|
+
* `d?.scale(2)` for its resolved return and it answers `number | undefined`,
|
|
39
|
+
* not `number`. That `undefined` is the *chain's*, not the method's -- the
|
|
40
|
+
* method returns `number` and never runs at all on the other branch -- so a
|
|
41
|
+
* consumer that believes it builds a callee carrier the callee does not have,
|
|
42
|
+
* and the store of the real method into it has no conversion.
|
|
43
|
+
*
|
|
44
|
+
* The strip is licensed rather than assumed, exactly as `presentValueTypeOf`
|
|
45
|
+
* licenses the property half: the signature is asked for its *own* declared
|
|
46
|
+
* return, uninstantiated by any call site, and the `undefined` is removed only
|
|
47
|
+
* when that has none of its own. A signature with no declaration, an inferred
|
|
48
|
+
* return this cannot re-ask, or a genuinely `undefined`-returning one keeps the
|
|
49
|
+
* union -- wider than the truth, and never narrower than it.
|
|
50
|
+
*/
|
|
51
|
+
// Deliberately checker-only, not a bypass to route through a census: both
|
|
52
|
+
// callers (`producers/shared.ts`'s `resolvedCalleeSignatureType`,
|
|
53
|
+
// `producers/invocations.ts`'s `buildSelectedSignature`) already reconcile
|
|
54
|
+
// a census answer around this -- `invocations.ts`'s own extensive comment on
|
|
55
|
+
// `censusReturn`/`siteReturn` covers exactly why this stays the checker's raw
|
|
56
|
+
// SIGNATURE answer (this callee's own declared shape, stripped of the
|
|
57
|
+
// chain's synthetic `undefined`) rather than a second place asking the same
|
|
58
|
+
// return-binding question the census already owns downstream.
|
|
59
|
+
export const presentReturnTypeOf = (checker, signature) => {
|
|
60
|
+
const returned = signature.getReturnType();
|
|
61
|
+
const declaration = signature.getDeclaration();
|
|
62
|
+
const declared = declaration ? checker.getSignatureFromDeclaration(declaration) : undefined;
|
|
63
|
+
// `void | undefined` describes the chain's value, but `() => void` is the
|
|
64
|
+
// method's ABI. Normalizing that union as a stored value would publish an
|
|
65
|
+
// undefined-returning callable and make the actual void method unassignable.
|
|
66
|
+
// An explicitly void signature has no type parameters in its result to
|
|
67
|
+
// instantiate, so its declaration is also the exact present-branch answer.
|
|
68
|
+
if (declared && (declared.getReturnType().flags & ts.TypeFlags.Void) !== 0)
|
|
69
|
+
return declared.getReturnType();
|
|
70
|
+
if (!declared || !excludesNullish(declared.getReturnType()))
|
|
71
|
+
return returned;
|
|
72
|
+
return checker.getNonNullableType(returned);
|
|
73
|
+
};
|
|
74
|
+
/** Whether this call is one whose resolved signature the checker augmented with the chain's `undefined`. */
|
|
75
|
+
export const isShortCircuitingCall = (call) => ts.isCallExpression(call) && optionalCallGuardOf(call) !== null;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { type StructuralTypeId } from '../../../identity/ids.js';
|
|
3
|
+
import type { FamilyProducer } from '../contribution.js';
|
|
4
|
+
import type { ProducerContext } from '../producer-context.js';
|
|
5
|
+
type AccessNode = ts.PropertyAccessExpression | ts.ElementAccessExpression;
|
|
6
|
+
/**
|
|
7
|
+
* The value type published for this exact property expression.
|
|
8
|
+
*
|
|
9
|
+
* Consumers cite the property producer's result by identity, so they must cite
|
|
10
|
+
* its type from the same rule as well. In particular, an indexed dictionary
|
|
11
|
+
* read can publish `T | undefined` even when TypeScript's unchecked index
|
|
12
|
+
* signature reports only `T`; asking the checker again at a conditional merge
|
|
13
|
+
* erases the missing-key state the property operation deliberately restored.
|
|
14
|
+
* Optional chains cite their whole-expression result, including the synthetic
|
|
15
|
+
* `undefined` branch, rather than the present-only internal `[[Get]]` result.
|
|
16
|
+
*/
|
|
17
|
+
export declare const propertyExpressionValueTypeAt: (context: ProducerContext, node: AccessNode) => StructuralTypeId;
|
|
18
|
+
/** Whether an expression is an authenticated host identity that cannot be nullish in this program. */
|
|
19
|
+
export declare const isAlwaysPresentHostExpression: (expression: ts.Expression, context: ProducerContext) => boolean;
|
|
20
|
+
export declare const createPropertyProducer: (context: ProducerContext) => FamilyProducer;
|
|
21
|
+
export {};
|