@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,232 @@
|
|
|
1
|
+
import { representationKey } from '../representation/model.js';
|
|
2
|
+
/**
|
|
3
|
+
* Whether a native object has only compiler-owned, fixed slots.
|
|
4
|
+
*
|
|
5
|
+
* This is a fact about the object's own slots, not the protocol of their
|
|
6
|
+
* payloads. An array, optional, callable or host reference in a fixed field
|
|
7
|
+
* does not make reading that field dynamic. `directChildrenOf` separately
|
|
8
|
+
* censuses those payloads, and `promoteFull` closes over them when an actual
|
|
9
|
+
* operation exposes the enclosing object. Requiring a child's layout to be
|
|
10
|
+
* closed here retains unused boxed reads on an otherwise closed parent.
|
|
11
|
+
* `native-record-ref` is admitted only when it names a compiler-owned record
|
|
12
|
+
* layout from the sealed deriver. Host layouts, index sidecars and record
|
|
13
|
+
* accessors still require their own full protocol. Class prototype accessors
|
|
14
|
+
* are body entries, not own storage; their effects belong to accessor flow.
|
|
15
|
+
* Recursive native wrappers remain
|
|
16
|
+
* excluded because their physical layout is not the ordinary record layout.
|
|
17
|
+
*
|
|
18
|
+
* A container with an intrinsically open element/key domain -- `array-object`,
|
|
19
|
+
* `dictionary`, `keyed-collection` -- asks a narrower version of the same
|
|
20
|
+
* question. Their indexed/keyed storage is never finite (that openness is
|
|
21
|
+
* what makes them a container rather than a record) and is never what this
|
|
22
|
+
* function is being asked about: reads and writes through it are served by
|
|
23
|
+
* their own dedicated native transports (`native-array-transport.ts`,
|
|
24
|
+
* `native-dictionary-transport.ts`, direct `get`/`set`/`has` method calls),
|
|
25
|
+
* never by the generic `gea_readOwnField`/`gea_ownFieldDescriptor` hooks this
|
|
26
|
+
* proof gates. What is left to check is only the OWN NAMED-FIELD surface
|
|
27
|
+
* beyond that index -- an array's `extension`, or nothing at all for a plain
|
|
28
|
+
* array, a bare dictionary, or a Map/Set/WeakMap/WeakSet -- which can be
|
|
29
|
+
* exactly as closed as an ordinary record's fields even though the container
|
|
30
|
+
* around it is open-ended.
|
|
31
|
+
*/
|
|
32
|
+
export const hasClosedFixedLayout = (representation, deriver, classes, visiting = new Set(), completed = new Map()) => {
|
|
33
|
+
// `representationKey` intentionally folds recursive wrapper metadata into
|
|
34
|
+
// the same physical native-record-ref identity. Inspect this marker before
|
|
35
|
+
// consulting the key cache so a plain record reference cannot certify a
|
|
36
|
+
// recursive array/dictionary/callable wrapper that happens to share its
|
|
37
|
+
// shape id.
|
|
38
|
+
if (representation.kind === 'native-record-ref' && representation.recursive !== undefined)
|
|
39
|
+
return false;
|
|
40
|
+
const identity = representationKey(representation);
|
|
41
|
+
const known = completed.get(identity);
|
|
42
|
+
if (known !== undefined)
|
|
43
|
+
return known;
|
|
44
|
+
if (visiting.has(identity))
|
|
45
|
+
return false;
|
|
46
|
+
visiting.add(identity);
|
|
47
|
+
let closed = false;
|
|
48
|
+
switch (representation.kind) {
|
|
49
|
+
case 'record':
|
|
50
|
+
closed =
|
|
51
|
+
representation.accessors.length === 0 &&
|
|
52
|
+
representation.fields.every((field) => !field.key.startsWith('sym(') && field.value.kind !== 'unresolved');
|
|
53
|
+
break;
|
|
54
|
+
case 'native-record-ref': {
|
|
55
|
+
// A stated native name is a host-owned layout. Its fields are not a
|
|
56
|
+
// sealed compiler fact, even when a deriver can describe the shape.
|
|
57
|
+
if (representation.native !== null || representation.recursive !== undefined || deriver === null)
|
|
58
|
+
break;
|
|
59
|
+
closed = hasClosedFixedLayout(deriver.layoutOf(representation.shapeId), deriver, classes, visiting, completed);
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
case 'class-ref': {
|
|
63
|
+
const layout = classes.get(representation.declaration);
|
|
64
|
+
// A class the lifecycle census published no layout for is still emitted.
|
|
65
|
+
// `targets/cpp/records.ts` renders its struct from the CARRIER'S OWN
|
|
66
|
+
// SHAPE (`recordLayoutOfShape`), standalone -- `classBaseLinks` walks the
|
|
67
|
+
// same layout map, so it has no row to give this struct a base clause --
|
|
68
|
+
// which makes that shape's fields the exact slots the object has. They
|
|
69
|
+
// are as compiler-owned and as fixed as any other class's, so a missing
|
|
70
|
+
// lifecycle row is evidence about the CENSUS, not about the storage.
|
|
71
|
+
// Asking the shape here asks the one authority the struct was rendered
|
|
72
|
+
// from, exactly as the `native-record-ref` case above already does.
|
|
73
|
+
// Answering "unproven" instead retained the unrestricted field protocol
|
|
74
|
+
// for a struct whose every slot the compiler itself chose: in the three.js app the
|
|
75
|
+
// carriers in this state are reached only through an INFERRED field type
|
|
76
|
+
// -- no live identifier spells the class, so reachability never opens its
|
|
77
|
+
// declaration -- and the generic protocol they kept was the single
|
|
78
|
+
// largest source of reflection boxing in the program.
|
|
79
|
+
if (layout === undefined) {
|
|
80
|
+
closed =
|
|
81
|
+
deriver !== null &&
|
|
82
|
+
hasClosedFixedLayout(deriver.layoutOf(representation.shapeId), deriver, classes, visiting, completed);
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
const instanceShape = layout?.instance;
|
|
86
|
+
const shape = deriver !== null && instanceShape?.kind === 'class-ref' ? deriver.layoutOf(instanceShape.shapeId) : null;
|
|
87
|
+
// Parameter properties and inferred fields acquire their carrier during
|
|
88
|
+
// lowering. The earlier declaration can remain unrepresented after the
|
|
89
|
+
// physical census has published a complete, typed storage slot.
|
|
90
|
+
const fields = layout?.nativeStorage?.fields.map((field) => ({ key: field.key, value: field.value })) ??
|
|
91
|
+
layout?.fields.map((field) => ({ key: field.key, value: field.representation })) ??
|
|
92
|
+
[];
|
|
93
|
+
const unprovenAncestry = (() => {
|
|
94
|
+
const seen = new Set();
|
|
95
|
+
let current = representation.declaration;
|
|
96
|
+
while (current !== null && !seen.has(current)) {
|
|
97
|
+
seen.add(current);
|
|
98
|
+
const currentLayout = classes.get(current);
|
|
99
|
+
if (!currentLayout)
|
|
100
|
+
return true;
|
|
101
|
+
if (currentLayout.nativeBase !== null)
|
|
102
|
+
return true;
|
|
103
|
+
current = currentLayout.base;
|
|
104
|
+
}
|
|
105
|
+
return false;
|
|
106
|
+
})();
|
|
107
|
+
closed =
|
|
108
|
+
layout !== undefined &&
|
|
109
|
+
layout.nativeBase === null &&
|
|
110
|
+
!unprovenAncestry &&
|
|
111
|
+
shape?.kind === 'record' &&
|
|
112
|
+
shape.fields.every((field) => !field.key.startsWith('sym(') && field.value.kind !== 'unresolved') &&
|
|
113
|
+
fields.every((field) => !field.key.startsWith('sym(') &&
|
|
114
|
+
field.value !== null &&
|
|
115
|
+
// Slot eligibility is independent from the nested carrier's own
|
|
116
|
+
// reflection demand. A typed Array/Map/callable field is still
|
|
117
|
+
// a sealed native slot; its child surface is censused separately
|
|
118
|
+
// through directChildrenOf and must not force this class's generic
|
|
119
|
+
// field protocol to remain available.
|
|
120
|
+
field.value.kind !== 'unresolved');
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
// An Array's own indexed storage (`length`, holes, index reads/writes) is
|
|
124
|
+
// deliberately NOT what this checks -- that is served entirely by
|
|
125
|
+
// `native-array-transport.ts`'s dedicated recipes, independent of this
|
|
126
|
+
// proof. What is left is the `extension`: the closed, typed field set an
|
|
127
|
+
// interface like `NodeArray<T>` adds on top of `Array<T>`
|
|
128
|
+
// (`representation/model.ts`'s own doc on `extension`). A plain array
|
|
129
|
+
// (`extension === null`) adds none, so it is trivially closed; an
|
|
130
|
+
// extended one is closed on exactly the same terms a `record`'s fields
|
|
131
|
+
// are, above. `element` must still have an actual carrier -- lattice
|
|
132
|
+
// bottom here is a failed derivation, not a legitimate payload, exactly
|
|
133
|
+
// as an unresolved record field is refused above. `recursive` is excluded
|
|
134
|
+
// for the same reason the `native-record-ref` case excludes it before
|
|
135
|
+
// touching the cache: a recursive array's `representationKey` collapses
|
|
136
|
+
// to `recursive(type,container,ownership)` (`representation/model.ts`'s
|
|
137
|
+
// `buildRepresentationKey`), which drops `extension`/`element` entirely,
|
|
138
|
+
// so a `true` cached under that identity would not actually have come
|
|
139
|
+
// from checking THIS array's own fields.
|
|
140
|
+
case 'array-object':
|
|
141
|
+
closed =
|
|
142
|
+
representation.recursive === undefined &&
|
|
143
|
+
representation.element.kind !== 'unresolved' &&
|
|
144
|
+
(representation.extension === null ||
|
|
145
|
+
representation.extension.every((field) => !field.key.startsWith('sym(') && field.value.kind !== 'unresolved'));
|
|
146
|
+
break;
|
|
147
|
+
// A dictionary IS its index -- `interface StringCounts { [key: string]:
|
|
148
|
+
// number }` names no member at all -- so it is the degenerate case of
|
|
149
|
+
// `record-with-index` with an empty `fields` array, and the same "key
|
|
150
|
+
// enumeration consumes the protocol, not the values stored in it"
|
|
151
|
+
// argument that admits that sidecar (see `hasNativePropertyLayout`'s own
|
|
152
|
+
// doc, and `nativeDictionaryTransportOf` for the per-operation half of the
|
|
153
|
+
// same proof) applies here with nothing else left to check. `recursive`
|
|
154
|
+
// is excluded for the identical key-collapsing reason given at
|
|
155
|
+
// `array-object` above.
|
|
156
|
+
case 'dictionary':
|
|
157
|
+
closed = representation.recursive === undefined && representation.value.kind !== 'unresolved';
|
|
158
|
+
break;
|
|
159
|
+
// `Map`/`Set`/`WeakMap`/`WeakSet` are read and written through `get`/
|
|
160
|
+
// `set`/`has`/`delete` METHOD CALLS, not ordinary property gets -- an
|
|
161
|
+
// unmodified instance has ZERO enumerable own data properties for
|
|
162
|
+
// `Object.keys`/`for`-`in` to find, and a program typed against a plain
|
|
163
|
+
// `Map<K, V>` is refused by the checker for `someMap.x = 1` the same way
|
|
164
|
+
// it is for a plain array or dictionary. The own-field surface this proof
|
|
165
|
+
// covers is therefore vacuously empty no matter what `key`/`value` carry;
|
|
166
|
+
// `recursive` is excluded for the same key-collapsing reason as the two
|
|
167
|
+
// cases above.
|
|
168
|
+
case 'keyed-collection':
|
|
169
|
+
closed =
|
|
170
|
+
representation.recursive === undefined &&
|
|
171
|
+
representation.key.kind !== 'unresolved' &&
|
|
172
|
+
(representation.value === null || representation.value.kind !== 'unresolved');
|
|
173
|
+
break;
|
|
174
|
+
// Left unproven, deliberately:
|
|
175
|
+
// - `native-handle`: a host-declared protocol (`Math`, `Date`, an
|
|
176
|
+
// embedder type, ...) whose member set lives in an external plugin
|
|
177
|
+
// manifest this function has no access to, exactly like a
|
|
178
|
+
// `native-record-ref` carrying a stated `native` name above. There is
|
|
179
|
+
// no field list here to check for symbol keys or unresolved values, so
|
|
180
|
+
// there is nothing to prove -- a host name is not a sealed compiler
|
|
181
|
+
// fact any more for a handle than it is for a record reference.
|
|
182
|
+
// - `optional`, `tagged-union`, `borrowed-ref`: wrapper kinds, not
|
|
183
|
+
// objects. `objectSurfacesOf` (`reflection-demand.ts`) already unwraps
|
|
184
|
+
// every one of these before this function is ever asked about a
|
|
185
|
+
// "surface", and neither of this function's own recursive callers
|
|
186
|
+
// (`native-record-ref`, `class-ref` above) can hand one back from
|
|
187
|
+
// `deriver.layoutOf`: both name an OBJECT shape, never a union or an
|
|
188
|
+
// optional value. Proving one closed here would also be the wrong
|
|
189
|
+
// question -- "closed" has to mean something about the payload it
|
|
190
|
+
// unwraps to, and unwrapping first (as every actual caller does) already
|
|
191
|
+
// gives that an honest answer.
|
|
192
|
+
// - `native-sequence`, `dense-buffer`: compiler/runtime-private storage
|
|
193
|
+
// with no JavaScript identity and no source syntax a program could ever
|
|
194
|
+
// name as a class's or interface's own shape, so `deriver.layoutOf`
|
|
195
|
+
// cannot produce either one here either.
|
|
196
|
+
default:
|
|
197
|
+
break;
|
|
198
|
+
}
|
|
199
|
+
visiting.delete(identity);
|
|
200
|
+
completed.set(identity, closed);
|
|
201
|
+
return closed;
|
|
202
|
+
};
|
|
203
|
+
/** A typed native index has a complete property protocol even though its key
|
|
204
|
+
* set changes at runtime. Key enumeration consumes that protocol, not the
|
|
205
|
+
* values stored in it. Keep fixed-slot proofs separate: an index must never
|
|
206
|
+
* qualify a record for a finite-field lookup or fixed-layout conversion.
|
|
207
|
+
*/
|
|
208
|
+
export const hasNativePropertyLayout = (representation, deriver, classes, visiting = new Set(), completed = new Map()) => {
|
|
209
|
+
if (representation.kind === 'native-record-ref' && representation.recursive !== undefined)
|
|
210
|
+
return false;
|
|
211
|
+
const identity = representationKey(representation);
|
|
212
|
+
const cached = completed.get(identity);
|
|
213
|
+
if (cached !== undefined)
|
|
214
|
+
return cached;
|
|
215
|
+
if (visiting.has(identity))
|
|
216
|
+
return false;
|
|
217
|
+
visiting.add(identity);
|
|
218
|
+
let complete = false;
|
|
219
|
+
if (representation.kind === 'record-with-index') {
|
|
220
|
+
complete =
|
|
221
|
+
representation.fields.every((field) => !field.key.startsWith('sym(') && field.value.kind !== 'unresolved') &&
|
|
222
|
+
representation.indexes.every((index) => (index.key === 'string' || index.key === 'number' || index.key === 'symbol') && index.value.kind !== 'unresolved');
|
|
223
|
+
}
|
|
224
|
+
else if (representation.kind === 'native-record-ref' && representation.native === null && deriver !== null) {
|
|
225
|
+
complete = hasNativePropertyLayout(deriver.layoutOf(representation.shapeId), deriver, classes, visiting, completed);
|
|
226
|
+
}
|
|
227
|
+
else
|
|
228
|
+
complete = hasClosedFixedLayout(representation, deriver, classes);
|
|
229
|
+
visiting.delete(identity);
|
|
230
|
+
completed.set(identity, complete);
|
|
231
|
+
return complete;
|
|
232
|
+
};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { ConversionCensus } from '../conversion/nodes.js';
|
|
2
|
+
import { type CallableAbi } from '../representation/model.js';
|
|
3
|
+
import type { ConstructOperation } from './model.js';
|
|
4
|
+
/**
|
|
5
|
+
* A construction through a host constructor whose frame is native end to end,
|
|
6
|
+
* or `null`.
|
|
7
|
+
*
|
|
8
|
+
* The rule the reflection census already applies to a sealed native call --
|
|
9
|
+
* the exact frame is the whole proof -- applied to `[[Construct]]`. Every
|
|
10
|
+
* received argument reaches its formal in native storage, so none is
|
|
11
|
+
* published as a `gea::Value`; and the result is a FRESH host object the
|
|
12
|
+
* construction mints in the carrier this site holds, so it publishes no
|
|
13
|
+
* object that existed before it. What the program later reads or writes
|
|
14
|
+
* through the new collection is a `get`/`set`/call of its own and is censused
|
|
15
|
+
* there, the same way a closed call's result is.
|
|
16
|
+
*
|
|
17
|
+
* three.js is the shape this exists for. `WebGLProperties` holds every
|
|
18
|
+
* texture/material/render-target bag in `new WeakMap()`, `WebGLRenderStates`
|
|
19
|
+
* its per-scene state arrays in `new Map()`, `WebGLShaderCache`,
|
|
20
|
+
* `WebGLGeometries`, `WebGLMorphtargets`, `WebGLTextures` and
|
|
21
|
+
* `WebGLObjects` the same. None of these callees states a construct
|
|
22
|
+
* convention (`native-handle(...;construct=-)`): their overload sets join
|
|
23
|
+
* into none, correctly. So each construction read as unknown and published
|
|
24
|
+
* the collection's key and value carriers -- the full field protocol of every
|
|
25
|
+
* record those caches hold -- while the emitted C++ was a bare
|
|
26
|
+
* `gea::makeRef<...>()`. The site's own frame comes from the overload the
|
|
27
|
+
* checker selected there (`ConstructOperation.hostFrame`); a handle that
|
|
28
|
+
* does join (`ErrorConstructor`'s `(message?: string, options?)`) is asked for
|
|
29
|
+
* its own convention, under which `new Error("...")`'s string argument
|
|
30
|
+
* reaches the `string | undefined` formal through the census's native
|
|
31
|
+
* optional injection.
|
|
32
|
+
*
|
|
33
|
+
* Why not `nativeCallFrameOf` (call-entry.ts): it confirms the frame against
|
|
34
|
+
* the convention the callee VALUE states through `abiOfCallee`, and a
|
|
35
|
+
* `native-handle` states only `construct` -- null exactly where this is
|
|
36
|
+
* needed. The argument half is the same `nativeArgumentsMatch` under the same
|
|
37
|
+
* `native-transfer` proof, and the receiver half has nothing to check: a
|
|
38
|
+
* construction's receiver is the object it allocates.
|
|
39
|
+
*
|
|
40
|
+
* Refused, and left to the unknown-construction boundary:
|
|
41
|
+
* - a callee that is not a bare `native-handle` -- `new this.constructor()`
|
|
42
|
+
* in three's `clone()` bodies holds a `dynamic[]`-rest constructor value;
|
|
43
|
+
* that is genuinely dynamic and belongs to the class paths, not here;
|
|
44
|
+
* - a construction whose new-target is not its own callee, which emission
|
|
45
|
+
* refuses as well (`emitConstruct`);
|
|
46
|
+
* - a rest frame, which this does not pack;
|
|
47
|
+
* - a `dynamic` result -- `new Proxy(...)` and `new Function(...)`, the two
|
|
48
|
+
* host constructions whose renderers box their arguments into the result;
|
|
49
|
+
* - a result carrier that is not the frame's, where the construction would
|
|
50
|
+
* first mint one object and then convert it;
|
|
51
|
+
* - any argument the census does not carry natively into its formal.
|
|
52
|
+
*/
|
|
53
|
+
export declare const nativeHostConstructionOf: (operation: ConstructOperation, conversions?: Pick<ConversionCensus, "nodeById">) => CallableAbi | null;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { representationKey } from '../representation/model.js';
|
|
2
|
+
import { hostConstructFrameOf, nativeArgumentsMatch } from './call-entry.js';
|
|
3
|
+
/**
|
|
4
|
+
* A construction through a host constructor whose frame is native end to end,
|
|
5
|
+
* or `null`.
|
|
6
|
+
*
|
|
7
|
+
* The rule the reflection census already applies to a sealed native call --
|
|
8
|
+
* the exact frame is the whole proof -- applied to `[[Construct]]`. Every
|
|
9
|
+
* received argument reaches its formal in native storage, so none is
|
|
10
|
+
* published as a `gea::Value`; and the result is a FRESH host object the
|
|
11
|
+
* construction mints in the carrier this site holds, so it publishes no
|
|
12
|
+
* object that existed before it. What the program later reads or writes
|
|
13
|
+
* through the new collection is a `get`/`set`/call of its own and is censused
|
|
14
|
+
* there, the same way a closed call's result is.
|
|
15
|
+
*
|
|
16
|
+
* three.js is the shape this exists for. `WebGLProperties` holds every
|
|
17
|
+
* texture/material/render-target bag in `new WeakMap()`, `WebGLRenderStates`
|
|
18
|
+
* its per-scene state arrays in `new Map()`, `WebGLShaderCache`,
|
|
19
|
+
* `WebGLGeometries`, `WebGLMorphtargets`, `WebGLTextures` and
|
|
20
|
+
* `WebGLObjects` the same. None of these callees states a construct
|
|
21
|
+
* convention (`native-handle(...;construct=-)`): their overload sets join
|
|
22
|
+
* into none, correctly. So each construction read as unknown and published
|
|
23
|
+
* the collection's key and value carriers -- the full field protocol of every
|
|
24
|
+
* record those caches hold -- while the emitted C++ was a bare
|
|
25
|
+
* `gea::makeRef<...>()`. The site's own frame comes from the overload the
|
|
26
|
+
* checker selected there (`ConstructOperation.hostFrame`); a handle that
|
|
27
|
+
* does join (`ErrorConstructor`'s `(message?: string, options?)`) is asked for
|
|
28
|
+
* its own convention, under which `new Error("...")`'s string argument
|
|
29
|
+
* reaches the `string | undefined` formal through the census's native
|
|
30
|
+
* optional injection.
|
|
31
|
+
*
|
|
32
|
+
* Why not `nativeCallFrameOf` (call-entry.ts): it confirms the frame against
|
|
33
|
+
* the convention the callee VALUE states through `abiOfCallee`, and a
|
|
34
|
+
* `native-handle` states only `construct` -- null exactly where this is
|
|
35
|
+
* needed. The argument half is the same `nativeArgumentsMatch` under the same
|
|
36
|
+
* `native-transfer` proof, and the receiver half has nothing to check: a
|
|
37
|
+
* construction's receiver is the object it allocates.
|
|
38
|
+
*
|
|
39
|
+
* Refused, and left to the unknown-construction boundary:
|
|
40
|
+
* - a callee that is not a bare `native-handle` -- `new this.constructor()`
|
|
41
|
+
* in three's `clone()` bodies holds a `dynamic[]`-rest constructor value;
|
|
42
|
+
* that is genuinely dynamic and belongs to the class paths, not here;
|
|
43
|
+
* - a construction whose new-target is not its own callee, which emission
|
|
44
|
+
* refuses as well (`emitConstruct`);
|
|
45
|
+
* - a rest frame, which this does not pack;
|
|
46
|
+
* - a `dynamic` result -- `new Proxy(...)` and `new Function(...)`, the two
|
|
47
|
+
* host constructions whose renderers box their arguments into the result;
|
|
48
|
+
* - a result carrier that is not the frame's, where the construction would
|
|
49
|
+
* first mint one object and then convert it;
|
|
50
|
+
* - any argument the census does not carry natively into its formal.
|
|
51
|
+
*/
|
|
52
|
+
export const nativeHostConstructionOf = (operation, conversions) => {
|
|
53
|
+
// The frame itself has one authority, shared with the census that publishes
|
|
54
|
+
// this construction's omitted-formal conversions.
|
|
55
|
+
const abi = hostConstructFrameOf(operation);
|
|
56
|
+
if (abi === null || abi.receiver !== null || abi.restFrom !== null)
|
|
57
|
+
return null;
|
|
58
|
+
const result = operation.result.representation;
|
|
59
|
+
if (result.kind === 'dynamic' || representationKey(result) !== representationKey(abi.result))
|
|
60
|
+
return null;
|
|
61
|
+
return nativeArgumentsMatch(abi, operation.arguments, conversions, 'native-transfer') ? abi : null;
|
|
62
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Representation } from '../representation/model.js';
|
|
2
|
+
import type { IrOperation } from './model.js';
|
|
3
|
+
/** A native key/presence query reads metadata without publishing field values. */
|
|
4
|
+
export declare const nativeKeyQueryOf: (operation: IrOperation, closedLayoutOf: (value: Representation) => boolean) => boolean;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/** A native key/presence query reads metadata without publishing field values. */
|
|
2
|
+
export const nativeKeyQueryOf = (operation, closedLayoutOf) => {
|
|
3
|
+
const closedReceiver = (value) => {
|
|
4
|
+
if (value.kind === 'optional')
|
|
5
|
+
return closedReceiver(value.payload);
|
|
6
|
+
if (value.kind === 'borrowed-ref')
|
|
7
|
+
return closedReceiver(value.referent);
|
|
8
|
+
if (value.kind === 'tagged-union')
|
|
9
|
+
return value.arms.length > 0 && value.arms.every((arm) => closedReceiver(arm.value));
|
|
10
|
+
// A proxy can execute a trap even when both its target and handler have
|
|
11
|
+
// native fixed layouts. Their layouts cannot prove this query harmless.
|
|
12
|
+
return value.kind !== 'proxy-object' && closedLayoutOf(value);
|
|
13
|
+
};
|
|
14
|
+
if (operation.kind === 'has-property') {
|
|
15
|
+
const key = operation.key.representation;
|
|
16
|
+
// Coercing an object-shaped key can execute user code independently of
|
|
17
|
+
// the receiver's presence protocol.
|
|
18
|
+
return (key.kind === 'string' || key.kind === 'symbol' || key.kind === 'scalar') && closedReceiver(operation.receiver.representation);
|
|
19
|
+
}
|
|
20
|
+
if (operation.kind === 'own-property-keys' || (operation.kind === 'get-iterator' && operation.protocol === 'enumerate'))
|
|
21
|
+
return closedReceiver(operation.receiver.representation);
|
|
22
|
+
if (operation.kind !== 'call' || !operation.intrinsicOwnKeys || operation.argumentsAreSpread)
|
|
23
|
+
return false;
|
|
24
|
+
const queried = operation.arguments[0]?.representation;
|
|
25
|
+
// Lowering authenticates this intrinsic. A same-shaped arbitrary callable
|
|
26
|
+
// has no such contract and must retain its ordinary call effects.
|
|
27
|
+
if (queried === undefined || !closedLayoutOf(queried))
|
|
28
|
+
return false;
|
|
29
|
+
// `Object.hasOwn(o, key)` is the one member of this family that takes a
|
|
30
|
+
// second argument -- the queried KEY, not a second object -- and
|
|
31
|
+
// `HasOwnProperty` runs `ToPropertyKey` on it (7.1.19) before ever
|
|
32
|
+
// consulting `o`'s own keys. An object-shaped key can execute arbitrary
|
|
33
|
+
// user code from that coercion alone, independently of whether `o`'s own
|
|
34
|
+
// layout is closed, so this asks the identical question `has-property`
|
|
35
|
+
// above already asks of its own key operand.
|
|
36
|
+
const key = operation.arguments[1]?.representation;
|
|
37
|
+
return key === undefined || key.kind === 'string' || key.kind === 'symbol' || key.kind === 'scalar';
|
|
38
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ConversionNodeId } from '../conversion/algebra.js';
|
|
2
|
+
import type { ConversionCensus } from '../conversion/nodes.js';
|
|
3
|
+
import { type Representation } from '../representation/model.js';
|
|
4
|
+
import type { MergeLiveArmRebuildOperation } from './model.js';
|
|
5
|
+
export interface NativeMergeTransport {
|
|
6
|
+
readonly source: string;
|
|
7
|
+
readonly target: string;
|
|
8
|
+
readonly arms: readonly {
|
|
9
|
+
readonly index: number;
|
|
10
|
+
readonly conversion: ConversionNodeId;
|
|
11
|
+
}[];
|
|
12
|
+
readonly absence?: ConversionNodeId;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Select only total native steps; branch admission and the live-arm set remain
|
|
16
|
+
* lowering's facts. A live arm may land in a bare (non-sum) target too:
|
|
17
|
+
* `undefined | null | X` merged to `X` keeps `X` by identity and stores `null`
|
|
18
|
+
* as the empty shared handle -- the selection planner's own `null -> Ref`
|
|
19
|
+
* step, which the sum planner cannot state for a target that is not a sum.
|
|
20
|
+
*/
|
|
21
|
+
export declare const nativeMergeTransportOf: (source: Representation, target: Representation, liveArms: readonly number[], sourceAbsenceLive: boolean, conversions: ConversionCensus) => NativeMergeTransport | undefined;
|
|
22
|
+
/** Validate the exact citations before certification or reflection can consume this contract. */
|
|
23
|
+
export declare const nativeMergeTransportMatches: (operation: MergeLiveArmRebuildOperation, conversions: Pick<ConversionCensus, "nodeById">) => boolean;
|
|
24
|
+
/** Avoiding reflection is weaker than retaining object identity: consume the actual selected payload proofs as well. */
|
|
25
|
+
export declare const nativeMergePayloadTransportMatches: (operation: MergeLiveArmRebuildOperation, conversions: Pick<ConversionCensus, "nodeById">) => boolean;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { nativeSumPlan } from '../conversion/native-sum.js';
|
|
2
|
+
import { nativeTotalSelectionStepOf } from '../conversion/native-selection.js';
|
|
3
|
+
import { nativePayloadTransportMatches } from '../conversion/native-payload-transport.js';
|
|
4
|
+
import { representationKey } from '../representation/model.js';
|
|
5
|
+
/**
|
|
6
|
+
* Select only total native steps; branch admission and the live-arm set remain
|
|
7
|
+
* lowering's facts. A live arm may land in a bare (non-sum) target too:
|
|
8
|
+
* `undefined | null | X` merged to `X` keeps `X` by identity and stores `null`
|
|
9
|
+
* as the empty shared handle -- the selection planner's own `null -> Ref`
|
|
10
|
+
* step, which the sum planner cannot state for a target that is not a sum.
|
|
11
|
+
*/
|
|
12
|
+
export const nativeMergeTransportOf = (source, target, liveArms, sourceAbsenceLive, conversions) => {
|
|
13
|
+
const payload = source.kind === 'optional' ? source.payload : source;
|
|
14
|
+
if (payload.kind !== 'tagged-union' || liveArms.length === 0)
|
|
15
|
+
return undefined;
|
|
16
|
+
const carried = (from) => nativeSumPlan(from, target) !== null || nativeTotalSelectionStepOf(from, target) !== null;
|
|
17
|
+
const sources = liveArms.map((index) => payload.arms[index]?.value);
|
|
18
|
+
if (sources.some((arm) => !arm || !carried(arm)))
|
|
19
|
+
return undefined;
|
|
20
|
+
const absence = source.kind === 'optional' && sourceAbsenceLive ? { kind: source.absence } : null;
|
|
21
|
+
if (absence && !carried(absence))
|
|
22
|
+
return undefined;
|
|
23
|
+
return {
|
|
24
|
+
source: representationKey(source),
|
|
25
|
+
target: representationKey(target),
|
|
26
|
+
arms: liveArms.map((index) => ({ index, conversion: conversions.nodeFor(payload.arms[index].value, target).id })),
|
|
27
|
+
...(absence ? { absence: conversions.nodeFor(absence, target).id } : {})
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
/** Validate the exact citations before certification or reflection can consume this contract. */
|
|
31
|
+
export const nativeMergeTransportMatches = (operation, conversions) => {
|
|
32
|
+
const recipe = operation.nativeTransport;
|
|
33
|
+
const source = operation.source.representation;
|
|
34
|
+
const payload = source.kind === 'optional' ? source.payload : source;
|
|
35
|
+
if (!recipe ||
|
|
36
|
+
payload.kind !== 'tagged-union' ||
|
|
37
|
+
recipe.source !== representationKey(source) ||
|
|
38
|
+
recipe.target !== representationKey(operation.result.representation) ||
|
|
39
|
+
recipe.arms.length === 0 ||
|
|
40
|
+
recipe.arms.length !== operation.liveArms.length)
|
|
41
|
+
return false;
|
|
42
|
+
const matches = (id, from) => {
|
|
43
|
+
const node = conversions.nodeById(id);
|
|
44
|
+
if (!node || representationKey(node.source) !== representationKey(from) || representationKey(node.target) !== recipe.target)
|
|
45
|
+
return false;
|
|
46
|
+
const capability = node.capability;
|
|
47
|
+
return (capability.kind === 'identity' ||
|
|
48
|
+
((capability.kind === 'atom' || capability.kind === 'static' || capability.kind === 'class-family') &&
|
|
49
|
+
capability.materializer.nativeFieldProtocol === 'unused'));
|
|
50
|
+
};
|
|
51
|
+
if (!recipe.arms.every((arm, ordinal) => arm.index === operation.liveArms[ordinal] &&
|
|
52
|
+
payload.arms[arm.index] !== undefined &&
|
|
53
|
+
matches(arm.conversion, payload.arms[arm.index].value)))
|
|
54
|
+
return false;
|
|
55
|
+
const needsAbsence = source.kind === 'optional' && operation.sourceAbsenceLive;
|
|
56
|
+
return needsAbsence ? recipe.absence !== undefined && matches(recipe.absence, { kind: source.absence }) : recipe.absence === undefined;
|
|
57
|
+
};
|
|
58
|
+
/** Avoiding reflection is weaker than retaining object identity: consume the actual selected payload proofs as well. */
|
|
59
|
+
export const nativeMergePayloadTransportMatches = (operation, conversions) => {
|
|
60
|
+
if (!nativeMergeTransportMatches(operation, conversions))
|
|
61
|
+
return false;
|
|
62
|
+
const recipe = operation.nativeTransport;
|
|
63
|
+
const source = operation.source.representation;
|
|
64
|
+
const payload = source.kind === 'optional' ? source.payload : source;
|
|
65
|
+
if (payload.kind !== 'tagged-union')
|
|
66
|
+
return false;
|
|
67
|
+
const target = operation.result.representation;
|
|
68
|
+
return (recipe.arms.every((arm) => nativePayloadTransportMatches(payload.arms[arm.index].value, target, conversions.nodeById(arm.conversion))) &&
|
|
69
|
+
(recipe.absence === undefined ||
|
|
70
|
+
(source.kind === 'optional' && nativePayloadTransportMatches({ kind: source.absence }, target, conversions.nodeById(recipe.absence)))));
|
|
71
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { RepresentationDeriver } from '../representation/derive.js';
|
|
2
|
+
import { type Representation } from '../representation/model.js';
|
|
3
|
+
import { type ConversionCensus } from '../conversion/nodes.js';
|
|
4
|
+
import type { IrOperation } from './model.js';
|
|
5
|
+
/** Runtime identity/numeric keys on a native shared record can use its
|
|
6
|
+
* generated property-presence protocol without reflecting fixed payloads. */
|
|
7
|
+
export declare const nativeRecordIndexHasPropertyOf: (deriver: RepresentationDeriver, receiver: Representation, key: Representation) => boolean;
|
|
8
|
+
/** A disjoint typed index never selects a fixed-field protocol. The installed
|
|
9
|
+
* value conversion must independently prove native payload transport; a key
|
|
10
|
+
* domain proof alone says nothing about an adapting or dynamic value. */
|
|
11
|
+
export declare const nativeRecordIndexTransportOf: (operation: IrOperation, deriver: RepresentationDeriver | null, conversions: Pick<ConversionCensus, "nodeById"> | undefined, constantKey: string | null) => boolean;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { representationKey } from '../representation/model.js';
|
|
2
|
+
import { conversionNodeIdOf } from '../conversion/nodes.js';
|
|
3
|
+
import { nativePayloadTransportMatches } from '../conversion/native-payload-transport.js';
|
|
4
|
+
import { disjointNativeRecordIndexOf, nativeRecordIndexReadCarrierOf } from './native-record-index.js';
|
|
5
|
+
/** Runtime identity/numeric keys on a native shared record can use its
|
|
6
|
+
* generated property-presence protocol without reflecting fixed payloads. */
|
|
7
|
+
export const nativeRecordIndexHasPropertyOf = (deriver, receiver, key) => 'ownership' in receiver &&
|
|
8
|
+
receiver.ownership === 'shared-refcount' &&
|
|
9
|
+
(key.kind === 'symbol' || (key.kind === 'scalar' && key.domain === 'number')) &&
|
|
10
|
+
disjointNativeRecordIndexOf(deriver, receiver, key) !== null;
|
|
11
|
+
/** A disjoint typed index never selects a fixed-field protocol. The installed
|
|
12
|
+
* value conversion must independently prove native payload transport; a key
|
|
13
|
+
* domain proof alone says nothing about an adapting or dynamic value. */
|
|
14
|
+
export const nativeRecordIndexTransportOf = (operation, deriver, conversions, constantKey) => {
|
|
15
|
+
if (!deriver ||
|
|
16
|
+
(operation.kind !== 'get' &&
|
|
17
|
+
operation.kind !== 'set' &&
|
|
18
|
+
operation.kind !== 'define-own-property' &&
|
|
19
|
+
operation.kind !== 'delete' &&
|
|
20
|
+
operation.kind !== 'has-property'))
|
|
21
|
+
return false;
|
|
22
|
+
const index = disjointNativeRecordIndexOf(deriver, operation.receiver.representation, operation.key.representation, constantKey ?? undefined);
|
|
23
|
+
if (!index)
|
|
24
|
+
return false;
|
|
25
|
+
if (operation.kind === 'delete' || operation.kind === 'has-property')
|
|
26
|
+
return true;
|
|
27
|
+
const source = operation.kind === 'get' ? nativeRecordIndexReadCarrierOf(index, operation.result.representation) : operation.value.representation;
|
|
28
|
+
const target = operation.kind === 'get' ? operation.result.representation : index.value;
|
|
29
|
+
const native = (value) => value.kind !== 'dynamic' && value.kind !== 'unresolved';
|
|
30
|
+
return (native(source) &&
|
|
31
|
+
native(target) &&
|
|
32
|
+
(representationKey(source) === representationKey(target) ||
|
|
33
|
+
nativePayloadTransportMatches(source, target, conversions?.nodeById(conversionNodeIdOf(source, target)))));
|
|
34
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { RepresentationDeriver } from '../representation/derive.js';
|
|
2
|
+
import { type RecordIndexKey, type RecordIndexSidecar, type Representation } from '../representation/model.js';
|
|
3
|
+
/** Whether a native index domain can select a fixed slot. Symbol identities
|
|
4
|
+
* never alias string keys; numeric indexes use canonical Number::toString. */
|
|
5
|
+
export declare const recordIndexDomainContainsKey: (domain: RecordIndexKey, key: string) => boolean;
|
|
6
|
+
/** A typed sidecar whose key cannot alias any fixed field. Both transport
|
|
7
|
+
* emission and protocol demand consume this proof; absence remains an entry
|
|
8
|
+
* lookup fact, not an implicit promise that the key exists. */
|
|
9
|
+
export declare const disjointNativeRecordIndexOf: (deriver: RepresentationDeriver, receiver: Representation, key: Representation, constantText?: string) => RecordIndexSidecar | null;
|
|
10
|
+
/** An erased read recovering undefined must test entry presence before reading
|
|
11
|
+
* the native slot. Keep that lookup carrier shared with reflection demand. */
|
|
12
|
+
export declare const nativeRecordIndexReadCarrierOf: (index: RecordIndexSidecar, result: Representation) => Representation;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { isCanonicalNumberPropertyKeyText, recordIndexForKeyCarrier } from '../representation/model.js';
|
|
2
|
+
import { symbolPropertyKeyDeclarationOf } from '../semantics/model/structural-types.js';
|
|
3
|
+
/** Whether a native index domain can select a fixed slot. Symbol identities
|
|
4
|
+
* never alias string keys; numeric indexes use canonical Number::toString. */
|
|
5
|
+
export const recordIndexDomainContainsKey = (domain, key) => {
|
|
6
|
+
const symbol = symbolPropertyKeyDeclarationOf(key) !== null;
|
|
7
|
+
return domain === 'symbol' ? symbol : !symbol && (domain === 'string' || isCanonicalNumberPropertyKeyText(key));
|
|
8
|
+
};
|
|
9
|
+
/** A typed sidecar whose key cannot alias any fixed field. Both transport
|
|
10
|
+
* emission and protocol demand consume this proof; absence remains an entry
|
|
11
|
+
* lookup fact, not an implicit promise that the key exists. */
|
|
12
|
+
export const disjointNativeRecordIndexOf = (deriver, receiver, key, constantText) => {
|
|
13
|
+
const layout = receiver.kind === 'native-record-ref' && receiver.native === null ? deriver.layoutOf(receiver.shapeId) : receiver;
|
|
14
|
+
if (layout.kind !== 'record-with-index')
|
|
15
|
+
return null;
|
|
16
|
+
const index = recordIndexForKeyCarrier(layout.indexes, key, constantText);
|
|
17
|
+
return index && layout.fields.every((field) => !recordIndexDomainContainsKey(index.key, field.key)) ? index : null;
|
|
18
|
+
};
|
|
19
|
+
/** An erased read recovering undefined must test entry presence before reading
|
|
20
|
+
* the native slot. Keep that lookup carrier shared with reflection demand. */
|
|
21
|
+
export const nativeRecordIndexReadCarrierOf = (index, result) => {
|
|
22
|
+
if (result.kind !== 'optional' || result.absence !== 'undefined')
|
|
23
|
+
return index.value;
|
|
24
|
+
if (index.value.kind === 'optional' && index.value.absence === 'undefined')
|
|
25
|
+
return index.value;
|
|
26
|
+
return { kind: 'optional', payload: index.value, absence: 'undefined' };
|
|
27
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { RecordField } from '../representation/model.js';
|
|
2
|
+
import type { RepresentationDeriver } from '../representation/derive.js';
|
|
3
|
+
import type { CallOperation } from './model.js';
|
|
4
|
+
/** Exact native field transport shared by Reflect emission and protocol demand. */
|
|
5
|
+
export declare const nativeReflectFieldTransportOf: (operation: CallOperation, field: RecordField | null, deriver?: RepresentationDeriver | null) => "native-read" | "native-write" | null;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { representationKey } from '../representation/model.js';
|
|
2
|
+
import { recordFieldsOfShape } from '../projection/fields.js';
|
|
3
|
+
/** Exact native field transport shared by Reflect emission and protocol demand. */
|
|
4
|
+
export const nativeReflectFieldTransportOf = (operation, field, deriver = null) => {
|
|
5
|
+
if (!field || field.value.kind === 'dynamic' || operation.argumentsAreSpread)
|
|
6
|
+
return null;
|
|
7
|
+
if (operation.intrinsicReflection === 'getOwnPropertyDescriptor' && operation.result) {
|
|
8
|
+
const result = operation.result.representation;
|
|
9
|
+
const descriptor = result.kind === 'optional' ? result.payload : result;
|
|
10
|
+
const fields = descriptor.kind === 'record' || descriptor.kind === 'record-with-index'
|
|
11
|
+
? descriptor.fields
|
|
12
|
+
: descriptor.kind === 'native-record-ref' && deriver
|
|
13
|
+
? recordFieldsOfShape(deriver, descriptor.shapeId)
|
|
14
|
+
: null;
|
|
15
|
+
const value = fields?.find((item) => item.key === 'value');
|
|
16
|
+
// A descriptor reports absence separately from its typed value. Unlike
|
|
17
|
+
// Reflect.get, deleting the source field does not force its value through
|
|
18
|
+
// a dynamic carrier or require the field to be permanently present.
|
|
19
|
+
if (value && representationKey(value.value) === representationKey(field.value))
|
|
20
|
+
return 'native-read';
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
if (!field.required)
|
|
24
|
+
return null;
|
|
25
|
+
if (operation.intrinsicReflection === 'get' &&
|
|
26
|
+
operation.result &&
|
|
27
|
+
representationKey(operation.result.representation) === representationKey(field.value))
|
|
28
|
+
return 'native-read';
|
|
29
|
+
const written = operation.arguments[2];
|
|
30
|
+
if (operation.intrinsicReflection === 'set' && written && representationKey(written.representation) === representationKey(field.value))
|
|
31
|
+
return 'native-write';
|
|
32
|
+
return null;
|
|
33
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { IrOperation } from './model.js';
|
|
2
|
+
/** The sequence/generator distinction is published by representation/publish.ts.
|
|
3
|
+
* A sequence advances native storage; a generator can execute arbitrary code.
|
|
4
|
+
* This is an effect query shared by provenance and reflection, not an admission
|
|
5
|
+
* rule: lowering and certification still validate the complete cursor recipe.
|
|
6
|
+
*/
|
|
7
|
+
export declare const nativeSequenceTransportOf: (operation: IrOperation) => boolean;
|