@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,96 @@
|
|
|
1
|
+
import type { RecordField, Representation } from './model.js';
|
|
2
|
+
import type { RepresentationDeriver } from './derive.js';
|
|
3
|
+
/**
|
|
4
|
+
* The own enumerable fields of a value whose key set a STATIC list can
|
|
5
|
+
* reproduce exactly, or `null` when it cannot.
|
|
6
|
+
*
|
|
7
|
+
* This is a stronger question than "what fields does this shape have", and the
|
|
8
|
+
* difference is the whole point: a caller that copies or enumerates a value key
|
|
9
|
+
* by key is wrong if the runtime object has one key more than the list, so a
|
|
10
|
+
* carrier that admits keys beyond its declared fields must answer `null` rather
|
|
11
|
+
* than answer partially.
|
|
12
|
+
*
|
|
13
|
+
* - A `record` carries its fields inline; a `class-ref` and a
|
|
14
|
+
* `native-record-ref` carry only a `shapeId` (`model.ts`), so their list
|
|
15
|
+
* comes from the deriver -- the same authority `targets/cpp/records.ts`
|
|
16
|
+
* builds the C++ struct body from, so the struct's members and this list
|
|
17
|
+
* cannot be two answers that merely agree today.
|
|
18
|
+
* - ACCESSORS are absent, and that is the language's rule rather than an
|
|
19
|
+
* omission: a class's `get x()` lives on the PROTOTYPE, so it is not an own
|
|
20
|
+
* property of the instance and `{ ...instance }` never copies it. `fields`
|
|
21
|
+
* and `accessors` are separate arrays on a `record` for exactly this reason
|
|
22
|
+
* (`recordFieldsOf`, derive.ts).
|
|
23
|
+
* - An INDEX signature answers `null`: `record-with-index` says the value may
|
|
24
|
+
* hold keys nothing declared, and a static unroll would copy the declared
|
|
25
|
+
* ones and silently drop the rest.
|
|
26
|
+
* - A HOST-stated struct (`native !== null`) answers `null` too. Its own
|
|
27
|
+
* enumerable properties are the host's to define; this compiler emits no
|
|
28
|
+
* definition for it and cannot know whether the C++ members it was told
|
|
29
|
+
* about are the JavaScript object's own keys.
|
|
30
|
+
*
|
|
31
|
+
* It lives in `representation/` because both the preflight key that decides
|
|
32
|
+
* whether an object spread can be rendered and the emitter that renders it must
|
|
33
|
+
* ask the identical question -- a spread preflight admits and the emitter then
|
|
34
|
+
* reads a different field list for is the certify-then-crash both exist to
|
|
35
|
+
* prevent.
|
|
36
|
+
*/
|
|
37
|
+
export declare const staticOwnFieldsOf: (deriver: RepresentationDeriver, representation: Representation) => readonly RecordField[] | null;
|
|
38
|
+
/**
|
|
39
|
+
* How a field's PRESENCE is decided when something copies or enumerates the
|
|
40
|
+
* object key by key.
|
|
41
|
+
*
|
|
42
|
+
* - `unconditional`: no test is rendered. A required field is always there.
|
|
43
|
+
* - `flagged`: generated record storage carries a presence bit independent of
|
|
44
|
+
* the value member. Keeping the two separate is what distinguishes `{}`
|
|
45
|
+
* from `{ key: undefined }`, including when the value carrier is itself an
|
|
46
|
+
* optional or a tagged union containing `undefined`.
|
|
47
|
+
* - `unprovable` remains part of the answer type for non-record storage. A
|
|
48
|
+
* generated `RecordField`, however, is never in that state: its `required`
|
|
49
|
+
* fact is represented physically by the paired bit rendered in
|
|
50
|
+
* `targets/cpp/records.ts`.
|
|
51
|
+
*/
|
|
52
|
+
export type FieldPresence = 'unconditional' | 'flagged' | 'unprovable';
|
|
53
|
+
export declare const fieldPresenceOf: (field: RecordField) => FieldPresence;
|
|
54
|
+
/**
|
|
55
|
+
* The members `Object.prototype` itself declares.
|
|
56
|
+
*
|
|
57
|
+
* Core ECMAScript rather than anything a host installs, named outright for the
|
|
58
|
+
* same reason `semantics/host-protocols.ts` names `Generator`, `Map` and `Set`:
|
|
59
|
+
* there is no table to read it from, and the list is fixed by the language.
|
|
60
|
+
*
|
|
61
|
+
* It exists because `in` walks the PROTOTYPE CHAIN. "This layout declares no
|
|
62
|
+
* such field" proves the key is not an OWN property, which is a different
|
|
63
|
+
* statement from "the operator answers false" -- `'toString' in o` is true for
|
|
64
|
+
* every ordinary object. A key on this list is therefore left unproven rather
|
|
65
|
+
* than answered: the true answer is very probably `true`, but a physical struct
|
|
66
|
+
* has no prototype object for the question to be about, and claiming either
|
|
67
|
+
* answer would be stating something this compiler has not modelled.
|
|
68
|
+
*/
|
|
69
|
+
export declare const objectPrototypeMemberNames: ReadonlySet<string>;
|
|
70
|
+
/** What a layout can prove about one statically-written key: `[[HasProperty]]`'s answer, or that it has none. */
|
|
71
|
+
export type StaticKeyPresence = 'present' | 'flagged' | 'unprovable';
|
|
72
|
+
/**
|
|
73
|
+
* Whether a statically-written key is a property of a value with this layout.
|
|
74
|
+
*
|
|
75
|
+
* Only PRESENCE is ever proven. A prototype can add keys and never removes
|
|
76
|
+
* one, so "this layout has the field" settles the answer no matter what is
|
|
77
|
+
* behind the value -- except for a key `Object.prototype` itself declares,
|
|
78
|
+
* where an absent flag would still read `true` at runtime, so those are
|
|
79
|
+
* excluded by name.
|
|
80
|
+
*
|
|
81
|
+
* ⛔ ABSENCE IS NOT PROVEN HERE, and the reason is measured rather than
|
|
82
|
+
* cautious. An earlier version of this function answered `absent` when a
|
|
83
|
+
* `record` (or a compiler-emitted `native-record-ref`) declared no such field,
|
|
84
|
+
* reasoning that such a carrier is a plain struct with `Object.prototype`
|
|
85
|
+
* behind it. It is -- and the answer was still wrong, because getting there
|
|
86
|
+
* can SLICE. `test/fixtures/in-operator-class-through-interface.ts` is the case:
|
|
87
|
+
* passing `new Box()` to a parameter typed as the interface `Shape` emits
|
|
88
|
+
* `gea_record_type_8{v2->size}`, a fresh struct holding one field, so the
|
|
89
|
+
* `Box`'s `describe` is gone at the boundary. `'describe' in shape` then
|
|
90
|
+
* compiled to `false` where JavaScript answers `true` -- a program that
|
|
91
|
+
* compiled, ran and returned the opposite of the language's answer, where
|
|
92
|
+
* before it had simply refused. Proving absence needs a whole-program fact
|
|
93
|
+
* (nothing converts a class instance into this shape), which is a real proof
|
|
94
|
+
* this layer does not have and must not fake.
|
|
95
|
+
*/
|
|
96
|
+
export declare const staticKeyPresenceOf: (fields: readonly RecordField[] | null, key: string | null) => StaticKeyPresence;
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The own enumerable fields of a value whose key set a STATIC list can
|
|
3
|
+
* reproduce exactly, or `null` when it cannot.
|
|
4
|
+
*
|
|
5
|
+
* This is a stronger question than "what fields does this shape have", and the
|
|
6
|
+
* difference is the whole point: a caller that copies or enumerates a value key
|
|
7
|
+
* by key is wrong if the runtime object has one key more than the list, so a
|
|
8
|
+
* carrier that admits keys beyond its declared fields must answer `null` rather
|
|
9
|
+
* than answer partially.
|
|
10
|
+
*
|
|
11
|
+
* - A `record` carries its fields inline; a `class-ref` and a
|
|
12
|
+
* `native-record-ref` carry only a `shapeId` (`model.ts`), so their list
|
|
13
|
+
* comes from the deriver -- the same authority `targets/cpp/records.ts`
|
|
14
|
+
* builds the C++ struct body from, so the struct's members and this list
|
|
15
|
+
* cannot be two answers that merely agree today.
|
|
16
|
+
* - ACCESSORS are absent, and that is the language's rule rather than an
|
|
17
|
+
* omission: a class's `get x()` lives on the PROTOTYPE, so it is not an own
|
|
18
|
+
* property of the instance and `{ ...instance }` never copies it. `fields`
|
|
19
|
+
* and `accessors` are separate arrays on a `record` for exactly this reason
|
|
20
|
+
* (`recordFieldsOf`, derive.ts).
|
|
21
|
+
* - An INDEX signature answers `null`: `record-with-index` says the value may
|
|
22
|
+
* hold keys nothing declared, and a static unroll would copy the declared
|
|
23
|
+
* ones and silently drop the rest.
|
|
24
|
+
* - A HOST-stated struct (`native !== null`) answers `null` too. Its own
|
|
25
|
+
* enumerable properties are the host's to define; this compiler emits no
|
|
26
|
+
* definition for it and cannot know whether the C++ members it was told
|
|
27
|
+
* about are the JavaScript object's own keys.
|
|
28
|
+
*
|
|
29
|
+
* It lives in `representation/` because both the preflight key that decides
|
|
30
|
+
* whether an object spread can be rendered and the emitter that renders it must
|
|
31
|
+
* ask the identical question -- a spread preflight admits and the emitter then
|
|
32
|
+
* reads a different field list for is the certify-then-crash both exist to
|
|
33
|
+
* prevent.
|
|
34
|
+
*/
|
|
35
|
+
export const staticOwnFieldsOf = (deriver, representation) => {
|
|
36
|
+
if (representation.kind === 'record')
|
|
37
|
+
return representation.fields;
|
|
38
|
+
if (representation.kind === 'record-with-index')
|
|
39
|
+
return null;
|
|
40
|
+
const shapeId = representation.kind === 'class-ref'
|
|
41
|
+
? representation.shapeId
|
|
42
|
+
: representation.kind === 'native-record-ref' && representation.native === null
|
|
43
|
+
? representation.shapeId
|
|
44
|
+
: null;
|
|
45
|
+
if (shapeId === null)
|
|
46
|
+
return null;
|
|
47
|
+
const carrier = deriver.layoutOf(shapeId);
|
|
48
|
+
return carrier.kind === 'record' ? carrier.fields : null;
|
|
49
|
+
};
|
|
50
|
+
export const fieldPresenceOf = (field) => {
|
|
51
|
+
if (field.required)
|
|
52
|
+
return 'unconditional';
|
|
53
|
+
return 'flagged';
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* The members `Object.prototype` itself declares.
|
|
57
|
+
*
|
|
58
|
+
* Core ECMAScript rather than anything a host installs, named outright for the
|
|
59
|
+
* same reason `semantics/host-protocols.ts` names `Generator`, `Map` and `Set`:
|
|
60
|
+
* there is no table to read it from, and the list is fixed by the language.
|
|
61
|
+
*
|
|
62
|
+
* It exists because `in` walks the PROTOTYPE CHAIN. "This layout declares no
|
|
63
|
+
* such field" proves the key is not an OWN property, which is a different
|
|
64
|
+
* statement from "the operator answers false" -- `'toString' in o` is true for
|
|
65
|
+
* every ordinary object. A key on this list is therefore left unproven rather
|
|
66
|
+
* than answered: the true answer is very probably `true`, but a physical struct
|
|
67
|
+
* has no prototype object for the question to be about, and claiming either
|
|
68
|
+
* answer would be stating something this compiler has not modelled.
|
|
69
|
+
*/
|
|
70
|
+
export const objectPrototypeMemberNames = new Set([
|
|
71
|
+
'constructor',
|
|
72
|
+
'hasOwnProperty',
|
|
73
|
+
'isPrototypeOf',
|
|
74
|
+
'propertyIsEnumerable',
|
|
75
|
+
'toLocaleString',
|
|
76
|
+
'toString',
|
|
77
|
+
'valueOf',
|
|
78
|
+
'__proto__',
|
|
79
|
+
'__defineGetter__',
|
|
80
|
+
'__defineSetter__',
|
|
81
|
+
'__lookupGetter__',
|
|
82
|
+
'__lookupSetter__'
|
|
83
|
+
]);
|
|
84
|
+
/**
|
|
85
|
+
* Whether a statically-written key is a property of a value with this layout.
|
|
86
|
+
*
|
|
87
|
+
* Only PRESENCE is ever proven. A prototype can add keys and never removes
|
|
88
|
+
* one, so "this layout has the field" settles the answer no matter what is
|
|
89
|
+
* behind the value -- except for a key `Object.prototype` itself declares,
|
|
90
|
+
* where an absent flag would still read `true` at runtime, so those are
|
|
91
|
+
* excluded by name.
|
|
92
|
+
*
|
|
93
|
+
* ⛔ ABSENCE IS NOT PROVEN HERE, and the reason is measured rather than
|
|
94
|
+
* cautious. An earlier version of this function answered `absent` when a
|
|
95
|
+
* `record` (or a compiler-emitted `native-record-ref`) declared no such field,
|
|
96
|
+
* reasoning that such a carrier is a plain struct with `Object.prototype`
|
|
97
|
+
* behind it. It is -- and the answer was still wrong, because getting there
|
|
98
|
+
* can SLICE. `test/fixtures/in-operator-class-through-interface.ts` is the case:
|
|
99
|
+
* passing `new Box()` to a parameter typed as the interface `Shape` emits
|
|
100
|
+
* `gea_record_type_8{v2->size}`, a fresh struct holding one field, so the
|
|
101
|
+
* `Box`'s `describe` is gone at the boundary. `'describe' in shape` then
|
|
102
|
+
* compiled to `false` where JavaScript answers `true` -- a program that
|
|
103
|
+
* compiled, ran and returned the opposite of the language's answer, where
|
|
104
|
+
* before it had simply refused. Proving absence needs a whole-program fact
|
|
105
|
+
* (nothing converts a class instance into this shape), which is a real proof
|
|
106
|
+
* this layer does not have and must not fake.
|
|
107
|
+
*/
|
|
108
|
+
export const staticKeyPresenceOf = (fields, key) => {
|
|
109
|
+
if (fields === null || key === null || objectPrototypeMemberNames.has(key))
|
|
110
|
+
return 'unprovable';
|
|
111
|
+
const field = fields.find((candidate) => candidate.key === key);
|
|
112
|
+
if (!field)
|
|
113
|
+
return 'unprovable';
|
|
114
|
+
const presence = fieldPresenceOf(field);
|
|
115
|
+
return presence === 'unconditional' ? 'present' : presence === 'flagged' ? 'flagged' : 'unprovable';
|
|
116
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type Representation } from './model.js';
|
|
2
|
+
export declare const completeTemplateObjectCarrier: Extract<Representation, {
|
|
3
|
+
kind: 'array-object';
|
|
4
|
+
}>;
|
|
5
|
+
export declare const completeTemplateObjectCarrierKey: string;
|
|
6
|
+
export declare const templateObjectCapabilityKeyOf: (representation: Representation) => string;
|
|
7
|
+
export declare const completeTemplateObjectCapabilityKey: string;
|
|
8
|
+
/** Canonical-key equality deliberately includes cooked, raw, ownership, and every extension field. */
|
|
9
|
+
export declare const isCompleteTemplateObjectCarrier: (representation: Representation) => representation is Extract<Representation, {
|
|
10
|
+
kind: "array-object";
|
|
11
|
+
}>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { representationKey } from './model.js';
|
|
2
|
+
/**
|
|
3
|
+
* The one physical carrier which can implement ECMAScript's
|
|
4
|
+
* `GetTemplateObject` result. Keeping this object here makes the capability
|
|
5
|
+
* claimed by preflight and the shape consumed by an emitter one fact: a plain
|
|
6
|
+
* `readonly string[]` is assignable *from* this value, but is not itself a
|
|
7
|
+
* sufficient carrier for producing it.
|
|
8
|
+
*/
|
|
9
|
+
const templateString = { kind: 'string' };
|
|
10
|
+
const templateRaw = {
|
|
11
|
+
kind: 'array-object',
|
|
12
|
+
element: templateString,
|
|
13
|
+
ownership: 'shared-refcount',
|
|
14
|
+
extension: null
|
|
15
|
+
};
|
|
16
|
+
export const completeTemplateObjectCarrier = {
|
|
17
|
+
kind: 'array-object',
|
|
18
|
+
element: templateString,
|
|
19
|
+
ownership: 'shared-refcount',
|
|
20
|
+
extension: [{ key: 'raw', value: templateRaw, required: true }]
|
|
21
|
+
};
|
|
22
|
+
export const completeTemplateObjectCarrierKey = representationKey(completeTemplateObjectCarrier);
|
|
23
|
+
export const templateObjectCapabilityKeyOf = (representation) => `allocation:template-object:${representationKey(representation)}`;
|
|
24
|
+
export const completeTemplateObjectCapabilityKey = templateObjectCapabilityKeyOf(completeTemplateObjectCarrier);
|
|
25
|
+
/** Canonical-key equality deliberately includes cooked, raw, ownership, and every extension field. */
|
|
26
|
+
export const isCompleteTemplateObjectCarrier = (representation) => representationKey(representation) === completeTemplateObjectCarrierKey;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { StructuralTypeId } from '../identity/ids.js';
|
|
2
|
+
import type { StructuralShape } from '../semantics/model/structural-types.js';
|
|
3
|
+
import type { Representation } from './model.js';
|
|
4
|
+
/**
|
|
5
|
+
* What the deriver a union needs from the deriver that owns it.
|
|
6
|
+
*
|
|
7
|
+
* A union's carrier is built out of its members' carriers, so this cannot be a
|
|
8
|
+
* free function: it has to ask the same memoized, cycle-guarded `derive` its
|
|
9
|
+
* caller is in the middle of, or a self-referential union would re-derive its
|
|
10
|
+
* own members forever. Handing those two answers in keeps the recursion the
|
|
11
|
+
* owner's, and keeps this file from becoming a second deriver.
|
|
12
|
+
*/
|
|
13
|
+
export interface UnionDeriverContext {
|
|
14
|
+
readonly shapeOf: (id: StructuralTypeId) => StructuralShape | null;
|
|
15
|
+
readonly derive: (id: StructuralTypeId) => Representation;
|
|
16
|
+
/** Whether no value can have this type -- the deriver's own answer, so an arm rule and the carrier rule agree. */
|
|
17
|
+
readonly isNeverType: (id: StructuralTypeId) => boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* The carrier of a union type.
|
|
21
|
+
*
|
|
22
|
+
* Three answers, in order of how much the members prove: an `Optional<T>` when
|
|
23
|
+
* exactly one arm is an absence value, the primitive itself when every arm is a
|
|
24
|
+
* literal of one primitive, and a `TaggedUnion` otherwise -- discriminated by a
|
|
25
|
+
* literal key the arms share when they have one, and by arm position when they
|
|
26
|
+
* do not.
|
|
27
|
+
*/
|
|
28
|
+
export declare const createUnionDeriver: (context: UnionDeriverContext) => ((shape: Extract<StructuralShape, {
|
|
29
|
+
kind: "union";
|
|
30
|
+
}>) => Representation);
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
import { primitiveDomainOf } from './primitive-domain.js';
|
|
2
|
+
import { representationKey } from './model.js';
|
|
3
|
+
import { optionalOf } from './optional.js';
|
|
4
|
+
import { primitiveCarrier, storedCarrier, unresolved } from './primitives.js';
|
|
5
|
+
/**
|
|
6
|
+
* The carrier of a union type.
|
|
7
|
+
*
|
|
8
|
+
* Three answers, in order of how much the members prove: an `Optional<T>` when
|
|
9
|
+
* exactly one arm is an absence value, the primitive itself when every arm is a
|
|
10
|
+
* literal of one primitive, and a `TaggedUnion` otherwise -- discriminated by a
|
|
11
|
+
* literal key the arms share when they have one, and by arm position when they
|
|
12
|
+
* do not.
|
|
13
|
+
*/
|
|
14
|
+
export const createUnionDeriver = (context) => {
|
|
15
|
+
const { shapeOf, derive, isNeverType } = context;
|
|
16
|
+
/** The literal text discriminating each arm, when one member key does so. */
|
|
17
|
+
const discriminantOf = (arms) => {
|
|
18
|
+
const shapes = arms.map(shapeOf);
|
|
19
|
+
const objects = shapes.flatMap((shape) => (shape && shape.kind === 'object' ? [shape] : []));
|
|
20
|
+
if (objects.length !== arms.length)
|
|
21
|
+
return null;
|
|
22
|
+
const first = objects[0];
|
|
23
|
+
if (!first)
|
|
24
|
+
return null;
|
|
25
|
+
for (const member of first.members) {
|
|
26
|
+
if (member.key.kind !== 'string' || member.optional)
|
|
27
|
+
continue;
|
|
28
|
+
const key = member.key.value;
|
|
29
|
+
const tags = [];
|
|
30
|
+
for (const shape of objects) {
|
|
31
|
+
const candidate = shape.members.find((other) => other.key.kind === 'string' && other.key.value === key);
|
|
32
|
+
if (!candidate || candidate.optional)
|
|
33
|
+
break;
|
|
34
|
+
const tagShape = shapeOf(candidate.type);
|
|
35
|
+
if (!tagShape || tagShape.kind !== 'literal')
|
|
36
|
+
break;
|
|
37
|
+
tags.push(tagShape.text);
|
|
38
|
+
}
|
|
39
|
+
// Distinct literals at one required key is what makes the arms provably
|
|
40
|
+
// disjoint at runtime. Anything weaker would produce a union whose arms
|
|
41
|
+
// cannot be told apart, which is a mis-selection, not a conservative one.
|
|
42
|
+
if (tags.length === objects.length && new Set(tags).size === tags.length)
|
|
43
|
+
return { key, tags };
|
|
44
|
+
}
|
|
45
|
+
return null;
|
|
46
|
+
};
|
|
47
|
+
/** The carrier an arm holds -- the same `storedCarrier` rule `derive.ts` applies to every other stored position. */
|
|
48
|
+
const deriveStored = (id) => storedCarrier(derive(id));
|
|
49
|
+
/**
|
|
50
|
+
* Runtime identity carried by a union arm in addition to its physical
|
|
51
|
+
* payload. A callable ABI is not an identity: unrelated functions may
|
|
52
|
+
* share it, so only a checker-closed FunctionId set is executable evidence.
|
|
53
|
+
*/
|
|
54
|
+
const runtimeDiscriminatorOf = (value) => {
|
|
55
|
+
switch (value.kind) {
|
|
56
|
+
case 'function':
|
|
57
|
+
return { kind: 'callable-membership', members: [value.functionId] };
|
|
58
|
+
case 'function-family':
|
|
59
|
+
case 'function-value-family':
|
|
60
|
+
return value.members.length > 0
|
|
61
|
+
? { kind: 'callable-membership', members: [...new Set(value.members)].sort() }
|
|
62
|
+
: { kind: 'unverifiable-callable' };
|
|
63
|
+
case 'function-value-dispatch':
|
|
64
|
+
case 'function-and-constructor':
|
|
65
|
+
case 'constructor-family':
|
|
66
|
+
case 'constructor-value-dispatch':
|
|
67
|
+
case 'generic-function-set':
|
|
68
|
+
return { kind: 'unverifiable-callable' };
|
|
69
|
+
case 'dynamic':
|
|
70
|
+
// A broad Function value retains the already-dynamic box and claims
|
|
71
|
+
// every callable. The Function tag can distinguish it from a string,
|
|
72
|
+
// number, object, etc.; it cannot distinguish it from another callable
|
|
73
|
+
// arm, which boxDiscriminantsOfArm's pairwise collision check refuses.
|
|
74
|
+
return value.reason === 'untyped-callable' ? { kind: 'callable-tag' } : { kind: 'carrier' };
|
|
75
|
+
default:
|
|
76
|
+
return { kind: 'carrier' };
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
const armOf = (tag, value, semanticType) => ({
|
|
80
|
+
tag,
|
|
81
|
+
value,
|
|
82
|
+
semanticType,
|
|
83
|
+
runtimeDiscriminator: runtimeDiscriminatorOf(value)
|
|
84
|
+
});
|
|
85
|
+
// The deriver's own `isNeverType`, not a shape test of this file's own: an
|
|
86
|
+
// arm can be uninhabited without SPELLING `never` -- `number & null`, the
|
|
87
|
+
// arm a monomorphized copy makes of the checker's `T & null` (see
|
|
88
|
+
// `derive.ts`'s `isUninhabitedPrimitiveIntersection`) -- and the carrier
|
|
89
|
+
// rule and this arm rule must answer that from one place.
|
|
90
|
+
const isNever = (id) => isNeverType(id);
|
|
91
|
+
const deriveUnion = (shape) => {
|
|
92
|
+
// `never` contributes no arm. It is the empty type, so `T | never` is `T`
|
|
93
|
+
// -- TypeScript's own union normalization says so, and the checker usually
|
|
94
|
+
// applies it before this deriver ever sees the members. It does not always:
|
|
95
|
+
// a generic default (`class Base<RootElement = never>`, then `RootElement |
|
|
96
|
+
// null`) reaches here with the member still in place. Keeping it built an
|
|
97
|
+
// arm out of a type that names no value, which then had to be given some
|
|
98
|
+
// carrier -- and `null | never` came out as a sum of two absences, a
|
|
99
|
+
// carrier one flag cannot discriminate, so a field that is plainly just
|
|
100
|
+
// `null` was refused.
|
|
101
|
+
const stated = [...new Set(shape.members)];
|
|
102
|
+
const members = stated.filter((member) => !isNever(member));
|
|
103
|
+
if (members.length === 0)
|
|
104
|
+
return { kind: 'void' };
|
|
105
|
+
const absent = members.filter((member) => absenceOf(member) !== null);
|
|
106
|
+
const present = members.filter((member) => absenceOf(member) === null);
|
|
107
|
+
// How many DISTINGUISHABLE absences the union states, not how many members
|
|
108
|
+
// state one: `Response | void | undefined` states exactly one, because
|
|
109
|
+
// `void` and `undefined` are the same stored value.
|
|
110
|
+
const absences = new Set(absent.map((member) => absenceOf(member)));
|
|
111
|
+
if (present.length === 0) {
|
|
112
|
+
const only = absent[0];
|
|
113
|
+
if (absent.length === 1 && only)
|
|
114
|
+
return derive(only);
|
|
115
|
+
// `null | undefined` is two distinguishable values, not one absence.
|
|
116
|
+
if (absences.size === 1 && only)
|
|
117
|
+
return deriveStored(only);
|
|
118
|
+
return { kind: 'tagged-union', arms: absenceArms(absent) };
|
|
119
|
+
}
|
|
120
|
+
const payload = derivePresent(present);
|
|
121
|
+
if (absent.length === 0)
|
|
122
|
+
return payload;
|
|
123
|
+
const sole = absences.size === 1 ? [...absences][0] : null;
|
|
124
|
+
if (sole)
|
|
125
|
+
return optionalOf(payload, sole);
|
|
126
|
+
// Both absence values are present, so a single absence tag cannot encode
|
|
127
|
+
// which one a value is; the sum keeps them apart. `payload` already
|
|
128
|
+
// distinguishes every present arm on its own -- `derivePresent` builds a
|
|
129
|
+
// tagged union of them whenever more than one exists -- so wrapping it
|
|
130
|
+
// behind one `'present'` tag nests that distinction instead of
|
|
131
|
+
// discarding it, exactly the way `optionalOf` above already nests a
|
|
132
|
+
// multi-arm payload under a single absence flag. There is nothing special
|
|
133
|
+
// about exactly one present arm: the construction below only ever needed
|
|
134
|
+
// `payload` and `presentType`, both of which already exist for any
|
|
135
|
+
// `present.length >= 1`.
|
|
136
|
+
const presentType = present[0];
|
|
137
|
+
if (presentType) {
|
|
138
|
+
return { kind: 'tagged-union', arms: [...absenceArms(absent), armOf('present', payload, presentType)] };
|
|
139
|
+
}
|
|
140
|
+
return unresolved('no primitive for a union carrying both absence values alongside several present arms');
|
|
141
|
+
};
|
|
142
|
+
/**
|
|
143
|
+
* Which absence a union member states, or `null` for a member that states a
|
|
144
|
+
* value.
|
|
145
|
+
*
|
|
146
|
+
* `void` answers `'undefined'`, and that is the whole of what this adds over
|
|
147
|
+
* reading the primitive directly. A stored `void` IS the `undefined`
|
|
148
|
+
* carrier -- `storedCarrier` (`primitives.ts`) already says so, and says why
|
|
149
|
+
* at length: `void` is a completed evaluation with no value, which is
|
|
150
|
+
* exactly the value `undefined` names once anything KEEPS it. A union arm is
|
|
151
|
+
* a stored position, so `T | void` and `T | undefined` are one carrier.
|
|
152
|
+
*
|
|
153
|
+
* They were two. `T | undefined` collapsed to `optional(T, undefined)` while
|
|
154
|
+
* `T | void` became `tagged-union(undefined | T)`, and the two spellings met
|
|
155
|
+
* at hono's `defineWebSocketHelper`: the handler slot is
|
|
156
|
+
* `Response | void | Promise<Response | void>`, whose promise arm derived
|
|
157
|
+
* `promise(tagged-union(undefined | class-ref(Response)))`, while the async
|
|
158
|
+
* arrow the program passes returns `Promise<Response | undefined>` and
|
|
159
|
+
* derived `promise(optional(class-ref(Response), undefined))`. One carrier,
|
|
160
|
+
* two names, and therefore no conversion between them -- the
|
|
161
|
+
* `CallExpression|1065` slot drift on `websocket.ts`.
|
|
162
|
+
*/
|
|
163
|
+
const absenceOf = (id) => {
|
|
164
|
+
const member = shapeOf(id);
|
|
165
|
+
if (member?.kind !== 'primitive')
|
|
166
|
+
return null;
|
|
167
|
+
if (member.primitive === 'null')
|
|
168
|
+
return 'null';
|
|
169
|
+
return member.primitive === 'undefined' || member.primitive === 'void' ? 'undefined' : null;
|
|
170
|
+
};
|
|
171
|
+
const absenceArms = (absent) => absent.flatMap((member) => {
|
|
172
|
+
const absence = absenceOf(member);
|
|
173
|
+
if (absence === null)
|
|
174
|
+
return [];
|
|
175
|
+
const value = absence === 'null' ? { kind: 'null' } : { kind: 'undefined' };
|
|
176
|
+
return [armOf(absence, value, member)];
|
|
177
|
+
});
|
|
178
|
+
/**
|
|
179
|
+
* The fallback carrier for a union whose arms share no literal discriminant.
|
|
180
|
+
*
|
|
181
|
+
* ECMAScript gives such a union -- `string | number`, or two record types
|
|
182
|
+
* with disjoint keys -- no property to read that names which arm is live:
|
|
183
|
+
* there is no discriminant to find because none exists, not because this
|
|
184
|
+
* deriver failed to find one. The generic answer is still a sum, just tagged
|
|
185
|
+
* by the arm's own position in this union's canonical member list instead of
|
|
186
|
+
* by a literal the source published. That position is exactly the same
|
|
187
|
+
* identity `discriminantOf`'s tags already use above, so this is the same
|
|
188
|
+
* primitive with a compiler-assigned tag rather than a different one.
|
|
189
|
+
*
|
|
190
|
+
* Every arm must resolve on its own before it is admitted: embedding an
|
|
191
|
+
* unresolved arm here would trade one honest `unresolved` union for a
|
|
192
|
+
* tagged-union that only fails later, at `verify.ts`'s generic walk, instead
|
|
193
|
+
* of naming its own gap where it occurred.
|
|
194
|
+
*/
|
|
195
|
+
/**
|
|
196
|
+
* One member per distinct carrier, in the order the union first states each.
|
|
197
|
+
*
|
|
198
|
+
* A member that does not resolve is kept rather than dropped: it has no
|
|
199
|
+
* carrier to be equal to anything by, and removing it would silently shrink
|
|
200
|
+
* the union. Whichever path consumes this list then reports that gap by name
|
|
201
|
+
* -- `armIndexUnion` and the discriminated path both derive every member they
|
|
202
|
+
* are handed -- instead of this collapse swallowing it.
|
|
203
|
+
*/
|
|
204
|
+
const canonicalMembersOf = (present) => {
|
|
205
|
+
const byCarrier = new Map();
|
|
206
|
+
const unresolvedMembers = [];
|
|
207
|
+
for (const member of present) {
|
|
208
|
+
const value = deriveStored(member);
|
|
209
|
+
if (value.kind === 'unresolved') {
|
|
210
|
+
unresolvedMembers.push(member);
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
const key = representationKey(value);
|
|
214
|
+
if (!byCarrier.has(key))
|
|
215
|
+
byCarrier.set(key, member);
|
|
216
|
+
}
|
|
217
|
+
return [...withoutNominallySubsumed([...byCarrier.values()]), ...unresolvedMembers];
|
|
218
|
+
};
|
|
219
|
+
/**
|
|
220
|
+
* A class-ref member an ANCESTOR of its own is also a member of carries
|
|
221
|
+
* nothing the ancestor does not already carry, so it contributes no arm.
|
|
222
|
+
*
|
|
223
|
+
* This is the same rule one line up -- "members that derive to ONE carrier
|
|
224
|
+
* are ONE arm" -- asked of a nominal family instead of a structural key. A
|
|
225
|
+
* `Derived` allocation answers TRUE to the `Base` arm's nominal test as well
|
|
226
|
+
* as its own (`classIdentityExtends` admits descendants, which is what lets a
|
|
227
|
+
* `Derived` reach a `Base` slot at all), so `Base | Derived` built as a
|
|
228
|
+
* two-arm sum is a sum whose arms are NOT pairwise disjoint: no runtime test
|
|
229
|
+
* can say which is live, and picking by declaration order would put a
|
|
230
|
+
* `Derived` in the `Base` arm on one path and its own on another. The
|
|
231
|
+
* conversion algebra already refuses such a union by name
|
|
232
|
+
* (`conversion/derive.ts`'s `classRefDomainsOverlap` check) -- correctly, but
|
|
233
|
+
* the defect is here, where the undiscriminable sum was built.
|
|
234
|
+
*
|
|
235
|
+
* Collapsing loses no physical fact: `Base | Derived` and `Base` are one
|
|
236
|
+
* `Ref<Base>` holding the same allocation, and the derived-only members stay
|
|
237
|
+
* reachable exactly where TypeScript already requires them to be -- behind an
|
|
238
|
+
* `instanceof`, whose narrowing is the checked class-family downcast this
|
|
239
|
+
* backend already renders over a single base carrier.
|
|
240
|
+
*
|
|
241
|
+
* `@hono/node-server` reaches this through `request[incomingKey] as
|
|
242
|
+
* IncomingMessage | Http2ServerRequest`, where the node shim's
|
|
243
|
+
* `Http2ServerRequest extends IncomingMessage`.
|
|
244
|
+
*
|
|
245
|
+
* Ownership is part of the test: two carriers that disagree on it are two
|
|
246
|
+
* different physical handles, and neither subsumes the other.
|
|
247
|
+
*/
|
|
248
|
+
const withoutNominallySubsumed = (members) => {
|
|
249
|
+
const classRefs = members.map((member) => {
|
|
250
|
+
const value = deriveStored(member);
|
|
251
|
+
return value.kind === 'class-ref' ? value : null;
|
|
252
|
+
});
|
|
253
|
+
if (classRefs.filter((value) => value !== null).length < 2)
|
|
254
|
+
return members;
|
|
255
|
+
return members.filter((_, index) => {
|
|
256
|
+
const value = classRefs[index];
|
|
257
|
+
if (!value)
|
|
258
|
+
return true;
|
|
259
|
+
return !classRefs.some((other) => other !== null && other !== value && other.ownership === value.ownership && value.ancestors.includes(other.declaration));
|
|
260
|
+
});
|
|
261
|
+
};
|
|
262
|
+
const armIndexUnion = (present) => {
|
|
263
|
+
const arms = [];
|
|
264
|
+
for (const [position, member] of present.entries()) {
|
|
265
|
+
const value = deriveStored(member);
|
|
266
|
+
if (value.kind === 'unresolved')
|
|
267
|
+
return unresolved(`no primitive for union arm ${member}: ${value.reason}`);
|
|
268
|
+
arms.push(armOf(String(position), value, member));
|
|
269
|
+
}
|
|
270
|
+
return { kind: 'tagged-union', arms };
|
|
271
|
+
};
|
|
272
|
+
/** The carrier for the non-absent arms of a union. */
|
|
273
|
+
const derivePresent = (present) => {
|
|
274
|
+
const only = present[0];
|
|
275
|
+
if (present.length === 1 && only)
|
|
276
|
+
return deriveStored(only);
|
|
277
|
+
// A union of literals of one primitive is that primitive: the arms differ in
|
|
278
|
+
// value, not in carrier, so a sum would add a tag that discriminates nothing.
|
|
279
|
+
// `primitiveDomainOf` is the one authority for "these values are all this
|
|
280
|
+
// primitive" -- `value-records.ts` asks it of a record's field.
|
|
281
|
+
const primitives = new Set(present.map((member) => primitiveDomainOf(shapeOf(member))));
|
|
282
|
+
if (primitives.size === 1 && !primitives.has(null)) {
|
|
283
|
+
const [primitive] = [...primitives];
|
|
284
|
+
const carrier = primitive ? primitiveCarrier(primitive) : null;
|
|
285
|
+
if (carrier)
|
|
286
|
+
return carrier;
|
|
287
|
+
}
|
|
288
|
+
// Members that derive to ONE carrier are ONE arm.
|
|
289
|
+
//
|
|
290
|
+
// `gea::TaggedUnion` is documented as "a sum whose arms are proven pairwise
|
|
291
|
+
// disjoint at runtime", and two arms of the same carrier are not.
|
|
292
|
+
// `OrientationLock | OrientationLock[]` is the shape that proves it: the
|
|
293
|
+
// checker flattens it to seven string literals beside one array, the rule
|
|
294
|
+
// above cannot fire because not every member is a literal, and tagging each
|
|
295
|
+
// literal separately builds a union of seven identical `std::string` arms
|
|
296
|
+
// whose discriminant no runtime test could ever set correctly -- seven arms
|
|
297
|
+
// that read back the same bytes, distinguished only by an index nothing
|
|
298
|
+
// observes. This is that same rule -- a union of literals of one primitive
|
|
299
|
+
// IS that primitive -- applied to a union that is only PARTLY literals.
|
|
300
|
+
//
|
|
301
|
+
// The group's first member is the one cited as the arm's `semanticType`.
|
|
302
|
+
// Every member of a group derives to the identical carrier, so every one of
|
|
303
|
+
// them answers the arm's member census identically; which of them is named
|
|
304
|
+
// changes no physical fact.
|
|
305
|
+
const canonical = canonicalMembersOf(present);
|
|
306
|
+
const single = canonical.length === 1 ? canonical[0] : undefined;
|
|
307
|
+
if (single)
|
|
308
|
+
return deriveStored(single);
|
|
309
|
+
const discriminant = discriminantOf(canonical);
|
|
310
|
+
if (!discriminant)
|
|
311
|
+
return armIndexUnion(canonical);
|
|
312
|
+
const arms = canonical.flatMap((member, position) => {
|
|
313
|
+
const tag = discriminant.tags[position];
|
|
314
|
+
if (tag === undefined)
|
|
315
|
+
return [];
|
|
316
|
+
const value = deriveStored(member);
|
|
317
|
+
return [armOf(tag, value, member)];
|
|
318
|
+
});
|
|
319
|
+
if (arms.length !== canonical.length)
|
|
320
|
+
return unresolved('discriminant tag census did not cover every union arm');
|
|
321
|
+
return { kind: 'tagged-union', arms };
|
|
322
|
+
};
|
|
323
|
+
return deriveUnion;
|
|
324
|
+
};
|