@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,23 @@
|
|
|
1
|
+
import type { SealedRepresentationPlan } from '../../representation/plan.js';
|
|
2
|
+
import type { Representation } from '../../representation/model.js';
|
|
3
|
+
import type { TargetRuntimeManifest } from '../../preflight/obligations.js';
|
|
4
|
+
import type { CppRuntimeCapabilities } from './manifest/capabilities.js';
|
|
5
|
+
import type { HostMemberTable } from './host/host-members.js';
|
|
6
|
+
/**
|
|
7
|
+
* What the C++ backend can actually do, stated as a manifest preflight censuses
|
|
8
|
+
* against.
|
|
9
|
+
*
|
|
10
|
+
* The manifest is computed, not declared. A hand-written list of capabilities
|
|
11
|
+
* drifts from the emitter the moment either changes, and a manifest that claims
|
|
12
|
+
* more than the emitter implements turns a preflight pass into a crash during
|
|
13
|
+
* rendering -- which is precisely the failure preflight exists to prevent.
|
|
14
|
+
*
|
|
15
|
+
* So the physical-type rows are derived by asking the one authoritative type
|
|
16
|
+
* mapping whether it can spell each carrier the plan actually selected. Every
|
|
17
|
+
* other row reports what the emitter has been written to render, and the sets
|
|
18
|
+
* are small on purpose: reporting empty where nothing is built is the honest
|
|
19
|
+
* answer, and it makes each gap measurable instead of invisible.
|
|
20
|
+
*/
|
|
21
|
+
export type { CppRuntimeCapabilities } from './manifest/capabilities.js';
|
|
22
|
+
export { currentCppRuntimeCapabilities } from './manifest/capabilities.js';
|
|
23
|
+
export declare const createCppTargetManifest: (plan: SealedRepresentationPlan, capabilities?: CppRuntimeCapabilities, typeofOperandRepresentations?: Iterable<Representation>, hostMembers?: HostMemberTable, objectTagOperands?: Iterable<Representation>, hostInstanceTests?: ReadonlyMap<string, string>) => TargetRuntimeManifest;
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { objectTagExpression, objectTagCapability } from './emit-object-tag.js';
|
|
2
|
+
import { representationKey } from '../../representation/model.js';
|
|
3
|
+
import { cppTypeOf } from './types.js';
|
|
4
|
+
import { presenceIsAnswerable } from './emit-presence.js';
|
|
5
|
+
import { typeofIsAnswerable } from './emit-typeof.js';
|
|
6
|
+
import { currentCppRuntimeCapabilities } from './manifest/capabilities.js';
|
|
7
|
+
import { coreHostMembers } from './host/host-members.js';
|
|
8
|
+
import { cppNativeProtocolsOf } from './host/native-protocols.js';
|
|
9
|
+
import { cppInstanceofLeftKinds } from './emit-instanceof.js';
|
|
10
|
+
export { currentCppRuntimeCapabilities } from './manifest/capabilities.js';
|
|
11
|
+
/** Whether the one authoritative type mapping can spell this carrier. */
|
|
12
|
+
const isSpellable = (representation) => {
|
|
13
|
+
// `void` is spellable even though it has no storage: a result that occupies
|
|
14
|
+
// nothing still lowers, as an absent slot or a `void` return.
|
|
15
|
+
if (representation.kind === 'void')
|
|
16
|
+
return true;
|
|
17
|
+
try {
|
|
18
|
+
cppTypeOf(representation);
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
// The mapping throws for exactly the carriers it cannot spell. Treating the
|
|
23
|
+
// throw as the answer keeps one authority instead of a second predicate
|
|
24
|
+
// that could disagree with it.
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
export const createCppTargetManifest = (plan, capabilities = currentCppRuntimeCapabilities, typeofOperandRepresentations = [],
|
|
29
|
+
// The host member table this compilation's native-boundary claims are
|
|
30
|
+
// derived from -- defaulted to the core, plugin-independent table so every
|
|
31
|
+
// existing caller (tests included) keeps computing the same answer
|
|
32
|
+
// `capabilities.nativeProtocols` already states, without having to learn
|
|
33
|
+
// about this parameter. `compiler.ts`'s own call passes `coreHostMembers`
|
|
34
|
+
// explicitly, from the one place in that file it is already imported,
|
|
35
|
+
// which is what lets this manifest's claim stay tied to the same table the
|
|
36
|
+
// emitter renders from rather than to a frozen capabilities snapshot taken
|
|
37
|
+
// before any host tables for THIS compilation existed.
|
|
38
|
+
hostMembers = coreHostMembers, objectTagOperands = [],
|
|
39
|
+
// The installed hosts' own `[[HasInstance]]` predicates, keyed by the native
|
|
40
|
+
// type the right-hand operand of `instanceof` carries -- see
|
|
41
|
+
// `PluginCapabilities.hostInstanceTests`. A row here is a claim for EVERY
|
|
42
|
+
// left carrier kind, which is what that capability's contract states the
|
|
43
|
+
// spelling must accept; `emit-instanceof.ts`'s `hostInstanceTestText`
|
|
44
|
+
// unwraps an optional or a union first and calls the predicate on each leaf.
|
|
45
|
+
hostInstanceTests = new Map()) => {
|
|
46
|
+
const spellable = new Set();
|
|
47
|
+
for (const representation of plan.selected.values()) {
|
|
48
|
+
if (isSpellable(representation))
|
|
49
|
+
spellable.add(representationKey(representation));
|
|
50
|
+
}
|
|
51
|
+
// `typeof` is answerable over a complete carrier, not its outer kind. An
|
|
52
|
+
// optional and a tagged union recurse into their payloads and arms, so two
|
|
53
|
+
// values with the same outer kind may have different answers. Keying the
|
|
54
|
+
// claim by kind made one unsupported union withdraw the capability for every
|
|
55
|
+
// other union in the program, including unions this emitter could render.
|
|
56
|
+
// The representation key is the same complete carrier the emitter receives;
|
|
57
|
+
// an unsupported shape remains absent without vetoing an unrelated one.
|
|
58
|
+
const typeofRepresentations = new Set();
|
|
59
|
+
// This is deliberately NOT every selected carrier: a target capability
|
|
60
|
+
// claim is evidence that this particular compilation has an emitted
|
|
61
|
+
// `typeof` over that carrier. Results, constants, and null all arrive here
|
|
62
|
+
// through the same operand resolver in `runtime-helper-key.ts`, so the
|
|
63
|
+
// manifest and obligation census have exactly one set to compare.
|
|
64
|
+
for (const representation of typeofOperandRepresentations) {
|
|
65
|
+
if (typeofIsAnswerable(representation))
|
|
66
|
+
typeofRepresentations.add(representationKey(representation));
|
|
67
|
+
}
|
|
68
|
+
const runtimeHelpers = new Set(capabilities.runtimeHelpers);
|
|
69
|
+
for (const key of typeofRepresentations)
|
|
70
|
+
runtimeHelpers.add(`computation:typeof:${key}`);
|
|
71
|
+
// Tag lookup support is keyed by the complete carrier, including constants
|
|
72
|
+
// that publish no result in the selected representation plan.
|
|
73
|
+
for (const representation of objectTagOperands) {
|
|
74
|
+
if (objectTagExpression(representation, 'value') !== null)
|
|
75
|
+
runtimeHelpers.add(objectTagCapability(representation));
|
|
76
|
+
}
|
|
77
|
+
// The nullish test is likewise derived from the actual carrier contents.
|
|
78
|
+
const presenceKinds = new Map();
|
|
79
|
+
for (const representation of plan.selected.values()) {
|
|
80
|
+
const answerable = presenceIsAnswerable(representation);
|
|
81
|
+
presenceKinds.set(representation.kind, (presenceKinds.get(representation.kind) ?? true) && answerable);
|
|
82
|
+
}
|
|
83
|
+
for (const [kind, answerable] of presenceKinds)
|
|
84
|
+
if (answerable)
|
|
85
|
+
runtimeHelpers.add(`conversion:is-present:${kind}`);
|
|
86
|
+
for (const native of hostInstanceTests.keys()) {
|
|
87
|
+
for (const left of cppInstanceofLeftKinds)
|
|
88
|
+
runtimeHelpers.add(`computation:instanceof:${left}:native-record-ref(${native})`);
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
hasGenericCallPath: capabilities.hasGenericCallPath,
|
|
92
|
+
hasDynamicCallPath: capabilities.hasDynamicCallPath,
|
|
93
|
+
// No devirtualization fast path is registered: without one, preflight takes
|
|
94
|
+
// the mandatory generic path, which is a slower answer and not a wrong one.
|
|
95
|
+
functionAbis: new Set(),
|
|
96
|
+
implicitConstructorAbis: new Set(),
|
|
97
|
+
propertyRecipes: capabilities.propertyRecipes,
|
|
98
|
+
captureOwnershipSupport: capabilities.captureOwnershipSupport,
|
|
99
|
+
nativeProtocols: cppNativeProtocolsOf(hostMembers),
|
|
100
|
+
hostMembers: new Set(hostMembers.keys()),
|
|
101
|
+
dynamicArgumentHostParameters: capabilities.dynamicArgumentHostParameters,
|
|
102
|
+
runtimeHelpers,
|
|
103
|
+
unsupportedRuntimeHelpers: capabilities.unsupportedRuntimeHelpers,
|
|
104
|
+
physicalTypes: spellable,
|
|
105
|
+
spellable: isSpellable,
|
|
106
|
+
// A carrier this backend can spell is one it can verify and emit: all three
|
|
107
|
+
// come from the same mapping, so publishing different sets would claim a
|
|
108
|
+
// distinction that does not exist.
|
|
109
|
+
verifierRecipes: spellable,
|
|
110
|
+
emitterRecipes: spellable,
|
|
111
|
+
abruptEdgeHandlers: capabilities.abruptEdgeHandlers
|
|
112
|
+
};
|
|
113
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { Representation } from '../../representation/model.js';
|
|
2
|
+
import type { RepresentationDeriver } from '../../representation/derive.js';
|
|
3
|
+
/** One argument reaching the native `Error` base, already rendered as C++. */
|
|
4
|
+
export interface NativeErrorBaseArgument {
|
|
5
|
+
readonly representation: Representation;
|
|
6
|
+
readonly text: string;
|
|
7
|
+
}
|
|
8
|
+
/** Why a native-`Error` base could not be initialized, in the two shapes the two call sites need. */
|
|
9
|
+
export type NativeErrorBaseRefusal = {
|
|
10
|
+
readonly refusal: 'conversion';
|
|
11
|
+
readonly conversion: string;
|
|
12
|
+
readonly reason: string;
|
|
13
|
+
} | {
|
|
14
|
+
readonly refusal: 'super-initialize';
|
|
15
|
+
readonly reason: string;
|
|
16
|
+
};
|
|
17
|
+
export declare const isNativeErrorBaseRefusal: (value: readonly string[] | NativeErrorBaseRefusal) => value is NativeErrorBaseRefusal;
|
|
18
|
+
/**
|
|
19
|
+
* `super(message, options)` against the intrinsic `Error` layout, as statements
|
|
20
|
+
* run on a receiver that already exists.
|
|
21
|
+
*
|
|
22
|
+
* This is shared by the two ways a program reaches it, because they are the
|
|
23
|
+
* same language step and must not drift: a written `constructor` reaches it
|
|
24
|
+
* through the `super(...)` operation, and a derived class that writes *no*
|
|
25
|
+
* constructor reaches it through the implicit `constructor(...args) {
|
|
26
|
+
* super(...args) }`, which the construct wrapper renders directly. A second
|
|
27
|
+
* copy of this for the implicit case would be a second answer to "what does
|
|
28
|
+
* ECMA-262 20.5.1.1 do", and the two would disagree the first time either
|
|
29
|
+
* grew a case.
|
|
30
|
+
*
|
|
31
|
+
* The receiver is `static_cast` to the native base rather than reached through
|
|
32
|
+
* a field: the class layout gives a derived class the base's layout as its own
|
|
33
|
+
* prefix (`records.ts`'s native-base linking), so the base subobject IS the
|
|
34
|
+
* receiver's front, and `initialize` writes it in place. Constructing a second
|
|
35
|
+
* `gea::runtime::Error` and copying it would give the throw site a different
|
|
36
|
+
* object than the one `instanceof` sees.
|
|
37
|
+
*/
|
|
38
|
+
export declare const nativeErrorBaseInitializeStatements: (deriver: RepresentationDeriver, receiverName: string, args: readonly (NativeErrorBaseArgument | undefined)[]) => readonly string[] | NativeErrorBaseRefusal;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { representationKey } from '../../representation/model.js';
|
|
2
|
+
import { recordFieldsOfShape } from '../../projection/fields.js';
|
|
3
|
+
import { cppRecordFieldName, cppRecordFieldPresenceName } from './types.js';
|
|
4
|
+
import { cppErrorNativeType } from './error-types.js';
|
|
5
|
+
const isRefusal = (value) => !Array.isArray(value);
|
|
6
|
+
export const isNativeErrorBaseRefusal = isRefusal;
|
|
7
|
+
/**
|
|
8
|
+
* `super(message, options)` against the intrinsic `Error` layout, as statements
|
|
9
|
+
* run on a receiver that already exists.
|
|
10
|
+
*
|
|
11
|
+
* This is shared by the two ways a program reaches it, because they are the
|
|
12
|
+
* same language step and must not drift: a written `constructor` reaches it
|
|
13
|
+
* through the `super(...)` operation, and a derived class that writes *no*
|
|
14
|
+
* constructor reaches it through the implicit `constructor(...args) {
|
|
15
|
+
* super(...args) }`, which the construct wrapper renders directly. A second
|
|
16
|
+
* copy of this for the implicit case would be a second answer to "what does
|
|
17
|
+
* ECMA-262 20.5.1.1 do", and the two would disagree the first time either
|
|
18
|
+
* grew a case.
|
|
19
|
+
*
|
|
20
|
+
* The receiver is `static_cast` to the native base rather than reached through
|
|
21
|
+
* a field: the class layout gives a derived class the base's layout as its own
|
|
22
|
+
* prefix (`records.ts`'s native-base linking), so the base subobject IS the
|
|
23
|
+
* receiver's front, and `initialize` writes it in place. Constructing a second
|
|
24
|
+
* `gea::runtime::Error` and copying it would give the throw site a different
|
|
25
|
+
* object than the one `instanceof` sees.
|
|
26
|
+
*/
|
|
27
|
+
export const nativeErrorBaseInitializeStatements = (deriver, receiverName, args) => {
|
|
28
|
+
const lines = [];
|
|
29
|
+
const message = args[0];
|
|
30
|
+
let messageText = 'std::string()';
|
|
31
|
+
if (message) {
|
|
32
|
+
if (message.representation.kind === 'string')
|
|
33
|
+
messageText = message.text;
|
|
34
|
+
else if (message.representation.kind === 'optional' && message.representation.payload.kind === 'string') {
|
|
35
|
+
messageText = `(${message.text}.has_value() ? *${message.text} : std::string())`;
|
|
36
|
+
}
|
|
37
|
+
else if (message.representation.kind !== 'undefined') {
|
|
38
|
+
return {
|
|
39
|
+
refusal: 'conversion',
|
|
40
|
+
conversion: `${representationKey(message.representation)}->string`,
|
|
41
|
+
reason: `intrinsic Error message carries "${representationKey(message.representation)}", not string or optional string`
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
const base = `static_cast<${cppErrorNativeType}&>(*${receiverName})`;
|
|
46
|
+
lines.push(`${base}.initialize(${messageText});`);
|
|
47
|
+
const options = args[1];
|
|
48
|
+
if (options && options.representation.kind !== 'undefined') {
|
|
49
|
+
const optionsText = options.text;
|
|
50
|
+
const outerGuard = options.representation.kind === 'optional' ? `${optionsText}.has_value()` : null;
|
|
51
|
+
const payload = options.representation.kind === 'optional' ? options.representation.payload : options.representation;
|
|
52
|
+
const payloadText = options.representation.kind === 'optional' ? `(*${optionsText})` : optionsText;
|
|
53
|
+
if (payload.kind !== 'record' && payload.kind !== 'record-with-index' && payload.kind !== 'native-record-ref') {
|
|
54
|
+
return {
|
|
55
|
+
refusal: 'conversion',
|
|
56
|
+
conversion: `${representationKey(options.representation)}->record`,
|
|
57
|
+
reason: `intrinsic Error options carry "${representationKey(options.representation)}", not a static options record`
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
const fields = payload.kind === 'record' || payload.kind === 'record-with-index' ? payload.fields : recordFieldsOfShape(deriver, payload.shapeId);
|
|
61
|
+
const cause = fields?.find((field) => field.key === 'cause');
|
|
62
|
+
if (!cause || cause.value.kind !== 'dynamic') {
|
|
63
|
+
return {
|
|
64
|
+
refusal: 'super-initialize',
|
|
65
|
+
reason: `intrinsic Error options carry "${representationKey(options.representation)}" without a dynamic cause field`
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
const access = payload.ownership === 'shared-refcount' ? '->' : '.';
|
|
69
|
+
const causeText = `${payloadText}${access}${cppRecordFieldName('cause')}`;
|
|
70
|
+
const guards = [outerGuard, cause.required ? null : `${payloadText}${access}${cppRecordFieldPresenceName('cause')}`].filter((guard) => guard !== null);
|
|
71
|
+
lines.push(`${guards.length > 0 ? `if (${guards.join(' && ')}) ` : ''}${base}.setCause(${causeText});`);
|
|
72
|
+
}
|
|
73
|
+
return lines;
|
|
74
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ConversionRuntimeRegistry } from '../../conversion/registry.js';
|
|
2
|
+
import { type Representation } from '../../representation/model.js';
|
|
3
|
+
/**
|
|
4
|
+
* Whether the census's own answer for one pair, asked in its order as
|
|
5
|
+
* `leafTransports` asks, states that the text the conversion chain spells for
|
|
6
|
+
* that pair (`convertedValueText`) reads no dynamic field protocol. Only a
|
|
7
|
+
* node the chain renders qualifies (`emit-narrowing.ts`'s `recipeText`): a
|
|
8
|
+
* class-family cascade or a sealed native selection is spelled by its own
|
|
9
|
+
* renderer, so its contract says nothing about the chain's text for the pair.
|
|
10
|
+
*/
|
|
11
|
+
export declare const chainFieldProtocolUnused: (registry: ConversionRuntimeRegistry, source: Representation, target: Representation) => boolean;
|
|
12
|
+
export declare const nativeSumNarrowingTransports: (registry: ConversionRuntimeRegistry, source: Representation, target: Representation) => boolean;
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { narrowsToDescendantClassUnion } from '../../conversion/build.js';
|
|
2
|
+
import { representationKey } from '../../representation/model.js';
|
|
3
|
+
import { conversionRecipeOf } from './emit-narrowing.js';
|
|
4
|
+
/**
|
|
5
|
+
* The native contract of a narrowing out of a SUM, composed from the contracts
|
|
6
|
+
* this registry already states for its leaf pairs.
|
|
7
|
+
*
|
|
8
|
+
* `emit-narrowing.ts` renders a sum narrowing structurally: tag tests,
|
|
9
|
+
* `get<I>` loads, `*` presence loads, `ofArm<I>` injections and optional
|
|
10
|
+
* wraps, around one leaf conversion per candidate alternative
|
|
11
|
+
* (`taggedUnionArmText`, `nestedArmLoadText`, `narrowedUnionSubsetText`,
|
|
12
|
+
* `recastedUnionText`). None of that structure reads a field or rebuilds a
|
|
13
|
+
* payload. So the whole narrowing transfers native payloads exactly when every
|
|
14
|
+
* leaf conversion the renderer can emit does.
|
|
15
|
+
*
|
|
16
|
+
* The renderer only ever converts a source LEAF into the target or one of the
|
|
17
|
+
* target's own nested alternatives, and it emits a leaf candidate only when
|
|
18
|
+
* the conversion chain spells that pair. This asks the chain for every such
|
|
19
|
+
* pair -- a superset of the pairs any render uses -- and requires the
|
|
20
|
+
* registry's own answer for each one to be a certified native transfer
|
|
21
|
+
* (`nativePayloadTransportMatches`' statement: non-allocating, field protocol
|
|
22
|
+
* unused, payload preserved). A leaf pair the chain cannot spell is never a
|
|
23
|
+
* candidate: the discriminant selects among the remaining alternatives, which
|
|
24
|
+
* is the narrowing authority's own proof. Callable and dynamic alternatives
|
|
25
|
+
* are refused outright: their sets and adapters convert as a whole rather than
|
|
26
|
+
* leaf by leaf.
|
|
27
|
+
*/
|
|
28
|
+
const opaqueKinds = new Set([
|
|
29
|
+
'dynamic',
|
|
30
|
+
'function',
|
|
31
|
+
'function-family',
|
|
32
|
+
'function-value-family',
|
|
33
|
+
'function-value-dispatch',
|
|
34
|
+
'function-and-constructor',
|
|
35
|
+
'generic-function-set',
|
|
36
|
+
'callable-identity',
|
|
37
|
+
'constructor-value-dispatch',
|
|
38
|
+
'borrowed-ref',
|
|
39
|
+
'proxy-object',
|
|
40
|
+
'unresolved',
|
|
41
|
+
'void'
|
|
42
|
+
]);
|
|
43
|
+
const isSum = (value) => value.kind === 'optional' || value.kind === 'tagged-union';
|
|
44
|
+
const alternativesOf = (value) => value.kind === 'optional'
|
|
45
|
+
? [value.payload, { kind: value.absence }]
|
|
46
|
+
: value.kind === 'tagged-union'
|
|
47
|
+
? value.arms.map((arm) => arm.value)
|
|
48
|
+
: [];
|
|
49
|
+
/** Leaves and (with `sums`) the nested sums themselves, deduplicated by carrier key; representations may be cyclic. */
|
|
50
|
+
const collect = (root, sums) => {
|
|
51
|
+
const seen = new Map();
|
|
52
|
+
const pending = [root];
|
|
53
|
+
while (pending.length > 0) {
|
|
54
|
+
const next = pending.pop();
|
|
55
|
+
const key = representationKey(next);
|
|
56
|
+
if (seen.has(key))
|
|
57
|
+
continue;
|
|
58
|
+
const sum = isSum(next);
|
|
59
|
+
seen.set(key, next);
|
|
60
|
+
if (sum)
|
|
61
|
+
pending.push(...alternativesOf(next));
|
|
62
|
+
}
|
|
63
|
+
return [...seen.values()].filter((value) => sums || !isSum(value));
|
|
64
|
+
};
|
|
65
|
+
const statesNativeTransport = (materializer) => materializer !== null &&
|
|
66
|
+
materializer !== undefined &&
|
|
67
|
+
!materializer.allocates &&
|
|
68
|
+
materializer.nativeFieldProtocol === 'unused' &&
|
|
69
|
+
materializer.nativePayloadTransport === 'preserved';
|
|
70
|
+
const chainSpells = new WeakMap();
|
|
71
|
+
const chainSpellsPair = (source, target) => {
|
|
72
|
+
let targets = chainSpells.get(source);
|
|
73
|
+
if (!targets)
|
|
74
|
+
chainSpells.set(source, (targets = new Map()));
|
|
75
|
+
const key = representationKey(target);
|
|
76
|
+
const known = targets.get(key);
|
|
77
|
+
if (known !== undefined)
|
|
78
|
+
return known;
|
|
79
|
+
const spelled = conversionRecipeOf(source, target)?.renders ?? false;
|
|
80
|
+
targets.set(key, spelled);
|
|
81
|
+
return spelled;
|
|
82
|
+
};
|
|
83
|
+
const verdictsByRegistry = new WeakMap();
|
|
84
|
+
const verdictsOf = (registry) => {
|
|
85
|
+
let verdicts = verdictsByRegistry.get(registry);
|
|
86
|
+
if (!verdicts)
|
|
87
|
+
verdictsByRegistry.set(registry, (verdicts = { leaf: new Map(), sum: new Map() }));
|
|
88
|
+
return verdicts;
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* The registry's answer for one leaf pair, asked in the census's own order
|
|
92
|
+
* (`conversion/nodes.ts`'s `capabilityOf`). A leaf source never reaches the
|
|
93
|
+
* sum composite below, so this cannot recurse into it. A descendant-union
|
|
94
|
+
* narrowing is a `class-family` capability, which payload consumers exclude,
|
|
95
|
+
* so it is refused here as well.
|
|
96
|
+
*/
|
|
97
|
+
const leafTransports = (registry, source, target) => {
|
|
98
|
+
const sourceKey = representationKey(source);
|
|
99
|
+
const targetKey = representationKey(target);
|
|
100
|
+
if (sourceKey === targetKey)
|
|
101
|
+
return true;
|
|
102
|
+
const verdicts = verdictsOf(registry).leaf;
|
|
103
|
+
const pair = `${sourceKey}->${targetKey}`;
|
|
104
|
+
const known = verdicts.get(pair);
|
|
105
|
+
if (known !== undefined)
|
|
106
|
+
return known;
|
|
107
|
+
let native;
|
|
108
|
+
if (narrowsToDescendantClassUnion(source, target))
|
|
109
|
+
native = false;
|
|
110
|
+
else {
|
|
111
|
+
const installed = registry.narrowing(source, target) ?? registry.widening(source, target) ?? registry.recasting(source, target);
|
|
112
|
+
native = statesNativeTransport(installed ? installed.materializer : registry.staticRecipe(source, target));
|
|
113
|
+
}
|
|
114
|
+
verdicts.set(pair, native);
|
|
115
|
+
return native;
|
|
116
|
+
};
|
|
117
|
+
/**
|
|
118
|
+
* Whether the census's own answer for one pair, asked in its order as
|
|
119
|
+
* `leafTransports` asks, states that the text the conversion chain spells for
|
|
120
|
+
* that pair (`convertedValueText`) reads no dynamic field protocol. Only a
|
|
121
|
+
* node the chain renders qualifies (`emit-narrowing.ts`'s `recipeText`): a
|
|
122
|
+
* class-family cascade or a sealed native selection is spelled by its own
|
|
123
|
+
* renderer, so its contract says nothing about the chain's text for the pair.
|
|
124
|
+
*/
|
|
125
|
+
export const chainFieldProtocolUnused = (registry, source, target) => {
|
|
126
|
+
if (representationKey(source) === representationKey(target))
|
|
127
|
+
return true;
|
|
128
|
+
if (narrowsToDescendantClassUnion(source, target))
|
|
129
|
+
return false;
|
|
130
|
+
const installed = registry.narrowing(source, target) ?? registry.widening(source, target) ?? registry.recasting(source, target);
|
|
131
|
+
const materializer = installed ? installed.materializer : registry.staticRecipe(source, target);
|
|
132
|
+
return (materializer !== null &&
|
|
133
|
+
materializer !== undefined &&
|
|
134
|
+
materializer.nativeSelection === undefined &&
|
|
135
|
+
materializer.nativeFieldProtocol === 'unused');
|
|
136
|
+
};
|
|
137
|
+
export const nativeSumNarrowingTransports = (registry, source, target) => {
|
|
138
|
+
if (!isSum(source))
|
|
139
|
+
return false;
|
|
140
|
+
const verdicts = verdictsOf(registry).sum;
|
|
141
|
+
const pair = `${representationKey(source)}->${representationKey(target)}`;
|
|
142
|
+
const known = verdicts.get(pair);
|
|
143
|
+
if (known !== undefined)
|
|
144
|
+
return known;
|
|
145
|
+
const leaves = collect(source, false);
|
|
146
|
+
const parts = collect(target, true);
|
|
147
|
+
const native = ![...leaves, ...parts].some((value) => opaqueKinds.has(value.kind)) &&
|
|
148
|
+
leaves.every((leaf) => parts.every((part) => representationKey(leaf) === representationKey(part) || !chainSpellsPair(leaf, part) || leafTransports(registry, leaf, part)));
|
|
149
|
+
verdicts.set(pair, native);
|
|
150
|
+
return native;
|
|
151
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type IrBody } from '../../ir/model.js';
|
|
2
|
+
import type { ConversionCensus } from '../../conversion/nodes.js';
|
|
3
|
+
import type { ConversionNode, ConversionNodeId } from '../../conversion/algebra.js';
|
|
4
|
+
export interface NativeSelectionHelper {
|
|
5
|
+
readonly name: string;
|
|
6
|
+
readonly declaration: string;
|
|
7
|
+
readonly definition: string;
|
|
8
|
+
}
|
|
9
|
+
/** Count certified IR uses before rendering; helper selection never changes conversion authority. */
|
|
10
|
+
export declare const nativeSelectionHelpersForUses: (nodes: Iterable<ConversionNode>) => ReadonlyMap<ConversionNodeId, NativeSelectionHelper>;
|
|
11
|
+
export declare const nativeSelectionHelpers: (bodies: readonly IrBody[], census: ConversionCensus) => ReadonlyMap<ConversionNodeId, NativeSelectionHelper>;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { allOperationsOf } from '../../ir/model.js';
|
|
3
|
+
import { nativeSelectionBody } from './emit-native-selection.js';
|
|
4
|
+
import { cppTypeOf } from './types.js';
|
|
5
|
+
/** Count certified IR uses before rendering; helper selection never changes conversion authority. */
|
|
6
|
+
export const nativeSelectionHelpersForUses = (nodes) => {
|
|
7
|
+
const uses = new Map();
|
|
8
|
+
for (const node of nodes) {
|
|
9
|
+
const existing = uses.get(node.id);
|
|
10
|
+
if (existing)
|
|
11
|
+
existing.count++;
|
|
12
|
+
else
|
|
13
|
+
uses.set(node.id, { node, count: 1 });
|
|
14
|
+
}
|
|
15
|
+
const result = new Map();
|
|
16
|
+
for (const { node, count } of uses.values()) {
|
|
17
|
+
if (count < 2 || (node.capability.kind !== 'atom' && node.capability.kind !== 'static'))
|
|
18
|
+
continue;
|
|
19
|
+
const recipe = node.capability.materializer.nativeSelection;
|
|
20
|
+
if (!recipe)
|
|
21
|
+
continue;
|
|
22
|
+
const body = nativeSelectionBody(recipe, node.source, node.target);
|
|
23
|
+
if (body === null || body.length < 1024)
|
|
24
|
+
continue;
|
|
25
|
+
const name = `gea_native_selection_${createHash('sha256').update(node.id).digest('hex')}`;
|
|
26
|
+
const signature = `${cppTypeOf(node.target)} ${name}(const ${cppTypeOf(node.source)}& gea_selection)`;
|
|
27
|
+
result.set(node.id, { name, declaration: `${signature};`, definition: `${signature} { ${body} }` });
|
|
28
|
+
}
|
|
29
|
+
return result;
|
|
30
|
+
};
|
|
31
|
+
export const nativeSelectionHelpers = (bodies, census) => {
|
|
32
|
+
function* nodes() {
|
|
33
|
+
for (const body of bodies) {
|
|
34
|
+
for (const block of body.blocks.values()) {
|
|
35
|
+
for (const operation of allOperationsOf(block)) {
|
|
36
|
+
if (operation.kind !== 'convert')
|
|
37
|
+
continue;
|
|
38
|
+
const node = census.nodeById(operation.conversionUse);
|
|
39
|
+
if (node)
|
|
40
|
+
yield node;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return nativeSelectionHelpersForUses(nodes());
|
|
46
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Representation } from '../../representation/model.js';
|
|
2
|
+
import { type EmitContext } from './emit-context.js';
|
|
3
|
+
/** A fixed symbol key needs a known runtime identity to participate in own-key
|
|
4
|
+
* enumeration. Typed symbol indexes already retain their actual evaluated keys.
|
|
5
|
+
* This checks the same sealed layouts used to emit the protocol, including base
|
|
6
|
+
* storage, so unsupported class/accessor keys cannot disappear from ownKeys.
|
|
7
|
+
*/
|
|
8
|
+
export declare const unaddressableNativeSymbolKeyOf: (ctx: EmitContext, representation: Representation) => string | null;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { wellKnownSymbolMemberOfKey } from './emit-context.js';
|
|
2
|
+
import { cppRecordFieldKeyIsSymbol } from './types.js';
|
|
3
|
+
/** A fixed symbol key needs a known runtime identity to participate in own-key
|
|
4
|
+
* enumeration. Typed symbol indexes already retain their actual evaluated keys.
|
|
5
|
+
* This checks the same sealed layouts used to emit the protocol, including base
|
|
6
|
+
* storage, so unsupported class/accessor keys cannot disappear from ownKeys.
|
|
7
|
+
*/
|
|
8
|
+
export const unaddressableNativeSymbolKeyOf = (ctx, representation) => {
|
|
9
|
+
const unsupported = (keys) => keys.find((entry) => cppRecordFieldKeyIsSymbol(entry.key) && wellKnownSymbolMemberOfKey(ctx.wellKnownSymbols, entry.key) === null)
|
|
10
|
+
?.key ?? null;
|
|
11
|
+
const shape = (id) => unsupported(ctx.layouts.forShape(id) ?? []) ?? unsupported(ctx.layouts.accessorsForShape?.(id) ?? []);
|
|
12
|
+
const visited = new Set();
|
|
13
|
+
const classKey = (declaration) => {
|
|
14
|
+
if (visited.has(declaration))
|
|
15
|
+
return null;
|
|
16
|
+
visited.add(declaration);
|
|
17
|
+
const layout = ctx.classes.get(declaration);
|
|
18
|
+
if (!layout)
|
|
19
|
+
return null;
|
|
20
|
+
return ((layout.instance?.kind === 'class-ref' ? shape(layout.instance.shapeId) : null) ??
|
|
21
|
+
unsupported(layout.accessors) ??
|
|
22
|
+
(layout.base ? classKey(layout.base) : null) ??
|
|
23
|
+
(layout.nativeBase ? shape(layout.nativeBase.instance.shapeId) : null));
|
|
24
|
+
};
|
|
25
|
+
if (representation.kind === 'class-ref')
|
|
26
|
+
return classKey(representation.declaration);
|
|
27
|
+
if (representation.kind === 'record')
|
|
28
|
+
return unsupported(representation.fields) ?? unsupported(representation.accessors);
|
|
29
|
+
if (representation.kind === 'record-with-index')
|
|
30
|
+
return unsupported(representation.fields);
|
|
31
|
+
if (representation.kind === 'native-record-ref' && representation.native === null)
|
|
32
|
+
return shape(representation.shapeId);
|
|
33
|
+
return null;
|
|
34
|
+
};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { FunctionId, RegionId } from '../../identity/ids.js';
|
|
2
|
+
/**
|
|
3
|
+
* The sealed `ExecutableBodyOwnershipReport` (architecture.md, "Definition of
|
|
4
|
+
* done"). Every source executable region must be recorded exactly once before
|
|
5
|
+
* any class header or module body renders: a legacy class method, accessor,
|
|
6
|
+
* constructor, static-field initializer, or static block acquires its exact
|
|
7
|
+
* lease before it emits source AST as C++, and a typed-IR member forwarder or
|
|
8
|
+
* elided/structural region never competes for the same lease. This module is
|
|
9
|
+
* the only place that lease bookkeeping happens.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* A source executable region eligible to emit: a callable member keyed by its
|
|
13
|
+
* checker-stable `FunctionId`, or a class static-lifecycle region keyed by its
|
|
14
|
+
* censused `RegionId`. There is no third owner kind -- widening this union is
|
|
15
|
+
* how a region could be recorded that admits no exact identity.
|
|
16
|
+
*/
|
|
17
|
+
export type ExecutableBodyOwner = FunctionId | RegionId;
|
|
18
|
+
/**
|
|
19
|
+
* An opaque handle. The real ledger lives in a module-private `WeakMap`, not
|
|
20
|
+
* on the handle itself, so no caller can inspect, copy, or reconstruct
|
|
21
|
+
* ownership state by holding a reference to the report -- the only way to
|
|
22
|
+
* affect a lease is through `acquireLease`/`spendLease` below. In particular,
|
|
23
|
+
* there is no function here that derives a lease or an owner from generated
|
|
24
|
+
* C++ text: ownership is recorded once, from the identity that authored the
|
|
25
|
+
* region, and never re-discovered from what that region rendered.
|
|
26
|
+
*/
|
|
27
|
+
export interface ExecutableBodyOwnershipReport {
|
|
28
|
+
readonly brand: 'ExecutableBodyOwnershipReport';
|
|
29
|
+
}
|
|
30
|
+
export declare const createOwnershipReport: () => ExecutableBodyOwnershipReport;
|
|
31
|
+
/**
|
|
32
|
+
* Records a region exactly once. A second acquisition for the same owner --
|
|
33
|
+
* even after its lease has already been spent -- means two emission sites
|
|
34
|
+
* believe they own one source region, which the sealed boundary must never
|
|
35
|
+
* allow silently.
|
|
36
|
+
*/
|
|
37
|
+
export declare const acquireLease: (report: ExecutableBodyOwnershipReport, owner: ExecutableBodyOwner) => void;
|
|
38
|
+
/**
|
|
39
|
+
* Consumes the lease immediately before the owner's C++ actually renders.
|
|
40
|
+
* Spending an unacquired or already-spent lease names the exact owner, so the
|
|
41
|
+
* defect is traceable to one region instead of a class of them.
|
|
42
|
+
*/
|
|
43
|
+
export declare const spendLease: (report: ExecutableBodyOwnershipReport, owner: ExecutableBodyOwner) => void;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
const ledgers = new WeakMap();
|
|
2
|
+
export const createOwnershipReport = () => {
|
|
3
|
+
const report = { brand: 'ExecutableBodyOwnershipReport' };
|
|
4
|
+
ledgers.set(report, new Map());
|
|
5
|
+
return report;
|
|
6
|
+
};
|
|
7
|
+
const ledgerOf = (report) => {
|
|
8
|
+
const ledger = ledgers.get(report);
|
|
9
|
+
if (!ledger)
|
|
10
|
+
throw new Error('ownership report was not created by createOwnershipReport');
|
|
11
|
+
return ledger;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Records a region exactly once. A second acquisition for the same owner --
|
|
15
|
+
* even after its lease has already been spent -- means two emission sites
|
|
16
|
+
* believe they own one source region, which the sealed boundary must never
|
|
17
|
+
* allow silently.
|
|
18
|
+
*/
|
|
19
|
+
export const acquireLease = (report, owner) => {
|
|
20
|
+
const ledger = ledgerOf(report);
|
|
21
|
+
if (ledger.has(owner))
|
|
22
|
+
throw new Error(`executable body owner ${owner} already recorded; a region may acquire its lease exactly once`);
|
|
23
|
+
ledger.set(owner, 'acquired');
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Consumes the lease immediately before the owner's C++ actually renders.
|
|
27
|
+
* Spending an unacquired or already-spent lease names the exact owner, so the
|
|
28
|
+
* defect is traceable to one region instead of a class of them.
|
|
29
|
+
*/
|
|
30
|
+
export const spendLease = (report, owner) => {
|
|
31
|
+
const ledger = ledgerOf(report);
|
|
32
|
+
const state = ledger.get(owner);
|
|
33
|
+
if (state === undefined)
|
|
34
|
+
throw new Error(`executable body owner ${owner} has no acquired lease to spend`);
|
|
35
|
+
if (state === 'spent')
|
|
36
|
+
throw new Error(`executable body owner ${owner} lease was already spent`);
|
|
37
|
+
ledger.set(owner, 'spent');
|
|
38
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { IrOperand } from '../../ir/model.js';
|
|
2
|
+
import type { Representation } from '../../representation/model.js';
|
|
3
|
+
import type { EmitContext } from './emit-context.js';
|
|
4
|
+
/** The string-to-dynamic recipe constructs one owned payload from its input.
|
|
5
|
+
* Moving the finished conversion is too late: its static_cast<std::string>
|
|
6
|
+
* already copied the input. Transfer a dying input into that same certified
|
|
7
|
+
* recipe instead. This changes ownership, never which conversion is selected.
|
|
8
|
+
*
|
|
9
|
+
* Do not generalize this to arbitrary recipes: sum classification, structural
|
|
10
|
+
* projection and user-visible conversions may inspect their input repeatedly.
|
|
11
|
+
* Use the same liveness/physical-storage proof as ordinary moves: deferred
|
|
12
|
+
* expressions and values needed by later iterations cannot be donated, and
|
|
13
|
+
* a const borrowed formal still copies when bound to the owning payload. */
|
|
14
|
+
export declare const owningConversionInputText: (ctx: EmitContext, source: IrOperand, target: Representation, text: string) => string;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { movedValueText } from './emit-narrowing.js';
|
|
2
|
+
/** The string-to-dynamic recipe constructs one owned payload from its input.
|
|
3
|
+
* Moving the finished conversion is too late: its static_cast<std::string>
|
|
4
|
+
* already copied the input. Transfer a dying input into that same certified
|
|
5
|
+
* recipe instead. This changes ownership, never which conversion is selected.
|
|
6
|
+
*
|
|
7
|
+
* Do not generalize this to arbitrary recipes: sum classification, structural
|
|
8
|
+
* projection and user-visible conversions may inspect their input repeatedly.
|
|
9
|
+
* Use the same liveness/physical-storage proof as ordinary moves: deferred
|
|
10
|
+
* expressions and values needed by later iterations cannot be donated, and
|
|
11
|
+
* a const borrowed formal still copies when bound to the owning payload. */
|
|
12
|
+
export const owningConversionInputText = (ctx, source, target, text) => source.representation.kind === 'string' && target.kind === 'dynamic' ? movedValueText(ctx, source, source.representation, text) : text;
|