@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,118 @@
|
|
|
1
|
+
import { stringConstantsOf } from './dead-values.js';
|
|
2
|
+
/**
|
|
3
|
+
* Whether ANYTHING in the program can make a native object's own data
|
|
4
|
+
* properties non-writable or the object itself non-extensible.
|
|
5
|
+
*
|
|
6
|
+
* Every native field store guards against exactly that -- `Object.freeze(o)`
|
|
7
|
+
* followed by `o.x = 1` must throw -- and the guard is a presence bit, an
|
|
8
|
+
* attribute bit, the process-wide restriction counter and, when that counter
|
|
9
|
+
* is nonzero, a registry lookup in a call the C++ compiler has to assume can
|
|
10
|
+
* write anything. In a loop that is the difference between a field living in
|
|
11
|
+
* a register and a field living in memory: `method_calls` reloaded
|
|
12
|
+
* `this.value` through the guard on every turn, 25.6 ms against 18.6 for the
|
|
13
|
+
* same loop with the field in a register.
|
|
14
|
+
*
|
|
15
|
+
* So the emitter asks the whole unit first. Integrity is restricted only by
|
|
16
|
+
* `Object.freeze` / `seal` / `preventExtensions` and by a descriptor
|
|
17
|
+
* definition (`defineProperty`, `defineProperties`, their `Reflect` twins),
|
|
18
|
+
* every one of which is a member read the IR shows -- through a host method
|
|
19
|
+
* binding, or as a constant key on whatever receiver -- plus two implicit
|
|
20
|
+
* sources: a tagged template's strings object is born frozen, and an IR
|
|
21
|
+
* `define-own-property` with a non-default attribute states a restriction of
|
|
22
|
+
* its own (an object literal's definitions all carry the defaults). Nothing
|
|
23
|
+
* else in the runtime freezes a user object.
|
|
24
|
+
*
|
|
25
|
+
* Fail-closed on the shapes this cannot see through: a computed key read off
|
|
26
|
+
* a dynamic, host or unresolved receiver could name any of those members
|
|
27
|
+
* (`(Object as any)[name]`), and so counts as restricting. A program whose
|
|
28
|
+
* typed code never touches integrity keeps the fast stores; a program that
|
|
29
|
+
* reaches for it anywhere -- or that reads computed members off `any` --
|
|
30
|
+
* keeps every guard.
|
|
31
|
+
*/
|
|
32
|
+
export const integrityRestrictionsOf = (bodies) => {
|
|
33
|
+
for (const body of bodies) {
|
|
34
|
+
const keys = stringConstantsOf(body);
|
|
35
|
+
for (const block of body.blocks.values()) {
|
|
36
|
+
for (const operation of block.operations) {
|
|
37
|
+
if (operation.kind === 'allocate-template-object')
|
|
38
|
+
return true;
|
|
39
|
+
// An object literal defines each of its properties this way, with the
|
|
40
|
+
// three attributes at their defaults; only a definition that turns one
|
|
41
|
+
// OFF restricts anything.
|
|
42
|
+
if (operation.kind === 'define-own-property') {
|
|
43
|
+
const { writable, enumerable, configurable } = operation.attributes;
|
|
44
|
+
if (!writable || !enumerable || !configurable)
|
|
45
|
+
return true;
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
if (operation.kind !== 'get')
|
|
49
|
+
continue;
|
|
50
|
+
if (operation.hostMethod !== undefined && restrictingMembers.has(operation.hostMethod.member))
|
|
51
|
+
return true;
|
|
52
|
+
const key = keys.get(operation.key.value);
|
|
53
|
+
if (key !== undefined) {
|
|
54
|
+
if (restrictingMembers.has(key))
|
|
55
|
+
return true;
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
const receiver = operation.receiver.representation;
|
|
59
|
+
if (receiver.kind === 'dynamic' || receiver.kind === 'unresolved' || receiver.kind === 'native-handle')
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return false;
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* `eval` is here because evaluated source can do all of the above out of the
|
|
68
|
+
* compiler's sight; `Function` for the same reason.
|
|
69
|
+
*/
|
|
70
|
+
const restrictingMembers = new Set([
|
|
71
|
+
'freeze',
|
|
72
|
+
'seal',
|
|
73
|
+
'preventExtensions',
|
|
74
|
+
'defineProperty',
|
|
75
|
+
'defineProperties',
|
|
76
|
+
'eval',
|
|
77
|
+
'Function'
|
|
78
|
+
]);
|
|
79
|
+
/**
|
|
80
|
+
* Whether ANYTHING in the program can delete a declared field of a generated
|
|
81
|
+
* struct.
|
|
82
|
+
*
|
|
83
|
+
* A required field's presence bit starts `true` and only `delete` ever clears
|
|
84
|
+
* it; an attribute triple only the integrity operations above ever change. So
|
|
85
|
+
* when neither can happen, both are program-wide constants for every struct,
|
|
86
|
+
* and `records.ts` states them once per struct (`static inline` members)
|
|
87
|
+
* instead of once per instance -- on `bench/comparison/fixtures/binary_trees.ts`
|
|
88
|
+
* that is three presence bytes and three attribute bytes off every one of a
|
|
89
|
+
* million nodes whose whole cost is cache misses.
|
|
90
|
+
*
|
|
91
|
+
* Fail-closed the same way `integrityRestrictionsOf` is: a `delete` whose
|
|
92
|
+
* receiver is anything but a dictionary (the one carrier with no fixed
|
|
93
|
+
* fields) counts, so does `Reflect.deleteProperty`, and a receiver the
|
|
94
|
+
* program only knows dynamically counts because it could be any struct.
|
|
95
|
+
*/
|
|
96
|
+
export const fixedFieldDeletionsOf = (bodies) => {
|
|
97
|
+
for (const body of bodies) {
|
|
98
|
+
const keys = stringConstantsOf(body);
|
|
99
|
+
for (const block of body.blocks.values()) {
|
|
100
|
+
for (const operation of block.operations) {
|
|
101
|
+
if (operation.kind === 'delete') {
|
|
102
|
+
const receiver = operation.receiver.representation;
|
|
103
|
+
const carrier = receiver.kind === 'optional' ? receiver.payload : receiver;
|
|
104
|
+
if (carrier.kind !== 'dictionary')
|
|
105
|
+
return true;
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
if (operation.kind !== 'get')
|
|
109
|
+
continue;
|
|
110
|
+
if (operation.hostMethod?.member === 'deleteProperty')
|
|
111
|
+
return true;
|
|
112
|
+
if (keys.get(operation.key.value) === 'deleteProperty')
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return false;
|
|
118
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { allOperationsOf } from './model.js';
|
|
2
|
+
import { operandsOfIrOperation } from './queries.js';
|
|
3
|
+
/** A private protocol cursor never crosses a carrier/ABI boundary or gets copied. */
|
|
4
|
+
export const localIteratorValuesOf = (body) => {
|
|
5
|
+
const candidates = new Set();
|
|
6
|
+
const escapes = new Set();
|
|
7
|
+
for (const block of body.blocks.values()) {
|
|
8
|
+
for (const operation of allOperationsOf(block)) {
|
|
9
|
+
if (operation.kind === 'get-iterator')
|
|
10
|
+
candidates.add(operation.result.id);
|
|
11
|
+
for (const operand of operandsOfIrOperation(operation)) {
|
|
12
|
+
if ((operation.kind === 'iterator-next' || operation.kind === 'iterator-done') &&
|
|
13
|
+
operation.iterator.value === operand.value &&
|
|
14
|
+
(operation.kind !== 'iterator-next' || operation.value === null))
|
|
15
|
+
continue;
|
|
16
|
+
escapes.add(operand.value);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
// A cleanup region names the iterator from a nested C++ scope, so it cannot
|
|
21
|
+
// be an inline local cursor at its get-iterator site.
|
|
22
|
+
for (const region of body.iteratorCloseRegions ?? [])
|
|
23
|
+
candidates.delete(region.iterator.value);
|
|
24
|
+
for (const value of escapes)
|
|
25
|
+
candidates.delete(value);
|
|
26
|
+
return candidates;
|
|
27
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { IrBlockId } from './model.js';
|
|
2
|
+
import type { AllocationOperation } from '../semantics/model/operations.js';
|
|
3
|
+
import { type LoweringContext } from './lower-operands.js';
|
|
4
|
+
export declare const lowerAllocation: (ctx: LoweringContext, block: IrBlockId, operation: AllocationOperation) => void;
|
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
import { representationKey } from '../representation/model.js';
|
|
2
|
+
import { operandOf } from '../semantics/model/operands.js';
|
|
3
|
+
import { IrLoweringBlockedError } from './lower-graph.js';
|
|
4
|
+
import { orderedOperandsOf, recordLayoutOf, registerResult, requireLineage, requireResultRepresentation, resolveRequiredOperand, enterRequiredOperand } from './lower-operands.js';
|
|
5
|
+
/**
|
|
6
|
+
* Allocation: the operations that mint a new object.
|
|
7
|
+
*
|
|
8
|
+
* Split out of `lower.ts` on the family boundary the semantic model already
|
|
9
|
+
* draws, so the file that dispatches every family does not also carry one
|
|
10
|
+
* family's whole implementation.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* `[a, b]` whose type is a tuple, allocated as the record it is.
|
|
14
|
+
*
|
|
15
|
+
* The fields are matched to elements by *position*, because a tuple's key is
|
|
16
|
+
* its position -- the layout's own key for slot `n` is the string `"n"`, and
|
|
17
|
+
* reading it back that way is what keeps this and `cppRecordFieldName` from
|
|
18
|
+
* being two opinions about the same member. A hole has no tuple meaning (the
|
|
19
|
+
* language has no elision in a tuple type) and an element with no field, or a
|
|
20
|
+
* field with no element, means this lowering and the plan disagree about the
|
|
21
|
+
* arity, which is refused rather than padded.
|
|
22
|
+
*/
|
|
23
|
+
const lowerTupleLiteral = (ctx, block, operation, operands, tuple, representation) => {
|
|
24
|
+
const lineage = requireLineage(operation);
|
|
25
|
+
const layout = recordLayoutOf(ctx, tuple);
|
|
26
|
+
if (!layout) {
|
|
27
|
+
throw new IrLoweringBlockedError(`an array literal carries "${representationKey(tuple)}", which states no record layout to place its elements into`);
|
|
28
|
+
}
|
|
29
|
+
if (layout.length !== operands.length) {
|
|
30
|
+
throw new IrLoweringBlockedError(`an array literal writes ${operands.length} element(s) into a layout of ${layout.length} field(s); ` +
|
|
31
|
+
'a tuple carrier and its literal have to agree on arity');
|
|
32
|
+
}
|
|
33
|
+
const fields = layout.map((field, index) => {
|
|
34
|
+
const operand = operands[index];
|
|
35
|
+
if (!operand || operand.source.kind === 'absent') {
|
|
36
|
+
throw new IrLoweringBlockedError(`an array literal leaves position ${index} elided, which a tuple field cannot represent`);
|
|
37
|
+
}
|
|
38
|
+
if (field.key !== String(index)) {
|
|
39
|
+
throw new IrLoweringBlockedError(`an array literal's field ${index} is keyed "${field.key}"; a tuple's key is its position, so this layout is not a tuple's`);
|
|
40
|
+
}
|
|
41
|
+
return { key: field.key, value: enterRequiredOperand(ctx, block, lineage, operation, operand) };
|
|
42
|
+
});
|
|
43
|
+
registerResult(ctx, operation, ctx.builder.allocateRecord(block, lineage, fields, representation));
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* An array literal's own `element`/`spread` operands, merged back into one
|
|
47
|
+
* source-ordered sequence.
|
|
48
|
+
*
|
|
49
|
+
* `allocations.ts` publishes an ordinary element under role `element` and an
|
|
50
|
+
* admitted plain-Array spread's own source under the distinct role `spread`,
|
|
51
|
+
* both keyed by the position they occupy in the element SEQUENCE the literal
|
|
52
|
+
* builds -- one shared counter, so merging the two roles by ordinal recovers
|
|
53
|
+
* exactly the order the literal was written in, without either role needing to
|
|
54
|
+
* know the other exists. That position is not the syntactic index once a
|
|
55
|
+
* closed-tuple spread has expanded one written element into several
|
|
56
|
+
* (`tuple-spread.ts`), which is why the counter is the producer's and not
|
|
57
|
+
* `forEach`'s.
|
|
58
|
+
*/
|
|
59
|
+
const arrayLiteralSlotsOf = (operation) => {
|
|
60
|
+
const elements = orderedOperandsOf(operation, 'element').map((operand) => ({
|
|
61
|
+
ordinal: operand.ordinal,
|
|
62
|
+
kind: 'element',
|
|
63
|
+
operand
|
|
64
|
+
}));
|
|
65
|
+
const spreads = orderedOperandsOf(operation, 'spread').map((operand) => ({ ordinal: operand.ordinal, kind: 'spread', operand }));
|
|
66
|
+
return [...elements, ...spreads].sort((left, right) => left.ordinal - right.ordinal);
|
|
67
|
+
};
|
|
68
|
+
export const lowerAllocation = (ctx, block, operation) => {
|
|
69
|
+
const lineage = requireLineage(operation);
|
|
70
|
+
const representation = requireResultRepresentation(ctx, operation, 'value', 'an allocation operation');
|
|
71
|
+
switch (operation.allocated) {
|
|
72
|
+
case 'object-literal': {
|
|
73
|
+
// The carrier decides the machinery. A literal whose type is a record
|
|
74
|
+
// allocates a record: giving it an ordinary object instead would mean
|
|
75
|
+
// laying out a dictionary for a value the plan already proved has a
|
|
76
|
+
// fixed, native shape, and every field access after it would then have
|
|
77
|
+
// to agree with a layout nobody selected. Fields install as their own
|
|
78
|
+
// `define-own-property` operations, so none are supplied here.
|
|
79
|
+
// A `dictionary` carrier is native storage for the same reason a record
|
|
80
|
+
// is -- the plan proved the literal's whole layout is one keyed
|
|
81
|
+
// container -- so it allocates through the same primitive.
|
|
82
|
+
// `record-with-index` is the split layout of the same struct (named
|
|
83
|
+
// fields plus an index-signature sidecar member) -- `cppTypeOf` spells
|
|
84
|
+
// it identically to `record`, and `emitAllocateRecord` already accepts
|
|
85
|
+
// it -- so routing it anywhere but here left every such literal on the
|
|
86
|
+
// unimplemented `OrdinaryObject` path despite a plan that had already
|
|
87
|
+
// proved it native. Only a carrier the plan left as the dynamic object
|
|
88
|
+
// substrate still gets an `OrdinaryObject`.
|
|
89
|
+
const carrier = representation.kind === 'borrowed-ref' ? representation.referent : representation;
|
|
90
|
+
const native = carrier.kind === 'record' ||
|
|
91
|
+
carrier.kind === 'native-record-ref' ||
|
|
92
|
+
carrier.kind === 'dictionary' ||
|
|
93
|
+
carrier.kind === 'record-with-index';
|
|
94
|
+
const allocate = native
|
|
95
|
+
? ctx.builder.allocateRecord(block, lineage, [], representation)
|
|
96
|
+
: ctx.builder.allocateOrdinaryObject(block, lineage, representation);
|
|
97
|
+
registerResult(ctx, operation, allocate);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
case 'array-literal': {
|
|
101
|
+
// A tuple is a record whose keys are positions -- there is no separate
|
|
102
|
+
// tuple carrier by design -- so a literal the plan gave a record carrier
|
|
103
|
+
// allocates a record, exactly as an object literal with a record carrier
|
|
104
|
+
// does. Building an Array exotic object for it instead would allocate
|
|
105
|
+
// length, holes and index-key semantics for a value whose layout the
|
|
106
|
+
// plan already proved is a fixed struct. A `spread` operand never
|
|
107
|
+
// reaches this branch: `allocations.ts` publishes that role ONLY for a
|
|
108
|
+
// plain-Array source (a closed-tuple source is expanded into ordinary
|
|
109
|
+
// `element` operands instead, one per position, by `tuple-spread.ts`),
|
|
110
|
+
// and a plain-Array-typed literal never derives to a record carrier --
|
|
111
|
+
// so one arriving here would be a producer/representation disagreement
|
|
112
|
+
// this lowering does not try to paper over. The `element` operands it
|
|
113
|
+
// does read are already the post-expansion run, keyed by their position
|
|
114
|
+
// in the element SEQUENCE rather than in the written syntax, which is
|
|
115
|
+
// exactly the key `lowerTupleLiteral` matches against the layout.
|
|
116
|
+
const tuple = representation.kind === 'borrowed-ref' ? representation.referent : representation;
|
|
117
|
+
if (tuple.kind === 'record' || tuple.kind === 'native-record-ref') {
|
|
118
|
+
lowerTupleLiteral(ctx, block, operation, orderedOperandsOf(operation, 'element'), tuple, representation);
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
const elements = arrayLiteralSlotsOf(operation).map((slot) => {
|
|
122
|
+
if (slot.kind === 'spread') {
|
|
123
|
+
let source = resolveRequiredOperand(ctx, block, lineage, slot.operand);
|
|
124
|
+
// `hasNativeIterationCursor` admits an optional native source through
|
|
125
|
+
// its present payload. ArrayAccumulation still starts by calling
|
|
126
|
+
// GetIterator, so an absent source throws; it is not an empty range.
|
|
127
|
+
// Unwrapping here makes the range-copy lanes below read the same
|
|
128
|
+
// payload carrier the census admitted, rather than handing an
|
|
129
|
+
// Optional<T> to an Array/Set/string cursor that cannot consume it.
|
|
130
|
+
if (source.representation.kind === 'optional') {
|
|
131
|
+
const payload = source.representation.payload;
|
|
132
|
+
const value = ctx.builder.compute(block, lineage, 'require-iterable-present', 'RequireIterablePresent', [source], payload);
|
|
133
|
+
source = { value, representation: payload };
|
|
134
|
+
}
|
|
135
|
+
// Dynamic spread operands cite the already-acquired iterator
|
|
136
|
+
// record. A `Value` does not become an ArrayObject projection just
|
|
137
|
+
// because it is being spread: only the gather primitive may drain
|
|
138
|
+
// it, and only into an explicitly dynamic-element destination.
|
|
139
|
+
if (source.representation.kind === 'dynamic') {
|
|
140
|
+
// A `dynamic` destination cell IS an explicitly dynamic-element
|
|
141
|
+
// one: `emitAllocateArrayObject`'s `representation.kind ===
|
|
142
|
+
// 'dynamic'` branch allocates `ArrayObject<gea::Value>`, drains
|
|
143
|
+
// the iterator through `runtime::iterator::appendGather` and
|
|
144
|
+
// boxes the result, for every reason a cell can be `dynamic` --
|
|
145
|
+
// `opt-in-fallback` (this literal's own declared fallback) and
|
|
146
|
+
// `declared-any-never-narrowed` (`const copied = [...anySource]`
|
|
147
|
+
// with `copied` never subsequently narrowed) alike. `reason`
|
|
148
|
+
// records only WHY the cell is dynamic, not a different runtime
|
|
149
|
+
// representation, so checking one specific reason here refused a
|
|
150
|
+
// capability the emitter grants to every `dynamic` result. Reading
|
|
151
|
+
// the element carrier off the `array-object` spelling alone would
|
|
152
|
+
// separately refuse the one carrier where the element type is
|
|
153
|
+
// fixed by construction, so a capability the target certifies and
|
|
154
|
+
// the emitter renders had no lowering to reach it either way.
|
|
155
|
+
const dynamicDestination = tuple.kind === 'dynamic';
|
|
156
|
+
if (!dynamicDestination && (tuple.kind !== 'array-object' || tuple.element.kind !== 'dynamic')) {
|
|
157
|
+
throw new IrLoweringBlockedError(`an array literal gathers dynamic iterator values into a "${tuple.kind === 'array-object' ? representationKey(tuple.element) : tuple.kind}" element carrier; ` +
|
|
158
|
+
'per-element dynamic conversion is not installed');
|
|
159
|
+
}
|
|
160
|
+
return { kind: 'gather', iterator: source };
|
|
161
|
+
}
|
|
162
|
+
// The element carrier the source's own range copy will produce, or
|
|
163
|
+
// `null` when this source has no native range copy at all. The four
|
|
164
|
+
// sources here are exactly the four `producers/shared.ts`'s
|
|
165
|
+
// `hasNativeIterationCursor` admits, and the check is a fail-closed
|
|
166
|
+
// re-statement of that admission rather than a second opinion.
|
|
167
|
+
//
|
|
168
|
+
// A `Map` is the one whose element cannot be named from the source's
|
|
169
|
+
// own carrier: it yields a freshly built `[K, V]` PAIR, whose record
|
|
170
|
+
// shape id lives on the DESTINATION's element carrier and nowhere on
|
|
171
|
+
// the collection. So this arm reads the destination's own pair --
|
|
172
|
+
// which `emit-arrays.ts` then re-checks field by field against the
|
|
173
|
+
// collection's key and value before spelling `appendMapRange`.
|
|
174
|
+
const collection = source.representation.kind === 'keyed-collection' ? source.representation : null;
|
|
175
|
+
const destinationElement = tuple.kind === 'array-object' ? tuple.element : null;
|
|
176
|
+
const spreadElement = source.representation.kind === 'array-object'
|
|
177
|
+
? source.representation.element
|
|
178
|
+
: collection?.family === 'set'
|
|
179
|
+
? collection.key
|
|
180
|
+
: collection?.family === 'map'
|
|
181
|
+
? destinationElement
|
|
182
|
+
: source.representation.kind === 'string'
|
|
183
|
+
? { kind: 'string' }
|
|
184
|
+
: source.representation.kind === 'iterator'
|
|
185
|
+
? source.representation.element
|
|
186
|
+
: null;
|
|
187
|
+
if (spreadElement === null) {
|
|
188
|
+
throw new IrLoweringBlockedError(`an array literal spreads a "${representationKey(source.representation)}" source; the native range copy only covers an ` +
|
|
189
|
+
'"array-object", a "Set", a "Map", a "string" and a cursor');
|
|
190
|
+
}
|
|
191
|
+
if (tuple.kind !== 'array-object' || representationKey(spreadElement) !== representationKey(tuple.element)) {
|
|
192
|
+
throw new IrLoweringBlockedError(`an array literal spreads a source whose element carrier ("${representationKey(spreadElement)}") does not match ` +
|
|
193
|
+
`this literal's own element carrier ("${tuple.kind === 'array-object' ? representationKey(tuple.element) : tuple.kind}"); a mismatch would need a ` +
|
|
194
|
+
'per-element conversion into the destination carrier, which this range copy does not perform');
|
|
195
|
+
}
|
|
196
|
+
return { kind: 'spread', value: source, from: 0 };
|
|
197
|
+
}
|
|
198
|
+
return slot.operand.source.kind === 'absent'
|
|
199
|
+
? { kind: 'hole' }
|
|
200
|
+
: { kind: 'element', value: enterRequiredOperand(ctx, block, lineage, operation, slot.operand) };
|
|
201
|
+
});
|
|
202
|
+
registerResult(ctx, operation, ctx.builder.allocateArrayObject(block, lineage, elements, representation));
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
case 'class-constructor-object': {
|
|
206
|
+
const shape = ctx.graph.structuralTypes.get(operation.shape)?.shape;
|
|
207
|
+
if (!shape || shape.kind !== 'class-constructor') {
|
|
208
|
+
throw new IrLoweringBlockedError('a class-constructor-object allocation has no class-constructor shape to recover its declaration from');
|
|
209
|
+
}
|
|
210
|
+
const captures = orderedOperandsOf(operation, 'capture').map((operand) => resolveRequiredOperand(ctx, block, lineage, operand));
|
|
211
|
+
// The heritage event and this allocation are siblings from one
|
|
212
|
+
// `contributeClass` call, and both name the class through the
|
|
213
|
+
// producer's identities -- which, inside a monomorphized copy of a
|
|
214
|
+
// generic class, carry that copy's specialization (`decl|f80|43@0` for
|
|
215
|
+
// hono's `Hono<E, S, BasePath>`). The structural shape names the class
|
|
216
|
+
// by its unspecialized declaration, which is right for the one C++
|
|
217
|
+
// struct every copy shares but pairs with no event of a generic class:
|
|
218
|
+
// `Hono` was evaluated with no heritage, its method-state owner had no
|
|
219
|
+
// parent, and the first `HonoBase` method read as a value on an instance
|
|
220
|
+
// aborted with "no matching class evaluation". A class expression with
|
|
221
|
+
// no members publishes no `classDeclaration`; the shape is its name.
|
|
222
|
+
const evaluatedClass = operation.classDeclaration ?? shape.declaration;
|
|
223
|
+
const heritageEvent = [...ctx.graph.operations.values()].find((event) => event.family === 'class-lifecycle' && event.event === 'evaluate-heritage' && event.classDeclaration === evaluatedClass);
|
|
224
|
+
const heritageOperand = heritageEvent ? operandOf(heritageEvent, 'heritage') : undefined;
|
|
225
|
+
const heritage = heritageOperand && heritageOperand.source.kind !== 'absent'
|
|
226
|
+
? resolveRequiredOperand(ctx, block, lineage, heritageOperand)
|
|
227
|
+
: undefined;
|
|
228
|
+
// `GEA_HERITAGE_DEBUG=1`: one stderr row per evaluated class saying
|
|
229
|
+
// whether its `extends` reached this allocation. A derived class
|
|
230
|
+
// evaluated with no heritage operand allocates a method-state owner with
|
|
231
|
+
// no parent, and the first base method read as a VALUE on one of its
|
|
232
|
+
// instances aborts ("no matching class evaluation") with nothing in the
|
|
233
|
+
// message naming the class -- this row is where that gap is visible.
|
|
234
|
+
if (process.env.GEA_HERITAGE_DEBUG !== undefined)
|
|
235
|
+
console.error(`[HERITAGE] class=${String(shape.declaration)} event=${heritageEvent ? 'found' : 'missing'} ` +
|
|
236
|
+
`source=${heritageOperand?.source.kind ?? 'none'} layoutOnly=${String(heritageEvent !== undefined && 'classLayoutOnly' in heritageEvent && heritageEvent.classLayoutOnly === true)} ` +
|
|
237
|
+
`representation=${heritage?.representation.kind ?? 'none'}` +
|
|
238
|
+
(heritageEvent
|
|
239
|
+
? ''
|
|
240
|
+
: ` heritageEventsInFile=${[...ctx.graph.operations.values()]
|
|
241
|
+
.flatMap((event) => event.family === 'class-lifecycle' &&
|
|
242
|
+
event.event === 'evaluate-heritage' &&
|
|
243
|
+
String(event.classDeclaration).startsWith(String(shape.declaration).split('|').slice(0, 2).join('|'))
|
|
244
|
+
? [String(event.classDeclaration)]
|
|
245
|
+
: [])
|
|
246
|
+
.join(',')}`));
|
|
247
|
+
// The PHYSICAL class this constructor object constructs -- the carrier's
|
|
248
|
+
// own answer (`constructor-family.members[0]`, derive.ts's
|
|
249
|
+
// `physicalClassDeclarationOf`): the root for a class with one layout,
|
|
250
|
+
// and `decl|f0|36@1` for the second layout of a generic instantiated
|
|
251
|
+
// at two, whose struct and construct thunk are named by exactly that id
|
|
252
|
+
// (`projection/classes.ts`). The shape's own declaration is always the
|
|
253
|
+
// root, which names no struct once there are two.
|
|
254
|
+
const constructed = representation.kind === 'constructor-family' && representation.members[0] !== undefined
|
|
255
|
+
? representation.members[0]
|
|
256
|
+
: shape.declaration;
|
|
257
|
+
registerResult(ctx, operation, ctx.builder.allocateConstructor(block, lineage, constructed, captures, representation, heritage));
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
case 'function-object': {
|
|
261
|
+
const callable = operation.callable;
|
|
262
|
+
if (!callable) {
|
|
263
|
+
throw new IrLoweringBlockedError('a function-object allocation names no function to allocate a callable for');
|
|
264
|
+
}
|
|
265
|
+
// Captures are the operands the allocation carries; a function that closes
|
|
266
|
+
// over nothing carries none, and that is the whole capture set, not a
|
|
267
|
+
// partial one this layer would have to complete from elsewhere.
|
|
268
|
+
const captures = orderedOperandsOf(operation, 'capture').map((operand) => resolveRequiredOperand(ctx, block, lineage, operand));
|
|
269
|
+
registerResult(ctx, operation, ctx.builder.allocateCallable(block, lineage, callable, captures, representation));
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
case 'template-object': {
|
|
273
|
+
// The texts came off the template literal's own tokens as constants, and
|
|
274
|
+
// they are read back here as constants: `orderedOperandsOf` keeps them in
|
|
275
|
+
// the ordinal order the producer wrote them in, which is segment order.
|
|
276
|
+
// A non-constant operand would mean something computed a segment, which
|
|
277
|
+
// no step of the language does, so it is refused rather than resolved.
|
|
278
|
+
const raw = orderedOperandsOf(operation, 'raw').map((operand) => {
|
|
279
|
+
if (operand.source.kind !== 'constant') {
|
|
280
|
+
throw new IrLoweringBlockedError("a template object's raw segment is not a constant; template segments are source text, never computed values");
|
|
281
|
+
}
|
|
282
|
+
if (operand.source.literal !== 'string') {
|
|
283
|
+
throw new IrLoweringBlockedError("a template object's raw segment is not a string constant; Template Raw Values are always strings");
|
|
284
|
+
}
|
|
285
|
+
return operand.source.text;
|
|
286
|
+
});
|
|
287
|
+
const cooked = orderedOperandsOf(operation, 'cooked').map((operand) => {
|
|
288
|
+
if (operand.source.kind !== 'constant') {
|
|
289
|
+
throw new IrLoweringBlockedError("a template object's cooked segment is not a constant; template segments are source values, never computed values");
|
|
290
|
+
}
|
|
291
|
+
if (operand.source.literal === 'undefined')
|
|
292
|
+
return { kind: 'undefined' };
|
|
293
|
+
if (operand.source.literal === 'string')
|
|
294
|
+
return { kind: 'string', text: operand.source.text };
|
|
295
|
+
throw new IrLoweringBlockedError("a template object's cooked segment is neither a string nor undefined");
|
|
296
|
+
});
|
|
297
|
+
if (cooked.length !== raw.length) {
|
|
298
|
+
throw new IrLoweringBlockedError(`a template object carries ${cooked.length} cooked segment(s) and ${raw.length} raw one(s); GetTemplateObject builds both arrays from the same segment list`);
|
|
299
|
+
}
|
|
300
|
+
registerResult(ctx, operation, ctx.builder.allocateTemplateObject(block, lineage, cooked, raw, representation));
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
case 'regexp-object': {
|
|
304
|
+
// The pattern and its flags came off the literal's own token as
|
|
305
|
+
// constants and are read back here as constants, exactly as a template
|
|
306
|
+
// object's segments are above. A non-constant operand would mean
|
|
307
|
+
// something computed a pattern, which no step of the language does for a
|
|
308
|
+
// LITERAL (`new RegExp(expr)` is an invocation, not this operation), so
|
|
309
|
+
// it is refused rather than resolved.
|
|
310
|
+
const textOf = (role) => {
|
|
311
|
+
const found = operandOf(operation, role);
|
|
312
|
+
if (!found)
|
|
313
|
+
throw new IrLoweringBlockedError(`a regexp allocation carries no ${role} operand; the literal's own token is where both come from`);
|
|
314
|
+
if (found.source.kind !== 'constant') {
|
|
315
|
+
throw new IrLoweringBlockedError(`a regexp allocation's ${role} is not a constant; a literal's pattern and flags are source text, never computed values`);
|
|
316
|
+
}
|
|
317
|
+
return found.source.text;
|
|
318
|
+
};
|
|
319
|
+
registerResult(ctx, operation, ctx.builder.allocateRegExp(block, lineage, textOf('pattern-source'), textOf('pattern-flags'), representation));
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
case 'construction-result':
|
|
323
|
+
throw new IrLoweringBlockedError('a construction-result allocation has no independent IR primitive; the construct operation that follows it produces the instance directly');
|
|
324
|
+
}
|
|
325
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { OperationId } from '../identity/ids.js';
|
|
2
|
+
import type { SemanticGraph } from '../semantics/model/graph.js';
|
|
3
|
+
import type { IrBlockId } from './model.js';
|
|
4
|
+
/**
|
|
5
|
+
* Where a `break` or `continue` lands.
|
|
6
|
+
*
|
|
7
|
+
* The graph states it as a completion edge, so both answers -- which operation
|
|
8
|
+
* the transfer targets, and which block that operation was lowered into -- are
|
|
9
|
+
* read from that one edge rather than re-derived from the syntax the transfer
|
|
10
|
+
* sat in. A forward transfer to an operation this owner has not lowered yet is
|
|
11
|
+
* refused rather than pointed at a block that does not exist.
|
|
12
|
+
*/
|
|
13
|
+
/** The operation a `break`/`continue` transfers to, as the graph states it. */
|
|
14
|
+
export declare const completionTargetOf: (graph: SemanticGraph, from: OperationId, completion: "break" | "continue") => OperationId | null;
|
|
15
|
+
export declare const findCompletionTargetBlock: (graph: SemanticGraph, blockStarts: ReadonlyMap<OperationId, IrBlockId>, from: OperationId, completion: "break" | "continue") => IrBlockId;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { IrLoweringBlockedError } from './lower-graph.js';
|
|
2
|
+
/**
|
|
3
|
+
* Where a `break` or `continue` lands.
|
|
4
|
+
*
|
|
5
|
+
* The graph states it as a completion edge, so both answers -- which operation
|
|
6
|
+
* the transfer targets, and which block that operation was lowered into -- are
|
|
7
|
+
* read from that one edge rather than re-derived from the syntax the transfer
|
|
8
|
+
* sat in. A forward transfer to an operation this owner has not lowered yet is
|
|
9
|
+
* refused rather than pointed at a block that does not exist.
|
|
10
|
+
*/
|
|
11
|
+
/** The operation a `break`/`continue` transfers to, as the graph states it. */
|
|
12
|
+
export const completionTargetOf = (graph, from, completion) => {
|
|
13
|
+
const edge = graph.edges.find((candidate) => candidate.kind === 'completion' && candidate.from === from && candidate.completion === completion);
|
|
14
|
+
return edge ? edge.to : null;
|
|
15
|
+
};
|
|
16
|
+
export const findCompletionTargetBlock = (graph, blockStarts, from, completion) => {
|
|
17
|
+
const edge = graph.edges.find((candidate) => candidate.kind === 'completion' && candidate.from === from && candidate.completion === completion);
|
|
18
|
+
if (!edge)
|
|
19
|
+
throw new IrLoweringBlockedError(`no completion edge of kind "${completion}" names a target for this control operation`);
|
|
20
|
+
const target = blockStarts.get(edge.to);
|
|
21
|
+
if (!target) {
|
|
22
|
+
throw new IrLoweringBlockedError(`the "${completion}" target has not been lowered to a block yet; a forward transfer to a not-yet-processed operation is not supported`);
|
|
23
|
+
}
|
|
24
|
+
return target;
|
|
25
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { FlowController } from './lower-flow.js';
|
|
2
|
+
import { type LoweringContext } from './lower-operands.js';
|
|
3
|
+
import type { DestructuringOperation } from '../semantics/model/operations.js';
|
|
4
|
+
import type { IrBlockId } from './model.js';
|
|
5
|
+
export declare const lowerDestructuring: (ctx: LoweringContext, flow: FlowController, block: IrBlockId, operation: DestructuringOperation) => void;
|