@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,37 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { cellCandidatesOf } from '../candidates.js';
|
|
3
|
+
import { cellType } from '../model.js';
|
|
4
|
+
import { rulesFor } from '../policy.js';
|
|
5
|
+
import { combineTypesByJoin } from './shared.js';
|
|
6
|
+
const isUnannotatedUninitializedLocal = (node) => ts.isVariableDeclaration(node) && ts.isIdentifier(node.name) && node.type === undefined && node.initializer === undefined;
|
|
7
|
+
/**
|
|
8
|
+
* The LOCAL domain: `local-bindings.ts`'s question ("an unannotated
|
|
9
|
+
* `let`/`var` cell with no initializer, filled in by exactly the writes the
|
|
10
|
+
* program makes to it"), restated over the shared flow index's
|
|
11
|
+
* `identifier-assignment` and `logical-assignment` edges.
|
|
12
|
+
*
|
|
13
|
+
* `compound-assignment` (`x += 1`) is deliberately given no rule: per
|
|
14
|
+
* `flow/model.ts`'s own doc, that edge states existence and a DERIVED value,
|
|
15
|
+
* never a fresh one, so admitting it here would join the cell's own prior
|
|
16
|
+
* (unknown) contents into its write-join. `rulesFor` skipping an edge is the
|
|
17
|
+
* correct, sound default -- soundness cuts one way here:
|
|
18
|
+
* missing evidence is a box, joining the wrong evidence is a silent
|
|
19
|
+
* miscompile, and this domain refuses the second, never the first.
|
|
20
|
+
*/
|
|
21
|
+
export const createLocalCellPolicy = (checker, reachable) => {
|
|
22
|
+
const valueRule = (write) => write.value ? cellType(checker.getTypeAtLocation(write.value)) : null;
|
|
23
|
+
return {
|
|
24
|
+
domain: 'local',
|
|
25
|
+
candidatesOf: (files) => cellCandidatesOf(reachable, files, isUnannotatedUninitializedLocal),
|
|
26
|
+
// Candidates have no annotation by construction; kept as a real read
|
|
27
|
+
// rather than a constant `null` so a looser candidate set still gets a
|
|
28
|
+
// correct answer instead of a silently stale one.
|
|
29
|
+
statedAt: () => null,
|
|
30
|
+
checkerAt: (declaration) => cellType(checker.getTypeAtLocation(declaration)),
|
|
31
|
+
rules: rulesFor([
|
|
32
|
+
['identifier-assignment', valueRule],
|
|
33
|
+
['logical-assignment', valueRule]
|
|
34
|
+
]),
|
|
35
|
+
combine: combineTypesByJoin(checker)
|
|
36
|
+
};
|
|
37
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { ProgramReachability } from '../../reachability.js';
|
|
3
|
+
import type { CellEvidencePolicy } from '../policy.js';
|
|
4
|
+
/**
|
|
5
|
+
* The PARAMETER domain: `parameter-bindings.ts`'s question ("the type a
|
|
6
|
+
* parameter the program never annotated is actually called with"), restated
|
|
7
|
+
* as one evidence rule over the shared flow index's `call-argument` edge.
|
|
8
|
+
*
|
|
9
|
+
* `flow/model.ts` already resolves an argument to the callee's parameter slot
|
|
10
|
+
* wherever the walk could name the callee (the value-flow survey's callee row), so
|
|
11
|
+
* this policy does no call-site resolution of its own -- it reads
|
|
12
|
+
* `flow.writesToDeclaration(parameter)` and asks only "does this edge state a
|
|
13
|
+
* value", which is the one thing a `CellEvidenceRule` may ask.
|
|
14
|
+
*
|
|
15
|
+
* `parameter-bindings.ts` additionally refuses a parameter that escapes as a
|
|
16
|
+
* value to an unresolved caller, is itself reassigned, or whose call sites'
|
|
17
|
+
* types merely differ rather than provably agreeing (`widestOf`'s guard) --
|
|
18
|
+
* none of that policy is re-implemented here. `joinOfWrites` (via
|
|
19
|
+
* `combineTypesByJoin`) already returns `null` on genuine disagreement, so
|
|
20
|
+
* soundness against a wrong join is unaffected; what is not yet ported is the
|
|
21
|
+
* ESCAPE refusal, so this policy's write-join can be more OPTIMISTIC than the
|
|
22
|
+
* existing census's about a parameter whose name leaks somewhere this domain
|
|
23
|
+
* does not itself track. That is safe for phase 4.1 -- nothing downstream
|
|
24
|
+
* reads this table -- and is exactly the "not yet a policy" gap this
|
|
25
|
+
* refactor's report calls out for phase 4.2 to close before anything is
|
|
26
|
+
* wired to replace `parameter-bindings.ts`.
|
|
27
|
+
*/
|
|
28
|
+
export declare const createParameterCellPolicy: (checker: ts.TypeChecker, reachable: ProgramReachability) => CellEvidencePolicy;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { cellCandidatesOf } from '../candidates.js';
|
|
3
|
+
import { cellType } from '../model.js';
|
|
4
|
+
import { rulesFor } from '../policy.js';
|
|
5
|
+
import { checkerTypeAt, combineTypesByJoin, statedTypeOf } from './shared.js';
|
|
6
|
+
/**
|
|
7
|
+
* The PARAMETER domain: `parameter-bindings.ts`'s question ("the type a
|
|
8
|
+
* parameter the program never annotated is actually called with"), restated
|
|
9
|
+
* as one evidence rule over the shared flow index's `call-argument` edge.
|
|
10
|
+
*
|
|
11
|
+
* `flow/model.ts` already resolves an argument to the callee's parameter slot
|
|
12
|
+
* wherever the walk could name the callee (the value-flow survey's callee row), so
|
|
13
|
+
* this policy does no call-site resolution of its own -- it reads
|
|
14
|
+
* `flow.writesToDeclaration(parameter)` and asks only "does this edge state a
|
|
15
|
+
* value", which is the one thing a `CellEvidenceRule` may ask.
|
|
16
|
+
*
|
|
17
|
+
* `parameter-bindings.ts` additionally refuses a parameter that escapes as a
|
|
18
|
+
* value to an unresolved caller, is itself reassigned, or whose call sites'
|
|
19
|
+
* types merely differ rather than provably agreeing (`widestOf`'s guard) --
|
|
20
|
+
* none of that policy is re-implemented here. `joinOfWrites` (via
|
|
21
|
+
* `combineTypesByJoin`) already returns `null` on genuine disagreement, so
|
|
22
|
+
* soundness against a wrong join is unaffected; what is not yet ported is the
|
|
23
|
+
* ESCAPE refusal, so this policy's write-join can be more OPTIMISTIC than the
|
|
24
|
+
* existing census's about a parameter whose name leaks somewhere this domain
|
|
25
|
+
* does not itself track. That is safe for phase 4.1 -- nothing downstream
|
|
26
|
+
* reads this table -- and is exactly the "not yet a policy" gap this
|
|
27
|
+
* refactor's report calls out for phase 4.2 to close before anything is
|
|
28
|
+
* wired to replace `parameter-bindings.ts`.
|
|
29
|
+
*/
|
|
30
|
+
export const createParameterCellPolicy = (checker, reachable) => ({
|
|
31
|
+
domain: 'parameter',
|
|
32
|
+
candidatesOf: (files) => cellCandidatesOf(reachable, files, (node) => ts.isParameter(node) && node.type === undefined && ts.isIdentifier(node.name) && node.dotDotDotToken === undefined),
|
|
33
|
+
statedAt: (declaration) => statedTypeOf(checker, declaration.type),
|
|
34
|
+
checkerAt: checkerTypeAt(checker),
|
|
35
|
+
rules: rulesFor([
|
|
36
|
+
['call-argument', (write) => (write.value ? cellType(checker.getTypeAtLocation(write.value)) : null)]
|
|
37
|
+
]),
|
|
38
|
+
combine: combineTypesByJoin(checker)
|
|
39
|
+
});
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { ProgramReachability } from '../../reachability.js';
|
|
3
|
+
import type { CellEvidencePolicy } from '../policy.js';
|
|
4
|
+
/**
|
|
5
|
+
* The RETURN domain: `return-bindings.ts`'s question, restated as one
|
|
6
|
+
* evidence rule over the shared flow index's `return` edge, exactly the way
|
|
7
|
+
* `parameter-bindings.ts` restates as `call-argument`.
|
|
8
|
+
*
|
|
9
|
+
* `flow/model.ts` already resolves a `return expr` to its ENCLOSING
|
|
10
|
+
* function's return cell (the value-flow survey's `RET: Y` column), so
|
|
11
|
+
* `flow.writesToDeclaration(declaration)` needs no recursion tracking of its
|
|
12
|
+
* own here -- unlike `return-bindings.ts`'s `resolvedReturnTypeOf`, which
|
|
13
|
+
* exists mainly to CALL a not-yet-settled callee's return from a parameter
|
|
14
|
+
* census, a question this policy does not answer at all (that is
|
|
15
|
+
* `parameter-bindings.ts`'s own internal fixpoint, item 8 of the edge
|
|
16
|
+
* matrix, and not a write-join over one cell's own writes).
|
|
17
|
+
*
|
|
18
|
+
* `checkerAt` reads the SIGNATURE's return type, not
|
|
19
|
+
* `checker.getTypeAtLocation(declaration)` -- the latter is the function's
|
|
20
|
+
* own callable type (`() => number`), and this domain's cell is what the
|
|
21
|
+
* body produces, not the function object itself. This is the one place the
|
|
22
|
+
* "checker" primitive is not a plain `getTypeAtLocation` call, because the
|
|
23
|
+
* declaration node names two different cells depending on who reads it: the
|
|
24
|
+
* ALLOCATION producer wants the callable, this domain wants the result.
|
|
25
|
+
*/
|
|
26
|
+
export declare const createReturnCellPolicy: (checker: ts.TypeChecker, reachable: ProgramReachability) => CellEvidencePolicy;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { cellCandidatesOf } from '../candidates.js';
|
|
3
|
+
import { cellType } from '../model.js';
|
|
4
|
+
import { rulesFor } from '../policy.js';
|
|
5
|
+
import { combineTypesByJoin, statedTypeOf } from './shared.js';
|
|
6
|
+
const isReturnLikeCandidate = (node) => (ts.isFunctionDeclaration(node) ||
|
|
7
|
+
ts.isFunctionExpression(node) ||
|
|
8
|
+
ts.isArrowFunction(node) ||
|
|
9
|
+
ts.isMethodDeclaration(node) ||
|
|
10
|
+
ts.isGetAccessorDeclaration(node)) &&
|
|
11
|
+
node.body !== undefined &&
|
|
12
|
+
node.type === undefined;
|
|
13
|
+
/**
|
|
14
|
+
* The RETURN domain: `return-bindings.ts`'s question, restated as one
|
|
15
|
+
* evidence rule over the shared flow index's `return` edge, exactly the way
|
|
16
|
+
* `parameter-bindings.ts` restates as `call-argument`.
|
|
17
|
+
*
|
|
18
|
+
* `flow/model.ts` already resolves a `return expr` to its ENCLOSING
|
|
19
|
+
* function's return cell (the value-flow survey's `RET: Y` column), so
|
|
20
|
+
* `flow.writesToDeclaration(declaration)` needs no recursion tracking of its
|
|
21
|
+
* own here -- unlike `return-bindings.ts`'s `resolvedReturnTypeOf`, which
|
|
22
|
+
* exists mainly to CALL a not-yet-settled callee's return from a parameter
|
|
23
|
+
* census, a question this policy does not answer at all (that is
|
|
24
|
+
* `parameter-bindings.ts`'s own internal fixpoint, item 8 of the edge
|
|
25
|
+
* matrix, and not a write-join over one cell's own writes).
|
|
26
|
+
*
|
|
27
|
+
* `checkerAt` reads the SIGNATURE's return type, not
|
|
28
|
+
* `checker.getTypeAtLocation(declaration)` -- the latter is the function's
|
|
29
|
+
* own callable type (`() => number`), and this domain's cell is what the
|
|
30
|
+
* body produces, not the function object itself. This is the one place the
|
|
31
|
+
* "checker" primitive is not a plain `getTypeAtLocation` call, because the
|
|
32
|
+
* declaration node names two different cells depending on who reads it: the
|
|
33
|
+
* ALLOCATION producer wants the callable, this domain wants the result.
|
|
34
|
+
*/
|
|
35
|
+
export const createReturnCellPolicy = (checker, reachable) => ({
|
|
36
|
+
domain: 'return',
|
|
37
|
+
candidatesOf: (files) => cellCandidatesOf(reachable, files, isReturnLikeCandidate),
|
|
38
|
+
statedAt: (declaration) => statedTypeOf(checker, declaration.type),
|
|
39
|
+
checkerAt: (declaration) => {
|
|
40
|
+
const signature = checker.getSignatureFromDeclaration(declaration);
|
|
41
|
+
return cellType(signature ? signature.getReturnType() : checker.getTypeAtLocation(declaration));
|
|
42
|
+
},
|
|
43
|
+
rules: rulesFor([['return', (write) => (write.value ? cellType(checker.getTypeAtLocation(write.value)) : null)]]),
|
|
44
|
+
combine: combineTypesByJoin(checker)
|
|
45
|
+
});
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type ts from 'typescript';
|
|
2
|
+
import { type CellValue } from '../model.js';
|
|
3
|
+
import type { CellEvidenceContribution } from '../policy.js';
|
|
4
|
+
/**
|
|
5
|
+
* The join itself, over plain `CellValue`s -- factored out of
|
|
6
|
+
* `combineTypesByJoin` so `collection.ts`'s per-slot combine can apply the
|
|
7
|
+
* SAME join twice (once for the key group, once for the value group)
|
|
8
|
+
* instead of restating `joinOfWrites`'s unwrap-or-refuse rule a second time.
|
|
9
|
+
*/
|
|
10
|
+
export declare const joinCellTypeValues: (checker: ts.TypeChecker, values: readonly CellValue[]) => ts.Type | null;
|
|
11
|
+
/**
|
|
12
|
+
* The combinator every `ts.Type`-space domain (parameter, return, local,
|
|
13
|
+
* field) shares: the exact join `parameter-bindings.ts` and its siblings
|
|
14
|
+
* already use over an argument/return/write set, reused rather than
|
|
15
|
+
* re-derived -- `joinOfWrites` is a pure function these censuses already
|
|
16
|
+
* export, and the rule to add exports only if a
|
|
17
|
+
* policy needs to call an existing pure helper" is exactly this case.
|
|
18
|
+
*
|
|
19
|
+
* These four domains join their WHOLE cell into one answer, so the
|
|
20
|
+
* `CellEvidenceContribution.write` half of each contribution (which slot,
|
|
21
|
+
* which member) is simply not asked -- `collection`/`bag` are the two
|
|
22
|
+
* domains where it is.
|
|
23
|
+
*/
|
|
24
|
+
export declare const combineTypesByJoin: (checker: ts.TypeChecker) => (contributions: readonly CellEvidenceContribution[]) => CellValue | null;
|
|
25
|
+
/** The checker's own answer at a declaration, wrapped -- always present, the fallback of last resort. */
|
|
26
|
+
export declare const checkerTypeAt: (checker: ts.TypeChecker) => (declaration: ts.Node) => CellValue | null;
|
|
27
|
+
/**
|
|
28
|
+
* The program's own annotation, when a declaration shape carries one and
|
|
29
|
+
* states something usable -- `null` covers both "no annotation" and "the
|
|
30
|
+
* annotation is `any`/`void`/`never`, i.e. states nothing more than the
|
|
31
|
+
* checker's own vacuous answer would".
|
|
32
|
+
*/
|
|
33
|
+
export declare const statedTypeOf: (checker: ts.TypeChecker, typeNode: ts.TypeNode | undefined) => CellValue | null;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { isUnusableEvidence, joinOfWrites } from '../../derived-expression-type.js';
|
|
2
|
+
import { cellType } from '../model.js';
|
|
3
|
+
/**
|
|
4
|
+
* The join itself, over plain `CellValue`s -- factored out of
|
|
5
|
+
* `combineTypesByJoin` so `collection.ts`'s per-slot combine can apply the
|
|
6
|
+
* SAME join twice (once for the key group, once for the value group)
|
|
7
|
+
* instead of restating `joinOfWrites`'s unwrap-or-refuse rule a second time.
|
|
8
|
+
*/
|
|
9
|
+
export const joinCellTypeValues = (checker, values) => {
|
|
10
|
+
const types = values.flatMap((value) => (value.kind === 'type' ? [value.type] : []));
|
|
11
|
+
if (types.length !== values.length)
|
|
12
|
+
return null;
|
|
13
|
+
return joinOfWrites(checker, types);
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* The combinator every `ts.Type`-space domain (parameter, return, local,
|
|
17
|
+
* field) shares: the exact join `parameter-bindings.ts` and its siblings
|
|
18
|
+
* already use over an argument/return/write set, reused rather than
|
|
19
|
+
* re-derived -- `joinOfWrites` is a pure function these censuses already
|
|
20
|
+
* export, and the rule to add exports only if a
|
|
21
|
+
* policy needs to call an existing pure helper" is exactly this case.
|
|
22
|
+
*
|
|
23
|
+
* These four domains join their WHOLE cell into one answer, so the
|
|
24
|
+
* `CellEvidenceContribution.write` half of each contribution (which slot,
|
|
25
|
+
* which member) is simply not asked -- `collection`/`bag` are the two
|
|
26
|
+
* domains where it is.
|
|
27
|
+
*/
|
|
28
|
+
export const combineTypesByJoin = (checker) => (contributions) => {
|
|
29
|
+
const joined = joinCellTypeValues(checker, contributions.map((contribution) => contribution.value));
|
|
30
|
+
return joined ? cellType(joined) : null;
|
|
31
|
+
};
|
|
32
|
+
/** The checker's own answer at a declaration, wrapped -- always present, the fallback of last resort. */
|
|
33
|
+
export const checkerTypeAt = (checker) => (declaration) => cellType(checker.getTypeAtLocation(declaration));
|
|
34
|
+
/**
|
|
35
|
+
* The program's own annotation, when a declaration shape carries one and
|
|
36
|
+
* states something usable -- `null` covers both "no annotation" and "the
|
|
37
|
+
* annotation is `any`/`void`/`never`, i.e. states nothing more than the
|
|
38
|
+
* checker's own vacuous answer would".
|
|
39
|
+
*/
|
|
40
|
+
export const statedTypeOf = (checker, typeNode) => {
|
|
41
|
+
if (!typeNode)
|
|
42
|
+
return null;
|
|
43
|
+
const stated = checker.getTypeFromTypeNode(typeNode);
|
|
44
|
+
return isUnusableEvidence(stated) ? null : cellType(stated);
|
|
45
|
+
};
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type ts from 'typescript';
|
|
2
|
+
import type { FlowEdgeKind, ValueFlowIndex, ValueWrite } from '../flow/model.js';
|
|
3
|
+
import type { CellDomain, CellValue } from './model.js';
|
|
4
|
+
/**
|
|
5
|
+
* One domain's reading of one write: the value it contributes to the cell's
|
|
6
|
+
* write-join, or `null` to sit out. `null` is the ordinary answer for an edge
|
|
7
|
+
* that exists but states no fresh value for THIS domain -- a `compound-
|
|
8
|
+
* assignment` (existence only, per `flow/model.ts`'s own doc on the kind) or
|
|
9
|
+
* a write whose value this domain cannot resolve to anything usable.
|
|
10
|
+
*/
|
|
11
|
+
export type CellEvidenceRule = (write: ValueWrite, declaration: ts.Node) => CellValue | null;
|
|
12
|
+
/**
|
|
13
|
+
* One admitted write, paired with the value its rule produced -- what
|
|
14
|
+
* `combine` actually receives. Plain `CellValue`s were enough while every
|
|
15
|
+
* ported domain (parameter, return, local, field) joined its whole cell into
|
|
16
|
+
* ONE answer; `collection`/`bag` join per SLOT (`collection-key` vs
|
|
17
|
+
* `collection-value`) or per MEMBER NAME (`ValueWrite.member`), a question
|
|
18
|
+
* `combine` cannot ask once the write that produced a value is discarded.
|
|
19
|
+
* Keeping the pair is the whole extension `policies/index.ts`'s header calls
|
|
20
|
+
* for -- `combine` was already free to look at `write.slot`/`write.member`
|
|
21
|
+
* (both were already on `ValueWrite`, see `flow/model.ts`), it simply never
|
|
22
|
+
* received the write to look at.
|
|
23
|
+
*/
|
|
24
|
+
export interface CellEvidenceContribution {
|
|
25
|
+
readonly write: ValueWrite;
|
|
26
|
+
readonly value: CellValue;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* A census, restated as data: `(domain, FlowEdgeKind) -> evidence rule`,
|
|
30
|
+
* the "cell census" row: a capability is keyed rows, never an ordered chain. Nothing here
|
|
31
|
+
* is ordered -- a policy is asked about every edge kind it registered a rule
|
|
32
|
+
* for, independent of every other policy and of any position in a chain.
|
|
33
|
+
*/
|
|
34
|
+
export interface CellEvidencePolicy {
|
|
35
|
+
readonly domain: CellDomain;
|
|
36
|
+
/** Every declaration this domain is willing to answer for, in this program. */
|
|
37
|
+
readonly candidatesOf: (files: readonly ts.SourceFile[]) => Iterable<ts.Declaration>;
|
|
38
|
+
/** The program's own annotation for this declaration, or `null` when it stated none. */
|
|
39
|
+
readonly statedAt: (declaration: ts.Node) => CellValue | null;
|
|
40
|
+
/** The checker's own answer -- always present, the fallback of last resort. */
|
|
41
|
+
readonly checkerAt: (declaration: ts.Node) => CellValue | null;
|
|
42
|
+
/**
|
|
43
|
+
* The writes this domain admits as evidence for one candidate. Defaults to
|
|
44
|
+
* `flow.writesToDeclaration(declaration)` (every ported `ts.Type`-space
|
|
45
|
+
* domain relies on that default and states no `writesOf` of its own) --
|
|
46
|
+
* `collection`'s own reason to override it is the OTHER stated obstacle:
|
|
47
|
+
* `collection-bindings.ts` follows a value's identity through an ALIAS
|
|
48
|
+
* CLOSURE (`const helper = []; fill(helper)`, `this.cache.set(...)`) that a
|
|
49
|
+
* single declaration's own writes cannot state, because the evidence lands
|
|
50
|
+
* on a DIFFERENT declaration (a parameter the value was passed to, a
|
|
51
|
+
* property that re-exports it) than the candidate this policy is answering
|
|
52
|
+
* for. A policy that needs that closure computes it itself, over the same
|
|
53
|
+
* `flow.flowsFromDeclaration` reverse edge `collection-bindings.ts` already
|
|
54
|
+
* walks -- this hook is what lets it do so without forcing every OTHER
|
|
55
|
+
* domain to pay for a closure it never needed.
|
|
56
|
+
*/
|
|
57
|
+
readonly writesOf?: (declaration: ts.Node, flow: ValueFlowIndex) => readonly ValueWrite[];
|
|
58
|
+
/** One evidence rule per `FlowEdgeKind` this domain admits as a write; an edge with no entry contributes nothing. */
|
|
59
|
+
readonly rules: Partial<Readonly<Record<FlowEdgeKind, CellEvidenceRule>>>;
|
|
60
|
+
/** The join over every admitted write, or `null` when they disagree -- never merged into a wider guess. */
|
|
61
|
+
readonly combine: (contributions: readonly CellEvidenceContribution[]) => CellValue | null;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Builds a policy's `rules` table from `(edge, rule)` pairs and throws on a
|
|
65
|
+
* second rule for one edge -- the mechanical form of table 2.8's collision
|
|
66
|
+
* rule for a cell census: "a second rule for one key throws at census
|
|
67
|
+
* construction." A plain object literal cannot enforce this on its own (a
|
|
68
|
+
* repeated key just silently overwrites the first), so every policy in this
|
|
69
|
+
* directory builds its `rules` through this function rather than writing the
|
|
70
|
+
* object literal by hand.
|
|
71
|
+
*/
|
|
72
|
+
export declare const rulesFor: (entries: readonly (readonly [FlowEdgeKind, CellEvidenceRule])[]) => Partial<Readonly<Record<FlowEdgeKind, CellEvidenceRule>>>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Builds a policy's `rules` table from `(edge, rule)` pairs and throws on a
|
|
3
|
+
* second rule for one edge -- the mechanical form of table 2.8's collision
|
|
4
|
+
* rule for a cell census: "a second rule for one key throws at census
|
|
5
|
+
* construction." A plain object literal cannot enforce this on its own (a
|
|
6
|
+
* repeated key just silently overwrites the first), so every policy in this
|
|
7
|
+
* directory builds its `rules` through this function rather than writing the
|
|
8
|
+
* object literal by hand.
|
|
9
|
+
*/
|
|
10
|
+
export const rulesFor = (entries) => {
|
|
11
|
+
const rules = {};
|
|
12
|
+
for (const [edge, rule] of entries) {
|
|
13
|
+
if (rules[edge] !== undefined)
|
|
14
|
+
throw new Error(`cell evidence policy: two rules registered for edge kind '${edge}'`);
|
|
15
|
+
rules[edge] = rule;
|
|
16
|
+
}
|
|
17
|
+
return rules;
|
|
18
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { CellEvidencePolicy } from './policy.js';
|
|
2
|
+
/** Every domain's evidence policy, registered once. */
|
|
3
|
+
export interface CellPolicyRegistry {
|
|
4
|
+
readonly policies: readonly CellEvidencePolicy[];
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Registers one evidence policy per domain -- table 2.8's collision rule for
|
|
8
|
+
* a cell census, on the other axis `policy.ts`'s `rulesFor` does not cover:
|
|
9
|
+
* two policies both claiming one domain, rather than two rules inside one
|
|
10
|
+
* policy. Thrown at construction, not discovered later as two domains quietly
|
|
11
|
+
* shadowing each other the way `structural.ts`'s `typeAt` chain lets a
|
|
12
|
+
* position decide today.
|
|
13
|
+
*/
|
|
14
|
+
export declare const createCellPolicyRegistry: (policies: readonly CellEvidencePolicy[]) => CellPolicyRegistry;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registers one evidence policy per domain -- table 2.8's collision rule for
|
|
3
|
+
* a cell census, on the other axis `policy.ts`'s `rulesFor` does not cover:
|
|
4
|
+
* two policies both claiming one domain, rather than two rules inside one
|
|
5
|
+
* policy. Thrown at construction, not discovered later as two domains quietly
|
|
6
|
+
* shadowing each other the way `structural.ts`'s `typeAt` chain lets a
|
|
7
|
+
* position decide today.
|
|
8
|
+
*/
|
|
9
|
+
export const createCellPolicyRegistry = (policies) => {
|
|
10
|
+
const seen = new Set();
|
|
11
|
+
for (const policy of policies) {
|
|
12
|
+
if (seen.has(policy.domain))
|
|
13
|
+
throw new Error(`cell evidence policy: domain '${policy.domain}' registered twice`);
|
|
14
|
+
seen.add(policy.domain);
|
|
15
|
+
}
|
|
16
|
+
return { policies };
|
|
17
|
+
};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which write-discovery census refused.
|
|
3
|
+
*
|
|
4
|
+
* The same six domains `cells/` registers as evidence policies, plus
|
|
5
|
+
* `jsdoc-type-name`, the one smaller census that publishes a refusal
|
|
6
|
+
* vocabulary of its own. A domain is spelled once, here, because it is half of
|
|
7
|
+
* a refusal's key and a domain spelled twice is two vocabularies.
|
|
8
|
+
*/
|
|
9
|
+
export type CensusDomain = 'parameter' | 'return' | 'local' | 'field' | 'collection' | 'bag' | 'jsdoc-type-name';
|
|
10
|
+
/**
|
|
11
|
+
* `census:<domain>:<root>` -- the ROOT, never the prose.
|
|
12
|
+
*
|
|
13
|
+
* A refusal's key is what groups it with the others that share a cause, so it
|
|
14
|
+
* must name the cause and nothing else: no node text, no type spelling, no
|
|
15
|
+
* count, nothing that varies between two instances of one defect. The prose
|
|
16
|
+
* belongs in `reason`, where it can name the specific node. This is the same
|
|
17
|
+
* split `cells/model.ts`'s `CellRefusalKey` already makes, and the same reason
|
|
18
|
+
* `parameter-bindings.ts` keyed its count map by reason rather than by site.
|
|
19
|
+
*/
|
|
20
|
+
export type CensusRefusalKey = `census:${CensusDomain}:${string}`;
|
|
21
|
+
/**
|
|
22
|
+
* A census refusal in the compiler's one refusal vocabulary
|
|
23
|
+
* (`ir/refusal.ts`'s `Refusal`).
|
|
24
|
+
*
|
|
25
|
+
* These used to be eight private `ReadonlyMap<string, number>`s of hand-written
|
|
26
|
+
* prose -- a count per reason, with no owner, reaching `CompileResult` only as
|
|
27
|
+
* `censusAccounting` and never joining `CompileResult.refusals` the way every
|
|
28
|
+
* other stage's refusals do. A count says a cell went untyped; it cannot say
|
|
29
|
+
* WHICH cell, so nothing downstream could act on one and nothing did. Carrying
|
|
30
|
+
* the owner is what makes a census refusal the same kind of object as an ABI
|
|
31
|
+
* blocker or a print refusal, and lets one list answer "what did this
|
|
32
|
+
* compilation refuse, and where" (the frontend is replaced, not instrumented).
|
|
33
|
+
*
|
|
34
|
+
* Declared here rather than as an `ir/refusal.ts` `Refusal` for the reason
|
|
35
|
+
* `cells/model.ts` already gives for `CellRefusal`: the frontend settles long
|
|
36
|
+
* before there is a plan to certify against, and semantics must not import the
|
|
37
|
+
* IR to name its own refusals. `compiler.ts` sees both layers and is where the
|
|
38
|
+
* two lists join.
|
|
39
|
+
*/
|
|
40
|
+
export interface CensusRefusal {
|
|
41
|
+
readonly stage: 'census';
|
|
42
|
+
readonly key: CensusRefusalKey;
|
|
43
|
+
readonly reason: string;
|
|
44
|
+
readonly owner: string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* State a refusal.
|
|
48
|
+
*
|
|
49
|
+
* `owner` is the declaration, node or symbol the refusal is attributed to,
|
|
50
|
+
* already rendered -- the census knows how to name its own subject and the
|
|
51
|
+
* refusal list must not depend on an identity table to read one.
|
|
52
|
+
*/
|
|
53
|
+
export declare const censusRefusal: (domain: CensusDomain, root: string, reason: string, owner: string) => CensusRefusal;
|
|
54
|
+
/**
|
|
55
|
+
* The count-per-reason map the censuses used to publish, derived.
|
|
56
|
+
*
|
|
57
|
+
* Kept because instruments already read that shape, and DERIVED rather than
|
|
58
|
+
* maintained beside the list so the two cannot disagree -- a count that drifts
|
|
59
|
+
* from the refusals it counts is the two-authorities defect this refactor
|
|
60
|
+
* exists to remove, in miniature.
|
|
61
|
+
*/
|
|
62
|
+
export declare const censusRefusalCounts: (refusals: readonly CensusRefusal[]) => ReadonlyMap<string, number>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* State a refusal.
|
|
3
|
+
*
|
|
4
|
+
* `owner` is the declaration, node or symbol the refusal is attributed to,
|
|
5
|
+
* already rendered -- the census knows how to name its own subject and the
|
|
6
|
+
* refusal list must not depend on an identity table to read one.
|
|
7
|
+
*/
|
|
8
|
+
export const censusRefusal = (domain, root, reason, owner) => ({
|
|
9
|
+
stage: 'census',
|
|
10
|
+
key: `census:${domain}:${root}`,
|
|
11
|
+
reason,
|
|
12
|
+
owner
|
|
13
|
+
});
|
|
14
|
+
/**
|
|
15
|
+
* The count-per-reason map the censuses used to publish, derived.
|
|
16
|
+
*
|
|
17
|
+
* Kept because instruments already read that shape, and DERIVED rather than
|
|
18
|
+
* maintained beside the list so the two cannot disagree -- a count that drifts
|
|
19
|
+
* from the refusals it counts is the two-authorities defect this refactor
|
|
20
|
+
* exists to remove, in miniature.
|
|
21
|
+
*/
|
|
22
|
+
export const censusRefusalCounts = (refusals) => {
|
|
23
|
+
const counts = new Map();
|
|
24
|
+
for (const refusal of refusals)
|
|
25
|
+
counts.set(refusal.key, (counts.get(refusal.key) ?? 0) + 1);
|
|
26
|
+
return counts;
|
|
27
|
+
};
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { NamespacePathCensus } from './namespace-paths.js';
|
|
3
|
+
import type { NodeId, OperationFamily } from '../../identity/ids.js';
|
|
4
|
+
import type { SemanticCaller } from '../model/operands.js';
|
|
5
|
+
import type { SemanticRegion } from '../model/graph.js';
|
|
6
|
+
import { type IdentityTable, type SpecializationPath } from './identities.js';
|
|
7
|
+
import type { SpecializationCensus } from './specialization.js';
|
|
8
|
+
import type { ProgramReachability } from './reachability.js';
|
|
9
|
+
/**
|
|
10
|
+
* The census.
|
|
11
|
+
*
|
|
12
|
+
* Before anything is normalized, every syntactic site in the program is
|
|
13
|
+
* enumerated and assigned to a family. This is what makes "not installed"
|
|
14
|
+
* measurable: a family that publishes nothing still has to account for every
|
|
15
|
+
* candidate it saw. Without the census, a producer that silently skips a
|
|
16
|
+
* construct is indistinguishable from a program that does not contain it.
|
|
17
|
+
*
|
|
18
|
+
* The census assigns families from ECMAScript syntax kinds only. It does not
|
|
19
|
+
* look at names, and it does not look at what a call resolves to -- that is
|
|
20
|
+
* proof, and proof comes later.
|
|
21
|
+
*/
|
|
22
|
+
export interface CensusCandidate {
|
|
23
|
+
readonly node: ts.Node;
|
|
24
|
+
readonly id: NodeId;
|
|
25
|
+
readonly family: OperationFamily;
|
|
26
|
+
readonly caller: SemanticCaller;
|
|
27
|
+
/** Reachability requires this class's shape but no runtime definition. */
|
|
28
|
+
readonly classLayoutOnly?: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Which monomorphized copy of its enclosing generic this candidate belongs
|
|
31
|
+
* to; empty when it is not inside one.
|
|
32
|
+
*
|
|
33
|
+
* A candidate carries this rather than being looked up from its node, because
|
|
34
|
+
* one node produces one candidate per copy and the node cannot say which of
|
|
35
|
+
* them is being asked about. Every consumer that needs a type for this
|
|
36
|
+
* candidate needs the path with it: `T` is `number` in one copy and `string`
|
|
37
|
+
* in the next, and the node is identical in both.
|
|
38
|
+
*/
|
|
39
|
+
readonly specialization: SpecializationPath;
|
|
40
|
+
/**
|
|
41
|
+
* This candidate's position in its caller's evaluation, counted in the order
|
|
42
|
+
* the walk reaches it.
|
|
43
|
+
*
|
|
44
|
+
* Only the walk knows this. A per-producer counter cannot: producers run
|
|
45
|
+
* family by family, so its numbers record which family published when, not
|
|
46
|
+
* which operation runs first. The ordinal orders *siblings*, whose document
|
|
47
|
+
* order really is their evaluation order; an operation and the operands it
|
|
48
|
+
* consumes are ordered by the dependency between them, which is stronger
|
|
49
|
+
* than any ordinal and needs no help from one.
|
|
50
|
+
*
|
|
51
|
+
* Operations minted from one candidate share its ordinal, and their relative
|
|
52
|
+
* order travels on the evaluation edges their producer publishes -- the only
|
|
53
|
+
* authority that knows an object literal's properties install left to right.
|
|
54
|
+
*/
|
|
55
|
+
readonly evaluationOrdinal: number;
|
|
56
|
+
}
|
|
57
|
+
export interface ProgramCensus {
|
|
58
|
+
readonly candidates: readonly CensusCandidate[];
|
|
59
|
+
readonly regions: ReadonlyMap<string, SemanticRegion>;
|
|
60
|
+
readonly byFamily: ReadonlyMap<OperationFamily, readonly CensusCandidate[]>;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Whether an identifier resolves a value out of a scope.
|
|
64
|
+
*
|
|
65
|
+
* Exported because it is an authority, not a helper: the census uses it to
|
|
66
|
+
* decide which identifiers become reference candidates, and `frontend.ts`'s
|
|
67
|
+
* ambient-host walk uses the same answer to decide which identifiers name a
|
|
68
|
+
* cell a host owns. Two walks with two rules would disagree exactly on the
|
|
69
|
+
* awkward cases -- a JSX tag, an import specifier, a property key -- and each
|
|
70
|
+
* disagreement is a binding one layer thinks exists and the other does not.
|
|
71
|
+
*/
|
|
72
|
+
export declare const isValueReference: (node: ts.Identifier | ts.PrivateIdentifier, paths: NamespacePathCensus) => boolean;
|
|
73
|
+
export declare const familyOf: (node: ts.Node, paths: NamespacePathCensus) => OperationFamily | null;
|
|
74
|
+
/**
|
|
75
|
+
* Whether this node is a class field's initializer expression.
|
|
76
|
+
*
|
|
77
|
+
* `ClassFieldDefinitionRecord`'s initializer is a function whose whole body is
|
|
78
|
+
* `Return ? Evaluation of the initializer` -- the same implicit return a
|
|
79
|
+
* concise arrow body performs, for the same reason: the value has to leave the
|
|
80
|
+
* call, and no `ReturnStatement` exists to census.
|
|
81
|
+
*/
|
|
82
|
+
export declare const isFieldInitializerBody: (node: ts.Node) => boolean;
|
|
83
|
+
/**
|
|
84
|
+
* Whether this node is a parameter property: `constructor(readonly name: T)`.
|
|
85
|
+
*
|
|
86
|
+
* TypeScript's own predicate, not a re-derivation of it -- the modifier set
|
|
87
|
+
* that makes a parameter also declare a member is the language's rule, and
|
|
88
|
+
* spelling it a second time here would be a second authority over it.
|
|
89
|
+
*/
|
|
90
|
+
export declare const isParameterProperty: (node: ts.Node) => node is ts.ParameterPropertyDeclaration;
|
|
91
|
+
/**
|
|
92
|
+
* Every family a node carries, in evaluation order.
|
|
93
|
+
*
|
|
94
|
+
* Almost every node carries one. A concise arrow body and a field initializer
|
|
95
|
+
* carry two -- the expression and the implicit return -- and they stay
|
|
96
|
+
* distinguishable because identity is keyed by `(node, family, ordinal)`, so
|
|
97
|
+
* neither can be mistaken for the other by a consumer citing one of them.
|
|
98
|
+
* Dropping the second is what made an arrow function evaluate its body and
|
|
99
|
+
* then return nothing.
|
|
100
|
+
*
|
|
101
|
+
* A parameter property carries two for a third reason: it IS two declarations
|
|
102
|
+
* written as one. `constructor(readonly name: string)` declares a formal
|
|
103
|
+
* parameter -- the `binding` every parameter is -- and an instance member the
|
|
104
|
+
* constructor assigns that parameter into. The second half is class evaluation,
|
|
105
|
+
* so it is `class-lifecycle`, and its caller is the constructor the parameter
|
|
106
|
+
* sits in, which is exactly where the assignment belongs.
|
|
107
|
+
*/
|
|
108
|
+
export declare const familiesOf: (node: ts.Node, paths: NamespacePathCensus) => readonly OperationFamily[];
|
|
109
|
+
export declare const censusProgram: (files: readonly ts.SourceFile[], identities: IdentityTable, reachable: ProgramReachability, specializations: SpecializationCensus, namespacePaths: NamespacePathCensus) => ProgramCensus;
|