@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,261 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { DeclarationId, StructuralTypeId } from '../../identity/ids.js';
|
|
3
|
+
import type { SignatureParameter } from './structural-types.js';
|
|
4
|
+
/**
|
|
5
|
+
* The signature TypeScript selected for an invocation.
|
|
6
|
+
*
|
|
7
|
+
* This is checker resolution, not runtime target proof. It says which
|
|
8
|
+
* declaration the checker picked; it does not claim that declaration is the
|
|
9
|
+
* complete set of functions that can run. That claim is a separate attachment
|
|
10
|
+
* so that a monkey-patched, shadowed, or reassigned callee cannot inherit the
|
|
11
|
+
* checker's confidence.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Where a generic instantiation came from.
|
|
15
|
+
*
|
|
16
|
+
* The public checker API exposes the type arguments a call site wrote, but not
|
|
17
|
+
* the mapper it inferred. `inferred` therefore records that substitutions exist
|
|
18
|
+
* and are unavailable. A consumer that needs instantiated parameter types must
|
|
19
|
+
* fail closed on it -- re-deriving substitutions from argument expressions,
|
|
20
|
+
* callee spelling, or declaration display names is exactly the rediscovery this
|
|
21
|
+
* layer exists to prevent.
|
|
22
|
+
*/
|
|
23
|
+
export type TypeArgumentProvenance = {
|
|
24
|
+
readonly kind: 'none';
|
|
25
|
+
} | {
|
|
26
|
+
readonly kind: 'explicit';
|
|
27
|
+
readonly arguments: readonly ExplicitTypeArgument[];
|
|
28
|
+
} | {
|
|
29
|
+
readonly kind: 'inferred';
|
|
30
|
+
readonly reason: 'checker-mapper-not-public';
|
|
31
|
+
};
|
|
32
|
+
/** One written type argument, paired with the parameter it instantiates. */
|
|
33
|
+
export interface ExplicitTypeArgument {
|
|
34
|
+
readonly parameter: DeclarationId;
|
|
35
|
+
readonly argument: StructuralTypeId;
|
|
36
|
+
}
|
|
37
|
+
/** Whether the selected declaration is real source or an ambient declaration. */
|
|
38
|
+
export type SignatureProvenance = 'source' | 'ambient';
|
|
39
|
+
export interface SelectedSignature {
|
|
40
|
+
/** The declaration the checker selected. Identity, never a display name. */
|
|
41
|
+
readonly declaration: DeclarationId;
|
|
42
|
+
readonly provenance: SignatureProvenance;
|
|
43
|
+
/**
|
|
44
|
+
* Runtime parameter shape. An explicit `this` parameter is authenticated
|
|
45
|
+
* separately and excluded here, because it is a type-system device rather
|
|
46
|
+
* than an argument the call site passes.
|
|
47
|
+
*/
|
|
48
|
+
readonly parameters: readonly SignatureParameter[];
|
|
49
|
+
readonly minimumArity: number;
|
|
50
|
+
readonly thisParameter: StructuralTypeId | null;
|
|
51
|
+
readonly typeArguments: TypeArgumentProvenance;
|
|
52
|
+
/** The instantiated structural return type of the selected signature. */
|
|
53
|
+
readonly returnType: StructuralTypeId;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Why an invocation's result type may differ from its selected signature's
|
|
57
|
+
* return type.
|
|
58
|
+
*
|
|
59
|
+
* Every reason is listed here. Anything else disagreeing is a defect, and
|
|
60
|
+
* the check below is what turns that defect into a failure instead of letting a
|
|
61
|
+
* consumer silently pick whichever type it prefers.
|
|
62
|
+
*/
|
|
63
|
+
export type InvocationResultDivergence =
|
|
64
|
+
/** `a?.b()` adds the short-circuit `undefined` path to the call result. */
|
|
65
|
+
{
|
|
66
|
+
readonly kind: 'optional-call-short-circuit';
|
|
67
|
+
}
|
|
68
|
+
/** `super()` evaluates to `void`, not to the base constructor's instance type. */
|
|
69
|
+
| {
|
|
70
|
+
readonly kind: 'super-constructor-initialization';
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* `JSON.parse(text) as T`: the call's own declared return type is `any`
|
|
74
|
+
* (`lib.es5.d.ts`), and the caller's own assertion is what names the real,
|
|
75
|
+
* physical type this backend renders `JSON.parse` as returning
|
|
76
|
+
* (`targets/cpp/emit-json.ts`'s `jsonCallText` — this compiler controls and
|
|
77
|
+
* renders `JSON.parse`'s own implementation, which is what makes
|
|
78
|
+
* substituting the caller's asserted type safe here and nowhere else; see
|
|
79
|
+
* `producers/invocations.ts`'s `jsonParseResultOverride`).
|
|
80
|
+
*/
|
|
81
|
+
| {
|
|
82
|
+
readonly kind: 'json-parse-type-assertion';
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* `new Array(n)`: the constructor's own declared return type is `any[]`
|
|
86
|
+
* (`lib.es5.d.ts`'s `ArrayConstructor` has no generic parameter for a
|
|
87
|
+
* contextual type to narrow), and the enclosing `as T[]` assertion or the
|
|
88
|
+
* variable/field declaration this construction directly initializes is
|
|
89
|
+
* what names the real, physical element type this backend allocates
|
|
90
|
+
* (`targets/cpp/emit-callable.ts`'s `emitArrayConstruct` -- this compiler
|
|
91
|
+
* controls and renders `new Array(n)`'s own implementation, which is what
|
|
92
|
+
* makes substituting the declared element type safe here and nowhere else;
|
|
93
|
+
* see `producers/invocations.ts`'s `arrayConstructResultOverride`).
|
|
94
|
+
*/
|
|
95
|
+
| {
|
|
96
|
+
readonly kind: 'array-construct-type-annotation';
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* `new RangeError(m) as RangeError & { code: string }`: the constructor's
|
|
100
|
+
* own declared return type is the plain error interface, and the enclosing
|
|
101
|
+
* assertion is what names the record this backend actually mints.
|
|
102
|
+
* `gea::host::<Ctor>::create<ErrorRecord>` is a TEMPLATE over the struct
|
|
103
|
+
* (`targets/cpp/runtime/gea_runtime.h`) -- this compiler controls and
|
|
104
|
+
* renders the construction, so it can allocate the asserted shape directly
|
|
105
|
+
* and the extra fields are value-initialized exactly as an omitted property
|
|
106
|
+
* would be. Without it the construction mints one struct and the binding
|
|
107
|
+
* holding it declares another, and no conversion between two unrelated C++
|
|
108
|
+
* structs exists: certified, emitted, and rejected by clang. See
|
|
109
|
+
* `producers/invocations.ts`'s `errorConstructResultOverride`.
|
|
110
|
+
*/
|
|
111
|
+
| {
|
|
112
|
+
readonly kind: 'error-construct-type-assertion';
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* `new Map()`/`new Set()`/`new WeakMap()`/`new WeakSet()`: the ambient
|
|
116
|
+
* constructor's own declared signature has nothing to infer K/(V) from --
|
|
117
|
+
* no type arguments, no constructor argument -- so the checker defaults
|
|
118
|
+
* both to `unknown`, and the selected signature's return type is that
|
|
119
|
+
* defaulted, uninformative shape. `collection-bindings.ts`'s whole-program
|
|
120
|
+
* census (`typeArgumentsAt`/`typeArgumentsForOwner`/`typeArgumentsForRead`)
|
|
121
|
+
* answers the SAME question `array-construct-type-annotation` answers for
|
|
122
|
+
* `new Array(n)` one collection family over: what does the program's own
|
|
123
|
+
* later use of this cell actually store. `structural.ts`'s `typeAt` already
|
|
124
|
+
* substitutes that census's answer for this call's own published result
|
|
125
|
+
* (`inferredCollectionTypeArgumentsAt`, `structural-array-element.ts`) --
|
|
126
|
+
* this divergence exists so that substitution does not also have to agree
|
|
127
|
+
* with the SEPARATE, checker-only computation `buildSelectedSignature`
|
|
128
|
+
* derives from the resolved signature object. See
|
|
129
|
+
* `producers/invocations.ts`'s `collectionConstructResultOverride`.
|
|
130
|
+
*/
|
|
131
|
+
| {
|
|
132
|
+
readonly kind: 'collection-construct-type-inference';
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* `Object.create(null)`: `lib.es5.d.ts` declares the return type `any`, and
|
|
136
|
+
* the enclosing `as T` assertion or the annotation of the variable/field
|
|
137
|
+
* this call directly initializes is what names the object carrier this
|
|
138
|
+
* backend actually mints. 20.1.2.2's OrdinaryObjectCreate with a null
|
|
139
|
+
* prototype and no own properties is physically an empty
|
|
140
|
+
* `gea::Dictionary<V>` or a value-initialized record struct, and
|
|
141
|
+
* `targets/cpp/host/emit-host-object.ts`'s `createText` -- this compiler's
|
|
142
|
+
* own rendering of the call -- mints exactly that. Without it the call
|
|
143
|
+
* boxes a `DynamicObject` that the annotated store then unboxes into a
|
|
144
|
+
* different C++ payload type, which aborts at runtime rather than failing
|
|
145
|
+
* to compile. See `producers/invocations.ts`'s `objectCreateResultOverride`.
|
|
146
|
+
*/
|
|
147
|
+
| {
|
|
148
|
+
readonly kind: 'object-create-type-annotation';
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* `Object.assign(target, source)` returns the target object itself. The
|
|
152
|
+
* ambient generic signature reports `T & U`, which describes the extra
|
|
153
|
+
* properties visible through TypeScript but is not a second allocation and
|
|
154
|
+
* must not become a second physical carrier. The native renderer mutates the
|
|
155
|
+
* target (using its identity-keyed expando table for source keys the target
|
|
156
|
+
* does not declare) and returns that same target handle. See
|
|
157
|
+
* `producers/invocations.ts`'s `objectAssignTargetOverride`.
|
|
158
|
+
*/
|
|
159
|
+
| {
|
|
160
|
+
readonly kind: 'object-assign-target-identity';
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* `collection.get( k )` on a `Map`/`WeakMap` that same census bound: the
|
|
164
|
+
* sibling of the construct divergence above, at the OTHER end of the same
|
|
165
|
+
* storage. Fixing the receiver's type does not fix this call, because a
|
|
166
|
+
* prototype call's result comes from the callee's SIGNATURE, which the
|
|
167
|
+
* checker instantiates from the receiver EXPRESSION's type rather than from
|
|
168
|
+
* whatever this compiler selected for it -- so `buildSelectedSignature`
|
|
169
|
+
* derives `any` from the resolved signature while `structural.ts`'s `typeAt`
|
|
170
|
+
* publishes the census's `V | undefined`
|
|
171
|
+
* (`collectionMemberResultTypeAt`, `structural-array-element.ts`). The two
|
|
172
|
+
* are not in conflict; the signature is simply the half the checker could
|
|
173
|
+
* not instantiate. See `producers/invocations.ts`'s
|
|
174
|
+
* `collectionMemberResultOverride`.
|
|
175
|
+
*/
|
|
176
|
+
| {
|
|
177
|
+
readonly kind: 'collection-member-type-inference';
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* A call that RETURNS an object bag: three's `WebGLProperties.get`, whose
|
|
181
|
+
* body is `let map = properties.get( object ); if ( map === undefined ) {
|
|
182
|
+
* map = {}; ... } return map`. Nothing in the source states that return
|
|
183
|
+
* type, so `buildSelectedSignature` derives `any` from the resolved
|
|
184
|
+
* signature, while `object-bag-bindings.ts`'s whole-program census bound the
|
|
185
|
+
* 47 members the renderer then reads off it and `structural.ts`'s `typeAt`
|
|
186
|
+
* publishes them (`bagShapeTypeAt` via `callResultShapeAt`).
|
|
187
|
+
*
|
|
188
|
+
* The bag census REFUSES to answer at a call unless a caller takes on this
|
|
189
|
+
* declaration -- see `callResultShapeAt`'s own header for the measurement
|
|
190
|
+
* that made that rule (withheld 8 -> 20 when only one authority moved). See
|
|
191
|
+
* `producers/invocations.ts`'s `bagResultOverride`.
|
|
192
|
+
*/
|
|
193
|
+
| {
|
|
194
|
+
readonly kind: 'bag-return-inference';
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* `const K = Symbol.for('k')`: TypeScript's own rule, not this compiler's.
|
|
198
|
+
* `checkCallExpression` replaces a `Symbol()`/`Symbol.for()` call's result
|
|
199
|
+
* with a FRESH `unique symbol` type when the call is the initializer of a
|
|
200
|
+
* `const` declaration or a `readonly static` property, while the selected
|
|
201
|
+
* signature still returns plain `symbol`. Both are the same physical thing
|
|
202
|
+
* -- `representation/derive.ts` maps `unique-symbol` and `symbol` to the one
|
|
203
|
+
* `{ kind: 'symbol' }` carrier -- so nothing downstream has to choose; this
|
|
204
|
+
* arm exists to say the disagreement is the language's, so a disagreement
|
|
205
|
+
* that is NOT can still fail closed.
|
|
206
|
+
*/
|
|
207
|
+
| {
|
|
208
|
+
readonly kind: 'unique-symbol-fresh-type';
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* `Array.of.call(Pack, ...)` / `Array.prototype.map.call(arrayLike, fn)`:
|
|
212
|
+
* `Function.prototype.call`/`.apply`'s own ambient signature
|
|
213
|
+
* (`call<T, A extends any[], R>(this: (this: T, ...args: A) => R, thisArg:
|
|
214
|
+
* T, ...args: A): R`) ties its return type to ONE inferred parameter `R`,
|
|
215
|
+
* which loses precision the moment the receiver's own call is itself
|
|
216
|
+
* generic or overloaded (`Array.prototype.map<U>(...): U[]` has its own
|
|
217
|
+
* free `U` nothing in `.call`'s three type parameters resolves through).
|
|
218
|
+
* `normalize/structural-callable.ts`'s `createStructuralCallResultResolver`
|
|
219
|
+
* reads the receiver's OWN authenticated call signature(s) directly instead
|
|
220
|
+
* -- the same "receiver has a call signature" test
|
|
221
|
+
* `flow/callable-reach.ts`'s `unwrapExplicitThisCall` makes of the identical
|
|
222
|
+
* shape -- and `structural.ts`'s `callResultAt` already wires that answer
|
|
223
|
+
* into `context.types.typeAt(node)`, which is what an invocation's
|
|
224
|
+
* published result falls back to. This licenses the resulting disagreement
|
|
225
|
+
* against the checker's own overload-resolved `signature.getReturnType()`;
|
|
226
|
+
* see `producers/invocations.ts`'s `isExplicitThisCallWithAuthenticatedReceiver`.
|
|
227
|
+
*/
|
|
228
|
+
| {
|
|
229
|
+
readonly kind: 'explicit-this-call-return';
|
|
230
|
+
} | {
|
|
231
|
+
readonly kind: 'none';
|
|
232
|
+
};
|
|
233
|
+
/**
|
|
234
|
+
* Fail closed when the invocation result and the selected return type disagree
|
|
235
|
+
* for a reason the language does not license.
|
|
236
|
+
*
|
|
237
|
+
* A divergence that is real must be declared, not inferred downstream. If this
|
|
238
|
+
* throws, the producer published two answers for one operation.
|
|
239
|
+
*/
|
|
240
|
+
export declare const validateInvocationResult: (signature: SelectedSignature, invocationResult: StructuralTypeId, divergence: InvocationResultDivergence) => void;
|
|
241
|
+
/**
|
|
242
|
+
* Instantiated parameter types, or `null` when the checker withheld the mapper.
|
|
243
|
+
*
|
|
244
|
+
* Returning `null` is the fail-closed answer. A caller must handle it by
|
|
245
|
+
* reporting a missing capability, never by reconstructing substitutions.
|
|
246
|
+
*/
|
|
247
|
+
export declare const instantiatedParameterTypes: (signature: SelectedSignature) => readonly StructuralTypeId[] | null;
|
|
248
|
+
/**
|
|
249
|
+
* Whether the checker's own `unique symbol` rule is what made this call's
|
|
250
|
+
* result differ from its signature's return type.
|
|
251
|
+
*
|
|
252
|
+
* TypeScript's `checkCallExpression` gives a `Symbol()`/`Symbol.for()` call a
|
|
253
|
+
* FRESH `unique symbol` type when the call initializes a `const` declaration or
|
|
254
|
+
* a `readonly static` property, while the signature it selected still returns
|
|
255
|
+
* plain `symbol`. That is the language's rule, and this reads the checker's own
|
|
256
|
+
* two answers to recognize it -- the flags on the published result and on the
|
|
257
|
+
* selected signature's return type -- rather than re-deriving which callees the
|
|
258
|
+
* rule applies to from a name. A disagreement of any other shape still fails
|
|
259
|
+
* closed in `validateInvocationResult`.
|
|
260
|
+
*/
|
|
261
|
+
export declare const isUniqueSymbolFreshType: (checker: ts.TypeChecker, node: ts.Node, signature: ts.Signature | undefined) => boolean;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
/**
|
|
3
|
+
* Fail closed when the invocation result and the selected return type disagree
|
|
4
|
+
* for a reason the language does not license.
|
|
5
|
+
*
|
|
6
|
+
* A divergence that is real must be declared, not inferred downstream. If this
|
|
7
|
+
* throws, the producer published two answers for one operation.
|
|
8
|
+
*/
|
|
9
|
+
export const validateInvocationResult = (signature, invocationResult, divergence) => {
|
|
10
|
+
if (divergence.kind !== 'none')
|
|
11
|
+
return;
|
|
12
|
+
if (signature.returnType === invocationResult)
|
|
13
|
+
return;
|
|
14
|
+
throw new Error(`invocation result ${invocationResult} disagrees with selected return type ${signature.returnType} ` +
|
|
15
|
+
`for declaration ${signature.declaration} with no declared divergence`);
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Instantiated parameter types, or `null` when the checker withheld the mapper.
|
|
19
|
+
*
|
|
20
|
+
* Returning `null` is the fail-closed answer. A caller must handle it by
|
|
21
|
+
* reporting a missing capability, never by reconstructing substitutions.
|
|
22
|
+
*/
|
|
23
|
+
export const instantiatedParameterTypes = (signature) => {
|
|
24
|
+
if (signature.typeArguments.kind === 'inferred')
|
|
25
|
+
return null;
|
|
26
|
+
return signature.parameters.map((parameter) => parameter.type);
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Whether the checker's own `unique symbol` rule is what made this call's
|
|
30
|
+
* result differ from its signature's return type.
|
|
31
|
+
*
|
|
32
|
+
* TypeScript's `checkCallExpression` gives a `Symbol()`/`Symbol.for()` call a
|
|
33
|
+
* FRESH `unique symbol` type when the call initializes a `const` declaration or
|
|
34
|
+
* a `readonly static` property, while the signature it selected still returns
|
|
35
|
+
* plain `symbol`. That is the language's rule, and this reads the checker's own
|
|
36
|
+
* two answers to recognize it -- the flags on the published result and on the
|
|
37
|
+
* selected signature's return type -- rather than re-deriving which callees the
|
|
38
|
+
* rule applies to from a name. A disagreement of any other shape still fails
|
|
39
|
+
* closed in `validateInvocationResult`.
|
|
40
|
+
*/
|
|
41
|
+
export const isUniqueSymbolFreshType = (checker, node, signature) => {
|
|
42
|
+
if (signature === undefined)
|
|
43
|
+
return false;
|
|
44
|
+
// STATED, not HOLDS: per the doc comment above, this deliberately compares
|
|
45
|
+
// two of the CHECKER's own answers (the published result's flags against
|
|
46
|
+
// the selected signature's return-type flags) to recognize one specific
|
|
47
|
+
// language rule (a fresh `unique symbol` from `Symbol()`/`Symbol.for()`).
|
|
48
|
+
// It is not asking what this node holds as a value -- it is asking whether
|
|
49
|
+
// the checker itself treated this call specially -- so a census substitute
|
|
50
|
+
// would compare the wrong pair of types and could stop recognizing the
|
|
51
|
+
// rule. Left as a direct checker call.
|
|
52
|
+
if ((checker.getTypeAtLocation(node).flags & ts.TypeFlags.UniqueESSymbol) === 0)
|
|
53
|
+
return false;
|
|
54
|
+
return (checker.getReturnTypeOfSignature(signature).flags & ts.TypeFlags.ESSymbol) !== 0;
|
|
55
|
+
};
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import type { StructuralTypeId } from '../../identity/ids.js';
|
|
2
|
+
import { type StructuralShape, type StructuralType } from './structural-types.js';
|
|
3
|
+
/**
|
|
4
|
+
* The interning table for structural types.
|
|
5
|
+
*
|
|
6
|
+
* Interning is what makes structural identity decidable: two shapes are the
|
|
7
|
+
* same type exactly when they intern to the same id. Recursion is handled by
|
|
8
|
+
* anchoring: a declared shape reserves its id before its members are built, so
|
|
9
|
+
* a member that refers back to the declaration resolves to an id that already
|
|
10
|
+
* exists instead of recursing forever.
|
|
11
|
+
*
|
|
12
|
+
* An id is a counter, never the shape's key. A key names the whole shape, and a
|
|
13
|
+
* nested shape's key contains its members' keys -- so embedding the key in the
|
|
14
|
+
* id would make identity strings grow with the depth of the type, and every
|
|
15
|
+
* consumer that concatenates two of them grow quadratically. The key stays in
|
|
16
|
+
* the interning map, where it is compared once.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* An anchor and whether this call is the one that reserved it.
|
|
20
|
+
*
|
|
21
|
+
* `fresh` is the whole answer to "may I complete this?", and it has to come
|
|
22
|
+
* from the table because the table is the only thing that knows. A caller
|
|
23
|
+
* keeping its own set of anchors-it-has-marked is a second authority over one
|
|
24
|
+
* fact, and the two drift: an anchor completed by one walk and then unmarked by
|
|
25
|
+
* another walk's unwind reads as "not completed" and gets built a second time,
|
|
26
|
+
* which `complete` then refuses.
|
|
27
|
+
*/
|
|
28
|
+
export interface AnchorReservation {
|
|
29
|
+
readonly id: StructuralTypeId;
|
|
30
|
+
/** True exactly when this call created the reservation, so this caller owns completing or abandoning it. */
|
|
31
|
+
readonly fresh: boolean;
|
|
32
|
+
}
|
|
33
|
+
export interface StructuralTypeTable {
|
|
34
|
+
/** Intern a shape and return its canonical identity. */
|
|
35
|
+
readonly intern: (shape: StructuralShape) => StructuralTypeId;
|
|
36
|
+
/**
|
|
37
|
+
* Reserve the identity of a recursive declared shape before its members are
|
|
38
|
+
* known, then complete it. A shape must be completed before the table seals;
|
|
39
|
+
* an anchor left open is a normalization defect, not an unresolved type.
|
|
40
|
+
*/
|
|
41
|
+
readonly anchor: (declarationKey: string) => AnchorReservation;
|
|
42
|
+
readonly complete: (id: StructuralTypeId, shape: StructuralShape) => void;
|
|
43
|
+
/**
|
|
44
|
+
* Give up on an anchor whose walk was abandoned.
|
|
45
|
+
*
|
|
46
|
+
* A walk can be unwound before it completes an anchor it reserved -- a
|
|
47
|
+
* self-referential type retrying an outer entry does exactly that
|
|
48
|
+
* (`semantics/normalize/structural-self-reference.ts`) -- and the retry does
|
|
49
|
+
* not always reach the same anchor again: a declared anchor's key embeds its
|
|
50
|
+
* type arguments' ids, and those change when a member that interned as a
|
|
51
|
+
* union the first time anchors the second. So the reservation would sit open
|
|
52
|
+
* forever and the table would refuse to seal.
|
|
53
|
+
*
|
|
54
|
+
* The id is not deleted: shapes interned during the abandoned walk still name
|
|
55
|
+
* it, and reading one must answer rather than throw. It is completed with an
|
|
56
|
+
* `unresolved` shape saying exactly what happened, and its *key* is released
|
|
57
|
+
* so a retry that asks for the same key gets a fresh, completable anchor.
|
|
58
|
+
*/
|
|
59
|
+
readonly abandon: (id: StructuralTypeId) => void;
|
|
60
|
+
/**
|
|
61
|
+
* Release an anchor's KEY without touching its completed shape, so a later
|
|
62
|
+
* `anchor()` call for the same declaration mints a fresh id instead of
|
|
63
|
+
* reusing this one.
|
|
64
|
+
*
|
|
65
|
+
* Different from `abandon`: this anchor did not fail -- it completed, and
|
|
66
|
+
* its shape stays exactly as built, valid forever for anyone who already
|
|
67
|
+
* captured this id. The hazard is narrower and only visible from outside the
|
|
68
|
+
* table: this anchor's build may have read another anchor's id while that
|
|
69
|
+
* OTHER anchor was still open (a legitimate self-reference at the time), and
|
|
70
|
+
* that other anchor has since been abandoned and, on retry, completes under
|
|
71
|
+
* a *different* id. Reusing this anchor's key would keep handing out a
|
|
72
|
+
* shape that cites the abandoned id forever, even though the retry produced
|
|
73
|
+
* a correct answer nobody asked for again. The caller (`structural.ts`)
|
|
74
|
+
* knows which ids were touched inside a failed attempt's journal and calls
|
|
75
|
+
* this for every one of them; only the ones that are still an anchor key
|
|
76
|
+
* (i.e. really were built by `anchor()`, not `intern()`) do anything -- a
|
|
77
|
+
* plain content-addressed shape has no such key to release, so this is a
|
|
78
|
+
* no-op for it and safe to call unconditionally.
|
|
79
|
+
*/
|
|
80
|
+
readonly releaseKey: (id: StructuralTypeId) => void;
|
|
81
|
+
readonly get: (id: StructuralTypeId) => StructuralType;
|
|
82
|
+
/**
|
|
83
|
+
* Whether this id is an anchor reserved and not yet completed -- the one
|
|
84
|
+
* state `get` cannot answer. A walk that inspects the shapes behind ids it
|
|
85
|
+
* was handed while sibling anchors are still open (`structural.ts`'s family
|
|
86
|
+
* layout, flattening a member's union) asks this first.
|
|
87
|
+
*/
|
|
88
|
+
readonly isOpen: (id: StructuralTypeId) => boolean;
|
|
89
|
+
/** Whether the shape at this id reaches an anchor a frame abandoned. See the implementation. */
|
|
90
|
+
readonly citesAbandoned: (id: StructuralTypeId) => boolean;
|
|
91
|
+
readonly seal: () => ReadonlyMap<StructuralTypeId, StructuralType>;
|
|
92
|
+
}
|
|
93
|
+
export declare const createStructuralTypeTable: () => StructuralTypeTable;
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { structuralShapeKey } from './structural-types.js';
|
|
2
|
+
export const createStructuralTypeTable = () => {
|
|
3
|
+
const byKey = new Map();
|
|
4
|
+
// The reverse of `byKey`, kept in lockstep. `abandon` and `releaseKey` both
|
|
5
|
+
// need "what key does this id currently own, if any" -- without this, that
|
|
6
|
+
// question is a linear scan of `byKey`, paid on every rollback entry.
|
|
7
|
+
const idToKey = new Map();
|
|
8
|
+
const byId = new Map();
|
|
9
|
+
// The CONTENT key a completed anchor also owns, kept apart from `idToKey`
|
|
10
|
+
// because an anchor owns two keys at once: `anchor:<declaration>`, which is
|
|
11
|
+
// what recursion resolves through, and its shape's own canonical key, which
|
|
12
|
+
// is what makes it findable by anyone who builds the identical shape later.
|
|
13
|
+
const contentKeys = new Map();
|
|
14
|
+
const openAnchors = new Set();
|
|
15
|
+
// Which anchors were given up on, and under which key. Kept only so the
|
|
16
|
+
// completion guard below can say *why* an anchor is closed: "abandoned" and
|
|
17
|
+
// "completed twice" are different defects with different fixes, and one
|
|
18
|
+
// message covering both sends the reader to the wrong one.
|
|
19
|
+
const abandoned = new Map();
|
|
20
|
+
// A monotonic counter, never `byKey.size`: `abandon` releases a key, and a
|
|
21
|
+
// size-derived id would then hand the next shape an id already in use --
|
|
22
|
+
// two unrelated types under one identity, which is not a wrong answer this
|
|
23
|
+
// table could ever notice.
|
|
24
|
+
let nextId = 0;
|
|
25
|
+
let sealed = false;
|
|
26
|
+
const requireOpen = () => {
|
|
27
|
+
if (sealed)
|
|
28
|
+
throw new Error('structural type table is sealed; interning a new shape after seal would create a second answer');
|
|
29
|
+
};
|
|
30
|
+
// Union is associative: a synthesized (A | B | undefined) | C | null
|
|
31
|
+
// names the same values as A | B | C | undefined | null. Keeping the inner
|
|
32
|
+
// union as an arm hides one absence from carrier selection and gives the
|
|
33
|
+
// same type different identities depending on how inference grouped it.
|
|
34
|
+
// Expand only known union shapes. Open anchors remain references; following
|
|
35
|
+
// an object/class member here would change the type rather than normalize it.
|
|
36
|
+
const canonicalShape = (shape) => {
|
|
37
|
+
if (shape.kind !== 'union')
|
|
38
|
+
return shape;
|
|
39
|
+
const members = new Set();
|
|
40
|
+
const expanding = new Set();
|
|
41
|
+
const visit = (id) => {
|
|
42
|
+
const member = byId.get(id);
|
|
43
|
+
if (member?.kind !== 'union' || expanding.has(id)) {
|
|
44
|
+
members.add(id);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
expanding.add(id);
|
|
48
|
+
for (const child of member.members)
|
|
49
|
+
visit(child);
|
|
50
|
+
expanding.delete(id);
|
|
51
|
+
};
|
|
52
|
+
for (const member of shape.members)
|
|
53
|
+
visit(member);
|
|
54
|
+
return { kind: 'union', members: [...members] };
|
|
55
|
+
};
|
|
56
|
+
const intern = (input) => {
|
|
57
|
+
requireOpen();
|
|
58
|
+
const shape = canonicalShape(input);
|
|
59
|
+
const key = structuralShapeKey(shape);
|
|
60
|
+
const existing = byKey.get(key);
|
|
61
|
+
if (existing)
|
|
62
|
+
return existing;
|
|
63
|
+
const id = `type|${nextId++}`;
|
|
64
|
+
byKey.set(key, id);
|
|
65
|
+
idToKey.set(id, key);
|
|
66
|
+
byId.set(id, shape);
|
|
67
|
+
return id;
|
|
68
|
+
};
|
|
69
|
+
const anchor = (declarationKey) => {
|
|
70
|
+
requireOpen();
|
|
71
|
+
const key = `anchor:${declarationKey}`;
|
|
72
|
+
const existing = byKey.get(key);
|
|
73
|
+
if (existing)
|
|
74
|
+
return { id: existing, fresh: false };
|
|
75
|
+
const id = `type|${nextId++}`;
|
|
76
|
+
byKey.set(key, id);
|
|
77
|
+
idToKey.set(id, key);
|
|
78
|
+
openAnchors.add(id);
|
|
79
|
+
return { id, fresh: true };
|
|
80
|
+
};
|
|
81
|
+
const keyOf = (id) => idToKey.get(id) ?? null;
|
|
82
|
+
const complete = (id, input) => {
|
|
83
|
+
requireOpen();
|
|
84
|
+
if (!openAnchors.delete(id)) {
|
|
85
|
+
const why = abandoned.has(id)
|
|
86
|
+
? `it was abandoned (key ${abandoned.get(id) ?? ''})`
|
|
87
|
+
: `it was already completed (key ${keyOf(id) ?? '<released>'})`;
|
|
88
|
+
throw new Error(`structural type ${id} is not an open anchor and cannot be completed: ${why}`);
|
|
89
|
+
}
|
|
90
|
+
const shape = canonicalShape(input);
|
|
91
|
+
byId.set(id, shape);
|
|
92
|
+
// An anchor is reserved by DECLARATION and completed with CONTENT, and
|
|
93
|
+
// until this line the content was never addressable: `intern` looks a
|
|
94
|
+
// shape up by `structuralShapeKey`, `complete` only wrote `byId`, so the
|
|
95
|
+
// very next `intern` of the identical shape missed and minted a second
|
|
96
|
+
// id for it. One type, two ids -- and every consumer keyed on the id then
|
|
97
|
+
// sees two carriers where the language has one, which is the
|
|
98
|
+
// "field X is stored as ... and this read publishes ..." refusal with two
|
|
99
|
+
// sides that print the same thing.
|
|
100
|
+
//
|
|
101
|
+
// Measured on hono: the `H` handler union's own call signature was
|
|
102
|
+
// anchored as `type|955` and re-interned as `type|1307`, which split the
|
|
103
|
+
// router's `Result` tuple, its `add`/`match` member conventions and the
|
|
104
|
+
// `#matchResult` cell into twins in five separate refusals.
|
|
105
|
+
//
|
|
106
|
+
// Nominal identity is not at risk: `declared`, `class-instance`,
|
|
107
|
+
// `class-constructor` and `object-anchor` all carry their declaration in
|
|
108
|
+
// their key, so two declarations with identical bodies keep two ids. What
|
|
109
|
+
// this merges is what has no nominal identity to lose -- a signature, an
|
|
110
|
+
// object body -- which is exactly what interning is for.
|
|
111
|
+
//
|
|
112
|
+
// An existing owner wins. A structurally identical shape interned WHILE
|
|
113
|
+
// this anchor was open is already the id everything built since then
|
|
114
|
+
// cites, and re-pointing the key would make `byKey` disagree with what is
|
|
115
|
+
// already in the graph. The anchor stays reachable by its own key either
|
|
116
|
+
// way.
|
|
117
|
+
const contentKey = structuralShapeKey(shape);
|
|
118
|
+
if (!byKey.has(contentKey)) {
|
|
119
|
+
byKey.set(contentKey, id);
|
|
120
|
+
contentKeys.set(id, contentKey);
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
const abandon = (id) => {
|
|
124
|
+
requireOpen();
|
|
125
|
+
if (!openAnchors.delete(id))
|
|
126
|
+
return;
|
|
127
|
+
const realKey = idToKey.get(id);
|
|
128
|
+
const key = realKey ?? '<key already released>';
|
|
129
|
+
abandoned.set(id, key);
|
|
130
|
+
if (realKey) {
|
|
131
|
+
idToKey.delete(id);
|
|
132
|
+
byKey.delete(realKey);
|
|
133
|
+
}
|
|
134
|
+
// The key travels into the reason. An abandoned anchor is only ever seen
|
|
135
|
+
// downstream as an unresolved member of some other shape, and without the
|
|
136
|
+
// key that report names neither the type that was being walked nor the
|
|
137
|
+
// declaration it came from -- which is the whole question when one shows up.
|
|
138
|
+
byId.set(id, { kind: 'unresolved', reason: `a walk reserved this anchor for ${key} and was unwound before completing it` });
|
|
139
|
+
};
|
|
140
|
+
/**
|
|
141
|
+
* Whether the shape at `id` reaches, through any of the ids it names, an
|
|
142
|
+
* anchor some frame gave up on.
|
|
143
|
+
*
|
|
144
|
+
* This is the question `releaseKey`'s only caller actually has. An unwound
|
|
145
|
+
* walk has to withdraw the shapes it built *on an abandoned sibling* --
|
|
146
|
+
* those cite an id that is now an `unresolved` stub -- but withdrawing the
|
|
147
|
+
* rest is not conservative, it MINTS DUPLICATES: an anchor whose key is
|
|
148
|
+
* released and whose declaration is walked again by a later specialization
|
|
149
|
+
* view gets a second id for one type, and every consumer keyed on the id
|
|
150
|
+
* then sees two carriers where the language has one. Measured on hono:
|
|
151
|
+
* `Headers` held three ids and `Request` two, which is where
|
|
152
|
+
* `binding-read-conversion:function-value-dispatch(...)->...(identical...)`
|
|
153
|
+
* came from -- a conversion between a carrier and itself, unsatisfiable
|
|
154
|
+
* because there is nothing to convert.
|
|
155
|
+
*
|
|
156
|
+
* A structural scan rather than a per-kind walk: this answers a diagnostic
|
|
157
|
+
* question about ids a shape happens to name, not a semantic one about what
|
|
158
|
+
* a shape MEANS, so it must not go stale when a shape kind gains a field --
|
|
159
|
+
* which is exactly what a hand-maintained enumeration would do.
|
|
160
|
+
*/
|
|
161
|
+
const citesAbandoned = (id) => {
|
|
162
|
+
const seen = new Set();
|
|
163
|
+
const pending = [id];
|
|
164
|
+
while (pending.length > 0) {
|
|
165
|
+
const next = pending.pop();
|
|
166
|
+
if (next === undefined || seen.has(next))
|
|
167
|
+
continue;
|
|
168
|
+
seen.add(next);
|
|
169
|
+
if (abandoned.has(next))
|
|
170
|
+
return true;
|
|
171
|
+
const shape = byId.get(next);
|
|
172
|
+
if (!shape)
|
|
173
|
+
continue;
|
|
174
|
+
const scan = (value) => {
|
|
175
|
+
if (typeof value === 'string') {
|
|
176
|
+
if (/^type\|\d+$/.test(value))
|
|
177
|
+
pending.push(value);
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
if (Array.isArray(value)) {
|
|
181
|
+
for (const element of value)
|
|
182
|
+
scan(element);
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
if (value !== null && typeof value === 'object')
|
|
186
|
+
for (const element of Object.values(value))
|
|
187
|
+
scan(element);
|
|
188
|
+
};
|
|
189
|
+
scan(shape);
|
|
190
|
+
}
|
|
191
|
+
return false;
|
|
192
|
+
};
|
|
193
|
+
const releaseKey = (id) => {
|
|
194
|
+
requireOpen();
|
|
195
|
+
// An anchor still open belongs to `abandon`, not this: it has not
|
|
196
|
+
// completed yet, and releasing its key out from under an in-flight build
|
|
197
|
+
// would let a second, concurrent reservation mint a duplicate anchor for
|
|
198
|
+
// the same declaration. Every caller of `releaseKey` only ever names an
|
|
199
|
+
// id whose build already returned (see the docstring), so this is a
|
|
200
|
+
// defensive no-op, not a path this table expects to take.
|
|
201
|
+
if (openAnchors.has(id))
|
|
202
|
+
return;
|
|
203
|
+
// Both keys, for the one reason this function exists: nothing may reach
|
|
204
|
+
// this id by name again. Leaving the content key behind would keep
|
|
205
|
+
// handing it out to every later build of the identical shape, which is
|
|
206
|
+
// precisely the "keeps citing an abandoned id forever" hazard the
|
|
207
|
+
// docstring describes, reached by the other road.
|
|
208
|
+
const contentKey = contentKeys.get(id);
|
|
209
|
+
if (contentKey !== undefined) {
|
|
210
|
+
contentKeys.delete(id);
|
|
211
|
+
byKey.delete(contentKey);
|
|
212
|
+
}
|
|
213
|
+
const key = idToKey.get(id);
|
|
214
|
+
if (!key || !key.startsWith('anchor:'))
|
|
215
|
+
return;
|
|
216
|
+
idToKey.delete(id);
|
|
217
|
+
byKey.delete(key);
|
|
218
|
+
};
|
|
219
|
+
const get = (id) => {
|
|
220
|
+
const shape = byId.get(id);
|
|
221
|
+
if (!shape)
|
|
222
|
+
throw new Error(`structural type ${id} was referenced before it was interned`);
|
|
223
|
+
return { id, shape };
|
|
224
|
+
};
|
|
225
|
+
const seal = () => {
|
|
226
|
+
if (openAnchors.size > 0) {
|
|
227
|
+
throw new Error(`structural type table sealed with ${openAnchors.size} incomplete recursive anchor(s): ${[...openAnchors].join(', ')}`);
|
|
228
|
+
}
|
|
229
|
+
sealed = true;
|
|
230
|
+
const result = new Map();
|
|
231
|
+
for (const [id, shape] of byId)
|
|
232
|
+
result.set(id, Object.freeze({ id, shape }));
|
|
233
|
+
return result;
|
|
234
|
+
};
|
|
235
|
+
const isOpen = (id) => openAnchors.has(id);
|
|
236
|
+
return { intern, anchor, complete, abandon, citesAbandoned, releaseKey, get, isOpen, seal };
|
|
237
|
+
};
|