@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,47 @@
|
|
|
1
|
+
import type { CallOperation } from '../../../ir/model.js';
|
|
2
|
+
import type { Representation } from '../../../representation/model.js';
|
|
3
|
+
import { type EmitContext } from '../emit-context.js';
|
|
4
|
+
/**
|
|
5
|
+
* `%GeneratorPrototype%.next`/`.return`/`.throw` (ECMA-262 27.5.1.2-27.5.1.4)
|
|
6
|
+
* off a generator value, which this backend carries as the cursor
|
|
7
|
+
* `gea::Iterator<T, TReturn, TNext>` -- one type that is both the coroutine
|
|
8
|
+
* and the iterator over it (`gea_runtime.h`'s own rationale:
|
|
9
|
+
* `%GeneratorPrototype%[@@iterator]` returns `this`).
|
|
10
|
+
*
|
|
11
|
+
* The call is fused with its deferred `[[Get]]` exactly as a Promise method
|
|
12
|
+
* is (`emit-prototype-invoke.ts`'s header), and its result is the value the
|
|
13
|
+
* CHECKER typed the call with: `IteratorResult<T, TReturn>`, which is
|
|
14
|
+
* `IteratorYieldResult<T> | IteratorReturnResult<TReturn>` in `lib.es2015.iterable.d.ts`
|
|
15
|
+
* and derives to a tagged union of two records. Nothing here invents a
|
|
16
|
+
* `{value, done}` carrier of its own -- `CreateIterResultObject` (7.4.14) is
|
|
17
|
+
* rendered by constructing whichever of the two records the checker already
|
|
18
|
+
* laid out and tagging the union with it, so every later `.value`/`.done`
|
|
19
|
+
* read goes through the same union-member path any other two-record union
|
|
20
|
+
* takes.
|
|
21
|
+
*
|
|
22
|
+
* Which arm is which is read off the layout rather than off the union's arm
|
|
23
|
+
* order (which is the checker's type-id order, and differs from program to
|
|
24
|
+
* program): the return arm is the one whose `done` is REQUIRED (declared
|
|
25
|
+
* `done: true`), the yield arm the one whose `done` is optional (declared
|
|
26
|
+
* `done?: false`). A result with any other shape is refused by name.
|
|
27
|
+
*
|
|
28
|
+
* `.return`/`.throw` are claimed ONLY for a generator-sourced cursor
|
|
29
|
+
* (`carrier.source === 'generator'`, `representation/model.ts`'s `iterator`
|
|
30
|
+
* kind): the four fixed-storage walks (`Array`/`Set`/`string`/`Map`) and the
|
|
31
|
+
* `for`-`in` enumerator publish the identical `iterator(E)` carrier but their
|
|
32
|
+
* real `%ArrayIteratorPrototype%` and siblings define neither method at all
|
|
33
|
+
* (ECMA-262 27.1.2), so a `'sequence'`-sourced receiver refuses both by name
|
|
34
|
+
* rather than certifying a method its real prototype does not have.
|
|
35
|
+
*
|
|
36
|
+
* What a `'sequence'` cursor's `next` (and a valueless generator's `next`)
|
|
37
|
+
* still does not carry is refused by name too, never approximated: a
|
|
38
|
+
* `next(v)`/`.return(v)`'s own value, or a completion value, that resolved to
|
|
39
|
+
* no native carrier (`representation/derive.ts` collapses an unresolved/
|
|
40
|
+
* dynamic `TReturn`/`TNext` to `undefined` on purpose, rather than boxing it)
|
|
41
|
+
* has no storage to read or fill, and the read/call that needs one refuses
|
|
42
|
+
* here instead.
|
|
43
|
+
*/
|
|
44
|
+
export declare const iteratorPrototypeMethods: ReadonlySet<string>;
|
|
45
|
+
export declare const iteratorCallText: (ctx: EmitContext, member: string, receiverText: string, carrier: Extract<Representation, {
|
|
46
|
+
kind: "iterator";
|
|
47
|
+
}> | undefined, operation: CallOperation) => string;
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import { thrownValueCarrier } from '../../../ir/lower-exceptions.js';
|
|
2
|
+
import { representationKey } from '../../../representation/model.js';
|
|
3
|
+
import { createCppEmitBlockedError, operandText } from '../emit-context.js';
|
|
4
|
+
import { alignedValueText } from '../emit-narrowing.js';
|
|
5
|
+
import { memberAccessOperator } from '../emit-carrier-members.js';
|
|
6
|
+
import { recordFieldsOfShape } from '../records.js';
|
|
7
|
+
import { cppRecordFieldName, cppRecordFieldPresenceName, cppRecordStructName, cppTypeOf } from '../types.js';
|
|
8
|
+
/**
|
|
9
|
+
* `%GeneratorPrototype%.next`/`.return`/`.throw` (ECMA-262 27.5.1.2-27.5.1.4)
|
|
10
|
+
* off a generator value, which this backend carries as the cursor
|
|
11
|
+
* `gea::Iterator<T, TReturn, TNext>` -- one type that is both the coroutine
|
|
12
|
+
* and the iterator over it (`gea_runtime.h`'s own rationale:
|
|
13
|
+
* `%GeneratorPrototype%[@@iterator]` returns `this`).
|
|
14
|
+
*
|
|
15
|
+
* The call is fused with its deferred `[[Get]]` exactly as a Promise method
|
|
16
|
+
* is (`emit-prototype-invoke.ts`'s header), and its result is the value the
|
|
17
|
+
* CHECKER typed the call with: `IteratorResult<T, TReturn>`, which is
|
|
18
|
+
* `IteratorYieldResult<T> | IteratorReturnResult<TReturn>` in `lib.es2015.iterable.d.ts`
|
|
19
|
+
* and derives to a tagged union of two records. Nothing here invents a
|
|
20
|
+
* `{value, done}` carrier of its own -- `CreateIterResultObject` (7.4.14) is
|
|
21
|
+
* rendered by constructing whichever of the two records the checker already
|
|
22
|
+
* laid out and tagging the union with it, so every later `.value`/`.done`
|
|
23
|
+
* read goes through the same union-member path any other two-record union
|
|
24
|
+
* takes.
|
|
25
|
+
*
|
|
26
|
+
* Which arm is which is read off the layout rather than off the union's arm
|
|
27
|
+
* order (which is the checker's type-id order, and differs from program to
|
|
28
|
+
* program): the return arm is the one whose `done` is REQUIRED (declared
|
|
29
|
+
* `done: true`), the yield arm the one whose `done` is optional (declared
|
|
30
|
+
* `done?: false`). A result with any other shape is refused by name.
|
|
31
|
+
*
|
|
32
|
+
* `.return`/`.throw` are claimed ONLY for a generator-sourced cursor
|
|
33
|
+
* (`carrier.source === 'generator'`, `representation/model.ts`'s `iterator`
|
|
34
|
+
* kind): the four fixed-storage walks (`Array`/`Set`/`string`/`Map`) and the
|
|
35
|
+
* `for`-`in` enumerator publish the identical `iterator(E)` carrier but their
|
|
36
|
+
* real `%ArrayIteratorPrototype%` and siblings define neither method at all
|
|
37
|
+
* (ECMA-262 27.1.2), so a `'sequence'`-sourced receiver refuses both by name
|
|
38
|
+
* rather than certifying a method its real prototype does not have.
|
|
39
|
+
*
|
|
40
|
+
* What a `'sequence'` cursor's `next` (and a valueless generator's `next`)
|
|
41
|
+
* still does not carry is refused by name too, never approximated: a
|
|
42
|
+
* `next(v)`/`.return(v)`'s own value, or a completion value, that resolved to
|
|
43
|
+
* no native carrier (`representation/derive.ts` collapses an unresolved/
|
|
44
|
+
* dynamic `TReturn`/`TNext` to `undefined` on purpose, rather than boxing it)
|
|
45
|
+
* has no storage to read or fill, and the read/call that needs one refuses
|
|
46
|
+
* here instead.
|
|
47
|
+
*/
|
|
48
|
+
export const iteratorPrototypeMethods = new Set(['next', 'return', 'throw']);
|
|
49
|
+
const isRecordArm = (representation) => representation.kind === 'record' || representation.kind === 'native-record-ref';
|
|
50
|
+
/** The arm's own declared fields, or `null` for a host-named struct this compiler did not lay out. */
|
|
51
|
+
const armFieldsOf = (ctx, arm) => arm.kind === 'record' ? arm.fields : arm.native === null ? recordFieldsOfShape(ctx.deriver, arm.shapeId) : null;
|
|
52
|
+
const constructionText = (arm) => {
|
|
53
|
+
switch (arm.ownership) {
|
|
54
|
+
case 'owned':
|
|
55
|
+
return `${cppTypeOf(arm)}{}`;
|
|
56
|
+
case 'shared-refcount':
|
|
57
|
+
return `gea::makeRef<${cppRecordStructName(arm.shapeId)}>()`;
|
|
58
|
+
case 'borrowed':
|
|
59
|
+
throw createCppEmitBlockedError(`physical-cpp-type:${representationKey(arm)}`, 'an IteratorResult arm carries ownership "borrowed", and a fresh iteration result has no other frame to borrow it from');
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
const isValueless = (representation) => representation.kind === 'void' || representation.kind === 'undefined';
|
|
63
|
+
/** `member = <value>;` plus the presence bit an optional field keeps beside its storage (`emitFieldInits`'s own rule). */
|
|
64
|
+
const fieldStoreText = (accessor, field, valueText) => `gea_result${accessor}${cppRecordFieldName(field.key)} = ${valueText}; ` +
|
|
65
|
+
(field.required ? '' : `gea_result${accessor}${cppRecordFieldPresenceName(field.key)} = true; `);
|
|
66
|
+
/**
|
|
67
|
+
* A padded `undefined` (an omitted optional argument the lowering fills in)
|
|
68
|
+
* sends nothing -- `next(undefined)` and `next()` are one `GeneratorResume`
|
|
69
|
+
* (27.5.1.2 passes the value through unchanged, and the first resumption
|
|
70
|
+
* discards it) -- and so is the EMPTY rest pack `next(...[value]: [] |
|
|
71
|
+
* [TNext])`'s variadic convention makes `ir/lower-operands.ts`'s
|
|
72
|
+
* `packRestArguments` build for a bare `next()`: withheld whole
|
|
73
|
+
* (`ctx.pendingPacks`), it lists its element expressions, and none is no
|
|
74
|
+
* value sent.
|
|
75
|
+
*/
|
|
76
|
+
const sendsNothing = (ctx, argument) => argument.representation.kind === 'undefined' ||
|
|
77
|
+
argument.representation.kind === 'void' ||
|
|
78
|
+
(argument.representation.kind === 'array-object' && ctx.pendingPacks.get(argument.value)?.elements.length === 0);
|
|
79
|
+
/**
|
|
80
|
+
* Builds `IteratorYieldResult<T> | IteratorReturnResult<TReturn>` from
|
|
81
|
+
* whichever `stepText` expression already advanced (or injected an abrupt
|
|
82
|
+
* completion into) the cursor -- shared by `next`, `return` and `throw`,
|
|
83
|
+
* which differ only in how they got the frame moving, never in how the
|
|
84
|
+
* record that comes back is read off it.
|
|
85
|
+
*/
|
|
86
|
+
const iteratorResultText = (ctx, receiverText, carrier, result, stepText) => {
|
|
87
|
+
if (result.representation.kind !== 'tagged-union') {
|
|
88
|
+
throw createCppEmitBlockedError(`runtime-helper:protocol:result:${representationKey(carrier)}`, `publishes "${representationKey(result.representation)}", but ` +
|
|
89
|
+
'IteratorResult<T, TReturn> is a union of two records and this file renders exactly that');
|
|
90
|
+
}
|
|
91
|
+
const union = result.representation;
|
|
92
|
+
const arms = union.arms.map((arm, index) => {
|
|
93
|
+
const value = arm.value;
|
|
94
|
+
if (!isRecordArm(value))
|
|
95
|
+
return null;
|
|
96
|
+
const fields = armFieldsOf(ctx, value);
|
|
97
|
+
const done = fields?.find((field) => field.key === 'done');
|
|
98
|
+
if (fields === null || done === undefined)
|
|
99
|
+
return null;
|
|
100
|
+
return { index, value, done, valueField: fields.find((field) => field.key === 'value') ?? null };
|
|
101
|
+
});
|
|
102
|
+
const returnArm = arms.find((arm) => arm !== null && arm.done.required) ?? null;
|
|
103
|
+
const yieldArm = arms.find((arm) => arm !== null && !arm.done.required) ?? null;
|
|
104
|
+
if (union.arms.length !== 2 || returnArm === null || yieldArm === null) {
|
|
105
|
+
throw createCppEmitBlockedError(`runtime-helper:protocol:result:${representationKey(carrier)}`, `publishes "${representationKey(union)}", which is not IteratorYieldResult<T> | IteratorReturnResult<TReturn> ` +
|
|
106
|
+
'(two records, told apart by a required `done: true` against an optional `done?: false`)');
|
|
107
|
+
}
|
|
108
|
+
// The return arm's `value` field is the generator's COMPLETION value,
|
|
109
|
+
// read off the cursor's own `takeCompletionValue()` -- never off
|
|
110
|
+
// whatever was passed to `next`/`return`, because a `finally` block that
|
|
111
|
+
// runs during an abrupt completion can override it with its own `return`
|
|
112
|
+
// (ECMA-262 27.5.3.3's own note), and `promise_type::completion_value` is
|
|
113
|
+
// exactly the slot both roads write through (`gea_runtime.h`).
|
|
114
|
+
const completionText = returnArm.valueField === null || isValueless(returnArm.valueField.value)
|
|
115
|
+
? null
|
|
116
|
+
: (() => {
|
|
117
|
+
if (isValueless(carrier.completion)) {
|
|
118
|
+
throw createCppEmitBlockedError(`conversion:${representationKey(carrier.completion)}->${representationKey(returnArm.valueField.value)}`, `a generator's completion value is carried as "${representationKey(returnArm.valueField.value)}", and this generator's own ` +
|
|
119
|
+
'completion channel is "undefined" -- either TReturn never resolved to a native carrier, or this generator is not ' +
|
|
120
|
+
'annotated as one -- so the cursor has no storage to read one back from');
|
|
121
|
+
}
|
|
122
|
+
const text = alignedValueText(ctx, 'prototype/emit-prototype-iterator.ts:155', carrier.completion, returnArm.valueField.value, `${receiverText}.takeCompletionValue()`);
|
|
123
|
+
if (text === null) {
|
|
124
|
+
throw createCppEmitBlockedError(`conversion:${representationKey(carrier.completion)}->${representationKey(returnArm.valueField.value)}`, `the cursor completes with "${representationKey(carrier.completion)}" while the IteratorResult "value" field carries ` +
|
|
125
|
+
`"${representationKey(returnArm.valueField.value)}", and no installed conversion reconciles them`);
|
|
126
|
+
}
|
|
127
|
+
return text;
|
|
128
|
+
})();
|
|
129
|
+
const trueText = alignedValueText(ctx, 'prototype/emit-prototype-iterator.ts:165', { kind: 'scalar', domain: 'boolean' }, returnArm.done.value, 'true');
|
|
130
|
+
const falseText = alignedValueText(ctx, 'prototype/emit-prototype-iterator.ts:166', { kind: 'scalar', domain: 'boolean' }, yieldArm.done.value, 'false');
|
|
131
|
+
if (trueText === null || falseText === null) {
|
|
132
|
+
throw createCppEmitBlockedError(`conversion:scalar(boolean)->${representationKey((trueText === null ? returnArm : yieldArm).done.value)}`, `an IteratorResult "done" field carries "${representationKey((trueText === null ? returnArm : yieldArm).done.value)}", ` +
|
|
133
|
+
'and no installed conversion writes a boolean into it');
|
|
134
|
+
}
|
|
135
|
+
const yieldValueText = yieldArm.valueField === null || isValueless(yieldArm.valueField.value)
|
|
136
|
+
? null
|
|
137
|
+
: alignedValueText(ctx, 'prototype/emit-prototype-iterator.ts:177', carrier.element, yieldArm.valueField.value, 'gea_next');
|
|
138
|
+
if (yieldArm.valueField !== null && !isValueless(yieldArm.valueField.value) && yieldValueText === null) {
|
|
139
|
+
throw createCppEmitBlockedError(`conversion:${representationKey(carrier.element)}->${representationKey(yieldArm.valueField.value)}`, `the cursor yields "${representationKey(carrier.element)}" while the IteratorResult "value" field carries ` +
|
|
140
|
+
`"${representationKey(yieldArm.valueField.value)}", and no installed conversion reconciles them`);
|
|
141
|
+
}
|
|
142
|
+
const unionType = cppTypeOf(union);
|
|
143
|
+
const returnAccessor = memberAccessOperator(returnArm.value.ownership);
|
|
144
|
+
const yieldAccessor = memberAccessOperator(yieldArm.value.ownership);
|
|
145
|
+
const returnBranch = `auto gea_result = ${constructionText(returnArm.value)}; ${fieldStoreText(returnAccessor, returnArm.done, trueText)}` +
|
|
146
|
+
(completionText === null || returnArm.valueField === null ? '' : fieldStoreText(returnAccessor, returnArm.valueField, completionText)) +
|
|
147
|
+
`return ${unionType}::ofArm<${returnArm.index}>(gea_result);`;
|
|
148
|
+
const yieldBranch = `auto gea_result = ${constructionText(yieldArm.value)}; ${fieldStoreText(yieldAccessor, yieldArm.done, falseText)}` +
|
|
149
|
+
(yieldValueText === null || yieldArm.valueField === null ? '' : fieldStoreText(yieldAccessor, yieldArm.valueField, yieldValueText)) +
|
|
150
|
+
`return ${unionType}::ofArm<${yieldArm.index}>(gea_result);`;
|
|
151
|
+
return (`([&]() -> ${unionType} { auto gea_next = ${stepText}; (void)gea_next; ` +
|
|
152
|
+
`if (${receiverText}.done()) { ${returnBranch} } ${yieldBranch} })()`);
|
|
153
|
+
};
|
|
154
|
+
/**
|
|
155
|
+
* `iter.next(v)` (member already checked to be `"next"`). Builds the step
|
|
156
|
+
* text -- an ordinary `arrayNext()` when nothing was sent, `resumeWith(v)`
|
|
157
|
+
* once converted into the cursor's own resume carrier -- and, only when the
|
|
158
|
+
* call's own result is actually read, the `IteratorResult` on top of it.
|
|
159
|
+
*/
|
|
160
|
+
const nextCallText = (ctx, receiverText, carrier, operation) => {
|
|
161
|
+
const sent = operation.arguments.filter((argument) => !sendsNothing(ctx, argument));
|
|
162
|
+
const stepText = sent.length === 0
|
|
163
|
+
? `${receiverText}.arrayNext()`
|
|
164
|
+
: (() => {
|
|
165
|
+
if (isValueless(carrier.resume)) {
|
|
166
|
+
throw createCppEmitBlockedError(`runtime-helper:protocol:next:${representationKey(carrier)}`, "a generator's next(v) sends a value back into the suspended yield, and this generator's own resume channel is " +
|
|
167
|
+
'"undefined" -- either TNext never resolved to a native carrier, or this generator is not annotated as one -- so the ' +
|
|
168
|
+
`cursor has no storage to send it through; the call carries ` +
|
|
169
|
+
`${operation.arguments.map((argument) => `"${representationKey(argument.representation)}"`).join(', ')}`);
|
|
170
|
+
}
|
|
171
|
+
if (sent.length !== 1) {
|
|
172
|
+
throw createCppEmitBlockedError('call-abi:next', `next(v) sends more than one value operand (${sent.length}), which is not valid syntax to model`);
|
|
173
|
+
}
|
|
174
|
+
const argument = sent[0];
|
|
175
|
+
const text = alignedValueText(ctx, 'prototype/emit-prototype-iterator.ts:235', argument.representation, carrier.resume, operandText(ctx, argument));
|
|
176
|
+
if (text === null) {
|
|
177
|
+
throw createCppEmitBlockedError(`conversion:${representationKey(argument.representation)}->${representationKey(carrier.resume)}`, `sends "${representationKey(argument.representation)}" into a resume channel carried as "${representationKey(carrier.resume)}", ` +
|
|
178
|
+
'and no installed conversion reconciles them');
|
|
179
|
+
}
|
|
180
|
+
return `${receiverText}.resumeWith(${text})`;
|
|
181
|
+
})();
|
|
182
|
+
return operation.result === null ? stepText : iteratorResultText(ctx, receiverText, carrier, operation.result, stepText);
|
|
183
|
+
};
|
|
184
|
+
/**
|
|
185
|
+
* `iter.return(v)`/`iter.throw(e)`, claimed only for `carrier.source ===
|
|
186
|
+
* 'generator'` -- see this file's own header comment for why. Both read back
|
|
187
|
+
* through the identical `IteratorResult` construction `next` uses: ECMA-262
|
|
188
|
+
* 27.5.3.3/27.5.3.4 both resume the frame like an ordinary step, they just
|
|
189
|
+
* inject an ABRUPT completion at the paused `yield` instead of a normal one
|
|
190
|
+
* (`gea_runtime.h`'s `resumeReturn`/`resumeThrow`), and a `finally` in scope
|
|
191
|
+
* can still turn either into an ordinary yield (`{value, done: false}`) --
|
|
192
|
+
* exactly the shape `iteratorResultText` already renders generically.
|
|
193
|
+
*/
|
|
194
|
+
const abruptCallText = (ctx, member, receiverText, carrier, operation) => {
|
|
195
|
+
if (carrier.source !== 'generator') {
|
|
196
|
+
throw createCppEmitBlockedError(`runtime-helper:protocol:${member}:${representationKey(carrier)}`, `"${member}" was recorded as a deferred %GeneratorPrototype% read over a "${carrier.source}"-sourced cursor -- only a real ` +
|
|
197
|
+
`generator's iterator has a %GeneratorPrototype%.${member}; the four fixed-storage walks and the \`for\`-in enumerator do not`);
|
|
198
|
+
}
|
|
199
|
+
const argument = operation.arguments[0];
|
|
200
|
+
if (member === 'throw') {
|
|
201
|
+
if (!argument) {
|
|
202
|
+
throw createCppEmitBlockedError('call-abi:throw', 'throw(e) carries no argument to inject as the abrupt completion');
|
|
203
|
+
}
|
|
204
|
+
// The coroutine body's own `catch` clauses match by C++ type, and every
|
|
205
|
+
// `catch (e)` this backend can ever emit binds `e` as `thrownValueCarrier`
|
|
206
|
+
// -- see `lower.ts`'s ordinary `throw` terminator, which converts into the
|
|
207
|
+
// identical carrier before its own native `throw` for the identical
|
|
208
|
+
// reason. Injecting the raw, unboxed argument here throws a type no
|
|
209
|
+
// `catch` inside the generator was ever written to match, so ECMA-262's
|
|
210
|
+
// "the generator catches its own injected exception" silently became "the
|
|
211
|
+
// exception escapes the coroutine and the process aborts".
|
|
212
|
+
const text = alignedValueText(ctx, 'prototype/emit-prototype-iterator.ts:285', argument.representation, thrownValueCarrier, operandText(ctx, argument));
|
|
213
|
+
if (text === null) {
|
|
214
|
+
throw createCppEmitBlockedError(`conversion:${representationKey(argument.representation)}->${representationKey(thrownValueCarrier)}`, `throw(e) sends "${representationKey(argument.representation)}" into the thrown-value carrier, and no installed conversion reconciles them`);
|
|
215
|
+
}
|
|
216
|
+
return `${receiverText}.resumeThrow(std::make_exception_ptr(${text}))`;
|
|
217
|
+
}
|
|
218
|
+
// `return(v)`'s completion value is whatever this call site passed, not
|
|
219
|
+
// what the cursor's `completion` carrier declares elsewhere in the
|
|
220
|
+
// program -- but if THIS generator's completion channel never resolved to
|
|
221
|
+
// a native carrier, there is still no storage for it, and `v`'s own value
|
|
222
|
+
// (as opposed to its evaluation, which still has to happen for its
|
|
223
|
+
// effects) is discarded exactly as a valueless `return` terminator's own
|
|
224
|
+
// operand already is (`emit-return.ts`).
|
|
225
|
+
if (isValueless(carrier.completion)) {
|
|
226
|
+
const discard = argument && !sendsNothing(ctx, argument) ? `(void)(${operandText(ctx, argument)}), ` : '';
|
|
227
|
+
return `${discard}${receiverText}.resumeReturn({})`;
|
|
228
|
+
}
|
|
229
|
+
if (!argument) {
|
|
230
|
+
throw createCppEmitBlockedError('call-abi:return', "return(v) carries no argument, but this generator's completion channel carries a real value");
|
|
231
|
+
}
|
|
232
|
+
const text = alignedValueText(ctx, 'prototype/emit-prototype-iterator.ts:308', argument.representation, carrier.completion, operandText(ctx, argument));
|
|
233
|
+
if (text === null) {
|
|
234
|
+
throw createCppEmitBlockedError(`conversion:${representationKey(argument.representation)}->${representationKey(carrier.completion)}`, `return(v) sends "${representationKey(argument.representation)}" into a completion channel carried as "${representationKey(carrier.completion)}", ` +
|
|
235
|
+
'and no installed conversion reconciles them');
|
|
236
|
+
}
|
|
237
|
+
return `${receiverText}.resumeReturn(${text})`;
|
|
238
|
+
};
|
|
239
|
+
export const iteratorCallText = (ctx, member, receiverText, carrier, operation) => {
|
|
240
|
+
if (!iteratorPrototypeMethods.has(member)) {
|
|
241
|
+
throw createCppEmitBlockedError('property-access:iterator:get:false', `"${member}" was recorded as a deferred %GeneratorPrototype% read but this file renders no call for it`);
|
|
242
|
+
}
|
|
243
|
+
if (carrier === undefined) {
|
|
244
|
+
throw createCppEmitBlockedError(`host-invocation:GeneratorPrototype.${member}`, `"${member}" was recorded as a deferred iterator read with no cursor carrier to render it off`);
|
|
245
|
+
}
|
|
246
|
+
if (member === 'next')
|
|
247
|
+
return nextCallText(ctx, receiverText, carrier, operation);
|
|
248
|
+
const stepText = abruptCallText(ctx, member, receiverText, carrier, operation);
|
|
249
|
+
return operation.result === null ? stepText : iteratorResultText(ctx, receiverText, carrier, operation.result, stepText);
|
|
250
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { type Representation } from '../../../representation/model.js';
|
|
2
|
+
import { type ConversionSite } from '../emit-narrowing.js';
|
|
3
|
+
/**
|
|
4
|
+
* Resolving a value the way `await` and `Promise.all` both do.
|
|
5
|
+
*
|
|
6
|
+
* ECMA-262 27.2.4.7.1 `PromiseResolve` is the one operation behind both: a
|
|
7
|
+
* thenable is adopted, and anything else resolves to ITSELF. `Awaited<T>` is
|
|
8
|
+
* TypeScript's name for the same fact, which is why `await 1` is `1`.
|
|
9
|
+
*
|
|
10
|
+
* `gea::Promise<V>` is a settled-value box with no job queue (see its own doc
|
|
11
|
+
* comment in `runtime/gea_runtime.h`), so adoption is reading the value now --
|
|
12
|
+
* `.awaited()` -- rather than a suspension this substrate has no coroutine
|
|
13
|
+
* primitive for.
|
|
14
|
+
*
|
|
15
|
+
* The case this exists for is the THIRD one, which neither half of that
|
|
16
|
+
* sentence covers on its own: a union of both. `string | Promise<string>` is
|
|
17
|
+
* what every `Promise.all` argument and every conditionally-async helper is
|
|
18
|
+
* made of (hono's `utils/html.ts` is exactly that), and it is neither "a
|
|
19
|
+
* promise" nor "not a promise" -- it is a discriminant test away from either.
|
|
20
|
+
* `emitAwait` used to ask only `kind === 'promise'` and pass such a union
|
|
21
|
+
* through untouched, handing a `TaggedUnion<...>` to a consumer that had been
|
|
22
|
+
* told it would get the payload.
|
|
23
|
+
*
|
|
24
|
+
* `null` for a carrier with nothing to resolve, which is the caller's signal
|
|
25
|
+
* that the value is already its own resolution and needs no text at all.
|
|
26
|
+
*
|
|
27
|
+
* `ctx`/`site` are the conversion census's site: the optional shape below
|
|
28
|
+
* stores an absence into the result cell, and every cross-carrier store goes
|
|
29
|
+
* through `alignedValueText` so the census is asked and printer drift is
|
|
30
|
+
* recorded -- calling the recipe printer's renderer directly would answer the
|
|
31
|
+
* spelling without recording that the question was put (the architecture
|
|
32
|
+
* gate counts exactly that).
|
|
33
|
+
*/
|
|
34
|
+
export declare const awaitedText: (ctx: ConversionSite, site: string, carrier: Representation, text: string, target?: Representation | null) => string | null;
|
|
35
|
+
/**
|
|
36
|
+
* What `awaitedText` resolves a carrier TO -- the carrier's `Awaited<T>`.
|
|
37
|
+
*
|
|
38
|
+
* Stated beside the render rather than derived by a caller, so the two cannot
|
|
39
|
+
* disagree about which arms survive. A union of promises over one payload
|
|
40
|
+
* resolves to that payload; a union mixing a payload with a promise of the
|
|
41
|
+
* same payload resolves to the payload as well, which is the ordinary case.
|
|
42
|
+
* `null` when the arms do not agree, which is a real hole rather than a
|
|
43
|
+
* missing recipe: `string | Promise<number>` resolves to `string | number`,
|
|
44
|
+
* a union this cannot mint without the census's own arm ordering.
|
|
45
|
+
*/
|
|
46
|
+
export declare const awaitedRepresentation: (carrier: Representation) => Representation | null;
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { representationKey } from '../../../representation/model.js';
|
|
2
|
+
import { optionalOf } from '../../../representation/optional.js';
|
|
3
|
+
import { alignedValueText } from '../emit-narrowing.js';
|
|
4
|
+
import { cppConstantLiteral } from '../types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Resolving a value the way `await` and `Promise.all` both do.
|
|
7
|
+
*
|
|
8
|
+
* ECMA-262 27.2.4.7.1 `PromiseResolve` is the one operation behind both: a
|
|
9
|
+
* thenable is adopted, and anything else resolves to ITSELF. `Awaited<T>` is
|
|
10
|
+
* TypeScript's name for the same fact, which is why `await 1` is `1`.
|
|
11
|
+
*
|
|
12
|
+
* `gea::Promise<V>` is a settled-value box with no job queue (see its own doc
|
|
13
|
+
* comment in `runtime/gea_runtime.h`), so adoption is reading the value now --
|
|
14
|
+
* `.awaited()` -- rather than a suspension this substrate has no coroutine
|
|
15
|
+
* primitive for.
|
|
16
|
+
*
|
|
17
|
+
* The case this exists for is the THIRD one, which neither half of that
|
|
18
|
+
* sentence covers on its own: a union of both. `string | Promise<string>` is
|
|
19
|
+
* what every `Promise.all` argument and every conditionally-async helper is
|
|
20
|
+
* made of (hono's `utils/html.ts` is exactly that), and it is neither "a
|
|
21
|
+
* promise" nor "not a promise" -- it is a discriminant test away from either.
|
|
22
|
+
* `emitAwait` used to ask only `kind === 'promise'` and pass such a union
|
|
23
|
+
* through untouched, handing a `TaggedUnion<...>` to a consumer that had been
|
|
24
|
+
* told it would get the payload.
|
|
25
|
+
*
|
|
26
|
+
* `null` for a carrier with nothing to resolve, which is the caller's signal
|
|
27
|
+
* that the value is already its own resolution and needs no text at all.
|
|
28
|
+
*
|
|
29
|
+
* `ctx`/`site` are the conversion census's site: the optional shape below
|
|
30
|
+
* stores an absence into the result cell, and every cross-carrier store goes
|
|
31
|
+
* through `alignedValueText` so the census is asked and printer drift is
|
|
32
|
+
* recorded -- calling the recipe printer's renderer directly would answer the
|
|
33
|
+
* spelling without recording that the question was put (the architecture
|
|
34
|
+
* gate counts exactly that).
|
|
35
|
+
*/
|
|
36
|
+
export const awaitedText = (ctx, site, carrier, text, target = null) => {
|
|
37
|
+
if (carrier.kind === 'promise')
|
|
38
|
+
return `${text}.awaited()`;
|
|
39
|
+
if (carrier.kind === 'optional')
|
|
40
|
+
return awaitedOptionalText(ctx, site, carrier, text, target);
|
|
41
|
+
if (carrier.kind !== 'tagged-union')
|
|
42
|
+
return null;
|
|
43
|
+
if (!carrier.arms.some((arm) => arm.value.kind === 'promise'))
|
|
44
|
+
return null;
|
|
45
|
+
// Every arm is accounted for, not just the promise ones: an arm that is not
|
|
46
|
+
// a thenable resolves to itself, so it contributes its own payload. The last
|
|
47
|
+
// arm is the fall-through and is never tested, because the union holds one
|
|
48
|
+
// of its arms by construction and a test with no `else` has nothing to
|
|
49
|
+
// answer -- the same shape `taggedUnionArmText` (emit-narrowing.ts) uses.
|
|
50
|
+
const armTexts = carrier.arms.map((arm, index) => arm.value.kind === 'promise' ? `${text}.get<${index}>().awaited()` : `${text}.get<${index}>()`);
|
|
51
|
+
const last = armTexts[armTexts.length - 1];
|
|
52
|
+
if (last === undefined)
|
|
53
|
+
return null;
|
|
54
|
+
let chain = last;
|
|
55
|
+
for (let index = armTexts.length - 2; index >= 0; index -= 1) {
|
|
56
|
+
chain = `${text}.is<${index}>() ? ${armTexts[index]} : (${chain})`;
|
|
57
|
+
}
|
|
58
|
+
return `(${chain})`;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* The FOURTH shape: a thenable that may also be ABSENT.
|
|
62
|
+
*
|
|
63
|
+
* `PromiseResolve` resolves a non-thenable to itself, and `undefined` is a
|
|
64
|
+
* non-thenable, so `await (Promise<T> | undefined)` is `T | undefined` -- and
|
|
65
|
+
* the carrier for such a value is an `optional` WRAPPER around the thing that
|
|
66
|
+
* may be a promise, never a promise or a union of one. Asking only the three
|
|
67
|
+
* kinds above therefore passed it through untouched, and the result cell was
|
|
68
|
+
* then told it held the payload while it was handed the wrapper: five of the
|
|
69
|
+
* @hono/node-server stores clang refused were exactly that
|
|
70
|
+
* (`responseViaCache`'s `await writeFromReadableStream(...)?.catch(...)`,
|
|
71
|
+
* `Optional<Promise<undefined>>`, and `responseViaResponseObject`'s
|
|
72
|
+
* `await options.errorHandler(err)`, an optional over a union).
|
|
73
|
+
*
|
|
74
|
+
* The presence test is the resolution: present resolves the payload by the
|
|
75
|
+
* same three rules one level in, absent resolves to the absence itself. Which
|
|
76
|
+
* absence is the wrapper's own tag -- `null` and `undefined` are distinguishable
|
|
77
|
+
* values and a later `=== null` on the result would answer the wrong one --
|
|
78
|
+
* and it is spelled by `cppConstantLiteral` and stored by `alignedValueText`,
|
|
79
|
+
* the same pair every other absence store already goes through, rather than a
|
|
80
|
+
* second hand-written empty-optional spelling that could drift from theirs.
|
|
81
|
+
*
|
|
82
|
+
* `target` is the cell the text must produce, and it is the IR's own result
|
|
83
|
+
* carrier rather than something derived here: the two arms resolve to
|
|
84
|
+
* DIFFERENT carriers whenever the payload is a union mixing `T` with
|
|
85
|
+
* `Promise<T | undefined>` (`CustomErrorHandler` is exactly that), so
|
|
86
|
+
* `awaitedRepresentation` cannot name one and only the consumer knows which
|
|
87
|
+
* cell is waiting. It falls back to that derivation for the caller that has no
|
|
88
|
+
* result cell of its own -- `Promise.all`, whose element lambda deduces its
|
|
89
|
+
* own return type.
|
|
90
|
+
*/
|
|
91
|
+
const awaitedOptionalText = (ctx, site, carrier, text, target) => {
|
|
92
|
+
const present = awaitedText(ctx, site, carrier.payload, `(*${text})`);
|
|
93
|
+
// Nothing under the wrapper is a thenable, so the optional is already its
|
|
94
|
+
// own resolution and needs no text -- the same answer the bare-carrier case
|
|
95
|
+
// gives, one level out.
|
|
96
|
+
if (present === null)
|
|
97
|
+
return null;
|
|
98
|
+
const resolved = target ?? awaitedRepresentation(carrier);
|
|
99
|
+
// A `void` result has no value to select between, so there is no ternary to
|
|
100
|
+
// build; and a payload whose arms resolve to carriers that disagree leaves
|
|
101
|
+
// the derivation with no name for the cell, which is a real hole rather than
|
|
102
|
+
// a spelling gap.
|
|
103
|
+
if (resolved === null || resolved.kind === 'void')
|
|
104
|
+
return null;
|
|
105
|
+
const absence = { kind: carrier.absence };
|
|
106
|
+
const absenceText = cppConstantLiteral(carrier.absence, carrier.absence, absence);
|
|
107
|
+
const absent = alignedValueText(ctx, site, absence, resolved, absenceText);
|
|
108
|
+
if (absent === null)
|
|
109
|
+
return null;
|
|
110
|
+
return `(${text}.has_value() ? ${present} : ${absent})`;
|
|
111
|
+
};
|
|
112
|
+
/**
|
|
113
|
+
* What `awaitedText` resolves a carrier TO -- the carrier's `Awaited<T>`.
|
|
114
|
+
*
|
|
115
|
+
* Stated beside the render rather than derived by a caller, so the two cannot
|
|
116
|
+
* disagree about which arms survive. A union of promises over one payload
|
|
117
|
+
* resolves to that payload; a union mixing a payload with a promise of the
|
|
118
|
+
* same payload resolves to the payload as well, which is the ordinary case.
|
|
119
|
+
* `null` when the arms do not agree, which is a real hole rather than a
|
|
120
|
+
* missing recipe: `string | Promise<number>` resolves to `string | number`,
|
|
121
|
+
* a union this cannot mint without the census's own arm ordering.
|
|
122
|
+
*/
|
|
123
|
+
export const awaitedRepresentation = (carrier) => {
|
|
124
|
+
if (carrier.kind === 'promise')
|
|
125
|
+
return carrier.value;
|
|
126
|
+
// An absence survives the resolution -- `PromiseResolve(undefined)` is
|
|
127
|
+
// `undefined` -- so the wrapper is kept over whatever the payload resolves
|
|
128
|
+
// to. Through `optionalOf` rather than a literal wrapper because the payload
|
|
129
|
+
// may already carry its own absence (a refcounted instance, a handle, a box,
|
|
130
|
+
// or a second optional), and stacking a flag onto one of those is the carrier
|
|
131
|
+
// the census forbids rather than a type this backend can spell.
|
|
132
|
+
if (carrier.kind === 'optional') {
|
|
133
|
+
const payload = awaitedRepresentation(carrier.payload);
|
|
134
|
+
return payload === null ? null : optionalOf(payload, carrier.absence);
|
|
135
|
+
}
|
|
136
|
+
if (carrier.kind !== 'tagged-union')
|
|
137
|
+
return carrier;
|
|
138
|
+
const resolved = carrier.arms.map((arm) => (arm.value.kind === 'promise' ? arm.value.value : arm.value));
|
|
139
|
+
const [first, ...rest] = resolved;
|
|
140
|
+
if (!first)
|
|
141
|
+
return null;
|
|
142
|
+
return rest.every((entry) => representationKey(entry) === representationKey(first)) ? first : null;
|
|
143
|
+
};
|