@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,481 @@
|
|
|
1
|
+
import { operationOfResult } from '../identity/ids.js';
|
|
2
|
+
import { captureCapabilityOf, representationKey } from '../representation/model.js';
|
|
3
|
+
import { propertyAccessKeysOf } from './certify/property-access.js';
|
|
4
|
+
import { runtimeHelperKeysOf } from './certify/runtime-helper.js';
|
|
5
|
+
import { allOperationsOf } from './model.js';
|
|
6
|
+
import { resultOfIrOperation } from './queries.js';
|
|
7
|
+
import { nativeMergeTransportMatches } from './native-merge-transport.js';
|
|
8
|
+
import { nativeFieldOwnerReadMatches } from './native-field-owner.js';
|
|
9
|
+
import { absentClassArmsHold } from './absent-class-arm.js';
|
|
10
|
+
import { objectValueConversionInputsOf, objectValueConversionsMatch } from './object-value-conversions.js';
|
|
11
|
+
/**
|
|
12
|
+
* Certification of the lowered IR.
|
|
13
|
+
*
|
|
14
|
+
* Preflight certified a program by predicting, from the semantic graph and
|
|
15
|
+
* the plan, what lowering and the printer would do with it: seven builders
|
|
16
|
+
* re-derived slots, receivers and key literalness so they could ask the
|
|
17
|
+
* manifest the question the printer would later ask. This walks the IR that
|
|
18
|
+
* lowering actually built. Every operation states its operands' carriers,
|
|
19
|
+
* every `convert` cites the census node it applies, every allocation names
|
|
20
|
+
* its captures -- so each capability the printer will need is a function of
|
|
21
|
+
* the operation alone, spelled once here in the manifest's own vocabulary
|
|
22
|
+
* and looked up in the manifest's own sets. The certificate is the empty
|
|
23
|
+
* refusal list.
|
|
24
|
+
*
|
|
25
|
+
* One namespace. A key is `${family}:${discriminator}`; the family names the
|
|
26
|
+
* manifest set the discriminator is a member of (`property-access` ->
|
|
27
|
+
* `propertyRecipes`, `runtime-helper` -> `runtimeHelpers`, ...), or the
|
|
28
|
+
* census that answers it (`conversion` -> the conversion census by node id).
|
|
29
|
+
* A refusal anywhere in the compiler that names a key outside this union is
|
|
30
|
+
* a type error, which is what closes the gap `scripts/refusal-keys.mjs`
|
|
31
|
+
* measures.
|
|
32
|
+
*/
|
|
33
|
+
export const capabilityFamilies = [
|
|
34
|
+
'physical-cpp-type',
|
|
35
|
+
'call-abi',
|
|
36
|
+
'host-invocation',
|
|
37
|
+
'host-member-call',
|
|
38
|
+
'property-access',
|
|
39
|
+
'capture',
|
|
40
|
+
'conversion',
|
|
41
|
+
'native-boundary',
|
|
42
|
+
'runtime-helper',
|
|
43
|
+
'abrupt-edge'
|
|
44
|
+
];
|
|
45
|
+
export const familyOf = (key) => key.slice(0, key.indexOf(':'));
|
|
46
|
+
export const isCapabilityKey = (key) => capabilityFamilies.includes(key.slice(0, key.indexOf(':')));
|
|
47
|
+
const discriminatorOf = (key) => key.slice(key.indexOf(':') + 1);
|
|
48
|
+
/**
|
|
49
|
+
* Whether the target can spell a carrier. The manifest's `physicalTypes` set
|
|
50
|
+
* is the plan's projection of the target's own predicate; the IR carries
|
|
51
|
+
* carriers the plan never selected (a slot's carrier, a `convert`'s result),
|
|
52
|
+
* so a manifest that publishes the predicate itself is asked directly, and
|
|
53
|
+
* one that does not falls back to the set -- fail-closed, as every optional
|
|
54
|
+
* manifest field reads when absent.
|
|
55
|
+
*/
|
|
56
|
+
const spellable = (manifest, representation) => manifest.spellable ? manifest.spellable(representation) : manifest.physicalTypes.has(representationKey(representation));
|
|
57
|
+
const physicalTypeDemand = (manifest, representation) => {
|
|
58
|
+
const key = representationKey(representation);
|
|
59
|
+
return spellable(manifest, representation)
|
|
60
|
+
? { key: `physical-cpp-type:${key}`, verdict: 'installed' }
|
|
61
|
+
: { key: `physical-cpp-type:${key}`, verdict: 'missing', detail: `the target cannot spell ${key}` };
|
|
62
|
+
};
|
|
63
|
+
/** `native-handle` is admissible only behind a versioned, authenticated host protocol; the key is the target's own tag name where the host stated one. */
|
|
64
|
+
const nativeBoundaryDemand = (representation) => representation.kind === 'native-handle'
|
|
65
|
+
? { key: `native-boundary:${representation.native ?? representation.protocol}@${representation.version}` }
|
|
66
|
+
: null;
|
|
67
|
+
const abiDemands = (manifest, abi) => {
|
|
68
|
+
if (abi === null)
|
|
69
|
+
return [];
|
|
70
|
+
const carriers = [...abi.parameters.map((parameter) => parameter.value), abi.result];
|
|
71
|
+
if (abi.receiver !== null)
|
|
72
|
+
carriers.push(abi.receiver);
|
|
73
|
+
return carriers.flatMap((carrier) => {
|
|
74
|
+
const boundary = nativeBoundaryDemand(carrier);
|
|
75
|
+
return boundary ? [physicalTypeDemand(manifest, carrier), boundary] : [physicalTypeDemand(manifest, carrier)];
|
|
76
|
+
});
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* The demands this module derives itself: the ones whose fact is a single
|
|
80
|
+
* field of the operation. The property families and the runtime-helper
|
|
81
|
+
* families each live in their own module because their key spellings are
|
|
82
|
+
* refinements of a carrier (`iterator(next):get:false`,
|
|
83
|
+
* `protocol:spread:dictionary(string->record)`) that the manifest's tables
|
|
84
|
+
* spell the same way, and that vocabulary is one subject per module.
|
|
85
|
+
*/
|
|
86
|
+
const ownDemandsOf = (operation, ctx) => {
|
|
87
|
+
switch (operation.kind) {
|
|
88
|
+
case 'merge-live-arm-rebuild': {
|
|
89
|
+
const recipe = operation.nativeTransport;
|
|
90
|
+
if (!recipe)
|
|
91
|
+
return [];
|
|
92
|
+
if (!nativeMergeTransportMatches(operation, ctx.conversions))
|
|
93
|
+
return [
|
|
94
|
+
{
|
|
95
|
+
key: 'runtime-helper:merge-live-arm-rebuild:native-transport',
|
|
96
|
+
verdict: 'missing',
|
|
97
|
+
detail: 'native merge transport disagrees with its live arms or conversion nodes'
|
|
98
|
+
}
|
|
99
|
+
];
|
|
100
|
+
return [
|
|
101
|
+
...recipe.arms.map((arm) => ({ key: `conversion:${arm.conversion}` })),
|
|
102
|
+
...(recipe.absence ? [{ key: `conversion:${recipe.absence}` }] : [])
|
|
103
|
+
];
|
|
104
|
+
}
|
|
105
|
+
case 'convert':
|
|
106
|
+
// The node the instruction cites decides the pair; a `never` node here
|
|
107
|
+
// is one lowering minted deliberately (`convertOrDrift`) so the printer's
|
|
108
|
+
// own path could still try, and certification refuses it by name.
|
|
109
|
+
return [{ key: `conversion:${operation.conversionUse}` }];
|
|
110
|
+
case 'call':
|
|
111
|
+
case 'construct': {
|
|
112
|
+
const demands = [{ key: 'call-abi:generic' }];
|
|
113
|
+
if (operation.kind === 'call' && operation.objectValueConversions) {
|
|
114
|
+
const semantic = ctx.semanticOperationOf(operation.lineage);
|
|
115
|
+
const expected = objectValueConversionInputsOf(semantic?.family === 'invocation' ? semantic.intrinsicMutation : undefined, operation.arguments, ctx.deriver);
|
|
116
|
+
if (operation.argumentsAreSpread || !objectValueConversionsMatch(expected, operation.objectValueConversions, ctx.conversions))
|
|
117
|
+
demands.push({
|
|
118
|
+
key: 'call-abi:object-value-conversions',
|
|
119
|
+
verdict: 'missing',
|
|
120
|
+
detail: 'Object value conversions do not match the authenticated field sources'
|
|
121
|
+
});
|
|
122
|
+
for (const value of operation.objectValueConversions)
|
|
123
|
+
demands.push({ key: `conversion:${value.conversion}` });
|
|
124
|
+
}
|
|
125
|
+
if (operation.kind === 'call' && operation.fixedDataDefinition) {
|
|
126
|
+
const recipe = operation.fixedDataDefinition;
|
|
127
|
+
const target = operation.arguments[0]?.representation;
|
|
128
|
+
const descriptor = operation.arguments[2]?.representation;
|
|
129
|
+
const semantic = ctx.semanticOperationOf(operation.lineage);
|
|
130
|
+
const key = semantic?.operands.find((operand) => operand.role === 'argument' && operand.ordinal === 1);
|
|
131
|
+
const node = ctx.conversions.nodeById(recipe.conversion);
|
|
132
|
+
const native = node?.capability.kind === 'identity' ||
|
|
133
|
+
((node?.capability.kind === 'atom' || node?.capability.kind === 'static') &&
|
|
134
|
+
node.capability.materializer.nativeFieldProtocol === 'unused');
|
|
135
|
+
if (!target ||
|
|
136
|
+
!descriptor ||
|
|
137
|
+
operation.argumentsAreSpread ||
|
|
138
|
+
operation.arguments.length !== 3 ||
|
|
139
|
+
recipe.target !== representationKey(target) ||
|
|
140
|
+
recipe.descriptor !== representationKey(descriptor) ||
|
|
141
|
+
!operation.result ||
|
|
142
|
+
representationKey(operation.result.representation) !== recipe.target ||
|
|
143
|
+
semantic?.family !== 'invocation' ||
|
|
144
|
+
semantic.intrinsicMutation !== 'object-define-property' ||
|
|
145
|
+
key?.source.kind !== 'constant' ||
|
|
146
|
+
key.source.literal !== 'string' ||
|
|
147
|
+
key.source.text !== recipe.field.key ||
|
|
148
|
+
(recipe.nativeFieldProtocol === 'unused' && (!semantic.intrinsicDataDefinition || !native))) {
|
|
149
|
+
demands.push({
|
|
150
|
+
key: 'call-abi:fixed-data-definition',
|
|
151
|
+
verdict: 'missing',
|
|
152
|
+
detail: 'fixed data definition does not match its authenticated call'
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
if (node !== null &&
|
|
156
|
+
(representationKey(node.source) !== representationKey(recipe.value.value) ||
|
|
157
|
+
representationKey(node.target) !== representationKey(recipe.held))) {
|
|
158
|
+
demands.push({
|
|
159
|
+
key: `conversion:${recipe.conversion}`,
|
|
160
|
+
verdict: 'missing',
|
|
161
|
+
detail: 'fixed data definition conversion disagrees with its field'
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
else
|
|
165
|
+
demands.push({ key: `conversion:${recipe.conversion}` });
|
|
166
|
+
}
|
|
167
|
+
const callee = operation.callee.representation;
|
|
168
|
+
if (callee.kind === 'dynamic')
|
|
169
|
+
demands.push({ key: 'call-abi:dynamic' });
|
|
170
|
+
// A plugin host's own spelling table is consulted only for a host
|
|
171
|
+
// carrier; core constructors keep `native: null` and render from the
|
|
172
|
+
// target's own table, so asking the plugin set about them would refuse
|
|
173
|
+
// a complete implementation (`preflight/host-invocation.ts`).
|
|
174
|
+
if (callee.kind === 'native-handle' && callee.native !== null) {
|
|
175
|
+
demands.push({ key: `host-invocation:${operation.kind === 'call' ? `${callee.native}.call` : callee.native}` });
|
|
176
|
+
}
|
|
177
|
+
return demands;
|
|
178
|
+
}
|
|
179
|
+
case 'allocate-callable':
|
|
180
|
+
case 'allocate-constructor':
|
|
181
|
+
// Each captured slot crosses a body boundary in its own ownership; the
|
|
182
|
+
// capture path transports the ownerships the manifest lists and no other.
|
|
183
|
+
return operation.captures.map((capture) => ({ key: `capture:${captureCapabilityOf(capture.representation)}` }));
|
|
184
|
+
case 'binding-read':
|
|
185
|
+
return ctx.externalBindings.has(operation.declaration) ? [{ key: 'native-boundary:external-binding' }] : [];
|
|
186
|
+
case 'get': {
|
|
187
|
+
if (operation.absentClassArms !== undefined) {
|
|
188
|
+
const key = ctx.definitionOf(operation.key.value);
|
|
189
|
+
if (!absentClassArmsHold(operation, key?.kind === 'constant' && key.literal === 'string' ? key.text : null, ctx.classes, ctx.reflection))
|
|
190
|
+
return [
|
|
191
|
+
{
|
|
192
|
+
key: 'property-access:union:get:absent-class-arm',
|
|
193
|
+
verdict: 'missing',
|
|
194
|
+
detail: 'an absent class arm is declared on its family or its class holds a dynamic protocol'
|
|
195
|
+
}
|
|
196
|
+
];
|
|
197
|
+
}
|
|
198
|
+
if (operation.nativeFieldOwnerRead) {
|
|
199
|
+
const key = ctx.definitionOf(operation.key.value);
|
|
200
|
+
if (!nativeFieldOwnerReadMatches(operation, key?.kind === 'constant' && key.literal === 'string' ? key.text : null, ctx.classes, ctx.conversions, ctx.reflection))
|
|
201
|
+
return [
|
|
202
|
+
{
|
|
203
|
+
key: 'runtime-helper:native-field-owner-read',
|
|
204
|
+
verdict: 'missing',
|
|
205
|
+
detail: 'native field-owner read disagrees with its layout, exposure or conversions'
|
|
206
|
+
}
|
|
207
|
+
];
|
|
208
|
+
return [
|
|
209
|
+
...(operation.nativeFieldOwnerRead.arms.length > 0
|
|
210
|
+
? [{ key: 'runtime-helper:computation:instanceof:class-ref:constructor-family' }]
|
|
211
|
+
: []),
|
|
212
|
+
...[operation.nativeFieldOwnerRead.missing, ...operation.nativeFieldOwnerRead.arms.map((arm) => arm.conversion)].map((id) => ({
|
|
213
|
+
key: `conversion:${id}`
|
|
214
|
+
}))
|
|
215
|
+
];
|
|
216
|
+
}
|
|
217
|
+
const recipe = operation.typedComputedRead;
|
|
218
|
+
if (recipe === undefined)
|
|
219
|
+
return [];
|
|
220
|
+
const recipeKey = 'property-access:record:get:typed-computed-read';
|
|
221
|
+
const demands = [];
|
|
222
|
+
if (recipe.receiver !== representationKey(operation.receiver.representation) ||
|
|
223
|
+
recipe.result !== representationKey(operation.result.representation) ||
|
|
224
|
+
(recipe.receiverBounded !== undefined && recipe.receiverBounded.carrier !== representationKey(operation.key.representation)) ||
|
|
225
|
+
recipe.arms.length === 0) {
|
|
226
|
+
demands.push({
|
|
227
|
+
key: recipeKey,
|
|
228
|
+
verdict: 'missing',
|
|
229
|
+
detail: 'the sealed computed-read recipe does not match the get operation carriers'
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
if (recipe.receiverBounded !== undefined) {
|
|
233
|
+
const node = ctx.conversions.nodeById(recipe.receiverBounded.missing);
|
|
234
|
+
const key = `conversion:${recipe.receiverBounded.missing}`;
|
|
235
|
+
if (node !== null && (node.source.kind !== 'undefined' || representationKey(node.target) !== recipe.result))
|
|
236
|
+
demands.push({ key, verdict: 'missing', detail: 'the numeric computed-read absence conversion does not match its result' });
|
|
237
|
+
else
|
|
238
|
+
demands.push({ key });
|
|
239
|
+
}
|
|
240
|
+
for (const arm of recipe.arms) {
|
|
241
|
+
const key = `conversion:${arm.conversion}`;
|
|
242
|
+
const node = ctx.conversions.nodeById(arm.conversion);
|
|
243
|
+
if (node !== null &&
|
|
244
|
+
(representationKey(node.source) !== representationKey(arm.source) ||
|
|
245
|
+
representationKey(node.target) !== representationKey(operation.result.representation))) {
|
|
246
|
+
demands.push({
|
|
247
|
+
key,
|
|
248
|
+
verdict: 'missing',
|
|
249
|
+
detail: `the sealed conversion for field "${arm.key}" does not match the computed-read recipe`
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
// The conversion census remains the authority for existence and
|
|
254
|
+
// capability. The emitter receives only this authenticated node id.
|
|
255
|
+
demands.push({ key });
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
return demands;
|
|
259
|
+
}
|
|
260
|
+
case 'set': {
|
|
261
|
+
// The write twin of the sealed read recipe above, and validated the same
|
|
262
|
+
// way: a demand is raised ONLY when the certificate has gone stale
|
|
263
|
+
// against the operation it rides on. A well-formed one asks for nothing
|
|
264
|
+
// new -- the emitter renders it as ordinary constant-key stores, whose
|
|
265
|
+
// storage the receiver's own `:set:` claims already cover.
|
|
266
|
+
const recipe = operation.typedComputedWrite;
|
|
267
|
+
if (recipe === undefined)
|
|
268
|
+
return [];
|
|
269
|
+
if (recipe.receiver === representationKey(operation.receiver.representation) && recipe.keys.length > 0)
|
|
270
|
+
return [];
|
|
271
|
+
return [
|
|
272
|
+
{
|
|
273
|
+
key: `property-access:${operation.receiver.representation.kind}:set:typed-computed-write`,
|
|
274
|
+
verdict: 'missing',
|
|
275
|
+
detail: 'the sealed computed-write recipe does not match the set operation receiver'
|
|
276
|
+
}
|
|
277
|
+
];
|
|
278
|
+
}
|
|
279
|
+
case 'throw':
|
|
280
|
+
return [{ key: 'abrupt-edge:throw' }];
|
|
281
|
+
case 'await':
|
|
282
|
+
case 'yield':
|
|
283
|
+
return [{ key: 'abrupt-edge:suspend' }];
|
|
284
|
+
case 'return':
|
|
285
|
+
// A return that leaves a try region runs its finally clause on the way
|
|
286
|
+
// out; a body with no region completes the ordinary way and asks nothing.
|
|
287
|
+
return ctx.body.tryRegions.length > 0 ? [{ key: 'abrupt-edge:return' }] : [];
|
|
288
|
+
default:
|
|
289
|
+
return [];
|
|
290
|
+
}
|
|
291
|
+
};
|
|
292
|
+
/** Every capability one operation needs, in the manifest's namespace. */
|
|
293
|
+
export const capabilityKeysOf = (operation, ctx) => [
|
|
294
|
+
...ownDemandsOf(operation, ctx),
|
|
295
|
+
...propertyAccessKeysOf(operation, ctx),
|
|
296
|
+
...runtimeHelperKeysOf(operation, ctx)
|
|
297
|
+
];
|
|
298
|
+
const registered = (installed, family, discriminator) => installed
|
|
299
|
+
? { verdict: 'installed', reason: '' }
|
|
300
|
+
: { verdict: 'missing', reason: `the target manifest registers no ${family} "${discriminator}"` };
|
|
301
|
+
/**
|
|
302
|
+
* The one lookup. Each family names the manifest set (or the census) that
|
|
303
|
+
* answers it; a family with no set is decided by the demand itself, and a
|
|
304
|
+
* demand in such a family that arrives undecided is refused -- fail closed,
|
|
305
|
+
* never silently installed.
|
|
306
|
+
*/
|
|
307
|
+
const verdictOf = (demand, ctx) => {
|
|
308
|
+
if (demand.verdict !== undefined)
|
|
309
|
+
return { verdict: demand.verdict, reason: demand.detail ?? '' };
|
|
310
|
+
const family = familyOf(demand.key);
|
|
311
|
+
const discriminator = discriminatorOf(demand.key);
|
|
312
|
+
const manifest = ctx.manifest;
|
|
313
|
+
switch (family) {
|
|
314
|
+
case 'physical-cpp-type':
|
|
315
|
+
case 'host-member-call':
|
|
316
|
+
return { verdict: 'missing', reason: `${demand.key} was demanded without a verdict` };
|
|
317
|
+
case 'call-abi':
|
|
318
|
+
return registered(discriminator === 'generic' ? manifest.hasGenericCallPath : manifest.hasDynamicCallPath, family, discriminator);
|
|
319
|
+
case 'host-invocation':
|
|
320
|
+
return registered((manifest.hostInvocations?.has(discriminator) ||
|
|
321
|
+
manifest.hostConstructors?.has(discriminator) ||
|
|
322
|
+
manifest.hostMembers?.has(discriminator)) ??
|
|
323
|
+
false, family, discriminator);
|
|
324
|
+
case 'property-access':
|
|
325
|
+
return registered(manifest.propertyRecipes.has(discriminator), family, discriminator);
|
|
326
|
+
case 'capture':
|
|
327
|
+
return registered(manifest.captureOwnershipSupport.has(discriminator), family, discriminator);
|
|
328
|
+
case 'conversion': {
|
|
329
|
+
const node = ctx.conversions.nodeById(discriminator);
|
|
330
|
+
if (node === null)
|
|
331
|
+
return { verdict: 'missing', reason: `no conversion node was minted for ${discriminator}` };
|
|
332
|
+
return node.capability.kind === 'never'
|
|
333
|
+
? { verdict: 'unsupported', reason: node.capability.reason }
|
|
334
|
+
: { verdict: 'installed', reason: '' };
|
|
335
|
+
}
|
|
336
|
+
case 'native-boundary':
|
|
337
|
+
return discriminator === 'external-binding'
|
|
338
|
+
? registered(manifest.supportsExternalBindings ?? false, family, discriminator)
|
|
339
|
+
: registered(manifest.nativeProtocols.has(discriminator), family, discriminator);
|
|
340
|
+
case 'runtime-helper':
|
|
341
|
+
if (manifest.runtimeHelpers.has(discriminator))
|
|
342
|
+
return { verdict: 'installed', reason: '' };
|
|
343
|
+
if (manifest.unsupportedRuntimeHelpers.has(discriminator)) {
|
|
344
|
+
return { verdict: 'unsupported', reason: `the target declares runtime helper "${discriminator}" unsupported` };
|
|
345
|
+
}
|
|
346
|
+
return registered(false, family, discriminator);
|
|
347
|
+
case 'abrupt-edge':
|
|
348
|
+
return registered(manifest.abruptEdgeHandlers.has(discriminator), family, discriminator);
|
|
349
|
+
}
|
|
350
|
+
};
|
|
351
|
+
const contextFor = (input, body) => {
|
|
352
|
+
const definitions = new Map();
|
|
353
|
+
for (const blockId of body.blockOrder) {
|
|
354
|
+
const block = body.blocks.get(blockId);
|
|
355
|
+
if (!block)
|
|
356
|
+
continue;
|
|
357
|
+
for (const operation of allOperationsOf(block)) {
|
|
358
|
+
const result = resultOfIrOperation(operation);
|
|
359
|
+
if (result)
|
|
360
|
+
definitions.set(result.id, operation);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
return {
|
|
364
|
+
...input,
|
|
365
|
+
body,
|
|
366
|
+
definitionOf: (value) => definitions.get(value) ?? null,
|
|
367
|
+
semanticOperationOf: (lineage) => input.graph.operations.get(operationOfResult(lineage)) ?? null,
|
|
368
|
+
isDead: (lineage) => input.deadTypeofGuards.isDeadOperation(operationOfResult(lineage))
|
|
369
|
+
};
|
|
370
|
+
};
|
|
371
|
+
/**
|
|
372
|
+
* What one body's environment must transport, as `capture:` demands.
|
|
373
|
+
*
|
|
374
|
+
* Read off `IrBody.facts` -- `ir/captures.ts`'s whole-program answer, sealed
|
|
375
|
+
* onto the body after the shake -- and NOT off `allocate-callable`'s
|
|
376
|
+
* `captures` operand, which no producer fills. Until this existed the capture
|
|
377
|
+
* question was certified by nobody and decided only at print time, so a
|
|
378
|
+
* carrier the target could not transport certified clean and then emitted
|
|
379
|
+
* nothing: precisely the certify/print disagreement 2.3's gate exists to
|
|
380
|
+
* catch.
|
|
381
|
+
*
|
|
382
|
+
* The rules mirror `targets/cpp/captures.ts`'s admission exactly, because
|
|
383
|
+
* they are the same rule asked at two stages rather than two rules:
|
|
384
|
+
* a declaration with no placement is not a capture the environment carries; a
|
|
385
|
+
* BOXED one is shared by aliasing, so copying its `std::shared_ptr` handle is
|
|
386
|
+
* safe whatever its own carrier's ownership tier says, and only a carrier the
|
|
387
|
+
* plan never selected (or left `unresolved`) is refusable there; everything
|
|
388
|
+
* else, receiver included, must name an ownership the manifest publishes.
|
|
389
|
+
*/
|
|
390
|
+
const captureDemandsOf = (body, placements, boxed) => {
|
|
391
|
+
const facts = body.facts;
|
|
392
|
+
if (!facts)
|
|
393
|
+
return [];
|
|
394
|
+
const demands = [];
|
|
395
|
+
for (const declaration of facts.capturedDeclarations) {
|
|
396
|
+
const placement = placements.get(declaration);
|
|
397
|
+
if (!placement)
|
|
398
|
+
continue;
|
|
399
|
+
const representation = placement.representation ?? null;
|
|
400
|
+
if (boxed.has(declaration)) {
|
|
401
|
+
if (representation === null || representation.kind === 'unresolved')
|
|
402
|
+
demands.push({ key: `capture:${captureCapabilityOf(representation)}` });
|
|
403
|
+
continue;
|
|
404
|
+
}
|
|
405
|
+
demands.push({ key: `capture:${captureCapabilityOf(representation)}` });
|
|
406
|
+
}
|
|
407
|
+
if (facts.capturedReceiver)
|
|
408
|
+
demands.push({ key: `capture:${captureCapabilityOf(facts.capturedReceiver)}` });
|
|
409
|
+
return demands;
|
|
410
|
+
};
|
|
411
|
+
/**
|
|
412
|
+
* Walks every body and decides every demand. One refusal per (owner, key):
|
|
413
|
+
* the same missing recipe demanded at forty sites of one function is one
|
|
414
|
+
* capability the target lacks, not forty, and the row names which.
|
|
415
|
+
*/
|
|
416
|
+
export const certifyIr = (input) => {
|
|
417
|
+
const demanded = new Set();
|
|
418
|
+
const refusals = [];
|
|
419
|
+
const refused = new Set();
|
|
420
|
+
const decide = (owner, demand, ctx) => {
|
|
421
|
+
demanded.add(demand.key);
|
|
422
|
+
const decision = verdictOf(demand, ctx);
|
|
423
|
+
if (decision.verdict === 'installed')
|
|
424
|
+
return;
|
|
425
|
+
const dedupe = `${owner}|${demand.key}`;
|
|
426
|
+
if (refused.has(dedupe))
|
|
427
|
+
return;
|
|
428
|
+
refused.add(dedupe);
|
|
429
|
+
refusals.push({ stage: 'certify', key: demand.key, owner, reason: decision.reason || `${demand.key} is ${decision.verdict}` });
|
|
430
|
+
};
|
|
431
|
+
for (const row of input.slotDrift) {
|
|
432
|
+
// No body context is needed: the row already carries the pair and the
|
|
433
|
+
// census's own reason, and there is no lookup left to do.
|
|
434
|
+
demanded.add(`conversion:${row.source}->${row.slot}`);
|
|
435
|
+
const dedupe = `${row.operation}|conversion:${row.source}->${row.slot}`;
|
|
436
|
+
if (refused.has(dedupe))
|
|
437
|
+
continue;
|
|
438
|
+
refused.add(dedupe);
|
|
439
|
+
refusals.push({ stage: 'certify', key: `conversion:${row.source}->${row.slot}`, owner: String(row.operation), reason: row.reason });
|
|
440
|
+
}
|
|
441
|
+
// The whole-program boxed set: a declaration belongs to exactly one physical
|
|
442
|
+
// frame, so the union of every body's own set is the answer every frame
|
|
443
|
+
// touching the cell shares -- the same union `CaptureIndex.isBoxed` takes.
|
|
444
|
+
const boxed = new Set();
|
|
445
|
+
for (const body of input.bodies.values())
|
|
446
|
+
for (const declaration of body.facts?.boxed ?? [])
|
|
447
|
+
boxed.add(declaration);
|
|
448
|
+
for (const body of input.bodies.values()) {
|
|
449
|
+
const ctx = contextFor(input, body);
|
|
450
|
+
const owner = String(body.sourceOwner);
|
|
451
|
+
for (const demand of captureDemandsOf(body, input.placements, boxed))
|
|
452
|
+
decide(owner, demand, ctx);
|
|
453
|
+
for (const demand of abiDemands(input.manifest, body.abi))
|
|
454
|
+
decide(owner, demand, ctx);
|
|
455
|
+
for (const demand of abiDemands(input.manifest, body.construct))
|
|
456
|
+
decide(owner, demand, ctx);
|
|
457
|
+
// Every SSA value's carrier must be spellable, and a `native-handle` among
|
|
458
|
+
// them must name an authenticated protocol -- the two facts preflight read
|
|
459
|
+
// off each published result, read here off the body's own value index.
|
|
460
|
+
for (const representation of body.values.values()) {
|
|
461
|
+
decide(owner, physicalTypeDemand(input.manifest, representation), ctx);
|
|
462
|
+
const boundary = nativeBoundaryDemand(representation);
|
|
463
|
+
if (boundary)
|
|
464
|
+
decide(owner, boundary, ctx);
|
|
465
|
+
}
|
|
466
|
+
for (const blockId of body.blockOrder) {
|
|
467
|
+
const block = body.blocks.get(blockId);
|
|
468
|
+
if (!block)
|
|
469
|
+
continue;
|
|
470
|
+
for (const operation of allOperationsOf(block)) {
|
|
471
|
+
for (const demand of capabilityKeysOf(operation, ctx))
|
|
472
|
+
decide(owner, demand, ctx);
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
return Object.freeze({
|
|
477
|
+
certified: refusals.length === 0 && input.blocked.length === 0,
|
|
478
|
+
refusals: Object.freeze(refusals),
|
|
479
|
+
demanded: Object.freeze([...demanded].sort())
|
|
480
|
+
});
|
|
481
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { DeclarationId } from '../identity/ids.js';
|
|
2
|
+
import type { IrBody } from './model.js';
|
|
3
|
+
/**
|
|
4
|
+
* The classes the program evaluates exactly once.
|
|
5
|
+
*
|
|
6
|
+
* A class declaration is an `allocate-constructor` operation, and every
|
|
7
|
+
* evaluation of it mints a fresh `gea::NativeClassMethodState` -- the
|
|
8
|
+
* prototype object, the method identities, the `instanceof` chain -- which is
|
|
9
|
+
* why every instance carries a `gea_method_state` handle to the evaluation
|
|
10
|
+
* that constructed it: two evaluations of one declaration are two classes,
|
|
11
|
+
* and their instances must not answer for each other.
|
|
12
|
+
*
|
|
13
|
+
* When the declaration is evaluated ONCE there is only one such state for the
|
|
14
|
+
* whole program, and a handle per instance says nothing the class itself
|
|
15
|
+
* could not say. `records.ts` then states it once, as a `static` member of
|
|
16
|
+
* the struct, and the construct function fills it in. On
|
|
17
|
+
* `bench/comparison/fixtures/binary_trees.ts` that is eight bytes off every
|
|
18
|
+
* one of a million nodes.
|
|
19
|
+
*
|
|
20
|
+
* "Once" is the operation sitting in a region body -- a module body or a
|
|
21
|
+
* static block, which the language runs a single time -- outside any cyclic
|
|
22
|
+
* block, at the declaration's only allocation site. A class declared inside a
|
|
23
|
+
* function, or inside a top-level loop, is evaluated per call or per
|
|
24
|
+
* iteration and keeps its per-instance handle.
|
|
25
|
+
*/
|
|
26
|
+
export declare const singleEvaluationClassesOf: (bodies: readonly IrBody[]) => ReadonlySet<DeclarationId>;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { isRegionId } from '../identity/ids.js';
|
|
2
|
+
import { cyclicBlocksOf } from './dominance.js';
|
|
3
|
+
/**
|
|
4
|
+
* The classes the program evaluates exactly once.
|
|
5
|
+
*
|
|
6
|
+
* A class declaration is an `allocate-constructor` operation, and every
|
|
7
|
+
* evaluation of it mints a fresh `gea::NativeClassMethodState` -- the
|
|
8
|
+
* prototype object, the method identities, the `instanceof` chain -- which is
|
|
9
|
+
* why every instance carries a `gea_method_state` handle to the evaluation
|
|
10
|
+
* that constructed it: two evaluations of one declaration are two classes,
|
|
11
|
+
* and their instances must not answer for each other.
|
|
12
|
+
*
|
|
13
|
+
* When the declaration is evaluated ONCE there is only one such state for the
|
|
14
|
+
* whole program, and a handle per instance says nothing the class itself
|
|
15
|
+
* could not say. `records.ts` then states it once, as a `static` member of
|
|
16
|
+
* the struct, and the construct function fills it in. On
|
|
17
|
+
* `bench/comparison/fixtures/binary_trees.ts` that is eight bytes off every
|
|
18
|
+
* one of a million nodes.
|
|
19
|
+
*
|
|
20
|
+
* "Once" is the operation sitting in a region body -- a module body or a
|
|
21
|
+
* static block, which the language runs a single time -- outside any cyclic
|
|
22
|
+
* block, at the declaration's only allocation site. A class declared inside a
|
|
23
|
+
* function, or inside a top-level loop, is evaluated per call or per
|
|
24
|
+
* iteration and keeps its per-instance handle.
|
|
25
|
+
*/
|
|
26
|
+
export const singleEvaluationClassesOf = (bodies) => {
|
|
27
|
+
const once = new Set();
|
|
28
|
+
const repeated = new Set();
|
|
29
|
+
for (const body of bodies) {
|
|
30
|
+
const region = isRegionId(body.sourceOwner);
|
|
31
|
+
const cyclic = region ? cyclicBlocksOf(body) : null;
|
|
32
|
+
for (const [blockId, block] of body.blocks) {
|
|
33
|
+
for (const operation of block.operations) {
|
|
34
|
+
if (operation.kind !== 'allocate-constructor')
|
|
35
|
+
continue;
|
|
36
|
+
const { declaration } = operation;
|
|
37
|
+
// A second allocation site -- a physical variant of the same body, or
|
|
38
|
+
// a declaration lowered twice -- is a second evaluation as far as this
|
|
39
|
+
// census can tell, so it fails closed.
|
|
40
|
+
if (!region || cyclic.has(blockId) || once.has(declaration))
|
|
41
|
+
repeated.add(declaration);
|
|
42
|
+
else
|
|
43
|
+
once.add(declaration);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
for (const declaration of repeated)
|
|
48
|
+
once.delete(declaration);
|
|
49
|
+
return once;
|
|
50
|
+
};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { DeclarationId } from '../identity/ids.js';
|
|
2
|
+
import type { ClassLayout } from '../projection/classes.js';
|
|
3
|
+
import { type Representation } from '../representation/model.js';
|
|
4
|
+
import type { IrBody } from './model.js';
|
|
5
|
+
/**
|
|
6
|
+
* Every `ClassName.KEY = value` site the whole program's lowered bodies
|
|
7
|
+
* contain, folded into one table keyed by (class declaration, key).
|
|
8
|
+
*
|
|
9
|
+
* Walked over the IR, not the semantic graph: whether a receiver's carrier
|
|
10
|
+
* really is `constructor-family`, and which class(es) it names, is a
|
|
11
|
+
* representation-plan answer, and a lowered `IrOperand` already carries it
|
|
12
|
+
* (`operation.receiver.representation`) -- re-deriving that from the semantic
|
|
13
|
+
* graph would risk a second opinion that could disagree with the one the plan
|
|
14
|
+
* actually selected.
|
|
15
|
+
*
|
|
16
|
+
* This lives in `ir/` rather than in the C++ target, which is where it was
|
|
17
|
+
* first written, because two unrelated consumers need the same answer and the
|
|
18
|
+
* fact itself is an IR fact. The target adds the mangled C++ storage name it
|
|
19
|
+
* renders through; the reflection census asks only whether the slot exists and
|
|
20
|
+
* what carrier it holds. Had the census stayed in the target, the census would
|
|
21
|
+
* have had to re-derive it -- exactly the two-authorities drift the original
|
|
22
|
+
* comment warns about.
|
|
23
|
+
*
|
|
24
|
+
* A computed key, or a key no `constant` operation in the SAME body accounts
|
|
25
|
+
* for, is skipped rather than guessed at: nothing downstream can declare
|
|
26
|
+
* storage for a name it cannot read back off the body's own operations. A
|
|
27
|
+
* static METHOD or ACCESSOR key is skipped because each already has a callable
|
|
28
|
+
* home. Declared static fields are claimed from the store their class-lifecycle
|
|
29
|
+
* event lowers: that store carries the initializer's selected representation
|
|
30
|
+
* and runs in the enclosing region's source order, so the census needs no
|
|
31
|
+
* second opinion about either the field's type or its initial value.
|
|
32
|
+
*
|
|
33
|
+
* Two writes to the same (declaration,key) whose VALUE representations
|
|
34
|
+
* disagree are refused together (`conflicts`) rather than one silently
|
|
35
|
+
* overwriting the storage the other implied: a consumer that later widened one
|
|
36
|
+
* writer's value into the other's carrier would be inventing a conversion this
|
|
37
|
+
* census never proved sound. `conflicts` names each such pair as
|
|
38
|
+
* `"<declaration>.<key>"`; the caller decides what a non-empty list means.
|
|
39
|
+
*/
|
|
40
|
+
export interface ClassStaticFieldSlots {
|
|
41
|
+
readonly slots: ReadonlyMap<DeclarationId, ReadonlyMap<string, Representation>>;
|
|
42
|
+
readonly conflicts: readonly string[];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Which class of a `constructor-family`'s members owns `key`'s static storage.
|
|
46
|
+
*
|
|
47
|
+
* The one selection rule, so the census and every later lookup name the same
|
|
48
|
+
* class for the same receiver. A key no static member declares is the
|
|
49
|
+
* assignment-only idiom and belongs to the first member that could hold it. A
|
|
50
|
+
* declared static FIELD has the same storage requirement, since its
|
|
51
|
+
* class-lifecycle event has already become an ordinary `set` at the exact
|
|
52
|
+
* evaluation point. Methods and accessors remain callable members and must not
|
|
53
|
+
* acquire a second storage location.
|
|
54
|
+
*/
|
|
55
|
+
export declare const staticFieldOwnerOf: (classes: ReadonlyMap<DeclarationId, ClassLayout>, members: readonly DeclarationId[], key: string) => DeclarationId | undefined;
|
|
56
|
+
/** The class one class's static storage lives in: itself, or the generic root whose layouts it is one of. */
|
|
57
|
+
export declare const staticStorageOwnerOf: (classes: ReadonlyMap<DeclarationId, ClassLayout>, declaration: DeclarationId) => DeclarationId;
|
|
58
|
+
/** The carrier `ClassName.KEY` is stored in, or null when the census proved none. */
|
|
59
|
+
export declare const staticFieldSlotOf: (census: ClassStaticFieldSlots, classes: ReadonlyMap<DeclarationId, ClassLayout>, members: readonly DeclarationId[], key: string) => Representation | null;
|
|
60
|
+
export declare const censusClassStaticFieldSlots: (bodies: readonly IrBody[], classes: ReadonlyMap<DeclarationId, ClassLayout>) => ClassStaticFieldSlots;
|