@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,350 @@
|
|
|
1
|
+
import { allOperationsOf } from './model.js';
|
|
2
|
+
import { operandsOfIrOperation, resultOfIrOperation } from './queries.js';
|
|
3
|
+
import { recursiveCarrierOf, representationKey, walkRepresentation } from '../representation/model.js';
|
|
4
|
+
const abiCarriersOf = (abi) => [
|
|
5
|
+
...abi.parameters.map((parameter) => parameter.value),
|
|
6
|
+
abi.result,
|
|
7
|
+
...(abi.receiver ? [abi.receiver] : [])
|
|
8
|
+
];
|
|
9
|
+
const operationOwnerOf = (body, operation) => `${String(body.owner)}:${operation.kind}`;
|
|
10
|
+
const classBodyOwnersOf = (layout) => [
|
|
11
|
+
layout.constructor,
|
|
12
|
+
...layout.fields.map((field) => field.initializer),
|
|
13
|
+
...layout.methods.map((method) => method.callable),
|
|
14
|
+
...layout.accessors.flatMap((accessor) => [accessor.getter, accessor.setter]),
|
|
15
|
+
...layout.staticFields.map((field) => field.initializer),
|
|
16
|
+
...layout.staticMethods.map((method) => method.callable),
|
|
17
|
+
...layout.staticAccessors.flatMap((accessor) => [accessor.getter, accessor.setter])
|
|
18
|
+
];
|
|
19
|
+
/** Recursive definition/reference carriers intentionally share representationKey. */
|
|
20
|
+
const closureKeyOf = (representation) => {
|
|
21
|
+
const recursive = recursiveCarrierOf(representation);
|
|
22
|
+
return recursive ? `${representationKey(representation)}#${recursive.role}` : representationKey(representation);
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Publish the carrier closure consumed by emission.
|
|
26
|
+
*
|
|
27
|
+
* The input is deliberately the final IR/projection set. This function never
|
|
28
|
+
* scans the sealed plan as a convenience: doing so would retain carriers for
|
|
29
|
+
* dropped bodies and recreate the phantom-struct defect this census exists to
|
|
30
|
+
* remove. `fallbackRoots` is the explicit fail-closed escape for an incomplete
|
|
31
|
+
* shake, where a subset cannot safely stand in for the program.
|
|
32
|
+
*/
|
|
33
|
+
export const publishEmissionRepresentationsOf = (input) => {
|
|
34
|
+
const entries = new Map();
|
|
35
|
+
const rootEntries = new Map();
|
|
36
|
+
const queue = [];
|
|
37
|
+
const queued = new Set();
|
|
38
|
+
let queueCursor = 0;
|
|
39
|
+
const expanded = new Set();
|
|
40
|
+
const retainedClassReasons = new Map();
|
|
41
|
+
const queuedClasses = new Set();
|
|
42
|
+
const retainedPlacementDeclarations = new Set();
|
|
43
|
+
const citedConversionIds = new Set();
|
|
44
|
+
const missingConversions = new Set();
|
|
45
|
+
const missingDefinitions = new Set();
|
|
46
|
+
const reasonKeyOf = (reason) => `${reason.kind}|${reason.owner}|${reason.detail}`;
|
|
47
|
+
const addReason = (table, representation, reason) => {
|
|
48
|
+
const key = closureKeyOf(representation);
|
|
49
|
+
const existing = table.get(key);
|
|
50
|
+
if (!existing) {
|
|
51
|
+
table.set(key, { representation, reasons: new Map([[reasonKeyOf(reason), reason]]) });
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
existing.reasons.set(reasonKeyOf(reason), reason);
|
|
55
|
+
};
|
|
56
|
+
const enqueue = (representation, reason, root = false) => {
|
|
57
|
+
addReason(root ? rootEntries : entries, representation, reason);
|
|
58
|
+
const key = closureKeyOf(representation);
|
|
59
|
+
if (expanded.has(key) || queued.has(key))
|
|
60
|
+
return;
|
|
61
|
+
queued.add(key);
|
|
62
|
+
queue.push({ representation, reason, root });
|
|
63
|
+
};
|
|
64
|
+
const citeConversion = (id, owner) => {
|
|
65
|
+
if (citedConversionIds.has(id))
|
|
66
|
+
return;
|
|
67
|
+
citedConversionIds.add(id);
|
|
68
|
+
const node = input.conversions.nodeById(id);
|
|
69
|
+
if (!node) {
|
|
70
|
+
missingConversions.add(id);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
enqueue(node.source, { kind: 'conversion-source', owner, detail: id });
|
|
74
|
+
enqueue(node.target, { kind: 'conversion-target', owner, detail: id });
|
|
75
|
+
};
|
|
76
|
+
const citeOperand = (body, operation, operand, kind) => {
|
|
77
|
+
enqueue(operand.representation, { kind, owner: operationOwnerOf(body, operation), detail: String(operand.value) }, true);
|
|
78
|
+
};
|
|
79
|
+
// First collect the direct IR roots. Values and operation operands overlap
|
|
80
|
+
// intentionally: their separate reasons tell target consumers whether a
|
|
81
|
+
// carrier is needed by an emitted slot or by an operation's ABI.
|
|
82
|
+
for (const body of input.bodies.values()) {
|
|
83
|
+
for (const [value, representation] of body.values) {
|
|
84
|
+
enqueue(representation, { kind: 'body-value', owner: String(body.owner), detail: String(value) }, true);
|
|
85
|
+
}
|
|
86
|
+
if (body.abi)
|
|
87
|
+
for (const representation of abiCarriersOf(body.abi))
|
|
88
|
+
enqueue(representation, { kind: 'body-abi', owner: String(body.owner), detail: 'call ABI' }, true);
|
|
89
|
+
if (body.construct)
|
|
90
|
+
for (const representation of abiCarriersOf(body.construct))
|
|
91
|
+
enqueue(representation, { kind: 'body-abi', owner: String(body.owner), detail: 'construct ABI' }, true);
|
|
92
|
+
if (body.facts?.capturedReceiver)
|
|
93
|
+
enqueue(body.facts.capturedReceiver, { kind: 'capture-receiver', owner: String(body.owner), detail: 'captured receiver' }, true);
|
|
94
|
+
for (const declaration of [
|
|
95
|
+
...(body.facts?.capturedDeclarations ?? []),
|
|
96
|
+
...(body.facts ? [...body.facts.boxed] : []),
|
|
97
|
+
...(body.facts ? [...body.facts.requiresEarlyBox] : [])
|
|
98
|
+
]) {
|
|
99
|
+
retainedPlacementDeclarations.add(declaration);
|
|
100
|
+
const placement = input.placements.get(declaration);
|
|
101
|
+
if (placement?.representation && !input.omitGlobals?.has(declaration))
|
|
102
|
+
enqueue(placement.representation, { kind: 'capture-cell', owner: String(body.owner), detail: String(declaration) }, true);
|
|
103
|
+
}
|
|
104
|
+
for (const blockId of body.blockOrder) {
|
|
105
|
+
const block = body.blocks.get(blockId);
|
|
106
|
+
if (!block)
|
|
107
|
+
continue;
|
|
108
|
+
for (const operation of allOperationsOf(block)) {
|
|
109
|
+
for (const operand of operandsOfIrOperation(operation))
|
|
110
|
+
citeOperand(body, operation, operand, 'operation-operand');
|
|
111
|
+
const result = resultOfIrOperation(operation);
|
|
112
|
+
if (result)
|
|
113
|
+
citeOperand(body, operation, { value: result.id, representation: result.representation }, 'operation-result');
|
|
114
|
+
if (operation.kind === 'convert')
|
|
115
|
+
citeConversion(operation.conversionUse, operationOwnerOf(body, operation));
|
|
116
|
+
if (operation.kind === 'get' && operation.nativeFieldOwnerRead) {
|
|
117
|
+
const recipe = operation.nativeFieldOwnerRead;
|
|
118
|
+
citeConversion(recipe.missing, operationOwnerOf(body, operation));
|
|
119
|
+
for (const arm of recipe.arms)
|
|
120
|
+
citeConversion(arm.conversion, operationOwnerOf(body, operation));
|
|
121
|
+
for (const member of recipe.members)
|
|
122
|
+
enqueue(member, { kind: 'operation-operand', owner: operationOwnerOf(body, operation), detail: 'native field-owner class identity' }, true);
|
|
123
|
+
}
|
|
124
|
+
if (operation.kind === 'merge-live-arm-rebuild' && operation.nativeTransport) {
|
|
125
|
+
for (const arm of operation.nativeTransport.arms)
|
|
126
|
+
citeConversion(arm.conversion, operationOwnerOf(body, operation));
|
|
127
|
+
if (operation.nativeTransport.absence)
|
|
128
|
+
citeConversion(operation.nativeTransport.absence, operationOwnerOf(body, operation));
|
|
129
|
+
}
|
|
130
|
+
if (operation.kind === 'call' && operation.fixedDataDefinition)
|
|
131
|
+
citeConversion(operation.fixedDataDefinition.conversion, operationOwnerOf(body, operation));
|
|
132
|
+
if (operation.kind === 'call')
|
|
133
|
+
for (const value of operation.objectValueConversions ?? [])
|
|
134
|
+
citeConversion(value.conversion, operationOwnerOf(body, operation));
|
|
135
|
+
if (operation.kind === 'get' && operation.typedComputedRead) {
|
|
136
|
+
for (const arm of operation.typedComputedRead.arms)
|
|
137
|
+
citeConversion(arm.conversion, operationOwnerOf(body, operation));
|
|
138
|
+
if (operation.typedComputedRead.receiverBounded)
|
|
139
|
+
citeConversion(operation.typedComputedRead.receiverBounded.missing, operationOwnerOf(body, operation));
|
|
140
|
+
}
|
|
141
|
+
if (operation.kind === 'binding-read' || operation.kind === 'binding-write')
|
|
142
|
+
retainedPlacementDeclarations.add(operation.declaration);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
// The target emits every non-local placement (region/global and host
|
|
147
|
+
// boundaries) from its placement tables. Local cells are emitted only when
|
|
148
|
+
// the final IR or capture facts name them; otherwise there is no frame slot
|
|
149
|
+
// to materialize. `omitGlobals` applies only to the local liveness set here:
|
|
150
|
+
// global storage, externs, and absent definitions remain target declarations.
|
|
151
|
+
const retainedPlacements = new Map();
|
|
152
|
+
for (const [declaration, placement] of input.placements) {
|
|
153
|
+
if (input.omitGlobals?.has(declaration) && (placement.storage.kind === 'local' || placement.storage.kind === 'region'))
|
|
154
|
+
continue;
|
|
155
|
+
if (placement.storage.kind === 'local' && !retainedPlacementDeclarations.has(declaration))
|
|
156
|
+
continue;
|
|
157
|
+
retainedPlacements.set(declaration, placement);
|
|
158
|
+
if (placement.representation)
|
|
159
|
+
enqueue(placement.representation, { kind: 'retained-placement', owner: String(declaration), detail: placement.storage.kind }, true);
|
|
160
|
+
}
|
|
161
|
+
// Every class in the final shaken class map is rendered by the target. Seed
|
|
162
|
+
// them all; class-ref discovery below still feeds the same queue so nominal
|
|
163
|
+
// layouts reached through nested carriers cannot be missed.
|
|
164
|
+
const bodyOwners = new Set([...input.bodies.values()].map((body) => String(body.sourceOwner)));
|
|
165
|
+
for (const [declaration, layout] of input.classes) {
|
|
166
|
+
const memberBodyRetained = classBodyOwnersOf(layout).some((owner) => owner !== null && bodyOwners.has(String(owner)));
|
|
167
|
+
retainedClassReasons.set(declaration, {
|
|
168
|
+
kind: 'retained-class',
|
|
169
|
+
owner: String(declaration),
|
|
170
|
+
detail: memberBodyRetained ? 'retained member body' : 'final class layout'
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
const classQueue = [];
|
|
174
|
+
const markClass = (declaration, detail) => {
|
|
175
|
+
if (retainedClassReasons.has(declaration)) {
|
|
176
|
+
if (!queuedClasses.has(declaration) && !expandedClasses.has(declaration)) {
|
|
177
|
+
queuedClasses.add(declaration);
|
|
178
|
+
classQueue.push(declaration);
|
|
179
|
+
}
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
retainedClassReasons.set(declaration, { kind: 'retained-class', owner: String(declaration), detail });
|
|
183
|
+
queuedClasses.add(declaration);
|
|
184
|
+
classQueue.push(declaration);
|
|
185
|
+
};
|
|
186
|
+
const expandedClasses = new Set();
|
|
187
|
+
for (const declaration of retainedClassReasons.keys())
|
|
188
|
+
markClass(declaration, 'final class layout');
|
|
189
|
+
const expandClassQueue = () => {
|
|
190
|
+
while (classQueue.length > 0) {
|
|
191
|
+
const declaration = classQueue.pop();
|
|
192
|
+
if (!declaration || expandedClasses.has(declaration))
|
|
193
|
+
continue;
|
|
194
|
+
expandedClasses.add(declaration);
|
|
195
|
+
const layout = input.classes.get(declaration);
|
|
196
|
+
if (!layout)
|
|
197
|
+
continue;
|
|
198
|
+
if (layout.instance)
|
|
199
|
+
enqueue(layout.instance, { kind: 'class-instance', owner: String(declaration), detail: 'class instance carrier' }, true);
|
|
200
|
+
if (layout.construct)
|
|
201
|
+
for (const representation of abiCarriersOf(layout.construct))
|
|
202
|
+
enqueue(representation, { kind: 'class-construct', owner: String(declaration), detail: 'class construct ABI' }, true);
|
|
203
|
+
for (const field of layout.nativeStorage?.fields.map((field) => ({ key: field.key, representation: field.value })) ?? layout.fields)
|
|
204
|
+
if (field.representation)
|
|
205
|
+
enqueue(field.representation, { kind: 'class-field', owner: String(declaration), detail: field.key }, true);
|
|
206
|
+
for (const field of layout.staticFields)
|
|
207
|
+
if (field.representation)
|
|
208
|
+
enqueue(field.representation, { kind: 'class-static-field', owner: String(declaration), detail: field.key }, true);
|
|
209
|
+
if (layout.nativeBase)
|
|
210
|
+
enqueue(layout.nativeBase.instance, { kind: 'class-instance', owner: String(declaration), detail: 'native base instance carrier' }, true);
|
|
211
|
+
if (layout.base)
|
|
212
|
+
markClass(layout.base, `base of ${String(declaration)}`);
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
expandClassQueue();
|
|
216
|
+
// Complete the representation closure. walkRepresentation covers all
|
|
217
|
+
// ordinary nested carriers; nominal layout expansion above is the only
|
|
218
|
+
// compiler-context-dependent extension.
|
|
219
|
+
const ordered = new Map();
|
|
220
|
+
const drainRepresentations = () => {
|
|
221
|
+
while (queueCursor < queue.length) {
|
|
222
|
+
const item = queue[queueCursor++];
|
|
223
|
+
if (!item)
|
|
224
|
+
continue;
|
|
225
|
+
const key = closureKeyOf(item.representation);
|
|
226
|
+
const entry = entries.get(key) ?? rootEntries.get(key);
|
|
227
|
+
if (entry && !entries.has(key))
|
|
228
|
+
entries.set(key, entry);
|
|
229
|
+
if (!ordered.has(key))
|
|
230
|
+
ordered.set(key, item.representation);
|
|
231
|
+
if (expanded.has(key))
|
|
232
|
+
continue;
|
|
233
|
+
expanded.add(key);
|
|
234
|
+
for (const child of walkRepresentation(item.representation)) {
|
|
235
|
+
if (child === item.representation)
|
|
236
|
+
continue;
|
|
237
|
+
if (child.kind === 'class-ref')
|
|
238
|
+
markClass(child.declaration, `carrier ${representationKey(child)}`);
|
|
239
|
+
const childReason = {
|
|
240
|
+
kind: item.root ? item.reason.kind : 'operation-result',
|
|
241
|
+
owner: item.reason.owner,
|
|
242
|
+
detail: `nested in ${key}`
|
|
243
|
+
};
|
|
244
|
+
enqueue(child, childReason);
|
|
245
|
+
}
|
|
246
|
+
if (item.representation.kind === 'class-ref') {
|
|
247
|
+
markClass(item.representation.declaration, `carrier ${representationKey(item.representation)}`);
|
|
248
|
+
const runtimeLayout = input.classes.get(item.representation.declaration);
|
|
249
|
+
const base = runtimeLayout ? runtimeLayout.base : (item.representation.ancestors[0] ?? null);
|
|
250
|
+
if (base !== null && !runtimeLayout?.nativeBase) {
|
|
251
|
+
const instance = input.classes.get(base)?.instance ?? input.resolveClassRef?.(base);
|
|
252
|
+
if (instance?.kind === 'class-ref')
|
|
253
|
+
enqueue(instance, { kind: 'class-instance', owner: String(base), detail: 'retained physical base' });
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
if (item.representation.kind === 'native-record-ref' && item.representation.recursive?.role === 'reference') {
|
|
257
|
+
const layout = input.deriver.layoutOf(item.representation.recursive.type);
|
|
258
|
+
const recursive = recursiveCarrierOf(layout);
|
|
259
|
+
const isDefinition = recursive?.type === item.representation.recursive.type &&
|
|
260
|
+
recursive.role === 'definition' &&
|
|
261
|
+
(layout.kind === 'array-object' ||
|
|
262
|
+
layout.kind === 'keyed-collection' ||
|
|
263
|
+
layout.kind === 'dictionary' ||
|
|
264
|
+
layout.kind === 'function-value-dispatch');
|
|
265
|
+
if (isDefinition) {
|
|
266
|
+
const reason = {
|
|
267
|
+
kind: 'native-layout',
|
|
268
|
+
owner: item.reason.owner,
|
|
269
|
+
detail: `recursive definition ${item.representation.recursive.type}`
|
|
270
|
+
};
|
|
271
|
+
enqueue(layout, reason);
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
missingDefinitions.add(String(item.representation.recursive.type));
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
else if ((item.representation.kind === 'native-record-ref' || item.representation.kind === 'class-ref') &&
|
|
278
|
+
(item.representation.kind !== 'native-record-ref' ||
|
|
279
|
+
(item.representation.native === null && item.representation.recursive === undefined))) {
|
|
280
|
+
const rawLayout = input.deriver.layoutOf(item.representation.shapeId);
|
|
281
|
+
const nativeStorage = item.representation.kind === 'class-ref' ? input.classes.get(item.representation.declaration)?.nativeStorage : undefined;
|
|
282
|
+
const layout = nativeStorage !== undefined && (rawLayout.kind === 'record' || rawLayout.kind === 'record-with-index')
|
|
283
|
+
? { ...rawLayout, fields: nativeStorage.fields }
|
|
284
|
+
: rawLayout;
|
|
285
|
+
const reason = {
|
|
286
|
+
kind: 'native-layout',
|
|
287
|
+
owner: item.reason.owner,
|
|
288
|
+
detail: item.representation.shapeId
|
|
289
|
+
};
|
|
290
|
+
for (const child of walkRepresentation(layout)) {
|
|
291
|
+
if (child === layout)
|
|
292
|
+
continue;
|
|
293
|
+
enqueue(child, reason);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
};
|
|
298
|
+
drainRepresentations();
|
|
299
|
+
while (classQueue.length > 0) {
|
|
300
|
+
expandClassQueue();
|
|
301
|
+
drainRepresentations();
|
|
302
|
+
}
|
|
303
|
+
// Incomplete shake or an IR that cites a conversion the authority cannot
|
|
304
|
+
// resolve cannot safely drive a reduced target closure. Reintroduce the
|
|
305
|
+
// caller-supplied plan roots and report the incomplete status; never guess.
|
|
306
|
+
const complete = input.complete && missingConversions.size === 0 && missingDefinitions.size === 0;
|
|
307
|
+
if (!complete) {
|
|
308
|
+
for (const representation of input.fallbackRoots ?? [])
|
|
309
|
+
enqueue(representation, { kind: 'fallback-plan-root', owner: 'sealed-plan', detail: 'incomplete emission census' }, true);
|
|
310
|
+
drainRepresentations();
|
|
311
|
+
while (classQueue.length > 0) {
|
|
312
|
+
expandClassQueue();
|
|
313
|
+
drainRepresentations();
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
const closure = new Map();
|
|
317
|
+
const publishedEntryOf = (entry) => ({
|
|
318
|
+
representation: entry.representation,
|
|
319
|
+
reasons: Object.freeze([...entry.reasons.values()])
|
|
320
|
+
});
|
|
321
|
+
for (const [key, representation] of ordered) {
|
|
322
|
+
const nested = entries.get(key);
|
|
323
|
+
const direct = rootEntries.get(key);
|
|
324
|
+
if (!nested && !direct) {
|
|
325
|
+
closure.set(key, { representation, reasons: [] });
|
|
326
|
+
continue;
|
|
327
|
+
}
|
|
328
|
+
const unique = new Map();
|
|
329
|
+
for (const reason of [...(nested?.reasons.values() ?? []), ...(direct?.reasons.values() ?? [])])
|
|
330
|
+
unique.set(reasonKeyOf(reason), reason);
|
|
331
|
+
closure.set(key, { representation: nested?.representation ?? direct.representation, reasons: Object.freeze([...unique.values()]) });
|
|
332
|
+
}
|
|
333
|
+
const reasons = new Map();
|
|
334
|
+
for (const [key, entry] of closure)
|
|
335
|
+
reasons.set(key, entry.reasons);
|
|
336
|
+
return Object.freeze({
|
|
337
|
+
representations: Object.freeze([...ordered.values()]),
|
|
338
|
+
complete,
|
|
339
|
+
roots: Object.freeze([...rootEntries.values()].map(publishedEntryOf)),
|
|
340
|
+
closure,
|
|
341
|
+
reasons,
|
|
342
|
+
retainedClasses: new Set(retainedClassReasons.keys()),
|
|
343
|
+
retainedPlacements,
|
|
344
|
+
conversions: new Map([...citedConversionIds]
|
|
345
|
+
.map((id) => [id, input.conversions.nodeById(id)])
|
|
346
|
+
.filter((row) => row[1] !== null)),
|
|
347
|
+
missingConversions: Object.freeze([...missingConversions]),
|
|
348
|
+
missingDefinitions: Object.freeze([...missingDefinitions])
|
|
349
|
+
});
|
|
350
|
+
};
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import type { DeclarationId, FunctionId, IrValueId } from '../identity/ids.js';
|
|
2
|
+
import { type DeadValueRules } from './dead-values.js';
|
|
3
|
+
import type { ForwardedBinding, ForwardingPolicy } from './deferral.js';
|
|
4
|
+
import { type HoistPlan } from './hoist.js';
|
|
5
|
+
import { type IntegerStorageFacts } from './integers.js';
|
|
6
|
+
import { type CallOperation, type ComputeOperation, type GetOperation, type IrBody, type IrOperand } from './model.js';
|
|
7
|
+
import { type NumericIntrinsic } from './numeric-intrinsics.js';
|
|
8
|
+
import { type SharedStringLayout } from './string-layout-reuse.js';
|
|
9
|
+
import { type TypeQueryComparison } from './type-query-results.js';
|
|
10
|
+
/**
|
|
11
|
+
* Every per-body census the printer needs before it renders a line, computed
|
|
12
|
+
* in one place, in the one order they depend on each other in.
|
|
13
|
+
*
|
|
14
|
+
* Distinct from `IrBody.facts` (`ir/captures.ts`), which is the whole-program
|
|
15
|
+
* capture answer sealed onto the body before rendering starts. These are the
|
|
16
|
+
* per-body questions, asked once per body at render entry; the two converge
|
|
17
|
+
* when the remaining Phase 3 rows land.
|
|
18
|
+
*
|
|
19
|
+
* These thirteen analyses used to run inline in `targets/cpp/emit.ts`, each
|
|
20
|
+
* copying its answer into the emit context. Nothing about them is C++: they ask
|
|
21
|
+
* what a body does -- which results nothing reads, which reads may be deferred
|
|
22
|
+
* to their single use, which numbers fit a `long long`, which loop-invariant
|
|
23
|
+
* reads may be hoisted -- and the printer only spells the answers. What made
|
|
24
|
+
* them live in the target was the ORDER, which is real and subtle and was
|
|
25
|
+
* recorded only as comments between the calls: the type-query census removes
|
|
26
|
+
* values from the deferral census, the hoists remove more, and the string
|
|
27
|
+
* length reuse removes more still, so reading the deferral set at the wrong
|
|
28
|
+
* point in the sequence silently answers a question with a set that is about
|
|
29
|
+
* to shrink. Here that order is the body of one function, stated once, and a
|
|
30
|
+
* reader who needs to know why a step sits where it does finds the reason at
|
|
31
|
+
* the step rather than in a comment beside a call site.
|
|
32
|
+
*
|
|
33
|
+
* The target still owns two decisions inside the sequence, because both are
|
|
34
|
+
* about C++ storage rather than about the program, and both are needed
|
|
35
|
+
* mid-order. They arrive as `IrBodyCensusPolicy` hooks, invoked exactly where
|
|
36
|
+
* the inline pipeline invoked them.
|
|
37
|
+
*/
|
|
38
|
+
export interface IrBodyCensus {
|
|
39
|
+
/** Protocol cursors that never escape their `get-iterator`, so the printer may hold them by value. */
|
|
40
|
+
readonly localIterators: ReadonlySet<IrValueId>;
|
|
41
|
+
/** Values with exactly one reader, renderable at that reader -- already shrunk by every later census that claims one. */
|
|
42
|
+
readonly deferrable: ReadonlySet<IrValueId>;
|
|
43
|
+
readonly callArgumentOnly: ReadonlySet<IrValueId>;
|
|
44
|
+
/** Cells whose one write renders nothing and whose one read spells the written value -- see `deferral.ts`'s `ForwardedBinding`. Shrunk with `deferrable`: a forwarding whose value or read stopped deferring is withdrawn. */
|
|
45
|
+
readonly forwardedBindings: ReadonlyMap<DeclarationId, ForwardedBinding>;
|
|
46
|
+
/** Results nothing reads and whose producer has no other effect. Disjoint from `deferrable` by construction. */
|
|
47
|
+
readonly dead: ReadonlySet<IrValueId>;
|
|
48
|
+
/** Results nothing reads, whatever their producer does. */
|
|
49
|
+
readonly unread: ReadonlySet<IrValueId>;
|
|
50
|
+
readonly booleanConstants: ReadonlyMap<IrValueId, boolean>;
|
|
51
|
+
readonly typeQueryValues: ReadonlySet<IrValueId>;
|
|
52
|
+
readonly typeQueryBindings: ReadonlySet<DeclarationId>;
|
|
53
|
+
readonly typeQueryComparisons: ReadonlyMap<ComputeOperation, TypeQueryComparison>;
|
|
54
|
+
readonly integerValues: ReadonlySet<IrValueId>;
|
|
55
|
+
readonly integerBindings: ReadonlySet<DeclarationId>;
|
|
56
|
+
readonly remainderForms: ReadonlyMap<IrValueId, 'restated' | 'dynamic'>;
|
|
57
|
+
readonly numericCalls: ReadonlyMap<CallOperation, NumericIntrinsic>;
|
|
58
|
+
readonly numericCallOnly: ReadonlySet<IrValueId>;
|
|
59
|
+
readonly loopInvariantValues: ReadonlySet<IrValueId>;
|
|
60
|
+
readonly hoists: HoistPlan;
|
|
61
|
+
readonly hoistedResults: ReadonlySet<IrValueId>;
|
|
62
|
+
readonly sharedStringLayouts: ReadonlyMap<IrValueId, SharedStringLayout>;
|
|
63
|
+
readonly reusedStringLengths: ReadonlyMap<IrValueId, IrOperand>;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* What the target answers for its own carriers, plus the two points in the
|
|
67
|
+
* order where it must act.
|
|
68
|
+
*
|
|
69
|
+
* Every field here is a question the IR genuinely cannot answer for itself: it
|
|
70
|
+
* is about how this backend spells or stores a thing, and a second answer
|
|
71
|
+
* derived from the IR would be a second authority over the printer's own
|
|
72
|
+
* storage decisions.
|
|
73
|
+
*/
|
|
74
|
+
export interface IrBodyCensusPolicy {
|
|
75
|
+
/** Whether this member read is a plain load the printer can move to its single use (not, for instance, a reactive cell whose spelling differs inline). */
|
|
76
|
+
readonly deferrableMemberRead: (operation: GetOperation) => boolean;
|
|
77
|
+
/** Which renderings spell a forwarded call once, and which cells are private enough to forward -- see `deferral.ts`'s `ForwardingPolicy`. */
|
|
78
|
+
readonly forwarding: ForwardingPolicy;
|
|
79
|
+
/** What counts as a pure or by-name-reached producer, so a result nothing reads may be deleted with it. */
|
|
80
|
+
readonly deadValues: DeadValueRules;
|
|
81
|
+
/** Whether this cell is a private local `string` whose `typeof` result may be saved rather than recomputed. */
|
|
82
|
+
readonly stringQueryCell: (declaration: DeclarationId) => boolean;
|
|
83
|
+
/** What a whole-program census already settled about this body's integer storage. */
|
|
84
|
+
readonly integerStorage: IntegerStorageFacts;
|
|
85
|
+
/**
|
|
86
|
+
* The target's constant spelling, which runs after the dead/unread censuses
|
|
87
|
+
* and before the type-query census.
|
|
88
|
+
*
|
|
89
|
+
* Position is the whole contract: the spellings are read by the predicates
|
|
90
|
+
* this sequence calls later, and the dead set is what decides which of them
|
|
91
|
+
* are worth minting at all.
|
|
92
|
+
*/
|
|
93
|
+
readonly spellConstants: () => void;
|
|
94
|
+
/**
|
|
95
|
+
* The target's formal-cell and capacity decisions, which run after the
|
|
96
|
+
* integer census -- the one thing that can make a cell and its own formal
|
|
97
|
+
* two different storages -- and before the hoists, whose relocations this
|
|
98
|
+
* step is allowed to name. Returns the values that ended up carried by a
|
|
99
|
+
* formal cell, which is what the string-length reuse census treats as stable.
|
|
100
|
+
*
|
|
101
|
+
* It is handed the facts settled so far, because the deferral set it reads
|
|
102
|
+
* is still the one the hoists have not yet claimed from: a bound this step
|
|
103
|
+
* declines to name because a deferred value already withholds it must go on
|
|
104
|
+
* declining after that value is relocated, and a step reading the final set
|
|
105
|
+
* would name it a second time.
|
|
106
|
+
*/
|
|
107
|
+
readonly formalStorage: (settled: IrBodyCensusBeforeHoists) => ReadonlySet<DeclarationId>;
|
|
108
|
+
}
|
|
109
|
+
/** What is known when `formalStorage` runs: everything except the hoists and the two censuses that read them. */
|
|
110
|
+
export type IrBodyCensusBeforeHoists = Pick<IrBodyCensus, 'localIterators' | 'deferrable' | 'callArgumentOnly' | 'forwardedBindings' | 'dead' | 'unread' | 'booleanConstants' | 'typeQueryValues' | 'typeQueryBindings' | 'typeQueryComparisons' | 'integerValues' | 'integerBindings' | 'remainderForms' | 'numericCalls' | 'numericCallOnly'>;
|
|
111
|
+
export declare const irBodyCensusOf: (body: IrBody, policy: IrBodyCensusPolicy) => IrBodyCensus;
|
|
112
|
+
/**
|
|
113
|
+
* Where every value in this body came from -- purely syntactic indices over
|
|
114
|
+
* the IR, with no C++ in the answer at all.
|
|
115
|
+
*
|
|
116
|
+
* The no-write-during-render rule, which moved these facts out of the target:
|
|
117
|
+
* `targets/cpp/emit.ts`'s `emitCompute`, `targets/cpp/emit-properties.ts`'s
|
|
118
|
+
* `emitGet` and `targets/cpp/emit-bindings.ts`'s `emitBindingRead` used to
|
|
119
|
+
* record `computeOrigins`/`propertyReadOrigins`/`bindingReadDeclarations` as a
|
|
120
|
+
* SIDE EFFECT of rendering the very operation each map is keyed by -- "the
|
|
121
|
+
* compute operation that defined this value" needs nothing about what has
|
|
122
|
+
* been printed, or in what order; it is answered by the operation's own
|
|
123
|
+
* `result.id`, which exists before any statement is emitted. Recording it at
|
|
124
|
+
* print time made the printer a second authority over a fact the IR already
|
|
125
|
+
* settles, and meant a value visited twice (`ir/dead-values.ts`'s dead-value
|
|
126
|
+
* short-circuit skipped `emitCompute` entirely, so `emit.ts`'s
|
|
127
|
+
* `registerDirectCalleeOfDeadValue` had its OWN, independent
|
|
128
|
+
* `bindingReadDeclarations.set` to avoid a hole) was one fact filled from two
|
|
129
|
+
* places instead of one.
|
|
130
|
+
*
|
|
131
|
+
* `valueCellReads` (`targets/cpp/deferral-safety.ts`'s former
|
|
132
|
+
* `collectValueCellReads`) is the fixed-point closure of `bindingReadDeclarations`
|
|
133
|
+
* over every operand a value derives from -- also purely a property of the
|
|
134
|
+
* operand graph, also unrelated to render order.
|
|
135
|
+
*/
|
|
136
|
+
export interface BodyValueOrigins {
|
|
137
|
+
/** Every `compute` operation's own definition, by the value it produced. */
|
|
138
|
+
readonly computeOrigins: ReadonlyMap<IrValueId, ComputeOperation>;
|
|
139
|
+
/** Every `get` operation's own definition, by the value it produced. */
|
|
140
|
+
readonly propertyReadOrigins: ReadonlyMap<IrValueId, GetOperation>;
|
|
141
|
+
/**
|
|
142
|
+
* Every `constant` operation's own literal text, by the value it defined.
|
|
143
|
+
*
|
|
144
|
+
* The same table the printer builds for itself in `spellConstants`, stated
|
|
145
|
+
* here because a census that has to ask "is this property key a literal, and
|
|
146
|
+
* which one" needs the answer before any spelling exists -- a static member
|
|
147
|
+
* name is a fact about the operation, not about the line it becomes.
|
|
148
|
+
*
|
|
149
|
+
* Named for what it ANSWERS rather than for how it is built, because there
|
|
150
|
+
* is a second map that would otherwise share the name and must never be
|
|
151
|
+
* confused with it: `EmitContext.constantTexts` starts EMPTY at the point
|
|
152
|
+
* this one is already complete, and then grows during the render as a
|
|
153
|
+
* `typeof` whose operand's tag is known folds to a literal. Feeding that one
|
|
154
|
+
* to a claim lets a fold decide a key the program computed. Both are
|
|
155
|
+
* `ReadonlyMap<IrValueId, string>`, so only the name stands between them --
|
|
156
|
+
* which is why `scripts/architecture.mjs` now also refuses to let
|
|
157
|
+
* `ctx.constantTexts` be passed as an argument at all.
|
|
158
|
+
*/
|
|
159
|
+
readonly staticKeyTexts: ReadonlyMap<IrValueId, string>;
|
|
160
|
+
/** The declaration every `binding-read` value loaded from, live or dead. */
|
|
161
|
+
readonly bindingReadDeclarations: ReadonlyMap<IrValueId, DeclarationId>;
|
|
162
|
+
/** The operand every `convert` result was converted FROM, so a consumer can walk a value's history through a carrier change. */
|
|
163
|
+
readonly conversionSources: ReadonlyMap<IrValueId, IrOperand>;
|
|
164
|
+
/**
|
|
165
|
+
* The callee value behind every call's result -- which value it CALLED,
|
|
166
|
+
* which is the same fact whichever of the printer's dispatch paths spells
|
|
167
|
+
* the call.
|
|
168
|
+
*/
|
|
169
|
+
readonly callCallees: ReadonlyMap<IrValueId, IrValueId>;
|
|
170
|
+
/**
|
|
171
|
+
* Every value whose EVERY read in this body is as a call's callee -- a host
|
|
172
|
+
* function read and called on the spot (`Math.pow(x)`), never compared,
|
|
173
|
+
* stored, passed or returned. Counted over the operands and terminators the
|
|
174
|
+
* body states, so a read that also feeds a binding write (`(f = Math.pow)(x)`)
|
|
175
|
+
* is not in it. The printer uses it to leave the hot call path alone: the
|
|
176
|
+
* identity a value read of a host builtin must carry (`emit-host-properties.ts`)
|
|
177
|
+
* is only observable where the value goes somewhere other than a call.
|
|
178
|
+
*/
|
|
179
|
+
readonly calleeOnlyValues: ReadonlySet<IrValueId>;
|
|
180
|
+
/**
|
|
181
|
+
* Where each member of a record-shaped value came FROM, by member key, so a
|
|
182
|
+
* consumer can still see a member's expression after it has become struct
|
|
183
|
+
* storage.
|
|
184
|
+
*
|
|
185
|
+
* Two producers, and the accumulation between them is why this is a walk in
|
|
186
|
+
* block order rather than a map comprehension: an `allocate-record` states
|
|
187
|
+
* every member at once, while an object literal that installs its members
|
|
188
|
+
* by STORE builds the same answer one `set` at a time, each carrying the
|
|
189
|
+
* accumulated map onto the receiver and onto its own result (a store
|
|
190
|
+
* threads its receiver onward).
|
|
191
|
+
*
|
|
192
|
+
* A store counts only when its key is a `constant` -- the same test the
|
|
193
|
+
* printer made against its own constant table, restated against the IR the
|
|
194
|
+
* table is filled from.
|
|
195
|
+
*
|
|
196
|
+
* BOTH store kinds, because `emit-properties.ts`'s `emitPropertyStore`
|
|
197
|
+
* serves both and accumulated for both: an object literal whose members are
|
|
198
|
+
* installed by `define-own-property` (which is what a descriptor literal
|
|
199
|
+
* is) builds its answer exactly the way a `set`-installed one does, and
|
|
200
|
+
* covering only `set` loses the descriptor `Object.defineProperty` on a
|
|
201
|
+
* dictionary reads its typed `value` operand out of.
|
|
202
|
+
*/
|
|
203
|
+
readonly recordFieldSources: ReadonlyMap<IrValueId, ReadonlyMap<string, IrOperand>>;
|
|
204
|
+
/**
|
|
205
|
+
* Every callable this body allocated as a THUNK -- a zero-parameter,
|
|
206
|
+
* receiver-less `function-value-dispatch` -- to the function whose body it
|
|
207
|
+
* runs.
|
|
208
|
+
*
|
|
209
|
+
* The carrier is unwrapped through `optional` first, because a thunk stored
|
|
210
|
+
* into an absence-capable slot is still a thunk; that is the shape the
|
|
211
|
+
* printer's own two write sites tested, one of them on the unwrapped
|
|
212
|
+
* carrier and one on the bare one.
|
|
213
|
+
*/
|
|
214
|
+
readonly thunkValues: ReadonlyMap<IrValueId, FunctionId>;
|
|
215
|
+
/** Every cell a value transitively reads, over the whole body -- see `targets/cpp/deferral-safety.ts`'s `readsCell`. */
|
|
216
|
+
readonly valueCellReads: ReadonlyMap<IrValueId, ReadonlySet<DeclarationId>>;
|
|
217
|
+
}
|
|
218
|
+
export declare const bodyValueOriginsOf: (body: IrBody) => BodyValueOrigins;
|