@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,317 @@
|
|
|
1
|
+
import { representationKey } from '../../representation/model.js';
|
|
2
|
+
import { createCppEmitBlockedError } from './emit-context.js';
|
|
3
|
+
import { cppConstantLiteral, cppStringLiteral } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* `typeof`, which is a question about a carrier and only sometimes about a
|
|
6
|
+
* value.
|
|
7
|
+
*
|
|
8
|
+
* For everything except a sum, the answer is decided before the program runs:
|
|
9
|
+
* a `std::string` is a `"string"` at every execution, and emitting a runtime
|
|
10
|
+
* test for it would compute a constant. So the ordinary case is a literal, and
|
|
11
|
+
* that is not an optimization -- it is what the operator means once a carrier
|
|
12
|
+
* has been selected.
|
|
13
|
+
*
|
|
14
|
+
* A sum is the case where the value really is consulted, and it is the case
|
|
15
|
+
* `typeof` exists for: `typeof x === 'string'` on a `string | number` is how a
|
|
16
|
+
* program narrows one. There the answer dispatches on the discriminant the
|
|
17
|
+
* carrier already keeps -- `gea::TaggedUnion::index()` -- and each arm
|
|
18
|
+
* contributes its own constant.
|
|
19
|
+
*
|
|
20
|
+
* A `dynamic` box is the third case, and the only one where the value's own
|
|
21
|
+
* runtime tag is read: a carrier is `dynamic` only for the four admissible
|
|
22
|
+
* reasons `representation/model.ts` lists, all of which are genuine dynamic
|
|
23
|
+
* boundaries where the program itself has no static type to answer from. Note
|
|
24
|
+
* the direction -- nothing is ever boxed *in order to* ask `typeof`; a value
|
|
25
|
+
* that has a carrier answers from the carrier, and only a value that was
|
|
26
|
+
* already dynamic reaches `gea::host::detail::typeOf`.
|
|
27
|
+
*
|
|
28
|
+
* The mapping is ECMAScript's own table, not a convenience. `null` is
|
|
29
|
+
* `"object"` (the specification's oldest wart, and observable), a function is
|
|
30
|
+
* `"function"` however it is carried, and every other object-like carrier is
|
|
31
|
+
* `"object"`. A carrier with no answer in that table is refused by name rather
|
|
32
|
+
* than given a plausible one: `typeof` returning the wrong string is a
|
|
33
|
+
* narrowing that silently takes the wrong branch. `unresolved` is the carrier
|
|
34
|
+
* that stays refused on purpose: it is lattice bottom, not a physical thing a
|
|
35
|
+
* runtime tag could be read off, so a `typeof` over one means a carrier failed
|
|
36
|
+
* upstream and the defect is there.
|
|
37
|
+
*/
|
|
38
|
+
const objectLike = new Set([
|
|
39
|
+
'class-ref',
|
|
40
|
+
'record',
|
|
41
|
+
'record-with-index',
|
|
42
|
+
'native-record-ref',
|
|
43
|
+
'native-handle',
|
|
44
|
+
'array-object',
|
|
45
|
+
'dictionary',
|
|
46
|
+
'typed-array',
|
|
47
|
+
'dense-buffer',
|
|
48
|
+
'native-sequence',
|
|
49
|
+
'iterator',
|
|
50
|
+
'promise',
|
|
51
|
+
// `typeof new Map()` is `"object"` -- a keyed collection is an ordinary
|
|
52
|
+
// Object for this operator, exactly as an Array is.
|
|
53
|
+
'keyed-collection',
|
|
54
|
+
// `typeof null` is `"object"`. The specification says so, every engine agrees,
|
|
55
|
+
// and a program that tests for it is testing for exactly this.
|
|
56
|
+
'null',
|
|
57
|
+
// `ArrayBuffer` and `DataView` are ordinary objects (ECMA-262 25.1, 25.3) --
|
|
58
|
+
// no different from a record or a native handle for this operator, which
|
|
59
|
+
// does not care that one of them backs a typed array's bytes. The manifest
|
|
60
|
+
// keys `typeof` by complete representation, so this row contributes to the
|
|
61
|
+
// union that actually contains it without affecting unrelated unions.
|
|
62
|
+
'array-buffer',
|
|
63
|
+
'shared-array-buffer',
|
|
64
|
+
'data-view'
|
|
65
|
+
]);
|
|
66
|
+
const functionLike = new Set([
|
|
67
|
+
'function',
|
|
68
|
+
'function-family',
|
|
69
|
+
'function-value-family',
|
|
70
|
+
'function-value-dispatch',
|
|
71
|
+
'generic-function-set',
|
|
72
|
+
'constructor-family',
|
|
73
|
+
'constructor-value-dispatch',
|
|
74
|
+
'function-and-constructor'
|
|
75
|
+
]);
|
|
76
|
+
/** The string `typeof` yields for one carrier, or `null` when the table has no answer for it. */
|
|
77
|
+
export const typeofTextFor = (representation) => {
|
|
78
|
+
if (representation.kind === 'scalar') {
|
|
79
|
+
if (representation.domain === 'boolean')
|
|
80
|
+
return 'boolean';
|
|
81
|
+
if (representation.domain === 'bigint')
|
|
82
|
+
return 'bigint';
|
|
83
|
+
// `int32`, `uint32` and `float64` are storage choices this compiler made
|
|
84
|
+
// for a value the language calls a number; the operator answers about the
|
|
85
|
+
// language's type, not about the width the carrier settled on.
|
|
86
|
+
return 'number';
|
|
87
|
+
}
|
|
88
|
+
if (representation.kind === 'string')
|
|
89
|
+
return 'string';
|
|
90
|
+
if (representation.kind === 'undefined')
|
|
91
|
+
return 'undefined';
|
|
92
|
+
// `void` is storage for a value the program never stated a payload for --
|
|
93
|
+
// `undefined` under a different name (`representation/model.ts`'s own
|
|
94
|
+
// memory: "void in a stored position is undefined"). `typeof` asks what the
|
|
95
|
+
// value IS, and this carrier is never anything else, so it answers exactly
|
|
96
|
+
// as the bare `undefined` kind two lines up does. Missing here left every
|
|
97
|
+
// `computation:typeof:void` site refused, and -- the same all-or-nothing
|
|
98
|
+
// manifest rule `array-buffer` above documents -- could poison an unrelated
|
|
99
|
+
// `tagged-union` claim the moment a `void` arm reached one.
|
|
100
|
+
if (representation.kind === 'void')
|
|
101
|
+
return 'undefined';
|
|
102
|
+
// A `gea::Symbol` is a symbol at every execution -- ECMA-262 13.5.3's own
|
|
103
|
+
// row, and the one carrier whose answer is its own name. It was missing, and
|
|
104
|
+
// the cost was not confined to a bare `typeof sym`: a union with one
|
|
105
|
+
// symbol-carrying arm was refused whole, because a sum is answerable only
|
|
106
|
+
// when every arm is.
|
|
107
|
+
if (representation.kind === 'symbol')
|
|
108
|
+
return 'symbol';
|
|
109
|
+
// A borrow and a proxy both answer for what they stand in front of: `typeof`
|
|
110
|
+
// on a reference is `typeof` of the referent, and a proxy has no `[[TypeOf]]`
|
|
111
|
+
// trap -- the operator sees straight through it to the target, which is why a
|
|
112
|
+
// proxy over a function is `"function"`.
|
|
113
|
+
if (representation.kind === 'borrowed-ref')
|
|
114
|
+
return typeofTextFor(representation.referent);
|
|
115
|
+
if (representation.kind === 'proxy-object')
|
|
116
|
+
return typeofTextFor(representation.target);
|
|
117
|
+
if (objectLike.has(representation.kind))
|
|
118
|
+
return 'object';
|
|
119
|
+
if (functionLike.has(representation.kind))
|
|
120
|
+
return 'function';
|
|
121
|
+
return null;
|
|
122
|
+
};
|
|
123
|
+
/**
|
|
124
|
+
* The expression that yields `typeof operand`.
|
|
125
|
+
*
|
|
126
|
+
* `quote` is passed in rather than imported so this file states no opinion about
|
|
127
|
+
* how a C++ string literal is spelled; the one authority for that already exists
|
|
128
|
+
* and this asks it.
|
|
129
|
+
*
|
|
130
|
+
* The operand arrives as a THUNK, not as text, because for most carriers this
|
|
131
|
+
* function never asks for it: the answer is settled by the carrier, and
|
|
132
|
+
* rendering the operand to hand it over would demand a value the question does
|
|
133
|
+
* not depend on. That is not a saving -- it is the difference between an
|
|
134
|
+
* answer and a refusal for anything a program can name but not hold. `typeof
|
|
135
|
+
* deviceInfo !== 'undefined'` is the shape that proved it: the host states
|
|
136
|
+
* that namespace exists, the answer is `"object"` before the program runs, and
|
|
137
|
+
* eagerly rendering the operand refused the whole program for using a
|
|
138
|
+
* namespace as a value it never used it as.
|
|
139
|
+
*/
|
|
140
|
+
export const typeofExpression = (representation, operand, quote, dynamic = (text) => `gea::host::detail::typeOf(${text})`) => {
|
|
141
|
+
if (representation.kind === 'optional') {
|
|
142
|
+
// An absent optional answers for its exact absence tag; a present one is whatever the payload
|
|
143
|
+
// answers, which is itself a `typeof` question and is asked as one -- an
|
|
144
|
+
// optional over a sum is both a presence test and a discriminant test, and
|
|
145
|
+
// answering only the first half here would silently pick one arm.
|
|
146
|
+
const payload = typeofExpression(representation.payload, () => `(*${operand()})`, quote, dynamic);
|
|
147
|
+
if (payload === null)
|
|
148
|
+
return null;
|
|
149
|
+
const absent = quote(representation.absence === 'null' ? 'object' : 'undefined');
|
|
150
|
+
return payload === absent ? absent : `(${operand()}.has_value() ? ${payload} : ${absent})`;
|
|
151
|
+
}
|
|
152
|
+
// The one carrier whose `typeof` genuinely is a runtime question. A `dynamic`
|
|
153
|
+
// carrier exists only for the four admissible reasons `dynamicReasons`
|
|
154
|
+
// (representation/model.ts) names -- a value the program itself declared
|
|
155
|
+
// `any`/`unknown` and never narrowed, a thrown value, an unasserted
|
|
156
|
+
// `JSON.parse`, `ToString` of an unknown -- and for exactly those, "what is
|
|
157
|
+
// this at runtime" has no compile-time answer to give. The box already
|
|
158
|
+
// carries its own tag for precisely this question (`gea::Value`'s own doc
|
|
159
|
+
// comment), so this reads that tag; it never unpacks the payload, and it is
|
|
160
|
+
// never reached by a value that has a static type, because every other
|
|
161
|
+
// carrier above answers as a literal without consulting the value at all.
|
|
162
|
+
if (representation.kind === 'dynamic')
|
|
163
|
+
return dynamic(operand());
|
|
164
|
+
if (representation.kind !== 'tagged-union') {
|
|
165
|
+
const answer = typeofTextFor(representation);
|
|
166
|
+
return answer === null ? null : quote(answer);
|
|
167
|
+
}
|
|
168
|
+
const answers = [];
|
|
169
|
+
for (const [index, arm] of representation.arms.entries()) {
|
|
170
|
+
// Each arm is asked the same question this function answers, over that
|
|
171
|
+
// arm's own payload, rather than being restricted to the constant-only
|
|
172
|
+
// `typeofTextFor`. An arm may itself be an optional, a nested sum, or --
|
|
173
|
+
// the case that motivated this -- a `dynamic` box, and a sum with one
|
|
174
|
+
// such arm is still fully answerable: the discriminant says which arm is
|
|
175
|
+
// live, and that arm answers for itself. Refusing the whole union because
|
|
176
|
+
// one arm needs a runtime read would refuse a question the carrier can
|
|
177
|
+
// answer exactly.
|
|
178
|
+
const answer = typeofExpression(arm.value, () => `${operand()}.get<${index}>()`, quote, dynamic);
|
|
179
|
+
if (answer === null)
|
|
180
|
+
return null;
|
|
181
|
+
answers.push(answer);
|
|
182
|
+
}
|
|
183
|
+
const first = answers[0];
|
|
184
|
+
if (first === undefined)
|
|
185
|
+
return null;
|
|
186
|
+
// Arms that agree collapse: `number | float64` is `"number"` whichever arm is
|
|
187
|
+
// live, and dispatching on a discriminant to pick between two identical
|
|
188
|
+
// strings would emit a test whose two outcomes are the same value. This is
|
|
189
|
+
// not an optimization pass -- it is the same rule as the non-sum case, that
|
|
190
|
+
// an answer the carrier already decides is a constant. Comparing the
|
|
191
|
+
// RENDERED answers keeps this sound now that an arm may render a runtime
|
|
192
|
+
// read: two such reads name their own arm index, so they never compare equal
|
|
193
|
+
// to each other and only genuinely identical constants ever collapse.
|
|
194
|
+
if (answers.every((answer) => answer === first))
|
|
195
|
+
return first;
|
|
196
|
+
// Falls through to the last arm without testing it: the discriminant is
|
|
197
|
+
// always one of the arms, so a test there would have no branch to take when
|
|
198
|
+
// it failed.
|
|
199
|
+
const reversed = answers.slice().reverse();
|
|
200
|
+
let result = '';
|
|
201
|
+
for (const [offset, answer] of reversed.entries()) {
|
|
202
|
+
const index = answers.length - 1 - offset;
|
|
203
|
+
// `answer` is already a rendered expression -- `quote` was applied by the
|
|
204
|
+
// per-arm recursion above, which is the only place that knows whether an
|
|
205
|
+
// arm's answer is a literal at all.
|
|
206
|
+
result = offset === 0 ? answer : `${operand()}.is<${index}>() ? ${answer} : ${result}`;
|
|
207
|
+
}
|
|
208
|
+
return `(${result})`;
|
|
209
|
+
};
|
|
210
|
+
/**
|
|
211
|
+
* Whether this backend can answer `typeof` for a carrier.
|
|
212
|
+
*
|
|
213
|
+
* Implemented by asking `typeofExpression` rather than by re-listing the kinds
|
|
214
|
+
* it handles: a second list would be a second authority, and the two would
|
|
215
|
+
* eventually disagree about a nested carrier -- an optional over a boxed value
|
|
216
|
+
* is unanswerable for a reason the outer kind cannot see. The operand text and
|
|
217
|
+
* the quoting are placeholders because only the presence of an answer is being
|
|
218
|
+
* asked about, not its spelling.
|
|
219
|
+
*/
|
|
220
|
+
export const typeofIsAnswerable = (representation) => typeofExpression(representation, () => 'operand', (text) => text) !== null;
|
|
221
|
+
/** The carrier `cppConstantLiteral` needs to know a text is meant as a string literal rather than an identifier. */
|
|
222
|
+
const stringCarrier = { kind: 'string' };
|
|
223
|
+
const typeQueryTags = new Map([
|
|
224
|
+
['undefined', 'Undefined'],
|
|
225
|
+
['object', 'Object'],
|
|
226
|
+
['boolean', 'Boolean'],
|
|
227
|
+
['number', 'Number'],
|
|
228
|
+
['string', 'String'],
|
|
229
|
+
['function', 'Function'],
|
|
230
|
+
['symbol', 'Symbol'],
|
|
231
|
+
['bigint', 'BigInt']
|
|
232
|
+
]);
|
|
233
|
+
/** Null signals a string that typeof can never produce, not a fallback tag. */
|
|
234
|
+
export const typeofTagLiteral = (text) => {
|
|
235
|
+
const tag = typeQueryTags.get(text);
|
|
236
|
+
return tag === undefined ? null : `gea::Value::Tag::${tag}`;
|
|
237
|
+
};
|
|
238
|
+
export const typeofTagText = (representation, operand) => {
|
|
239
|
+
const expression = typeofExpression(representation, operand, (text) => {
|
|
240
|
+
const tag = typeofTagLiteral(text);
|
|
241
|
+
if (tag === null)
|
|
242
|
+
throw createCppEmitBlockedError(`runtime-helper:computation:typeof:${representationKey(representation)}`, `typeof published an unknown result ${text}`);
|
|
243
|
+
return tag;
|
|
244
|
+
}, (text) => `gea::host::detail::typeOfTag(${text})`);
|
|
245
|
+
if (expression === null)
|
|
246
|
+
throw createCppEmitBlockedError(`runtime-helper:computation:typeof:${representationKey(representation)}`, `typeof on a "${representation.kind}" carrier has no tag answer`);
|
|
247
|
+
return expression;
|
|
248
|
+
};
|
|
249
|
+
const quote = (text) => cppConstantLiteral(text, 'string', stringCarrier);
|
|
250
|
+
/**
|
|
251
|
+
* `typeof <union>.<member>` where the arms disagree about the member, from the
|
|
252
|
+
* per-arm answers `unionMemberTypeofReadsOf` settled.
|
|
253
|
+
*
|
|
254
|
+
* The same dispatch `typeofExpression` builds for a sum, over answers that
|
|
255
|
+
* came from the RECEIVER's arms rather than from the read's own carrier --
|
|
256
|
+
* which is the point: the read's carrier is the member type TypeScript gave
|
|
257
|
+
* the access, and on an arm that has no such member that type is an assertion
|
|
258
|
+
* the program made, not a fact. The discriminant is the fact.
|
|
259
|
+
*
|
|
260
|
+
* An `expando` arm is the one answer that is not settled before the program
|
|
261
|
+
* runs: a class declares no such member, so the only place one could be is the
|
|
262
|
+
* runtime property table, and asking it -- and then asking the boxed result
|
|
263
|
+
* its own tag -- is exact. This is not a value being boxed to get an answer;
|
|
264
|
+
* it is a lookup whose result never had a static type in the first place.
|
|
265
|
+
*
|
|
266
|
+
* Falls through to the last arm without testing it, exactly as the sum case
|
|
267
|
+
* does and for the same reason: the discriminant is always one of the arms.
|
|
268
|
+
*/
|
|
269
|
+
const unionMemberDispatchText = (answers, operand, member, constant, dynamic) => {
|
|
270
|
+
const key = `gea::PropertyKey::string(${cppStringLiteral(member)})`;
|
|
271
|
+
const rendered = answers.map((answer, index) => answer.kind === 'constant' ? constant(answer.answer) : dynamic(`gea::nativeDynamicGet(${operand}.get<${index}>(), ${key})`));
|
|
272
|
+
if (rendered.length === 0)
|
|
273
|
+
return null;
|
|
274
|
+
let result = '';
|
|
275
|
+
for (const [offset, answer] of rendered.slice().reverse().entries()) {
|
|
276
|
+
const index = rendered.length - 1 - offset;
|
|
277
|
+
result = offset === 0 ? answer : `${operand}.is<${index}>() ? ${answer} : ${result}`;
|
|
278
|
+
}
|
|
279
|
+
return `(${result})`;
|
|
280
|
+
};
|
|
281
|
+
/** The string form; see `unionMemberDispatchText`. `std::string` for the reason `typeofText` states. */
|
|
282
|
+
export const unionMemberTypeofText = (answers, operand, member) => {
|
|
283
|
+
const expression = unionMemberDispatchText(answers, operand, member, quote, (text) => `gea::host::detail::typeOf(${text})`);
|
|
284
|
+
if (expression === null)
|
|
285
|
+
throw createCppEmitBlockedError('runtime-helper:computation:typeof:union-member', 'a union member typeof read claimed no arms to answer for');
|
|
286
|
+
return `std::string(${expression})`;
|
|
287
|
+
};
|
|
288
|
+
/** The tag form, for a result only equality tests consume; see `typeofTagText`. */
|
|
289
|
+
export const unionMemberTypeofTagText = (answers, operand, member) => {
|
|
290
|
+
const expression = unionMemberDispatchText(answers, operand, member, (text) => {
|
|
291
|
+
const tag = typeofTagLiteral(text);
|
|
292
|
+
if (tag === null)
|
|
293
|
+
throw createCppEmitBlockedError('runtime-helper:computation:typeof:union-member', `typeof published an unknown result ${text}`);
|
|
294
|
+
return tag;
|
|
295
|
+
}, (text) => `gea::host::detail::typeOfTag(${text})`);
|
|
296
|
+
if (expression === null)
|
|
297
|
+
throw createCppEmitBlockedError('runtime-helper:computation:typeof:union-member', 'a union member typeof read claimed no arms to answer for');
|
|
298
|
+
return expression;
|
|
299
|
+
};
|
|
300
|
+
/**
|
|
301
|
+
* The C++ expression for `typeof operand`, or a refusal naming the carrier it
|
|
302
|
+
* has no answer for.
|
|
303
|
+
*
|
|
304
|
+
* The refusal is by name and not a fallback, because the fallback would be a
|
|
305
|
+
* guess: a `typeof` that returns the wrong string is a narrowing that silently
|
|
306
|
+
* takes the wrong branch, which is worse than a program that does not build.
|
|
307
|
+
*/
|
|
308
|
+
export const typeofText = (representation, operand) => {
|
|
309
|
+
const expression = typeofExpression(representation, operand, quote);
|
|
310
|
+
if (expression === null) {
|
|
311
|
+
throw createCppEmitBlockedError(`runtime-helper:computation:typeof:${representationKey(representation)}`, `typeof on a "${representation.kind}" carrier has no answer in this emitter: nothing states what such a value is at runtime`);
|
|
312
|
+
}
|
|
313
|
+
// This result has the string carrier even when its runtime branch selects
|
|
314
|
+
// between C++ literals. Deferral can inline it straight into an equality;
|
|
315
|
+
// without the carrier construction C++ compares literal addresses there.
|
|
316
|
+
return `std::string(${expression})`;
|
|
317
|
+
};
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import type { Representation } from '../../representation/model.js';
|
|
2
|
+
import type { IrValueId } from '../../identity/ids.js';
|
|
3
|
+
import type { DefineOwnPropertyOperation, GetOperation, IrBody, IrOperand, SetOperation } from '../../ir/model.js';
|
|
4
|
+
import { type EmitContext, type PrototypeMethodRead, type UnionMemberTypeofRead, type UnionMethodRead } from './emit-context.js';
|
|
5
|
+
/**
|
|
6
|
+
* Whether a read off a union whose every arm is a typed array is a deferred
|
|
7
|
+
* `TypedArray.prototype` method read, and which one.
|
|
8
|
+
*
|
|
9
|
+
* The arms differ in what they store, never in what the method means, so the
|
|
10
|
+
* whole union is one receiver for the call that follows -- which is why the
|
|
11
|
+
* carrier travels with the claim: the invoker dispatches the arm.
|
|
12
|
+
*
|
|
13
|
+
* Stated once; `taggedUnionGetText` and the prototype-read walk both ask it.
|
|
14
|
+
*/
|
|
15
|
+
export declare const deferredTypedArrayUnionMethodClaim: (staticKeyTexts: ReadonlyMap<IrValueId, string>, receiver: IrOperand, key: IrOperand) => PrototypeMethodRead | null;
|
|
16
|
+
/**
|
|
17
|
+
* The receiver a tagged union's per-arm class-method read has to keep, or
|
|
18
|
+
* `null` -- the union twin of `classMethodValueReceiverClaim`.
|
|
19
|
+
*
|
|
20
|
+
* A class arm materializes a method value whose physical convention leads with
|
|
21
|
+
* the arm's own receiver, while the read's receiver is the whole union, so the
|
|
22
|
+
* call that consumes it has to be handed that union back
|
|
23
|
+
* (`EmitContext.directCallReceivers`).
|
|
24
|
+
*
|
|
25
|
+
* `deferredUnionMethodArms` is ASKED rather than restated: a union whose EVERY
|
|
26
|
+
* arm answers this key is claimed whole, before the per-arm walk runs, and
|
|
27
|
+
* only a union it declines reaches `armRuntimeFieldText`. Its text arguments
|
|
28
|
+
* do not affect whether it claims, so passing empty ones asks exactly the
|
|
29
|
+
* question without spelling anything.
|
|
30
|
+
*/
|
|
31
|
+
export declare const unionClassMethodValueReceiverClaim: (ctx: EmitContext, operation: GetOperation) => IrOperand | null;
|
|
32
|
+
/** The live arm's own value, and the discriminant that says it is live -- shared with `emit-in.ts`'s per-arm `k in u` dispatch, the one other file that needs to name an arm without owning this file's field/element machinery. */
|
|
33
|
+
export declare const armAt: (receiverText: string, index: number) => string;
|
|
34
|
+
export declare const armIs: (receiverText: string, index: number) => string;
|
|
35
|
+
export interface UnionPropertyLeaf {
|
|
36
|
+
readonly representation: Representation;
|
|
37
|
+
readonly text: string;
|
|
38
|
+
readonly test: string;
|
|
39
|
+
}
|
|
40
|
+
export declare const unionPropertyLeaves: (representation: Representation, text: string, test?: string) => readonly UnionPropertyLeaf[];
|
|
41
|
+
export declare const dispatchedLeafExpression: (leaves: readonly UnionPropertyLeaf[], expressions: readonly string[]) => string | null;
|
|
42
|
+
/**
|
|
43
|
+
* Whether every arm of this union is a typed array -- the one shape for which
|
|
44
|
+
* a COMPUTED key needs no reconciliation between arms.
|
|
45
|
+
*
|
|
46
|
+
* `TypedArray` is a union of nine views (`@types/three` states it, and so does
|
|
47
|
+
* every other package that names the family), and the arms differ only in
|
|
48
|
+
* element WIDTH: `canonicalMembersOf` keeps all nine because `int8` and
|
|
49
|
+
* `float32` really are different carriers. But `TypedArray::elementAt`
|
|
50
|
+
* returns `double` for all eight domains whatever the view holds, so a
|
|
51
|
+
* per-arm dispatch of `view[ i ]` produces the identical C++ type on every
|
|
52
|
+
* arm and there is nothing to widen, narrow or reconcile.
|
|
53
|
+
*
|
|
54
|
+
* That is exactly the reconciliation `manifest/capabilities.ts` cites as the
|
|
55
|
+
* reason the flat `tagged-union:get:true` claim is withheld -- "a per-arm
|
|
56
|
+
* dispatch of a runtime-only key would additionally have to reconcile
|
|
57
|
+
* `array-object`/`dictionary`-shaped arms". A union with no such arm does not
|
|
58
|
+
* owe that, so it is claimed under its own refined key rather than by
|
|
59
|
+
* widening the general one.
|
|
60
|
+
*/
|
|
61
|
+
export declare const taggedUnionHasOnlyTypedArrayArms: (representation: Representation) => boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Whether every arm of a `tagged-union` receiver is a `dictionary` -- the one
|
|
64
|
+
* other shape (besides "every arm a typed array") a COMPUTED key owes no
|
|
65
|
+
* ARM-KIND reconciliation for. Every `dictionary` renders through the
|
|
66
|
+
* identical `member.read(key)`/`member.has(key)` pair regardless of its
|
|
67
|
+
* value type, so the only reconciliation left is the ordinary per-arm VALUE
|
|
68
|
+
* one `taggedUnionGetText`'s static-key dispatch already performs -- here
|
|
69
|
+
* done with `widenedStoreText` instead of `narrowedLoadText`, because a
|
|
70
|
+
* dictionary's `value` is the concrete type actually stored and the read's
|
|
71
|
+
* published carrier is typically the WIDER union of the arms' value types
|
|
72
|
+
* (`Record<string, number> | Record<string, string>` reads as `number |
|
|
73
|
+
* string`), which is a widen, not a narrow.
|
|
74
|
+
*/
|
|
75
|
+
export declare const taggedUnionHasOnlyDictionaryArms: (representation: Representation) => boolean;
|
|
76
|
+
/**
|
|
77
|
+
* Whether every arm of a `tagged-union` receiver is an `array-object` -- the
|
|
78
|
+
* third shape (besides "every arm a typed array" and "every arm a
|
|
79
|
+
* dictionary") a COMPUTED key owes no ARM-KIND reconciliation for. Every
|
|
80
|
+
* `array-object` renders through the identical `elementAt`/`hasElement` pair
|
|
81
|
+
* (`emit-carrier-members.ts`'s `arrayAccessText`) regardless of what its OWN
|
|
82
|
+
* element type is, so the only reconciliation left is the ordinary per-arm
|
|
83
|
+
* VALUE one -- widening each arm's own element into the published union the
|
|
84
|
+
* same way `dictionaryArmReadText` widens a dictionary arm's value.
|
|
85
|
+
* `[T, ParamIndexMap][] | [T, Params][]` (hono's own router match result,
|
|
86
|
+
* `Result<T>`'s first slot -- two element arrays differing only in their
|
|
87
|
+
* element's second tuple slot) is exactly this.
|
|
88
|
+
*/
|
|
89
|
+
export declare const taggedUnionHasOnlyArrayObjectArms: (representation: Representation) => boolean;
|
|
90
|
+
/**
|
|
91
|
+
* Whether a member read through a tagged union is a deferred method read whose
|
|
92
|
+
* every arm names a concrete body, and which bodies those are.
|
|
93
|
+
*
|
|
94
|
+
* The read itself has no single callable ABI -- each arm keeps its own
|
|
95
|
+
* receiver and covariant result -- so the following call dispatches by union
|
|
96
|
+
* tag. What travels is the arm PATH and the body, never a spelled receiver:
|
|
97
|
+
* `emit-callable.ts` folds `armAt`/`armIs` down the path from the union's own
|
|
98
|
+
* operand at the call, which is the first point where that operand has a name.
|
|
99
|
+
*
|
|
100
|
+
* Stated once; `taggedUnionGetText` and the prepass walk both ask it.
|
|
101
|
+
*/
|
|
102
|
+
/**
|
|
103
|
+
* `x.toString()` where `x` is a tagged union -- hono's own `input =
|
|
104
|
+
* input.toString()` over `string | URL`.
|
|
105
|
+
*
|
|
106
|
+
* This is the EXPLICIT spelling of the operation `${x}` already renders for
|
|
107
|
+
* the same carrier, so it is answered by the same table (`toStringTextOver`),
|
|
108
|
+
* which descends per arm: a string arm is itself (22.1.3.29 returns the
|
|
109
|
+
* primitive), a class arm with its own `toString` calls that method, a class
|
|
110
|
+
* without one is the "[object Object]" tag. Routing it through the per-arm
|
|
111
|
+
* FIELD walk instead is what refused it -- there is no field named "toString"
|
|
112
|
+
* on a string.
|
|
113
|
+
*
|
|
114
|
+
* Fail-closed in two ways, both because `x.toString()` is NOT ToString(x):
|
|
115
|
+
*
|
|
116
|
+
* - a nullish arm answers `null`/`undefined` to ToString and throws a
|
|
117
|
+
* TypeError to `.toString()`, so any arm that can be absent declines the
|
|
118
|
+
* whole claim rather than printing the text "null";
|
|
119
|
+
* - `explicit` stays false, which is what keeps a symbol arm refusing:
|
|
120
|
+
* `String(sym)` is legal and `sym.toString()`'s own 20.4.3.3 is not the
|
|
121
|
+
* same function this table would render for it.
|
|
122
|
+
*
|
|
123
|
+
* A union `toStringTextOver` cannot render at all declines here too, so the
|
|
124
|
+
* arm that has no ToString keeps its own named refusal from the field walk.
|
|
125
|
+
*/
|
|
126
|
+
export declare const deferredUnionToStringClaim: (ctx: EmitContext, receiver: IrOperand, key: IrOperand) => PrototypeMethodRead | null;
|
|
127
|
+
/** The call half of `deferredUnionToStringClaim`, fused with the read above. */
|
|
128
|
+
export declare const unionToStringCallText: (ctx: EmitContext, carrier: Representation, receiverText: string) => string;
|
|
129
|
+
export declare const deferredUnionMethodClaim: (ctx: EmitContext, receiver: IrOperand, key: IrOperand) => UnionMethodRead | null;
|
|
130
|
+
/**
|
|
131
|
+
* Reading a STATIC key off a tagged-union receiver, or `null` when this is not
|
|
132
|
+
* that case (a different receiver kind, or a computed key this file declines).
|
|
133
|
+
*
|
|
134
|
+
* Every arm is resolved and, where its declared field carrier differs from
|
|
135
|
+
* what this GET publishes, reconciled through `convertedValueText` -- the
|
|
136
|
+
* general reconciliation `emit-bindings.ts`'s own store and `emit-return.ts`'s
|
|
137
|
+
* own ABI result already ask, needed here in both directions an arm can
|
|
138
|
+
* disagree with the union's own published read: narrower (an arm's field is
|
|
139
|
+
* one union the published read narrows further) and wider (an arm's field is
|
|
140
|
+
* a plain value the published read still states as the whole tuple-union,
|
|
141
|
+
* `request.ts`'s own `Result<T>`). An arm that resolves to nothing, or whose
|
|
142
|
+
* field cannot be reconciled to the published carrier by any means including
|
|
143
|
+
* a dynamic boundary (`armDynamicFieldText`), refuses the WHOLE union by
|
|
144
|
+
* name: a dispatch that silently dropped one arm's read would be a wrong
|
|
145
|
+
* answer for
|
|
146
|
+
* every value that happened to be that arm, which is worse than refusing to
|
|
147
|
+
* compile.
|
|
148
|
+
*/
|
|
149
|
+
export declare const taggedUnionGetText: (ctx: EmitContext, lines: string[], operation: GetOperation) => string | null;
|
|
150
|
+
/**
|
|
151
|
+
* Writing a STATIC key onto a tagged-union receiver -- `set` and
|
|
152
|
+
* `define-own-property` alike, for the identical reason
|
|
153
|
+
* `emit-properties.ts`'s `emitFieldStoreLines` treats the two as one write:
|
|
154
|
+
* a definition with no descriptor this backend cannot spell already refused
|
|
155
|
+
* upstream (`ir/lower-property.ts`), and a default data descriptor IS an
|
|
156
|
+
* ordinary assignment.
|
|
157
|
+
*
|
|
158
|
+
* The dispatch is a real `if`/`else if`/`else` over the union's own arms
|
|
159
|
+
* rather than one expression, because a store is a statement: every arm but
|
|
160
|
+
* the last is tested, and the last is unconditional, which is sound only
|
|
161
|
+
* because the union's own tag is guaranteed to be one of them.
|
|
162
|
+
*/
|
|
163
|
+
export declare const emitTaggedUnionSet: (ctx: EmitContext, lines: string[], operation: SetOperation | DefineOwnPropertyOperation) => boolean;
|
|
164
|
+
/**
|
|
165
|
+
* Member reads whose ONLY consumer is `typeof`, off a union whose arms
|
|
166
|
+
* disagree about the member -- see `EmitContext.unionMemberTypeofReads`.
|
|
167
|
+
*
|
|
168
|
+
* Three conditions keep this from taking over reads the ordinary path already
|
|
169
|
+
* renders, and all three are about not moving output that was already right:
|
|
170
|
+
*
|
|
171
|
+
* - at least one arm's member must be a PROTOTYPE METHOD. Those are the only
|
|
172
|
+
* members this backend can call but never hand over as a value, so they are
|
|
173
|
+
* the only reason a read like this has nothing to produce. Every other union
|
|
174
|
+
* either renders the member or refuses for a reason of its own.
|
|
175
|
+
* - at least one arm must have no declared field site, which is the arm that
|
|
176
|
+
* disagrees.
|
|
177
|
+
* - `Object.prototype`'s own names are excluded: they are on every arm, so
|
|
178
|
+
* they are never the disagreement.
|
|
179
|
+
*/
|
|
180
|
+
export declare const unionMemberTypeofReadsOf: (ctx: EmitContext, body: IrBody) => ReadonlyMap<IrValueId, UnionMemberTypeofRead>;
|
|
181
|
+
export declare const unionMethodReadsOf: (ctx: EmitContext, body: IrBody) => ReadonlyMap<IrValueId, UnionMethodRead>;
|