@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,84 @@
|
|
|
1
|
+
import type { DeclarationId, StructuralTypeId } from '../identity/ids.js';
|
|
2
|
+
import type { StructuralShape } from '../semantics/model/structural-types.js';
|
|
3
|
+
import type { Representation } from './model.js';
|
|
4
|
+
/**
|
|
5
|
+
* The two rules an INTERSECTION needs that are about carriers rather than
|
|
6
|
+
* about types.
|
|
7
|
+
*
|
|
8
|
+
* `&` is associative and the checker owns what a key of `A & B` holds
|
|
9
|
+
* (`derive.ts`'s `resolved` branch reads that answer). What is left here is
|
|
10
|
+
* the part the checker does not answer: which members are structurally the
|
|
11
|
+
* same intersection, and -- for the self-referential retry, which has no
|
|
12
|
+
* reconciliation to read -- how two carriers for one key reduce to one.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* An intersection's members with any NESTED intersection spliced in.
|
|
16
|
+
*
|
|
17
|
+
* `&` is associative, so `A & (B & C)` and `A & B & C` are the same type and
|
|
18
|
+
* must reach the same carrier. They did not: a member that is itself an
|
|
19
|
+
* intersection -- almost always because a NAME stands for one, and
|
|
20
|
+
* `structural-declared-body.ts` interns a named intersection's body as an
|
|
21
|
+
* `intersection` shape rather than expanding it -- has no object shape of
|
|
22
|
+
* its own, so `intersectionMemberShape` answered `null` and the whole
|
|
23
|
+
* intersection refused for having a member that "is not a record shape".
|
|
24
|
+
* mongodb's `WithId<TSchema> = EnhancedOmit<TSchema, '_id'> & { _id:
|
|
25
|
+
* InferIdType<TSchema> }` is the case, and it is a member of nearly every
|
|
26
|
+
* collection type the driver declares.
|
|
27
|
+
*
|
|
28
|
+
* A member whose declaration a plugin binds to a NATIVE carrier is never
|
|
29
|
+
* spliced: `deriveIntersection`'s own first rule says a host's name outranks
|
|
30
|
+
* the structure it erases to, and splicing such a member would erase exactly
|
|
31
|
+
* the name that rule exists to keep.
|
|
32
|
+
*
|
|
33
|
+
* The `seen` set is what makes this terminate on a self-referential alias
|
|
34
|
+
* (`type Loop = Loop & { x: number }` is writable), and re-entering a member
|
|
35
|
+
* already spliced contributes nothing new in any case.
|
|
36
|
+
*/
|
|
37
|
+
export declare const createIntersectionFlattener: (shapeOf: (id: StructuralTypeId) => StructuralShape | null, isNativeBound: (declaration: DeclarationId) => boolean) => ((members: readonly StructuralTypeId[], seen?: Set<StructuralTypeId>) => readonly StructuralTypeId[]);
|
|
38
|
+
/**
|
|
39
|
+
* The physical carrier for a property that TWO intersection members both
|
|
40
|
+
* constrain, computed the way the language itself computes `A & B` for a
|
|
41
|
+
* property present in both -- not by demanding the two members already
|
|
42
|
+
* derived to the identical carrier.
|
|
43
|
+
*
|
|
44
|
+
* `A & B` means a value is BOTH, so for a shared key the correct type is
|
|
45
|
+
* the intersection of the two members' property types, which TypeScript
|
|
46
|
+
* already reduces on its own: `false & (boolean | undefined)` is `false`,
|
|
47
|
+
* not a disagreement, because an intersection value has no `undefined`
|
|
48
|
+
* arm left for it to be absent through once one member requires it
|
|
49
|
+
* present. This deriver has no checker to ask
|
|
50
|
+
* `getTypeOfPropertyOfType` directly (see this file's own module
|
|
51
|
+
* comment: it reads nothing but the sealed structural table), so it
|
|
52
|
+
* recovers the same reduction structurally: an `optional` carrier peels
|
|
53
|
+
* to its `payload` exactly when that payload matches -- recursively --
|
|
54
|
+
* the other member's own carrier for the same key, which is the
|
|
55
|
+
* representation-level statement of "the other member proves this value
|
|
56
|
+
* present". The merge loop below already tracks presence independently,
|
|
57
|
+
* in the `RecordField`'s own `required` bit, so peeling never has to
|
|
58
|
+
* touch it. Two carriers that do not reduce to one this way still refuse
|
|
59
|
+
* by name below, exactly as before -- this recovers a real TypeScript
|
|
60
|
+
* reduction, it does not relax the guard.
|
|
61
|
+
*/
|
|
62
|
+
export declare const intersectPropertyRepresentations: (a: Representation, b: Representation) => Representation | null;
|
|
63
|
+
/** Resolve a structural id to its shape; the deriver's own table lookup. */
|
|
64
|
+
type ShapeLookup = (id: StructuralTypeId) => StructuralShape | null;
|
|
65
|
+
/**
|
|
66
|
+
* What an intersection member that is not a record shape actually is.
|
|
67
|
+
*
|
|
68
|
+
* Purely diagnostic. The refusal names the member by id, which says nothing
|
|
69
|
+
* about WHY it is not a record, and an id is a table index that cannot be
|
|
70
|
+
* resolved back from a log. A declared name reports the kind of the body it
|
|
71
|
+
* stands for, because "declared" on its own is never the answer -- the
|
|
72
|
+
* interesting fact is what the declaration resolves to.
|
|
73
|
+
*/
|
|
74
|
+
export declare const intersectionMemberKindOf: (shapeOf: ShapeLookup, member: StructuralTypeId) => string;
|
|
75
|
+
/**
|
|
76
|
+
* Whether a member is a PRIMITIVE VALUE -- one whose carrier is a scalar,
|
|
77
|
+
* including a literal type, which is a scalar pinned to one value.
|
|
78
|
+
*
|
|
79
|
+
* Asked through the declared wrapper for the same reason the deriver's
|
|
80
|
+
* nominal-class test is: an alias reaches the deriver as a `declared` shape
|
|
81
|
+
* over the body it names.
|
|
82
|
+
*/
|
|
83
|
+
export declare const isPrimitiveValueShape: (shapeOf: ShapeLookup, member: StructuralTypeId) => boolean;
|
|
84
|
+
export {};
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { representationKey } from './model.js';
|
|
2
|
+
/**
|
|
3
|
+
* The two rules an INTERSECTION needs that are about carriers rather than
|
|
4
|
+
* about types.
|
|
5
|
+
*
|
|
6
|
+
* `&` is associative and the checker owns what a key of `A & B` holds
|
|
7
|
+
* (`derive.ts`'s `resolved` branch reads that answer). What is left here is
|
|
8
|
+
* the part the checker does not answer: which members are structurally the
|
|
9
|
+
* same intersection, and -- for the self-referential retry, which has no
|
|
10
|
+
* reconciliation to read -- how two carriers for one key reduce to one.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* An intersection's members with any NESTED intersection spliced in.
|
|
14
|
+
*
|
|
15
|
+
* `&` is associative, so `A & (B & C)` and `A & B & C` are the same type and
|
|
16
|
+
* must reach the same carrier. They did not: a member that is itself an
|
|
17
|
+
* intersection -- almost always because a NAME stands for one, and
|
|
18
|
+
* `structural-declared-body.ts` interns a named intersection's body as an
|
|
19
|
+
* `intersection` shape rather than expanding it -- has no object shape of
|
|
20
|
+
* its own, so `intersectionMemberShape` answered `null` and the whole
|
|
21
|
+
* intersection refused for having a member that "is not a record shape".
|
|
22
|
+
* mongodb's `WithId<TSchema> = EnhancedOmit<TSchema, '_id'> & { _id:
|
|
23
|
+
* InferIdType<TSchema> }` is the case, and it is a member of nearly every
|
|
24
|
+
* collection type the driver declares.
|
|
25
|
+
*
|
|
26
|
+
* A member whose declaration a plugin binds to a NATIVE carrier is never
|
|
27
|
+
* spliced: `deriveIntersection`'s own first rule says a host's name outranks
|
|
28
|
+
* the structure it erases to, and splicing such a member would erase exactly
|
|
29
|
+
* the name that rule exists to keep.
|
|
30
|
+
*
|
|
31
|
+
* The `seen` set is what makes this terminate on a self-referential alias
|
|
32
|
+
* (`type Loop = Loop & { x: number }` is writable), and re-entering a member
|
|
33
|
+
* already spliced contributes nothing new in any case.
|
|
34
|
+
*/
|
|
35
|
+
export const createIntersectionFlattener = (shapeOf, isNativeBound) => {
|
|
36
|
+
const flattenedIntersectionMembers = (members, seen = new Set()) => members.flatMap((member) => {
|
|
37
|
+
if (seen.has(member))
|
|
38
|
+
return [];
|
|
39
|
+
const shape = shapeOf(member);
|
|
40
|
+
const declaration = shape?.kind === 'intersection' || shape?.kind === 'declared' ? shape.declaration : null;
|
|
41
|
+
if (declaration && isNativeBound(declaration))
|
|
42
|
+
return [member];
|
|
43
|
+
const nested = shape?.kind === 'intersection' ? shape : shape?.kind === 'declared' && shape.body !== null ? shapeOf(shape.body) : null;
|
|
44
|
+
if (nested?.kind !== 'intersection')
|
|
45
|
+
return [member];
|
|
46
|
+
seen.add(member);
|
|
47
|
+
return flattenedIntersectionMembers(nested.members, seen);
|
|
48
|
+
});
|
|
49
|
+
return flattenedIntersectionMembers;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* The physical carrier for a property that TWO intersection members both
|
|
53
|
+
* constrain, computed the way the language itself computes `A & B` for a
|
|
54
|
+
* property present in both -- not by demanding the two members already
|
|
55
|
+
* derived to the identical carrier.
|
|
56
|
+
*
|
|
57
|
+
* `A & B` means a value is BOTH, so for a shared key the correct type is
|
|
58
|
+
* the intersection of the two members' property types, which TypeScript
|
|
59
|
+
* already reduces on its own: `false & (boolean | undefined)` is `false`,
|
|
60
|
+
* not a disagreement, because an intersection value has no `undefined`
|
|
61
|
+
* arm left for it to be absent through once one member requires it
|
|
62
|
+
* present. This deriver has no checker to ask
|
|
63
|
+
* `getTypeOfPropertyOfType` directly (see this file's own module
|
|
64
|
+
* comment: it reads nothing but the sealed structural table), so it
|
|
65
|
+
* recovers the same reduction structurally: an `optional` carrier peels
|
|
66
|
+
* to its `payload` exactly when that payload matches -- recursively --
|
|
67
|
+
* the other member's own carrier for the same key, which is the
|
|
68
|
+
* representation-level statement of "the other member proves this value
|
|
69
|
+
* present". The merge loop below already tracks presence independently,
|
|
70
|
+
* in the `RecordField`'s own `required` bit, so peeling never has to
|
|
71
|
+
* touch it. Two carriers that do not reduce to one this way still refuse
|
|
72
|
+
* by name below, exactly as before -- this recovers a real TypeScript
|
|
73
|
+
* reduction, it does not relax the guard.
|
|
74
|
+
*/
|
|
75
|
+
export const intersectPropertyRepresentations = (a, b) => {
|
|
76
|
+
if (representationKey(a) === representationKey(b))
|
|
77
|
+
return a;
|
|
78
|
+
if (a.kind === 'optional')
|
|
79
|
+
return intersectPropertyRepresentations(a.payload, b);
|
|
80
|
+
if (b.kind === 'optional')
|
|
81
|
+
return intersectPropertyRepresentations(a, b.payload);
|
|
82
|
+
// A `tagged-union` is the same reduction one level up: `derive.ts`'s
|
|
83
|
+
// `deriveUnion` builds one instead of an `optional` exactly when a
|
|
84
|
+
// union carries BOTH absent values alongside a present arm (`T | null
|
|
85
|
+
// | undefined`), per `model.ts`'s own comment on `optional`. Its arms
|
|
86
|
+
// are proven pairwise disjoint, so at most one can ever match the
|
|
87
|
+
// other member's own carrier -- peeling to that one arm is the same
|
|
88
|
+
// "the other member proves which case is live" reduction as the
|
|
89
|
+
// `optional` case above, just against more than one absent arm at
|
|
90
|
+
// once (`null: PixelFormat_Options.internalFormat` reducing `null &
|
|
91
|
+
// (PixelFormat | null | undefined)` to `null`).
|
|
92
|
+
if (a.kind === 'tagged-union') {
|
|
93
|
+
for (const arm of a.arms) {
|
|
94
|
+
const reconciled = intersectPropertyRepresentations(arm.value, b);
|
|
95
|
+
if (reconciled)
|
|
96
|
+
return reconciled;
|
|
97
|
+
}
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
if (b.kind === 'tagged-union') {
|
|
101
|
+
for (const arm of b.arms) {
|
|
102
|
+
const reconciled = intersectPropertyRepresentations(a, arm.value);
|
|
103
|
+
if (reconciled)
|
|
104
|
+
return reconciled;
|
|
105
|
+
}
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
return null;
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* What an intersection member that is not a record shape actually is.
|
|
112
|
+
*
|
|
113
|
+
* Purely diagnostic. The refusal names the member by id, which says nothing
|
|
114
|
+
* about WHY it is not a record, and an id is a table index that cannot be
|
|
115
|
+
* resolved back from a log. A declared name reports the kind of the body it
|
|
116
|
+
* stands for, because "declared" on its own is never the answer -- the
|
|
117
|
+
* interesting fact is what the declaration resolves to.
|
|
118
|
+
*/
|
|
119
|
+
export const intersectionMemberKindOf = (shapeOf, member) => {
|
|
120
|
+
const shape = shapeOf(member);
|
|
121
|
+
if (!shape)
|
|
122
|
+
return 'no shape';
|
|
123
|
+
if (shape.kind === 'literal')
|
|
124
|
+
return `literal ${shape.primitive} ${shape.text}`;
|
|
125
|
+
if (shape.kind !== 'declared')
|
|
126
|
+
return shape.kind;
|
|
127
|
+
if (!shape.body)
|
|
128
|
+
return 'declared, no body';
|
|
129
|
+
return `declared -> ${shapeOf(shape.body)?.kind ?? 'no shape'}`;
|
|
130
|
+
};
|
|
131
|
+
/**
|
|
132
|
+
* Whether a member is a PRIMITIVE VALUE -- one whose carrier is a scalar,
|
|
133
|
+
* including a literal type, which is a scalar pinned to one value.
|
|
134
|
+
*
|
|
135
|
+
* Asked through the declared wrapper for the same reason the deriver's
|
|
136
|
+
* nominal-class test is: an alias reaches the deriver as a `declared` shape
|
|
137
|
+
* over the body it names.
|
|
138
|
+
*/
|
|
139
|
+
export const isPrimitiveValueShape = (shapeOf, member) => {
|
|
140
|
+
const shape = shapeOf(member);
|
|
141
|
+
if (!shape)
|
|
142
|
+
return false;
|
|
143
|
+
if (shape.kind === 'primitive' || shape.kind === 'literal')
|
|
144
|
+
return true;
|
|
145
|
+
if (shape.kind !== 'declared' || shape.body === null)
|
|
146
|
+
return false;
|
|
147
|
+
const body = shapeOf(shape.body)?.kind;
|
|
148
|
+
return body === 'primitive' || body === 'literal';
|
|
149
|
+
};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { SemanticResultId } from '../identity/ids.js';
|
|
2
|
+
import type { SemanticGraph } from '../semantics/model/graph.js';
|
|
3
|
+
import type { RepresentationDeriver } from './derive.js';
|
|
4
|
+
import { type Representation } from './model.js';
|
|
5
|
+
/**
|
|
6
|
+
* An object literal minted directly as the carrier of the one place it goes.
|
|
7
|
+
*
|
|
8
|
+
* `{ data, width, height }` initializing a cell declared
|
|
9
|
+
* `{data: TypedArray, width: number, height: number}` derives, from the
|
|
10
|
+
* literal's own checker type, an anonymous record whose `data` still admits
|
|
11
|
+
* the constructor's `null` default. Selecting that carrier and then
|
|
12
|
+
* converting it into the cell's record is a structural record rebuild
|
|
13
|
+
* (`view:structural-record`) of a value nobody else ever observes: the
|
|
14
|
+
* literal is fresh, so it has no identity to keep, and its only consumer is
|
|
15
|
+
* that one initializer. The plan is the authority for what the value
|
|
16
|
+
* physically is, so the literal is published here as the destination's
|
|
17
|
+
* record instead. Each member install then stores into the destination's own
|
|
18
|
+
* field (`projection/slots.ts`'s `storeSlot` -> `fieldSlot`) through the
|
|
19
|
+
* ordinary census node for that field pair. Only a member whose entry into
|
|
20
|
+
* that field is TOTAL is admitted (below), so the override never asks an
|
|
21
|
+
* install for a narrowing -- a presence test, a downcast -- it cannot prove.
|
|
22
|
+
*
|
|
23
|
+
* Admitted only when every one of these holds; otherwise the literal keeps
|
|
24
|
+
* its structural derivation and whatever conversion plan it had:
|
|
25
|
+
* - the literal's own members are plain data installs under constant keys
|
|
26
|
+
* (no spread protocol, accessor, computed key or non-default attributes --
|
|
27
|
+
* anything else citing the fresh object is a second consumer);
|
|
28
|
+
* - across the literal and its installs there is exactly ONE outside
|
|
29
|
+
* citation, and it is a `binding` initialization's `initializer`;
|
|
30
|
+
* - both carriers are plain records (no accessors) with the same ownership
|
|
31
|
+
* and the SAME key set, which is also the set of keys the installs write --
|
|
32
|
+
* an extra key the destination cannot hold, or a destination field the
|
|
33
|
+
* literal never writes, refuses;
|
|
34
|
+
* - every member's carrier enters the destination's field TOTALLY
|
|
35
|
+
* (`nativeTotalSelectionStepOf`): a field the literal may hold `null` in
|
|
36
|
+
* but the destination declares non-null would need a presence proof the
|
|
37
|
+
* install does not have, so it refuses rather than certify `(*value)`.
|
|
38
|
+
*
|
|
39
|
+
* The answer is keyed by every result of the literal's own chain -- the
|
|
40
|
+
* allocation and each install, which all publish the literal's type -- so the
|
|
41
|
+
* whole chain commits one carrier.
|
|
42
|
+
*/
|
|
43
|
+
export declare const literalDestinationsOf: (graph: Pick<SemanticGraph, "operations">, deriver: Pick<RepresentationDeriver, "derive" | "deriveStored">) => ReadonlyMap<SemanticResultId, Representation>;
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { representationKey } from './model.js';
|
|
2
|
+
import { nativeTotalSelectionStepOf } from '../conversion/native-selection.js';
|
|
3
|
+
/**
|
|
4
|
+
* An object literal minted directly as the carrier of the one place it goes.
|
|
5
|
+
*
|
|
6
|
+
* `{ data, width, height }` initializing a cell declared
|
|
7
|
+
* `{data: TypedArray, width: number, height: number}` derives, from the
|
|
8
|
+
* literal's own checker type, an anonymous record whose `data` still admits
|
|
9
|
+
* the constructor's `null` default. Selecting that carrier and then
|
|
10
|
+
* converting it into the cell's record is a structural record rebuild
|
|
11
|
+
* (`view:structural-record`) of a value nobody else ever observes: the
|
|
12
|
+
* literal is fresh, so it has no identity to keep, and its only consumer is
|
|
13
|
+
* that one initializer. The plan is the authority for what the value
|
|
14
|
+
* physically is, so the literal is published here as the destination's
|
|
15
|
+
* record instead. Each member install then stores into the destination's own
|
|
16
|
+
* field (`projection/slots.ts`'s `storeSlot` -> `fieldSlot`) through the
|
|
17
|
+
* ordinary census node for that field pair. Only a member whose entry into
|
|
18
|
+
* that field is TOTAL is admitted (below), so the override never asks an
|
|
19
|
+
* install for a narrowing -- a presence test, a downcast -- it cannot prove.
|
|
20
|
+
*
|
|
21
|
+
* Admitted only when every one of these holds; otherwise the literal keeps
|
|
22
|
+
* its structural derivation and whatever conversion plan it had:
|
|
23
|
+
* - the literal's own members are plain data installs under constant keys
|
|
24
|
+
* (no spread protocol, accessor, computed key or non-default attributes --
|
|
25
|
+
* anything else citing the fresh object is a second consumer);
|
|
26
|
+
* - across the literal and its installs there is exactly ONE outside
|
|
27
|
+
* citation, and it is a `binding` initialization's `initializer`;
|
|
28
|
+
* - both carriers are plain records (no accessors) with the same ownership
|
|
29
|
+
* and the SAME key set, which is also the set of keys the installs write --
|
|
30
|
+
* an extra key the destination cannot hold, or a destination field the
|
|
31
|
+
* literal never writes, refuses;
|
|
32
|
+
* - every member's carrier enters the destination's field TOTALLY
|
|
33
|
+
* (`nativeTotalSelectionStepOf`): a field the literal may hold `null` in
|
|
34
|
+
* but the destination declares non-null would need a presence proof the
|
|
35
|
+
* install does not have, so it refuses rather than certify `(*value)`.
|
|
36
|
+
*
|
|
37
|
+
* The answer is keyed by every result of the literal's own chain -- the
|
|
38
|
+
* allocation and each install, which all publish the literal's type -- so the
|
|
39
|
+
* whole chain commits one carrier.
|
|
40
|
+
*/
|
|
41
|
+
export const literalDestinationsOf = (graph, deriver) => {
|
|
42
|
+
const citations = new Map();
|
|
43
|
+
for (const operation of graph.operations.values())
|
|
44
|
+
for (const operand of operation.operands) {
|
|
45
|
+
if (operand.source.kind !== 'result')
|
|
46
|
+
continue;
|
|
47
|
+
const cited = citations.get(operand.source.result) ?? [];
|
|
48
|
+
cited.push({ operation, operand });
|
|
49
|
+
citations.set(operand.source.result, cited);
|
|
50
|
+
}
|
|
51
|
+
const destinations = new Map();
|
|
52
|
+
for (const operation of graph.operations.values()) {
|
|
53
|
+
if (operation.family !== 'allocation' || operation.allocated !== 'object-literal')
|
|
54
|
+
continue;
|
|
55
|
+
const own = operation.results.length === 1 ? operation.results[0] : undefined;
|
|
56
|
+
if (!own || own.role !== 'value')
|
|
57
|
+
continue;
|
|
58
|
+
const installs = [];
|
|
59
|
+
const outside = [];
|
|
60
|
+
for (const citation of citations.get(own.id) ?? [])
|
|
61
|
+
if (isOwnInstall(citation.operation, citation.operand))
|
|
62
|
+
installs.push(citation.operation);
|
|
63
|
+
else
|
|
64
|
+
outside.push(citation);
|
|
65
|
+
for (const install of installs)
|
|
66
|
+
for (const result of install.results)
|
|
67
|
+
outside.push(...(citations.get(result.id) ?? []));
|
|
68
|
+
const sole = outside.length === 1 ? outside[0] : undefined;
|
|
69
|
+
if (!sole || !isInitializer(sole.operation, sole.operand))
|
|
70
|
+
continue;
|
|
71
|
+
const cell = sole.operation.results.length === 1 ? sole.operation.results[0] : undefined;
|
|
72
|
+
if (!cell)
|
|
73
|
+
continue;
|
|
74
|
+
const literal = deriver.derive(own.type);
|
|
75
|
+
const target = deriver.deriveStored(cell.type);
|
|
76
|
+
if (literal.kind !== 'record' || target.kind !== 'record')
|
|
77
|
+
continue;
|
|
78
|
+
if (literal.accessors.length > 0 || target.accessors.length > 0 || literal.ownership !== target.ownership)
|
|
79
|
+
continue;
|
|
80
|
+
if (representationKey(literal) === representationKey(target))
|
|
81
|
+
continue;
|
|
82
|
+
const targetKeys = new Set(target.fields.map((field) => field.key));
|
|
83
|
+
const sameKeys = (keys) => keys.size === targetKeys.size && [...keys].every((key) => targetKeys.has(key));
|
|
84
|
+
if (!sameKeys(new Set(literal.fields.map((field) => field.key))))
|
|
85
|
+
continue;
|
|
86
|
+
if (!sameKeys(new Set(installs.map(installedKeyOf))))
|
|
87
|
+
continue;
|
|
88
|
+
// Every member must enter its destination field TOTALLY. A partial entry --
|
|
89
|
+
// `data: ?Uint8Array` stored into `data: Uint8Array`, whose only recipe is
|
|
90
|
+
// the present-optional load `(*data)` -- needs a presence proof no install
|
|
91
|
+
// site has: the value the literal holds may still be `null`. Choosing the
|
|
92
|
+
// destination there would certify an unguarded unwrap, so the literal
|
|
93
|
+
// keeps its own carrier and whatever plan it had.
|
|
94
|
+
const held = new Map(literal.fields.map((field) => [field.key, field.value]));
|
|
95
|
+
if (!target.fields.every((field) => {
|
|
96
|
+
const value = held.get(field.key);
|
|
97
|
+
return (value !== undefined &&
|
|
98
|
+
(representationKey(value) === representationKey(field.value) || nativeTotalSelectionStepOf(value, field.value) !== null));
|
|
99
|
+
}))
|
|
100
|
+
continue;
|
|
101
|
+
destinations.set(own.id, target);
|
|
102
|
+
for (const install of installs)
|
|
103
|
+
for (const result of install.results)
|
|
104
|
+
destinations.set(result.id, target);
|
|
105
|
+
}
|
|
106
|
+
return destinations;
|
|
107
|
+
};
|
|
108
|
+
/** `CreateDataPropertyOrThrow` of one of the literal's own members onto the fresh object. */
|
|
109
|
+
const isOwnInstall = (operation, operand) => {
|
|
110
|
+
if (operation.family !== 'property' || operation.internalMethod !== 'define-own-property' || operation.keyIsComputed)
|
|
111
|
+
return false;
|
|
112
|
+
if (operand.role !== 'receiver' || operand.evaluation.kind !== 'provenance')
|
|
113
|
+
return false;
|
|
114
|
+
const descriptor = operation.descriptor;
|
|
115
|
+
if (!descriptor || descriptor.writable !== true || descriptor.enumerable !== true || descriptor.configurable !== true)
|
|
116
|
+
return false;
|
|
117
|
+
if (operation.results.length !== 1)
|
|
118
|
+
return false;
|
|
119
|
+
return keyOperandOf(operation)?.source.kind === 'constant';
|
|
120
|
+
};
|
|
121
|
+
const keyOperandOf = (operation) => operation.operands.find((operand) => operand.role === 'key' && operand.ordinal === 0);
|
|
122
|
+
const installedKeyOf = (install) => {
|
|
123
|
+
const source = keyOperandOf(install)?.source;
|
|
124
|
+
return source?.kind === 'constant' ? source.text : '';
|
|
125
|
+
};
|
|
126
|
+
/** A plain lexical cell initialized with the value, evaluated unconditionally. */
|
|
127
|
+
const isInitializer = (operation, operand) => operation.family === 'binding' &&
|
|
128
|
+
operation.action === 'initialize' &&
|
|
129
|
+
operation.parameterInitialization !== true &&
|
|
130
|
+
operation.external === undefined &&
|
|
131
|
+
operation.commonJs === undefined &&
|
|
132
|
+
operand.role === 'initializer' &&
|
|
133
|
+
operand.evaluation.kind === 'runtime';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { StructuralTypeId } from '../identity/ids.js';
|
|
2
|
+
import type { SemanticOperand } from '../semantics/model/operands.js';
|
|
3
|
+
import type { StructuralType } from '../semantics/model/structural-types.js';
|
|
4
|
+
import type { RepresentationDeriver } from './derive.js';
|
|
5
|
+
import { type Representation } from './model.js';
|
|
6
|
+
/** The exact value retained by an object-shaped falsy `&&` operand.
|
|
7
|
+
* An explicitly tagged destination must preserve null versus undefined.
|
|
8
|
+
* This is branch-local materialization, never a general object conversion.
|
|
9
|
+
*/
|
|
10
|
+
export declare const mergeTaggedAbsence: (source: Representation, target: Representation) => "null" | "undefined" | null;
|
|
11
|
+
export declare const mergeFalsyAbsence: (source: Representation, target: Representation) => "null" | "undefined" | null;
|
|
12
|
+
/**
|
|
13
|
+
* A merge can construct these values in its own carrier without converting an
|
|
14
|
+
* incoming carrier. Preflight and lowering must ask the same question: a
|
|
15
|
+
* `never[]` arm contains no elements, whereas `void[]` and `undefined[]` may
|
|
16
|
+
* contain real entries even though their element types occupy no storage.
|
|
17
|
+
*/
|
|
18
|
+
export declare const mergeMaterialization: (types: ReadonlyMap<StructuralTypeId, StructuralType>, deriver: RepresentationDeriver, operand: SemanticOperand, target: Representation) => "constant" | "empty-array" | "absence" | "unreachable" | null;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { carriesMergeAbsence, carriesUndefined, contributesOnlyAbsence } from './model.js';
|
|
2
|
+
/** The exact value retained by an object-shaped falsy `&&` operand.
|
|
3
|
+
* An explicitly tagged destination must preserve null versus undefined.
|
|
4
|
+
* This is branch-local materialization, never a general object conversion.
|
|
5
|
+
*/
|
|
6
|
+
export const mergeTaggedAbsence = (source, target) => {
|
|
7
|
+
if (target.kind !== 'tagged-union')
|
|
8
|
+
return null;
|
|
9
|
+
const absence = source.kind === 'optional'
|
|
10
|
+
? source.absence
|
|
11
|
+
: source.kind === 'native-handle' || (source.kind === 'class-ref' && source.ownership === 'shared-refcount')
|
|
12
|
+
? 'null'
|
|
13
|
+
: null;
|
|
14
|
+
return absence && target.arms.some((arm) => arm.value.kind === absence) ? absence : null;
|
|
15
|
+
};
|
|
16
|
+
export const mergeFalsyAbsence = (source, target) => contributesOnlyAbsence(source) ? mergeTaggedAbsence(source, target) : null;
|
|
17
|
+
/**
|
|
18
|
+
* A merge can construct these values in its own carrier without converting an
|
|
19
|
+
* incoming carrier. Preflight and lowering must ask the same question: a
|
|
20
|
+
* `never[]` arm contains no elements, whereas `void[]` and `undefined[]` may
|
|
21
|
+
* contain real entries even though their element types occupy no storage.
|
|
22
|
+
*/
|
|
23
|
+
export const mergeMaterialization = (types, deriver, operand, target) => {
|
|
24
|
+
if (operand.source.kind === 'constant' && deriver.derive(operand.type).kind === 'void')
|
|
25
|
+
return 'constant';
|
|
26
|
+
const shape = types.get(operand.type)?.shape;
|
|
27
|
+
// A non-constant expression typed `never` cannot complete normally, so its
|
|
28
|
+
// branch contributes no runtime value to the phi. When the destination has
|
|
29
|
+
// an absence state, materialize that state solely to give C++ a typed
|
|
30
|
+
// incoming expression for the unreachable edge. Otherwise the edge gets an
|
|
31
|
+
// unreachable value of the merge's own carrier: `k === 0 ? a : k === 1 ? b
|
|
32
|
+
// : Debug.fail()` is tsc's standing idiom (17 rows on the self-compile),
|
|
33
|
+
// and its last arm never delivers anything to convert. Both are
|
|
34
|
+
// branch-local: neither installs a general `void -> object` conversion.
|
|
35
|
+
if (shape?.kind === 'primitive' && shape.primitive === 'never')
|
|
36
|
+
return carriesMergeAbsence(target) ? 'absence' : 'unreachable';
|
|
37
|
+
// A `void` call as a default (`[w = counter()]`) publishes no value at all;
|
|
38
|
+
// what the merge receives from that arm is `undefined`, spelled in the
|
|
39
|
+
// target's own absence -- the call itself still runs in the arm.
|
|
40
|
+
if (shape?.kind === 'primitive' && (shape.primitive === 'void' || shape.primitive === 'undefined') && carriesUndefined(target))
|
|
41
|
+
return 'absence';
|
|
42
|
+
if (holdsEmptyArray(types, target) && isEmptyArrayLiteralType(deriver, shape))
|
|
43
|
+
return 'empty-array';
|
|
44
|
+
return null;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* The type of an array literal with no elements, in the two spellings the
|
|
48
|
+
* checker gives one.
|
|
49
|
+
*
|
|
50
|
+
* This is the same pair `semantics/normalize/structural.ts` recognizes when it
|
|
51
|
+
* DROPS an empty-array arm out of a union -- "13.2.4.2 gives an ArrayLiteral
|
|
52
|
+
* with no elements an Array of length 0, and a value with no element cannot
|
|
53
|
+
* disagree with any element type, so it is already a value of the arm beside
|
|
54
|
+
* it". That drop is what makes `path.match(re) || []` publish the surviving
|
|
55
|
+
* arm's carrier alone, so the two have to admit the identical set: an arm the
|
|
56
|
+
* join removes and this does not recognize is a merge with no incoming value
|
|
57
|
+
* at all.
|
|
58
|
+
*
|
|
59
|
+
* Both spellings really occur, decided by what contextually types the literal:
|
|
60
|
+
* `input || []` against a `string[]` gets the array shape, while `path.match(re)
|
|
61
|
+
* || []` gets the empty TUPLE, because `RegExpMatchArray` is an array-LIKE with
|
|
62
|
+
* members of its own rather than an `Array<T>`. Only the array-of-never
|
|
63
|
+
* spelling was admitted, so the tuple one refused.
|
|
64
|
+
*/
|
|
65
|
+
const isEmptyArrayLiteralType = (deriver, shape) => shape?.kind === 'tuple' ? shape.elements.length === 0 : shape?.kind === 'array' && deriver.isNeverType(shape.element);
|
|
66
|
+
/**
|
|
67
|
+
* A carrier an empty array can be BUILT in, rather than converted into.
|
|
68
|
+
*
|
|
69
|
+
* `array-object` is the obvious one. The other is a stated-native record whose
|
|
70
|
+
* structural shape is an array: `RegExpMatchArray` is `gea::runtime::regex::
|
|
71
|
+
* MatchResult`, which IS a `gea::ArrayObject<std::string>` carrying the members
|
|
72
|
+
* 22.1.3.13 adds beside it, all of them default-initialized. An empty one is
|
|
73
|
+
* therefore constructible and is exactly the `[]` the program wrote -- the same
|
|
74
|
+
* `[]` TypeScript itself already accepts here, `RegExpMatchArray`'s required
|
|
75
|
+
* `[0]` notwithstanding, because an empty array disagrees with no element type.
|
|
76
|
+
*
|
|
77
|
+
* Asked of the target's own shape rather than of a list of native names: the
|
|
78
|
+
* fact that licenses the construction is "this carrier holds an array", and a
|
|
79
|
+
* name list would be a second authority over the same question that drifts the
|
|
80
|
+
* first time a host states another array-like type.
|
|
81
|
+
*/
|
|
82
|
+
const holdsEmptyArray = (types, target) => target.kind === 'array-object' ||
|
|
83
|
+
(target.kind === 'native-record-ref' && types.get(target.shapeId)?.shape.kind === 'array');
|