@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,560 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { operationFamilies, operationId, operationOfResult, semanticResultId } from '../../identity/ids.js';
|
|
3
|
+
import { operandOf } from '../model/operands.js';
|
|
4
|
+
import { forEachEvaluationChild } from './evaluation-order.js';
|
|
5
|
+
import { rootSpecialization } from './identities.js';
|
|
6
|
+
import { parameterValueResultOf } from './producers/bindings.js';
|
|
7
|
+
import { citeSwitchCaseTest, citeSwitchGroupTest, clauseTerminates } from './producers/control.js';
|
|
8
|
+
import { citeExpressionResult } from './producers/references.js';
|
|
9
|
+
import { optionalChainGuardOf, optionalCallGuardOf } from './producers/optional-chain.js';
|
|
10
|
+
import { citeExtractedElementValue } from './producers/destructuring.js';
|
|
11
|
+
/**
|
|
12
|
+
* Every operation one node published.
|
|
13
|
+
*
|
|
14
|
+
* Ordinals within a `(node, family)` pair are handed out consecutively from
|
|
15
|
+
* zero, so probing until the first absence enumerates them exactly. This is why
|
|
16
|
+
* the pass can gate a node without knowing which producer served it or how many
|
|
17
|
+
* operations that producer minted -- a compound assignment's three, an update's
|
|
18
|
+
* two, a property's get-then-set pair.
|
|
19
|
+
*/
|
|
20
|
+
const operationsOfNode = (operations, node) => {
|
|
21
|
+
const found = [];
|
|
22
|
+
// The node half of the identity, built once instead of once per probe.
|
|
23
|
+
//
|
|
24
|
+
// Every probe below asks for `op|<node>|<family>|<ordinal>` and the node is
|
|
25
|
+
// the long part -- a file identity, a syntax kind, an ordinal and a
|
|
26
|
+
// specialization suffix. Rebuilding it for all fourteen families, and again
|
|
27
|
+
// for every ordinal of every family that answers, copied that string fifteen
|
|
28
|
+
// or more times to ask fifteen questions about one node. The ids are
|
|
29
|
+
// identical to `operationId`'s own spelling (this is the same concatenation
|
|
30
|
+
// it performs, with its first argument factored out), so the probe order,
|
|
31
|
+
// the answers, and the truncation at the first absent ordinal are unchanged.
|
|
32
|
+
const prefix = `op|${node}|`;
|
|
33
|
+
for (const family of operationFamilies) {
|
|
34
|
+
const familyPrefix = `${prefix}${family}|`;
|
|
35
|
+
for (let ordinal = 0;; ordinal += 1) {
|
|
36
|
+
const id = `${familyPrefix}${ordinal}`;
|
|
37
|
+
if (!operations.has(id))
|
|
38
|
+
break;
|
|
39
|
+
found.push(id);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return found;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* A nested function body is not gated by whatever `if` its declaration sits in:
|
|
46
|
+
* it runs when it is called, which can be any time at all. Its *allocation* is
|
|
47
|
+
* gated, and that operation belongs to the enclosing body, so the boundary is
|
|
48
|
+
* the body -- not the declaration.
|
|
49
|
+
*/
|
|
50
|
+
const bodyOfOwnCaller = (node) => {
|
|
51
|
+
if (ts.isFunctionDeclaration(node) || ts.isFunctionExpression(node) || ts.isArrowFunction(node))
|
|
52
|
+
return node.body ?? null;
|
|
53
|
+
if (ts.isMethodDeclaration(node) || ts.isConstructorDeclaration(node))
|
|
54
|
+
return node.body ?? null;
|
|
55
|
+
if (ts.isGetAccessorDeclaration(node) || ts.isSetAccessorDeclaration(node))
|
|
56
|
+
return node.body ?? null;
|
|
57
|
+
if (ts.isClassDeclaration(node) || ts.isClassExpression(node))
|
|
58
|
+
return node;
|
|
59
|
+
return null;
|
|
60
|
+
};
|
|
61
|
+
/** The condition's own published result, or `null` when nothing citable produces it. */
|
|
62
|
+
const guardOf = (condition, facts) => {
|
|
63
|
+
const cited = citeExpressionResult(condition, facts);
|
|
64
|
+
if (cited.kind !== 'source' || cited.source.kind !== 'result')
|
|
65
|
+
return null;
|
|
66
|
+
return cited.source.result;
|
|
67
|
+
};
|
|
68
|
+
export const gatingEdges = (input) => {
|
|
69
|
+
const { files, operations, specializations } = input;
|
|
70
|
+
const edges = [];
|
|
71
|
+
// One walker per copy, built on first use. Rebuilding a dozen closures for
|
|
72
|
+
// every node of every copy would rebuild them for one answer, the same way
|
|
73
|
+
// `normalize.ts` caches a producer set per copy and for the same reason.
|
|
74
|
+
const walkers = new Map();
|
|
75
|
+
// Emitted in chain order, outermost first: the lowering reads the chain back
|
|
76
|
+
// in the order the edges arrive, so a caller's own nesting is what states
|
|
77
|
+
// which scope contains which.
|
|
78
|
+
const pushGateEdgesFor = (to, gates) => {
|
|
79
|
+
for (const gate of gates) {
|
|
80
|
+
// Emitted in chain order, outermost first: the lowering reads the chain
|
|
81
|
+
// back in the order the edges arrive, so this walk's own nesting is what
|
|
82
|
+
// states which scope contains which.
|
|
83
|
+
if (gate.kind === 'loop')
|
|
84
|
+
edges.push({ kind: 'loop', loop: gate.loop, to });
|
|
85
|
+
else if (gate.kind === 'loop-latch')
|
|
86
|
+
edges.push({ kind: 'loop-latch', loop: gate.loop, to });
|
|
87
|
+
else if (gate.kind === 'region')
|
|
88
|
+
edges.push({ kind: 'region', region: gate.region, part: gate.part, to });
|
|
89
|
+
else
|
|
90
|
+
edges.push({ kind: 'conditional', guard: gate.guard, to, takenWhen: gate.takenWhen });
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
const walkerFor = (path) => {
|
|
94
|
+
const key = input.identities.copyKeyOf(path);
|
|
95
|
+
const cached = walkers.get(key);
|
|
96
|
+
if (cached)
|
|
97
|
+
return cached;
|
|
98
|
+
// Every id this walker mints goes through the copy's own view. A node the
|
|
99
|
+
// copy does not enclose still answers with its root identity -- the view
|
|
100
|
+
// truncates the path to the steps that actually contain the node -- so one
|
|
101
|
+
// walker per copy is correct for the whole subtree it reaches, not only
|
|
102
|
+
// for the part inside the generic.
|
|
103
|
+
const identities = input.identities.forSpecialization(path);
|
|
104
|
+
// The copy's own view, plus the program-wide census: one citation rule,
|
|
105
|
+
// whichever specialization is walking.
|
|
106
|
+
const facts = {
|
|
107
|
+
identities,
|
|
108
|
+
argumentsObjects: input.argumentsObjects,
|
|
109
|
+
unresolvableNames: input.unresolvableNames,
|
|
110
|
+
namespacePaths: input.namespacePaths
|
|
111
|
+
};
|
|
112
|
+
const emit = (node, gates) => {
|
|
113
|
+
if (gates.length === 0)
|
|
114
|
+
return;
|
|
115
|
+
for (const to of operationsOfNode(operations, identities.nodeIdOf(node)))
|
|
116
|
+
pushGateEdgesFor(to, gates);
|
|
117
|
+
};
|
|
118
|
+
/**
|
|
119
|
+
* Monomorphization, the same fork `census.ts` performs on the same census
|
|
120
|
+
* and in the same two halves.
|
|
121
|
+
*
|
|
122
|
+
* A generic's body is walked once per instantiation, under that copy's
|
|
123
|
+
* path, because that is the path the census minted the copy's operation
|
|
124
|
+
* ids under. Walking it once at the root instead names the generic, and a
|
|
125
|
+
* gate naming an operation no copy publishes is dropped by
|
|
126
|
+
* `normalize.ts`'s own dangling-edge filter -- silently, because a gate is
|
|
127
|
+
* invented by this pass rather than published by a producer, so no
|
|
128
|
+
* withheld-component blocker is reported for it. What reaches the lowering
|
|
129
|
+
* is then a body whose `if` arms both run.
|
|
130
|
+
*
|
|
131
|
+
* A generic the program never instantiates is walked not at all, for the
|
|
132
|
+
* reason the census states: it has no operations to gate.
|
|
133
|
+
*/
|
|
134
|
+
const visit = (node, gates) => {
|
|
135
|
+
// A type annotation contains no operations, and a function body starts a
|
|
136
|
+
// caller of its own whose execution this chain says nothing about.
|
|
137
|
+
if (ts.isTypeNode(node) && !ts.isExpressionWithTypeArguments(node))
|
|
138
|
+
return;
|
|
139
|
+
const copies = specializations.specializationsOf(node);
|
|
140
|
+
if (copies.length > 0) {
|
|
141
|
+
for (const copy of copies) {
|
|
142
|
+
walkerFor([...path, { owner: node, ordinal: copy.ordinal }]).visitHere(node, gates);
|
|
143
|
+
}
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
if (specializations.isGeneric(node))
|
|
147
|
+
return;
|
|
148
|
+
visitHere(node, gates);
|
|
149
|
+
};
|
|
150
|
+
const visitHere = (node, gates) => {
|
|
151
|
+
if (ts.isSpreadElement(node) || ts.isSpreadAssignment(node)) {
|
|
152
|
+
// `mintIteratorSteps` reserves all four protocol ordinals -- 0
|
|
153
|
+
// `get-method`, 1 `get-iterator`, 2 `next`, 3 `close` -- even when a
|
|
154
|
+
// step is skipped for THIS spread, for the identical reason the
|
|
155
|
+
// for-of/for-in branch below states: reserving the ordinal even when
|
|
156
|
+
// unused keeps each step's identity fixed across variants. A plain
|
|
157
|
+
// dynamic gather (`[...anySource]`, `mintIteratorSteps`' `appendGather`
|
|
158
|
+
// caller) publishes only `get-iterator` at ordinal 1 -- `get-method` at
|
|
159
|
+
// ordinal 0 is reserved but never published -- so `operationsOfNode`'s
|
|
160
|
+
// generic probe (which stops at the first missing ordinal, starting
|
|
161
|
+
// from zero) never reaches it: `emit(node, gates)` below found nothing
|
|
162
|
+
// for this node and left `get-iterator` at the unconditional outer
|
|
163
|
+
// scope. Inside a `try`, that stranded operation read as a dependency
|
|
164
|
+
// from OUTSIDE the region into it, and the promotion rule that moves a
|
|
165
|
+
// cross-region dependency ahead of the region's own marker
|
|
166
|
+
// (`ir/lower-graph.ts`'s `dependencies` loop) then required the try to
|
|
167
|
+
// wait on an operation it could only run by first being inside the
|
|
168
|
+
// try -- a cycle, not a bug in that rule. Gate the four fixed ordinals
|
|
169
|
+
// directly instead of probing for them: a gate naming an operation
|
|
170
|
+
// this spread never published is dropped by `normalize.ts`'s own
|
|
171
|
+
// dangling-edge filter, so this is safe for a closed-tuple or
|
|
172
|
+
// native-range-copy spread, which publish none of the four, too.
|
|
173
|
+
const nodeId = identities.nodeIdOf(node);
|
|
174
|
+
pushGateEdgesFor(operationId(nodeId, 'protocol', 0), gates);
|
|
175
|
+
pushGateEdgesFor(operationId(nodeId, 'protocol', 1), gates);
|
|
176
|
+
pushGateEdgesFor(operationId(nodeId, 'protocol', 2), gates);
|
|
177
|
+
pushGateEdgesFor(operationId(nodeId, 'protocol', 3), gates);
|
|
178
|
+
// and then FALL THROUGH to `emit(node, gates)` below. This branch ADDS
|
|
179
|
+
// the ordinals the probe cannot reach; it does not replace the generic
|
|
180
|
+
// handling, and an earlier version that returned here broke every
|
|
181
|
+
// spread whose operations the probe finds perfectly well. A rest
|
|
182
|
+
// TARGET (`[first, ...tail] = source`) is the case that exposed it:
|
|
183
|
+
// `mintIteratorSteps` keys all four ordinals on `candidate.id`
|
|
184
|
+
// (producers/protocol.ts), which for an assignment pattern is the
|
|
185
|
+
// enclosing ArrayLiteralExpression, never the rest element -- so the
|
|
186
|
+
// four gates above are dangling for it and drop out, and returning
|
|
187
|
+
// early meant its own node was never emitted at all. The enclosing
|
|
188
|
+
// `for...of`'s operations were then left unGated, and its guard's
|
|
189
|
+
// truthy arm read as re-entered after it had ended
|
|
190
|
+
// (`array-assignment-rest-target.ts`).
|
|
191
|
+
}
|
|
192
|
+
if (ts.isForOfStatement(node) || ts.isForInStatement(node)) {
|
|
193
|
+
const loop = operationId(identities.nodeIdOf(node), 'control', 0);
|
|
194
|
+
const loopOperation = operations.get(loop);
|
|
195
|
+
// `control.ts`'s `contributeForOfIn` reshapes every sync for-of/for-in
|
|
196
|
+
// loop into an ordinary head-tested one -- a `'condition'` operand
|
|
197
|
+
// instead of `'iterator-record'` -- for both the array/enumeration
|
|
198
|
+
// fast path AND the general dynamic-protocol path (a source neither
|
|
199
|
+
// `hasNativeIterationCursor` nor `hasNativeEnumerationCursor` claims a
|
|
200
|
+
// native cursor for; a `for...of` over `Headers`/`URLSearchParams` is
|
|
201
|
+
// this shape). The condition and the steps feeding it (get-method,
|
|
202
|
+
// get-iterator, next, the `!done` negation) have no source `ts.Node`
|
|
203
|
+
// of their own the way a real `while`/`for`'s condition expression
|
|
204
|
+
// does, so this branch reconstructs their fixed operation ids
|
|
205
|
+
// directly rather than visiting one: `protocol` ordinal 0 is
|
|
206
|
+
// `get-method`, 1 is `get-iterator`, 2 is always `next`, and the
|
|
207
|
+
// negation is `computation` ordinal 0, the only operation of that
|
|
208
|
+
// family this statement's own node ever mints.
|
|
209
|
+
//
|
|
210
|
+
// `get-method` (ordinal 0) is reserved but never MINTED on the fast
|
|
211
|
+
// path -- `mintIteratorSteps`'s `includeGetMethod: !arrayFastPath &&
|
|
212
|
+
// isForOf` -- so gating it there is a no-op (a gate naming an
|
|
213
|
+
// operation no copy publishes is dropped by `normalize.ts`'s own
|
|
214
|
+
// dangling-edge filter). On the general path it IS minted, runs once
|
|
215
|
+
// before the loop starts (the same scope as get-iterator, never the
|
|
216
|
+
// per-iteration `inside`), and until this line was never gated at
|
|
217
|
+
// all: nothing placed its operations inside the guard's arm, so they
|
|
218
|
+
// landed at the unconditional outer scope while get-iterator/next
|
|
219
|
+
// (gated below) stayed inside it -- the same arm then closes once
|
|
220
|
+
// (unconditionally-scoped code runs before it) and gets asked to
|
|
221
|
+
// reopen for the loop's own gated operations, which
|
|
222
|
+
// `lower-flow.ts`'s `enterArm` refuses by name: "the truthy arm of
|
|
223
|
+
// guard ... was re-entered after it had already ended". Confirmed by
|
|
224
|
+
// tracing hono's `Context#newResponse` (`context.ts:613`'s `for
|
|
225
|
+
// (const [key, value] of argHeaders)`, `argHeaders` a `Headers`):
|
|
226
|
+
// `get-method`'s own operation carried an EMPTY scope chain while
|
|
227
|
+
// `get-iterator`/`next` for the identical for-of correctly carried
|
|
228
|
+
// `guard(...,truthy)`.
|
|
229
|
+
//
|
|
230
|
+
// This entirely bypasses the generic `emit(node, gates)` call below --
|
|
231
|
+
// not merely runs before it -- because that call's own per-node scan
|
|
232
|
+
// would otherwise find the negation too (it sits at ordinal 0, unlike
|
|
233
|
+
// the protocol steps, which a real gap hides from it) and gate it a
|
|
234
|
+
// second time, at the wrong, unconditional outer scope. Handling the
|
|
235
|
+
// loop operation itself here as well keeps both gatings of this one node
|
|
236
|
+
// in one place instead of splitting it across two code paths.
|
|
237
|
+
if (loopOperation && operandOf(loopOperation, 'condition')) {
|
|
238
|
+
pushGateEdgesFor(loop, gates);
|
|
239
|
+
visit(node.expression, gates);
|
|
240
|
+
const nodeId = identities.nodeIdOf(node);
|
|
241
|
+
pushGateEdgesFor(operationId(nodeId, 'protocol', 0), gates);
|
|
242
|
+
pushGateEdgesFor(operationId(nodeId, 'protocol', 1), gates);
|
|
243
|
+
const inside = [...gates, { kind: 'loop', loop }];
|
|
244
|
+
pushGateEdgesFor(operationId(nodeId, 'protocol', 2), inside);
|
|
245
|
+
const negationId = operationId(nodeId, 'computation', 0);
|
|
246
|
+
pushGateEdgesFor(negationId, inside);
|
|
247
|
+
const iteration = [
|
|
248
|
+
...inside,
|
|
249
|
+
{ kind: 'guard', guard: semanticResultId(negationId, 'value'), takenWhen: 'truthy' }
|
|
250
|
+
];
|
|
251
|
+
// ECMA-262's own `ForOfBodyEvaluation`: the loop variable is (re)bound
|
|
252
|
+
// from this iteration's value only once the loop is confirmed to
|
|
253
|
+
// continue, immediately before the body runs -- the same `iteration`
|
|
254
|
+
// scope the body itself gets, not the unconditional per-iteration
|
|
255
|
+
// `inside` scope `next`/the negation use (those must still run on the
|
|
256
|
+
// final, non-continuing check). `node.initializer` is a real
|
|
257
|
+
// `ts.Node` (the `VariableDeclarationList` holding `value`'s own
|
|
258
|
+
// declaration, or a bare assignment target), so it goes through the
|
|
259
|
+
// ordinary generic `visit` rather than a reconstructed id.
|
|
260
|
+
visit(node.initializer, iteration);
|
|
261
|
+
visit(node.statement, iteration);
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
// Not the array fast path (or the candidate never built at all): fall
|
|
265
|
+
// through unchanged to the ordinary generic handling below, exactly as
|
|
266
|
+
// for-of/for-in were handled before this branch existed.
|
|
267
|
+
}
|
|
268
|
+
emit(node, gates);
|
|
269
|
+
const ownBody = bodyOfOwnCaller(node);
|
|
270
|
+
if (ownBody) {
|
|
271
|
+
// A parameter's default initializer runs inside the callee's own
|
|
272
|
+
// activation, at call time -- exactly like the body, and never at the
|
|
273
|
+
// declaration site. A function declared inside an `if` still binds its
|
|
274
|
+
// parameters fresh on every call, so a parameter child resets the chain
|
|
275
|
+
// the same way the body already does; only the declaration's own
|
|
276
|
+
// allocation stays gated by where it was written.
|
|
277
|
+
forEachEvaluationChild(node, (child) => visit(child, child === ownBody || ts.isParameter(child) ? [] : gates));
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
// A binding element's own default -- `const { width = 10 } = options` --
|
|
281
|
+
// is the same shape one level in: the initializer runs only when the
|
|
282
|
+
// EXTRACTION came back `undefined`, so it is gated on the extraction's
|
|
283
|
+
// result exactly as a parameter's is gated on its raw argument. `nullish`
|
|
284
|
+
// is the arm vocabulary; which absence question is asked travels on the
|
|
285
|
+
// predicate, and `lower-graph.ts` states `is-defined` for this guard for
|
|
286
|
+
// the reason it states it for a parameter: `{ a = 1 }` over `{ a: null }`
|
|
287
|
+
// binds `null`, never `1`.
|
|
288
|
+
//
|
|
289
|
+
// Without this the initializer's operations sit ungated in the straight
|
|
290
|
+
// line, so `{ canvas = createCanvasElement() }` would CALL the factory
|
|
291
|
+
// whether or not a canvas was supplied.
|
|
292
|
+
if (ts.isBindingElement(node) && node.initializer) {
|
|
293
|
+
forEachEvaluationChild(node, (child) => {
|
|
294
|
+
if (child === node.initializer)
|
|
295
|
+
return;
|
|
296
|
+
visit(child, gates);
|
|
297
|
+
});
|
|
298
|
+
visit(node.initializer, [...gates, { kind: 'guard', guard: citeExtractedElementValue(node, identities), takenWhen: 'nullish' }]);
|
|
299
|
+
return;
|
|
300
|
+
}
|
|
301
|
+
if (ts.isParameter(node) && node.initializer) {
|
|
302
|
+
// Pattern extraction runs after the parameter's default has selected
|
|
303
|
+
// its value; only the initializer belongs under the absence guard.
|
|
304
|
+
visit(node.name, gates);
|
|
305
|
+
visit(node.initializer, [...gates, { kind: 'guard', guard: parameterValueResultOf(node, identities), takenWhen: 'nullish' }]);
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
308
|
+
// A `switch` is an `if`/`else if` chain over one discriminant, and it is
|
|
309
|
+
// gated as one: clause `i` runs when its own test held and every earlier
|
|
310
|
+
// test did not. `producers/control.ts` mints those tests -- one strict
|
|
311
|
+
// equality per `case`, keyed on the clause -- and refuses the one shape a
|
|
312
|
+
// chain cannot say (a `default` that is not last), so what reaches here
|
|
313
|
+
// is exactly the shape these gates describe. The `default` clause has no
|
|
314
|
+
// test of its own; its gate is every case ON THE CHAIN having failed.
|
|
315
|
+
//
|
|
316
|
+
// A clause that can fall through (`control.ts`'s `clauseTerminates`)
|
|
317
|
+
// hands its guard forward exactly as an empty clause does: its body sits
|
|
318
|
+
// on its own guard's arm, and the next clause's guard is the `||` fold
|
|
319
|
+
// of the two, so the next body runs when either test held -- unless the
|
|
320
|
+
// first body left through a `break`, which jumps to the switch's exit.
|
|
321
|
+
// Its guard therefore does NOT join the chain as a falsy gate, which is
|
|
322
|
+
// also what lets it fall into `default`: that clause runs when nothing
|
|
323
|
+
// on the chain held, and the guard handed forward is not on it.
|
|
324
|
+
if (ts.isSwitchStatement(node)) {
|
|
325
|
+
visit(node.expression, gates);
|
|
326
|
+
const chain = [...gates];
|
|
327
|
+
let running = null;
|
|
328
|
+
for (const clause of node.caseBlock.clauses) {
|
|
329
|
+
if (!ts.isCaseClause(clause)) {
|
|
330
|
+
for (const statement of clause.statements)
|
|
331
|
+
visit(statement, chain);
|
|
332
|
+
running = null;
|
|
333
|
+
continue;
|
|
334
|
+
}
|
|
335
|
+
const test = citeSwitchCaseTest(clause, identities);
|
|
336
|
+
// Within an empty-clause group, every later label is evaluated only
|
|
337
|
+
// if the accumulated match failed. The group's || merge itself lives
|
|
338
|
+
// outside that arm, so the existing logical lowering can join it.
|
|
339
|
+
const labelGates = running === null ? chain : [...chain, { kind: 'guard', guard: running, takenWhen: 'falsy' }];
|
|
340
|
+
visit(clause.expression, labelGates);
|
|
341
|
+
pushGateEdgesFor(operationOfResult(test), labelGates);
|
|
342
|
+
const guard = running === null ? test : citeSwitchGroupTest(clause, identities);
|
|
343
|
+
if (running !== null)
|
|
344
|
+
pushGateEdgesFor(operationOfResult(guard), chain);
|
|
345
|
+
if (clause.statements.length === 0) {
|
|
346
|
+
running = guard;
|
|
347
|
+
continue;
|
|
348
|
+
}
|
|
349
|
+
for (const statement of clause.statements)
|
|
350
|
+
visit(statement, [...chain, { kind: 'guard', guard, takenWhen: 'truthy' }]);
|
|
351
|
+
if (!clauseTerminates(clause)) {
|
|
352
|
+
running = guard;
|
|
353
|
+
continue;
|
|
354
|
+
}
|
|
355
|
+
chain.push({ kind: 'guard', guard, takenWhen: 'falsy' });
|
|
356
|
+
running = null;
|
|
357
|
+
}
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
360
|
+
if (ts.isIfStatement(node)) {
|
|
361
|
+
visit(node.expression, gates);
|
|
362
|
+
const guard = guardOf(node.expression, facts);
|
|
363
|
+
// A condition with no citable result cannot gate anything. The control
|
|
364
|
+
// producer refuses such a branch outright, so the arms below are already
|
|
365
|
+
// in a blocked body; descending with the chain unchanged keeps this pass
|
|
366
|
+
// from inventing a gate it cannot name.
|
|
367
|
+
visit(node.thenStatement, guard === null ? gates : [...gates, { kind: 'guard', guard, takenWhen: 'truthy' }]);
|
|
368
|
+
if (node.elseStatement)
|
|
369
|
+
visit(node.elseStatement, guard === null ? gates : [...gates, { kind: 'guard', guard, takenWhen: 'falsy' }]);
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
// An optional chain does not evaluate what is inside its own brackets when
|
|
373
|
+
// the guard is absent: `h.on?.(side())` never calls `side`, and `a?.[k()]`
|
|
374
|
+
// never calls `k`. The producers state the *operation's* own gate as a
|
|
375
|
+
// conditional edge, which places the call or the `[[Get]]`; this is the
|
|
376
|
+
// other half, because an argument list and a computed key are subtrees, and
|
|
377
|
+
// only a walk that knows which syntax they belong to can put them inside
|
|
378
|
+
// the guard. Without it every argument was hoisted above the presence test
|
|
379
|
+
// -- a call the source program never makes.
|
|
380
|
+
const chain = optionalChainSubtree(node);
|
|
381
|
+
if (chain) {
|
|
382
|
+
visit(chain.evaluated, gates);
|
|
383
|
+
const guard = guardOf(chain.guard, facts);
|
|
384
|
+
const inside = guard === null ? gates : [...gates, { kind: 'guard', guard, takenWhen: 'present' }];
|
|
385
|
+
for (const gated of chain.gated)
|
|
386
|
+
visit(gated, inside);
|
|
387
|
+
return;
|
|
388
|
+
}
|
|
389
|
+
if (ts.isConditionalExpression(node)) {
|
|
390
|
+
visit(node.condition, gates);
|
|
391
|
+
const guard = guardOf(node.condition, facts);
|
|
392
|
+
visit(node.whenTrue, guard === null ? gates : [...gates, { kind: 'guard', guard, takenWhen: 'truthy' }]);
|
|
393
|
+
visit(node.whenFalse, guard === null ? gates : [...gates, { kind: 'guard', guard, takenWhen: 'falsy' }]);
|
|
394
|
+
return;
|
|
395
|
+
}
|
|
396
|
+
// `a ||= b`: the right-hand SUBTREE is evaluated only on the branch the
|
|
397
|
+
// operator does not short-circuit on, exactly as `a || b`'s is. Placing
|
|
398
|
+
// the STORE is not this pass's job -- whoever mints the store publishes a
|
|
399
|
+
// `conditional` edge for it (`producers/computations.ts`'s
|
|
400
|
+
// `contributeLogicalAssignment` for a binding target,
|
|
401
|
+
// `producers/properties.ts`'s `logical-set` for a property one), the same
|
|
402
|
+
// division of labour `a?.b()` uses: an edge places an operation, a gate
|
|
403
|
+
// places a subtree. The merge itself is deliberately ungated -- it is the
|
|
404
|
+
// join both branches reach.
|
|
405
|
+
if (ts.isBinaryExpression(node) && logicalAssignmentTakenWhen(node.operatorToken.kind) !== null) {
|
|
406
|
+
visit(node.left, gates);
|
|
407
|
+
const guard = guardOf(node.left, facts);
|
|
408
|
+
const takenWhen = logicalAssignmentTakenWhen(node.operatorToken.kind);
|
|
409
|
+
visit(node.right, guard === null || takenWhen === null ? gates : [...gates, { kind: 'guard', guard, takenWhen }]);
|
|
410
|
+
return;
|
|
411
|
+
}
|
|
412
|
+
if (ts.isBinaryExpression(node) && shortCircuitTakenWhen(node.operatorToken.kind) !== null) {
|
|
413
|
+
visit(node.left, gates);
|
|
414
|
+
const guard = guardOf(node.left, facts);
|
|
415
|
+
const takenWhen = shortCircuitTakenWhen(node.operatorToken.kind);
|
|
416
|
+
visit(node.right, guard === null || takenWhen === null ? gates : [...gates, { kind: 'guard', guard, takenWhen }]);
|
|
417
|
+
return;
|
|
418
|
+
}
|
|
419
|
+
// A `while`/`for` head-tested loop is a guard plus a back edge: the condition
|
|
420
|
+
// and the body are both inside the iteration, and the condition's own guard
|
|
421
|
+
// is what separates them. Stating both is what lets the lowering put the
|
|
422
|
+
// condition in a block the body's end can jump back to.
|
|
423
|
+
//
|
|
424
|
+
// `for`-`of`/`for`-`in` are absent: their iteration is driven by the
|
|
425
|
+
// iterator protocol, not by a boolean guard. A `do`/`while` is absent for
|
|
426
|
+
// the opposite reason and gets its own branch just below -- gating its
|
|
427
|
+
// body on the condition would skip the guaranteed first iteration.
|
|
428
|
+
//
|
|
429
|
+
// A `do`/`while` is a loop scope with *no* guard between the loop and the
|
|
430
|
+
// body: the body runs unconditionally on entry, which is the whole of
|
|
431
|
+
// what "tail-tested" means. The condition then sits one scope deeper, in
|
|
432
|
+
// the loop's latch -- the same block a `for` incrementor gets, and for
|
|
433
|
+
// the same reason: it is post-body code that `continue` must re-enter at,
|
|
434
|
+
// since ECMA-262 14.7.2 sends `continue` to the test, not to the top of
|
|
435
|
+
// the body. The back edge itself is the latch's own terminator, a branch
|
|
436
|
+
// the flow controller builds from `loop-tail`'s condition operand; there
|
|
437
|
+
// is no conditional gate to state here because no operation of this loop
|
|
438
|
+
// is conditional on the test at all.
|
|
439
|
+
if (ts.isDoStatement(node)) {
|
|
440
|
+
const loop = operationId(identities.nodeIdOf(node), 'control', 0);
|
|
441
|
+
if (operations.has(loop)) {
|
|
442
|
+
const inside = [...gates, { kind: 'loop', loop }];
|
|
443
|
+
visit(node.statement, inside);
|
|
444
|
+
visit(node.expression, [...inside, { kind: 'loop-latch', loop }]);
|
|
445
|
+
return;
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
const head = headTestedLoopOf(node);
|
|
449
|
+
if (head) {
|
|
450
|
+
const loop = operationId(identities.nodeIdOf(node), 'control', 0);
|
|
451
|
+
if (operations.has(loop)) {
|
|
452
|
+
const inside = [...gates, { kind: 'loop', loop }];
|
|
453
|
+
if (head.initializer)
|
|
454
|
+
visit(head.initializer, gates);
|
|
455
|
+
if (head.condition)
|
|
456
|
+
visit(head.condition, inside);
|
|
457
|
+
const guard = head.condition ? guardOf(head.condition, facts) : null;
|
|
458
|
+
const iteration = guard === null ? inside : [...inside, { kind: 'guard', guard, takenWhen: 'truthy' }];
|
|
459
|
+
visit(head.body, iteration);
|
|
460
|
+
// The incrementor is inside the iteration the same way the body is,
|
|
461
|
+
// but it is also `continue`'s real target: ECMA-262's `ForStatement`
|
|
462
|
+
// evaluation re-enters at the update expression, not at the test.
|
|
463
|
+
// Marking its own extra scope layer is what lets the lowering give it
|
|
464
|
+
// a block distinct from the header -- one a `continue` inside the
|
|
465
|
+
// body can jump to before the condition is ever re-tested.
|
|
466
|
+
if (head.incrementor)
|
|
467
|
+
visit(head.incrementor, [...iteration, { kind: 'loop-latch', loop }]);
|
|
468
|
+
return;
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
// A try statement's three clauses are mutually exclusive scopes that share
|
|
472
|
+
// no boolean guard: the runtime enters at most one of `try` and `catch`
|
|
473
|
+
// per attempt, and `finally` is not gated by either. `RegionEdge` is what
|
|
474
|
+
// lets the lowering treat this exactly like a guard or a loop -- an
|
|
475
|
+
// ordinary `ScopeRef` the flow controller opens and closes -- instead of a
|
|
476
|
+
// consumer re-deriving membership from source ranges, which is precisely
|
|
477
|
+
// the anti-pattern `edges.ts`'s own header comment refuses.
|
|
478
|
+
//
|
|
479
|
+
// The try statement's own operation (`control.ts`'s `contributeTry`) is
|
|
480
|
+
// not itself inside any of its three parts, so it is left ungated here --
|
|
481
|
+
// `emit(node, gates)` above already tagged it with whatever scope this try
|
|
482
|
+
// statement itself sits in, exactly as a loop's own header operation is
|
|
483
|
+
// tagged with the scope surrounding the loop, not the scope inside it.
|
|
484
|
+
if (ts.isTryStatement(node)) {
|
|
485
|
+
const region = operationId(identities.nodeIdOf(node), 'control', 0);
|
|
486
|
+
if (operations.has(region)) {
|
|
487
|
+
visit(node.tryBlock, [...gates, { kind: 'region', region, part: 'try' }]);
|
|
488
|
+
if (node.catchClause)
|
|
489
|
+
visit(node.catchClause, [...gates, { kind: 'region', region, part: 'catch' }]);
|
|
490
|
+
if (node.finallyBlock)
|
|
491
|
+
visit(node.finallyBlock, [...gates, { kind: 'region', region, part: 'finally' }]);
|
|
492
|
+
return;
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
forEachEvaluationChild(node, (child) => visit(child, gates));
|
|
496
|
+
};
|
|
497
|
+
const walker = { visit, visitHere };
|
|
498
|
+
walkers.set(key, walker);
|
|
499
|
+
return walker;
|
|
500
|
+
};
|
|
501
|
+
const root = walkerFor(rootSpecialization);
|
|
502
|
+
for (const file of files)
|
|
503
|
+
for (const statement of input.reachable.statementsOf(file))
|
|
504
|
+
root.visit(statement, []);
|
|
505
|
+
return edges;
|
|
506
|
+
};
|
|
507
|
+
/** A loop whose condition is evaluated before every iteration, including the first. */
|
|
508
|
+
const headTestedLoopOf = (node) => {
|
|
509
|
+
if (ts.isWhileStatement(node)) {
|
|
510
|
+
return { initializer: null, condition: node.expression, body: node.statement, incrementor: null };
|
|
511
|
+
}
|
|
512
|
+
if (ts.isForStatement(node)) {
|
|
513
|
+
return {
|
|
514
|
+
initializer: node.initializer ?? null,
|
|
515
|
+
condition: node.condition ?? null,
|
|
516
|
+
body: node.statement,
|
|
517
|
+
incrementor: node.incrementor ?? null
|
|
518
|
+
};
|
|
519
|
+
}
|
|
520
|
+
return null;
|
|
521
|
+
};
|
|
522
|
+
const optionalChainSubtree = (node) => {
|
|
523
|
+
if (ts.isCallExpression(node) && ts.isOptionalChain(node)) {
|
|
524
|
+
const guard = optionalCallGuardOf(node);
|
|
525
|
+
return guard ? { evaluated: node.expression, guard, gated: node.arguments } : null;
|
|
526
|
+
}
|
|
527
|
+
if (ts.isElementAccessExpression(node) && ts.isOptionalChain(node)) {
|
|
528
|
+
const guard = optionalChainGuardOf(node);
|
|
529
|
+
return guard ? { evaluated: node.expression, guard, gated: [node.argumentExpression] } : null;
|
|
530
|
+
}
|
|
531
|
+
return null;
|
|
532
|
+
};
|
|
533
|
+
/**
|
|
534
|
+
* The side a logical ASSIGNMENT evaluates its right operand -- and performs its
|
|
535
|
+
* store -- on, or `null` when the operator is not one of the three.
|
|
536
|
+
*
|
|
537
|
+
* Separate from `shortCircuitTakenWhen` rather than folded into it: the two
|
|
538
|
+
* answers happen to coincide, but the callers do different things with them
|
|
539
|
+
* (one gates a subtree, the other also gates a store), and a single table
|
|
540
|
+
* would let a plain `a || b` fall into the store-gating branch.
|
|
541
|
+
*/
|
|
542
|
+
const logicalAssignmentTakenWhen = (kind) => {
|
|
543
|
+
if (kind === ts.SyntaxKind.AmpersandAmpersandEqualsToken)
|
|
544
|
+
return 'truthy';
|
|
545
|
+
if (kind === ts.SyntaxKind.BarBarEqualsToken)
|
|
546
|
+
return 'falsy';
|
|
547
|
+
if (kind === ts.SyntaxKind.QuestionQuestionEqualsToken)
|
|
548
|
+
return 'nullish';
|
|
549
|
+
return null;
|
|
550
|
+
};
|
|
551
|
+
/** The side a short-circuit operator evaluates its right operand on, or `null` when it is not one. */
|
|
552
|
+
const shortCircuitTakenWhen = (kind) => {
|
|
553
|
+
if (kind === ts.SyntaxKind.AmpersandAmpersandToken)
|
|
554
|
+
return 'truthy';
|
|
555
|
+
if (kind === ts.SyntaxKind.BarBarToken)
|
|
556
|
+
return 'falsy';
|
|
557
|
+
if (kind === ts.SyntaxKind.QuestionQuestionToken)
|
|
558
|
+
return 'nullish';
|
|
559
|
+
return null;
|
|
560
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
/**
|
|
3
|
+
* The generic source functions a value expression is a CHOICE among.
|
|
4
|
+
*
|
|
5
|
+
* `const setOriginal = flags & NoOriginalNode ? identity : setOriginalNode`
|
|
6
|
+
* (TypeScript's `nodeFactory.ts`) holds one of two generic functions, decided
|
|
7
|
+
* at runtime. The checker's declared type for the binding is NOT that choice:
|
|
8
|
+
* `typeof identity` is a subtype of `typeof setOriginalNode` (fewer parameters,
|
|
9
|
+
* an unconstrained `T`), so union subtype reduction leaves `typeof
|
|
10
|
+
* setOriginalNode` alone, and every call through the binding resolves to
|
|
11
|
+
* `setOriginalNode`'s own signature -- run as an exact call to it, the
|
|
12
|
+
* program silently sets `original` on the branch that chose `identity`.
|
|
13
|
+
*
|
|
14
|
+
* The choice is a fact about the VALUE's flow, read here from the initializer's
|
|
15
|
+
* own arms: a conditional, a `||`/`??`, parentheses and erasures, down to
|
|
16
|
+
* names of module-level generic function declarations with a body (the same
|
|
17
|
+
* predicate `structural.ts`'s `genericSourceFunctionOf` states for a single
|
|
18
|
+
* member's type). A `const` with no annotation holds exactly its initializer,
|
|
19
|
+
* so a name resolving to one is the same choice; anything else -- a `let`, an
|
|
20
|
+
* annotation, a non-generic arm, a nested closure -- is not, and answers
|
|
21
|
+
* `null`. Two or more DISTINCT members make a choice; one is the function.
|
|
22
|
+
*
|
|
23
|
+
* One rule, asked by every reader: `structural.ts` types the binding, its
|
|
24
|
+
* reads and the choice expression itself as the union of the members' open
|
|
25
|
+
* types (which derives to `generic-function-set`); `specialization.ts` mints
|
|
26
|
+
* every member's copy at each call through it; `producers/invocations.ts`
|
|
27
|
+
* publishes the `closed-family` target those copies form.
|
|
28
|
+
*/
|
|
29
|
+
export declare const genericFunctionChoiceMembersOf: (checker: ts.TypeChecker, node: ts.Node) => readonly ts.FunctionDeclaration[] | null;
|
|
30
|
+
/** The one member a name denotes, when it denotes a generic source function outright. */
|
|
31
|
+
export declare const genericSourceFunctionDeclarationOf: (declaration: ts.Declaration) => ts.FunctionDeclaration | null;
|