@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,123 @@
|
|
|
1
|
+
import type { DeclarationId, FunctionId } from '../identity/ids.js';
|
|
2
|
+
import type { RepresentationDeriver } from '../representation/derive.js';
|
|
3
|
+
import type { CallableAbi, RecordAccessor, RecordField, RecordIndexSidecar, Representation } from '../representation/model.js';
|
|
4
|
+
import type { RecordLayoutPolicy } from '../representation/policies.js';
|
|
5
|
+
import type { ClassAccessor, ClassFieldOwnership, ClassLayout, ClassMethod } from './classes.js';
|
|
6
|
+
/**
|
|
7
|
+
* What a receiver's own declared shape says one member holds.
|
|
8
|
+
*
|
|
9
|
+
* These were the printer's (`targets/cpp/records.ts`, `class-layout.ts`),
|
|
10
|
+
* and every field store, field initializer and class member dispatch asked
|
|
11
|
+
* them there. The slot census asks the identical question before the IR is
|
|
12
|
+
* built, so the answer lives here, below both: a census that read a field's
|
|
13
|
+
* carrier one way and a printer that read it another would be two authorities
|
|
14
|
+
* over one storage contract. The printer re-exports these; nothing in it
|
|
15
|
+
* defines a second copy.
|
|
16
|
+
*/
|
|
17
|
+
export interface RecordLayoutView {
|
|
18
|
+
readonly fields: readonly RecordField[];
|
|
19
|
+
readonly indexes: readonly RecordIndexSidecar[];
|
|
20
|
+
}
|
|
21
|
+
/** The record layout a shape derives to, or `null` when it carries none. */
|
|
22
|
+
export declare const recordLayoutOfShapeId: (deriver: RepresentationDeriver, shapeId: string) => RecordLayoutView | null;
|
|
23
|
+
/** A shape's index sidecars, in declaration order; empty for a shape with none or with no record layout. */
|
|
24
|
+
export declare const recordIndexesOfShape: (deriver: RepresentationDeriver, shapeId: string) => readonly RecordIndexSidecar[];
|
|
25
|
+
/**
|
|
26
|
+
* The one layout policy every reader of record shapes shares: the conversion
|
|
27
|
+
* registry (`targets/cpp/conversions.ts`, through `compiler.ts`) and the
|
|
28
|
+
* printer's own context. Two constructions of this were two chances to
|
|
29
|
+
* answer "what does this shape hold" differently.
|
|
30
|
+
*/
|
|
31
|
+
export declare const recordLayoutPolicyOf: (deriver: RepresentationDeriver, classes: ReadonlyMap<DeclarationId, ClassLayout>) => RecordLayoutPolicy;
|
|
32
|
+
/** A shape's own field list, or `null` when it carries no record layout. */
|
|
33
|
+
export declare const recordFieldsOfShape: (deriver: RepresentationDeriver, shapeId: string) => readonly RecordField[] | null;
|
|
34
|
+
/**
|
|
35
|
+
* A shape's own accessor list, or `null` when it carries no record layout (or
|
|
36
|
+
* derives to a `dictionary`/`record-with-index` carrier, neither of which
|
|
37
|
+
* preserves accessors).
|
|
38
|
+
*/
|
|
39
|
+
export declare const recordAccessorsOfShape: (deriver: RepresentationDeriver, shapeId: string) => readonly RecordAccessor[] | null;
|
|
40
|
+
/**
|
|
41
|
+
* Whether a `class-ref` field is inherited from a NATIVE base rather than
|
|
42
|
+
* declared by any struct this compiler emits. Such a field has a carrier
|
|
43
|
+
* (read through `declaredRecordFieldOf`) but no presence bit of its own.
|
|
44
|
+
*/
|
|
45
|
+
export declare const nativeBaseFieldOf: (deriver: RepresentationDeriver, representation: Representation, fieldName: string, classes?: ReadonlyMap<DeclarationId, ClassLayout> | null) => boolean;
|
|
46
|
+
/**
|
|
47
|
+
* The declared field one receiver carrier stores under a name: `record` and
|
|
48
|
+
* `record-with-index` carry their fields inline; `native-record-ref` names a
|
|
49
|
+
* shape; a `class-ref` is read through the shape its struct was built from,
|
|
50
|
+
* base-first, so a field found up the chain names the base's storage.
|
|
51
|
+
*/
|
|
52
|
+
export declare const declaredRecordFieldOf: (deriver: RepresentationDeriver, representation: Representation, fieldName: string, classes?: ReadonlyMap<DeclarationId, ClassLayout> | null) => RecordField | null;
|
|
53
|
+
export declare const declaredFieldRepresentationOf: (deriver: RepresentationDeriver, representation: Representation, fieldName: string, classes?: ReadonlyMap<DeclarationId, ClassLayout> | null) => Representation | null;
|
|
54
|
+
/** The emitted class that physically owns a field, including redeclarations of an inherited slot. */
|
|
55
|
+
export declare const classFieldStorageOwnerOf: (deriver: RepresentationDeriver, representation: Representation, fieldName: string, classes: ReadonlyMap<DeclarationId, ClassLayout>) => DeclarationId | null;
|
|
56
|
+
/**
|
|
57
|
+
* Published overlay ownership facts, optionally narrowed to one property key.
|
|
58
|
+
*
|
|
59
|
+
* The facts are computed by `projectClasses` after specialization collapse;
|
|
60
|
+
* this accessor is intentionally a read of that sealed census rather than a
|
|
61
|
+
* second walk that infers physical ownership from a target's record layout.
|
|
62
|
+
*/
|
|
63
|
+
export declare const classFieldOwnershipOf: (classes: ReadonlyMap<DeclarationId, ClassLayout>, key?: string | null) => readonly ClassFieldOwnership[];
|
|
64
|
+
/**
|
|
65
|
+
* The carrier a native property read produces before use-site narrowing.
|
|
66
|
+
* Getter calls produce their ABI result. A fixed slot with an undefined tag
|
|
67
|
+
* can also produce its storage carrier directly: the separate presence bit
|
|
68
|
+
* has an exact absent value in that carrier, including after deletion.
|
|
69
|
+
* Other storage carriers still need a read recipe that joins absence before
|
|
70
|
+
* narrowing; using a plain payload here would erase a deleted property's
|
|
71
|
+
* undefined result.
|
|
72
|
+
*/
|
|
73
|
+
export declare const propertyReadResultRepresentationOf: (deriver: RepresentationDeriver, classes: ReadonlyMap<DeclarationId, ClassLayout>, abis: ReadonlyMap<FunctionId, CallableAbi>, receiver: Representation, key: string) => Representation | null;
|
|
74
|
+
export type ClassMemberSite = {
|
|
75
|
+
readonly kind: 'field';
|
|
76
|
+
readonly owner: DeclarationId;
|
|
77
|
+
} | {
|
|
78
|
+
readonly kind: 'accessor';
|
|
79
|
+
readonly owner: DeclarationId;
|
|
80
|
+
readonly accessor: ClassAccessor;
|
|
81
|
+
} | {
|
|
82
|
+
readonly kind: 'method';
|
|
83
|
+
readonly owner: DeclarationId;
|
|
84
|
+
readonly method: ClassMethod;
|
|
85
|
+
} | {
|
|
86
|
+
readonly kind: 'unknown-class';
|
|
87
|
+
readonly owner: DeclarationId;
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* Which of several same-key methods a site means.
|
|
91
|
+
*
|
|
92
|
+
* One key can name more than one body: a GENERIC method is monomorphized per
|
|
93
|
+
* type argument, and every copy installs itself under the method's own name
|
|
94
|
+
* (`map<R>` at `R = number` and at `R = string` are two `ClassMethod`s keyed
|
|
95
|
+
* `"map"`). Taking the first unconditionally is what made
|
|
96
|
+
* `n.map((v) => 'x!')` call the number-returning body and then refuse to
|
|
97
|
+
* convert its callback into that body's parameter slot. The site knows which
|
|
98
|
+
* one it means -- its callee read carries that copy's own convention -- so it
|
|
99
|
+
* says so here, and a site with no opinion keeps getting the first exactly as
|
|
100
|
+
* before.
|
|
101
|
+
*/
|
|
102
|
+
export type ClassMethodPreference = (method: ClassMethod) => boolean;
|
|
103
|
+
/** Which instance member a key names on a class, walking its bases; `null` when none declares it. */
|
|
104
|
+
export declare const classMemberOf: (classes: ReadonlyMap<DeclarationId, ClassLayout>, declaration: DeclarationId, key: string, prefer?: ClassMethodPreference) => ClassMemberSite | null;
|
|
105
|
+
/** The one physical slot shared by own shadows of an inherited method. */
|
|
106
|
+
export declare const classMethodOverrideOf: (classes: ReadonlyMap<DeclarationId, ClassLayout>, declaration: DeclarationId, key: string) => RecordField | null;
|
|
107
|
+
/** A super lookup still observes replacement of the selected prototype method. */
|
|
108
|
+
export declare const classPrototypeMethodMutableOf: (classes: ReadonlyMap<DeclarationId, ClassLayout>, declaration: DeclarationId, key: string) => boolean;
|
|
109
|
+
/** A base-typed ordinary receiver may carry any reachable derived prototype. */
|
|
110
|
+
export declare const classPrototypeMethodFamilyMutableOf: (classes: ReadonlyMap<DeclarationId, ClassLayout>, declaration: DeclarationId, key: string) => boolean;
|
|
111
|
+
/** The static counterpart of `classMemberOf`. */
|
|
112
|
+
export declare const classStaticMemberOf: (classes: ReadonlyMap<DeclarationId, ClassLayout>, declaration: DeclarationId, key: string) => ClassMemberSite | null;
|
|
113
|
+
/**
|
|
114
|
+
* Every accessor body a reachable record shape names.
|
|
115
|
+
*
|
|
116
|
+
* `buildCaptureIndex` needs it before it can decide which bodies get an
|
|
117
|
+
* environment, and an accessor body is reached only through the shape that
|
|
118
|
+
* names it -- there is no `allocate-callable` for one, which is exactly why it
|
|
119
|
+
* has no environment today. Walked with `walkRepresentation`, the model's own
|
|
120
|
+
* shared walk, so this cannot cover a different carrier set than the guards
|
|
121
|
+
* built on the same walk do.
|
|
122
|
+
*/
|
|
123
|
+
export declare const recordAccessorBodiesOf: (representations: readonly Representation[], deriver: RepresentationDeriver) => ReadonlySet<FunctionId>;
|
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
import { walkRepresentation } from '../representation/model.js';
|
|
2
|
+
import { dynamicFieldAbsencePolicy } from '../representation/field-descriptor-policy.js';
|
|
3
|
+
/** The record layout a shape derives to, or `null` when it carries none. */
|
|
4
|
+
export const recordLayoutOfShapeId = (deriver, shapeId) => {
|
|
5
|
+
const carrier = deriver.layoutOf(shapeId);
|
|
6
|
+
if (carrier.kind === 'record')
|
|
7
|
+
return { fields: carrier.fields, indexes: [] };
|
|
8
|
+
if (carrier.kind === 'record-with-index')
|
|
9
|
+
return { fields: carrier.fields, indexes: carrier.indexes };
|
|
10
|
+
return null;
|
|
11
|
+
};
|
|
12
|
+
/** A shape's index sidecars, in declaration order; empty for a shape with none or with no record layout. */
|
|
13
|
+
export const recordIndexesOfShape = (deriver, shapeId) => recordLayoutOfShapeId(deriver, shapeId)?.indexes ?? [];
|
|
14
|
+
/**
|
|
15
|
+
* The one layout policy every reader of record shapes shares: the conversion
|
|
16
|
+
* registry (`targets/cpp/conversions.ts`, through `compiler.ts`) and the
|
|
17
|
+
* printer's own context. Two constructions of this were two chances to
|
|
18
|
+
* answer "what does this shape hold" differently.
|
|
19
|
+
*/
|
|
20
|
+
export const recordLayoutPolicyOf = (deriver, classes) => {
|
|
21
|
+
const nativeFields = new Map([...classes.values()].flatMap((layout) => layout.instance?.kind === 'class-ref' && layout.nativeStorage !== undefined
|
|
22
|
+
? [[layout.instance.shapeId, layout.nativeStorage.fields]]
|
|
23
|
+
: []));
|
|
24
|
+
const fieldsOf = (shapeId) => nativeFields.get(shapeId) ?? recordFieldsOfShape(deriver, shapeId);
|
|
25
|
+
return {
|
|
26
|
+
forShape: (shapeId) => fieldsOf(shapeId),
|
|
27
|
+
indexesForShape: (shapeId) => recordIndexesOfShape(deriver, shapeId),
|
|
28
|
+
accessorsForShape: (shapeId) => recordAccessorsOfShape(deriver, shapeId),
|
|
29
|
+
plainFieldsForShape: (shapeId) => recordIndexesOfShape(deriver, shapeId).length === 0 && (recordAccessorsOfShape(deriver, shapeId) ?? []).length === 0
|
|
30
|
+
? fieldsOf(shapeId)
|
|
31
|
+
: null,
|
|
32
|
+
classUninstantiable: (declaration) => classes.get(declaration)?.uninstantiable === true,
|
|
33
|
+
classMethodFor: (declaration, key) => {
|
|
34
|
+
const member = classMemberOf(classes, declaration, key);
|
|
35
|
+
return member?.kind === 'method' && member.method.callable !== null;
|
|
36
|
+
},
|
|
37
|
+
// Whether a direct body call is SOUND, which is a different question from
|
|
38
|
+
// whether the member exists: a key some subclass overrides dispatches
|
|
39
|
+
// through the family's slot, and calling the resolved body outright would
|
|
40
|
+
// run the base's implementation for a derived instance. The scan is over
|
|
41
|
+
// the whole class table because the override may live anywhere below this
|
|
42
|
+
// class, and a family this cannot see is one it must not claim.
|
|
43
|
+
classDirectMethodFor: (declaration, key) => {
|
|
44
|
+
const member = classMemberOf(classes, declaration, key);
|
|
45
|
+
if (member?.kind !== 'method' || member.method.callable === null)
|
|
46
|
+
return null;
|
|
47
|
+
const carrier = member.method.representation;
|
|
48
|
+
if (carrier === undefined || !('abi' in carrier) || carrier.abi === null)
|
|
49
|
+
return null;
|
|
50
|
+
const abi = carrier.abi;
|
|
51
|
+
if (abi.parameters.length !== 0 || abi.restFrom !== null)
|
|
52
|
+
return null;
|
|
53
|
+
for (const [candidate, layout] of classes) {
|
|
54
|
+
if (candidate === member.owner)
|
|
55
|
+
continue;
|
|
56
|
+
if (!layout.methods.some((method) => method.key === key))
|
|
57
|
+
continue;
|
|
58
|
+
const seen = new Set();
|
|
59
|
+
for (let base = layout.base; base !== null && !seen.has(base); base = classes.get(base)?.base ?? null) {
|
|
60
|
+
if (base === member.owner)
|
|
61
|
+
return null;
|
|
62
|
+
seen.add(base);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return { callable: member.method.callable, result: abi.result };
|
|
66
|
+
},
|
|
67
|
+
// The getter's published result, taken from the accessor the class layout
|
|
68
|
+
// carries -- NOT from the instance shape. That shape enumerates storage,
|
|
69
|
+
// and an accessor has none, so `record.accessors` is empty for every class
|
|
70
|
+
// body and a shape lookup answers `null` for exactly the members this
|
|
71
|
+
// exists to find.
|
|
72
|
+
classAccessorFor: (declaration, key) => {
|
|
73
|
+
const member = classMemberOf(classes, declaration, key);
|
|
74
|
+
if (member?.kind !== 'accessor' || member.accessor.getter === null)
|
|
75
|
+
return null;
|
|
76
|
+
const carrier = member.accessor.representation;
|
|
77
|
+
if (carrier === undefined || !('abi' in carrier) || carrier.abi === null)
|
|
78
|
+
return null;
|
|
79
|
+
// A getter takes no argument and yields a value; anything else under
|
|
80
|
+
// this key is not a member a record field can be built from.
|
|
81
|
+
const abi = carrier.abi;
|
|
82
|
+
return abi.parameters.length === 0 && abi.restFrom === null && abi.result.kind !== 'void' ? abi.result : null;
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
/** A shape's own field list, or `null` when it carries no record layout. */
|
|
87
|
+
export const recordFieldsOfShape = (deriver, shapeId) => recordLayoutOfShapeId(deriver, shapeId)?.fields ?? null;
|
|
88
|
+
/**
|
|
89
|
+
* A shape's own accessor list, or `null` when it carries no record layout (or
|
|
90
|
+
* derives to a `dictionary`/`record-with-index` carrier, neither of which
|
|
91
|
+
* preserves accessors).
|
|
92
|
+
*/
|
|
93
|
+
export const recordAccessorsOfShape = (deriver, shapeId) => {
|
|
94
|
+
const carrier = deriver.layoutOf(shapeId);
|
|
95
|
+
return carrier.kind === 'record' ? carrier.accessors : null;
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* Whether a `class-ref` field is inherited from a NATIVE base rather than
|
|
99
|
+
* declared by any struct this compiler emits. Such a field has a carrier
|
|
100
|
+
* (read through `declaredRecordFieldOf`) but no presence bit of its own.
|
|
101
|
+
*/
|
|
102
|
+
export const nativeBaseFieldOf = (deriver, representation, fieldName, classes = null) => {
|
|
103
|
+
if (representation.kind !== 'class-ref' || classes === null)
|
|
104
|
+
return false;
|
|
105
|
+
const owner = (declaration, seen) => {
|
|
106
|
+
if (seen.has(declaration))
|
|
107
|
+
return false;
|
|
108
|
+
seen.add(declaration);
|
|
109
|
+
const layout = classes.get(declaration);
|
|
110
|
+
if (layout === undefined)
|
|
111
|
+
return false;
|
|
112
|
+
if (layout.base !== null && owner(layout.base, seen))
|
|
113
|
+
return true;
|
|
114
|
+
if (layout.nativeBase !== null) {
|
|
115
|
+
const inherited = recordFieldsOfShape(deriver, layout.nativeBase.instance.shapeId)?.find((field) => field.key === fieldName);
|
|
116
|
+
if (inherited !== undefined)
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
return false;
|
|
120
|
+
};
|
|
121
|
+
return owner(representation.declaration, new Set());
|
|
122
|
+
};
|
|
123
|
+
/**
|
|
124
|
+
* The declared field one receiver carrier stores under a name: `record` and
|
|
125
|
+
* `record-with-index` carry their fields inline; `native-record-ref` names a
|
|
126
|
+
* shape; a `class-ref` is read through the shape its struct was built from,
|
|
127
|
+
* base-first, so a field found up the chain names the base's storage.
|
|
128
|
+
*/
|
|
129
|
+
export const declaredRecordFieldOf = (deriver, representation, fieldName, classes = null) => {
|
|
130
|
+
if (representation.kind === 'class-ref' && classes !== null) {
|
|
131
|
+
const override = classMethodOverrideOf(classes, representation.declaration, fieldName);
|
|
132
|
+
if (override)
|
|
133
|
+
return override;
|
|
134
|
+
const nativeStorage = classes.get(representation.declaration)?.nativeStorage;
|
|
135
|
+
if (nativeStorage !== undefined)
|
|
136
|
+
return nativeStorage.fields.find((field) => field.key === fieldName) ?? null;
|
|
137
|
+
const physicalField = (declaration, seen) => {
|
|
138
|
+
if (seen.has(declaration))
|
|
139
|
+
return null;
|
|
140
|
+
seen.add(declaration);
|
|
141
|
+
const layout = classes.get(declaration);
|
|
142
|
+
if (layout === undefined)
|
|
143
|
+
return null;
|
|
144
|
+
if (layout.base !== null) {
|
|
145
|
+
const inherited = physicalField(layout.base, seen);
|
|
146
|
+
if (inherited !== null)
|
|
147
|
+
return inherited;
|
|
148
|
+
}
|
|
149
|
+
if (layout.nativeBase !== null) {
|
|
150
|
+
const inherited = recordFieldsOfShape(deriver, layout.nativeBase.instance.shapeId)?.find((field) => field.key === fieldName) ?? null;
|
|
151
|
+
if (inherited !== null)
|
|
152
|
+
return inherited;
|
|
153
|
+
}
|
|
154
|
+
const instance = layout.instance;
|
|
155
|
+
if (instance === null || instance.kind !== 'class-ref')
|
|
156
|
+
return null;
|
|
157
|
+
return recordFieldsOfShape(deriver, instance.shapeId)?.find((field) => field.key === fieldName) ?? null;
|
|
158
|
+
};
|
|
159
|
+
return physicalField(representation.declaration, new Set());
|
|
160
|
+
}
|
|
161
|
+
const classShape = representation.kind === 'class-ref' ? (classes?.get(representation.declaration)?.instance ?? null) : null;
|
|
162
|
+
const shapeId = classShape !== null && classShape.kind === 'class-ref' && 'shapeId' in representation
|
|
163
|
+
? classShape.shapeId
|
|
164
|
+
: representation.shapeId;
|
|
165
|
+
const fields = representation.kind === 'record' || representation.kind === 'record-with-index'
|
|
166
|
+
? representation.fields
|
|
167
|
+
: (representation.kind === 'native-record-ref' || representation.kind === 'class-ref') && shapeId !== undefined
|
|
168
|
+
? recordFieldsOfShape(deriver, shapeId)
|
|
169
|
+
: null;
|
|
170
|
+
return fields?.find((field) => field.key === fieldName) ?? null;
|
|
171
|
+
};
|
|
172
|
+
export const declaredFieldRepresentationOf = (deriver, representation, fieldName, classes = null) => declaredRecordFieldOf(deriver, representation, fieldName, classes)?.value ?? null;
|
|
173
|
+
/** The emitted class that physically owns a field, including redeclarations of an inherited slot. */
|
|
174
|
+
export const classFieldStorageOwnerOf = (deriver, representation, fieldName, classes) => {
|
|
175
|
+
if (representation.kind !== 'class-ref' || nativeBaseFieldOf(deriver, representation, fieldName, classes))
|
|
176
|
+
return null;
|
|
177
|
+
if (declaredRecordFieldOf(deriver, representation, fieldName, classes) === null)
|
|
178
|
+
return null;
|
|
179
|
+
let owner = representation.declaration;
|
|
180
|
+
const seen = new Set();
|
|
181
|
+
while (!seen.has(owner)) {
|
|
182
|
+
seen.add(owner);
|
|
183
|
+
const layout = classes.get(owner);
|
|
184
|
+
if (!layout)
|
|
185
|
+
return null;
|
|
186
|
+
if (layout.base === null)
|
|
187
|
+
return owner;
|
|
188
|
+
const base = classes.get(layout.base);
|
|
189
|
+
if (!base?.instance)
|
|
190
|
+
return null;
|
|
191
|
+
if (declaredRecordFieldOf(deriver, base.instance, fieldName, classes) === null)
|
|
192
|
+
return owner;
|
|
193
|
+
owner = layout.base;
|
|
194
|
+
}
|
|
195
|
+
return null;
|
|
196
|
+
};
|
|
197
|
+
/**
|
|
198
|
+
* Published overlay ownership facts, optionally narrowed to one property key.
|
|
199
|
+
*
|
|
200
|
+
* The facts are computed by `projectClasses` after specialization collapse;
|
|
201
|
+
* this accessor is intentionally a read of that sealed census rather than a
|
|
202
|
+
* second walk that infers physical ownership from a target's record layout.
|
|
203
|
+
*/
|
|
204
|
+
export const classFieldOwnershipOf = (classes, key = null) => {
|
|
205
|
+
const ownership = [];
|
|
206
|
+
for (const layout of classes.values()) {
|
|
207
|
+
for (const entry of layout.fieldOwnership)
|
|
208
|
+
if (key === null || entry.key === key)
|
|
209
|
+
ownership.push(entry);
|
|
210
|
+
}
|
|
211
|
+
return ownership;
|
|
212
|
+
};
|
|
213
|
+
/**
|
|
214
|
+
* The carrier a native property read produces before use-site narrowing.
|
|
215
|
+
* Getter calls produce their ABI result. A fixed slot with an undefined tag
|
|
216
|
+
* can also produce its storage carrier directly: the separate presence bit
|
|
217
|
+
* has an exact absent value in that carrier, including after deletion.
|
|
218
|
+
* Other storage carriers still need a read recipe that joins absence before
|
|
219
|
+
* narrowing; using a plain payload here would erase a deleted property's
|
|
220
|
+
* undefined result.
|
|
221
|
+
*/
|
|
222
|
+
export const propertyReadResultRepresentationOf = (deriver, classes, abis, receiver, key) => {
|
|
223
|
+
const carrier = receiver.kind === 'optional' ? receiver.payload : receiver;
|
|
224
|
+
const site = carrier.kind === 'class-ref' ? classMemberOf(classes, carrier.declaration, key) : null;
|
|
225
|
+
const getter = site?.kind === 'accessor'
|
|
226
|
+
? site.accessor.getter
|
|
227
|
+
: carrier.kind === 'record' || carrier.kind === 'native-record-ref'
|
|
228
|
+
? recordAccessorsOfShape(deriver, carrier.shapeId)?.find((accessor) => accessor.key === key)?.getter
|
|
229
|
+
: null;
|
|
230
|
+
if (getter)
|
|
231
|
+
return abis.get(getter)?.result ?? null;
|
|
232
|
+
if (site?.kind === 'accessor' || site?.kind === 'method')
|
|
233
|
+
return null;
|
|
234
|
+
// Host records own their read protocol; a described field does not prove
|
|
235
|
+
// that their bridge returns the compiler's generated storage carrier.
|
|
236
|
+
if (carrier.kind === 'native-record-ref' && carrier.native !== null)
|
|
237
|
+
return null;
|
|
238
|
+
const field = declaredRecordFieldOf(deriver, carrier, key, classes);
|
|
239
|
+
if (!field)
|
|
240
|
+
return null;
|
|
241
|
+
// A native tagged union has an explicit undefined arm just as an Optional
|
|
242
|
+
// has an absence bit. Read that complete storage carrier before narrowing;
|
|
243
|
+
// otherwise the printer hides the conversion from IR and reflection demand.
|
|
244
|
+
if (field.value.kind === 'tagged-union' && dynamicFieldAbsencePolicy(field.value)?.allowsUndefined)
|
|
245
|
+
return field.value;
|
|
246
|
+
return field.value.kind === 'optional' && field.value.absence === 'undefined' ? field.value : null;
|
|
247
|
+
};
|
|
248
|
+
const selectedMethod = (methods, key, prefer) => {
|
|
249
|
+
const named = methods.filter((candidate) => candidate.key === key);
|
|
250
|
+
if (named.length < 2 || prefer === undefined)
|
|
251
|
+
return named[0];
|
|
252
|
+
return named.find((candidate) => prefer(candidate)) ?? named[0];
|
|
253
|
+
};
|
|
254
|
+
const memberSiteAlong = (classes, declaration, key, select, prefer) => {
|
|
255
|
+
const walked = new Set();
|
|
256
|
+
let current = declaration;
|
|
257
|
+
while (current !== null && !walked.has(current)) {
|
|
258
|
+
walked.add(current);
|
|
259
|
+
const owner = current;
|
|
260
|
+
const layout = classes.get(owner);
|
|
261
|
+
if (!layout)
|
|
262
|
+
return { kind: 'unknown-class', owner };
|
|
263
|
+
const { fields, accessors, methods } = select(layout);
|
|
264
|
+
if (fields.some((field) => field.key === key))
|
|
265
|
+
return { kind: 'field', owner };
|
|
266
|
+
const accessor = accessors.find((candidate) => candidate.key === key);
|
|
267
|
+
if (accessor)
|
|
268
|
+
return { kind: 'accessor', owner, accessor };
|
|
269
|
+
const method = selectedMethod(methods, key, prefer);
|
|
270
|
+
if (method)
|
|
271
|
+
return { kind: 'method', owner, method };
|
|
272
|
+
current = layout.base;
|
|
273
|
+
}
|
|
274
|
+
return null;
|
|
275
|
+
};
|
|
276
|
+
/** Which instance member a key names on a class, walking its bases; `null` when none declares it. */
|
|
277
|
+
export const classMemberOf = (classes, declaration, key, prefer) => memberSiteAlong(classes, declaration, key, (layout) => ({ fields: layout.fields, accessors: layout.accessors, methods: layout.methods }), prefer);
|
|
278
|
+
/** The one physical slot shared by own shadows of an inherited method. */
|
|
279
|
+
export const classMethodOverrideOf = (classes, declaration, key) => {
|
|
280
|
+
const seen = new Set();
|
|
281
|
+
let selected = null;
|
|
282
|
+
for (let current = declaration; current !== null && !seen.has(current);) {
|
|
283
|
+
seen.add(current);
|
|
284
|
+
const layout = classes.get(current);
|
|
285
|
+
if (!layout)
|
|
286
|
+
break;
|
|
287
|
+
if (layout.fields.some((field) => field.key === key) || layout.accessors.some((accessor) => accessor.key === key))
|
|
288
|
+
return selected;
|
|
289
|
+
selected = layout.methodOverrides?.find((field) => field.key === key) ?? selected;
|
|
290
|
+
current = layout.base;
|
|
291
|
+
}
|
|
292
|
+
return selected;
|
|
293
|
+
};
|
|
294
|
+
/** A super lookup still observes replacement of the selected prototype method. */
|
|
295
|
+
export const classPrototypeMethodMutableOf = (classes, declaration, key) => {
|
|
296
|
+
const seen = new Set();
|
|
297
|
+
for (let current = declaration; current !== null && !seen.has(current);) {
|
|
298
|
+
seen.add(current);
|
|
299
|
+
const layout = classes.get(current);
|
|
300
|
+
if (!layout)
|
|
301
|
+
return false;
|
|
302
|
+
if (layout.prototypeMethodMutations?.includes(key))
|
|
303
|
+
return true;
|
|
304
|
+
if (layout.fields.some((field) => field.key === key) ||
|
|
305
|
+
layout.accessors.some((accessor) => accessor.key === key) ||
|
|
306
|
+
layout.methods.some((method) => method.key === key))
|
|
307
|
+
return false;
|
|
308
|
+
current = layout.base;
|
|
309
|
+
}
|
|
310
|
+
return false;
|
|
311
|
+
};
|
|
312
|
+
const prototypeFamilyMutabilityCache = new WeakMap();
|
|
313
|
+
/** A base-typed ordinary receiver may carry any reachable derived prototype. */
|
|
314
|
+
export const classPrototypeMethodFamilyMutableOf = (classes, declaration, key) => {
|
|
315
|
+
let byDeclaration = prototypeFamilyMutabilityCache.get(classes);
|
|
316
|
+
if (!byDeclaration)
|
|
317
|
+
prototypeFamilyMutabilityCache.set(classes, (byDeclaration = new Map()));
|
|
318
|
+
let answers = byDeclaration.get(declaration);
|
|
319
|
+
if (!answers)
|
|
320
|
+
byDeclaration.set(declaration, (answers = new Map()));
|
|
321
|
+
const previous = answers.get(key);
|
|
322
|
+
if (previous !== undefined)
|
|
323
|
+
return previous;
|
|
324
|
+
const remember = (answer) => {
|
|
325
|
+
answers.set(key, answer);
|
|
326
|
+
return answer;
|
|
327
|
+
};
|
|
328
|
+
if (![...classes.values()].some((layout) => layout.prototypeMethodMutations?.includes(key)))
|
|
329
|
+
return remember(false);
|
|
330
|
+
for (const candidate of classes.keys()) {
|
|
331
|
+
const seen = new Set();
|
|
332
|
+
for (let current = candidate; current !== null && !seen.has(current);) {
|
|
333
|
+
if (current === declaration) {
|
|
334
|
+
if (classPrototypeMethodMutableOf(classes, candidate, key))
|
|
335
|
+
return remember(true);
|
|
336
|
+
break;
|
|
337
|
+
}
|
|
338
|
+
seen.add(current);
|
|
339
|
+
current = classes.get(current)?.base ?? null;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
return remember(false);
|
|
343
|
+
};
|
|
344
|
+
/** The static counterpart of `classMemberOf`. */
|
|
345
|
+
export const classStaticMemberOf = (classes, declaration, key) => memberSiteAlong(classes, declaration, key, (layout) => ({
|
|
346
|
+
fields: layout.staticFields,
|
|
347
|
+
accessors: layout.staticAccessors,
|
|
348
|
+
methods: layout.staticMethods
|
|
349
|
+
}));
|
|
350
|
+
/**
|
|
351
|
+
* Every accessor body a reachable record shape names.
|
|
352
|
+
*
|
|
353
|
+
* `buildCaptureIndex` needs it before it can decide which bodies get an
|
|
354
|
+
* environment, and an accessor body is reached only through the shape that
|
|
355
|
+
* names it -- there is no `allocate-callable` for one, which is exactly why it
|
|
356
|
+
* has no environment today. Walked with `walkRepresentation`, the model's own
|
|
357
|
+
* shared walk, so this cannot cover a different carrier set than the guards
|
|
358
|
+
* built on the same walk do.
|
|
359
|
+
*/
|
|
360
|
+
export const recordAccessorBodiesOf = (representations, deriver) => {
|
|
361
|
+
const accessorBodies = new Set();
|
|
362
|
+
const visited = new Set();
|
|
363
|
+
const record = (accessors) => {
|
|
364
|
+
for (const accessor of accessors) {
|
|
365
|
+
if (accessor.getter)
|
|
366
|
+
accessorBodies.add(accessor.getter);
|
|
367
|
+
if (accessor.setter)
|
|
368
|
+
accessorBodies.add(accessor.setter);
|
|
369
|
+
}
|
|
370
|
+
};
|
|
371
|
+
for (const representation of representations) {
|
|
372
|
+
for (const found of walkRepresentation(representation, visited)) {
|
|
373
|
+
if (found.kind === 'record')
|
|
374
|
+
record(found.accessors);
|
|
375
|
+
// A nominal reference NAMES the shape rather than carrying it, so its
|
|
376
|
+
// members come from the deriver -- `recordLayoutOfShape`, the same
|
|
377
|
+
// authority the struct itself is rendered from.
|
|
378
|
+
if (found.kind === 'native-record-ref')
|
|
379
|
+
record(recordAccessorsOfShape(deriver, found.shapeId) ?? []);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
return accessorBodies;
|
|
383
|
+
};
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import type { DeclarationId } from '../identity/ids.js';
|
|
2
|
+
import type { Representation, TypedArrayElementDomain } from '../representation/model.js';
|
|
3
|
+
import type { ClassLayout } from './classes.js';
|
|
4
|
+
/** Authenticated constructor protocols map to native payload identities here. */
|
|
5
|
+
export declare const typedArrayConstructorDomains: ReadonlyMap<string, TypedArrayElementDomain>;
|
|
6
|
+
/** The `typeof` names of right-hand sides that are not Objects. */
|
|
7
|
+
export type NonObjectInstanceTarget = 'undefined' | 'null' | 'boolean' | 'number' | 'bigint' | 'string' | 'symbol';
|
|
8
|
+
/** Projection owns native and program-class membership; the target only spells these tests. */
|
|
9
|
+
export type ClassInstanceTest = {
|
|
10
|
+
readonly kind: 'constant';
|
|
11
|
+
readonly value: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* ECMA-262 13.10.2 InstanceofOperator step 1: a right-hand side that is not
|
|
15
|
+
* an Object throws a TypeError before anything about the left operand is
|
|
16
|
+
* read. Not `false`: a guard that makes the test dead is control flow's
|
|
17
|
+
* fact, and this recipe is the operator's own answer where it does run.
|
|
18
|
+
*/
|
|
19
|
+
| {
|
|
20
|
+
readonly kind: 'throws-non-object';
|
|
21
|
+
readonly target: NonObjectInstanceTarget;
|
|
22
|
+
} | {
|
|
23
|
+
readonly kind: 'present';
|
|
24
|
+
} | {
|
|
25
|
+
readonly kind: 'boxed-typed-array';
|
|
26
|
+
readonly domain: TypedArrayElementDomain;
|
|
27
|
+
} | {
|
|
28
|
+
readonly kind: 'class-family';
|
|
29
|
+
readonly members: readonly DeclarationId[];
|
|
30
|
+
readonly boxed: boolean;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* A shared structural view tested through the class instance it was built
|
|
34
|
+
* from, which the view remembers boxed (`gea::record::viewOrigin`). A view
|
|
35
|
+
* built from anything but a class instance remembers nothing and is not an
|
|
36
|
+
* instance.
|
|
37
|
+
*/
|
|
38
|
+
| {
|
|
39
|
+
readonly kind: 'view-origin';
|
|
40
|
+
readonly members: readonly DeclarationId[];
|
|
41
|
+
} | {
|
|
42
|
+
readonly kind: 'optional';
|
|
43
|
+
readonly payload: ClassInstanceTest;
|
|
44
|
+
} | {
|
|
45
|
+
readonly kind: 'union';
|
|
46
|
+
readonly arms: readonly {
|
|
47
|
+
readonly index: number;
|
|
48
|
+
readonly test: ClassInstanceTest;
|
|
49
|
+
}[];
|
|
50
|
+
};
|
|
51
|
+
export interface ClassInstanceTestRecipe {
|
|
52
|
+
readonly test: ClassInstanceTest;
|
|
53
|
+
readonly nativeFieldProtocol?: 'unused';
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* What the program knows about class prototype OBJECTS reaching a left
|
|
57
|
+
* operand. A class's prototype object is native storage of that class's own
|
|
58
|
+
* layout (`gea_native_class_prototype.h`) without being its instance: its
|
|
59
|
+
* [[Prototype]] is its base's prototype, so `D.prototype instanceof m` holds
|
|
60
|
+
* exactly when D strictly extends m (ECMA-262 7.3.22 OrdinaryHasInstance).
|
|
61
|
+
*/
|
|
62
|
+
export interface ClassPrototypeFacts {
|
|
63
|
+
/** The class whose prototype object this left operand is, when its producer says so. */
|
|
64
|
+
readonly prototypeOf: DeclarationId | null;
|
|
65
|
+
/** Every class whose native prototype object the program can materialize. */
|
|
66
|
+
readonly materialized: ReadonlySet<DeclarationId>;
|
|
67
|
+
/**
|
|
68
|
+
* Every class whose instances the program converts into a structural view
|
|
69
|
+
* (`classViewCarrierKinds`). A view is a different allocation that no
|
|
70
|
+
* longer carries its class, so an `instanceof` over a view carrier can
|
|
71
|
+
* answer `false` only when no class of the tested family is ever viewed.
|
|
72
|
+
*/
|
|
73
|
+
readonly viewed?: ReadonlySet<DeclarationId>;
|
|
74
|
+
}
|
|
75
|
+
/** The object carriers a class instance can be converted into while losing its class (`targets/cpp/conversions.ts`'s record view). */
|
|
76
|
+
export declare const classViewCarrierKinds: ReadonlySet<Representation['kind']>;
|
|
77
|
+
export declare const noClassPrototypes: ClassPrototypeFacts;
|
|
78
|
+
export declare const classInstanceTestOf: (left: Representation, right: Representation, classes: ReadonlyMap<DeclarationId, ClassLayout>, prototypes: ClassPrototypeFacts) => ClassInstanceTestRecipe | undefined;
|