@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,273 @@
|
|
|
1
|
+
import { representationKey } from '../representation/model.js';
|
|
2
|
+
/**
|
|
3
|
+
* An OWNED record (a value, not a handle) materialized as a refcounted or
|
|
4
|
+
* owned record of another shape, or as the one arm of a sum that shape fits:
|
|
5
|
+
* every field required on both sides and itself materializable.
|
|
6
|
+
*/
|
|
7
|
+
export const ownedRecordMaterializationPlan = (source, target, layouts) => {
|
|
8
|
+
if (representationKey(source) === representationKey(target))
|
|
9
|
+
return { kind: 'identity', target };
|
|
10
|
+
if (source.kind === 'record' &&
|
|
11
|
+
target.kind === 'native-record-ref' &&
|
|
12
|
+
target.native === null &&
|
|
13
|
+
source.shapeId === target.shapeId &&
|
|
14
|
+
source.ownership === target.ownership)
|
|
15
|
+
return { kind: 'identity', target };
|
|
16
|
+
if (source.kind !== 'record')
|
|
17
|
+
return null;
|
|
18
|
+
if (target.kind === 'tagged-union') {
|
|
19
|
+
const arms = target.arms.flatMap((arm, index) => {
|
|
20
|
+
const payload = ownedRecordMaterializationPlan(source, arm.value, layouts);
|
|
21
|
+
return payload === null ? [] : [{ kind: 'arm', target, index, payload }];
|
|
22
|
+
});
|
|
23
|
+
return arms.length === 1 ? (arms[0] ?? null) : null;
|
|
24
|
+
}
|
|
25
|
+
if (source.ownership !== 'owned' || source.accessors.length !== 0)
|
|
26
|
+
return null;
|
|
27
|
+
if (target.kind !== 'record' && target.kind !== 'native-record-ref')
|
|
28
|
+
return null;
|
|
29
|
+
if (target.ownership === 'borrowed')
|
|
30
|
+
return null;
|
|
31
|
+
if (target.kind === 'native-record-ref' && target.native !== null)
|
|
32
|
+
return null;
|
|
33
|
+
if (target.kind === 'record' && target.accessors.length !== 0)
|
|
34
|
+
return null;
|
|
35
|
+
const fields = target.kind === 'record' ? target.fields : (layouts.plainFieldsForShape?.(target.shapeId) ?? null);
|
|
36
|
+
if (fields === null || fields.length !== source.fields.length)
|
|
37
|
+
return null;
|
|
38
|
+
const planned = [];
|
|
39
|
+
for (const field of fields) {
|
|
40
|
+
const held = source.fields.find((candidate) => candidate.key === field.key);
|
|
41
|
+
if (!held || !held.required || !field.required)
|
|
42
|
+
return null;
|
|
43
|
+
const value = ownedRecordMaterializationPlan(held.value, field.value, layouts);
|
|
44
|
+
if (value === null)
|
|
45
|
+
return null;
|
|
46
|
+
planned.push({ key: field.key, value });
|
|
47
|
+
}
|
|
48
|
+
return { kind: 'record', source, target, fields: planned };
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Effects of an already-admitted view, not another conversion predicate.
|
|
52
|
+
* Copying a held carrier (including an already-dynamic cell) reads native
|
|
53
|
+
* storage directly. A converted field, bound method or expando needs its own
|
|
54
|
+
* transport contract before this view can dispense with dynamic field hooks.
|
|
55
|
+
*/
|
|
56
|
+
export const recordViewUsesOnlyDirectFields = (plan) => {
|
|
57
|
+
switch (plan.kind) {
|
|
58
|
+
case 'owned':
|
|
59
|
+
return true;
|
|
60
|
+
case 'optional':
|
|
61
|
+
case 'assert':
|
|
62
|
+
return recordViewUsesOnlyDirectFields(plan.payload);
|
|
63
|
+
case 'arm': {
|
|
64
|
+
const arm = plan.target.arms[plan.index];
|
|
65
|
+
return plan.payload !== null
|
|
66
|
+
? recordViewUsesOnlyDirectFields(plan.payload)
|
|
67
|
+
: arm !== undefined && representationKey(plan.source) === representationKey(arm.value);
|
|
68
|
+
}
|
|
69
|
+
case 'recast-union':
|
|
70
|
+
return plan.arms.every((arm) => arm.via === 'exact' || (arm.via !== 'convert' && recordViewUsesOnlyDirectFields(arm.via)));
|
|
71
|
+
case 'fields':
|
|
72
|
+
return (!plan.expando &&
|
|
73
|
+
plan.indexes.length === 0 &&
|
|
74
|
+
plan.fields.every(({ field, read }) => read.kind === 'absent' || (read.kind === 'held' && representationKey(read.held.value) === representationKey(field.value))));
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
const abiOf = (member) => 'abi' in member && member.abi !== null && typeof member.abi === 'object' ? member.abi : null;
|
|
78
|
+
/** Whether viewing `source` as `arm` puts a non-dynamic source field into a `dynamic` (or `dynamic | undefined`) target field. */
|
|
79
|
+
const widensFieldIntoDynamic = (layouts, source, arm) => {
|
|
80
|
+
const sourceFields = source.kind === 'record' || source.kind === 'record-with-index'
|
|
81
|
+
? source.fields
|
|
82
|
+
: source.kind === 'native-record-ref'
|
|
83
|
+
? layouts.forShape(source.shapeId)
|
|
84
|
+
: null;
|
|
85
|
+
const armFields = arm.kind === 'record' ? arm.fields : arm.kind === 'native-record-ref' ? layouts.forShape(arm.shapeId) : null;
|
|
86
|
+
if (sourceFields === null || armFields === null)
|
|
87
|
+
return false;
|
|
88
|
+
const isDynamic = (value) => value.kind === 'dynamic' || (value.kind === 'optional' && value.payload.kind === 'dynamic');
|
|
89
|
+
return sourceFields.some((held) => {
|
|
90
|
+
const field = armFields.find((candidate) => candidate.key === held.key);
|
|
91
|
+
return field !== undefined && isDynamic(field.value) && !isDynamic(held.value);
|
|
92
|
+
});
|
|
93
|
+
};
|
|
94
|
+
export const structuralRecordViewPlan = (layouts, source, target, convertible) => {
|
|
95
|
+
if (source.kind === 'record' && target.kind === 'tagged-union') {
|
|
96
|
+
const plan = ownedRecordMaterializationPlan(source, target, layouts);
|
|
97
|
+
if (plan !== null)
|
|
98
|
+
return { kind: 'owned', plan };
|
|
99
|
+
}
|
|
100
|
+
const sourceCanViewRecord = source.kind === 'record' ||
|
|
101
|
+
source.kind === 'record-with-index' ||
|
|
102
|
+
source.kind === 'native-record-ref' ||
|
|
103
|
+
(source.kind === 'class-ref' && source.ownership === 'shared-refcount');
|
|
104
|
+
// A shared record can be narrower than the record arm selected for a
|
|
105
|
+
// field's physical union; the ordinary sum widener preserves identity and
|
|
106
|
+
// cannot re-layout it. Exactly one arm the source can become is the answer.
|
|
107
|
+
if (sourceCanViewRecord && target.kind === 'tagged-union') {
|
|
108
|
+
const homes = [];
|
|
109
|
+
for (const [index, arm] of target.arms.entries()) {
|
|
110
|
+
if (convertible(source, arm.value)) {
|
|
111
|
+
homes.push({ index, payload: null });
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
const payload = structuralRecordViewPlan(layouts, source, arm.value, convertible);
|
|
115
|
+
if (payload !== null)
|
|
116
|
+
homes.push({ index, payload });
|
|
117
|
+
}
|
|
118
|
+
// Two arms can both accept the record and still not be equal answers:
|
|
119
|
+
// `IteratorResult<number>` is `IteratorYieldResult<number> |
|
|
120
|
+
// IteratorReturnResult<any>`, and `{ value: i++, done: false }` fits the
|
|
121
|
+
// yield arm as written and the return arm only by BOXING `value` into its
|
|
122
|
+
// `any`. Boxing is a widening the program never asked for -- the record
|
|
123
|
+
// is already a value of the arm that holds its fields as they are -- so
|
|
124
|
+
// when exactly one home takes the record without widening a field into
|
|
125
|
+
// `dynamic`, that home is the answer, and the ambiguity guard below is
|
|
126
|
+
// reserved for arms that genuinely tie.
|
|
127
|
+
const exact = homes.length > 1 ? homes.filter((candidate) => !widensFieldIntoDynamic(layouts, source, target.arms[candidate.index].value)) : homes;
|
|
128
|
+
const home = exact.length === 1 ? exact[0] : undefined;
|
|
129
|
+
return home === undefined ? null : { kind: 'arm', source, target, index: home.index, payload: home.payload };
|
|
130
|
+
}
|
|
131
|
+
// The optional wrapper is peeled on both sides first: the question is about
|
|
132
|
+
// the two RECORD carriers, and an absence is answered by the optional's own
|
|
133
|
+
// presence flag either way.
|
|
134
|
+
if (target.kind === 'optional') {
|
|
135
|
+
const inner = source.kind === 'optional' ? source.payload : source;
|
|
136
|
+
const payload = structuralRecordViewPlan(layouts, inner, target.payload, convertible);
|
|
137
|
+
return payload === null ? null : { kind: 'optional', target, sourceOptional: source.kind === 'optional', payload };
|
|
138
|
+
}
|
|
139
|
+
// The mirror case: the TARGET has already had its optional erased by a `!`
|
|
140
|
+
// assertion (a declared return like `PropertyDescriptor | undefined`, read
|
|
141
|
+
// past a non-null assertion into a bare-record slot), but the source is
|
|
142
|
+
// still `optional(...)`. `narrowing`'s present-optional unwrap
|
|
143
|
+
// (`targets/cpp/conversions.ts`) only installs when the payload's own
|
|
144
|
+
// shape already equals the target's -- exactly the case that does NOT need
|
|
145
|
+
// a view. When the payload is a differently-interned shape (a per-overload
|
|
146
|
+
// host record vs. the canonical layout the binding declares) the unwrap has
|
|
147
|
+
// nothing to chain to, so the view has to reach past the optional itself.
|
|
148
|
+
if (source.kind === 'optional' && (target.kind === 'record' || target.kind === 'native-record-ref')) {
|
|
149
|
+
const payload = structuralRecordViewPlan(layouts, source.payload, target, convertible);
|
|
150
|
+
return payload === null ? null : { kind: 'assert', target, payload };
|
|
151
|
+
}
|
|
152
|
+
if (source.kind === 'tagged-union' && target.kind === 'tagged-union')
|
|
153
|
+
return recastUnionPlan(layouts, source, target, convertible);
|
|
154
|
+
const sourceIsRecord = source.kind === 'record' || source.kind === 'record-with-index' || source.kind === 'native-record-ref';
|
|
155
|
+
if (!sourceIsRecord && (source.kind !== 'class-ref' || source.ownership !== 'shared-refcount'))
|
|
156
|
+
return null;
|
|
157
|
+
if (source.kind === 'native-record-ref' && source.native !== null)
|
|
158
|
+
return null;
|
|
159
|
+
if (target.kind !== 'native-record-ref' && target.kind !== 'record')
|
|
160
|
+
return null;
|
|
161
|
+
if (target.kind === 'native-record-ref' && target.native !== null)
|
|
162
|
+
return null;
|
|
163
|
+
const targetIndexes = target.kind === 'record' ? [] : (layouts.indexesForShape?.(target.shapeId) ?? []);
|
|
164
|
+
if (targetIndexes.length > 0) {
|
|
165
|
+
if (source.kind !== 'record-with-index' ||
|
|
166
|
+
source.indexes.length !== targetIndexes.length ||
|
|
167
|
+
!targetIndexes.every((targetIndex, index) => {
|
|
168
|
+
const sourceIndex = source.indexes[index];
|
|
169
|
+
return (sourceIndex !== undefined &&
|
|
170
|
+
sourceIndex.key === targetIndex.key &&
|
|
171
|
+
representationKey(sourceIndex.value) === representationKey(targetIndex.value));
|
|
172
|
+
}))
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
175
|
+
else if (source.kind === 'record-with-index')
|
|
176
|
+
return null;
|
|
177
|
+
if (target.kind === 'native-record-ref' && (layouts.accessorsForShape?.(target.shapeId) ?? []).length > 0)
|
|
178
|
+
return null;
|
|
179
|
+
const targetFields = target.kind === 'record' ? target.fields : layouts.forShape(target.shapeId);
|
|
180
|
+
const sourceFields = source.kind === 'record' || source.kind === 'record-with-index' ? source.fields : layouts.forShape(source.shapeId);
|
|
181
|
+
if (targetFields === null || sourceFields === null)
|
|
182
|
+
return null;
|
|
183
|
+
// A record asserted to a wider shape that only adds members (`m[method] as
|
|
184
|
+
// HandlerSet<T> & { params }`, whose program writes `params` next) holds
|
|
185
|
+
// nothing a required added member could be read from: the language leaves
|
|
186
|
+
// it undefined until the write, and the view starts it value-initialized.
|
|
187
|
+
const onlyAdds = (source.kind === 'record' || source.kind === 'native-record-ref') &&
|
|
188
|
+
sourceFields.length < targetFields.length &&
|
|
189
|
+
sourceFields.every((held) => targetFields.some((field) => field.key === held.key));
|
|
190
|
+
const fields = [];
|
|
191
|
+
for (const field of targetFields) {
|
|
192
|
+
// A class method appears in the checker's structural field list, but it
|
|
193
|
+
// is not physical storage in the emitted class: the projected class
|
|
194
|
+
// member is the authority, and its receiver is bound into the callable
|
|
195
|
+
// member the interface record stores.
|
|
196
|
+
const abi = abiOf(field.value);
|
|
197
|
+
if (source.kind === 'class-ref' &&
|
|
198
|
+
abi !== null &&
|
|
199
|
+
abi.receiver === null &&
|
|
200
|
+
abi.restFrom === null &&
|
|
201
|
+
layouts.classMethodFor?.(source.declaration, field.key) === true) {
|
|
202
|
+
fields.push({ field, read: { kind: 'bound-method' } });
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
205
|
+
// Same fact one member kind over: `layouts.forShape` names a class's
|
|
206
|
+
// PHYSICAL storage, so a member backed by a getter is absent from it
|
|
207
|
+
// although every read of the class answers. Calling the getter is the
|
|
208
|
+
// read -- and asking before the field lookup is safe because a class
|
|
209
|
+
// never declares a key as both storage and an accessor.
|
|
210
|
+
if (source.kind === 'class-ref') {
|
|
211
|
+
const accessor = layouts.classAccessorFor?.(source.declaration, field.key) ?? null;
|
|
212
|
+
if (accessor !== null) {
|
|
213
|
+
if (!convertible(accessor, field.value))
|
|
214
|
+
return null;
|
|
215
|
+
fields.push({ field, read: { kind: 'class-accessor', value: accessor } });
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
const held = sourceFields.find((candidate) => candidate.key === field.key);
|
|
220
|
+
if (!held) {
|
|
221
|
+
if (field.required && !onlyAdds)
|
|
222
|
+
return null;
|
|
223
|
+
fields.push({ field, read: { kind: 'absent' } });
|
|
224
|
+
continue;
|
|
225
|
+
}
|
|
226
|
+
if (!convertible(held.value, field.value))
|
|
227
|
+
return null;
|
|
228
|
+
fields.push({ field, read: { kind: 'held', held } });
|
|
229
|
+
}
|
|
230
|
+
const indexes = [];
|
|
231
|
+
if (targetIndexes.length > 0 && source.kind === 'record-with-index') {
|
|
232
|
+
for (const targetIndex of targetIndexes) {
|
|
233
|
+
const sourceIndex = source.indexes.find((index) => index.key === targetIndex.key);
|
|
234
|
+
if (!sourceIndex)
|
|
235
|
+
return null;
|
|
236
|
+
indexes.push({ target: targetIndex, source: sourceIndex });
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
const expando = targetIndexes.length === 0 &&
|
|
240
|
+
target.kind === 'native-record-ref' &&
|
|
241
|
+
source.kind === 'record-with-index' &&
|
|
242
|
+
source.indexes.length === 1 &&
|
|
243
|
+
source.indexes[0]?.key === 'string' &&
|
|
244
|
+
source.indexes[0]?.value.kind === 'dynamic';
|
|
245
|
+
return { kind: 'fields', source, target, fields, indexes, expando };
|
|
246
|
+
};
|
|
247
|
+
const recastUnionPlan = (layouts, source, target, convertible) => {
|
|
248
|
+
const arms = [];
|
|
249
|
+
for (const arm of source.arms) {
|
|
250
|
+
const key = representationKey(arm.value);
|
|
251
|
+
const exact = target.arms.findIndex((candidate) => representationKey(candidate.value) === key);
|
|
252
|
+
if (exact >= 0) {
|
|
253
|
+
arms.push({ index: exact, via: 'exact' });
|
|
254
|
+
continue;
|
|
255
|
+
}
|
|
256
|
+
let home = null;
|
|
257
|
+
for (const [index, candidate] of target.arms.entries()) {
|
|
258
|
+
if (convertible(arm.value, candidate.value)) {
|
|
259
|
+
home = { index, via: 'convert' };
|
|
260
|
+
break;
|
|
261
|
+
}
|
|
262
|
+
const viewed = structuralRecordViewPlan(layouts, arm.value, candidate.value, convertible);
|
|
263
|
+
if (viewed !== null) {
|
|
264
|
+
home = { index, via: viewed };
|
|
265
|
+
break;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
if (home === null)
|
|
269
|
+
return null;
|
|
270
|
+
arms.push(home);
|
|
271
|
+
}
|
|
272
|
+
return { kind: 'recast-union', source, target, arms };
|
|
273
|
+
};
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import type { DeclarationId, FunctionId } from '../identity/ids.js';
|
|
2
|
+
import type { CallableAbi, Ownership, Representation, ScalarDomain, TaggedUnionArm } from '../representation/model.js';
|
|
3
|
+
import type { ClassifierContract, CoercionOperation, CollectionDomain, MaterializerContract } from './algebra.js';
|
|
4
|
+
export type { CoercionOperation } from './algebra.js';
|
|
5
|
+
/**
|
|
6
|
+
* The runtime's installed conversion primitives.
|
|
7
|
+
*
|
|
8
|
+
* Derivation never invents a classifier or a materializer. It only asks this
|
|
9
|
+
* registry whether one is installed for the exact identity a `Representation`
|
|
10
|
+
* carries -- a scalar domain, a class declaration, a function/ABI pair -- and
|
|
11
|
+
* reports `never` with a stated reason when the answer is no. Without this
|
|
12
|
+
* boundary, "the runtime does not have this yet" would silently become a
|
|
13
|
+
* fabricated `Atom` instead of an honest gap.
|
|
14
|
+
*
|
|
15
|
+
* Every lookup answers only "is one installed", never "would one be correct".
|
|
16
|
+
* Domain-equality and disjointness are proved by the caller from what comes
|
|
17
|
+
* back, not asserted by the registry.
|
|
18
|
+
*/
|
|
19
|
+
/** A classifier paired with the materializer whose acceptance domain it must equal. */
|
|
20
|
+
export interface ClassifierMaterializerPair {
|
|
21
|
+
readonly classifier: ClassifierContract;
|
|
22
|
+
readonly materializer: MaterializerContract;
|
|
23
|
+
}
|
|
24
|
+
export interface ConversionRuntimeRegistry {
|
|
25
|
+
/**
|
|
26
|
+
* The exact JS tag/range materializer for one scalar domain, or `null` if
|
|
27
|
+
* none is installed. `boolean` and `number` must be backed only by an exact
|
|
28
|
+
* `typeof` tag check, never a coercive cast; the registry, not this module,
|
|
29
|
+
* owns that discipline -- derivation only ever forwards what comes back.
|
|
30
|
+
*/
|
|
31
|
+
readonly scalarMaterializer: (domain: ScalarDomain) => ClassifierMaterializerPair | null;
|
|
32
|
+
/** The exact string-tag materializer. Never a `ToString` coercion. */
|
|
33
|
+
readonly stringMaterializer: () => ClassifierMaterializerPair | null;
|
|
34
|
+
/**
|
|
35
|
+
* The exact symbol-tag materializer.
|
|
36
|
+
*
|
|
37
|
+
* `typeof x === 'symbol'` is the only test there is: a symbol carries no
|
|
38
|
+
* structure to inspect, so classifying one out of a box is a tag check and
|
|
39
|
+
* nothing else. Installed only by a runtime whose box can report that tag.
|
|
40
|
+
*/
|
|
41
|
+
readonly symbolMaterializer: () => ClassifierMaterializerPair | null;
|
|
42
|
+
/** The exact null-tag materializer, installed only when the runtime distinguishes `null` from `undefined`. */
|
|
43
|
+
readonly nullMaterializer: () => ClassifierMaterializerPair | null;
|
|
44
|
+
/** The exact undefined-tag materializer, installed only when the runtime distinguishes `undefined` from `null`. */
|
|
45
|
+
readonly undefinedMaterializer: () => ClassifierMaterializerPair | null;
|
|
46
|
+
/** The nominal-token materializer for one exact class and ownership. There is no structural fallback. */
|
|
47
|
+
readonly classRefMaterializer: (declaration: DeclarationId, ownership: Ownership) => ClassifierMaterializerPair | null;
|
|
48
|
+
/**
|
|
49
|
+
* A versioned host-protocol materializer -- the only admissible route for a
|
|
50
|
+
* native handle. `native === null` means the compiler's opaque
|
|
51
|
+
* `NativeHandle<protocol>` carrier; a native spelling is host-owned and
|
|
52
|
+
* needs an explicit host identity contract rather than inference from text.
|
|
53
|
+
*/
|
|
54
|
+
readonly nativeHandleMaterializer: (protocol: string, version: number, native: string | null) => ClassifierMaterializerPair | null;
|
|
55
|
+
/**
|
|
56
|
+
* The materializer that allocates one exact frozen record shape. Required-
|
|
57
|
+
* presence checking and per-field recursion are the materializer's recipe;
|
|
58
|
+
* this registry only answers whether the shape and ownership are installed.
|
|
59
|
+
*/
|
|
60
|
+
readonly recordMaterializer: (shapeId: string, ownership: Ownership) => MaterializerContract | null;
|
|
61
|
+
/**
|
|
62
|
+
* The IDENTITY-token materializer for one exact record shape and ownership
|
|
63
|
+
* -- reading back the very object a box already holds, rather than
|
|
64
|
+
* reconstructing one field by field the way `recordMaterializer` above does.
|
|
65
|
+
*
|
|
66
|
+
* A distinct entry because it is a distinct claim. `recordMaterializer`
|
|
67
|
+
* says "this runtime can BUILD a value of this shape from an arbitrary
|
|
68
|
+
* dynamic object, checking every required field"; this one says "a value of
|
|
69
|
+
* this shape that THIS program boxed can be recognized and handed back
|
|
70
|
+
* unchanged". The second is what a program that boxes its own typed record
|
|
71
|
+
* and reads it out again needs, it preserves identity where a rebuild would
|
|
72
|
+
* not, and it is available for shapes the first will never be available for
|
|
73
|
+
* -- so collapsing them into one entry would either over-claim the rebuild
|
|
74
|
+
* or lose the round trip.
|
|
75
|
+
*
|
|
76
|
+
* Serves `native-record-ref`. Compiler-owned `record` values use the
|
|
77
|
+
* distinct product materializer above: an exact boxed payload is only that
|
|
78
|
+
* product's identity-preserving fast path, not its capability claim.
|
|
79
|
+
*/
|
|
80
|
+
readonly recordRefMaterializer: (shapeId: string, ownership: Ownership) => ClassifierMaterializerPair | null;
|
|
81
|
+
/**
|
|
82
|
+
* The installed materializable-ordinary-Array domain, narrower than a bare
|
|
83
|
+
* `IsArray` test. `null` when no such domain is installed for this ownership,
|
|
84
|
+
* for instance because materializing a fresh value as `borrowed` is
|
|
85
|
+
* incoherent -- a materialized value cannot borrow lifetime it never had.
|
|
86
|
+
*/
|
|
87
|
+
readonly arrayObjectDomain: (ownership: Ownership) => CollectionDomain | null;
|
|
88
|
+
/** The authenticated callable-identity materializer for one exact function and ABI. Category-only checks do not qualify. */
|
|
89
|
+
readonly functionMaterializer: (functionId: FunctionId, abi: CallableAbi) => ClassifierMaterializerPair | null;
|
|
90
|
+
/**
|
|
91
|
+
* A checked adapter from a dynamic Function value to one evaluated callable
|
|
92
|
+
* ABI. Unlike `functionMaterializer`, this does not claim a declaration's
|
|
93
|
+
* identity: the Function tag authenticates only callability, and the
|
|
94
|
+
* materializer must perform the target ABI's argument/result conversions at
|
|
95
|
+
* each call.
|
|
96
|
+
*/
|
|
97
|
+
readonly functionValueDispatchMaterializer: (abi: CallableAbi) => ClassifierMaterializerPair | null;
|
|
98
|
+
/**
|
|
99
|
+
* The exact runtime tag that marks an `Optional`'s absent case as `absence`,
|
|
100
|
+
* or `null` if none is installed.
|
|
101
|
+
*
|
|
102
|
+
* Takes the absence spelling rather than answering one fixed tag for both:
|
|
103
|
+
* `gea::Optional<T>` records ONLY presence/absence, not which of JavaScript's
|
|
104
|
+
* two absent values a caller meant, so a single program-wide tag would have
|
|
105
|
+
* to pick one spelling and would silently take the wrong branch reading the
|
|
106
|
+
* other -- `string | null` and `string | undefined` would become
|
|
107
|
+
* indistinguishable the moment either one round-trips through a dynamic
|
|
108
|
+
* value.
|
|
109
|
+
*/
|
|
110
|
+
readonly optionalAbsenceTag: (absence: 'null' | 'undefined') => string | null;
|
|
111
|
+
/**
|
|
112
|
+
* Reading a carrier THIS PROGRAM BOXED back out of the box by identity, for
|
|
113
|
+
* a carrier whose whole value is one C++ object.
|
|
114
|
+
*
|
|
115
|
+
* A different claim from `recordMaterializer`'s: that one RECONSTRUCTS a
|
|
116
|
+
* value field by field from an arbitrary dynamic value, which for an open
|
|
117
|
+
* shape (a `dictionary`'s string keys, a `record-with-index`'s sidecar) has
|
|
118
|
+
* no semantics-preserving answer and is correctly refused. This one performs
|
|
119
|
+
* no walk at all -- `Value::box` recorded the payload's exact C++ type, so
|
|
120
|
+
* the round trip is a tag check plus an address check plus a handle copy,
|
|
121
|
+
* the identical primitive `recordRefMaterializer` already installs for a
|
|
122
|
+
* named record shape.
|
|
123
|
+
*
|
|
124
|
+
* Keyed on the whole `Representation` because these carriers have no shape
|
|
125
|
+
* id to key on: `gea::Dictionary<V>` and `gea::TypedArray<T>` are named by
|
|
126
|
+
* their element/value carrier, not by a layout in the sealed table.
|
|
127
|
+
*/
|
|
128
|
+
readonly boxedIdentityMaterializer: (target: Representation) => ClassifierMaterializerPair | null;
|
|
129
|
+
/**
|
|
130
|
+
* The executable discriminator that selects one dynamic tagged-union arm.
|
|
131
|
+
* Its domain must name the same tag, payload type, or class-family test the
|
|
132
|
+
* emitter will execute; checker-only identities are not runtime evidence.
|
|
133
|
+
*/
|
|
134
|
+
readonly taggedUnionArmClassifier: (arm: TaggedUnionArm) => ClassifierContract | null;
|
|
135
|
+
/**
|
|
136
|
+
* The test and load a *narrowing* read needs, for one exact source and target
|
|
137
|
+
* carrier -- or `null` when the runtime installs none.
|
|
138
|
+
*
|
|
139
|
+
* This is the one entry that does not start from the dynamic carrier, and it
|
|
140
|
+
* is here because the same discipline applies. `if (tag)` narrows a cell
|
|
141
|
+
* holding `Optional<string>` to a read typed `string`; `if (typeof x ===
|
|
142
|
+
* 'string')` narrows one holding a tagged union to a single arm. Both are
|
|
143
|
+
* real loads with real recipes -- a presence flag and a payload, a
|
|
144
|
+
* discriminant and an arm -- and neither is a cast. Without an installed pair
|
|
145
|
+
* the load has no meaning and preflight says so, which is why this asks the
|
|
146
|
+
* runtime instead of assuming every backend can do it.
|
|
147
|
+
*
|
|
148
|
+
* Both carriers are the key because a runtime may manage some pairs and not
|
|
149
|
+
* others: a `borrowed` payload has no lifetime an unwrap could hand back, and
|
|
150
|
+
* a target that matches no arm of the source union is not a narrowing at all.
|
|
151
|
+
* Answering `null` is the honest refusal in each case.
|
|
152
|
+
*/
|
|
153
|
+
readonly narrowing: (source: Representation, target: Representation) => ClassifierMaterializerPair | null;
|
|
154
|
+
/**
|
|
155
|
+
* The construction a *widening* store needs, for one exact source and target
|
|
156
|
+
* carrier -- or `null` when the runtime installs none.
|
|
157
|
+
*
|
|
158
|
+
* This is `narrowing`'s mirror image, and it exists for the identical reason:
|
|
159
|
+
* `const x: boolean | number = someBoolean` puts a plain value where a
|
|
160
|
+
* `TaggedUnion` is declared, and the language really does widen there. A
|
|
161
|
+
* control-flow merge does the same thing when its branches carry different
|
|
162
|
+
* concrete carriers and the plan gives the merge itself a union -- neither
|
|
163
|
+
* branch's value ever passed through the dynamic carrier, so `narrowing`'s
|
|
164
|
+
* sibling in the dynamic-conversion algebra (`derive.ts`) has nothing to say
|
|
165
|
+
* about it; this is the entry that does.
|
|
166
|
+
*
|
|
167
|
+
* There is no membership test to make -- which arm is being constructed is
|
|
168
|
+
* already known statically, from the source's own carrier -- but the pair
|
|
169
|
+
* shape is kept the same as `narrowing`'s so both live in one conversion
|
|
170
|
+
* graph under one capability shape, and a `null` here refuses the same way
|
|
171
|
+
* `narrowing`'s does: cleanly, with the gap enumerated rather than papered
|
|
172
|
+
* over with an invented recipe.
|
|
173
|
+
*/
|
|
174
|
+
readonly widening: (source: Representation, target: Representation) => ClassifierMaterializerPair | null;
|
|
175
|
+
/**
|
|
176
|
+
* Rebuilding one tagged union as another, for one exact source and target
|
|
177
|
+
* union -- or `null` when the runtime installs none.
|
|
178
|
+
*
|
|
179
|
+
* Two declared unions with the same member set do not have to agree on tag
|
|
180
|
+
* order -- `boolean | number` and `number | boolean` are two unrelated C++
|
|
181
|
+
* template instantiations -- which is exactly what a merge produces when its
|
|
182
|
+
* two branches arrive through independently-declared unions. Neither
|
|
183
|
+
* `narrowing` nor `widening` covers it: the target is not one arm of the
|
|
184
|
+
* source, and the source is not one arm of the target. Every value the
|
|
185
|
+
* source can hold must have a same-typed home among the target's arms, or
|
|
186
|
+
* the target is missing a member the source can actually carry -- a real
|
|
187
|
+
* hole, refused rather than dropped.
|
|
188
|
+
*/
|
|
189
|
+
readonly recasting: (source: Representation, target: Representation) => ClassifierMaterializerPair | null;
|
|
190
|
+
/**
|
|
191
|
+
* The recipe for a pair none of the three above admit, decided from the
|
|
192
|
+
* two carriers alone: an upcast, a callable prefix drop, a record or union
|
|
193
|
+
* recast, a promise whose payload converts, an optional wrapped around a
|
|
194
|
+
* converting payload. No classifier, because no value can fail it. This is
|
|
195
|
+
* the whole of what the printer's ordered conversion chain answers beyond
|
|
196
|
+
* the three registered pairs, exposed so the conversion census
|
|
197
|
+
* (`conversion/nodes.ts`) can mint one node per pair from the same table
|
|
198
|
+
* the printer renders from, instead of a second predicate list that has to
|
|
199
|
+
* be kept in step with it by hand.
|
|
200
|
+
*/
|
|
201
|
+
readonly staticRecipe: (source: Representation, target: Representation) => MaterializerContract | null;
|
|
202
|
+
/**
|
|
203
|
+
* An ECMAScript abstract operation over one exact source carrier --
|
|
204
|
+
* `ToNumber` for ApplyStringOrNumericBinaryOperator's ToNumeric and
|
|
205
|
+
* IsLessThan's numeric branch, `ToString` for concatenation and the
|
|
206
|
+
* string branch -- or `null` when the runtime installs none (a BigInt into
|
|
207
|
+
* a Number, a Date's `valueOf`-first ToPrimitive, an object whose own
|
|
208
|
+
* `toString` would have to be called). Distinct from the three pair tables
|
|
209
|
+
* above and from `staticRecipe`: those answer "how does a value of X get
|
|
210
|
+
* STORED as Y", which for a `string` into a `number` is an exact tag read
|
|
211
|
+
* that refuses `"3"`; a coercion answers "what is ToNumber of this value",
|
|
212
|
+
* which accepts it and yields `3`. One (source, target) pair, two different
|
|
213
|
+
* conversions -- so the slot census names the operation, never just the
|
|
214
|
+
* target, and the census node carries it in its id.
|
|
215
|
+
*/
|
|
216
|
+
readonly coercion: (source: Representation, operation: CoercionOperation) => MaterializerContract | null;
|
|
217
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { ComponentId, OperationId } from '../identity/ids.js';
|
|
2
|
+
import type { PrimitiveFamily } from '../semantics/model/coverage.js';
|
|
3
|
+
/**
|
|
4
|
+
* Diagnostics.
|
|
5
|
+
*
|
|
6
|
+
* A diagnostic is keyed by semantic identity. A source location may accompany
|
|
7
|
+
* it for a human to read, but it never flows back into admission: the moment a
|
|
8
|
+
* location decides whether something compiles, the compiler has started
|
|
9
|
+
* recognizing programs instead of implementing a language.
|
|
10
|
+
*
|
|
11
|
+
* The sweep collects every independently provable failure in an authority
|
|
12
|
+
* component rather than throwing at the first one, and it marks derived
|
|
13
|
+
* failures as derived so one missing carrier does not read as fifty unrelated
|
|
14
|
+
* language defects.
|
|
15
|
+
*/
|
|
16
|
+
export type DiagnosticSeverity = 'root' | 'derived' | 'unsupported';
|
|
17
|
+
export interface DiagnosticLocation {
|
|
18
|
+
/** Display only. Never an admission input. */
|
|
19
|
+
readonly file: string;
|
|
20
|
+
readonly line: number;
|
|
21
|
+
readonly column: number;
|
|
22
|
+
}
|
|
23
|
+
export interface Diagnostic {
|
|
24
|
+
/** Stable identity, so repeated sweeps can be compared row by row. */
|
|
25
|
+
readonly id: string;
|
|
26
|
+
readonly severity: DiagnosticSeverity;
|
|
27
|
+
readonly component: ComponentId;
|
|
28
|
+
readonly operation: OperationId | null;
|
|
29
|
+
/** The primitive family whose absence explains this row, when known. */
|
|
30
|
+
readonly missingPrimitive: PrimitiveFamily | null;
|
|
31
|
+
readonly message: string;
|
|
32
|
+
readonly location: DiagnosticLocation | null;
|
|
33
|
+
/** For a derived row, the root rows it follows from. */
|
|
34
|
+
readonly causedBy: readonly string[];
|
|
35
|
+
}
|
|
36
|
+
/** Failure evidence produced before the sweep assigns root/derived severity. */
|
|
37
|
+
export type DiagnosticEvidence = Omit<Diagnostic, 'severity' | 'causedBy'>;
|
|
38
|
+
/** A complete sweep result. Bounded views may be derived; this is the whole set. */
|
|
39
|
+
export interface DiagnosticReport {
|
|
40
|
+
readonly diagnostics: readonly Diagnostic[];
|
|
41
|
+
readonly components: readonly ComponentId[];
|
|
42
|
+
/** True only when the transaction proved every obligation it censused. */
|
|
43
|
+
readonly clean: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* True when the frontend, the census and the plan raised nothing, before
|
|
46
|
+
* preflight's obligations were consulted. This is the gate lowering runs
|
|
47
|
+
* on: a program whose plan verifies lowers whether or not it certifies, and
|
|
48
|
+
* what it cannot lower is a refusal row, because certification covers the
|
|
49
|
+
* lowered IR. `clean` implies `planClean`; the converse is the uncertified,
|
|
50
|
+
* lowerable program.
|
|
51
|
+
*/
|
|
52
|
+
readonly planClean: boolean;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Deterministic ordering: roots first, then by component, then by identity.
|
|
56
|
+
*
|
|
57
|
+
* Determinism is what makes two sweeps comparable. Ordering by discovery time
|
|
58
|
+
* or by source position would make an unchanged compiler produce different
|
|
59
|
+
* reports on different machines.
|
|
60
|
+
*/
|
|
61
|
+
export declare const orderDiagnostics: (diagnostics: readonly Diagnostic[]) => readonly Diagnostic[];
|
|
62
|
+
/**
|
|
63
|
+
* Merge exact duplicates by identity while keeping every component they arose
|
|
64
|
+
* from, so a shared root reported from two components stays one row.
|
|
65
|
+
*/
|
|
66
|
+
export declare const mergeDiagnostics: (diagnostics: readonly Diagnostic[]) => readonly Diagnostic[];
|
|
67
|
+
/** Group a report by authority component for planning. */
|
|
68
|
+
export declare const groupByComponent: (report: DiagnosticReport) => ReadonlyMap<ComponentId, readonly Diagnostic[]>;
|
|
69
|
+
/** A collector that gathers a whole component's failures before aborting. */
|
|
70
|
+
export interface DiagnosticSink {
|
|
71
|
+
readonly report: (diagnostic: Diagnostic) => void;
|
|
72
|
+
/** Whether nothing reported so far survives merging -- asked once, between the plan's rows and preflight's, for `DiagnosticReport.planClean`. */
|
|
73
|
+
readonly cleanSoFar: () => boolean;
|
|
74
|
+
readonly finish: (components: readonly ComponentId[], planClean?: boolean) => DiagnosticReport;
|
|
75
|
+
}
|
|
76
|
+
export declare const createDiagnosticSink: () => DiagnosticSink;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
const severityOrder = Object.freeze({ root: 0, unsupported: 1, derived: 2 });
|
|
2
|
+
/**
|
|
3
|
+
* Deterministic ordering: roots first, then by component, then by identity.
|
|
4
|
+
*
|
|
5
|
+
* Determinism is what makes two sweeps comparable. Ordering by discovery time
|
|
6
|
+
* or by source position would make an unchanged compiler produce different
|
|
7
|
+
* reports on different machines.
|
|
8
|
+
*/
|
|
9
|
+
export const orderDiagnostics = (diagnostics) => [...diagnostics].sort((left, right) => {
|
|
10
|
+
const bySeverity = severityOrder[left.severity] - severityOrder[right.severity];
|
|
11
|
+
if (bySeverity !== 0)
|
|
12
|
+
return bySeverity;
|
|
13
|
+
if (left.component !== right.component)
|
|
14
|
+
return left.component < right.component ? -1 : 1;
|
|
15
|
+
return left.id < right.id ? -1 : left.id > right.id ? 1 : 0;
|
|
16
|
+
});
|
|
17
|
+
/**
|
|
18
|
+
* Merge exact duplicates by identity while keeping every component they arose
|
|
19
|
+
* from, so a shared root reported from two components stays one row.
|
|
20
|
+
*/
|
|
21
|
+
export const mergeDiagnostics = (diagnostics) => {
|
|
22
|
+
const byId = new Map();
|
|
23
|
+
for (const diagnostic of diagnostics) {
|
|
24
|
+
const existing = byId.get(diagnostic.id);
|
|
25
|
+
if (!existing) {
|
|
26
|
+
byId.set(diagnostic.id, diagnostic);
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
byId.set(diagnostic.id, {
|
|
30
|
+
...existing,
|
|
31
|
+
causedBy: [...new Set([...existing.causedBy, ...diagnostic.causedBy])].sort()
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
return orderDiagnostics([...byId.values()]);
|
|
35
|
+
};
|
|
36
|
+
/** Group a report by authority component for planning. */
|
|
37
|
+
export const groupByComponent = (report) => {
|
|
38
|
+
const grouped = new Map();
|
|
39
|
+
for (const diagnostic of orderDiagnostics(report.diagnostics)) {
|
|
40
|
+
const bucket = grouped.get(diagnostic.component) ?? [];
|
|
41
|
+
bucket.push(diagnostic);
|
|
42
|
+
grouped.set(diagnostic.component, bucket);
|
|
43
|
+
}
|
|
44
|
+
return grouped;
|
|
45
|
+
};
|
|
46
|
+
export const createDiagnosticSink = () => {
|
|
47
|
+
const collected = [];
|
|
48
|
+
const cleanSoFar = () => mergeDiagnostics(collected).length === 0;
|
|
49
|
+
return {
|
|
50
|
+
report: (diagnostic) => {
|
|
51
|
+
collected.push(diagnostic);
|
|
52
|
+
},
|
|
53
|
+
cleanSoFar,
|
|
54
|
+
finish: (components, planClean) => {
|
|
55
|
+
const diagnostics = mergeDiagnostics(collected);
|
|
56
|
+
const clean = diagnostics.length === 0;
|
|
57
|
+
return { diagnostics, components: [...components].sort(), clean, planClean: planClean ?? clean };
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { NodeId } from '../identity/ids.js';
|
|
2
|
+
import type { PreflightReport } from '../preflight/run.js';
|
|
3
|
+
import type { RepresentationPublication } from '../representation/publish.js';
|
|
4
|
+
import type { SemanticGraph } from '../semantics/model/graph.js';
|
|
5
|
+
import type { DiagnosticEvidence, DiagnosticLocation, DiagnosticReport } from './model.js';
|
|
6
|
+
export interface SweepInput {
|
|
7
|
+
readonly graph: SemanticGraph;
|
|
8
|
+
readonly representations: RepresentationPublication;
|
|
9
|
+
/** Absent when preflight did not run, which is itself not a failure to report. */
|
|
10
|
+
readonly preflight: PreflightReport | null;
|
|
11
|
+
/** Diagnostics the frontend already produced, merged in rather than re-derived. */
|
|
12
|
+
readonly frontend: readonly DiagnosticEvidence[];
|
|
13
|
+
/**
|
|
14
|
+
* Where a node identity is, for display -- `FrontendResult.locationOfNode`.
|
|
15
|
+
*
|
|
16
|
+
* Every row below carried `location: null` before this existed, so a build
|
|
17
|
+
* that failed 334 mandatory obligations printed 334 component ids and named
|
|
18
|
+
* no file. The component is a semantic identity and cannot be turned into a
|
|
19
|
+
* place in the program; only the frontend's own identity walk can, which is
|
|
20
|
+
* why this arrives as a function rather than being derived here.
|
|
21
|
+
*/
|
|
22
|
+
readonly locationOfNode?: (node: NodeId) => DiagnosticLocation | null;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Collect every layer's failures into one deterministically ordered report.
|
|
26
|
+
*
|
|
27
|
+
* Optional preflight obligations are deliberately absent: an unavailable fast
|
|
28
|
+
* path is not a defect, and reporting one as a failure would train a reader to
|
|
29
|
+
* ignore the report.
|
|
30
|
+
*/
|
|
31
|
+
export declare const sweepDiagnostics: (input: SweepInput) => DiagnosticReport;
|