@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,269 @@
|
|
|
1
|
+
import { ownershipOf } from '../../representation/model.js';
|
|
2
|
+
import { currentCppRuntimeCapabilities } from './manifest.js';
|
|
3
|
+
import { cppTypeOf } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Which functions capture, and whether each capture is safe to transport.
|
|
6
|
+
*
|
|
7
|
+
* The walk itself -- which declaration each body reads or writes whose cell
|
|
8
|
+
* some OTHER frame owns, the transitive closure over allocation edges, and
|
|
9
|
+
* which of those cells must be boxed -- is `ir/captures.ts`'s
|
|
10
|
+
* `computeCaptureFacts`/`publishCaptureFacts`, run once over the whole
|
|
11
|
+
* program and published onto each body as `IrBody.facts`
|
|
12
|
+
* (a program fact; the target is a printer and computes none of its own). This module used to
|
|
13
|
+
* recompute all of that itself from the same bodies and placements at render
|
|
14
|
+
* time; what is left here is the part that is genuinely target-specific: the
|
|
15
|
+
* carrier-ownership ADMISSION decision against `currentCppRuntimeCapabilities`
|
|
16
|
+
* (`isAdmittedOwnership`), and turning an admitted set of declarations into
|
|
17
|
+
* the `CaptureLayout`/`CaptureSlot` shape the emitter reads
|
|
18
|
+
* (`admissionForBody`).
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Whether this backend's runtime manifest actually supports the ownership
|
|
22
|
+
* class `representation/model.ts`'s `ownershipOf` names for a carrier -- a target-
|
|
23
|
+
* specific admission decision against `currentCppRuntimeCapabilities`, kept
|
|
24
|
+
* apart from the (representation-only) classification itself.
|
|
25
|
+
*/
|
|
26
|
+
const isAdmittedOwnership = (representation) => {
|
|
27
|
+
const ownership = ownershipOf(representation);
|
|
28
|
+
return ownership !== null && currentCppRuntimeCapabilities.captureOwnershipSupport.has(ownership);
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* One capturing function's environment, or the precise reason it cannot have
|
|
32
|
+
* one -- built from `IrBodyFacts.capturedDeclarations`/`.capturedReceiver`
|
|
33
|
+
* (`ir/captures.ts`'s transitive closure over allocation edges, published
|
|
34
|
+
* once onto the body) plus the whole-program `boxed` fact.
|
|
35
|
+
*
|
|
36
|
+
* `boxed` alone decides the aliasing question: it is exactly the union of
|
|
37
|
+
* "reassigned somewhere in the program", "holds the very closure capturing
|
|
38
|
+
* it" and "captured before any owning-frame write dominates the allocation"
|
|
39
|
+
* (`ir/captures.ts`'s `computeCaptureFacts`), so a declaration this loop
|
|
40
|
+
* finds NOT boxed can be none of those three -- there is no separate
|
|
41
|
+
* reassigned/self-reference branch to fall through to below the boxed one.
|
|
42
|
+
*/
|
|
43
|
+
const admissionForBody = (captured, receiverUse, placements, boxed) => {
|
|
44
|
+
const slots = [];
|
|
45
|
+
let receiver = null;
|
|
46
|
+
let refusal = null;
|
|
47
|
+
for (const declaration of captured) {
|
|
48
|
+
const placement = placements.get(declaration);
|
|
49
|
+
if (!placement)
|
|
50
|
+
continue;
|
|
51
|
+
if (refusal)
|
|
52
|
+
continue; // Already refused; the first reason found is the one reported.
|
|
53
|
+
if (boxed.has(declaration)) {
|
|
54
|
+
// Shared by aliasing, not by copying: `ir/captures.ts` has already
|
|
55
|
+
// decided (whole-program) that this exact declaration is reassigned
|
|
56
|
+
// after some closure captures it, or holds the very closure capturing
|
|
57
|
+
// it, or is captured before an owning write dominates the allocation,
|
|
58
|
+
// and that a plain value copy would therefore be wrong -- see
|
|
59
|
+
// `IrBodyFacts.boxed`. What this slot carries is a `std::shared_ptr`
|
|
60
|
+
// handle to the one heap cell every frame touching the declaration
|
|
61
|
+
// aliases, and copying a handle is always safe regardless of what the
|
|
62
|
+
// declaration's own representation's ownership tier says.
|
|
63
|
+
if (!placement.representation || placement.representation.kind === 'unresolved') {
|
|
64
|
+
refusal = `${declaration} is captured but the representation plan selected no carrier for it`;
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
slots.push({ declaration, representation: placement.representation, boxed: true });
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
if (!placement.representation) {
|
|
71
|
+
refusal = `${declaration} is captured but the representation plan selected no carrier for it`;
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
if (!isAdmittedOwnership(placement.representation)) {
|
|
75
|
+
const ownership = ownershipOf(placement.representation);
|
|
76
|
+
refusal = ownership
|
|
77
|
+
? `${declaration} is captured but carries "${placement.representation.kind}" with ${ownership} ownership, which this backend's capture support does not admit`
|
|
78
|
+
: `${declaration} is captured but carries "${placement.representation.kind}", which has no ownership this backend can prove a copy stays safe under`;
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
slots.push({ declaration, representation: placement.representation, boxed: false });
|
|
82
|
+
}
|
|
83
|
+
// A body with no receiver of its own that nonetheless needs one either
|
|
84
|
+
// reads `this` directly (the `lower-operands.ts` capture fallback: an
|
|
85
|
+
// ordinary method's `this` read inside a nested arrow, lowered as a
|
|
86
|
+
// capture of the enclosing frame's receiver) or merely relays it -- it
|
|
87
|
+
// allocates some nested closure that reads `this` several frames deeper,
|
|
88
|
+
// without ever naming `this` itself. `receiverUse` already carries
|
|
89
|
+
// whichever of those is true, propagated by `ir/captures.ts`'s `transitiveCaptures` exactly
|
|
90
|
+
// the way `captured` above propagates an ordinary declaration outward
|
|
91
|
+
// through every relay frame; a body that owns its receiver contributes
|
|
92
|
+
// `null` to that propagation regardless of what its own operations name,
|
|
93
|
+
// which is why this check does not need to repeat `declaresOwnReceiver`.
|
|
94
|
+
if (!refusal && receiverUse !== null) {
|
|
95
|
+
if (!isAdmittedOwnership(receiverUse)) {
|
|
96
|
+
const ownership = ownershipOf(receiverUse);
|
|
97
|
+
refusal = ownership
|
|
98
|
+
? `the enclosing method's receiver is captured but carries ${ownership} ownership, which this backend's capture support does not admit`
|
|
99
|
+
: `the enclosing method's receiver is captured but carries "${receiverUse.kind}", which has no ownership this backend can prove a copy stays safe under`;
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
receiver = receiverUse;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (refusal)
|
|
106
|
+
return { kind: 'refused', reason: refusal };
|
|
107
|
+
if (slots.length === 0 && receiver === null)
|
|
108
|
+
return { kind: 'none' };
|
|
109
|
+
const layout = { slots, receiver };
|
|
110
|
+
return { kind: 'ok', layout };
|
|
111
|
+
};
|
|
112
|
+
/**
|
|
113
|
+
* Every capturing function's environment, computed once for the whole
|
|
114
|
+
* translation unit.
|
|
115
|
+
*
|
|
116
|
+
* The walk that used to live here -- which declaration each body reads or
|
|
117
|
+
* writes whose cell some other frame owns, the transitive closure over
|
|
118
|
+
* allocation edges, which cells are reassigned/self-referential/captured
|
|
119
|
+
* before their owning write, and which of those must therefore be boxed --
|
|
120
|
+
* is now `ir/captures.ts`'s `computeCaptureFacts`, run once over the whole
|
|
121
|
+
* program and published onto each body as `IrBody.facts`
|
|
122
|
+
* (a program fact; the target is a printer and computes none of its own). This function reads those
|
|
123
|
+
* facts back off the bodies it is handed instead of recomputing them: it
|
|
124
|
+
* only reunites the whole-program `boxed`/`requiresEarlyBox` sets (published
|
|
125
|
+
* per OWNING body, per `IrBodyFacts.boxed`'s doc comment) and turns each
|
|
126
|
+
* capturing body's own `capturedDeclarations`/`capturedReceiver` into the
|
|
127
|
+
* `CaptureAdmission` the emitter reads.
|
|
128
|
+
*
|
|
129
|
+
* Only a function that is actually allocated as a value (`allocate-callable`
|
|
130
|
+
* somewhere in the program names it -- `IrBodyFacts.allocatedAsValue`) gets
|
|
131
|
+
* an entry: a method's own body can read a cell owned by an enclosing frame
|
|
132
|
+
* in principle, but a method is never itself wrapped in a `CallableObject`
|
|
133
|
+
* with an environment slot to populate -- it is called directly, by name --
|
|
134
|
+
* so there is nowhere for such a capture to be transported *from*. That case
|
|
135
|
+
* has no admission here and falls through to `bindingReference`'s
|
|
136
|
+
* pre-existing "capture path... not installed" refusal, which is the
|
|
137
|
+
* correct, honest answer for it today.
|
|
138
|
+
*
|
|
139
|
+
* ...with one exception, and it is an exception because the transport EXISTS
|
|
140
|
+
* for it: a record's ACCESSOR body. `get current() { return n + 1 }` written
|
|
141
|
+
* inside a function reads that function's local, and the object the accessor
|
|
142
|
+
* is reached through is allocated in that very frame -- so the object can
|
|
143
|
+
* carry the environment, one `gea::PackedEnvironment` member per capturing
|
|
144
|
+
* half (`cppRecordAccessorEnvironmentName`), populated at the allocation and
|
|
145
|
+
* handed back at every call. `capturingAccessors` names those bodies;
|
|
146
|
+
* admitting one that captures NOTHING would add an environment formal no
|
|
147
|
+
* caller supplies, so the capture set is what qualifies it, not the fact that
|
|
148
|
+
* it is an accessor.
|
|
149
|
+
*/
|
|
150
|
+
export const buildCaptureIndex = (bodies, placements, capturingAccessors = new Set()) => {
|
|
151
|
+
const boxedDeclarations = new Set();
|
|
152
|
+
const requiresEarlyBoxDeclarations = new Set();
|
|
153
|
+
const capturedDeclarations = new Set();
|
|
154
|
+
const bodyBySourceOwner = new Map();
|
|
155
|
+
for (const body of bodies) {
|
|
156
|
+
bodyBySourceOwner.set(body.sourceOwner, body);
|
|
157
|
+
for (const declaration of body.facts?.boxed ?? [])
|
|
158
|
+
boxedDeclarations.add(declaration);
|
|
159
|
+
for (const declaration of body.facts?.requiresEarlyBox ?? [])
|
|
160
|
+
requiresEarlyBoxDeclarations.add(declaration);
|
|
161
|
+
for (const declaration of body.facts?.capturedDeclarations ?? [])
|
|
162
|
+
capturedDeclarations.add(declaration);
|
|
163
|
+
}
|
|
164
|
+
const admissions = new Map();
|
|
165
|
+
for (const body of bodies) {
|
|
166
|
+
const facts = body.facts;
|
|
167
|
+
if (!facts)
|
|
168
|
+
continue;
|
|
169
|
+
const accessorCarriesEnvironment = !facts.allocatedAsValue && capturingAccessors.has(body.sourceOwner) && facts.capturedDeclarations.length > 0;
|
|
170
|
+
if (!facts.allocatedAsValue && !accessorCarriesEnvironment)
|
|
171
|
+
continue;
|
|
172
|
+
admissions.set(body.sourceOwner, admissionForBody(facts.capturedDeclarations, facts.capturedReceiver, placements, boxedDeclarations));
|
|
173
|
+
}
|
|
174
|
+
return {
|
|
175
|
+
of: (owner) => admissions.get(owner) ?? { kind: 'none' },
|
|
176
|
+
isBoxed: (declaration) => boxedDeclarations.has(declaration),
|
|
177
|
+
isCaptured: (declaration) => capturedDeclarations.has(declaration),
|
|
178
|
+
requiresEarlyBox: (declaration) => requiresEarlyBoxDeclarations.has(declaration),
|
|
179
|
+
readsReceiver: (owner) => bodyBySourceOwner.get(owner)?.facts?.readsReceiver ?? false
|
|
180
|
+
};
|
|
181
|
+
};
|
|
182
|
+
/**
|
|
183
|
+
* Module-level function cells whose call can be spelled by NAME.
|
|
184
|
+
*
|
|
185
|
+
* `function makeAdder(base) {...}` becomes a cell holding a `CallableObject`,
|
|
186
|
+
* and every call to it -- from any body in the unit -- goes through that
|
|
187
|
+
* carrier's function pointer. For a callable whose identity is a runtime fact
|
|
188
|
+
* that indirection is the whole point; for a `function` declaration nothing
|
|
189
|
+
* ever reassigns it is pure loss, and it is the expensive kind: an indirect
|
|
190
|
+
* call is not inlinable, so the body stays opaque and every optimization that
|
|
191
|
+
* would have followed it -- constant propagation into it, and the
|
|
192
|
+
* devirtualization of a closure it RETURNS -- is lost with it. `closure`'s
|
|
193
|
+
* hot loop is two such calls and nothing else.
|
|
194
|
+
*
|
|
195
|
+
* Written exactly once is the whole condition, and it is the same arithmetic
|
|
196
|
+
* `buildCaptureIndex` uses for a reassignment: a declaration the program ever
|
|
197
|
+
* writes again has more than one `binding-write`, because the initializer and
|
|
198
|
+
* every later assignment lower to the same operation. A cell written once with
|
|
199
|
+
* a callable that captures nothing therefore holds that one body forever, and
|
|
200
|
+
* naming it is not an optimization the program could observe -- the carrier is
|
|
201
|
+
* still built wherever anything stores one.
|
|
202
|
+
*
|
|
203
|
+
* Deliberately NOT extended to a captured closure: its body reads state out of
|
|
204
|
+
* the environment pointer, which only the carrier has.
|
|
205
|
+
*/
|
|
206
|
+
export const buildDirectCallableIndex = (bodies, captures, placements) => {
|
|
207
|
+
const allocated = new Map();
|
|
208
|
+
const writeCounts = new Map();
|
|
209
|
+
const writtenCallable = new Map();
|
|
210
|
+
const writtenCarriers = new Map();
|
|
211
|
+
for (const body of bodies) {
|
|
212
|
+
for (const block of body.blocks.values()) {
|
|
213
|
+
for (const operation of block.operations) {
|
|
214
|
+
if (operation.kind !== 'allocate-callable')
|
|
215
|
+
continue;
|
|
216
|
+
if (captures.of(operation.functionId).kind !== 'none')
|
|
217
|
+
continue;
|
|
218
|
+
allocated.set(operation.result.id, operation.functionId);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
for (const body of bodies) {
|
|
223
|
+
for (const block of body.blocks.values()) {
|
|
224
|
+
for (const operation of block.operations) {
|
|
225
|
+
if (operation.kind !== 'binding-write')
|
|
226
|
+
continue;
|
|
227
|
+
writeCounts.set(operation.declaration, (writeCounts.get(operation.declaration) ?? 0) + 1);
|
|
228
|
+
const functionId = allocated.get(operation.value.value);
|
|
229
|
+
if (functionId !== undefined) {
|
|
230
|
+
writtenCallable.set(operation.declaration, functionId);
|
|
231
|
+
writtenCarriers.set(operation.declaration, operation.value.representation);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
const direct = new Map();
|
|
237
|
+
for (const [declaration, functionId] of writtenCallable) {
|
|
238
|
+
if (writeCounts.get(declaration) !== 1)
|
|
239
|
+
continue;
|
|
240
|
+
// The cell and the function it holds can disagree about the CONVENTION
|
|
241
|
+
// even when the language calls them the same function: `const mergePath:
|
|
242
|
+
// (...paths: string[]) => string = (base?, sub?, ...rest) => ...` (hono's
|
|
243
|
+
// `utils/url.ts`) declares one rest parameter at position 0 and holds a
|
|
244
|
+
// body taking two optionals and its own rest at position 2. A call site
|
|
245
|
+
// packs its arguments the way the CELL says, so naming the body directly
|
|
246
|
+
// would hand a one-argument call to a three-parameter definition.
|
|
247
|
+
//
|
|
248
|
+
// The carrier is where the two conventions are reconciled -- storing the
|
|
249
|
+
// body in the cell adapts it (`gea_runtime.h`'s `spreadRestOverLeading`)
|
|
250
|
+
// -- so a disagreeing pair keeps the indirection it needs rather than
|
|
251
|
+
// being refused or, worse, called through the wrong signature.
|
|
252
|
+
const cell = placements.get(declaration)?.representation;
|
|
253
|
+
const held = writtenCarriers.get(declaration);
|
|
254
|
+
if (cell && held && cppTypeOf(cell) !== cppTypeOf(held))
|
|
255
|
+
continue;
|
|
256
|
+
direct.set(declaration, functionId);
|
|
257
|
+
}
|
|
258
|
+
return direct;
|
|
259
|
+
};
|
|
260
|
+
// The move pipeline that used to live here -- `buildDyingArgumentIndex`,
|
|
261
|
+
// `ownedDyingValuesOf`, `ownedFormalInputsOf` -- is `ir/transfer.ts` now. It
|
|
262
|
+
// reasons only about the lowered IR, never about how this target renders
|
|
263
|
+
// anything, so the `IrOperand.transfer` fact
|
|
264
|
+
// step moved it out from beside the printer.
|
|
265
|
+
//
|
|
266
|
+
// `buildRepeatedConstructorIndex` moved the same way, to `ir/program-facts.ts`:
|
|
267
|
+
// whether a construction runs repeatedly is a question about the lowered IR's
|
|
268
|
+
// own control flow and call graph, not about C++ text, so it belongs beside
|
|
269
|
+
// the rest of that module's whole-program indices rather than here.
|
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
import type { DeclarationId, FunctionId, IrValueId } from '../../identity/ids.js';
|
|
2
|
+
import type { GetOperation, IrBody, IrOperand } from '../../ir/model.js';
|
|
3
|
+
import type { CaptureIndex, EmitContext } from './emit-context.js';
|
|
4
|
+
import type { ClassField, ClassLayout, ClassMethod } from '../../projection/classes.js';
|
|
5
|
+
import { classFamilyOverridesOf } from '../../projection/dispatch.js';
|
|
6
|
+
export { classFamilyOverridesOf };
|
|
7
|
+
import { classMemberOf, classStaticMemberOf, type ClassMemberSite } from '../../projection/fields.js';
|
|
8
|
+
export { classMemberOf, classStaticMemberOf, type ClassMemberSite };
|
|
9
|
+
import { type RecordField, type Representation } from '../../representation/model.js';
|
|
10
|
+
import { type ConversionSite } from './emit-narrowing.js';
|
|
11
|
+
/**
|
|
12
|
+
* Reading a `ClassLayout` the way the language reads a class: down the
|
|
13
|
+
* inheritance chain, and with a base's own initialization kept the base's.
|
|
14
|
+
*
|
|
15
|
+
* Both functions here exist because a derived class is not a self-contained
|
|
16
|
+
* description of its instances. `ClassLayout` states only what a class declares
|
|
17
|
+
* itself (`projection/classes.ts`), which is the honest thing for it to state,
|
|
18
|
+
* and it names its base -- so anything that needs the *whole* object has to
|
|
19
|
+
* walk. Doing that walk in one place is what keeps a member lookup and a
|
|
20
|
+
* construction from disagreeing about which class owns what.
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* The statements one class's own field initializers perform.
|
|
24
|
+
*
|
|
25
|
+
* Shared between the two places a class's fields are initialized, which are the
|
|
26
|
+
* same event seen from two sides: a base construction runs them itself, and a
|
|
27
|
+
* derived constructor runs them at its `super(...)` -- the language's order,
|
|
28
|
+
* after the base chain has returned and before the next statement of the
|
|
29
|
+
* derived constructor. Writing the sequence once means those two sites cannot
|
|
30
|
+
* drift into initializing a class differently depending on how it was reached.
|
|
31
|
+
*
|
|
32
|
+
* `fields` is the class's *own* declared fields, never a base's: a base
|
|
33
|
+
* initializes its own, and running them again from a derived construction would
|
|
34
|
+
* overwrite whatever the base's constructor body had already stored there.
|
|
35
|
+
*/
|
|
36
|
+
export declare const cppFieldInitializerStatements: (site: ConversionSite,
|
|
37
|
+
/**
|
|
38
|
+
* The class whose OWN fields these are -- not `ClassField.declaration`,
|
|
39
|
+
* which names the property declaration's own identity, not the class that
|
|
40
|
+
* declares it. `layout.declaration` at every call site.
|
|
41
|
+
*/
|
|
42
|
+
classDeclaration: DeclarationId, fields: readonly ClassField[], receiver: string, storedFieldOf: (field: ClassField) => Pick<RecordField, "value" | "required"> | null) => readonly string[] | string;
|
|
43
|
+
/**
|
|
44
|
+
* A class field whose initializer is an arrow/function-expression literal
|
|
45
|
+
* capturing nothing but (optionally) its own receiver -- the "lazily
|
|
46
|
+
* materialized arrow-function class field" design: almost every real use of
|
|
47
|
+
* such a field is a direct call (`c.json(...)`), never a value read, so
|
|
48
|
+
* building its `CallableObject` -- one heap environment plus one identity --
|
|
49
|
+
* in every construction is waste this field's storage can defer instead.
|
|
50
|
+
*
|
|
51
|
+
* `initializer` is `ClassField.initializer`, the ECMA-262 `[[Initializer]]`
|
|
52
|
+
* thunk (`ClassFieldDefinitionRecord`'s own function, distinct from the arrow
|
|
53
|
+
* literal's body: see `censusLazyArrowFields`'s comment) -- the same FunctionId
|
|
54
|
+
* `cppFieldInitializerStatements` already calls with the receiver today. A
|
|
55
|
+
* qualifying field's storage starts empty (`invoke == nullptr`, the same
|
|
56
|
+
* zero-initialized default a field with NO initializer already gets) and
|
|
57
|
+
* every read -- `emit-properties.ts`'s `lazyMaterializedFieldReadText` -- calls
|
|
58
|
+
* this SAME thunk once, on demand, instead.
|
|
59
|
+
*/
|
|
60
|
+
export interface LazyArrowFieldPlan {
|
|
61
|
+
readonly initializer: FunctionId;
|
|
62
|
+
/**
|
|
63
|
+
* The arrow/function-expression literal's OWN body -- the `allocate-callable`
|
|
64
|
+
* target this census finds inside `initializer`'s thunk, and the only
|
|
65
|
+
* FunctionId a materialized instance of this field's `CallableObject` ever
|
|
66
|
+
* runs. A DIRECT call on an unmaterialized field (`emit-callable.ts`'s
|
|
67
|
+
* lazy-field call fusion) invokes this body itself, bypassing `initializer`
|
|
68
|
+
* -- and the `CallableObject`/environment it would otherwise have built --
|
|
69
|
+
* entirely.
|
|
70
|
+
*/
|
|
71
|
+
readonly body: FunctionId;
|
|
72
|
+
/**
|
|
73
|
+
* Whether `body`'s own C++ signature takes a leading environment pointer,
|
|
74
|
+
* exactly `translation-unit.ts`'s `thunkOf`'s own `hasEnvironment =
|
|
75
|
+
* admission.kind === 'ok'` -- true even here, where the environment carries
|
|
76
|
+
* nothing but the captured receiver. A direct call supplies `nullptr` for
|
|
77
|
+
* it: `censusLazyArrowFields` admits only a body whose one capture is the
|
|
78
|
+
* receiver, which travels as its own leading argument instead (see
|
|
79
|
+
* `bodyReceiverRepresentation`), so the body never reads the pointer.
|
|
80
|
+
*/
|
|
81
|
+
readonly bodyHasEnvironment: boolean;
|
|
82
|
+
/**
|
|
83
|
+
* The receiver `body` expects as a physical argument, or `null` for a body
|
|
84
|
+
* that takes none.
|
|
85
|
+
*
|
|
86
|
+
* An arrow closes over its enclosing `this` LEXICALLY -- it is never the
|
|
87
|
+
* body's own declared receiver, so `body`'s own `CallableAbi.receiver` is
|
|
88
|
+
* always `null` here, the same as any other arrow's. This is instead
|
|
89
|
+
* `captures.of(body).layout.receiver`, the exact representation
|
|
90
|
+
* `translation-unit.ts`'s `thunkOf` reads to populate the captured-receiver
|
|
91
|
+
* environment field it forwards as the thunk's own `gea_this` argument.
|
|
92
|
+
* Kept apart from `body`'s own ABI so a direct call can tell "no receiver
|
|
93
|
+
* travels" from "the receiver travels, just not as part of the semantic
|
|
94
|
+
* ABI" -- the same distinction `EmitContext.directCallReceivers` exists to
|
|
95
|
+
* answer for an interface-typed method value.
|
|
96
|
+
*/
|
|
97
|
+
readonly bodyReceiverRepresentation: Representation | null;
|
|
98
|
+
}
|
|
99
|
+
export declare const publishBoxableClasses: (classes: ReadonlyMap<DeclarationId, ClassLayout>, held: ReadonlySet<DeclarationId> | null) => void;
|
|
100
|
+
/** Whether a box may hold an instance of `declaration`; `true` for a compile that published nothing (no census to consult). */
|
|
101
|
+
export declare const classBoxable: (classes: ReadonlyMap<DeclarationId, ClassLayout>, declaration: DeclarationId) => boolean;
|
|
102
|
+
/** Publishes one compile's whole lazy-arrow-field census. Called once, before any body renders -- mirrors `publishClassStaticFieldStorage`. */
|
|
103
|
+
export declare const publishLazyArrowFieldPlans: (classes: ReadonlyMap<DeclarationId, ClassLayout>, plans: ReadonlyMap<DeclarationId, ReadonlyMap<string, LazyArrowFieldPlan>>) => void;
|
|
104
|
+
/** The lazy-materialization plan for one class field, or `null` when the field keeps today's eager construction. */
|
|
105
|
+
export declare const lazyArrowFieldPlanOf: (classes: ReadonlyMap<DeclarationId, ClassLayout>, declaration: DeclarationId, key: string) => LazyArrowFieldPlan | null;
|
|
106
|
+
/**
|
|
107
|
+
* Every qualifying field of one class, by key -- what `records.ts`'s dynamic
|
|
108
|
+
* read arm needs (which of THIS struct's fields to materialize before boxing),
|
|
109
|
+
* as opposed to `lazyArrowFieldPlanOf`'s one-field question the constructor
|
|
110
|
+
* and the static read site each ask.
|
|
111
|
+
*/
|
|
112
|
+
export declare const lazyArrowFieldPlansForClass: (classes: ReadonlyMap<DeclarationId, ClassLayout>, declaration: DeclarationId) => ReadonlyMap<string, LazyArrowFieldPlan> | undefined;
|
|
113
|
+
/**
|
|
114
|
+
* The materialize-on-read guard for one lazy arrow field's storage, shared by
|
|
115
|
+
* every reader that observes a qualifying field's CURRENT value rather than
|
|
116
|
+
* only its presence or attributes -- `emit-properties.ts`'s ordinary property
|
|
117
|
+
* `get` (the one choke point every consumer of a field's value, a call's own
|
|
118
|
+
* callee included, already goes through) and `object-protocol.ts`'s
|
|
119
|
+
* `getOwnValue` (the "PRIMITIVE 2" read `Object.values`/`entries`/`assign`/
|
|
120
|
+
* spread/`getOwnPropertyDescriptor` all build on, per that file's own header
|
|
121
|
+
* comment) both read the SAME storage through two different doors. One
|
|
122
|
+
* authority, not two matching implementations that could drift.
|
|
123
|
+
*
|
|
124
|
+
* The receiver is bound once, not repeated: an SSA operand -- or a "known"
|
|
125
|
+
* object view's own receiver text -- may render as a deferred conversion
|
|
126
|
+
* expression, and this reads it twice over (the guard and the materializing
|
|
127
|
+
* store) if it did not bind a local first.
|
|
128
|
+
*/
|
|
129
|
+
export declare const lazyMaterializedFieldText: (receiverText: string, accessor: string, key: string, plan: LazyArrowFieldPlan) => string;
|
|
130
|
+
/**
|
|
131
|
+
* Whether a `get` renders through the lazy-arrow-field materializing text --
|
|
132
|
+
* the ONE authority both `emit-properties.ts`'s `emitGet` and the
|
|
133
|
+
* callee-snapshot census below ask, so a field the census calls "lazily
|
|
134
|
+
* materialized" is exactly the field `emitGet` would render as one.
|
|
135
|
+
*
|
|
136
|
+
* `null` for a receiver that is not statically a class instance, a key this
|
|
137
|
+
* compile never gave a static text, or a key naming anything but a
|
|
138
|
+
* lazily-materialized field -- the same three escapes `emitGet`'s own inline
|
|
139
|
+
* check had before it was factored out to here.
|
|
140
|
+
*/
|
|
141
|
+
export declare const lazyArrowFieldGetPlanOf: (ctx: Pick<EmitContext, "classes" | "staticKeyTexts">, operation: GetOperation) => {
|
|
142
|
+
readonly fieldName: string;
|
|
143
|
+
readonly plan: LazyArrowFieldPlan;
|
|
144
|
+
} | null;
|
|
145
|
+
/**
|
|
146
|
+
* Lazy-arrow-field GET results with exactly one reader in this body, that
|
|
147
|
+
* reader being the very CALL that reads the result as its OWN callee -- the
|
|
148
|
+
* shape `emit-callable.ts`'s `emitLazyArrowFieldCall` fuses into a direct call
|
|
149
|
+
* on the census arrow, with no materialized `CallableObject` built at all.
|
|
150
|
+
*
|
|
151
|
+
* A GET outside this set keeps `lazyMaterializedFieldText`'s ordinary
|
|
152
|
+
* materialize-on-read rendering: a value that is read, passed on, or read by
|
|
153
|
+
* more than one operation has no single call fusion to feed, so its
|
|
154
|
+
* `CallableObject` has to actually exist for whatever else reads it.
|
|
155
|
+
*
|
|
156
|
+
* The three checks mirrored here from `emitLazyArrowFieldCall`'s own early,
|
|
157
|
+
* purely structural bail-outs (a non-function callee kind; a `function`-kind
|
|
158
|
+
* read naming a DIFFERENT function than the census arrow; no published ABI for
|
|
159
|
+
* the arrow's body) are proven once, here, so a GET this set admits is
|
|
160
|
+
* guaranteed to reach that fusion's `try` block. The one refusal left
|
|
161
|
+
* uncensused on purpose is the try block's own CONVERSION refusal -- a generic
|
|
162
|
+
* field's per-call-site result, the one shape a structural check here cannot
|
|
163
|
+
* predict -- which the fusion answers itself by materializing the snapshot
|
|
164
|
+
* rather than declining outright. A GET this census admits must therefore
|
|
165
|
+
* NEVER be read by `emitGet` as anything but the raw, unmaterialized snapshot:
|
|
166
|
+
* the fusion is the only consumer, and it never re-reads the field once it has
|
|
167
|
+
* the snapshot in hand.
|
|
168
|
+
*/
|
|
169
|
+
export declare const lazyCalleeReadsOf: (ctx: EmitContext, body: IrBody) => ReadonlySet<IrValueId>;
|
|
170
|
+
/**
|
|
171
|
+
* Which class fields qualify for lazy materialization, computed once for the
|
|
172
|
+
* whole translation unit.
|
|
173
|
+
*
|
|
174
|
+
* A field's initializer thunk (`ClassField.initializer`) is not itself
|
|
175
|
+
* allocated as a value -- nothing ever wraps THE THUNK in a `CallableObject`,
|
|
176
|
+
* it is simply called once per construction -- so its own capture admission is
|
|
177
|
+
* always `{kind: 'none'}` and asking `captures` about it answers nothing.
|
|
178
|
+
* What must qualify is the closure the thunk's body ALLOCATES: for an arrow
|
|
179
|
+
* field, that thunk's IR is exactly one `allocate-callable` (naming the
|
|
180
|
+
* arrow's own FunctionId) followed by an implicit return of that value (the
|
|
181
|
+
* `[[Initializer]]` "return the evaluation of the initializer expression"
|
|
182
|
+
* shape, `census.ts`'s `isFieldInitializerBody`) -- so this walks each
|
|
183
|
+
* qualifying thunk's body once to find that operation and asks `captures` of
|
|
184
|
+
* ITS `functionId`, the same "walk to the allocate-callable" step
|
|
185
|
+
* `buildDirectCallableIndex` already performs for module-level cells.
|
|
186
|
+
*
|
|
187
|
+
* A field qualifies when that admission is `{kind: 'none'}` (the closure
|
|
188
|
+
* captures nothing, not even `this`) or `{kind: 'ok'}` with an empty slot list
|
|
189
|
+
* (captures only the receiver) -- "nothing else", per the design. A refused
|
|
190
|
+
* admission, or one with any other captured declaration, keeps the field
|
|
191
|
+
* eager: fail closed.
|
|
192
|
+
*
|
|
193
|
+
* A class the whole-program reflection census marks `'full'`
|
|
194
|
+
* (`ir/reflection-demand.ts`) may still read a field's VALUE dynamically,
|
|
195
|
+
* through `records.ts`'s `gea_readOwnField`. That used to disqualify the
|
|
196
|
+
* whole class here, fail closed, because the dispatch method is `const` and
|
|
197
|
+
* has no `Ref` back to its own instance to call the initializer with. It
|
|
198
|
+
* turns out one already exists: `records.ts`'s own accessor dispatch recovers
|
|
199
|
+
* exactly that handle from `this` (`gea::Ref<T>::adopt(const_cast<T*>(this),
|
|
200
|
+
* true)`, `renderFieldDispatcher`'s `selfText`) to call a getter/setter body
|
|
201
|
+
* from the identical `const` method. `records.ts`'s dynamic read arm for a
|
|
202
|
+
* qualifying field now does the same before boxing, so this census no longer
|
|
203
|
+
* needs to ask reflection at all -- correctness for the dynamic path is that
|
|
204
|
+
* function's job now, not a reason to keep a field eager here.
|
|
205
|
+
*/
|
|
206
|
+
export declare const censusLazyArrowFields: (bodies: readonly IrBody[], classes: ReadonlyMap<DeclarationId, ClassLayout>, captures: CaptureIndex) => ReadonlyMap<DeclarationId, ReadonlyMap<string, LazyArrowFieldPlan>>;
|
|
207
|
+
/**
|
|
208
|
+
* The C++ struct a receiver's carrier IS, or `null` for one that is not a
|
|
209
|
+
* struct at all.
|
|
210
|
+
*
|
|
211
|
+
* Reactive storage is a property of the STRUCT, not of the declaration that
|
|
212
|
+
* happens to name it: a store class and the element record of one of its
|
|
213
|
+
* arrays are both reactive structs, and only the first has a `DeclarationId`.
|
|
214
|
+
* Asking this one question in one place is what lets the read site, the
|
|
215
|
+
* dependency census and the JSX binding all name the same member.
|
|
216
|
+
*/
|
|
217
|
+
export declare const structNameOfReceiver: (representation: Representation) => string | null;
|
|
218
|
+
/**
|
|
219
|
+
* The struct that DECLARES field `key` on a receiver of this carrier.
|
|
220
|
+
*
|
|
221
|
+
* Not the same question as "what struct IS this receiver", and the difference
|
|
222
|
+
* is load-bearing for every reactive question: `celled` and `revisions` are
|
|
223
|
+
* keyed by the DECLARING struct (`records.ts` builds them per struct from that
|
|
224
|
+
* struct's OWN fields), because an inherited field's storage lives on the base
|
|
225
|
+
* that declares it. `structNameOfReceiver` alone names the receiver's own
|
|
226
|
+
* class, so asking it for an inherited field silently finds nothing -- which
|
|
227
|
+
* reads as "not reactive" rather than as an error.
|
|
228
|
+
*
|
|
229
|
+
* `null` for a class-ref key naming no FIELD: an accessor and a method share
|
|
230
|
+
* no reactive table, so there is nothing for a caller to look up.
|
|
231
|
+
*/
|
|
232
|
+
export declare const fieldDeclaringStructOf: (classes: ReadonlyMap<DeclarationId, ClassLayout>, representation: Representation, key: string) => string | null;
|
|
233
|
+
/**
|
|
234
|
+
* Whether this receiver names `super` -- the one member access the language
|
|
235
|
+
* binds statically (13.3.7), so dispatching it through the object would
|
|
236
|
+
* re-enter the override that wrote it.
|
|
237
|
+
*
|
|
238
|
+
* `ir/lower.ts` mints the `receiver` operation at the BASE's class for a
|
|
239
|
+
* `super` access, so a receiver-defined value carrying any class other than
|
|
240
|
+
* this frame's own receiver's class is a super access and nothing else.
|
|
241
|
+
*
|
|
242
|
+
* One authority for what was four independent spellings of the same
|
|
243
|
+
* predicate: the virtual-setter dispatch in `emit-properties.ts`,
|
|
244
|
+
* `directClassMethodBody`, `classMemberText`'s own `isSuperAccess`, and
|
|
245
|
+
* `virtualCalleeClaim`'s exclusion of `super.m()` from virtual dispatch.
|
|
246
|
+
* Three of the four relied on an enclosing guard having already established
|
|
247
|
+
* the receiver's kind; this one is total, so a fifth caller cannot get it
|
|
248
|
+
* subtly wrong by being reached from somewhere the others never were.
|
|
249
|
+
*/
|
|
250
|
+
export declare const dispatchesStatically: (ctx: EmitContext, receiver: IrOperand) => boolean;
|
|
251
|
+
/**
|
|
252
|
+
* Every method key a class family reaches, own or inherited, deduplicated
|
|
253
|
+
* along the inheritance chain: `method` is the body when the key binds without
|
|
254
|
+
* dispatch, and `null` when a subclass overrides the key, so the answer is a
|
|
255
|
+
* virtual call this walk has no body to name.
|
|
256
|
+
*
|
|
257
|
+
* The overridden keys are YIELDED rather than skipped because "which keys does
|
|
258
|
+
* this family reach" and "which of them bind to a body" are one walk, and a
|
|
259
|
+
* consumer that must know a key was reached-but-excluded would otherwise have
|
|
260
|
+
* to repeat it. That consumer is real: a computed read over an OPEN key domain
|
|
261
|
+
* builds one arm per bound key and cannot tell an unreachable key from one it
|
|
262
|
+
* dropped here -- and answering the second as though it were the first
|
|
263
|
+
* compiled a correct `dog[k]()` into a guaranteed abort.
|
|
264
|
+
*
|
|
265
|
+
* `classMethodValueReceiverClaim` and `computedClassPrototypeMethodText` ask
|
|
266
|
+
* two different questions of this one family -- "does ANY member convert to
|
|
267
|
+
* this callable type" and "which members DO" -- over an identical walk that
|
|
268
|
+
* each spelled out for itself.
|
|
269
|
+
*/
|
|
270
|
+
export declare function reachableClassMethodsOf(classes: ReadonlyMap<DeclarationId, ClassLayout>, declaration: DeclarationId): Generator<{
|
|
271
|
+
readonly key: string;
|
|
272
|
+
readonly method: (ClassMethod & {
|
|
273
|
+
readonly callable: FunctionId;
|
|
274
|
+
}) | null;
|
|
275
|
+
}>;
|
|
276
|
+
/**
|
|
277
|
+
* Real C++ storage for one "constructor expando" static field: `ClassName.
|
|
278
|
+
* FIELD = value;` written at module scope, after the class declaration --
|
|
279
|
+
* the idiom three.js's own JS source spells throughout (`Object3D.
|
|
280
|
+
* DEFAULT_UP = new Vector3(0, 1, 0);` right after `class Object3D {...}`,
|
|
281
|
+
* never a `static` member inside the body). No `class-lifecycle` event and no
|
|
282
|
+
* entry in `ClassLayout.staticFields` ever names one of these: the assignment
|
|
283
|
+
* IS the only declaration a JS-checked program has, so `classStaticMemberOf`
|
|
284
|
+
* genuinely has nothing to walk to for it. `name` is this compilation's own
|
|
285
|
+
* mangled global for the storage; `representation` is the carrier every
|
|
286
|
+
* observed write to it agreed on (see `censusClassStaticFields`,
|
|
287
|
+
* `translation-unit.ts`).
|
|
288
|
+
*/
|
|
289
|
+
export interface ClassStaticFieldStorage {
|
|
290
|
+
readonly name: string;
|
|
291
|
+
readonly representation: Representation;
|
|
292
|
+
}
|
|
293
|
+
/** Publishes one compile's whole static-field census. Called once, before any body renders. */
|
|
294
|
+
export declare const publishClassStaticFieldStorage: (classes: ReadonlyMap<DeclarationId, ClassLayout>, storage: ReadonlyMap<DeclarationId, ReadonlyMap<string, ClassStaticFieldStorage>>) => void;
|
|
295
|
+
/** The storage a `constructor-family` receiver's static key resolves to, or `null` when nothing published one for it. */
|
|
296
|
+
export declare const classStaticFieldStorageOf: (classes: ReadonlyMap<DeclarationId, ClassLayout>, declaration: DeclarationId, key: string) => ClassStaticFieldStorage | null;
|
|
297
|
+
/** Every key the census gave one class storage for -- the finite set a computed read of the constructor dispatches over. */
|
|
298
|
+
export declare const classStaticFieldStorageKeysOf: (classes: ReadonlyMap<DeclarationId, ClassLayout>, declaration: DeclarationId) => readonly string[];
|
|
299
|
+
/**
|
|
300
|
+
* The C++ storage table, which is `ir/class-static-fields.ts`'s census with
|
|
301
|
+
* this compilation's mangled global attached to each slot.
|
|
302
|
+
*
|
|
303
|
+
* The walk itself moved to `ir/` when the reflection census turned out to need
|
|
304
|
+
* the same answer: its own comment already warned that re-deriving where a
|
|
305
|
+
* `ClassName.KEY` write lands would risk "a second opinion that could disagree
|
|
306
|
+
* with the one the plan actually selected", and a second consumer asking the
|
|
307
|
+
* question a second way is that risk arriving. What is left here is the only
|
|
308
|
+
* part that was ever a C++ concern -- the NAME the printer renders.
|
|
309
|
+
*/
|
|
310
|
+
export declare const censusClassStaticFieldStorage: (bodies: readonly IrBody[], classes: ReadonlyMap<DeclarationId, ClassLayout>) => {
|
|
311
|
+
readonly storage: ReadonlyMap<DeclarationId, ReadonlyMap<string, ClassStaticFieldStorage>>;
|
|
312
|
+
readonly conflicts: readonly string[];
|
|
313
|
+
};
|