@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,63 @@
|
|
|
1
|
+
import type { OperationFamily } from '../../identity/ids.js';
|
|
2
|
+
import type { CensusBlocker, FamilyReport } from '../model/coverage.js';
|
|
3
|
+
import type { SemanticEdge } from '../model/edges.js';
|
|
4
|
+
import type { SemanticOperation } from '../model/operations.js';
|
|
5
|
+
import type { CensusCandidate } from './census.js';
|
|
6
|
+
/**
|
|
7
|
+
* Publication transactions.
|
|
8
|
+
*
|
|
9
|
+
* Publication is transactional at the smallest complete authority-connected
|
|
10
|
+
* component -- never at family scope. Family-global all-or-nothing publication
|
|
11
|
+
* is forbidden precisely because it lets one blocked construct suppress an
|
|
12
|
+
* unrelated one that was fully proven, which then reads as "the family is not
|
|
13
|
+
* installed" and hides how much actually works.
|
|
14
|
+
*
|
|
15
|
+
* The scope that matters is the program, not the family. Producers cite each
|
|
16
|
+
* other across families -- an invocation's callee is a reference, a loop's
|
|
17
|
+
* element is a protocol result -- so a citation's producer often lives in a
|
|
18
|
+
* different family than the citing operation. Deciding what commits one family
|
|
19
|
+
* at a time cannot see those edges, and publishes operations whose operands name
|
|
20
|
+
* results nobody published.
|
|
21
|
+
*/
|
|
22
|
+
/** What one candidate produced: operations and edges, or the reason it could not. */
|
|
23
|
+
export type CandidateContribution = {
|
|
24
|
+
readonly kind: 'operations';
|
|
25
|
+
readonly operations: readonly SemanticOperation[];
|
|
26
|
+
readonly edges: readonly SemanticEdge[];
|
|
27
|
+
} | {
|
|
28
|
+
readonly kind: 'blocked';
|
|
29
|
+
readonly blocker: CensusBlocker;
|
|
30
|
+
};
|
|
31
|
+
/** A family producer: it sees the census and returns one contribution per candidate. */
|
|
32
|
+
export interface FamilyProducer {
|
|
33
|
+
readonly family: OperationFamily;
|
|
34
|
+
readonly contribute: (candidate: CensusCandidate) => CandidateContribution;
|
|
35
|
+
}
|
|
36
|
+
export interface ProgramPublication {
|
|
37
|
+
readonly reports: ReadonlyMap<OperationFamily, FamilyReport>;
|
|
38
|
+
readonly operations: readonly SemanticOperation[];
|
|
39
|
+
readonly edges: readonly SemanticEdge[];
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Run every installed producer over its census and commit what survives.
|
|
43
|
+
*
|
|
44
|
+
* A family with no producer is not skipped: every candidate it censused becomes
|
|
45
|
+
* a stated blocker, so "no producer" and "no such construct in this program"
|
|
46
|
+
* stay different answers.
|
|
47
|
+
*/
|
|
48
|
+
/**
|
|
49
|
+
* Producers for one monomorphized copy.
|
|
50
|
+
*
|
|
51
|
+
* A copy needs its own producer set because a producer closes over the
|
|
52
|
+
* structural mapper it will ask, and `T` resolves differently in each copy. The
|
|
53
|
+
* alternative -- threading the copy through every `typeAt` call in every
|
|
54
|
+
* producer -- would put the same forwarded argument in a hundred signatures to
|
|
55
|
+
* express one fact that belongs to the candidate.
|
|
56
|
+
*
|
|
57
|
+
* What must NOT be per copy is the ordinal counters the context carries: two
|
|
58
|
+
* copies minting from independent counters would hand two different operations
|
|
59
|
+
* the same identity. The caller keeps one context and swaps only its mapper,
|
|
60
|
+
* which is why this is a lookup rather than a factory.
|
|
61
|
+
*/
|
|
62
|
+
export type ProducersFor = (candidate: CensusCandidate) => ReadonlyMap<OperationFamily, FamilyProducer>;
|
|
63
|
+
export declare const publishProgram: (families: readonly OperationFamily[], producersFor: ProducersFor, census: ReadonlyMap<OperationFamily, readonly CensusCandidate[]>) => ProgramPublication;
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
const resultsOf = (prepared) => {
|
|
2
|
+
const published = new Set();
|
|
3
|
+
for (const entry of prepared) {
|
|
4
|
+
if (!entry.live)
|
|
5
|
+
continue;
|
|
6
|
+
for (const operation of entry.operations) {
|
|
7
|
+
for (const result of operation.results)
|
|
8
|
+
published.add(result.id);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
return published;
|
|
12
|
+
};
|
|
13
|
+
/** The first operand of `entry` naming a result nobody published, if any. */
|
|
14
|
+
const danglingCitation = (entry, published) => {
|
|
15
|
+
for (const operation of entry.operations) {
|
|
16
|
+
for (const operand of operation.operands) {
|
|
17
|
+
if (operand.source.kind !== 'result')
|
|
18
|
+
continue;
|
|
19
|
+
if (!published.has(operand.source.result))
|
|
20
|
+
return operand.source.result;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return null;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Withhold every candidate whose operands cite a result no producer published.
|
|
27
|
+
*
|
|
28
|
+
* Producers cite each other by recomputing the identity a sibling family will
|
|
29
|
+
* mint, which is correct -- identity is deterministic -- but it is a prediction,
|
|
30
|
+
* and the sibling may have been blocked or never installed. Committing the
|
|
31
|
+
* citing operation anyway publishes an operand pointing at nothing.
|
|
32
|
+
*
|
|
33
|
+
* Withholding one candidate removes its results, which can strand a second, so
|
|
34
|
+
* this runs to a fixed point rather than in a single pass.
|
|
35
|
+
*
|
|
36
|
+
* Withholding an INVOCATION is different in kind, and is reported as a root
|
|
37
|
+
* rather than as a derived consequence. A withheld value is a value the citing
|
|
38
|
+
* operation then does without; a withheld call is a call the source performs and
|
|
39
|
+
* the program does not, while still emitting -- the operands stay materialised
|
|
40
|
+
* and the emitter renders them as `(void)` discards. Three's
|
|
41
|
+
* `materials.refreshFogUniforms( m_uniforms, fog )` was dropped exactly this way
|
|
42
|
+
* for want of a `dictionary -> native-record-ref` argument conversion, so
|
|
43
|
+
* The three.js app rendered with no fog at all and nothing in the report said so:
|
|
44
|
+
* `diagnostics/sweep.ts` grades every `withheld:` reason `derived`, and the
|
|
45
|
+
* coverage report filters those out by default. Naming the dropped call keeps
|
|
46
|
+
* the guard fail-closed -- a missing conversion stays a compile-time answer
|
|
47
|
+
* instead of becoming a silently wrong picture.
|
|
48
|
+
*/
|
|
49
|
+
const withholdDanglingCitations = (prepared, blockers) => {
|
|
50
|
+
let changed = true;
|
|
51
|
+
while (changed) {
|
|
52
|
+
changed = false;
|
|
53
|
+
const published = resultsOf(prepared);
|
|
54
|
+
for (const entry of prepared) {
|
|
55
|
+
if (!entry.live)
|
|
56
|
+
continue;
|
|
57
|
+
const dangling = danglingCitation(entry, published);
|
|
58
|
+
if (dangling === null)
|
|
59
|
+
continue;
|
|
60
|
+
entry.live = false;
|
|
61
|
+
const dropsInvocation = entry.operations.some((operation) => operation.family === 'invocation');
|
|
62
|
+
blockers.set(entry.candidate, {
|
|
63
|
+
source: entry.candidate.id,
|
|
64
|
+
family: entry.family,
|
|
65
|
+
reason: dropsInvocation
|
|
66
|
+
? `dropped invocation: cites result ${dangling}, which no installed producer publishes`
|
|
67
|
+
: `withheld: cites result ${dangling}, which no installed producer publishes`,
|
|
68
|
+
missingPrimitive: null
|
|
69
|
+
});
|
|
70
|
+
changed = true;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
const coverageOf = (published, blocked) => blocked === 0 ? 'complete' : published > 0 ? 'partial' : 'not-installed';
|
|
75
|
+
/**
|
|
76
|
+
* One candidate's contribution, with a producer's own failure turned into a
|
|
77
|
+
* stated blocker.
|
|
78
|
+
*
|
|
79
|
+
* A producer that throws has met a construct it cannot model. That is exactly
|
|
80
|
+
* what a blocker records, and letting the throw escape instead takes down the
|
|
81
|
+
* whole compilation over one node -- so a program containing a single
|
|
82
|
+
* unmodelled expression reports nothing at all, when it could have reported
|
|
83
|
+
* every other gap it has. Nothing is hidden by this: a blocker refuses the
|
|
84
|
+
* certificate just as loudly, and it names the candidate.
|
|
85
|
+
*/
|
|
86
|
+
const contributionOf = (producer, candidate) => {
|
|
87
|
+
try {
|
|
88
|
+
return producer.contribute(candidate);
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
92
|
+
const detail = process.env['GEA_PRODUCER_STACK_DEBUG'] && error instanceof Error && error.stack ? error.stack : message;
|
|
93
|
+
return {
|
|
94
|
+
kind: 'blocked',
|
|
95
|
+
blocker: {
|
|
96
|
+
source: candidate.id,
|
|
97
|
+
family: producer.family,
|
|
98
|
+
reason: `producer failed: ${detail}`,
|
|
99
|
+
missingPrimitive: null
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
export const publishProgram = (families, producersFor, census) => {
|
|
105
|
+
const prepared = [];
|
|
106
|
+
const blockers = new Map();
|
|
107
|
+
const candidateCount = new Map();
|
|
108
|
+
for (const family of families) {
|
|
109
|
+
const candidates = census.get(family) ?? [];
|
|
110
|
+
candidateCount.set(family, candidates.length);
|
|
111
|
+
for (const candidate of candidates) {
|
|
112
|
+
const producer = producersFor(candidate).get(family);
|
|
113
|
+
if (!producer) {
|
|
114
|
+
blockers.set(candidate, {
|
|
115
|
+
source: candidate.id,
|
|
116
|
+
family,
|
|
117
|
+
reason: `family ${family} has no installed producer`,
|
|
118
|
+
missingPrimitive: null
|
|
119
|
+
});
|
|
120
|
+
prepared.push({ family, candidate, operations: [], edges: [], live: false });
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
const contribution = contributionOf(producer, candidate);
|
|
124
|
+
if (contribution.kind === 'blocked') {
|
|
125
|
+
blockers.set(candidate, contribution.blocker);
|
|
126
|
+
prepared.push({ family, candidate, operations: [], edges: [], live: false });
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
prepared.push({ family, candidate, operations: contribution.operations, edges: contribution.edges, live: true });
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
withholdDanglingCitations(prepared, blockers);
|
|
133
|
+
const operations = [];
|
|
134
|
+
const edges = [];
|
|
135
|
+
const publishedByFamily = new Map();
|
|
136
|
+
const operationsByFamily = new Map();
|
|
137
|
+
for (const entry of prepared) {
|
|
138
|
+
if (!entry.live)
|
|
139
|
+
continue;
|
|
140
|
+
publishedByFamily.set(entry.family, (publishedByFamily.get(entry.family) ?? 0) + 1);
|
|
141
|
+
operations.push(...entry.operations);
|
|
142
|
+
edges.push(...entry.edges);
|
|
143
|
+
for (const operation of entry.operations) {
|
|
144
|
+
// Attribution follows the operation's own family, not the candidate's: a
|
|
145
|
+
// loop candidate mints the protocol operations its iteration needs, and
|
|
146
|
+
// those belong to the protocol family's coverage.
|
|
147
|
+
const bucket = operationsByFamily.get(operation.family) ?? [];
|
|
148
|
+
bucket.push(operation);
|
|
149
|
+
operationsByFamily.set(operation.family, bucket);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
const blockersByFamily = new Map();
|
|
153
|
+
for (const blocker of blockers.values()) {
|
|
154
|
+
const bucket = blockersByFamily.get(blocker.family) ?? [];
|
|
155
|
+
bucket.push(blocker);
|
|
156
|
+
blockersByFamily.set(blocker.family, bucket);
|
|
157
|
+
}
|
|
158
|
+
const reports = new Map();
|
|
159
|
+
for (const family of families) {
|
|
160
|
+
const familyBlockers = blockersByFamily.get(family) ?? [];
|
|
161
|
+
const published = publishedByFamily.get(family) ?? 0;
|
|
162
|
+
reports.set(family, {
|
|
163
|
+
family,
|
|
164
|
+
coverage: coverageOf(published, familyBlockers.length),
|
|
165
|
+
operations: (operationsByFamily.get(family) ?? []).map((operation) => operation.id),
|
|
166
|
+
blockers: familyBlockers,
|
|
167
|
+
publishedCandidates: published,
|
|
168
|
+
censusedCandidates: candidateCount.get(family) ?? 0
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
return { reports, operations, edges };
|
|
172
|
+
};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { OperationId } from '../../identity/ids.js';
|
|
3
|
+
import type { AbsentGlobalCensus } from './absent-globals.js';
|
|
4
|
+
import type { IdentityTable } from './identities.js';
|
|
5
|
+
/**
|
|
6
|
+
* Provably-dead consequents of a host-absence `typeof` guard.
|
|
7
|
+
*
|
|
8
|
+
* `absent-globals.ts` answers "is this value/type absent" at a POSITION. This
|
|
9
|
+
* answers a different question: is a whole REGION of code unreachable,
|
|
10
|
+
* because the guard that would have to pass for it to run cannot pass on
|
|
11
|
+
* this host. The two are not the same fact and must not share a mechanism --
|
|
12
|
+
* see the doc comment on `isDeadOperation` below for why.
|
|
13
|
+
*
|
|
14
|
+
* Scope, deliberately narrow, matching exactly what a real corpus program
|
|
15
|
+
* does and nothing more:
|
|
16
|
+
*
|
|
17
|
+
* if ( typeof X !== 'undefined' && x instanceof X ) { ... }
|
|
18
|
+
*
|
|
19
|
+
* Both conjuncts must independently resolve, BY SYMBOL through
|
|
20
|
+
* `AbsentGlobalCensus.typeAt` (never by spelling), to a host-declared-absent
|
|
21
|
+
* ambient value. `X` cannot exist on this host, so `typeof X !== 'undefined'`
|
|
22
|
+
* is provably `false`; `&&` short-circuits; the consequent never executes.
|
|
23
|
+
* That is a proof from the host's own statement, not an inference this
|
|
24
|
+
* compiler drew -- the one warrant this rule is allowed to rest on. Either
|
|
25
|
+
* conjunct may be individually wrapped in its own `( ... )` (three.js's
|
|
26
|
+
* `Source.js`) -- `unwrapParens` strips that before the shape checks, since
|
|
27
|
+
* it is a syntactic artifact of how the source was written, not a different
|
|
28
|
+
* logical shape. Only the `!==` polarity is handled. The `else`/`else if`
|
|
29
|
+
* chain is never touched: it
|
|
30
|
+
* is the code that actually runs on this host. A `typeof` guard that is not
|
|
31
|
+
* this exact `&&`-of-two-conjuncts shape -- nested inside a longer `&&`/`||`
|
|
32
|
+
* chain, written as a ternary, or checked with `===` and an early return --
|
|
33
|
+
* is out of scope and left alone rather than guessed at.
|
|
34
|
+
*/
|
|
35
|
+
export interface DeadTypeofGuardCensus {
|
|
36
|
+
/**
|
|
37
|
+
* Whether an operation's own source position falls inside a proven-dead
|
|
38
|
+
* guard consequent.
|
|
39
|
+
*
|
|
40
|
+
* Keyed on the OPERATION's identity, not on any operand's structural type.
|
|
41
|
+
* That is the fix for the defect the prior (reverted) rule had: a
|
|
42
|
+
* structural `never` is a single, shape-only fact that TypeScript's own
|
|
43
|
+
* (sometimes unsound) inference produces just as often as a host-absence
|
|
44
|
+
* proof does, and once interned every occurrence collapses to the SAME
|
|
45
|
+
* structural type id -- there is no way to tell, from a `StructuralTypeId`
|
|
46
|
+
* alone, which `never` a given position's is. Reachability, by contrast,
|
|
47
|
+
* is a property of WHERE in the source an operation sits, which this
|
|
48
|
+
* census proves directly from the guard's own AST shape and the host's own
|
|
49
|
+
* absence statement, never from what type anything infers to.
|
|
50
|
+
*/
|
|
51
|
+
readonly isDeadOperation: (id: OperationId) => boolean;
|
|
52
|
+
/** How many qualifying guards were found, for measurement. */
|
|
53
|
+
readonly guardCount: number;
|
|
54
|
+
}
|
|
55
|
+
export declare const emptyDeadTypeofGuardCensus: DeadTypeofGuardCensus;
|
|
56
|
+
/**
|
|
57
|
+
* The census for one program.
|
|
58
|
+
*
|
|
59
|
+
* `emptyDeadTypeofGuardCensus` is returned unchanged when the host census
|
|
60
|
+
* itself is empty (`absent.absentCount === 0`): nothing is absent, so no
|
|
61
|
+
* `typeof` guard on this program can ever be proven dead by this rule, and
|
|
62
|
+
* walking every file to confirm that would be pure cost.
|
|
63
|
+
*/
|
|
64
|
+
export declare const censusDeadTypeofGuards: (files: readonly ts.SourceFile[], absent: AbsentGlobalCensus, identities: IdentityTable) => DeadTypeofGuardCensus;
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
export const emptyDeadTypeofGuardCensus = {
|
|
3
|
+
isDeadOperation: () => false,
|
|
4
|
+
guardCount: 0
|
|
5
|
+
};
|
|
6
|
+
/** Whether `expr` is the string literal `'undefined'`. */
|
|
7
|
+
const isUndefinedStringLiteral = (expr) => ts.isStringLiteralLike(expr) && expr.text === 'undefined';
|
|
8
|
+
/**
|
|
9
|
+
* Strips a wrapping `( ... )`, repeatedly.
|
|
10
|
+
*
|
|
11
|
+
* `( typeof HTMLVideoElement !== 'undefined' ) && ( data instanceof
|
|
12
|
+
* HTMLVideoElement )` (three.js's `Source.js`) is the identical `&&`-of-two-
|
|
13
|
+
* conjuncts shape this module matches, with each conjunct individually
|
|
14
|
+
* parenthesized -- a purely syntactic wrapper TypeScript's parser leaves in
|
|
15
|
+
* the tree as a `ParenthesizedExpression` node around an otherwise identical
|
|
16
|
+
* `BinaryExpression`. Unwrapping it before the shape checks below admits no
|
|
17
|
+
* new logical shape -- the `&&`, the `typeof`, the `instanceof`, and the
|
|
18
|
+
* symbol-resolved host-absence proof are all still required exactly as
|
|
19
|
+
* before -- it only stops a wrapper the parser inserts from hiding a shape
|
|
20
|
+
* this module already handles.
|
|
21
|
+
*/
|
|
22
|
+
const unwrapParens = (expr) => {
|
|
23
|
+
let current = expr;
|
|
24
|
+
while (ts.isParenthesizedExpression(current))
|
|
25
|
+
current = current.expression;
|
|
26
|
+
return current;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* `typeof <operand> !== 'undefined'`, where `<operand>` resolves BY SYMBOL
|
|
30
|
+
* (through `absent.typeAt`, the same resolution `absent-globals.ts` already
|
|
31
|
+
* uses everywhere else) to a host-declared-absent ambient value -- or `null`
|
|
32
|
+
* when `expr` is not that shape, or resolves to nothing this host denied.
|
|
33
|
+
*
|
|
34
|
+
* A program's own same-named local is untouched: `typeAt` only answers for a
|
|
35
|
+
* reference whose SYMBOL is the standard library's ambient declaration a host
|
|
36
|
+
* listed, exactly as every other consumer of `AbsentGlobalCensus` requires.
|
|
37
|
+
*/
|
|
38
|
+
const absentTypeofOperand = (expr, absent) => {
|
|
39
|
+
if (!ts.isBinaryExpression(expr))
|
|
40
|
+
return null;
|
|
41
|
+
if (expr.operatorToken.kind !== ts.SyntaxKind.ExclamationEqualsEqualsToken)
|
|
42
|
+
return null;
|
|
43
|
+
const left = expr.left;
|
|
44
|
+
const right = expr.right;
|
|
45
|
+
const [typeofExpr, literal] = ts.isTypeOfExpression(left) ? [left, right] : ts.isTypeOfExpression(right) ? [right, left] : [null, null];
|
|
46
|
+
if (!typeofExpr || !literal)
|
|
47
|
+
return null;
|
|
48
|
+
if (!isUndefinedStringLiteral(literal))
|
|
49
|
+
return null;
|
|
50
|
+
return absent.typeAt(typeofExpr.expression) !== null ? typeofExpr.expression : null;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* `<expr> instanceof <name>`, where `<name>` ALSO resolves by symbol to a
|
|
54
|
+
* host-declared-absent value -- checked independently of, not merely
|
|
55
|
+
* spelling-matched against, the `typeof` guard's own operand. Two conjuncts
|
|
56
|
+
* that each independently name an absent global is at least as strong a
|
|
57
|
+
* proof as one that textually repeats a name, and it costs nothing extra:
|
|
58
|
+
* `absent.typeAt` is already the one authority for "is this reference
|
|
59
|
+
* absent," so asking it twice is asking the same question at two positions,
|
|
60
|
+
* never a second question.
|
|
61
|
+
*/
|
|
62
|
+
const isInstanceofAbsentName = (expr, absent) => ts.isBinaryExpression(expr) && expr.operatorToken.kind === ts.SyntaxKind.InstanceOfKeyword && absent.typeAt(expr.right) !== null;
|
|
63
|
+
/**
|
|
64
|
+
* Whether this condition is PROVABLY FALSE from the host's own absence
|
|
65
|
+
* statement -- one `typeof X !== 'undefined' && v instanceof X` conjunction,
|
|
66
|
+
* or a `||` chain of them where EVERY disjunct is one.
|
|
67
|
+
*
|
|
68
|
+
* three's `resizeImage` (`WebGLTextures.js`) is the disjunctive form, and it
|
|
69
|
+
* is the shape that matters: four clauses, one each for `HTMLImageElement`,
|
|
70
|
+
* `HTMLCanvasElement`, `ImageBitmap` and `VideoFrame`, all four host-absent.
|
|
71
|
+
* A disjunction is false exactly when every disjunct is false, so the warrant
|
|
72
|
+
* is unchanged and the consequent is as dead as a single conjunction's -- the
|
|
73
|
+
* shape was simply not matched. Its `return canvas` then stops counting as
|
|
74
|
+
* evidence about what the function returns, and the remaining returns can
|
|
75
|
+
* agree.
|
|
76
|
+
*
|
|
77
|
+
* Requiring EVERY disjunct is what keeps this sound: one live clause makes the
|
|
78
|
+
* whole condition possibly true, and there is no partial credit to take.
|
|
79
|
+
*
|
|
80
|
+
* WHAT IT IS WORTH, MEASURED: 12 fewer obligations on the three.js app and nothing else.
|
|
81
|
+
* missingRows is unchanged (408), so none of the twelve were mandatory, and the
|
|
82
|
+
* boxed count does not move.
|
|
83
|
+
*
|
|
84
|
+
* ⛔ The obvious next step does NOT pay, and this is the place to say so. It
|
|
85
|
+
* looks as though `return-bindings.ts` should consult reachability -- a `return`
|
|
86
|
+
* inside a proven-dead branch is not evidence about what a function returns, and
|
|
87
|
+
* `resizeImage` (`WebGLTextures.js`) is exactly that shape: `return canvas`
|
|
88
|
+
* inside this guard, refusing the census against the other returns. It gains
|
|
89
|
+
* nothing. `resizeImage`'s other two returns are both `return image`, and
|
|
90
|
+
* `image` is its own unannotated parameter, so the census refuses on `any` with
|
|
91
|
+
* or without the dead arm excluded. The dead arm was never the binding
|
|
92
|
+
* constraint. Threading a node-level reachability predicate into the return
|
|
93
|
+
* census (which would also mean building `absent` before the census chain) buys
|
|
94
|
+
* nothing until the parameter underneath it is typed.
|
|
95
|
+
*
|
|
96
|
+
* ⛔ Read `dead-typeof-guards`'s own header before widening this further. The
|
|
97
|
+
* warrant is the HOST'S STATEMENT about a global it declares absent -- never a
|
|
98
|
+
* type. A previous rule keyed on a `never` operand marked LIVE code satisfied,
|
|
99
|
+
* because TypeScript produces `never` from its own unsound inferences (an
|
|
100
|
+
* empty array literal, most memorably) just as readily as an absence proof
|
|
101
|
+
* does, and once interned the two are the same structural id. Reachability is
|
|
102
|
+
* a property of WHERE an operation sits, proven here from the guard's AST
|
|
103
|
+
* shape and the host's own list.
|
|
104
|
+
*/
|
|
105
|
+
const isProvablyFalseGuard = (expr, absent) => {
|
|
106
|
+
const condition = unwrapParens(expr);
|
|
107
|
+
if (!ts.isBinaryExpression(condition))
|
|
108
|
+
return false;
|
|
109
|
+
if (condition.operatorToken.kind === ts.SyntaxKind.BarBarToken) {
|
|
110
|
+
return isProvablyFalseGuard(condition.left, absent) && isProvablyFalseGuard(condition.right, absent);
|
|
111
|
+
}
|
|
112
|
+
if (condition.operatorToken.kind !== ts.SyntaxKind.AmpersandAmpersandToken)
|
|
113
|
+
return false;
|
|
114
|
+
return absentTypeofOperand(unwrapParens(condition.left), absent) !== null && isInstanceofAbsentName(unwrapParens(condition.right), absent);
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* The census for one program.
|
|
118
|
+
*
|
|
119
|
+
* `emptyDeadTypeofGuardCensus` is returned unchanged when the host census
|
|
120
|
+
* itself is empty (`absent.absentCount === 0`): nothing is absent, so no
|
|
121
|
+
* `typeof` guard on this program can ever be proven dead by this rule, and
|
|
122
|
+
* walking every file to confirm that would be pure cost.
|
|
123
|
+
*/
|
|
124
|
+
export const censusDeadTypeofGuards = (files, absent, identities) => {
|
|
125
|
+
if (absent.absentCount === 0)
|
|
126
|
+
return emptyDeadTypeofGuardCensus;
|
|
127
|
+
const deadSitePrefixes = [];
|
|
128
|
+
let guardCount = 0;
|
|
129
|
+
const markDead = (node) => {
|
|
130
|
+
deadSitePrefixes.push(`op|${identities.nodeIdOf(node)}|`);
|
|
131
|
+
ts.forEachChild(node, markDead);
|
|
132
|
+
};
|
|
133
|
+
for (const file of files) {
|
|
134
|
+
const visit = (node) => {
|
|
135
|
+
if (ts.isIfStatement(node) && isProvablyFalseGuard(node.expression, absent)) {
|
|
136
|
+
markDead(node.thenStatement);
|
|
137
|
+
guardCount += 1;
|
|
138
|
+
}
|
|
139
|
+
ts.forEachChild(node, visit);
|
|
140
|
+
};
|
|
141
|
+
visit(file);
|
|
142
|
+
}
|
|
143
|
+
// `OperationId` is `op|<NodeId>|<family>|<ordinal>`, and a `NodeId` embeds
|
|
144
|
+
// its own unescaped `|`s (`identity/ids.ts`'s `operationId`/`nodeId`), so
|
|
145
|
+
// the operation id cannot be split apart and reassembled -- exactly the
|
|
146
|
+
// hazard `identity/ids.ts`'s own `operationOfResult` comment names. A
|
|
147
|
+
// prefix test sidesteps it entirely: `deadSitePrefixes` holds full,
|
|
148
|
+
// independently-computed `op|<deadNodeId>|` strings, and `startsWith`
|
|
149
|
+
// matches an operation to one of them without parsing anything.
|
|
150
|
+
const isDeadOperation = (id) => deadSitePrefixes.some((prefix) => id.startsWith(prefix));
|
|
151
|
+
return { isDeadOperation, guardCount };
|
|
152
|
+
};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { ValueFlowIndex } from './flow/model.js';
|
|
3
|
+
import type { ProducerContext } from './producer-context.js';
|
|
4
|
+
import { type PrototypeKeyQuery } from './host-mutation-keys.js';
|
|
5
|
+
/** @semanticCategory generic-primitive */
|
|
6
|
+
export interface IntrinsicProtocolRequirement {
|
|
7
|
+
readonly intrinsic: 'Array' | 'Object' | 'Map' | 'WeakMap' | 'Reflect' | 'Function';
|
|
8
|
+
readonly member?: string;
|
|
9
|
+
/**
|
|
10
|
+
* Without `member`: the prototype keys the obligation depends on. Absent,
|
|
11
|
+
* the obligation is the whole prototype -- which any single key write the
|
|
12
|
+
* census cannot attribute fails. See `intactIntrinsicPrototypeKeysType`.
|
|
13
|
+
*/
|
|
14
|
+
readonly prototypeKeys?: PrototypeKeyQuery;
|
|
15
|
+
readonly location: ts.Node;
|
|
16
|
+
}
|
|
17
|
+
/** @semanticCategory generic-primitive */
|
|
18
|
+
export interface DeferredIntrinsicProtocolLedger {
|
|
19
|
+
readonly capture: <T>(work: () => T) => {
|
|
20
|
+
readonly value: T;
|
|
21
|
+
readonly requirements: readonly IntrinsicProtocolRequirement[];
|
|
22
|
+
};
|
|
23
|
+
readonly guard: <T>(work: () => T, accepts: (value: T) => boolean) => T;
|
|
24
|
+
readonly require: (intrinsic: IntrinsicProtocolRequirement['intrinsic'], location: ts.Node) => boolean;
|
|
25
|
+
readonly requireMember: (intrinsic: 'Object' | 'Reflect', member: string, location: ts.Node) => boolean;
|
|
26
|
+
/** The per-key prototype obligation: only `keys` of the intrinsic's prototype must be as declared. */
|
|
27
|
+
readonly requirePrototypeKeys: (intrinsic: IntrinsicProtocolRequirement['intrinsic'], keys: PrototypeKeyQuery, location: ts.Node) => boolean;
|
|
28
|
+
readonly include: (requirements: readonly IntrinsicProtocolRequirement[]) => boolean;
|
|
29
|
+
/** A later inference round replaces its scope, including with no surviving requirements. */
|
|
30
|
+
readonly replace: (scope: object | string, requirements: readonly IntrinsicProtocolRequirement[]) => void;
|
|
31
|
+
readonly requirements: () => readonly IntrinsicProtocolRequirement[];
|
|
32
|
+
/**
|
|
33
|
+
* Whether a proof resting on an `Object.prototype` key obligation must
|
|
34
|
+
* refuse instead of recording one -- the installed hosts' statement
|
|
35
|
+
* (`PluginCapabilities.refusesObjectPrototypeAbsenceProofs`), read by the
|
|
36
|
+
* class-family and numeric absence proofs before they ask.
|
|
37
|
+
*/
|
|
38
|
+
readonly refusesObjectPrototypeAbsenceProofs: boolean;
|
|
39
|
+
}
|
|
40
|
+
/** Closure can depend on an intrinsic whose mutation census runs after type
|
|
41
|
+
* inference. Capture obligations while exploring evidence; only surviving
|
|
42
|
+
* published inference replaces a ledger scope. Failed alternatives and
|
|
43
|
+
* withdrawn bindings never become compiler-wide assumptions.
|
|
44
|
+
*/
|
|
45
|
+
export declare const createDeferredIntrinsicProtocolLedger: (options?: {
|
|
46
|
+
readonly refuseObjectPrototypeAbsenceProofs?: boolean;
|
|
47
|
+
}) => DeferredIntrinsicProtocolLedger;
|
|
48
|
+
/** What distinguishes two obligations on one intrinsic at one location: a static member, a key set, or the whole prototype. */
|
|
49
|
+
export declare const intrinsicProtocolRequirementKind: (requirement: IntrinsicProtocolRequirement) => string | undefined;
|
|
50
|
+
export declare const attachDeferredIntrinsicProtocolLedger: (flow: ValueFlowIndex, ledger: DeferredIntrinsicProtocolLedger) => void;
|
|
51
|
+
export declare const deferredIntrinsicProtocolLedgerOf: (flow: ValueFlowIndex) => DeferredIntrinsicProtocolLedger | null;
|
|
52
|
+
type IntrinsicContext = Pick<ProducerContext, 'checker' | 'identities' | 'globalHostMutationTaint' | 'isStandardLibraryDeclaration'>;
|
|
53
|
+
/** Discharge solely against the final shared mutation census. No preliminary
|
|
54
|
+
* spelling scan or root inventory substitutes for the sealed host evidence.
|
|
55
|
+
*/
|
|
56
|
+
export declare const failedIntrinsicProtocolRequirements: (context: IntrinsicContext, requirements: readonly IntrinsicProtocolRequirement[]) => readonly IntrinsicProtocolRequirement[];
|
|
57
|
+
export {};
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { intrinsicStaticMemberIsIntact } from './intrinsic-static-member.js';
|
|
3
|
+
import { intactIntrinsicPrototypeKeysType, intactIntrinsicPrototypeType } from './intrinsic-prototype.js';
|
|
4
|
+
import { prototypeKeyQuerySignature } from './host-mutation-keys.js';
|
|
5
|
+
/** Closure can depend on an intrinsic whose mutation census runs after type
|
|
6
|
+
* inference. Capture obligations while exploring evidence; only surviving
|
|
7
|
+
* published inference replaces a ledger scope. Failed alternatives and
|
|
8
|
+
* withdrawn bindings never become compiler-wide assumptions.
|
|
9
|
+
*/
|
|
10
|
+
export const createDeferredIntrinsicProtocolLedger = (options = {}) => {
|
|
11
|
+
const captures = [];
|
|
12
|
+
const scopes = new Map();
|
|
13
|
+
const unique = (requirements) => {
|
|
14
|
+
// `capture` wraps nearly every proof in the compiler and most of them raise
|
|
15
|
+
// no obligation at all, so the common case is de-duplicating nothing --
|
|
16
|
+
// which still built a Map of Maps of Sets and a copied array per call.
|
|
17
|
+
if (requirements.length === 0)
|
|
18
|
+
return requirements;
|
|
19
|
+
const seen = new Map();
|
|
20
|
+
return requirements.filter((requirement) => {
|
|
21
|
+
let protocols = seen.get(requirement.location);
|
|
22
|
+
if (!protocols)
|
|
23
|
+
seen.set(requirement.location, (protocols = new Map()));
|
|
24
|
+
let members = protocols.get(requirement.intrinsic);
|
|
25
|
+
if (!members)
|
|
26
|
+
protocols.set(requirement.intrinsic, (members = new Set()));
|
|
27
|
+
const kind = intrinsicProtocolRequirementKind(requirement);
|
|
28
|
+
if (members.has(kind))
|
|
29
|
+
return false;
|
|
30
|
+
members.add(kind);
|
|
31
|
+
return true;
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
const capture = (work) => {
|
|
35
|
+
const requirements = [];
|
|
36
|
+
captures.push(requirements);
|
|
37
|
+
try {
|
|
38
|
+
return { value: work(), requirements: unique(requirements) };
|
|
39
|
+
}
|
|
40
|
+
finally {
|
|
41
|
+
captures.pop();
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
const include = (requirements) => {
|
|
45
|
+
const active = captures.at(-1);
|
|
46
|
+
if (!active)
|
|
47
|
+
return false;
|
|
48
|
+
active.push(...requirements);
|
|
49
|
+
return true;
|
|
50
|
+
};
|
|
51
|
+
return {
|
|
52
|
+
capture,
|
|
53
|
+
guard: (work, accepts) => {
|
|
54
|
+
if (captures.length === 0)
|
|
55
|
+
return work();
|
|
56
|
+
const result = capture(work);
|
|
57
|
+
if (accepts(result.value))
|
|
58
|
+
include(result.requirements);
|
|
59
|
+
return result.value;
|
|
60
|
+
},
|
|
61
|
+
require: (intrinsic, location) => include([{ intrinsic, location }]),
|
|
62
|
+
requireMember: (intrinsic, member, location) => include([{ intrinsic, member, location }]),
|
|
63
|
+
requirePrototypeKeys: (intrinsic, prototypeKeys, location) => include([{ intrinsic, prototypeKeys, location }]),
|
|
64
|
+
include,
|
|
65
|
+
replace: (scope, requirements) => {
|
|
66
|
+
const kept = unique(requirements);
|
|
67
|
+
// `GEA_LEDGER_DEBUG=1` names the scope that publishes each Object
|
|
68
|
+
// prototype obligation: a failed one at certification says only where
|
|
69
|
+
// the proof read, never which inference published it.
|
|
70
|
+
if (process.env['GEA_LEDGER_DEBUG'] !== undefined)
|
|
71
|
+
for (const requirement of kept) {
|
|
72
|
+
if (requirement.member !== undefined)
|
|
73
|
+
continue;
|
|
74
|
+
const file = requirement.location.getSourceFile();
|
|
75
|
+
const line = file.getLineAndCharacterOfPosition(requirement.location.getStart(file)).line + 1;
|
|
76
|
+
console.error(`[LEDGER] ${String(scope)} ${intrinsicProtocolRequirementKind(requirement) ?? 'whole'} ${file.fileName.split('/').pop()}:${line}`);
|
|
77
|
+
}
|
|
78
|
+
scopes.set(scope, kept);
|
|
79
|
+
},
|
|
80
|
+
requirements: () => unique([...scopes.values()].flat()),
|
|
81
|
+
refusesObjectPrototypeAbsenceProofs: options.refuseObjectPrototypeAbsenceProofs === true
|
|
82
|
+
};
|
|
83
|
+
};
|
|
84
|
+
/** What distinguishes two obligations on one intrinsic at one location: a static member, a key set, or the whole prototype. */
|
|
85
|
+
export const intrinsicProtocolRequirementKind = (requirement) => requirement.member !== undefined
|
|
86
|
+
? requirement.member
|
|
87
|
+
: requirement.prototypeKeys
|
|
88
|
+
? `keys:${prototypeKeyQuerySignature(requirement.prototypeKeys)}`
|
|
89
|
+
: undefined;
|
|
90
|
+
const ledgers = new WeakMap();
|
|
91
|
+
export const attachDeferredIntrinsicProtocolLedger = (flow, ledger) => {
|
|
92
|
+
ledgers.set(flow, ledger);
|
|
93
|
+
};
|
|
94
|
+
export const deferredIntrinsicProtocolLedgerOf = (flow) => ledgers.get(flow) ?? null;
|
|
95
|
+
/** Discharge solely against the final shared mutation census. No preliminary
|
|
96
|
+
* spelling scan or root inventory substitutes for the sealed host evidence.
|
|
97
|
+
*/
|
|
98
|
+
export const failedIntrinsicProtocolRequirements = (context, requirements) => requirements.filter((requirement) => {
|
|
99
|
+
if (requirement.member === undefined) {
|
|
100
|
+
return requirement.prototypeKeys
|
|
101
|
+
? intactIntrinsicPrototypeKeysType(context, requirement.intrinsic, requirement.prototypeKeys, requirement.location) === null
|
|
102
|
+
: intactIntrinsicPrototypeType(context, requirement.intrinsic, requirement.location) === null;
|
|
103
|
+
}
|
|
104
|
+
const owner = context.checker.resolveName(requirement.intrinsic, requirement.location, ts.SymbolFlags.Value, false);
|
|
105
|
+
const member = owner
|
|
106
|
+
? context.checker.getPropertyOfType(context.checker.getTypeOfSymbolAtLocation(owner, requirement.location), requirement.member)
|
|
107
|
+
: undefined;
|
|
108
|
+
return !intrinsicStaticMemberIsIntact(context, owner, member, requirement.location);
|
|
109
|
+
});
|