@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,37 @@
|
|
|
1
|
+
import type { Representation } from '../representation/model.js';
|
|
2
|
+
import type { ConversionCapability, ConversionNodeId } from './algebra.js';
|
|
3
|
+
import type { ConversionRuntimeRegistry } from './registry.js';
|
|
4
|
+
export type { ClassifierMaterializerPair, ConversionRuntimeRegistry } from './registry.js';
|
|
5
|
+
export { validateConversionGraph } from './graph-validation.js';
|
|
6
|
+
/**
|
|
7
|
+
* Derivation of the dynamic-conversion capability algebra.
|
|
8
|
+
*
|
|
9
|
+
* This module answers one question: given a target `Representation`, what is
|
|
10
|
+
* the capability for converting an already-boxed dynamic value into it? The
|
|
11
|
+
* answer is read off the normative table in the architecture doc's "Exhaustive
|
|
12
|
+
* dynamic-conversion capability algebra" section, not re-derived from source
|
|
13
|
+
* shape or invented per call site. A kind the table marks `Never` returns
|
|
14
|
+
* `never` unconditionally; a kind the table gates on installed runtime support
|
|
15
|
+
* consults the registry and returns `never` when nothing is installed, rather
|
|
16
|
+
* than fabricating a materializer that would turn a missing capability into a
|
|
17
|
+
* silent miscompile.
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* Recursion state for one derivation.
|
|
21
|
+
*
|
|
22
|
+
* `inProgress` maps a `Representation` object -- by reference, not by a
|
|
23
|
+
* structural key -- to the node id it was assigned when first entered. A
|
|
24
|
+
* structural key would have to walk the whole shape to compute, which loops
|
|
25
|
+
* forever on a genuinely cyclic `Representation` graph (the standard way to
|
|
26
|
+
* express a recursive type without an explicit indirection layer); checking
|
|
27
|
+
* the exact object reference already on the current path costs nothing and
|
|
28
|
+
* terminates immediately. A shared, non-cyclic leaf reused at two unrelated
|
|
29
|
+
* positions is never mistaken for a cycle, because each recursive call only
|
|
30
|
+
* ever sees the map built along its own ancestor chain, not its siblings'.
|
|
31
|
+
*/
|
|
32
|
+
export interface ConversionDerivationContext {
|
|
33
|
+
readonly registry: ConversionRuntimeRegistry;
|
|
34
|
+
readonly inProgress: ReadonlyMap<Representation, ConversionNodeId>;
|
|
35
|
+
}
|
|
36
|
+
export declare const createConversionDerivationContext: (registry: ConversionRuntimeRegistry) => ConversionDerivationContext;
|
|
37
|
+
export declare const deriveConversionCapability: (target: Representation, context: ConversionDerivationContext) => ConversionCapability;
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import { representationKey } from '../representation/model.js';
|
|
2
|
+
import { classRefDomainsOverlap, classifierDomainsOverlap, never } from './algebra.js';
|
|
3
|
+
export { validateConversionGraph } from './graph-validation.js';
|
|
4
|
+
export const createConversionDerivationContext = (registry) => ({
|
|
5
|
+
registry,
|
|
6
|
+
inProgress: new Map()
|
|
7
|
+
});
|
|
8
|
+
/** Wraps an installed pair as `Atom`, or `never` when nothing is installed or the pair disagrees on domain. */
|
|
9
|
+
const atomFrom = (pair, missingReason) => {
|
|
10
|
+
if (!pair)
|
|
11
|
+
return never(missingReason);
|
|
12
|
+
if (pair.classifier.domain !== pair.materializer.domain) {
|
|
13
|
+
return never(`installed classifier domain "${pair.classifier.domain}" does not equal installed materializer domain "${pair.materializer.domain}"`);
|
|
14
|
+
}
|
|
15
|
+
return { kind: 'atom', classifier: pair.classifier, materializer: pair.materializer };
|
|
16
|
+
};
|
|
17
|
+
/** An installed pair as `Atom`, or `null` so the caller can state its own refusal. */
|
|
18
|
+
const maybeAtom = (pair) => pair === null ? null : { kind: 'atom', classifier: pair.classifier, materializer: pair.materializer };
|
|
19
|
+
export const deriveConversionCapability = (target, context) =>
|
|
20
|
+
// A recursive reference must name the graph node that actually owns this
|
|
21
|
+
// carrier. `buildConversionGraph` keys nodes by `representationKey`, not by
|
|
22
|
+
// a derivation-local path such as "root".
|
|
23
|
+
deriveAt(target, context, representationKey(target));
|
|
24
|
+
const deriveAt = (target, context, path) => {
|
|
25
|
+
const enclosing = context.inProgress.get(target);
|
|
26
|
+
if (enclosing !== undefined)
|
|
27
|
+
return { kind: 'recursive-ref', node: enclosing };
|
|
28
|
+
// `path` describes a capability location for diagnostics; recursive refs
|
|
29
|
+
// name graph nodes. Keep those namespaces separate so a nested recurrence
|
|
30
|
+
// points to `representationKey(target)`, the id buildConversionGraph emits.
|
|
31
|
+
const nested = {
|
|
32
|
+
registry: context.registry,
|
|
33
|
+
inProgress: new Map(context.inProgress).set(target, representationKey(target))
|
|
34
|
+
};
|
|
35
|
+
switch (target.kind) {
|
|
36
|
+
case 'unresolved':
|
|
37
|
+
// Lattice bottom: selection never happened, so there is no physical target to convert into.
|
|
38
|
+
return never(`no physical target exists (unresolved: ${target.reason})`);
|
|
39
|
+
case 'void':
|
|
40
|
+
return never('void is not a runtime value carrier');
|
|
41
|
+
case 'scalar':
|
|
42
|
+
// A TypeScript annotation does not perform ToNumber. Dynamic values
|
|
43
|
+
// reaching a scalar slot are assertions and require the slot's exact
|
|
44
|
+
// runtime tag/range materializer. Explicit ToNumber lives at its own
|
|
45
|
+
// semantic operation.
|
|
46
|
+
return atomFrom(context.registry.scalarMaterializer(target.domain), `no installed exact tag/range materializer for scalar domain "${target.domain}"`);
|
|
47
|
+
case 'string': {
|
|
48
|
+
// A `string` annotation is an exact String-tag assertion, not implicit
|
|
49
|
+
// ToString. String(value), templates, and property keys request that
|
|
50
|
+
// abstract operation at their own semantic sites.
|
|
51
|
+
return atomFrom(context.registry.stringMaterializer(), 'no installed exact string-tag materializer');
|
|
52
|
+
}
|
|
53
|
+
case 'symbol':
|
|
54
|
+
return atomFrom(context.registry.symbolMaterializer(), 'no installed exact symbol-tag materializer');
|
|
55
|
+
case 'null':
|
|
56
|
+
return atomFrom(context.registry.nullMaterializer(), 'the runtime does not distinguish null with an exact tag');
|
|
57
|
+
case 'undefined':
|
|
58
|
+
return atomFrom(context.registry.undefinedMaterializer(), 'the runtime does not distinguish undefined with an exact tag');
|
|
59
|
+
case 'class-ref':
|
|
60
|
+
return atomFrom(context.registry.classRefMaterializer(target.declaration, target.ownership), `no installed nominal-token materializer for class ${target.declaration} (${target.ownership}); structural object tests do not qualify`);
|
|
61
|
+
case 'native-handle':
|
|
62
|
+
return atomFrom(context.registry.nativeHandleMaterializer(target.protocol, target.version, target.native), `no versioned host-protocol materializer installed for ${target.protocol}@${target.version}`);
|
|
63
|
+
case 'record':
|
|
64
|
+
// A record assertion is an object product: every required key and every
|
|
65
|
+
// typed field must be checked from the dynamic object. The emitter may
|
|
66
|
+
// keep an exact boxed payload as a fast path, but that optimization does
|
|
67
|
+
// not change the conversion capability into an identity-only claim -- an
|
|
68
|
+
// arbitrary dynamic object still has to materialize the declared shape.
|
|
69
|
+
if (target.accessors.length !== 0)
|
|
70
|
+
return never('a record with accessors has no pure dynamic product materializer');
|
|
71
|
+
return deriveRecord(target, nested, path);
|
|
72
|
+
case 'record-with-index':
|
|
73
|
+
// The algebra has no shape for this carrier's open half for the same
|
|
74
|
+
// reason it has none for `dictionary` (below): Product needs a complete
|
|
75
|
+
// frozen field list, and the index signature is deliberately open. A
|
|
76
|
+
// materializer that only populated the named fields and left the
|
|
77
|
+
// sidecar empty would silently drop every dynamic-keyed property a
|
|
78
|
+
// dynamic value actually carried, which is a worse answer than refusing.
|
|
79
|
+
return (maybeAtom(context.registry.boxedIdentityMaterializer(target)) ??
|
|
80
|
+
never(`record-with-index shape "${target.shapeId}" has an open dictionary sidecar; no checked, semantics-preserving ` +
|
|
81
|
+
'object/dictionary view exists for it, and a snapshot cast is forbidden'));
|
|
82
|
+
case 'proxy-object':
|
|
83
|
+
return never('a Proxy cannot be reconstructed from an arbitrary object value');
|
|
84
|
+
case 'native-record-ref':
|
|
85
|
+
// The same round trip a `record` gets immediately above, and available
|
|
86
|
+
// for exactly the same reason: `Value::box` records the payload's own
|
|
87
|
+
// C++ type whoever owns the layout, so a `gea::Ref<gea::runtime::Date>`
|
|
88
|
+
// this program boxed is recognized and handed back by the identical
|
|
89
|
+
// primitive. The refusal below is the honest answer only for the
|
|
90
|
+
// ownerships no round trip exists for -- a `borrowed` reference has no
|
|
91
|
+
// lifetime to hand back, and the registry says so by answering `null`.
|
|
92
|
+
return atomFrom(context.registry.recordRefMaterializer(target.shapeId, target.ownership), `an erased or borrowed native reference to shape "${target.shapeId}" (${target.ownership}) is not recoverable from a dynamic value`);
|
|
93
|
+
case 'borrowed-ref':
|
|
94
|
+
return never('lifetime and alias authority cannot be synthesized');
|
|
95
|
+
case 'array-object':
|
|
96
|
+
return deriveArrayObject(target, nested, path);
|
|
97
|
+
case 'dense-buffer':
|
|
98
|
+
// Compiler/runtime-private storage per representation/model.ts; no JavaScript value is ever observed as one.
|
|
99
|
+
return never('a dense buffer is compiler/runtime-private storage, never a JavaScript-observable value');
|
|
100
|
+
case 'typed-array':
|
|
101
|
+
// ECMA-262 23.2's typed array views have no generic "wrap this dynamic
|
|
102
|
+
// value" constructor: `new Uint8Array(dynamicValue)` dispatches on
|
|
103
|
+
// `dynamicValue`'s own runtime shape (a length, an ArrayBuffer, an
|
|
104
|
+
// iterable) rather than performing one uniform conversion, so there is
|
|
105
|
+
// no single materializer this algebra could name for a fixed target
|
|
106
|
+
// element width.
|
|
107
|
+
return (maybeAtom(context.registry.boxedIdentityMaterializer(target)) ??
|
|
108
|
+
never('a typed array cannot be reconstructed from an arbitrary dynamic value; no single ECMAScript operation produces one that way'));
|
|
109
|
+
case 'array-buffer':
|
|
110
|
+
case 'shared-array-buffer':
|
|
111
|
+
// The same refusal one level down, and for a stronger reason: an
|
|
112
|
+
// ArrayBuffer is an OBJECT IDENTITY over a block of bytes, so the only
|
|
113
|
+
// way to obtain one from a dynamic value is to unwrap the identity the
|
|
114
|
+
// value already holds -- which is a brand check this algebra has no
|
|
115
|
+
// shape for -- and the alternative, copying the bytes, would produce a
|
|
116
|
+
// buffer no view of the original aliases.
|
|
117
|
+
return (maybeAtom(context.registry.boxedIdentityMaterializer(target)) ??
|
|
118
|
+
never('an ArrayBuffer is an object identity over a byte block; no pure projection reconstructs one from a dynamic value'));
|
|
119
|
+
case 'data-view':
|
|
120
|
+
return never('a DataView is an object identity over a byte block; no pure projection reconstructs one from a dynamic value');
|
|
121
|
+
case 'native-sequence':
|
|
122
|
+
return never('a storage snapshot is not an ECMAScript Array identity');
|
|
123
|
+
case 'iterator':
|
|
124
|
+
return never('iterator acquisition is an effectful semantic protocol, not a pure projection');
|
|
125
|
+
case 'promise':
|
|
126
|
+
return never('promise assimilation is an effectful semantic protocol, not a pure projection');
|
|
127
|
+
case 'dictionary':
|
|
128
|
+
// The round trip first, the same order and for the same reason `record`
|
|
129
|
+
// above takes it: a `gea::Dictionary<V>` THIS program boxed comes back
|
|
130
|
+
// as itself, recognized by the payload type `Value::box` recorded, with
|
|
131
|
+
// no key walk and no reconstruction.
|
|
132
|
+
//
|
|
133
|
+
// The refusal below is about RECONSTRUCTION and stays exactly right for
|
|
134
|
+
// it: the algebra has no shape for an open string-keyed view -- Product
|
|
135
|
+
// needs a complete frozen field list, Collection's domain is
|
|
136
|
+
// Array-shaped -- so building a dictionary out of an arbitrary dynamic
|
|
137
|
+
// value would be the fabricated materializer this module must not
|
|
138
|
+
// produce. Handing back the object that was boxed is not that: it is a
|
|
139
|
+
// tag check, an address check and a handle copy.
|
|
140
|
+
return (maybeAtom(context.registry.boxedIdentityMaterializer(target)) ??
|
|
141
|
+
never('no checked, semantics-preserving object/dictionary view exists; a snapshot cast is forbidden'));
|
|
142
|
+
case 'keyed-collection':
|
|
143
|
+
// Same gap as `dictionary` above, one step further out. Recovering a
|
|
144
|
+
// `Map<K, V>` from a box would need a runtime brand check plus a
|
|
145
|
+
// per-entry checked conversion of BOTH positions, and this registry
|
|
146
|
+
// installs no such classifier -- v1 spelled that route as
|
|
147
|
+
// `gea_cpp_typed_js_map::from_dynamic_checked`, which is exactly the
|
|
148
|
+
// boxed round trip this compiler declines to build.
|
|
149
|
+
return never('no checked Map/Set materializer is installed; recovering a keyed collection from a dynamic value needs a runtime ' +
|
|
150
|
+
'brand check plus a per-entry checked conversion of both key and value');
|
|
151
|
+
case 'function':
|
|
152
|
+
return atomFrom(context.registry.functionMaterializer(target.functionId, target.abi), `category-only function checks are insufficient; no authenticated callable-identity materializer installed for ${target.functionId}`);
|
|
153
|
+
case 'function-family':
|
|
154
|
+
return never('a closed authenticated family tag and ABI join are required, and family authority is not a runtime classifier/materializer');
|
|
155
|
+
case 'constructor-family':
|
|
156
|
+
case 'constructor-value-dispatch':
|
|
157
|
+
case 'function-and-constructor':
|
|
158
|
+
return never('constructor identity is nominal authority; no runtime materializer can rediscover it from a dynamic value');
|
|
159
|
+
case 'function-value-family':
|
|
160
|
+
return never('family membership and optional absence require exact tag authority that no runtime materializer can supply');
|
|
161
|
+
case 'generic-function-set':
|
|
162
|
+
return never('a generic function set is a compile-time choice among source declarations; no runtime value materializes one');
|
|
163
|
+
case 'callable-identity':
|
|
164
|
+
// A boxed value that IS a function does carry one of these, but reading
|
|
165
|
+
// it back needs an authenticated callable classifier, and this registry
|
|
166
|
+
// installs none -- the same gap `function` above states.
|
|
167
|
+
return never('no installed classifier recovers a function identity from a dynamic value');
|
|
168
|
+
case 'function-value-dispatch':
|
|
169
|
+
return atomFrom(context.registry.functionValueDispatchMaterializer(target.abi), 'no checked dynamic Function adapter is installed for this evaluated dispatch ABI');
|
|
170
|
+
case 'optional':
|
|
171
|
+
return deriveOptional(target, nested, path);
|
|
172
|
+
case 'tagged-union':
|
|
173
|
+
return deriveTaggedUnion(target, nested, path);
|
|
174
|
+
case 'dynamic':
|
|
175
|
+
return { kind: 'identity' };
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
const deriveRecord = (target, context, path) => {
|
|
179
|
+
const materializer = context.registry.recordMaterializer(target.shapeId, target.ownership);
|
|
180
|
+
if (!materializer)
|
|
181
|
+
return never(`no installed product materializer for record shape "${target.shapeId}" (${target.ownership})`);
|
|
182
|
+
const fields = target.fields.map((field) => ({
|
|
183
|
+
key: field.key,
|
|
184
|
+
required: field.required,
|
|
185
|
+
capability: deriveAt(field.value, context, `${path}.${field.key}`)
|
|
186
|
+
}));
|
|
187
|
+
return { kind: 'product', fields, materializer };
|
|
188
|
+
};
|
|
189
|
+
const deriveArrayObject = (target, context, path) => {
|
|
190
|
+
// The fields an extended interface adds have no dynamic source: a boxed
|
|
191
|
+
// value materialized element by element is a plain array, and reading it
|
|
192
|
+
// as one with fields would hand back defaults for data the value never
|
|
193
|
+
// carried.
|
|
194
|
+
if (target.extension !== null)
|
|
195
|
+
return never("an Array carrying an extended interface's typed fields has no dynamic source for those fields");
|
|
196
|
+
const domain = context.registry.arrayObjectDomain(target.ownership);
|
|
197
|
+
if (!domain)
|
|
198
|
+
return never(`no installed materializable-ordinary-Array domain for ownership "${target.ownership}"`);
|
|
199
|
+
if (!domain.preservesHoles || !domain.preservesIdentity) {
|
|
200
|
+
// The table requires hole/present-undefined preservation and shared Array identity outright; an
|
|
201
|
+
// installed domain that drops either is not the domain the architecture calls for, so it fails closed.
|
|
202
|
+
return never('installed array domain does not preserve hole and shared-identity semantics required for array-object');
|
|
203
|
+
}
|
|
204
|
+
const element = deriveAt(target.element, context, `${path}[]`);
|
|
205
|
+
return { kind: 'collection', element, domain };
|
|
206
|
+
};
|
|
207
|
+
const deriveOptional = (target, context, path) => {
|
|
208
|
+
// `target.absence` names WHICH of the two absent values this optional means --
|
|
209
|
+
// passing it through is what lets a backend answer `Null` for one and
|
|
210
|
+
// `Undefined` for the other rather than being forced to pick one tag for both
|
|
211
|
+
// (see `optionalAbsenceTag`'s own doc: `gea::Optional<T>` records only
|
|
212
|
+
// presence/absence, so a single fixed tag would silently mismatch whichever
|
|
213
|
+
// spelling it did not choose).
|
|
214
|
+
const absenceTag = context.registry.optionalAbsenceTag(target.absence);
|
|
215
|
+
if (absenceTag === null)
|
|
216
|
+
return never("no exact absence tag is installed to distinguish an optional's absent case");
|
|
217
|
+
const payload = deriveAt(target.payload, context, `${path}.payload`);
|
|
218
|
+
return { kind: 'optional', payload, absenceTag };
|
|
219
|
+
};
|
|
220
|
+
const deriveTaggedUnion = (target, context, path) => {
|
|
221
|
+
const seenTags = new Set();
|
|
222
|
+
for (const arm of target.arms) {
|
|
223
|
+
if (seenTags.has(arm.tag))
|
|
224
|
+
return never(`tagged-union arms are not a complete unique-tag census: duplicate tag "${arm.tag}"`);
|
|
225
|
+
seenTags.add(arm.tag);
|
|
226
|
+
}
|
|
227
|
+
// Nominal family tests admit descendants. Consequently `Base | Derived`
|
|
228
|
+
// has no unique dynamic arm for a Derived allocation: both projections are
|
|
229
|
+
// true, and choosing by declaration order would silently change the union's
|
|
230
|
+
// stored identity. Sibling program classes remain disjoint under the
|
|
231
|
+
// single-inheritance class table; only an ancestor relation is overlap.
|
|
232
|
+
for (let left = 0; left < target.arms.length; left++) {
|
|
233
|
+
const leftValue = target.arms[left].value;
|
|
234
|
+
if (leftValue.kind !== 'class-ref')
|
|
235
|
+
continue;
|
|
236
|
+
for (let right = left + 1; right < target.arms.length; right++) {
|
|
237
|
+
const rightValue = target.arms[right].value;
|
|
238
|
+
if (rightValue.kind === 'class-ref' && classRefDomainsOverlap(leftValue, rightValue))
|
|
239
|
+
return never('tagged-union nominal arms overlap through a base/derived class family and have no unique dynamic member');
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
// Collect every arm's classifier before deriving any payload capability, so disjointness is proved
|
|
243
|
+
// from the classifiers' own domains -- never inferred from the order the arms happen to be declared in.
|
|
244
|
+
const classified = [];
|
|
245
|
+
for (const arm of target.arms) {
|
|
246
|
+
const classifier = context.registry.taggedUnionArmClassifier(arm);
|
|
247
|
+
if (!classifier)
|
|
248
|
+
return never(`no installed disjointness-proving classifier for tagged-union arm "${arm.tag}"`);
|
|
249
|
+
classified.push({ tag: arm.tag, classifier, value: arm.value });
|
|
250
|
+
}
|
|
251
|
+
if (classified.some((entry, index) => classified.slice(index + 1).some((other) => classifierDomainsOverlap(entry.classifier, other.classifier)))) {
|
|
252
|
+
return never('tagged-union arm classifiers share a runtime domain and are therefore not pairwise disjoint');
|
|
253
|
+
}
|
|
254
|
+
const arms = classified.map((entry) => ({
|
|
255
|
+
tag: entry.tag,
|
|
256
|
+
classifier: entry.classifier,
|
|
257
|
+
capability: deriveAt(entry.value, context, `${path}#${entry.tag}`)
|
|
258
|
+
}));
|
|
259
|
+
return { kind: 'sum', arms };
|
|
260
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ConversionNode } from './algebra.js';
|
|
2
|
+
/**
|
|
3
|
+
* Validates a whole conversion graph: every node's internal shape via
|
|
4
|
+
* `validateCapability`, plus the one defect a single node can never see on its
|
|
5
|
+
* own -- a `recursive-ref` chain that loops through other nodes forever
|
|
6
|
+
* without ever reaching a materializer.
|
|
7
|
+
*/
|
|
8
|
+
export declare const validateConversionGraph: (nodes: readonly ConversionNode[]) => void;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { validateCapability } from './algebra.js';
|
|
2
|
+
/**
|
|
3
|
+
* Whether a conversion graph's `recursive-ref` sites actually close.
|
|
4
|
+
*
|
|
5
|
+
* `isMaterializable` in algebra.ts treats every `recursive-ref` as trivially
|
|
6
|
+
* materializable, because a single capability in isolation has no other node
|
|
7
|
+
* to consult. That is correct for that question, but it means a set of nodes
|
|
8
|
+
* that only ever refer to each other -- with no node in the cycle ever
|
|
9
|
+
* reaching a real `Atom`, `Identity`, or a `Product`/`Collection`/`Sum` whose
|
|
10
|
+
* every branch bottoms out -- would still read as materializable. This module
|
|
11
|
+
* is the whole-graph check that catches that: it resolves every node's
|
|
12
|
+
* materializability by consulting the nodes its `recursive-ref`s point to, and
|
|
13
|
+
* rejects a reference into a cycle that never reaches a base case.
|
|
14
|
+
*/
|
|
15
|
+
const capabilityReachesMaterializer = (capability, resolved) => {
|
|
16
|
+
switch (capability.kind) {
|
|
17
|
+
case 'never':
|
|
18
|
+
return false;
|
|
19
|
+
case 'identity':
|
|
20
|
+
case 'atom':
|
|
21
|
+
case 'coercion':
|
|
22
|
+
case 'static':
|
|
23
|
+
case 'class-family':
|
|
24
|
+
return true;
|
|
25
|
+
case 'optional':
|
|
26
|
+
return capabilityReachesMaterializer(capability.payload, resolved);
|
|
27
|
+
case 'product':
|
|
28
|
+
return capability.fields.every((field) => capabilityReachesMaterializer(field.capability, resolved));
|
|
29
|
+
case 'collection':
|
|
30
|
+
return capabilityReachesMaterializer(capability.element, resolved);
|
|
31
|
+
case 'sum':
|
|
32
|
+
return capability.arms.length > 0 && capability.arms.every((arm) => capabilityReachesMaterializer(arm.capability, resolved));
|
|
33
|
+
case 'recursive-ref':
|
|
34
|
+
return resolved.get(capability.node) ?? false;
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Least fixed point over "does this node's capability reach a materializer".
|
|
39
|
+
* The relation only ever flips a node from `false` to `true`, so it is
|
|
40
|
+
* monotone and converges in at most `nodes.length` passes.
|
|
41
|
+
*/
|
|
42
|
+
const resolveMaterializability = (nodes) => {
|
|
43
|
+
const resolved = new Map(nodes.map((node) => [node.id, false]));
|
|
44
|
+
let changed = true;
|
|
45
|
+
while (changed) {
|
|
46
|
+
changed = false;
|
|
47
|
+
for (const node of nodes) {
|
|
48
|
+
if (resolved.get(node.id))
|
|
49
|
+
continue;
|
|
50
|
+
if (capabilityReachesMaterializer(node.capability, resolved)) {
|
|
51
|
+
resolved.set(node.id, true);
|
|
52
|
+
changed = true;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return resolved;
|
|
57
|
+
};
|
|
58
|
+
const collectRecursiveRefs = (capability) => {
|
|
59
|
+
switch (capability.kind) {
|
|
60
|
+
case 'never':
|
|
61
|
+
case 'identity':
|
|
62
|
+
case 'atom':
|
|
63
|
+
case 'coercion':
|
|
64
|
+
case 'static':
|
|
65
|
+
case 'class-family':
|
|
66
|
+
return [];
|
|
67
|
+
case 'recursive-ref':
|
|
68
|
+
return [capability.node];
|
|
69
|
+
case 'optional':
|
|
70
|
+
return collectRecursiveRefs(capability.payload);
|
|
71
|
+
case 'product':
|
|
72
|
+
return capability.fields.flatMap((field) => collectRecursiveRefs(field.capability));
|
|
73
|
+
case 'collection':
|
|
74
|
+
return collectRecursiveRefs(capability.element);
|
|
75
|
+
case 'sum':
|
|
76
|
+
return capability.arms.flatMap((arm) => collectRecursiveRefs(arm.capability));
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Validates a whole conversion graph: every node's internal shape via
|
|
81
|
+
* `validateCapability`, plus the one defect a single node can never see on its
|
|
82
|
+
* own -- a `recursive-ref` chain that loops through other nodes forever
|
|
83
|
+
* without ever reaching a materializer.
|
|
84
|
+
*/
|
|
85
|
+
export const validateConversionGraph = (nodes) => {
|
|
86
|
+
const nodeIds = new Set(nodes.map((node) => node.id));
|
|
87
|
+
for (const node of nodes)
|
|
88
|
+
validateCapability(node.capability, nodeIds, node.id);
|
|
89
|
+
const resolved = resolveMaterializability(nodes);
|
|
90
|
+
for (const node of nodes) {
|
|
91
|
+
for (const ref of collectRecursiveRefs(node.capability)) {
|
|
92
|
+
if (!resolved.get(ref)) {
|
|
93
|
+
throw new Error(`conversion node "${node.id}": recursive reference to "${ref}" never reaches a materializer (unclosed cycle)`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ConversionNode } from './algebra.js';
|
|
2
|
+
import { type Representation } from '../representation/model.js';
|
|
3
|
+
/** A selected native adapter ignores only an added receiver. The ordinary
|
|
4
|
+
* frame is unchanged, so callable provenance may enter the original body
|
|
5
|
+
* with those arguments and no receiver, retaining the same Function identity.
|
|
6
|
+
*/
|
|
7
|
+
export declare const nativeReceiverIgnoringCallableAdapterMatches: (source: Representation, target: Representation, node: ConversionNode | null | undefined) => boolean;
|
|
8
|
+
/** A cited identity-preserving native adapter can also discard a fixed
|
|
9
|
+
* trailing argument suffix. Only the source prefix reaches its body; result
|
|
10
|
+
* and prefix carriers stay identical. Receiver adaptation is licensed by the
|
|
11
|
+
* same selected conversion, never inferred from class spellings here.
|
|
12
|
+
*/
|
|
13
|
+
export declare const nativeCallablePrefixAdapterMatches: (source: Representation, target: Representation, node: ConversionNode | null | undefined) => boolean;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { abiOfCallee } from '../projection/callee.js';
|
|
2
|
+
import { abiKey, representationKey } from '../representation/model.js';
|
|
3
|
+
/** A selected native adapter ignores only an added receiver. The ordinary
|
|
4
|
+
* frame is unchanged, so callable provenance may enter the original body
|
|
5
|
+
* with those arguments and no receiver, retaining the same Function identity.
|
|
6
|
+
*/
|
|
7
|
+
export const nativeReceiverIgnoringCallableAdapterMatches = (source, target, node) => {
|
|
8
|
+
if (!node || representationKey(node.source) !== representationKey(source) || representationKey(node.target) !== representationKey(target))
|
|
9
|
+
return false;
|
|
10
|
+
const from = abiOfCallee(source);
|
|
11
|
+
const to = abiOfCallee(target);
|
|
12
|
+
if (!from || !to || from.receiver !== null || to.receiver === null || abiKey({ ...from, receiver: to.receiver }) !== abiKey(to))
|
|
13
|
+
return false;
|
|
14
|
+
const capability = node.capability;
|
|
15
|
+
if (capability.kind !== 'atom' && capability.kind !== 'static')
|
|
16
|
+
return false;
|
|
17
|
+
const materializer = capability.materializer;
|
|
18
|
+
const adapter = materializer.callableAdapter;
|
|
19
|
+
return (materializer.nativeFieldProtocol === 'unused' &&
|
|
20
|
+
materializer.callableIdentityTransport === 'preserved' &&
|
|
21
|
+
adapter !== undefined &&
|
|
22
|
+
abiKey(adapter.from) === abiKey(from) &&
|
|
23
|
+
abiKey(adapter.to) === abiKey(to));
|
|
24
|
+
};
|
|
25
|
+
/** A cited identity-preserving native adapter can also discard a fixed
|
|
26
|
+
* trailing argument suffix. Only the source prefix reaches its body; result
|
|
27
|
+
* and prefix carriers stay identical. Receiver adaptation is licensed by the
|
|
28
|
+
* same selected conversion, never inferred from class spellings here.
|
|
29
|
+
*/
|
|
30
|
+
export const nativeCallablePrefixAdapterMatches = (source, target, node) => {
|
|
31
|
+
if (!node || representationKey(node.source) !== representationKey(source) || representationKey(node.target) !== representationKey(target))
|
|
32
|
+
return false;
|
|
33
|
+
const from = abiOfCallee(source);
|
|
34
|
+
const to = abiOfCallee(target);
|
|
35
|
+
if (!from || !to || from.restFrom !== null || to.restFrom !== null || from.parameters.length > to.parameters.length)
|
|
36
|
+
return false;
|
|
37
|
+
if (from.receiver !== null && to.receiver === null)
|
|
38
|
+
return false;
|
|
39
|
+
if (abiKey({ ...from, receiver: to.receiver, parameters: to.parameters.slice(0, from.parameters.length) }) !==
|
|
40
|
+
abiKey({ ...from, receiver: to.receiver }))
|
|
41
|
+
return false;
|
|
42
|
+
if (representationKey(from.result) !== representationKey(to.result))
|
|
43
|
+
return false;
|
|
44
|
+
const capability = node.capability;
|
|
45
|
+
if (capability.kind !== 'atom' && capability.kind !== 'static')
|
|
46
|
+
return false;
|
|
47
|
+
const materializer = capability.materializer;
|
|
48
|
+
return (materializer.nativeFieldProtocol === 'unused' &&
|
|
49
|
+
materializer.callableIdentityTransport === 'preserved' &&
|
|
50
|
+
materializer.callableAdapter !== undefined &&
|
|
51
|
+
abiKey(materializer.callableAdapter.from) === abiKey(from) &&
|
|
52
|
+
abiKey(materializer.callableAdapter.to) === abiKey(to));
|
|
53
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ConversionNode, MaterializerContract } from './algebra.js';
|
|
2
|
+
import { type Representation } from '../representation/model.js';
|
|
3
|
+
/** Called by materializer producers only after selecting an identity-preserving native operation. */
|
|
4
|
+
export declare const nativeClassReferenceIdentityOf: (source: Representation, target: Representation) => Pick<MaterializerContract, "nativeClassReferenceIdentity">;
|
|
5
|
+
/**
|
|
6
|
+
* A native reference can change its nullable/union envelope without exposing
|
|
7
|
+
* another route to its fields. Structural records and containers are excluded:
|
|
8
|
+
* their conversion can publish nested aliases that a class-slot census has not
|
|
9
|
+
* indexed. The installed conversion must independently certify preservation of
|
|
10
|
+
* reference identity; absence of boxing or allocation alone is not that proof.
|
|
11
|
+
*/
|
|
12
|
+
export declare const nativeClassReferenceTransportMatches: (source: Representation, target: Representation, node: ConversionNode | null | undefined) => boolean;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { representationKey } from '../representation/model.js';
|
|
2
|
+
const referenceEnvelope = (value) => {
|
|
3
|
+
switch (value.kind) {
|
|
4
|
+
case 'class-ref':
|
|
5
|
+
return value.ownership === 'shared-refcount';
|
|
6
|
+
case 'null':
|
|
7
|
+
case 'undefined':
|
|
8
|
+
return true;
|
|
9
|
+
case 'optional':
|
|
10
|
+
return referenceEnvelope(value.payload);
|
|
11
|
+
case 'tagged-union':
|
|
12
|
+
return value.arms.length > 0 && value.arms.every((arm) => referenceEnvelope(arm.value));
|
|
13
|
+
default:
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
/** Called by materializer producers only after selecting an identity-preserving native operation. */
|
|
18
|
+
export const nativeClassReferenceIdentityOf = (source, target) => referenceEnvelope(source) && referenceEnvelope(target) ? { nativeClassReferenceIdentity: 'preserved' } : {};
|
|
19
|
+
/**
|
|
20
|
+
* A native reference can change its nullable/union envelope without exposing
|
|
21
|
+
* another route to its fields. Structural records and containers are excluded:
|
|
22
|
+
* their conversion can publish nested aliases that a class-slot census has not
|
|
23
|
+
* indexed. The installed conversion must independently certify preservation of
|
|
24
|
+
* reference identity; absence of boxing or allocation alone is not that proof.
|
|
25
|
+
*/
|
|
26
|
+
export const nativeClassReferenceTransportMatches = (source, target, node) => {
|
|
27
|
+
if (!node ||
|
|
28
|
+
representationKey(node.source) !== representationKey(source) ||
|
|
29
|
+
representationKey(node.target) !== representationKey(target) ||
|
|
30
|
+
!referenceEnvelope(source) ||
|
|
31
|
+
!referenceEnvelope(target))
|
|
32
|
+
return false;
|
|
33
|
+
const capability = node.capability;
|
|
34
|
+
return (capability.kind === 'identity' ||
|
|
35
|
+
((capability.kind === 'atom' || capability.kind === 'static' || capability.kind === 'class-family') &&
|
|
36
|
+
!capability.materializer.allocates &&
|
|
37
|
+
capability.materializer.nativeFieldProtocol === 'unused' &&
|
|
38
|
+
capability.materializer.nativeClassReferenceIdentity === 'preserved'));
|
|
39
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ConversionNode } from './algebra.js';
|
|
2
|
+
import { type Representation } from '../representation/model.js';
|
|
3
|
+
/** Consume the selected materializer's payload proof. The existence of a
|
|
4
|
+
* different native recipe for this pair cannot certify the installed one.
|
|
5
|
+
*
|
|
6
|
+
* `class-family` joins `atom`/`static` here, not beside them by coincidence:
|
|
7
|
+
* `conversion/build.ts`'s `narrowingCapabilityFor` wraps the IDENTICAL
|
|
8
|
+
* `installed.materializer` a plain narrowing `atom` would get, reaching for
|
|
9
|
+
* `class-family` only because a base handle narrowed to a union of
|
|
10
|
+
* descendants needs the class-table-aware cascade
|
|
11
|
+
* `targets/cpp/emit-narrowing.ts`'s `classFamilyLoadText` renders, not
|
|
12
|
+
* because the runtime proof about the value differs -- `algebra.ts`'s own
|
|
13
|
+
* `transfersNativeStorage` already treats `atom`/`static`/`class-family`
|
|
14
|
+
* identically for exactly this reason. Refusing the capability kind here
|
|
15
|
+
* while accepting it two lines up (for `atom`) meant a class field read back
|
|
16
|
+
* through a narrowing/widening class-family conversion -- a base field typed
|
|
17
|
+
* `Object3D` resolved at one call site to a closed union of its own
|
|
18
|
+
* descendants, or the reverse -- could never be `exact` even when the cited
|
|
19
|
+
* materializer proved the identical non-allocating, field-protocol-free,
|
|
20
|
+
* payload-preserving transfer an `atom` pair proves for the same shape of
|
|
21
|
+
* conversion. The materializer conditions below are UNCHANGED from the
|
|
22
|
+
* `atom`/`static` case; only which `capability.kind` may present one is
|
|
23
|
+
* widened.
|
|
24
|
+
*/
|
|
25
|
+
export declare const nativePayloadTransportMatches: (source: Representation, target: Representation, node: ConversionNode | null | undefined) => boolean;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { representationKey } from '../representation/model.js';
|
|
2
|
+
/** Consume the selected materializer's payload proof. The existence of a
|
|
3
|
+
* different native recipe for this pair cannot certify the installed one.
|
|
4
|
+
*
|
|
5
|
+
* `class-family` joins `atom`/`static` here, not beside them by coincidence:
|
|
6
|
+
* `conversion/build.ts`'s `narrowingCapabilityFor` wraps the IDENTICAL
|
|
7
|
+
* `installed.materializer` a plain narrowing `atom` would get, reaching for
|
|
8
|
+
* `class-family` only because a base handle narrowed to a union of
|
|
9
|
+
* descendants needs the class-table-aware cascade
|
|
10
|
+
* `targets/cpp/emit-narrowing.ts`'s `classFamilyLoadText` renders, not
|
|
11
|
+
* because the runtime proof about the value differs -- `algebra.ts`'s own
|
|
12
|
+
* `transfersNativeStorage` already treats `atom`/`static`/`class-family`
|
|
13
|
+
* identically for exactly this reason. Refusing the capability kind here
|
|
14
|
+
* while accepting it two lines up (for `atom`) meant a class field read back
|
|
15
|
+
* through a narrowing/widening class-family conversion -- a base field typed
|
|
16
|
+
* `Object3D` resolved at one call site to a closed union of its own
|
|
17
|
+
* descendants, or the reverse -- could never be `exact` even when the cited
|
|
18
|
+
* materializer proved the identical non-allocating, field-protocol-free,
|
|
19
|
+
* payload-preserving transfer an `atom` pair proves for the same shape of
|
|
20
|
+
* conversion. The materializer conditions below are UNCHANGED from the
|
|
21
|
+
* `atom`/`static` case; only which `capability.kind` may present one is
|
|
22
|
+
* widened.
|
|
23
|
+
*/
|
|
24
|
+
export const nativePayloadTransportMatches = (source, target, node) => {
|
|
25
|
+
if (!node || representationKey(node.source) !== representationKey(source) || representationKey(node.target) !== representationKey(target))
|
|
26
|
+
return false;
|
|
27
|
+
const capability = node.capability;
|
|
28
|
+
return (capability.kind === 'identity' ||
|
|
29
|
+
((capability.kind === 'atom' || capability.kind === 'static' || capability.kind === 'class-family') &&
|
|
30
|
+
!capability.materializer.allocates &&
|
|
31
|
+
capability.materializer.nativeFieldProtocol === 'unused' &&
|
|
32
|
+
capability.materializer.nativePayloadTransport === 'preserved'));
|
|
33
|
+
};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { Representation } from '../representation/model.js';
|
|
2
|
+
import { type NativeSumPlan } from './native-sum.js';
|
|
3
|
+
export type NativeSelectionStep = {
|
|
4
|
+
readonly kind: 'identity';
|
|
5
|
+
} | {
|
|
6
|
+
readonly kind: 'null';
|
|
7
|
+
} | {
|
|
8
|
+
readonly kind: 'reference-null';
|
|
9
|
+
readonly absent: NativeSelectionStep;
|
|
10
|
+
} | {
|
|
11
|
+
readonly kind: 'transfer';
|
|
12
|
+
readonly plan: NativeSumPlan;
|
|
13
|
+
} | {
|
|
14
|
+
readonly kind: 'class-cast';
|
|
15
|
+
readonly target: Extract<Representation, {
|
|
16
|
+
kind: 'class-ref';
|
|
17
|
+
}>;
|
|
18
|
+
readonly down: boolean;
|
|
19
|
+
} | {
|
|
20
|
+
readonly kind: 'optional';
|
|
21
|
+
readonly absence: 'null' | 'undefined';
|
|
22
|
+
readonly present: NativeSelectionStep | null;
|
|
23
|
+
readonly absent: NativeSelectionStep | null;
|
|
24
|
+
} | {
|
|
25
|
+
readonly kind: 'dispatch';
|
|
26
|
+
readonly arms: readonly (NativeSelectionStep | null)[];
|
|
27
|
+
};
|
|
28
|
+
/** A sealed selection uses only native tags, payload loads and nominal handle casts. */
|
|
29
|
+
export interface NativeSelectionRecipe {
|
|
30
|
+
readonly source: string;
|
|
31
|
+
readonly target: string;
|
|
32
|
+
readonly step: NativeSelectionStep;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Selection is partial in its runtime domain, never partial in its analysis.
|
|
36
|
+
* Every excluded alternative must be proven disjoint. An opaque alternative
|
|
37
|
+
* keeps the general conversion recipe; it cannot be dropped to avoid boxing.
|
|
38
|
+
* Admission still belongs to the caller's existing narrowing authority.
|
|
39
|
+
*/
|
|
40
|
+
export declare const nativeSelectionRecipeOf: (source: Representation, target: Representation) => NativeSelectionRecipe | null;
|
|
41
|
+
/** Widening may not discard an alternative or require a successful downcast. */
|
|
42
|
+
export declare const nativeTotalSelectionRecipeOf: (source: Representation, target: Representation) => NativeSelectionRecipe | null;
|
|
43
|
+
/**
|
|
44
|
+
* The same total step for ONE alternative a caller has already proven live
|
|
45
|
+
* (a merge's live arm, its live absence). Leaves are admitted here too: the
|
|
46
|
+
* `null -> shared Ref` rule and the nominal upcast are total, and neither
|
|
47
|
+
* can discard an alternative. A downcast or a collapsed-null test is not.
|
|
48
|
+
*/
|
|
49
|
+
export declare const nativeTotalSelectionStepOf: (source: Representation, target: Representation) => NativeSelectionStep | null;
|