@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,20 @@
|
|
|
1
|
+
import type { RecordLayoutPolicy } from '../../representation/policies.js';
|
|
2
|
+
import type { Representation } from '../../representation/model.js';
|
|
3
|
+
import { type RecordViewPlan } from '../../conversion/record-view.js';
|
|
4
|
+
import { type ConversionSite } from './emit-narrowing.js';
|
|
5
|
+
export declare const viewPlanFor: (layouts: RecordLayoutPolicy, source: Representation, target: Representation) => RecordViewPlan | null;
|
|
6
|
+
/**
|
|
7
|
+
* A record viewed as another shape it satisfies: the census's plan
|
|
8
|
+
* (`conversion/record-view.ts`), rendered. The plan decides which pairs are
|
|
9
|
+
* views and how each field is reached; this spells it. `null` only where the
|
|
10
|
+
* plan promised what this context cannot spell -- a bound class method that
|
|
11
|
+
* captures, whose environment slot is spent on the receiver -- which
|
|
12
|
+
* `emitConvert` then refuses.
|
|
13
|
+
*
|
|
14
|
+
* `viewPlanFor` above is asked rather than `structuralRecordViewPlan`
|
|
15
|
+
* directly: `conversions.ts`'s `staticRecipe` already built this same plan
|
|
16
|
+
* to answer whether the census's `view:structural-record` capability exists
|
|
17
|
+
* at all, and this is that plan's one consumer, not a second derivation of
|
|
18
|
+
* it.
|
|
19
|
+
*/
|
|
20
|
+
export declare const structuralRecordViewText: (ctx: ConversionSite, source: Representation, target: Representation, text: string) => string | null;
|
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
import { representationKey } from '../../representation/model.js';
|
|
2
|
+
import { structuralRecordViewPlan } from '../../conversion/record-view.js';
|
|
3
|
+
import { classFamilyOverridesOf, virtualDispatchKey } from '../../projection/dispatch.js';
|
|
4
|
+
import { cppVirtualMemberName } from './virtual-methods.js';
|
|
5
|
+
import { classMemberOf } from './class-layout.js';
|
|
6
|
+
import { alignedValueText, boxedAssertionText, chainConverts, convertedValueText, dynamicCarrierBoxText, recastedUnionFromHomes, recastUnionArmText } from './emit-narrowing.js';
|
|
7
|
+
import { ownedRecordMaterializationText } from './emit-owned-record.js';
|
|
8
|
+
import { cppRecordIndexAttributesNameFor, cppRecordIndexSidecarName, cppRecordIndexSidecarNameFor } from './records.js';
|
|
9
|
+
import { cppAbiParameterType, cppBodyName, cppRecordFieldName, cppRecordFieldPresenceName, cppRecordStructName, cppResultTypeOf, cppTypeOf } from './types.js';
|
|
10
|
+
/**
|
|
11
|
+
* The renderer of the census's `view:structural-record` recipe
|
|
12
|
+
* (`conversion/record-view.ts`): a record or class instance viewed as another
|
|
13
|
+
* shape it satisfies. Its own module because both the chain's caller
|
|
14
|
+
* (`emit-narrowing.ts`'s `alignedValueText`, which renders whatever recipe
|
|
15
|
+
* the census names for a pair) and the call renderer (`emit-callable.ts`)
|
|
16
|
+
* reach it, and the plan is the one authority on which pairs are views.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* The structural-record-view plan, built once per `(layouts, source,
|
|
20
|
+
* target)` and shared between the two places that ask for it:
|
|
21
|
+
* `conversions.ts`'s `staticRecipe`, which tests whether a view exists at
|
|
22
|
+
* all while the conversion census derives the pair's capability, and
|
|
23
|
+
* `structuralRecordViewText` below, which spells the plan the census
|
|
24
|
+
* already built. Without this cache the two independently ran
|
|
25
|
+
* `structuralRecordViewPlan` -- decided the pair twice, the same defect this
|
|
26
|
+
* refactor removes for the chain's own steps (`conversionRecipeOf`'s memo).
|
|
27
|
+
*
|
|
28
|
+
* Lives here rather than in `conversions.ts`: this module already sits
|
|
29
|
+
* downstream of `emit-narrowing.ts` (for `chainConverts`) and
|
|
30
|
+
* `conversions.ts` already sits upstream of `emit-narrowing.ts`, so a
|
|
31
|
+
* `conversions.ts` import of this file adds one edge to an existing acyclic
|
|
32
|
+
* chain, while the reverse (this file importing from `conversions.ts`)
|
|
33
|
+
* would close `emit-narrowing.ts -> emit-record-view.ts -> conversions.ts
|
|
34
|
+
* -> emit-narrowing.ts` into a cycle through a THIRD file, worse than the
|
|
35
|
+
* two-file cycle `emit-narrowing.ts`/`emit-record-view.ts` already have.
|
|
36
|
+
*
|
|
37
|
+
* Keyed by object identity through nested `WeakMap`s, the same discipline
|
|
38
|
+
* `emit-narrowing.ts`'s `spellability` memo uses, rather than a string key
|
|
39
|
+
* built from `representationKey` -- so a compile's representations and its
|
|
40
|
+
* plans are never retained past the compile that created them, and two
|
|
41
|
+
* unrelated compiles sharing a coincidentally-equal key string can never
|
|
42
|
+
* collide. `layouts` is the outermost key rather than an assumed-identical
|
|
43
|
+
* singleton: the cache stays correct even if a caller ever passes a
|
|
44
|
+
* different policy for the same pair, at the cost of one more miss, not a
|
|
45
|
+
* wrong answer.
|
|
46
|
+
*/
|
|
47
|
+
const recordViewPlans = new WeakMap();
|
|
48
|
+
export const viewPlanFor = (layouts, source, target) => {
|
|
49
|
+
let bySource = recordViewPlans.get(layouts);
|
|
50
|
+
if (bySource === undefined) {
|
|
51
|
+
bySource = new WeakMap();
|
|
52
|
+
recordViewPlans.set(layouts, bySource);
|
|
53
|
+
}
|
|
54
|
+
let byTarget = bySource.get(source);
|
|
55
|
+
if (byTarget === undefined) {
|
|
56
|
+
byTarget = new WeakMap();
|
|
57
|
+
bySource.set(source, byTarget);
|
|
58
|
+
}
|
|
59
|
+
if (byTarget.has(target))
|
|
60
|
+
return byTarget.get(target) ?? null;
|
|
61
|
+
const plan = structuralRecordViewPlan(layouts, source, target, chainConverts);
|
|
62
|
+
byTarget.set(target, plan);
|
|
63
|
+
return plan;
|
|
64
|
+
};
|
|
65
|
+
const viewEnvironmentName = 'gea_view_env';
|
|
66
|
+
const viewSlotName = 'gea_view_slot';
|
|
67
|
+
const viewReceiverName = 'gea_view_this';
|
|
68
|
+
const viewArgumentName = (ordinal) => `gea_view_arg_${ordinal}`;
|
|
69
|
+
/**
|
|
70
|
+
* A class METHOD as the member a structural view of that class needs.
|
|
71
|
+
*
|
|
72
|
+
* A class's methods are not storage: they are free functions taking the
|
|
73
|
+
* instance as a leading formal, which is why `boundMethodValueRepresentation`
|
|
74
|
+
* (`class-properties/emit-class-properties.ts`) has to ADD a receiver to the
|
|
75
|
+
* carrier of a plain `obj.method` read. An interface that declares the same
|
|
76
|
+
* method declares STORAGE for it -- a `gea::CallableObject` member with no
|
|
77
|
+
* receiver in its frame -- so the two spellings of one method differ by
|
|
78
|
+
* exactly the receiver, and nothing in `gea::CallableObject`'s four converting
|
|
79
|
+
* constructors binds one.
|
|
80
|
+
*
|
|
81
|
+
* hono is where this stops the compile: `HonoBase.router` is declared
|
|
82
|
+
* `Router<[H, RouterRoute]>` -- an interface whose members are `name`, `add`
|
|
83
|
+
* and `match` -- and the constructor stores `new PatternRouter()` into it. The
|
|
84
|
+
* class provides `name` as a field and the other two as methods, so the view
|
|
85
|
+
* had two required members with no source field and refused, and the store
|
|
86
|
+
* fell through to a raw assignment clang rejected.
|
|
87
|
+
*
|
|
88
|
+
* The binding is `gea::CallableObject`'s own public `(Invoke, void*)`
|
|
89
|
+
* constructor over the receiver packed as the environment, which is the exact
|
|
90
|
+
* shape every closure this backend emits already uses -- `packEnvironment`
|
|
91
|
+
* keeps a heap copy (and therefore a reference count) for a carrier that can
|
|
92
|
+
* outlive the frame, and the lambda unpacks it the same way a generated thunk
|
|
93
|
+
* does. What it does NOT do is preserve identity: the view is a new object, so
|
|
94
|
+
* a later write through the class reference is not seen through the view. That
|
|
95
|
+
* is a real deviation, and it is the reason this is reached only after
|
|
96
|
+
* `convertedValueText` has refused -- a pair with an identity-preserving
|
|
97
|
+
* conversion never gets here.
|
|
98
|
+
*
|
|
99
|
+
* Refused, rather than rendered wrong, for a method that captures anything:
|
|
100
|
+
* the environment slot is spent on the receiver, and a method with its own
|
|
101
|
+
* captures needs both.
|
|
102
|
+
*/
|
|
103
|
+
const boundClassMethodText = (ctx, source, member, key, text) => {
|
|
104
|
+
// A view that refuses names only the PAIR, so which member refused is
|
|
105
|
+
// invisible in the refusal -- and a record view is all-or-nothing, so one
|
|
106
|
+
// member is the whole answer. Behind an env var because it is the only way
|
|
107
|
+
// to attribute one.
|
|
108
|
+
const trace = (why) => {
|
|
109
|
+
if (process.env['GEA_RECORD_VIEW_DEBUG'])
|
|
110
|
+
console.log(`[VIEW] ${representationKey(source)} member ${key}: ${why}`);
|
|
111
|
+
return null;
|
|
112
|
+
};
|
|
113
|
+
if (source.kind !== 'class-ref' || source.ownership !== 'shared-refcount')
|
|
114
|
+
return trace('source is not a shared-refcount class ref');
|
|
115
|
+
const abi = 'abi' in member ? member.abi : null;
|
|
116
|
+
if (abi === null || abi.receiver !== null || abi.restFrom !== null)
|
|
117
|
+
return trace('member declares no plain callable abi');
|
|
118
|
+
const site = classMemberOf(ctx.classes, source.declaration, key);
|
|
119
|
+
if (site === null || site.kind !== 'method' || site.method.callable === null)
|
|
120
|
+
return trace('class has no callable method of that name');
|
|
121
|
+
if (ctx.captures.of(site.method.callable).kind !== 'none')
|
|
122
|
+
return trace('method captures, and the environment slot holds the receiver');
|
|
123
|
+
const receiverType = cppTypeOf(source);
|
|
124
|
+
const formals = abi.parameters.map((parameter, ordinal) => `${cppAbiParameterType(parameter)} ${viewArgumentName(ordinal)}`);
|
|
125
|
+
const actuals = abi.parameters.map((_, ordinal) => viewArgumentName(ordinal));
|
|
126
|
+
const call = `${cppBodyName(site.method.callable)}(${[`*${viewReceiverName}`, ...actuals].join(', ')})`;
|
|
127
|
+
// A void-result member needs no conversion at all -- `call` is a statement,
|
|
128
|
+
// not an expression the lambda hands back -- so only a non-void result asks
|
|
129
|
+
// for the class's OWN declared signature, `ownAbi`. That is deliberately
|
|
130
|
+
// NOT `abi`: `abi` is the INTERFACE member's declared signature the view is
|
|
131
|
+
// being built for, and the two agree on the receiver and (in every program
|
|
132
|
+
// seen so far) on the parameters, but nothing forces the class's own result
|
|
133
|
+
// to already be the interface's -- a method the checker types to return
|
|
134
|
+
// `this` (a typed class ref) can back an interface member the wider census
|
|
135
|
+
// erased to `gea::Value`, and the body function genuinely returns the
|
|
136
|
+
// narrower carrier. Symmetric with every other position this file converts
|
|
137
|
+
// through (`recordFieldsViewText`'s field reads, the union arms below): the
|
|
138
|
+
// census-backed `alignedValueText` (not a direct `convertedValueText` call
|
|
139
|
+
// -- see `scripts/architecture.mjs`'s exact-count gate on this file) is the
|
|
140
|
+
// one authority on turning one carrier into the other. E.g. `gea::Value`
|
|
141
|
+
// has no implicit constructor from a `gea::Ref<T>`, so an unconverted
|
|
142
|
+
// `return call;` compiled only when the two happened to already agree.
|
|
143
|
+
// `representation` is OPTIONAL on a `ClassMethod`, and every callable kind
|
|
144
|
+
// that carries a convention carries it under the same `abi` key -- `function`
|
|
145
|
+
// is only the commonest of them. Reading it the same structural way the
|
|
146
|
+
// member's own abi is read above keeps the two sides symmetric; narrowing to
|
|
147
|
+
// `kind === 'function'` refused `Duplex.write` here, whose convention is
|
|
148
|
+
// published under another callable kind entirely.
|
|
149
|
+
const ownRepresentation = site.method.representation;
|
|
150
|
+
const ownAbi = ownRepresentation !== undefined && 'abi' in ownRepresentation ? ownRepresentation.abi : null;
|
|
151
|
+
let returned = call;
|
|
152
|
+
// No published convention at all means there is nothing to compare against,
|
|
153
|
+
// which is where this renderer stood before it converted anything: hand the
|
|
154
|
+
// call back unchanged rather than refuse, since the two agree in every
|
|
155
|
+
// program the emitted-set gate covers and a refusal here would drop them all.
|
|
156
|
+
if (abi.result.kind !== 'void' && ownAbi !== null) {
|
|
157
|
+
const converted = alignedValueText(ctx, 'emit-record-view.ts:158', ownAbi.result, abi.result, call);
|
|
158
|
+
if (converted === null)
|
|
159
|
+
return trace(`no conversion from the method's own result ${representationKey(ownAbi.result)} into the member's ${representationKey(abi.result)}`);
|
|
160
|
+
returned = converted;
|
|
161
|
+
}
|
|
162
|
+
const body = `alignas(void*) unsigned char ${viewSlotName}[sizeof(void*)]; ` +
|
|
163
|
+
`auto* ${viewReceiverName} = gea::unpackEnvironment<${receiverType}>(${viewEnvironmentName}, ${viewSlotName}); ` +
|
|
164
|
+
`${abi.result.kind === 'void' ? `${call};` : `return ${returned};`}`;
|
|
165
|
+
const invoke = `+[](void* ${viewEnvironmentName}${formals.length > 0 ? ', ' : ''}${formals.join(', ')}) -> ${cppResultTypeOf(abi.result)} { ${body} }`;
|
|
166
|
+
return `${cppTypeOf(member)}(${invoke}, gea::packEnvironment<${receiverType}>(${text}))`;
|
|
167
|
+
};
|
|
168
|
+
/**
|
|
169
|
+
* A getter-backed member, read by CALLING the getter -- the same answer
|
|
170
|
+
* `emit-class-properties.ts` gives an ordinary `obj.member` read of an
|
|
171
|
+
* accessor, and the reason a class's accessors can back an interface's plain
|
|
172
|
+
* fields at all.
|
|
173
|
+
*
|
|
174
|
+
* The direct body call is only correct while the family is CLOSED at this
|
|
175
|
+
* key: a derived class that redeclares the getter must run its own, and
|
|
176
|
+
* nothing in a struct-building expression dispatches. That case is refused
|
|
177
|
+
* rather than dispatched here because this renderer has no virtual-dispatch
|
|
178
|
+
* table to reach for -- `ConversionSite` carries the class map and the
|
|
179
|
+
* capture index, not the emitted member set -- and a wrong body is worse than
|
|
180
|
+
* a named refusal.
|
|
181
|
+
*/
|
|
182
|
+
const classAccessorReadText = (ctx, source, member, key, published, text) => {
|
|
183
|
+
if (source.kind !== 'class-ref')
|
|
184
|
+
return null;
|
|
185
|
+
const site = classMemberOf(ctx.classes, source.declaration, key);
|
|
186
|
+
if (site === null || site.kind !== 'accessor' || site.accessor.getter === null)
|
|
187
|
+
return null;
|
|
188
|
+
if (classFamilyOverridesOf(ctx.classes, source.declaration, key).length > 0) {
|
|
189
|
+
// An overridden getter is read through the family's dispatch member, as a
|
|
190
|
+
// plain read of it is (`emit-class-properties.ts`).
|
|
191
|
+
const dispatch = ctx.virtualDispatch?.get(virtualDispatchKey(source.declaration, key, 'get'));
|
|
192
|
+
if (dispatch === undefined)
|
|
193
|
+
return null;
|
|
194
|
+
return alignedValueText(ctx, 'emit-record-view.ts:classAccessorReadText', dispatch.result, member, `${text}->${cppVirtualMemberName(key, 'get')}()`);
|
|
195
|
+
}
|
|
196
|
+
return alignedValueText(ctx, 'emit-record-view.ts:classAccessorReadText', published, member, `${cppBodyName(site.accessor.getter)}(${text})`);
|
|
197
|
+
};
|
|
198
|
+
/**
|
|
199
|
+
* A record viewed as another shape it satisfies: the census's plan
|
|
200
|
+
* (`conversion/record-view.ts`), rendered. The plan decides which pairs are
|
|
201
|
+
* views and how each field is reached; this spells it. `null` only where the
|
|
202
|
+
* plan promised what this context cannot spell -- a bound class method that
|
|
203
|
+
* captures, whose environment slot is spent on the receiver -- which
|
|
204
|
+
* `emitConvert` then refuses.
|
|
205
|
+
*
|
|
206
|
+
* `viewPlanFor` above is asked rather than `structuralRecordViewPlan`
|
|
207
|
+
* directly: `conversions.ts`'s `staticRecipe` already built this same plan
|
|
208
|
+
* to answer whether the census's `view:structural-record` capability exists
|
|
209
|
+
* at all, and this is that plan's one consumer, not a second derivation of
|
|
210
|
+
* it.
|
|
211
|
+
*/
|
|
212
|
+
export const structuralRecordViewText = (ctx, source, target, text) => {
|
|
213
|
+
const plan = viewPlanFor(ctx.layouts, source, target);
|
|
214
|
+
return plan === null ? boxedAssertionText(source, target, text) : recordViewText(ctx, plan, text);
|
|
215
|
+
};
|
|
216
|
+
const recordViewText = (ctx, plan, text) => {
|
|
217
|
+
switch (plan.kind) {
|
|
218
|
+
case 'owned':
|
|
219
|
+
return ownedRecordMaterializationText(plan.plan, text);
|
|
220
|
+
case 'arm': {
|
|
221
|
+
const arm = plan.target.arms[plan.index];
|
|
222
|
+
if (arm === undefined)
|
|
223
|
+
return null;
|
|
224
|
+
const converted = plan.payload === null ? convertedValueText(plan.source, arm.value, text) : recordViewText(ctx, plan.payload, text);
|
|
225
|
+
return converted === null ? null : `${cppTypeOf(plan.target)}::ofArm<${plan.index}>(${converted})`;
|
|
226
|
+
}
|
|
227
|
+
case 'optional': {
|
|
228
|
+
const built = recordViewText(ctx, plan.payload, plan.sourceOptional ? `(*${text})` : text);
|
|
229
|
+
if (built === null)
|
|
230
|
+
return null;
|
|
231
|
+
const optional = cppTypeOf(plan.target);
|
|
232
|
+
if (!plan.sourceOptional)
|
|
233
|
+
return `${optional}(${built})`;
|
|
234
|
+
return `(${text}.has_value() ? ${optional}(${built}) : ${optional}())`;
|
|
235
|
+
}
|
|
236
|
+
case 'assert': {
|
|
237
|
+
const built = recordViewText(ctx, plan.payload, `(*${text})`);
|
|
238
|
+
if (built === null)
|
|
239
|
+
return null;
|
|
240
|
+
// The language's own `!` is erased at runtime; a later member read of an
|
|
241
|
+
// actually-absent value throws a TypeError, so the faithful C++ is a
|
|
242
|
+
// CHECKED unwrap that throws too -- not a bare `*text`, which would be
|
|
243
|
+
// undefined behaviour on absence. `gea::host::throwGetPropertyOfNullish`
|
|
244
|
+
// is the same helper `emit-context.ts`/`emit-properties.ts` reach for a
|
|
245
|
+
// nullish-base property read, and its `[[noreturn]] T` return lets it
|
|
246
|
+
// stand as an expression of the target's own type in the ternary's other
|
|
247
|
+
// arm.
|
|
248
|
+
return `(${text}.has_value() ? ${built} : gea::host::throwGetPropertyOfNullish<${cppTypeOf(plan.target)}>())`;
|
|
249
|
+
}
|
|
250
|
+
case 'recast-union': {
|
|
251
|
+
const homes = [];
|
|
252
|
+
for (const [index, home] of plan.arms.entries()) {
|
|
253
|
+
const armText = recastUnionArmText(plan.source, text, index);
|
|
254
|
+
const from = plan.source.arms[index];
|
|
255
|
+
const into = plan.target.arms[home.index];
|
|
256
|
+
if (from === undefined || into === undefined)
|
|
257
|
+
return null;
|
|
258
|
+
const rendered = home.via === 'exact'
|
|
259
|
+
? armText
|
|
260
|
+
: home.via === 'convert'
|
|
261
|
+
? convertedValueText(from.value, into.value, armText)
|
|
262
|
+
: recordViewText(ctx, home.via, armText);
|
|
263
|
+
if (rendered === null)
|
|
264
|
+
return null;
|
|
265
|
+
homes.push({ index: home.index, text: rendered });
|
|
266
|
+
}
|
|
267
|
+
return recastedUnionFromHomes(plan.source, plan.target, text, homes);
|
|
268
|
+
}
|
|
269
|
+
case 'fields':
|
|
270
|
+
return recordFieldsViewText(ctx, plan, text);
|
|
271
|
+
}
|
|
272
|
+
};
|
|
273
|
+
const recordFieldsViewText = (ctx, plan, text) => {
|
|
274
|
+
const { source, target } = plan;
|
|
275
|
+
// An `owned` record is a value, not a handle: its members are reached with
|
|
276
|
+
// `.` where every refcounted carrier uses `->`.
|
|
277
|
+
const arrow = (source.kind === 'record' || source.kind === 'record-with-index') && source.ownership !== 'shared-refcount' ? '.' : '->';
|
|
278
|
+
const reads = [];
|
|
279
|
+
const presences = [];
|
|
280
|
+
const structName = cppRecordStructName(target.shapeId);
|
|
281
|
+
for (const { field, read } of plan.fields) {
|
|
282
|
+
if (read.kind === 'bound-method') {
|
|
283
|
+
const bound = boundClassMethodText(ctx, source, field.value, field.key, text);
|
|
284
|
+
if (bound === null)
|
|
285
|
+
return null;
|
|
286
|
+
reads.push(bound);
|
|
287
|
+
if (!field.required)
|
|
288
|
+
presences.push('true');
|
|
289
|
+
continue;
|
|
290
|
+
}
|
|
291
|
+
if (read.kind === 'class-accessor') {
|
|
292
|
+
const got = classAccessorReadText(ctx, source, field.value, field.key, read.value, text);
|
|
293
|
+
if (got === null)
|
|
294
|
+
return null;
|
|
295
|
+
reads.push(got);
|
|
296
|
+
if (!field.required)
|
|
297
|
+
presences.push('true');
|
|
298
|
+
continue;
|
|
299
|
+
}
|
|
300
|
+
if (read.kind === 'absent') {
|
|
301
|
+
reads.push(`${cppTypeOf(field.value)}{}`);
|
|
302
|
+
if (!field.required)
|
|
303
|
+
presences.push('false');
|
|
304
|
+
continue;
|
|
305
|
+
}
|
|
306
|
+
const held = read.held;
|
|
307
|
+
const converted = convertedValueText(held.value, field.value, `${text}${arrow}${cppRecordFieldName(field.key)}`);
|
|
308
|
+
if (converted === null)
|
|
309
|
+
return null;
|
|
310
|
+
// Inside braces [dcl.init.list]/7 forbids the narrowing every other
|
|
311
|
+
// position allows: a field the integer census holds in a `long long`
|
|
312
|
+
// (`{ kind, type }` with `kind: 1 | 2`) is a hard error written into a
|
|
313
|
+
// `double` member of the layout it is viewed as, though both carriers say
|
|
314
|
+
// `scalar(number)`. `static_cast` spells the same conversion explicitly --
|
|
315
|
+
// `emit-narrowing.ts`'s `recastFieldText` answers the identical rule this
|
|
316
|
+
// way -- and is a no-op where the two already agree. The cast names the
|
|
317
|
+
// member's OWN declared type, `decltype(Struct::member)`, because the
|
|
318
|
+
// census's answer lives in the struct declaration `records.ts` emitted
|
|
319
|
+
// and nowhere this emitter can ask: the representation says `double` for
|
|
320
|
+
// both sides, and casting to that spelling is the same narrowing error
|
|
321
|
+
// in the other direction whenever the TARGET member is the narrowed one
|
|
322
|
+
// (a `Leaf { value: number }` read through a `Branch | Leaf` arm).
|
|
323
|
+
const arithmetic = field.value.kind === 'scalar' && field.value.domain !== 'bigint';
|
|
324
|
+
reads.push(arithmetic && held.value.kind === 'scalar'
|
|
325
|
+
? `static_cast<decltype(${structName}::${cppRecordFieldName(field.key)})>(${converted})`
|
|
326
|
+
: converted);
|
|
327
|
+
if (!field.required) {
|
|
328
|
+
presences.push(held.required ? 'true' : `${text}${arrow}${cppRecordFieldPresenceName(field.key)}`);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
if (source.kind === 'record-with-index') {
|
|
332
|
+
for (const { source: sourceIndex } of plan.indexes) {
|
|
333
|
+
reads.push(`${text}${arrow}${cppRecordIndexSidecarNameFor(sourceIndex, source.indexes)}`);
|
|
334
|
+
reads.push(`${text}${arrow}${cppRecordIndexAttributesNameFor(sourceIndex, source.indexes)}`);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
reads.push(...presences);
|
|
338
|
+
const structure = `${structName}{${reads.join(', ')}}`;
|
|
339
|
+
if (target.ownership !== 'shared-refcount')
|
|
340
|
+
return structure;
|
|
341
|
+
const allocated = `gea::makeRef<${structName}>(${structure})`;
|
|
342
|
+
if (plan.expando)
|
|
343
|
+
return `gea::record::recastWithExpando(${allocated}, ${text}${arrow}${cppRecordIndexSidecarName})`;
|
|
344
|
+
// A class instance's view remembers the instance, so `instanceof` and a
|
|
345
|
+
// narrowing back to the class still answer from it
|
|
346
|
+
// (`gea::record::viewOrigin`, `projection/instance-test.ts`).
|
|
347
|
+
if (source.kind === 'class-ref') {
|
|
348
|
+
const boxed = dynamicCarrierBoxText(source, text);
|
|
349
|
+
if (boxed === null)
|
|
350
|
+
return null;
|
|
351
|
+
return `gea::record::rememberViewOrigin(${allocated}, ${boxed})`;
|
|
352
|
+
}
|
|
353
|
+
return allocated;
|
|
354
|
+
};
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { representationKey } from '../../representation/model.js';
|
|
2
|
+
import { operandText, createCppEmitBlockedError } from './emit-context.js';
|
|
3
|
+
import { cppTypeOf, cppUndefinedIn } from './types.js';
|
|
4
|
+
import { alignedValueText, dynamicPromiseAdoptionText } from './emit-narrowing.js';
|
|
5
|
+
import { structuralRecordViewText } from './emit-record-view.js';
|
|
6
|
+
/**
|
|
7
|
+
* The `return` terminator: the one place a body's own value meets the calling
|
|
8
|
+
* convention its callers were compiled against.
|
|
9
|
+
*
|
|
10
|
+
* Three ABI results make different demands here -- a generator (`co_return`,
|
|
11
|
+
* and no completion value), a promise (a SETTLED value rather than a converted
|
|
12
|
+
* one), and everything else (an ordinary two-direction reconciliation) -- which
|
|
13
|
+
* is why this lives beside `emit.ts` rather than inside its terminator switch.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* A derived constructor's own completion rules (ECMA-262 10.2.2 step 13),
|
|
17
|
+
* decided statically. A body with no `super-initialize` anywhere never binds
|
|
18
|
+
* `this`, so every normal completion is the ReferenceError the language
|
|
19
|
+
* throws; a `return` of a primitive is the TypeError. Both were silently
|
|
20
|
+
* rendered as an ordinary construction before, which is a wrong answer, not
|
|
21
|
+
* a refusal. `undefined`/`void` returns are the ordinary case and fall
|
|
22
|
+
* through; a `return` of an OBJECT other than the receiver itself is the
|
|
23
|
+
* return-override this backend does not implement, and is refused by name
|
|
24
|
+
* rather than discarded.
|
|
25
|
+
*/
|
|
26
|
+
const constructorCompletionText = (ctx, value) => {
|
|
27
|
+
const owning = ctx.constructorOf;
|
|
28
|
+
if (owning === null)
|
|
29
|
+
return null;
|
|
30
|
+
if (owning.derived && !owning.callsSuper) {
|
|
31
|
+
return ('gea::host::throwRuntimeError("ReferenceError", "Must call super constructor in derived class before accessing \'this\' or ' +
|
|
32
|
+
'returning from derived constructor");');
|
|
33
|
+
}
|
|
34
|
+
const kind = value?.representation.kind;
|
|
35
|
+
if (value === null || kind === undefined || kind === 'void' || kind === 'undefined' || ctx.receiverValues.has(value.value))
|
|
36
|
+
return null;
|
|
37
|
+
if (kind === 'string' || kind === 'scalar' || kind === 'null') {
|
|
38
|
+
if (!owning.derived)
|
|
39
|
+
return null;
|
|
40
|
+
return `(void)(${operandText(ctx, value)}); gea::host::throwRuntimeError("TypeError", "Derived constructors may only return object or undefined");`;
|
|
41
|
+
}
|
|
42
|
+
throw createCppEmitBlockedError('call-abi:constructor-return-override', `a constructor of class ${owning.layout.declaration} returns a "${representationKey(value.representation)}" value, which would ` +
|
|
43
|
+
'replace the constructed instance ([[Construct]] step 10.a); this backend does not implement a constructor return override');
|
|
44
|
+
};
|
|
45
|
+
export const emitReturn = (ctx, lines, terminator) => {
|
|
46
|
+
const completion = constructorCompletionText(ctx, terminator.value ?? null);
|
|
47
|
+
if (completion !== null) {
|
|
48
|
+
lines.push(completion);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
// A coroutine may not use `return` at all -- C++20 [stmt.return] makes it
|
|
52
|
+
// ill-formed inside one -- so a generator body's every return, implicit
|
|
53
|
+
// fall-off included, spells `co_return`. A generator's completion VALUE
|
|
54
|
+
// (`return v` inside a `function*`) is carried when the cursor's own
|
|
55
|
+
// `completion` slot is a real native carrier (`representation/derive.ts`'s
|
|
56
|
+
// `GeneratorDeclarationPolicy`, `runtime/gea_runtime.h`'s
|
|
57
|
+
// `promise_type::return_value`) -- otherwise (an unresolved/dynamic
|
|
58
|
+
// `TReturn`, collapsed to `undefined` on purpose rather than boxed) a
|
|
59
|
+
// valued return is refused, since there is no storage to fill with it.
|
|
60
|
+
//
|
|
61
|
+
// Keyed on the BODY's own generator-ness, never on its result carrier: an
|
|
62
|
+
// ordinary `function makeGen() { return g() }` returns the identical
|
|
63
|
+
// `iterator(source: generator)` cursor a `function*` does, and spelling its
|
|
64
|
+
// `return` as `co_return` (or refusing it for lacking a completion channel)
|
|
65
|
+
// mistook the value's shape for the frame's.
|
|
66
|
+
if (ctx.generatorBody) {
|
|
67
|
+
const cursor = ctx.abi?.result;
|
|
68
|
+
if (cursor?.kind !== 'iterator') {
|
|
69
|
+
throw createCppEmitBlockedError('runtime-helper:boundary:generator-resume', `a generator body's calling convention returns "${cursor ? representationKey(cursor) : 'nothing'}" rather than an iterator cursor`);
|
|
70
|
+
}
|
|
71
|
+
if (!terminator.value) {
|
|
72
|
+
lines.push('co_return;');
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (cursor.completion.kind === 'void' || cursor.completion.kind === 'undefined') {
|
|
76
|
+
throw createCppEmitBlockedError('runtime-helper:boundary:generator-resume', 'returns a value from a generator body whose completion channel is "undefined" -- either TReturn never resolved to a native ' +
|
|
77
|
+
'carrier, or this generator is not annotated as one -- and this cursor has no storage to fill with it');
|
|
78
|
+
}
|
|
79
|
+
const text = operandText(ctx, terminator.value);
|
|
80
|
+
const converted = alignedValueText(ctx, 'emit-return.ts:92', terminator.value.representation, cursor.completion, text);
|
|
81
|
+
if (converted === null) {
|
|
82
|
+
throw createCppEmitBlockedError(`conversion:${representationKey(terminator.value.representation)}->${representationKey(cursor.completion)}`, `returns a ${terminator.value.representation.kind} where this generator's completion channel is ${cursor.completion.kind}, ` +
|
|
83
|
+
'and no conversion is installed between them');
|
|
84
|
+
}
|
|
85
|
+
lines.push(`co_return ${converted};`);
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
if (!terminator.value) {
|
|
89
|
+
// `Promise<void>` is a real class type, not the literal `void` -- a
|
|
90
|
+
// bare `return;` inside a function whose ABI result is
|
|
91
|
+
// `Promise<void>` is a C++ compile error (returning nothing from a
|
|
92
|
+
// function declared to return a class). `T === void` is the only
|
|
93
|
+
// payload for which a `return` terminator carries no value operand
|
|
94
|
+
// at all here, so this is reached exactly once per such function, at
|
|
95
|
+
// its implicit or explicit valueless return.
|
|
96
|
+
if (ctx.abi?.result.kind === 'promise' && ctx.abi.result.value.kind === 'void') {
|
|
97
|
+
lines.push(`return ${cppTypeOf(ctx.abi.result)}::settled_value();`);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
if (ctx.abi && ctx.abi.result.kind !== 'void') {
|
|
101
|
+
const result = ctx.abi.result;
|
|
102
|
+
const payload = result.kind === 'promise' ? result.value : result;
|
|
103
|
+
const absent = cppUndefinedIn(payload);
|
|
104
|
+
if (absent === null) {
|
|
105
|
+
// A valueless return into a result with no absence value is the one
|
|
106
|
+
// shape TypeScript admits only at an unreachable point: `return
|
|
107
|
+
// fail(...)` where `fail(): never`. The lowering drops the `never`
|
|
108
|
+
// carrier (it names no value), the call itself was rendered as its
|
|
109
|
+
// own statement and does not return, and this is the point after it
|
|
110
|
+
// -- `[[noreturn]]`, so the function's own result type needs no
|
|
111
|
+
// value here (`emit-callable.ts` renders an unreachable argument the
|
|
112
|
+
// same way).
|
|
113
|
+
lines.push(`return gea::host::unreachableValue<${cppTypeOf(result)}>();`);
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
lines.push(result.kind === 'promise' ? `return ${cppTypeOf(result)}(${absent});` : `return ${absent};`);
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
lines.push('return;');
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const text = operandText(ctx, terminator.value);
|
|
123
|
+
// The body's own declared ABI result is the "held" side of the same
|
|
124
|
+
// reconciliation `emit-bindings.ts` already applies to a binding cell -- see
|
|
125
|
+
// citations.md finding 1. `ctx.abi` is `null` only for an uncalled region,
|
|
126
|
+
// which never has a `return` with a value to widen.
|
|
127
|
+
//
|
|
128
|
+
// `convertedValueText`, not `widenedStoreText`: the store direction alone
|
|
129
|
+
// answers only a value WIDENING into the declared result, and returns `null`
|
|
130
|
+
// for the mirror case -- a `dynamic` value returned where the ABI result is
|
|
131
|
+
// concrete. That `null` then fell through to the bare `text`, emitting
|
|
132
|
+
// `return gea_arg_1;` from a `gea::Value` into a
|
|
133
|
+
// `gea::TaggedUnion<std::string, double>` with no conversion at all: a
|
|
134
|
+
// certified, preflight-clean program that clang rejects. A JSDoc
|
|
135
|
+
// `@returns {number|string}` on a JS function whose parameter's call sites
|
|
136
|
+
// disagree is enough to reach it. `convertedValueText` is the general
|
|
137
|
+
// reconciliation in both directions -- it asks `unboxedLoadText` for a
|
|
138
|
+
// dynamic source and falls through to the same `widenedStoreText` otherwise
|
|
139
|
+
// -- and is already what every argument slot (`emit-callable.ts`) uses.
|
|
140
|
+
//
|
|
141
|
+
// An async body's ABI result is `Promise<V>` while its `return v` carries a
|
|
142
|
+
// bare `V`: that pair is a RESOLUTION, not a conversion, and `Promise`'s
|
|
143
|
+
// converting constructor exists for this one site and no other -- its own
|
|
144
|
+
// class comment says so ("TypeScript never lets an ordinary binding or field
|
|
145
|
+
// hold a bare `T` where `Promise<T>` is declared -- so this is reached only
|
|
146
|
+
// from a function whose declared return type is `Promise<T>`"). Verified by
|
|
147
|
+
// RUNNING it: an async arrow returning an awaited `number` emits `return
|
|
148
|
+
// total;` from a `gea::Promise<double>` function and prints the right answer.
|
|
149
|
+
// Reconciling against the promise's PAYLOAD rather than against the promise
|
|
150
|
+
// keeps the guard below fail-closed on the part that really is a conversion.
|
|
151
|
+
// Returning an already-promise value (a pass-through) reconciles against the
|
|
152
|
+
// promise itself, so it is left to the general path.
|
|
153
|
+
// A DYNAMIC value may itself be a promise (hono's `formData()` returns its
|
|
154
|
+
// `any`-typed `#cachedBody(...)`), and an async return adopts one rather
|
|
155
|
+
// than fulfilling with it (ECMA-262 27.2.1.3.2) -- decided at run time.
|
|
156
|
+
// Lowering already converted the value toward the payload, so the dynamic
|
|
157
|
+
// operand is the convert's source.
|
|
158
|
+
const dynamicSource = terminator.value.representation.kind === 'dynamic' ? terminator.value : (ctx.conversionSources.get(terminator.value.value) ?? null);
|
|
159
|
+
if (ctx.abi?.result.kind === 'promise' && dynamicSource?.representation.kind === 'dynamic') {
|
|
160
|
+
const adopted = dynamicPromiseAdoptionText(ctx.abi.result, operandText(ctx, dynamicSource));
|
|
161
|
+
if (adopted !== null) {
|
|
162
|
+
lines.push(`return ${adopted};`);
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
const settlesIntoPromise = ctx.abi !== null && ctx.abi.result.kind === 'promise' && terminator.value.representation.kind !== 'promise';
|
|
167
|
+
const abiResult = settlesIntoPromise && ctx.abi ? ctx.abi.result.value : (ctx.abi?.result ?? null);
|
|
168
|
+
// `Promise<void>` carries no payload at all (`cppResultTypeOf` elides
|
|
169
|
+
// `void`), so a valued return whose value is itself `void` -- `return f()`
|
|
170
|
+
// where `f` completes without producing one -- has nothing to settle WITH.
|
|
171
|
+
// The evaluation still has to happen for its effects, so it is discarded
|
|
172
|
+
// explicitly and the settled promise minted by the same named factory the
|
|
173
|
+
// valueless return above uses.
|
|
174
|
+
if (ctx.abi && ctx.abi.result.kind === 'promise' && abiResult && abiResult.kind === 'void') {
|
|
175
|
+
lines.push(`(void)(${text});`);
|
|
176
|
+
lines.push(`return ${cppTypeOf(ctx.abi.result)}::settled_value();`);
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
// A value-returning source statement may still implement a `void` ABI:
|
|
180
|
+
// `return undefined` and `return sideEffect()` both evaluate an expression,
|
|
181
|
+
// then expose no result to the caller. Preserve that evaluation and discard
|
|
182
|
+
// its value explicitly. Passing `void` into the general conversion below is
|
|
183
|
+
// invalid by construction -- it has no C++ value type for `cppTypeOf` to
|
|
184
|
+
// compare -- and previously crashed the entire emission after lowering had
|
|
185
|
+
// already accepted the body.
|
|
186
|
+
if (abiResult?.kind === 'void') {
|
|
187
|
+
lines.push(`(void)(${text});`);
|
|
188
|
+
lines.push('return;');
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
// The same two-step an ARGUMENT already takes (`alignedText`, emit-callable.
|
|
192
|
+
// ts): `convertedValueText` first, and only when it refuses, the view that
|
|
193
|
+
// needs both LAYOUTS in hand. A `native-record-ref` carries a shape id and no
|
|
194
|
+
// field list, so the general conversion cannot reach the target's members --
|
|
195
|
+
// this is the one place the deriver is available to resolve them. `return
|
|
196
|
+
// options` out of a method declared to return an overlapping named shape is
|
|
197
|
+
// ordinary TypeScript and the mongodb driver is built out of it.
|
|
198
|
+
const converted = abiResult
|
|
199
|
+
? (alignedValueText(ctx, 'emit-return.ts:202', terminator.value.representation, abiResult, text) ??
|
|
200
|
+
structuralRecordViewText(ctx, terminator.value.representation, abiResult, text))
|
|
201
|
+
: null;
|
|
202
|
+
// FAIL CLOSED. `convertedValueText` answers `text` unchanged whenever the two
|
|
203
|
+
// carriers already agree, so `null` here means no recipe exists for this pair
|
|
204
|
+
// -- and emitting the bare operand anyway is how a `gea::Value` came to be
|
|
205
|
+
// returned from a function declared `gea::TaggedUnion<std::string, double>`:
|
|
206
|
+
// certified, preflight-clean, and rejected by clang. A missing conversion is
|
|
207
|
+
// a refusal, not a silently unconverted store.
|
|
208
|
+
if (abiResult && converted === null) {
|
|
209
|
+
throw createCppEmitBlockedError(`conversion:${representationKey(terminator.value.representation)}->${representationKey(abiResult)}`, `returns a ${terminator.value.representation.kind} where this body's ABI result is ${abiResult.kind}, ` +
|
|
210
|
+
'and no conversion is installed between them');
|
|
211
|
+
}
|
|
212
|
+
// ONE user-defined conversion, and the promise already spends it.
|
|
213
|
+
//
|
|
214
|
+
// Reconciling against the payload is right, but it leaves the step from the
|
|
215
|
+
// payload to the promise implicit -- and `convertedValueText` renders a
|
|
216
|
+
// widening that `gea::Optional<T>`'s (or any other) converting constructor
|
|
217
|
+
// performs as the operand text UNCHANGED, because for an ordinary store that
|
|
218
|
+
// single implicit conversion is exactly what happens. Stacked, they are two:
|
|
219
|
+
// `return v3;` from a `double` in a body whose result is
|
|
220
|
+
// `gea::Promise<gea::Optional<double>>` needs `double` -> `Optional<double>`
|
|
221
|
+
// -> `Promise<Optional<double>>`, and C++ [over.ics.user] permits one
|
|
222
|
+
// user-defined conversion per implicit sequence. clang rejected it -- "no
|
|
223
|
+
// viable conversion from returned value of type 'double'" -- on a body that
|
|
224
|
+
// certified clean and emitted. `async next(): Promise<number | null>` with
|
|
225
|
+
// `return this.index++` is the whole program it takes; mongodb's
|
|
226
|
+
// `AbstractCursor.next` is the same shape.
|
|
227
|
+
//
|
|
228
|
+
// Naming the promise explicitly spends the sequence's one slot on the
|
|
229
|
+
// payload widening instead, which is the step that actually needs it. The
|
|
230
|
+
// file's own optional-target comment makes the same argument at the other
|
|
231
|
+
// end of the same pair.
|
|
232
|
+
if (settlesIntoPromise && ctx.abi) {
|
|
233
|
+
lines.push(`return ${cppTypeOf(ctx.abi.result)}(${converted ?? text});`);
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
lines.push(`return ${converted ?? text};`);
|
|
237
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Representation } from '../../representation/model.js';
|
|
2
|
+
import { type NativeSumPlan } from '../../conversion/native-sum.js';
|
|
3
|
+
export { nativeSumWidenable } from '../../conversion/native-sum.js';
|
|
4
|
+
export declare const renderNativeSumPlan: (step: NativeSumPlan, text: string, spell: (target: Representation) => string, dependent?: boolean) => string;
|
|
5
|
+
/**
|
|
6
|
+
* Own the source while dispatching: lvalues copy once, temporaries move into
|
|
7
|
+
* the parameter, and the selected payload moves into its destination. Borrowing
|
|
8
|
+
* a temporary through const& would force an otherwise unnecessary deep copy.
|
|
9
|
+
*/
|
|
10
|
+
export declare const widenedNativeSumText: (source: Representation, target: Representation, text: string) => string | null;
|