@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,320 @@
|
|
|
1
|
+
import { carriesMergeAbsence, carriesNoAbsence, carriesUndefined, contributesOnlyAbsence, contributesNoTruthiness, isBooleanShapedMergeTarget, isDeadMergeContribution, mergesAsTruthiness, partialDeadMergeArms, representationKey } from '../representation/model.js';
|
|
2
|
+
import { mergeFalsyAbsence, mergeMaterialization, mergeTaggedAbsence } from '../representation/merge.js';
|
|
3
|
+
import { operandOf } from '../semantics/model/operands.js';
|
|
4
|
+
import { IrLoweringBlockedError } from './lower-graph.js';
|
|
5
|
+
import { convertOrDrift, convertTo, resolveRequiredOperand } from './lower-operands.js';
|
|
6
|
+
/**
|
|
7
|
+
* A merge arm the census cannot bring into the merge's carrier blocks the
|
|
8
|
+
* body. This is the certification of a merge: preflight used to rebuild
|
|
9
|
+
* `mergeIncoming`'s decision tree over the semantic graph and refuse the
|
|
10
|
+
* same pairs one stage earlier (`buildMergeNarrowingObligations`, deleted in
|
|
11
|
+
* one authority for narrowing); with one authority left,
|
|
12
|
+
* "no node" is a refusal here rather than a drift row the printer's own
|
|
13
|
+
* chain would answer, because nothing downstream is entitled to decide it.
|
|
14
|
+
*/
|
|
15
|
+
const blockedMergeArm = (operation, role, from, to) => new IrLoweringBlockedError(`merge arm "${role}" of ${operation.family === 'computation' ? `${operation.form} ${'operator' in operation ? operation.operator : ''}`.trim() : operation.family}: ` +
|
|
16
|
+
`no conversion is installed from ${representationKey(from)} into ${representationKey(to)}`);
|
|
17
|
+
/**
|
|
18
|
+
* Every live arm of a rebuilt union must have somewhere to go: the merge's
|
|
19
|
+
* own key, a census node, or -- for the `&&` rebuild only -- a boolean-shaped
|
|
20
|
+
* merge, which `emitMergeLiveArmRebuild` renders by `ToBoolean`, total over
|
|
21
|
+
* every carrier. The `??` rebuild admits no `ToBoolean` shortcut: its kept
|
|
22
|
+
* branch proved the value PRESENT, and its payload arms are values, not
|
|
23
|
+
* truthiness. The same two rules preflight's deleted `partialMergeArmsInstalled`
|
|
24
|
+
* and `presentOptionalMergeInstalled` applied.
|
|
25
|
+
*/
|
|
26
|
+
const requireLiveArmsConvertible = (ctx, operation, role, arms, merged, admitToBoolean) => {
|
|
27
|
+
if (admitToBoolean && isBooleanShapedMergeTarget(merged))
|
|
28
|
+
return;
|
|
29
|
+
const mergedKey = representationKey(merged);
|
|
30
|
+
for (const arm of arms) {
|
|
31
|
+
if (representationKey(arm) === mergedKey)
|
|
32
|
+
continue;
|
|
33
|
+
if (ctx.program.conversions.nodeFor(arm, merged).capability.kind === 'never')
|
|
34
|
+
throw blockedMergeArm(operation, role, arm, merged);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* One incoming value of a merge, in the carrier the merge publishes.
|
|
39
|
+
*
|
|
40
|
+
* A phi's incoming values must already carry the phi's own carrier
|
|
41
|
+
* (`ir/verify.ts`), so wherever an arm does not, the carrier change is an
|
|
42
|
+
* explicit instruction in *that arm's own block* rather than something the phi
|
|
43
|
+
* assumes. `a ?? b` is the standing example: it keeps `a` on the branch where
|
|
44
|
+
* `a` was proven present, and there the merge publishes the payload while the
|
|
45
|
+
* operand still carries the optional.
|
|
46
|
+
*
|
|
47
|
+
* A constant whose declared type is uninhabited is materialized directly in the
|
|
48
|
+
* merge's carrier instead. `never` is the checker's answer to "does control
|
|
49
|
+
* reach here", not to "what storage does this value occupy", and the two part
|
|
50
|
+
* company at exactly one idiom: `typeof X !== 'undefined' ? X : (undefined as
|
|
51
|
+
* unknown as typeof X)`, the ambient-global guard. The false arm narrows to
|
|
52
|
+
* `never` *because* the declared type excludes `undefined` -- yet that arm is
|
|
53
|
+
* the one that runs whenever the host did not inject `X`. The value really is
|
|
54
|
+
* absent and the merge is what states which carrier holds it, so the constant
|
|
55
|
+
* is minted there; `cppConstantLiteral` then spells that carrier's absent value
|
|
56
|
+
* or refuses outright if it has none.
|
|
57
|
+
*
|
|
58
|
+
* A *reference* whose declared type is inhabited can still be dead on this
|
|
59
|
+
* one arm, the identical fact one step less literal: `a && a.b` keeps `a` on
|
|
60
|
+
* the branch where `a` tested falsy, and when `a`'s own carrier is an Object
|
|
61
|
+
* (a class instance, a record, a native reference, an array, a callable, ...)
|
|
62
|
+
* it has no falsy state at all -- ECMAScript's `ToBoolean` never answers
|
|
63
|
+
* `false` for one. Only `a`'s own absence, if it has one, can be why this
|
|
64
|
+
* branch runs; the payload contributes nothing, exactly the way the
|
|
65
|
+
* constant's `never` type contributes nothing above. `role === 'kept'` names
|
|
66
|
+
* this arm precisely (`ir/lower.ts` passes it only for `&&`/`||`/`??`'s
|
|
67
|
+
* reused side, never the freshly-evaluated one), `operator === '&&'` is the
|
|
68
|
+
* one direction where the reachable state is falsy rather than truthy/
|
|
69
|
+
* present, and `carriesMergeAbsence` is what the merge's own carrier must
|
|
70
|
+
* satisfy for "materialize the absence" to have anywhere to land -- an
|
|
71
|
+
* `optional`, or a `native-handle`, which `optional.ts` collapses `T | null`
|
|
72
|
+
* onto precisely because it self-encodes absence -- and both it and
|
|
73
|
+
* `contributesOnlyAbsence` are the facts this one authority asks; preflight's
|
|
74
|
+
* `buildMergeNarrowingObligations` asked the same until Phase 1.6 deleted it.
|
|
75
|
+
*
|
|
76
|
+
* The operand's own null counts as that nothing. A bare
|
|
77
|
+
* `class-ref(shared-refcount)` -- the collapsed form of `T | null` -- is the
|
|
78
|
+
* one carrier whose falsy state is a value rather than a hole, and it is a
|
|
79
|
+
* value the merge's absence already spells; `contributesOnlyAbsence` is the
|
|
80
|
+
* whole-operand reading that admits it, where the per-arm
|
|
81
|
+
* `isDeadMergeContribution` beside it must not.
|
|
82
|
+
*/
|
|
83
|
+
export const mergeIncoming = (ctx, block, lineage, operation, role, operand, representation) => {
|
|
84
|
+
const materialization = mergeMaterialization(ctx.graph.structuralTypes, ctx.constantDeriver, operand, representation);
|
|
85
|
+
if (materialization === 'constant' && operand.source.kind === 'constant') {
|
|
86
|
+
return { value: ctx.builder.constant(block, lineage, operand.source.text, operand.source.literal, representation), representation };
|
|
87
|
+
}
|
|
88
|
+
if (materialization === 'absence') {
|
|
89
|
+
// A tagged union can carry both absences; the arm that contributed
|
|
90
|
+
// `undefined` (a `void` default, an uninhabited branch) must land in the
|
|
91
|
+
// `undefined` arm, or `[w = c()]` on a short array prints `null`.
|
|
92
|
+
const absence = representation.kind === 'optional' ? representation.absence : carriesUndefined(representation) ? 'undefined' : 'null';
|
|
93
|
+
return { value: ctx.builder.constant(block, lineage, absence, absence, representation), representation };
|
|
94
|
+
}
|
|
95
|
+
// The same fact one step up from a scalar: an arm whose declared type is
|
|
96
|
+
// uninhabited is materialized in the merge's carrier rather than converted
|
|
97
|
+
// into it. `xs ? xs : []` is the standing idiom -- the checker types the
|
|
98
|
+
// literal `never[]` and the conditional `T[]` -- and a conversion is the
|
|
99
|
+
// wrong instruction for it in both directions: `array-object(undefined)` and
|
|
100
|
+
// `array-object(T)` are different C++ types that cannot alias, so nothing
|
|
101
|
+
// could reinterpret one as the other, and there is nothing to reinterpret
|
|
102
|
+
// either, because an array of the uninhabited type is empty. The empty array
|
|
103
|
+
// OF THE MERGE'S OWN ELEMENT TYPE is the whole value, so it is built here, in
|
|
104
|
+
// this arm's own block, exactly as the constant above is.
|
|
105
|
+
//
|
|
106
|
+
// What this gives up is reference identity with the arm's own array, on the
|
|
107
|
+
// one arm where nothing can observe it: two `never[]`s differ in no element,
|
|
108
|
+
// no length and no future write, so only a `===` against the arm's own
|
|
109
|
+
// binding could tell them apart -- and that arm previously did not lower at
|
|
110
|
+
// all.
|
|
111
|
+
if (representation.kind === 'array-object' && materialization === 'empty-array') {
|
|
112
|
+
return { value: ctx.builder.allocateArrayObject(block, lineage, [], representation), representation };
|
|
113
|
+
}
|
|
114
|
+
// The same construction where the merge's carrier is a stated-native array
|
|
115
|
+
// instead of an `ArrayObject`: `path.match(/\/:/g) || []` (hono's
|
|
116
|
+
// `reg-exp-router/trie.ts:10` and `router.ts:132`) publishes
|
|
117
|
+
// `gea::runtime::regex::MatchResult`, which IS an `ArrayObject<std::string>`
|
|
118
|
+
// carrying 22.1.3.13's named members beside it. `mergeMaterialization` is
|
|
119
|
+
// what proved the empty one is a complete value of that carrier; the
|
|
120
|
+
// primitive is the record allocation an object/array literal with the same
|
|
121
|
+
// carrier already lowers through (`ir/lower-allocation.ts`), with no fields,
|
|
122
|
+
// because an empty array has none to install.
|
|
123
|
+
if (representation.kind === 'native-record-ref' && materialization === 'empty-array') {
|
|
124
|
+
return { value: ctx.builder.allocateRecord(block, lineage, [], representation), representation };
|
|
125
|
+
}
|
|
126
|
+
// An arm typed `never` (`Debug.fail()`) ran its own operations in its own
|
|
127
|
+
// block and never completes; the phi still needs an incoming value from
|
|
128
|
+
// that block, spelled as the dead `&&` arm below spells its own: an
|
|
129
|
+
// `undefined` converted into the merge carrier, which `emit.ts` renders as
|
|
130
|
+
// `gea::host::unreachableValue<T>()` when no load exists.
|
|
131
|
+
if (materialization === 'unreachable') {
|
|
132
|
+
const absent = { kind: 'undefined' };
|
|
133
|
+
const dead = { value: ctx.builder.constant(block, lineage, 'undefined', 'undefined', absent), representation: absent };
|
|
134
|
+
return convertOrDrift(ctx, block, lineage, operation.id, role, operand.ordinal, dead, representation);
|
|
135
|
+
}
|
|
136
|
+
const incoming = resolveRequiredOperand(ctx, block, lineage, operand);
|
|
137
|
+
const from = representationKey(incoming.representation);
|
|
138
|
+
const to = representationKey(representation);
|
|
139
|
+
if (from === to)
|
|
140
|
+
return incoming;
|
|
141
|
+
const falsyAbsence = mergeFalsyAbsence(incoming.representation, representation);
|
|
142
|
+
if (role === 'kept' &&
|
|
143
|
+
operation.family === 'computation' &&
|
|
144
|
+
operation.form === 'logical' &&
|
|
145
|
+
operation.operator === '&&' &&
|
|
146
|
+
falsyAbsence) {
|
|
147
|
+
return { value: ctx.builder.constant(block, lineage, falsyAbsence, falsyAbsence, representation), representation };
|
|
148
|
+
}
|
|
149
|
+
if (role === 'kept' &&
|
|
150
|
+
operation.family === 'computation' &&
|
|
151
|
+
operation.form === 'logical' &&
|
|
152
|
+
operation.operator === '&&' &&
|
|
153
|
+
carriesMergeAbsence(representation) &&
|
|
154
|
+
contributesOnlyAbsence(incoming.representation)) {
|
|
155
|
+
return { value: ctx.builder.constant(block, lineage, 'undefined', 'undefined', representation), representation };
|
|
156
|
+
}
|
|
157
|
+
// The kept operand has NO falsy state and the merge carries no absence for
|
|
158
|
+
// one to land in: `previousSibling && format & Flag` on a present `Node`.
|
|
159
|
+
// This branch never runs, and the checker already dropped the object from
|
|
160
|
+
// the expression's type. The phi still needs an incoming value from the
|
|
161
|
+
// block, so it gets the one thing a dead arm can honestly hold: an
|
|
162
|
+
// `undefined` converted into the merge carrier, which `emit.ts`'s convert
|
|
163
|
+
// renders as `gea::host::unreachableValue<T>()` when no load exists --
|
|
164
|
+
// the same rendering a default past an empty tuple already gets. Licensed
|
|
165
|
+
// by the identical predicate in `preflight/obligations-graph.ts`.
|
|
166
|
+
if (role === 'kept' &&
|
|
167
|
+
operation.family === 'computation' &&
|
|
168
|
+
operation.form === 'logical' &&
|
|
169
|
+
operation.operator === '&&' &&
|
|
170
|
+
isDeadMergeContribution(incoming.representation)) {
|
|
171
|
+
const absent = { kind: 'undefined' };
|
|
172
|
+
const dead = { value: ctx.builder.constant(block, lineage, 'undefined', 'undefined', absent), representation: absent };
|
|
173
|
+
return convertOrDrift(ctx, block, lineage, operation.id, role, operand.ordinal, dead, representation);
|
|
174
|
+
}
|
|
175
|
+
// The `||` mirror of the dead arm above: the kept operand has NO truthy
|
|
176
|
+
// state (`contributesNoTruthiness`), so `a || b` never publishes it.
|
|
177
|
+
// Licensed by the identical predicate in `preflight/obligations-graph.ts`.
|
|
178
|
+
if (role === 'kept' &&
|
|
179
|
+
operation.family === 'computation' &&
|
|
180
|
+
operation.form === 'logical' &&
|
|
181
|
+
operation.operator === '||' &&
|
|
182
|
+
contributesNoTruthiness(incoming.representation)) {
|
|
183
|
+
const absent = { kind: 'undefined' };
|
|
184
|
+
const dead = { value: ctx.builder.constant(block, lineage, 'undefined', 'undefined', absent), representation: absent };
|
|
185
|
+
return convertOrDrift(ctx, block, lineage, operation.id, role, operand.ordinal, dead, representation);
|
|
186
|
+
}
|
|
187
|
+
// The partial sibling of the whole-dead-arm bypass immediately above: SOME
|
|
188
|
+
// of `incoming`'s tagged-union arms are dead rather than all of them --
|
|
189
|
+
// `results[name]` typed `T[] | string`, where `T[]` (object-shaped, always
|
|
190
|
+
// truthy) can never be why this `&&` fell through but `string` (an empty
|
|
191
|
+
// one) can. `partialDeadMergeArms` states the split; `requireLiveArmsConvertible`
|
|
192
|
+
// above is what certifies it (every live arm has a census node or the
|
|
193
|
+
// merge is boolean-shaped), blocking the body otherwise. `MergeLiveArmRebuildOperation`
|
|
194
|
+
// (`ir/model.ts`) is why this needs its own operation rather than the
|
|
195
|
+
// general `convert` below: a dropped arm is sound only at a merge the
|
|
196
|
+
// checker's own narrowing already proved it for, not everywhere the same
|
|
197
|
+
// source/result pair recurs, so the proof travels as this operation's own
|
|
198
|
+
// `liveArms`, computed once here and never re-derived at emission.
|
|
199
|
+
const split = partialDeadMergeArms(incoming.representation);
|
|
200
|
+
if (split &&
|
|
201
|
+
role === 'kept' &&
|
|
202
|
+
operation.family === 'computation' &&
|
|
203
|
+
operation.form === 'logical' &&
|
|
204
|
+
operation.operator === '&&' &&
|
|
205
|
+
(!split.keptIsOptional || carriesMergeAbsence(representation) || mergeTaggedAbsence(incoming.representation, representation) !== null)) {
|
|
206
|
+
requireLiveArmsConvertible(ctx, operation, role, split.liveIndices.flatMap((index) => (split.payload.arms[index] ? [split.payload.arms[index].value] : [])), representation, true);
|
|
207
|
+
return {
|
|
208
|
+
value: ctx.builder.mergeLiveArmRebuild(block, lineage, incoming, representation, split.liveIndices, split.keptIsOptional, ctx.program.conversions),
|
|
209
|
+
representation
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
// `a ?? b` reaches its kept branch only after the presence test succeeded.
|
|
213
|
+
// When `a` is `Optional<TaggedUnion<...>>`, that proof removes the optional
|
|
214
|
+
// wrapper's absence while preserving every payload arm. Rebuild the live
|
|
215
|
+
// payload into the merge carrier at this site rather than installing the
|
|
216
|
+
// unsound global conversion `optional(T) -> U`, which would have no answer
|
|
217
|
+
// for absence at unguarded occurrences of the same pair.
|
|
218
|
+
if (role === 'kept' &&
|
|
219
|
+
operation.family === 'computation' &&
|
|
220
|
+
operation.form === 'logical' &&
|
|
221
|
+
operation.operator === '??' &&
|
|
222
|
+
incoming.representation.kind === 'optional' &&
|
|
223
|
+
incoming.representation.payload.kind === 'tagged-union') {
|
|
224
|
+
requireLiveArmsConvertible(ctx, operation, role, incoming.representation.payload.arms.map((arm) => arm.value), representation, false);
|
|
225
|
+
return {
|
|
226
|
+
value: ctx.builder.mergeLiveArmRebuild(block, lineage, incoming, representation, incoming.representation.payload.arms.map((_, index) => index), false, ctx.program.conversions),
|
|
227
|
+
representation
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
// A `&&` whose merged type is a plain `boolean`: the kept operand is here
|
|
231
|
+
// only as its own truthiness, which is the very question `&&` asked of it.
|
|
232
|
+
// `object && object.isObject3D` over three's `Object3D` is the shape -- the
|
|
233
|
+
// checker collapsed the whole expression to `boolean`, so no VALUE of the
|
|
234
|
+
// kept operand survives to be converted, only its `ToBoolean`.
|
|
235
|
+
// `mergesAsTruthiness` is the identical fact
|
|
236
|
+
// `preflight/obligations-graph.ts` licenses this with, and the `test`
|
|
237
|
+
// operation renders through `emit-presence.ts`'s `booleanTestText`, which
|
|
238
|
+
// is total over every carrier -- including a nullable `class-ref`, whose
|
|
239
|
+
// truthiness is exactly its presence.
|
|
240
|
+
//
|
|
241
|
+
// LAST of the three, on purpose. The whole-dead bypass above materializes an
|
|
242
|
+
// absence where the merge has somewhere to hold one, and the partial-arm
|
|
243
|
+
// rebuild converts each still-live arm on its own; both are strictly more
|
|
244
|
+
// precise than one `ToBoolean` over the operand, and both already covered
|
|
245
|
+
// the programs that reach them. This answers only what neither did.
|
|
246
|
+
if (role === 'kept' &&
|
|
247
|
+
operation.family === 'computation' &&
|
|
248
|
+
operation.form === 'logical' &&
|
|
249
|
+
operation.operator === '&&' &&
|
|
250
|
+
mergesAsTruthiness(representation)) {
|
|
251
|
+
return { value: ctx.builder.test(block, lineage, incoming), representation };
|
|
252
|
+
}
|
|
253
|
+
// Which arms the merge's own test proves present: `a || b` and `a ?? b`
|
|
254
|
+
// keep `a` only when it is truthy or non-nullish, and a default keeps its
|
|
255
|
+
// extraction only past the `is-defined` guard. A conditional's arm, or the
|
|
256
|
+
// falsy operand `&&` keeps, is chosen by something else.
|
|
257
|
+
const guarded = (operation.family === 'computation' &&
|
|
258
|
+
operation.form === 'logical' &&
|
|
259
|
+
(operation.operator === '||' || operation.operator === '??') &&
|
|
260
|
+
role === 'kept') ||
|
|
261
|
+
(operation.family === 'destructuring' && operation.form === 'default-value' && role === 'extracted');
|
|
262
|
+
const converted = convertTo(ctx, block, lineage, incoming, representation, guarded ? 'guard' : 'merge-arm');
|
|
263
|
+
if (converted !== null)
|
|
264
|
+
return converted;
|
|
265
|
+
// The general form of the `optional(tagged-union)` rebuild above, and the
|
|
266
|
+
// last thing asked rather than the first: a guarded arm whose payload -- not
|
|
267
|
+
// the optional around it -- is what the merge's carrier accepts.
|
|
268
|
+
//
|
|
269
|
+
// `(options?.onError ?? console.error)(e)` (node-server's `websocket.ts`) is
|
|
270
|
+
// the standing shape. TypeScript reduces the merged type to `console.error`'s
|
|
271
|
+
// own `(...data: any[]) => void`, because the positional handler really is
|
|
272
|
+
// assignable to it, so the merge publishes that one frame; the kept operand
|
|
273
|
+
// still carries `optional((any) => void)` because that is what the FIELD
|
|
274
|
+
// holds. Both halves are already installed as census nodes -- the presence
|
|
275
|
+
// load `optional(T) -> T`, and `T -> U`, the callable adapter a conditional
|
|
276
|
+
// between the same two functions already lowers through -- and the pair
|
|
277
|
+
// `optional(T) -> U` is not, deliberately: it has no answer for absence at
|
|
278
|
+
// the unguarded occurrences of the same pair, which is precisely why the
|
|
279
|
+
// rebuild above refuses to install it globally.
|
|
280
|
+
//
|
|
281
|
+
// What licenses composing them here is `guarded`, already computed above:
|
|
282
|
+
// `??` reached this branch past a nullish test, `||` past a truthiness test
|
|
283
|
+
// (an absent optional is falsy, so truthy proves present too), and a
|
|
284
|
+
// destructuring default past its own `is-defined` guard. The presence is the
|
|
285
|
+
// branch's, so the unwrap is branch-local -- the same thing the constant and
|
|
286
|
+
// empty-array materializations above are -- and neither step is a new
|
|
287
|
+
// capability.
|
|
288
|
+
if (guarded && incoming.representation.kind === 'optional') {
|
|
289
|
+
const present = convertTo(ctx, block, lineage, incoming, incoming.representation.payload, 'guard');
|
|
290
|
+
const widened = present === null ? null : convertTo(ctx, block, lineage, present, representation, 'merge-arm');
|
|
291
|
+
if (widened !== null)
|
|
292
|
+
return widened;
|
|
293
|
+
}
|
|
294
|
+
// The `??` mirror of the dead KEPT arms above, on the other side of the
|
|
295
|
+
// operator: `a ?? b` evaluates `b` only where `a` was nullish, and a kept
|
|
296
|
+
// operand whose carrier has no absent state at all was never nullish, so this
|
|
297
|
+
// arm never runs.
|
|
298
|
+
//
|
|
299
|
+
// node-server's `websocket.ts` module body is the shape:
|
|
300
|
+
// `globalThis.CloseEvent ?? class extends Event {...}`, where the program's
|
|
301
|
+
// own global read carries a bare `constructor-family`. The fallback class is
|
|
302
|
+
// a SECOND, unrelated program class, and the conversion asked for between the
|
|
303
|
+
// two is a nominal identity C++ has no way to state -- which is the right
|
|
304
|
+
// refusal for a value this arm never produces.
|
|
305
|
+
//
|
|
306
|
+
// Asked LAST, after the ordinary conversion has already been tried and
|
|
307
|
+
// failed, for the same reason `mergesAsTruthiness` above is: an arm that
|
|
308
|
+
// really does convert keeps converting, so this only ever turns a refusal
|
|
309
|
+
// into the dead value, never a working merge into one.
|
|
310
|
+
if (role === 'taken' && operation.family === 'computation' && operation.form === 'logical' && operation.operator === '??') {
|
|
311
|
+
const kept = operandOf(operation, 'left');
|
|
312
|
+
const keptCarrier = kept?.source.kind === 'result' ? ctx.plan.selected.get(kept.source.result) : undefined;
|
|
313
|
+
if (keptCarrier && carriesNoAbsence(keptCarrier)) {
|
|
314
|
+
const absent = { kind: 'undefined' };
|
|
315
|
+
const dead = { value: ctx.builder.constant(block, lineage, 'undefined', 'undefined', absent), representation: absent };
|
|
316
|
+
return convertOrDrift(ctx, block, lineage, operation.id, role, operand.ordinal, dead, representation);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
throw blockedMergeArm(operation, role, incoming.representation, representation);
|
|
320
|
+
};
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import type { DeclarationId, FunctionId, IrValueId, OperationId, ResultRole, SemanticResultId } from '../identity/ids.js';
|
|
2
|
+
import type { ConversionCensus } from '../conversion/nodes.js';
|
|
3
|
+
import type { ConversionNode } from '../conversion/algebra.js';
|
|
4
|
+
import type { ClassLayout } from '../projection/classes.js';
|
|
5
|
+
import type { SlotCensus } from '../projection/slots.js';
|
|
6
|
+
import type { RepresentationDeriver } from '../representation/derive.js';
|
|
7
|
+
import { type CallableAbi, type RecordField, type Representation } from '../representation/model.js';
|
|
8
|
+
import type { SealedRepresentationPlan } from '../representation/plan.js';
|
|
9
|
+
import type { SemanticGraph } from '../semantics/model/graph.js';
|
|
10
|
+
import { type SemanticOperand } from '../semantics/model/operands.js';
|
|
11
|
+
import type { SemanticOperation } from '../semantics/model/operations.js';
|
|
12
|
+
import type { IrBodyBuilder } from './build.js';
|
|
13
|
+
import type { PendingShortCircuit } from './lower-short-circuit.js';
|
|
14
|
+
import type { IrBlockId, IrOperand } from './model.js';
|
|
15
|
+
/**
|
|
16
|
+
* Reading an operation's inputs and publishing its result.
|
|
17
|
+
*
|
|
18
|
+
* Every lowering step needs the same three answers -- where does this operand's
|
|
19
|
+
* value come from, which carrier does it arrive in, and under which identity is
|
|
20
|
+
* the result visible to the next step -- and they have to be the same answers
|
|
21
|
+
* everywhere. Two lowerings that each resolved a `parameter` operand their own
|
|
22
|
+
* way would disagree about the frame, which is not a defect any later layer can
|
|
23
|
+
* see: both would produce a well-formed body, and only one would be reading
|
|
24
|
+
* what the caller actually pushed.
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* The whole-program answers a body cannot derive from its own operations.
|
|
28
|
+
*
|
|
29
|
+
* A class's members and each function's convention are projected once, before
|
|
30
|
+
* any body lowers, precisely so two bodies cannot disagree about them. A
|
|
31
|
+
* lowering that needed one and re-derived it locally would be that second
|
|
32
|
+
* opinion, so the projections are handed in rather than recomputed.
|
|
33
|
+
*/
|
|
34
|
+
export interface LoweringProgram {
|
|
35
|
+
readonly abis: ReadonlyMap<FunctionId, CallableAbi>;
|
|
36
|
+
readonly constructs: ReadonlyMap<FunctionId, CallableAbi>;
|
|
37
|
+
/** Checker-authenticated callable identity carried by semantic values. */
|
|
38
|
+
readonly callableOrigins: ReadonlyMap<SemanticResultId, FunctionId>;
|
|
39
|
+
readonly callableOwnPropertyWrites: ReadonlyMap<FunctionId, ReadonlySet<string>>;
|
|
40
|
+
readonly functionPrototypePropertyWrites: ReadonlySet<string>;
|
|
41
|
+
readonly classes: ReadonlyMap<DeclarationId, ClassLayout>;
|
|
42
|
+
/** Which carrier each operand must arrive in (`projection/slots.ts`). */
|
|
43
|
+
readonly slots: SlotCensus;
|
|
44
|
+
/** One conversion node per carrier pair (`conversion/nodes.ts`); every `convert` this lowering mints names one. */
|
|
45
|
+
readonly conversions: ConversionCensus;
|
|
46
|
+
/**
|
|
47
|
+
* Every slot `enter` could not fill: the operand's carrier differs from its
|
|
48
|
+
* slot and the census has no conversion for the pair. The operand went
|
|
49
|
+
* through unconverted, exactly as it did before slots existed, so the
|
|
50
|
+
* printer's own per-consumer path still renders (or refuses) it. Counted
|
|
51
|
+
* rather than refused while that path is still the printer's, so the
|
|
52
|
+
* refactor can see the pairs the census must learn before the printer's
|
|
53
|
+
* path is deleted; it becomes a refusal then.
|
|
54
|
+
*/
|
|
55
|
+
readonly drift: SlotDrift[];
|
|
56
|
+
/**
|
|
57
|
+
* Every property read that produced a method VALUE -- a callable carrier
|
|
58
|
+
* stating a receiver -- keyed by the value it produced, with the object it
|
|
59
|
+
* was read from and the body it names. `enter` binds the two when such a
|
|
60
|
+
* value reaches a receiver-less slot (see `BindCallableOperation.detached`).
|
|
61
|
+
*/
|
|
62
|
+
readonly methodValueReceivers: Map<IrValueId, {
|
|
63
|
+
readonly receiver: IrOperand;
|
|
64
|
+
readonly method: FunctionId;
|
|
65
|
+
}>;
|
|
66
|
+
/**
|
|
67
|
+
* The installed plugins' reactive-field statement, merged once for this
|
|
68
|
+
* lowering run exactly as `compiler.ts` merges it into
|
|
69
|
+
* `HostSpellings.reactive.fields` -- but gated on a cell actually being
|
|
70
|
+
* configured (empty when no plugin names one), so a `true` reading of
|
|
71
|
+
* `GetOperation.reactive`/`BindingReadOperation.reactive` always means a
|
|
72
|
+
* real cell exists, never merely that some plugin named the field without
|
|
73
|
+
* anything to render it into. See `GetOperation.reactive`.
|
|
74
|
+
*/
|
|
75
|
+
readonly reactiveFields: ReadonlyMap<DeclarationId, ReadonlySet<string>>;
|
|
76
|
+
/**
|
|
77
|
+
* The FIELD declarations (not the class declarations `reactiveFields` is
|
|
78
|
+
* keyed by) that are reactive -- the reverse index a resolved-binding
|
|
79
|
+
* property read needs, since `PropertyOperation.resolvedBinding` names the
|
|
80
|
+
* field's own declaration directly, with no receiver/key pair left to walk
|
|
81
|
+
* through `classMemberOf`. Built once from `classes` and `reactiveFields`
|
|
82
|
+
* (`ir/lower.ts`) rather than per read, because a body cannot see the
|
|
83
|
+
* classes it does not declare.
|
|
84
|
+
*/
|
|
85
|
+
readonly reactiveFieldDeclarations: ReadonlySet<DeclarationId>;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Whether a property read's receiver+key names a field an installed plugin
|
|
89
|
+
* declared a reactive cell.
|
|
90
|
+
*
|
|
91
|
+
* Answered once, here, at the point a `get` is about to be built
|
|
92
|
+
* (`lower-property.ts`, `lower-destructuring.ts`'s object-pattern step) --
|
|
93
|
+
* see `GetOperation.reactive` for why this belongs on the operation instead
|
|
94
|
+
* of being re-asked from a table the target does not publish until struct
|
|
95
|
+
* rendering. `classMemberOf` finds the field's DECLARING class along the
|
|
96
|
+
* inheritance chain, which is the class `reactiveFields` is keyed by (own
|
|
97
|
+
* fields only -- `component-classes.ts`'s `GeaReactiveFields`); a receiver
|
|
98
|
+
* that is not a class at all (a record, a dictionary, ...) answers `false`
|
|
99
|
+
* without a lookup, since the plugin's table only ever names class fields.
|
|
100
|
+
*/
|
|
101
|
+
export declare const reactiveFieldReadOf: (classes: ReadonlyMap<DeclarationId, ClassLayout>, receiver: Representation, key: string, reactiveFields: ReadonlyMap<DeclarationId, ReadonlySet<string>>) => boolean;
|
|
102
|
+
export interface SlotDrift {
|
|
103
|
+
/** The block that would execute this conversion, retained for control-flow pruning. */
|
|
104
|
+
readonly block: IrBlockId;
|
|
105
|
+
readonly operation: OperationId;
|
|
106
|
+
readonly role: string;
|
|
107
|
+
readonly ordinal: number;
|
|
108
|
+
readonly source: string;
|
|
109
|
+
readonly slot: string;
|
|
110
|
+
readonly reason: string;
|
|
111
|
+
/** The pair itself, so an instrument can ask the registry about it without re-deriving. */
|
|
112
|
+
readonly sourceRepresentation: Representation;
|
|
113
|
+
readonly slotRepresentation: Representation;
|
|
114
|
+
}
|
|
115
|
+
export interface LoweringContext {
|
|
116
|
+
readonly graph: SemanticGraph;
|
|
117
|
+
readonly plan: SealedRepresentationPlan;
|
|
118
|
+
readonly constantDeriver: RepresentationDeriver;
|
|
119
|
+
readonly program: LoweringProgram;
|
|
120
|
+
/** This owner's calling convention, or `null` for a region nobody calls. */
|
|
121
|
+
readonly abi: CallableAbi | null;
|
|
122
|
+
/**
|
|
123
|
+
* Why this body has no convention, when the ABI projection refused to give it
|
|
124
|
+
* one, and `null` otherwise.
|
|
125
|
+
*
|
|
126
|
+
* The projection already knows the answer -- it states three distinct failure
|
|
127
|
+
* modes by name (`projection/abi.ts`) -- and a body whose convention is absent
|
|
128
|
+
* then refuses with the *symptom*, "reads ABI position 0", which names neither
|
|
129
|
+
* the cause nor a thing to fix. Carrying the reason turns that report back
|
|
130
|
+
* into the one the projection already made. `null` covers two different
|
|
131
|
+
* situations that are both correctly silent here: a region nobody calls, which
|
|
132
|
+
* genuinely has no convention to refuse, and a function the projection never
|
|
133
|
+
* considered -- and inventing a reason for either would be this layer guessing
|
|
134
|
+
* at another's answer.
|
|
135
|
+
*/
|
|
136
|
+
readonly abiRefusal: string | null;
|
|
137
|
+
readonly builder: IrBodyBuilder;
|
|
138
|
+
/** Every result this owner has lowered so far, keyed by the anchor result each defining operation registered. */
|
|
139
|
+
readonly values: Map<SemanticResultId, IrValueId>;
|
|
140
|
+
/** Optional-chain expressions whose merge is recorded but not yet closed (`lower-short-circuit.ts`). */
|
|
141
|
+
readonly shortCircuits: Map<SemanticResultId, PendingShortCircuit>;
|
|
142
|
+
}
|
|
143
|
+
export declare const describeOperand: (operand: SemanticOperand) => string;
|
|
144
|
+
/** A published result's carrier plus the SSA id already minted for it -- the only legal source for an operand that names a prior result. */
|
|
145
|
+
export declare const resolveResultValue: (ctx: LoweringContext, result: SemanticResultId, describe: string) => IrOperand;
|
|
146
|
+
export declare const resolveRequiredOperand: (ctx: LoweringContext, block: IrBlockId, lineage: SemanticResultId, operand: SemanticOperand) => IrOperand;
|
|
147
|
+
export declare const resolveOptionalOperand: (ctx: LoweringContext, block: IrBlockId, lineage: SemanticResultId, operand: SemanticOperand | undefined) => IrOperand | null;
|
|
148
|
+
/**
|
|
149
|
+
* Whether an operand names a result whose carrier is `void`.
|
|
150
|
+
*
|
|
151
|
+
* `void` is the carrier for "there is no value": a call that returns it mints
|
|
152
|
+
* no SSA id at all (`build.ts`'s `mintOptionalResult`). So an operand naming
|
|
153
|
+
* one cannot be resolved, and a consumer that can legitimately have nothing --
|
|
154
|
+
* `return f()` in a `void` function, which C++ spells the same way -- has to
|
|
155
|
+
* ask before resolving rather than be refused for a value that was correctly
|
|
156
|
+
* never minted.
|
|
157
|
+
*/
|
|
158
|
+
export declare const namesVoidResult: (ctx: LoweringContext, operand: SemanticOperand | undefined) => boolean;
|
|
159
|
+
export declare const namedOperand: (operation: SemanticOperation, role: string, ordinal?: number) => SemanticOperand;
|
|
160
|
+
export declare const orderedOperandsOf: (operation: SemanticOperation, role: string) => readonly SemanticOperand[];
|
|
161
|
+
/** The one non-provenance operand of an operation that has exactly one, when no operand is explicitly named `value`. */
|
|
162
|
+
export declare const singleValueOperand: (operation: SemanticOperation) => SemanticOperand;
|
|
163
|
+
export declare const requireLineage: (operation: SemanticOperation) => SemanticResultId;
|
|
164
|
+
export declare const optionalResultRepresentation: (ctx: LoweringContext, operation: SemanticOperation, role: ResultRole) => Representation | null;
|
|
165
|
+
export declare const requireResultRepresentation: (ctx: LoweringContext, operation: SemanticOperation, role: ResultRole, describe: string) => Representation;
|
|
166
|
+
/** Registers the SSA id an operation's own IR lowering just produced under the same anchor `requireLineage` would cite for it. */
|
|
167
|
+
/**
|
|
168
|
+
* A value in exactly the carrier a slot declares.
|
|
169
|
+
*
|
|
170
|
+
* The one place lowering converts. A consumer that needs an operand in its
|
|
171
|
+
* slot's carrier asks here rather than converting on its own, so every
|
|
172
|
+
* `convert` in the IR names a node of the conversion census -- the same node
|
|
173
|
+
* the certificate checks and the printer renders -- and no consumer decides a
|
|
174
|
+
* pair for itself. Identity is no conversion at all: the operand is handed
|
|
175
|
+
* back untouched, so a slot that already agrees costs nothing in the IR.
|
|
176
|
+
*/
|
|
177
|
+
export declare const convertTo: (ctx: LoweringContext, block: IrBlockId, lineage: SemanticResultId, operand: IrOperand, slot: Representation, via?: string) => IrOperand | null;
|
|
178
|
+
/**
|
|
179
|
+
* Diagnostic only, under `GEA_SPECULATIVE_LOADS`: every classifier-gated load
|
|
180
|
+
* lowering minted, with the site that asked for it, so the loads no presence
|
|
181
|
+
* or membership proof stands behind can be counted by site.
|
|
182
|
+
*/
|
|
183
|
+
export declare const speculativeLoads: {
|
|
184
|
+
readonly lineage: SemanticResultId;
|
|
185
|
+
readonly via: string;
|
|
186
|
+
readonly node: ConversionNode;
|
|
187
|
+
readonly value: IrValueId;
|
|
188
|
+
}[];
|
|
189
|
+
/**
|
|
190
|
+
* An operand as its consumer's slot wants it: resolved, then converted into
|
|
191
|
+
* the slot's carrier when the census names one. A raw operand -- a key, a
|
|
192
|
+
* callee, a condition, an argument to a host member the printer spells from
|
|
193
|
+
* its own carrier -- is handed back as it arrived; so is an operand whose
|
|
194
|
+
* pair the census cannot convert, which is recorded in `program.drift` and
|
|
195
|
+
* left to the printer's own path (see `LoweringProgram.drift`).
|
|
196
|
+
*/
|
|
197
|
+
export declare const enter: (ctx: LoweringContext, block: IrBlockId, lineage: SemanticResultId, operation: SemanticOperation, operand: SemanticOperand, resolved: IrOperand) => IrOperand;
|
|
198
|
+
/**
|
|
199
|
+
* A conversion the lowering itself decides on rather than one a slot asks
|
|
200
|
+
* for -- a receiver's narrowed view, a dead merge arm's absence, the thrown
|
|
201
|
+
* carrier, an omitted formal's `undefined`: the census node for the pair,
|
|
202
|
+
* named on the `convert` instruction like every slot-driven conversion. A
|
|
203
|
+
* pair the census cannot convert is recorded as drift under the given role
|
|
204
|
+
* and STILL minted, because the consumer needs the value in `target` (a phi
|
|
205
|
+
* arm, a `throw`) and the printer's own chain is what answers such a pair
|
|
206
|
+
* until the census does. Every `convert` a lowering mints goes through here
|
|
207
|
+
* or `convertTo`: a hand-built use id named a conversion no census had
|
|
208
|
+
* counted, which is how a pair certified under one authority and refused
|
|
209
|
+
* under another.
|
|
210
|
+
*/
|
|
211
|
+
export declare const convertOrDrift: (ctx: LoweringContext, block: IrBlockId, lineage: SemanticResultId, operation: OperationId, role: string, ordinal: number, operand: IrOperand, target: Representation, via?: string) => IrOperand;
|
|
212
|
+
/**
|
|
213
|
+
* A binding read in the carrier the plan selected for it, which is the cell's
|
|
214
|
+
* own carrier or a narrowing of it: `x` read as `string` out of a cell placed
|
|
215
|
+
* `optional(string)` behind the guard that proved it present. The read itself
|
|
216
|
+
* yields the cell's carrier and the narrowing is a `convert` the conversion
|
|
217
|
+
* census names, exactly as a store into the cell converts the other way. A
|
|
218
|
+
* pair the census cannot convert is recorded as drift and the read is minted
|
|
219
|
+
* in the selected carrier for the printer's own path to narrow.
|
|
220
|
+
*/
|
|
221
|
+
export declare const narrowedBindingRead: (ctx: LoweringContext, block: IrBlockId, lineage: SemanticResultId, operation: SemanticOperation, declaration: DeclarationId, representation: Representation) => IrValueId;
|
|
222
|
+
/** `resolveRequiredOperand` followed by `enter`, for the consumers whose operand is a value in a slot. */
|
|
223
|
+
export declare const enterRequiredOperand: (ctx: LoweringContext, block: IrBlockId, lineage: SemanticResultId, operation: SemanticOperation, operand: SemanticOperand) => IrOperand;
|
|
224
|
+
export declare const registerResult: (ctx: LoweringContext, operation: SemanticOperation, value: IrValueId | null) => void;
|
|
225
|
+
export { abiOfCallee, constructAbiOfCallee } from '../projection/callee.js';
|
|
226
|
+
/**
|
|
227
|
+
* The named fields a record carrier lays out.
|
|
228
|
+
*
|
|
229
|
+
* A record type written inline (`function Row(props: {label: string})`) carries
|
|
230
|
+
* its fields directly; one written as a named interface is carried *by name*,
|
|
231
|
+
* because that is what makes a self-referential type finite -- so its layout
|
|
232
|
+
* lives in the sealed structural table and is read back by deriving the shape
|
|
233
|
+
* the reference names. Both are the same physical object; only the carrier
|
|
234
|
+
* differs, and a lowering that handled just the first would refuse an ordinary
|
|
235
|
+
* `interface RowProps` for no reason the program could act on.
|
|
236
|
+
*/
|
|
237
|
+
export declare const recordLayoutOf: (ctx: LoweringContext, props: Representation) => readonly RecordField[] | null;
|
|
238
|
+
/**
|
|
239
|
+
* A call's arguments with its variadic tail packed.
|
|
240
|
+
*
|
|
241
|
+
* A rest parameter is one slot holding an array, not a run of slots, so the
|
|
242
|
+
* packing belongs where a call's operands are read rather than in each caller:
|
|
243
|
+
* the convention states where the tail begins and which array carrier holds it,
|
|
244
|
+
* and a convention that says a rest slot is not an array is refused rather than
|
|
245
|
+
* packed into something that cannot hold it.
|
|
246
|
+
*/
|
|
247
|
+
/**
|
|
248
|
+
* A call's arguments with its variadic tail packed.
|
|
249
|
+
*
|
|
250
|
+
* A rest parameter is one slot holding an array, not a run of slots, so the
|
|
251
|
+
* packing belongs where a call's operands are read rather than in each caller:
|
|
252
|
+
* the convention states where the tail begins and which array carrier holds it,
|
|
253
|
+
* and a convention that says a rest slot is not an array is refused rather than
|
|
254
|
+
* packed into something that cannot hold it.
|
|
255
|
+
*/
|
|
256
|
+
/**
|
|
257
|
+
* One physical argument, and whether it is one value or a whole range.
|
|
258
|
+
*
|
|
259
|
+
* A `spread` slot carries the ENTIRE source array of a `f(a, ...xs)` call
|
|
260
|
+
* (`producers/spread-arguments.ts` publishes it under its own operand role),
|
|
261
|
+
* so it contributes however many elements that array holds -- which is a
|
|
262
|
+
* runtime count. That is representable in exactly one place: inside the rest
|
|
263
|
+
* array `packRestArguments` builds, as the same `spread` element an array
|
|
264
|
+
* literal's own admitted spread already uses. A `spread` slot anywhere a
|
|
265
|
+
* FIXED count is required has no rendering at all, and is refused.
|
|
266
|
+
*/
|
|
267
|
+
export type ArgumentSlot = {
|
|
268
|
+
readonly kind: 'value' | 'spread';
|
|
269
|
+
readonly value: IrOperand;
|
|
270
|
+
readonly from?: number;
|
|
271
|
+
};
|
|
272
|
+
export declare const packRestArguments: (ctx: LoweringContext, block: IrBlockId, lineage: SemanticResultId, operation: OperationId, abi: CallableAbi | null, passed: readonly ArgumentSlot[]) => readonly IrOperand[];
|