@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,142 @@
|
|
|
1
|
+
import type { DeclarationId, FunctionId, IrValueId } from '../identity/ids.js';
|
|
2
|
+
import { type ConversionCensus } from '../conversion/nodes.js';
|
|
3
|
+
import type { Representation } from '../representation/model.js';
|
|
4
|
+
import type { RepresentationDeriver } from '../representation/derive.js';
|
|
5
|
+
import type { ClassLayout } from '../projection/classes.js';
|
|
6
|
+
import { type CallableAbi } from '../representation/model.js';
|
|
7
|
+
import type { CallCalleeIdentity, CallOperation, ConstructOperation, IrOperand } from './model.js';
|
|
8
|
+
/**
|
|
9
|
+
* A fixed frame receives only its declared formals. Normalization publishes a
|
|
10
|
+
* rest parameter for bodies that observe `arguments`, so those frames retain
|
|
11
|
+
* every supplied argument. Argument evaluation lives in preceding IR and is
|
|
12
|
+
* never removed by selecting the received values.
|
|
13
|
+
*/
|
|
14
|
+
export declare const receivableArguments: <T>(abi: CallableAbi, args: readonly T[]) => readonly T[];
|
|
15
|
+
/** Inputs observable through this call's held convention, even before its
|
|
16
|
+
* implementation is known. Dynamic and spread frames retain every input. */
|
|
17
|
+
export declare const receivedCallArguments: (operation: CallOperation) => readonly IrOperand[];
|
|
18
|
+
/**
|
|
19
|
+
* The frame a construction through a bare host constructor fills: the handle's
|
|
20
|
+
* own `[[Construct]]` convention when its overloads join into one, else the
|
|
21
|
+
* overload the checker selected at this site (`ConstructOperation.hostFrame`).
|
|
22
|
+
* `null` for any other callee, and for a construction whose new-target is not
|
|
23
|
+
* its own callee, which emission refuses.
|
|
24
|
+
*
|
|
25
|
+
* A `native-handle` states no convention `constructAbiOfCallee` can read, so
|
|
26
|
+
* without this a host construction published no default-slot conversion and
|
|
27
|
+
* `new Error(message)` -- `options` omitted -- read as an open frame.
|
|
28
|
+
*/
|
|
29
|
+
export declare const hostConstructFrameOf: (operation: ConstructOperation) => CallableAbi | null;
|
|
30
|
+
/**
|
|
31
|
+
* Publish default-slot conversions before carrier closure and read-only
|
|
32
|
+
* reflection census, together with the sum selection a union receiver enters
|
|
33
|
+
* its convention through (`publishSumReceiverSelection`). A host construction
|
|
34
|
+
* publishes its omitted formals against `hostConstructFrameOf`.
|
|
35
|
+
*/
|
|
36
|
+
export declare const publishOmittedArgumentConversions: (operation: CallOperation | ConstructOperation, conversions: ConversionCensus) => void;
|
|
37
|
+
/**
|
|
38
|
+
* Omitted fixed formals receive undefined through the existing conversion
|
|
39
|
+
* census; trailing arguments are packed into the rest slot's own array.
|
|
40
|
+
*
|
|
41
|
+
* The rest half used to read the frame as though it were fixed: it compared the
|
|
42
|
+
* argument sitting at the rest INDEX against the rest slot's array carrier --
|
|
43
|
+
* which an element never matches -- and refused outright once a call supplied
|
|
44
|
+
* more arguments than the convention declares parameters, which is precisely
|
|
45
|
+
* what a rest parameter exists to accept. Every variadic call was an unmatched
|
|
46
|
+
* frame for that reason alone.
|
|
47
|
+
*
|
|
48
|
+
* A rest slot "is an `array-object` like any other, and what varies is only who
|
|
49
|
+
* builds the array, which is the caller". So the caller's obligation is exactly
|
|
50
|
+
* that each argument it packs is already the array's ELEMENT carrier; packing
|
|
51
|
+
* natively-typed values into a declared array crosses no dynamic boundary.
|
|
52
|
+
*/
|
|
53
|
+
export type CallFrameMatch =
|
|
54
|
+
/**
|
|
55
|
+
* Every operand arrives already held in the parameter's own carrier, so the
|
|
56
|
+
* body receives the caller's values themselves. Provenance equates the two,
|
|
57
|
+
* and the native class-initialization entry forwards the received operands
|
|
58
|
+
* into the constructor unchanged -- neither survives a value that has to be
|
|
59
|
+
* converted first, so this is the proof they ask for.
|
|
60
|
+
*/
|
|
61
|
+
'value-identity'
|
|
62
|
+
/**
|
|
63
|
+
* Every operand reaches its parameter through a conversion that keeps both
|
|
64
|
+
* sides in native storage. A weaker proof, and the one the reflection census
|
|
65
|
+
* actually needs: its question is whether any operand crosses a `gea::Value`
|
|
66
|
+
* boundary, not whose value the body ends up holding. Passing a `number` to a
|
|
67
|
+
* `number | undefined` formal publishes nothing -- it constructs an optional
|
|
68
|
+
* -- yet under `value-identity` it reads as an open callable boundary and
|
|
69
|
+
* promotes the receiver and every argument to an unrestricted field protocol.
|
|
70
|
+
*
|
|
71
|
+
* `transfersNativeStorage` is the authority for a single edge; asking the
|
|
72
|
+
* conversion census is deliberate, because the census is what owns the fact
|
|
73
|
+
* and re-deriving it from carrier shapes here would invent a second opinion.
|
|
74
|
+
*/
|
|
75
|
+
| 'native-transfer';
|
|
76
|
+
export declare const nativeArgumentsMatch: (abi: CallableAbi, args: readonly IrOperand[], conversions?: Pick<ConversionCensus, "nodeById">, match?: CallFrameMatch) => boolean;
|
|
77
|
+
/** Publish a closed body's exact frame, including arguments it cannot observe. */
|
|
78
|
+
export declare const closedCallFrameOf: (operation: CallOperation, identity: CallCalleeIdentity | undefined, abiOf: (functionId: FunctionId) => CallableAbi | null, observed: ReadonlySet<IrValueId>, conversions?: Pick<ConversionCensus, "nodeById">, match?: CallFrameMatch) => CallOperation["closedFrame"];
|
|
79
|
+
/** Frame selection shared by direct bodies and conversion-census native adapters. */
|
|
80
|
+
export declare const nativeCallFrameOf: (operation: CallOperation, abi: CallableAbi, observed: ReadonlySet<IrValueId>, conversions?: Pick<ConversionCensus, "nodeById">, match?: CallFrameMatch) => CallOperation["closedFrame"];
|
|
81
|
+
/**
|
|
82
|
+
* The frame of a call the printer spells from a HOST TEMPLATE rather than
|
|
83
|
+
* through the callee's declared convention (`CallOperation.hostTemplate`).
|
|
84
|
+
*
|
|
85
|
+
* `true`: the template this call is printed by uses every operand in place, in
|
|
86
|
+
* its own carrier, and puts nothing in a `gea::Value`. `false`: that cannot be
|
|
87
|
+
* stated for these operands, and the call stays the open boundary it was. The
|
|
88
|
+
* declared convention is NOT asked instead, because the printer never fills
|
|
89
|
+
* it: `Object.assign`'s `(target: T, source: U) => T & U` matches a dictionary
|
|
90
|
+
* source exactly while `assignText` walks that dictionary's runtime key table.
|
|
91
|
+
* `undefined`: the call records no template -- or, for `Array.isArray` only,
|
|
92
|
+
* its argument reaches the template's `gea::Value` overload, where the
|
|
93
|
+
* declared `(arg: any)` convention IS what is printed and keeps deciding.
|
|
94
|
+
*
|
|
95
|
+
* Each arm states only what its template prints:
|
|
96
|
+
*
|
|
97
|
+
* - `array-is-array` -- `isArrayText` (emit-host-invoke.ts) answers from the
|
|
98
|
+
* argument's own carrier: a constant by kind, `has_value()` for an optional,
|
|
99
|
+
* the discriminant for a union. Nothing is converted and nothing is read
|
|
100
|
+
* through the carrier, and the C++ `bool` is the result, assigned as it is
|
|
101
|
+
* (`hostResultText`).
|
|
102
|
+
* - `typed-array-set` -- `typedArrayCallText` (emit-buffers.ts):
|
|
103
|
+
* `setFrom(*source, offset)` for a typed-array source, `setFromArray(source,
|
|
104
|
+
* offset)` for an array of numbers, an `is<i>()`/`get<i>()` chain over a
|
|
105
|
+
* union of only those, and the offset operand's own text as the runtime's
|
|
106
|
+
* `double`. The expression's value is `gea::Undefined{}`. A third argument is
|
|
107
|
+
* never read; it is refused here rather than argued about.
|
|
108
|
+
* - `object-assign` -- `assignText` (emit-host-object.ts), which returns the
|
|
109
|
+
* target itself. Into a Function object (`assignIntoCallableText`) each
|
|
110
|
+
* source field is stored through `callableDynamicSet` after the conversion
|
|
111
|
+
* `objectValueConversions` cites for it, so each of those must keep its value
|
|
112
|
+
* in native storage. Into a known struct each field is read off the source's
|
|
113
|
+
* own slot and stored into the target's declared slot through the census's
|
|
114
|
+
* node for that pair (`setOwnText`; `objectAssignFieldPairsOf`). The
|
|
115
|
+
* dictionary and dynamic arms walk runtime key tables through the dynamic
|
|
116
|
+
* protocol, and a key with no declared slot is boxed into the target's
|
|
117
|
+
* sidecar; none of those is stated here.
|
|
118
|
+
*/
|
|
119
|
+
export declare const hostTemplateFrameOf: (operation: CallOperation, conversions: Pick<ConversionCensus, "nodeById"> | undefined, deriver: RepresentationDeriver | null, classes: ReadonlyMap<DeclarationId, ClassLayout> | null) => boolean | undefined;
|
|
120
|
+
/**
|
|
121
|
+
* Every store `assignText`'s known-struct arm prints for these operands, as the
|
|
122
|
+
* pair of carriers `setOwnText` reconciles through the conversion census -- or
|
|
123
|
+
* `null` when the target or some source takes another arm, or when a source key
|
|
124
|
+
* has no declared slot on the target (the printer then boxes the value into the
|
|
125
|
+
* target's sidecar, or refuses).
|
|
126
|
+
*
|
|
127
|
+
* A source is copied as `assignOperandText` copies it: `null`/`undefined` copy
|
|
128
|
+
* nothing, an optional copies its payload, and a union copies whichever arm is
|
|
129
|
+
* live -- each arm `null`, `undefined` or a known shape.
|
|
130
|
+
*/
|
|
131
|
+
export declare const objectAssignFieldPairsOf: (args: readonly IrOperand[], deriver: RepresentationDeriver, classes: ReadonlyMap<DeclarationId, ClassLayout> | null) => readonly {
|
|
132
|
+
readonly source: Representation;
|
|
133
|
+
readonly target: Representation;
|
|
134
|
+
}[] | null;
|
|
135
|
+
/**
|
|
136
|
+
* Mint the pairs `objectAssignFieldPairsOf` states before the reflection census
|
|
137
|
+
* asks for them. The printer mints each one while printing (`setOwnText`
|
|
138
|
+
* through `alignedValueText`), after that census has already asked `nodeById`
|
|
139
|
+
* and read a native slot copy as an open boundary. Publishing decides nothing:
|
|
140
|
+
* whether the frame closes remains each node's own capability.
|
|
141
|
+
*/
|
|
142
|
+
export declare const publishObjectAssignFieldConversions: (args: readonly IrOperand[], deriver: RepresentationDeriver, classes: ReadonlyMap<DeclarationId, ClassLayout> | null, conversions: ConversionCensus) => void;
|
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
import { conversionNodeIdOf } from '../conversion/nodes.js';
|
|
2
|
+
import { transfersNativeStorage } from '../conversion/algebra.js';
|
|
3
|
+
import { isNativeCallableCarrier } from '../representation/callable-object.js';
|
|
4
|
+
import { isArrayConstantOf, typedArraySetSourceAccepted } from '../representation/host-templates.js';
|
|
5
|
+
import { abiOfCallee, constructAbiOfCallee } from '../projection/callee.js';
|
|
6
|
+
import { declaredFieldRepresentationOf, recordFieldsOfShape } from '../projection/fields.js';
|
|
7
|
+
import { abiKey, representationKey } from '../representation/model.js';
|
|
8
|
+
/**
|
|
9
|
+
* A fixed frame receives only its declared formals. Normalization publishes a
|
|
10
|
+
* rest parameter for bodies that observe `arguments`, so those frames retain
|
|
11
|
+
* every supplied argument. Argument evaluation lives in preceding IR and is
|
|
12
|
+
* never removed by selecting the received values.
|
|
13
|
+
*/
|
|
14
|
+
export const receivableArguments = (abi, args) => abi.restFrom !== null ? args : args.slice(0, abi.parameters.length);
|
|
15
|
+
/** Inputs observable through this call's held convention, even before its
|
|
16
|
+
* implementation is known. Dynamic and spread frames retain every input. */
|
|
17
|
+
export const receivedCallArguments = (operation) => {
|
|
18
|
+
const abi = operation.argumentsAreSpread ? null : abiOfCallee(operation.callee.representation);
|
|
19
|
+
return abi === null ? operation.arguments : receivableArguments(abi, operation.arguments);
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* The frame a construction through a bare host constructor fills: the handle's
|
|
23
|
+
* own `[[Construct]]` convention when its overloads join into one, else the
|
|
24
|
+
* overload the checker selected at this site (`ConstructOperation.hostFrame`).
|
|
25
|
+
* `null` for any other callee, and for a construction whose new-target is not
|
|
26
|
+
* its own callee, which emission refuses.
|
|
27
|
+
*
|
|
28
|
+
* A `native-handle` states no convention `constructAbiOfCallee` can read, so
|
|
29
|
+
* without this a host construction published no default-slot conversion and
|
|
30
|
+
* `new Error(message)` -- `options` omitted -- read as an open frame.
|
|
31
|
+
*/
|
|
32
|
+
export const hostConstructFrameOf = (operation) => {
|
|
33
|
+
const callee = operation.callee.representation;
|
|
34
|
+
if (callee.kind !== 'native-handle' || operation.newTarget.value !== operation.callee.value)
|
|
35
|
+
return null;
|
|
36
|
+
return callee.construct ?? operation.hostFrame ?? null;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Publish default-slot conversions before carrier closure and read-only
|
|
40
|
+
* reflection census, together with the sum selection a union receiver enters
|
|
41
|
+
* its convention through (`publishSumReceiverSelection`). A host construction
|
|
42
|
+
* publishes its omitted formals against `hostConstructFrameOf`.
|
|
43
|
+
*/
|
|
44
|
+
export const publishOmittedArgumentConversions = (operation, conversions) => {
|
|
45
|
+
if (operation.kind === 'call' && operation.argumentsAreSpread)
|
|
46
|
+
return;
|
|
47
|
+
if (operation.kind === 'call')
|
|
48
|
+
publishSumReceiverSelection(operation, conversions);
|
|
49
|
+
if (operation.kind === 'construct' && operation.callee.representation.kind === 'tagged-union') {
|
|
50
|
+
// A sum invokes the selected arm's convention. Seal its existing native
|
|
51
|
+
// argument/result conversions before provenance and reflection consume
|
|
52
|
+
// them, rather than minting the first citation while printing the arm.
|
|
53
|
+
for (const arm of operation.callee.representation.arms) {
|
|
54
|
+
const abi = constructAbiOfCallee(arm.value);
|
|
55
|
+
if (abi === null || abi.receiver !== null || abi.restFrom !== null)
|
|
56
|
+
continue;
|
|
57
|
+
for (let index = 0; index < abi.parameters.length; index++)
|
|
58
|
+
conversions.nodeFor(operation.arguments[index]?.representation ?? { kind: 'undefined' }, abi.parameters[index].value);
|
|
59
|
+
conversions.nodeFor(abi.result, operation.result.representation);
|
|
60
|
+
}
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const abi = operation.kind === 'construct'
|
|
64
|
+
? (hostConstructFrameOf(operation) ?? constructAbiOfCallee(operation.callee.representation))
|
|
65
|
+
: abiOfCallee(operation.callee.representation);
|
|
66
|
+
if (abi === null)
|
|
67
|
+
return;
|
|
68
|
+
for (let index = operation.arguments.length; index < abi.parameters.length; index++) {
|
|
69
|
+
if (abi.restFrom !== null && index >= abi.restFrom)
|
|
70
|
+
break;
|
|
71
|
+
conversions.nodeFor({ kind: 'undefined' }, abi.parameters[index].value);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
/** The default-slot rule, unchanged: an omitted formal's edge under value identity. */
|
|
75
|
+
const nativeDefaultCapability = (capability) => capability?.kind === 'identity' ||
|
|
76
|
+
((capability?.kind === 'atom' || capability?.kind === 'static' || capability?.kind === 'class-family') &&
|
|
77
|
+
capability.materializer.nativeFieldProtocol === 'unused');
|
|
78
|
+
/** Whether the census carries `source` into `target` under this proof. */
|
|
79
|
+
const carriedNatively = (source, target, proof, conversions) => {
|
|
80
|
+
if (representationKey(source) === representationKey(target))
|
|
81
|
+
return true;
|
|
82
|
+
const node = conversions?.nodeById(conversionNodeIdOf(source, target));
|
|
83
|
+
if (node === undefined || node === null || representationKey(node.source) !== representationKey(source))
|
|
84
|
+
return false;
|
|
85
|
+
if (representationKey(node.target) !== representationKey(target))
|
|
86
|
+
return false;
|
|
87
|
+
return proof === 'native-transfer' ? transfersNativeStorage(node.capability) : nativeDefaultCapability(node.capability);
|
|
88
|
+
};
|
|
89
|
+
export const nativeArgumentsMatch = (abi, args, conversions, match = 'value-identity') => {
|
|
90
|
+
const received = receivableArguments(abi, args);
|
|
91
|
+
const restFrom = abi.restFrom;
|
|
92
|
+
if (restFrom !== null) {
|
|
93
|
+
const slot = abi.parameters[restFrom]?.value;
|
|
94
|
+
if (slot === undefined || slot.kind !== 'array-object')
|
|
95
|
+
return false;
|
|
96
|
+
const element = representationKey(slot.element);
|
|
97
|
+
const rest = received.slice(restFrom);
|
|
98
|
+
// Either the caller hands over the trailing values for this frame to pack,
|
|
99
|
+
// or it hands over the packed array itself -- a spread already materialized
|
|
100
|
+
// into one `array-object` arrives in the slot's own carrier, and reading it
|
|
101
|
+
// as an element is what a lone trailing array would otherwise be mistaken
|
|
102
|
+
// for.
|
|
103
|
+
const carried = rest.length === 1 && representationKey(rest[0].representation) === representationKey(slot);
|
|
104
|
+
if (!carried && !rest.every((argument) => representationKey(argument.representation) === element))
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
else if (received.length > abi.parameters.length)
|
|
108
|
+
return false;
|
|
109
|
+
return abi.parameters.every((parameter, index) => {
|
|
110
|
+
if (restFrom !== null && index >= restFrom)
|
|
111
|
+
return true;
|
|
112
|
+
const argument = received[index];
|
|
113
|
+
// A supplied argument under value identity must BE the parameter's carrier;
|
|
114
|
+
// an omitted one has always gone through the census, since the default it
|
|
115
|
+
// receives is a conversion from `undefined` by construction.
|
|
116
|
+
if (argument !== undefined && match === 'value-identity')
|
|
117
|
+
return representationKey(argument.representation) === representationKey(parameter.value);
|
|
118
|
+
return carriedNatively(argument?.representation ?? { kind: 'undefined' }, parameter.value, match, conversions);
|
|
119
|
+
});
|
|
120
|
+
};
|
|
121
|
+
/** The carrier a callee's convention is stated on, through the wrappers that hold one. */
|
|
122
|
+
const unwrappedCalleeOf = (representation) => representation.kind === 'optional'
|
|
123
|
+
? unwrappedCalleeOf(representation.payload)
|
|
124
|
+
: representation.kind === 'borrowed-ref'
|
|
125
|
+
? unwrappedCalleeOf(representation.referent)
|
|
126
|
+
: representation;
|
|
127
|
+
/**
|
|
128
|
+
* A method read through a union of classes -- `shadowMaterial.dispose()` on a
|
|
129
|
+
* `MeshDepthMaterial | MeshDistanceMaterial` -- reaches a convention whose
|
|
130
|
+
* receiver is the classes' shared ancestor. Lowering leaves such a receiver in
|
|
131
|
+
* its union carrier: the printer either dispatches per arm (each arm an
|
|
132
|
+
* upcast of its own `Ref`) or selects the payload into the stated receiver
|
|
133
|
+
* through this census's node for the pair. The census node is minted there, at
|
|
134
|
+
* print time -- after the reflection census has already asked `nodeById` for
|
|
135
|
+
* it, found nothing, and read a native selection as an open call boundary that
|
|
136
|
+
* promoted every field of both classes.
|
|
137
|
+
*
|
|
138
|
+
* So the pair is published before that census, exactly as the native sum
|
|
139
|
+
* field reads in `call-dispatch.ts` publish theirs. Publishing decides
|
|
140
|
+
* nothing: whether the frame closes remains `carriedNatively`'s question over
|
|
141
|
+
* the node's own capability, and a node no printer asks for renders nothing.
|
|
142
|
+
* A template-rendered call spells its receiver from the template rather than
|
|
143
|
+
* through the frame, so it publishes no pair for one.
|
|
144
|
+
*/
|
|
145
|
+
const publishSumReceiverSelection = (operation, conversions) => {
|
|
146
|
+
if (operation.objectValueConversions !== undefined || operation.fixedDataDefinition !== undefined)
|
|
147
|
+
return;
|
|
148
|
+
if (operation.intrinsicReflection !== undefined)
|
|
149
|
+
return;
|
|
150
|
+
const receiver = operation.receiver;
|
|
151
|
+
if (receiver === null || receiver.representation.kind !== 'tagged-union')
|
|
152
|
+
return;
|
|
153
|
+
const abi = abiOfCallee(unwrappedCalleeOf(operation.callee.representation));
|
|
154
|
+
if (abi === null || abi.receiver === null || representationKey(receiver.representation) === representationKey(abi.receiver))
|
|
155
|
+
return;
|
|
156
|
+
conversions.nodeFor(receiver.representation, abi.receiver);
|
|
157
|
+
};
|
|
158
|
+
/** Publish a closed body's exact frame, including arguments it cannot observe. */
|
|
159
|
+
export const closedCallFrameOf = (operation, identity, abiOf, observed, conversions, match = 'value-identity') => {
|
|
160
|
+
if (identity === undefined || operation.argumentsAreSpread)
|
|
161
|
+
return undefined;
|
|
162
|
+
const ids = identity.kind === 'exact' ? [identity.functionId] : identity.functionIds;
|
|
163
|
+
if (identity.nativeEntryAbi !== undefined && ids.length > 0 && ids.every((id) => abiOf(id) !== null))
|
|
164
|
+
return nativeCallFrameOf(operation, identity.nativeEntryAbi, observed, conversions, match);
|
|
165
|
+
const abi = ids[0] === undefined ? null : abiOf(ids[0]);
|
|
166
|
+
if (abi === null ||
|
|
167
|
+
!ids.every((id) => {
|
|
168
|
+
const candidate = abiOf(id);
|
|
169
|
+
return candidate !== null && abiKey(candidate) === abiKey(abi);
|
|
170
|
+
}))
|
|
171
|
+
return undefined;
|
|
172
|
+
return nativeCallFrameOf(operation, abi, observed, conversions, match);
|
|
173
|
+
};
|
|
174
|
+
/** Frame selection shared by direct bodies and conversion-census native adapters. */
|
|
175
|
+
export const nativeCallFrameOf = (operation, abi, observed, conversions, match = 'value-identity') => {
|
|
176
|
+
// A callee held as `optional`/`borrowed-ref` states the same convention its
|
|
177
|
+
// payload does -- `abiOfCallee` answers only for the bare carrier, so the
|
|
178
|
+
// wrapper alone used to read as "no convention at all" while every caller
|
|
179
|
+
// that reaches here has already unwrapped it to find this `abi`.
|
|
180
|
+
const heldAbi = abiOfCallee(unwrappedCalleeOf(operation.callee.representation));
|
|
181
|
+
if (operation.argumentsAreSpread || heldAbi === null || abiKey(heldAbi) !== abiKey(abi))
|
|
182
|
+
return undefined;
|
|
183
|
+
const received = receivableArguments(abi, operation.arguments);
|
|
184
|
+
// The receiver is an operand of this frame like any other, and the same
|
|
185
|
+
// proof applies to it: a `Cat | Dog` narrowed to the `Animal` handle its
|
|
186
|
+
// convention states crosses no dynamic boundary, and refusing it on carrier
|
|
187
|
+
// spelling alone was the second-largest refusal this census reported.
|
|
188
|
+
if (!nativeArgumentsMatch(abi, operation.arguments, conversions, match) ||
|
|
189
|
+
(abi.receiver === null
|
|
190
|
+
? operation.receiver !== null
|
|
191
|
+
: operation.receiver === null || !carriedNatively(operation.receiver.representation, abi.receiver, match, conversions)))
|
|
192
|
+
return undefined;
|
|
193
|
+
const result = operation.result;
|
|
194
|
+
const disposition = result === null || !observed.has(result.id)
|
|
195
|
+
? 'ignored'
|
|
196
|
+
: representationKey(result.representation) === representationKey(abi.result)
|
|
197
|
+
? 'exact'
|
|
198
|
+
: // A void convention returns nothing, and JavaScript reads nothing as
|
|
199
|
+
// `undefined`. The cell that receives it carries `undefined` when the
|
|
200
|
+
// program typed the call, and `dynamic` when it typed it `any` -- the
|
|
201
|
+
// same value either way, so the same disposition describes both. Only
|
|
202
|
+
// the `undefined` spelling was admitted, which left every `any`-typed
|
|
203
|
+
// call of a void body reading as an open boundary and promoting its
|
|
204
|
+
// receiver and every argument.
|
|
205
|
+
abi.result.kind === 'void' && (result.representation.kind === 'undefined' || result.representation.kind === 'dynamic')
|
|
206
|
+
? 'undefined'
|
|
207
|
+
: null;
|
|
208
|
+
if (disposition === null)
|
|
209
|
+
return undefined;
|
|
210
|
+
return { abi, receivedArguments: received.length, result: disposition };
|
|
211
|
+
};
|
|
212
|
+
/**
|
|
213
|
+
* The frame of a call the printer spells from a HOST TEMPLATE rather than
|
|
214
|
+
* through the callee's declared convention (`CallOperation.hostTemplate`).
|
|
215
|
+
*
|
|
216
|
+
* `true`: the template this call is printed by uses every operand in place, in
|
|
217
|
+
* its own carrier, and puts nothing in a `gea::Value`. `false`: that cannot be
|
|
218
|
+
* stated for these operands, and the call stays the open boundary it was. The
|
|
219
|
+
* declared convention is NOT asked instead, because the printer never fills
|
|
220
|
+
* it: `Object.assign`'s `(target: T, source: U) => T & U` matches a dictionary
|
|
221
|
+
* source exactly while `assignText` walks that dictionary's runtime key table.
|
|
222
|
+
* `undefined`: the call records no template -- or, for `Array.isArray` only,
|
|
223
|
+
* its argument reaches the template's `gea::Value` overload, where the
|
|
224
|
+
* declared `(arg: any)` convention IS what is printed and keeps deciding.
|
|
225
|
+
*
|
|
226
|
+
* Each arm states only what its template prints:
|
|
227
|
+
*
|
|
228
|
+
* - `array-is-array` -- `isArrayText` (emit-host-invoke.ts) answers from the
|
|
229
|
+
* argument's own carrier: a constant by kind, `has_value()` for an optional,
|
|
230
|
+
* the discriminant for a union. Nothing is converted and nothing is read
|
|
231
|
+
* through the carrier, and the C++ `bool` is the result, assigned as it is
|
|
232
|
+
* (`hostResultText`).
|
|
233
|
+
* - `typed-array-set` -- `typedArrayCallText` (emit-buffers.ts):
|
|
234
|
+
* `setFrom(*source, offset)` for a typed-array source, `setFromArray(source,
|
|
235
|
+
* offset)` for an array of numbers, an `is<i>()`/`get<i>()` chain over a
|
|
236
|
+
* union of only those, and the offset operand's own text as the runtime's
|
|
237
|
+
* `double`. The expression's value is `gea::Undefined{}`. A third argument is
|
|
238
|
+
* never read; it is refused here rather than argued about.
|
|
239
|
+
* - `object-assign` -- `assignText` (emit-host-object.ts), which returns the
|
|
240
|
+
* target itself. Into a Function object (`assignIntoCallableText`) each
|
|
241
|
+
* source field is stored through `callableDynamicSet` after the conversion
|
|
242
|
+
* `objectValueConversions` cites for it, so each of those must keep its value
|
|
243
|
+
* in native storage. Into a known struct each field is read off the source's
|
|
244
|
+
* own slot and stored into the target's declared slot through the census's
|
|
245
|
+
* node for that pair (`setOwnText`; `objectAssignFieldPairsOf`). The
|
|
246
|
+
* dictionary and dynamic arms walk runtime key tables through the dynamic
|
|
247
|
+
* protocol, and a key with no declared slot is boxed into the target's
|
|
248
|
+
* sidecar; none of those is stated here.
|
|
249
|
+
*/
|
|
250
|
+
export const hostTemplateFrameOf = (operation, conversions, deriver, classes) => {
|
|
251
|
+
const template = operation.hostTemplate;
|
|
252
|
+
if (template === undefined)
|
|
253
|
+
return undefined;
|
|
254
|
+
const result = operation.result?.representation;
|
|
255
|
+
if (template === 'array-is-array') {
|
|
256
|
+
const argument = operation.arguments[0];
|
|
257
|
+
return !operation.argumentsAreSpread &&
|
|
258
|
+
operation.arguments.length === 1 &&
|
|
259
|
+
argument !== undefined &&
|
|
260
|
+
isArrayAnsweredByCarrier(argument.representation) &&
|
|
261
|
+
(result === undefined || (result.kind === 'scalar' && result.domain === 'boolean'))
|
|
262
|
+
? true
|
|
263
|
+
: undefined;
|
|
264
|
+
}
|
|
265
|
+
if (operation.argumentsAreSpread)
|
|
266
|
+
return false;
|
|
267
|
+
if (template === 'typed-array-set') {
|
|
268
|
+
const [source, offset] = operation.arguments;
|
|
269
|
+
return (source !== undefined &&
|
|
270
|
+
operation.arguments.length <= 2 &&
|
|
271
|
+
typedArraySetSourceAccepted(source.representation) &&
|
|
272
|
+
(offset === undefined || (offset.representation.kind === 'scalar' && offset.representation.domain === 'number')) &&
|
|
273
|
+
(result === undefined || result.kind === 'undefined' || result.kind === 'void'));
|
|
274
|
+
}
|
|
275
|
+
const target = operation.arguments[0]?.representation;
|
|
276
|
+
if (target === undefined || operation.arguments.length < 2 || deriver === null)
|
|
277
|
+
return false;
|
|
278
|
+
if (result !== undefined && representationKey(result) !== representationKey(target))
|
|
279
|
+
return false;
|
|
280
|
+
if (isNativeCallableCarrier(target.kind))
|
|
281
|
+
return callablePropertiesStayNative(operation, conversions, deriver);
|
|
282
|
+
const pairs = objectAssignFieldPairsOf(operation.arguments, deriver, classes);
|
|
283
|
+
return pairs !== null && pairs.every((pair) => carriedNatively(pair.source, pair.target, 'native-transfer', conversions));
|
|
284
|
+
};
|
|
285
|
+
/**
|
|
286
|
+
* Whether `isArrayText` answers this carrier without its `gea::Value` overload,
|
|
287
|
+
* through the optional and union it also answers. The per-kind answer is the
|
|
288
|
+
* printer's own table (`isArrayConstantOf`).
|
|
289
|
+
*/
|
|
290
|
+
const isArrayAnsweredByCarrier = (carrier) => carrier.kind === 'optional'
|
|
291
|
+
? isArrayAnsweredByCarrier(carrier.payload)
|
|
292
|
+
: carrier.kind === 'tagged-union'
|
|
293
|
+
? carrier.arms.length > 0 && carrier.arms.every((arm) => isArrayAnsweredByCarrier(arm.value))
|
|
294
|
+
: isArrayConstantOf(carrier.kind) !== null;
|
|
295
|
+
/**
|
|
296
|
+
* The fields of a carrier `objectViewFrom` gives a known view whose own keys
|
|
297
|
+
* are exactly those fields: a record, a class, and a record-shaped
|
|
298
|
+
* `native-record-ref` naming no host struct. A `record-with-index` is left out:
|
|
299
|
+
* its index half is not among the fields the copy walks.
|
|
300
|
+
*/
|
|
301
|
+
const knownObjectFieldsOf = (carrier, deriver) => {
|
|
302
|
+
if (carrier.kind === 'record')
|
|
303
|
+
return carrier.fields;
|
|
304
|
+
if (carrier.kind === 'class-ref' || (carrier.kind === 'native-record-ref' && carrier.native === null))
|
|
305
|
+
return recordFieldsOfShape(deriver, carrier.shapeId);
|
|
306
|
+
return null;
|
|
307
|
+
};
|
|
308
|
+
/**
|
|
309
|
+
* Every store `assignText`'s known-struct arm prints for these operands, as the
|
|
310
|
+
* pair of carriers `setOwnText` reconciles through the conversion census -- or
|
|
311
|
+
* `null` when the target or some source takes another arm, or when a source key
|
|
312
|
+
* has no declared slot on the target (the printer then boxes the value into the
|
|
313
|
+
* target's sidecar, or refuses).
|
|
314
|
+
*
|
|
315
|
+
* A source is copied as `assignOperandText` copies it: `null`/`undefined` copy
|
|
316
|
+
* nothing, an optional copies its payload, and a union copies whichever arm is
|
|
317
|
+
* live -- each arm `null`, `undefined` or a known shape.
|
|
318
|
+
*/
|
|
319
|
+
export const objectAssignFieldPairsOf = (args, deriver, classes) => {
|
|
320
|
+
const target = args[0]?.representation;
|
|
321
|
+
if (target === undefined || args.length < 2 || knownObjectFieldsOf(target, deriver) === null)
|
|
322
|
+
return null;
|
|
323
|
+
const pairs = [];
|
|
324
|
+
const copied = (source) => {
|
|
325
|
+
const fields = knownObjectFieldsOf(source, deriver);
|
|
326
|
+
if (fields === null)
|
|
327
|
+
return false;
|
|
328
|
+
for (const field of fields) {
|
|
329
|
+
const held = declaredFieldRepresentationOf(deriver, target, field.key, classes);
|
|
330
|
+
if (held === null)
|
|
331
|
+
return false;
|
|
332
|
+
pairs.push({ source: field.value, target: held });
|
|
333
|
+
}
|
|
334
|
+
return true;
|
|
335
|
+
};
|
|
336
|
+
const absent = (source) => source.kind === 'null' || source.kind === 'undefined';
|
|
337
|
+
for (const argument of args.slice(1)) {
|
|
338
|
+
const source = argument.representation;
|
|
339
|
+
const copies = absent(source) ||
|
|
340
|
+
(source.kind === 'optional'
|
|
341
|
+
? copied(source.payload)
|
|
342
|
+
: source.kind === 'tagged-union'
|
|
343
|
+
? source.arms.every((arm) => absent(arm.value) || copied(arm.value))
|
|
344
|
+
: copied(source));
|
|
345
|
+
if (!copies)
|
|
346
|
+
return null;
|
|
347
|
+
}
|
|
348
|
+
return pairs;
|
|
349
|
+
};
|
|
350
|
+
/**
|
|
351
|
+
* `assignIntoCallableText`'s stores: every field of every source, each through
|
|
352
|
+
* the conversion `objectValueConversions` cites for it. The sources must be the
|
|
353
|
+
* known shapes that arm accepts, and the citations exactly theirs.
|
|
354
|
+
*/
|
|
355
|
+
const callablePropertiesStayNative = (operation, conversions, deriver) => {
|
|
356
|
+
const cited = operation.objectValueConversions ?? [];
|
|
357
|
+
let stored = 0;
|
|
358
|
+
for (let index = 1; index < operation.arguments.length; index++) {
|
|
359
|
+
const argument = operation.arguments[index].representation;
|
|
360
|
+
const fields = knownObjectFieldsOf(argument.kind === 'optional' ? argument.payload : argument, deriver);
|
|
361
|
+
if (fields === null)
|
|
362
|
+
return false;
|
|
363
|
+
for (const field of fields) {
|
|
364
|
+
stored++;
|
|
365
|
+
const citation = cited.find((entry) => entry.argument === index && entry.field === field.key);
|
|
366
|
+
if (citation === undefined || representationKey(citation.source) !== representationKey(field.value))
|
|
367
|
+
return false;
|
|
368
|
+
const node = conversions?.nodeById(citation.conversion);
|
|
369
|
+
if (node === undefined || node === null || !transfersNativeStorage(node.capability))
|
|
370
|
+
return false;
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
return cited.length === stored;
|
|
374
|
+
};
|
|
375
|
+
/**
|
|
376
|
+
* Mint the pairs `objectAssignFieldPairsOf` states before the reflection census
|
|
377
|
+
* asks for them. The printer mints each one while printing (`setOwnText`
|
|
378
|
+
* through `alignedValueText`), after that census has already asked `nodeById`
|
|
379
|
+
* and read a native slot copy as an open boundary. Publishing decides nothing:
|
|
380
|
+
* whether the frame closes remains each node's own capability.
|
|
381
|
+
*/
|
|
382
|
+
export const publishObjectAssignFieldConversions = (args, deriver, classes, conversions) => {
|
|
383
|
+
for (const pair of objectAssignFieldPairsOf(args, deriver, classes) ?? [])
|
|
384
|
+
if (representationKey(pair.source) !== representationKey(pair.target))
|
|
385
|
+
conversions.nodeFor(pair.source, pair.target);
|
|
386
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { DeclarationId, IrValueId, PhysicalBodyId } from '../identity/ids.js';
|
|
2
|
+
import type { RepresentationDeriver } from '../representation/derive.js';
|
|
3
|
+
import type { BindingPlacement } from '../projection/bindings.js';
|
|
4
|
+
import { type ClassLayout } from '../projection/classes.js';
|
|
5
|
+
import type { ConversionCensus } from '../conversion/nodes.js';
|
|
6
|
+
import type { CallCalleeIdentity, IrBody, IrOperation } from './model.js';
|
|
7
|
+
export interface NativeCallableFlow {
|
|
8
|
+
readonly callables: ReadonlyMap<IrValueId, CallCalleeIdentity>;
|
|
9
|
+
/** Includes every implicit or unmodeled entry; only closed, uninvoked allocations are absent. */
|
|
10
|
+
readonly enteredBodies: ReadonlySet<PhysicalBodyId>;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Flow-insensitive native field provenance. A field write contributes
|
|
14
|
+
* every implementation it can store; it never establishes an immutable-field
|
|
15
|
+
* fact. Unknown calls and publications poison the affected heap, including
|
|
16
|
+
* functions written there in a later solver round. Calls are resolved from
|
|
17
|
+
* allocator identities before treating still-unresolved entries as external.
|
|
18
|
+
*
|
|
19
|
+
* This authority does not consume reflection demand: it proves the origins
|
|
20
|
+
* which that demand needs. Unsupported transports fail closed. In particular,
|
|
21
|
+
* an arbitrary matching callable signature is never an implementation source.
|
|
22
|
+
*/
|
|
23
|
+
export declare const nativeCallableFlowOf: (bodies: readonly IrBody[], placements: ReadonlyMap<DeclarationId, BindingPlacement>, classes: ReadonlyMap<DeclarationId, ClassLayout>, conversions?: Pick<ConversionCensus, "nodeById"> & Partial<Pick<ConversionCensus, "nodeFor">>, trace?: (read: Extract<IrOperation, {
|
|
24
|
+
kind: "get";
|
|
25
|
+
}>, reason: string) => void, deriver?: Pick<RepresentationDeriver, "layoutOf"> | null) => NativeCallableFlow;
|
|
26
|
+
/** Compatibility view of the same execution/escape census; no second analysis policy. */
|
|
27
|
+
export declare const closedClassFieldCallablesOf: (...args: Parameters<typeof nativeCallableFlowOf>) => ReadonlyMap<IrValueId, CallCalleeIdentity>;
|