@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,24 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { ValueFlowIndex } from './model.js';
|
|
3
|
+
/**
|
|
4
|
+
* Every in-program mention of the import bindings that name this export -- an
|
|
5
|
+
* importer's local identifier, or `ns.name` for a namespace import whose
|
|
6
|
+
* every use selects a member -- or null when any path could expose the
|
|
7
|
+
* binding to code outside the compiled program.
|
|
8
|
+
*
|
|
9
|
+
* Null (open) when: the module set is unstated; the declaring file is not an
|
|
10
|
+
* ES module of the set, is CommonJS, or is an entry; some dynamic module
|
|
11
|
+
* reference is non-literal; the module (or any module re-exporting the
|
|
12
|
+
* binding) is reached by `import()`/`require`/`import = require`, is an
|
|
13
|
+
* entry, or matches an unresolved specifier; a namespace import of such a
|
|
14
|
+
* module is used other than by static member selection; `export * as ns`
|
|
15
|
+
* re-exports it; or `export =` publishes the import.
|
|
16
|
+
*
|
|
17
|
+
* Followed (closed): named and default imports, local `export { x }` /
|
|
18
|
+
* `export default x` of an import, and `export { x } from` / `export * from`
|
|
19
|
+
* re-exports -- each re-exporting module is itself subjected to the same
|
|
20
|
+
* proof. References inside the declaring module are NOT included; the caller
|
|
21
|
+
* has them from value flow. Type-only mentions are omitted. An export no
|
|
22
|
+
* module imports answers `[]`.
|
|
23
|
+
*/
|
|
24
|
+
export declare const inProgramImportReferencesOf: (checker: ts.TypeChecker, flow: ValueFlowIndex, specifierOrDeclaration: ts.ExportSpecifier | ts.Declaration) => readonly ts.Expression[] | null;
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { isTypePositionReference, resolveFlowSymbolAlias, statedModuleSetOf } from './targets.js';
|
|
3
|
+
import { nodeIsReachable } from '../reachability.js';
|
|
4
|
+
const graphs = new WeakMap();
|
|
5
|
+
const lastSegment = (path) => path.replace(/^.*[\\/]/, '').replace(/\.[^.]*$/, '');
|
|
6
|
+
const DYNAMIC_MODULE_REFERENCE = /\bimport\s*\(|\brequire\s*\(/;
|
|
7
|
+
const importGraphOf = (checker, modules) => {
|
|
8
|
+
const known = graphs.get(modules);
|
|
9
|
+
if (known)
|
|
10
|
+
return known;
|
|
11
|
+
const edges = new Map();
|
|
12
|
+
const dynamic = new Set();
|
|
13
|
+
const unresolved = new Set();
|
|
14
|
+
let opaque = false;
|
|
15
|
+
const moduleAt = (specifier) => {
|
|
16
|
+
if (!specifier || !ts.isStringLiteralLike(specifier)) {
|
|
17
|
+
opaque = true;
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
const module = checker.getSymbolAtLocation(specifier);
|
|
21
|
+
if (!module)
|
|
22
|
+
unresolved.add(lastSegment(specifier.text));
|
|
23
|
+
return module ?? null;
|
|
24
|
+
};
|
|
25
|
+
const dynamicAt = (specifier) => {
|
|
26
|
+
const module = moduleAt(specifier);
|
|
27
|
+
if (module)
|
|
28
|
+
dynamic.add(module);
|
|
29
|
+
};
|
|
30
|
+
const scan = (node) => {
|
|
31
|
+
if (ts.isCallExpression(node) &&
|
|
32
|
+
(node.expression.kind === ts.SyntaxKind.ImportKeyword || (ts.isIdentifier(node.expression) && node.expression.text === 'require')))
|
|
33
|
+
dynamicAt(node.arguments[0]);
|
|
34
|
+
ts.forEachChild(node, scan);
|
|
35
|
+
};
|
|
36
|
+
for (const file of modules.files) {
|
|
37
|
+
if (file.isDeclarationFile)
|
|
38
|
+
continue;
|
|
39
|
+
for (const statement of file.statements) {
|
|
40
|
+
if (ts.isImportDeclaration(statement) || (ts.isExportDeclaration(statement) && statement.moduleSpecifier)) {
|
|
41
|
+
const typeOnly = ts.isImportDeclaration(statement) ? statement.importClause?.isTypeOnly === true : statement.isTypeOnly;
|
|
42
|
+
const module = moduleAt(statement.moduleSpecifier);
|
|
43
|
+
if (!module || typeOnly)
|
|
44
|
+
continue;
|
|
45
|
+
const list = edges.get(module) ?? [];
|
|
46
|
+
list.push({ file, declaration: statement });
|
|
47
|
+
edges.set(module, list);
|
|
48
|
+
}
|
|
49
|
+
else if (ts.isImportEqualsDeclaration(statement) && ts.isExternalModuleReference(statement.moduleReference)) {
|
|
50
|
+
dynamicAt(statement.moduleReference.expression);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (DYNAMIC_MODULE_REFERENCE.test(file.text))
|
|
54
|
+
ts.forEachChild(file, scan);
|
|
55
|
+
}
|
|
56
|
+
const graph = {
|
|
57
|
+
opaque,
|
|
58
|
+
unresolved,
|
|
59
|
+
dynamic,
|
|
60
|
+
edges,
|
|
61
|
+
files: new Set(modules.files),
|
|
62
|
+
entries: new Set(modules.entries),
|
|
63
|
+
mentions: new Map()
|
|
64
|
+
};
|
|
65
|
+
graphs.set(modules, graph);
|
|
66
|
+
return graph;
|
|
67
|
+
};
|
|
68
|
+
/** Every identifier in `file` the checker resolves to `symbol`. */
|
|
69
|
+
const mentionsOf = (checker, graph, file, symbol) => {
|
|
70
|
+
let index = graph.mentions.get(file);
|
|
71
|
+
if (!index) {
|
|
72
|
+
const built = new Map();
|
|
73
|
+
const visit = (node) => {
|
|
74
|
+
if (ts.isIdentifier(node)) {
|
|
75
|
+
const resolved = ts.isShorthandPropertyAssignment(node.parent) && node.parent.name === node
|
|
76
|
+
? checker.getShorthandAssignmentValueSymbol(node.parent)
|
|
77
|
+
: checker.getSymbolAtLocation(node);
|
|
78
|
+
if (resolved) {
|
|
79
|
+
const list = built.get(resolved) ?? [];
|
|
80
|
+
list.push(node);
|
|
81
|
+
built.set(resolved, list);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
ts.forEachChild(node, visit);
|
|
85
|
+
};
|
|
86
|
+
ts.forEachChild(file, visit);
|
|
87
|
+
graph.mentions.set(file, (index = built));
|
|
88
|
+
}
|
|
89
|
+
return index.get(symbol) ?? [];
|
|
90
|
+
};
|
|
91
|
+
/** A mention that constructs, calls or reads nothing. */
|
|
92
|
+
const typeOnlyMention = (reference) => isTypePositionReference(reference) || ts.isTypeQueryNode(reference.parent) || ts.isImportTypeNode(reference.parent);
|
|
93
|
+
const exportedSymbolOf = (checker, specifierOrDeclaration) => {
|
|
94
|
+
if (ts.isExportSpecifier(specifierOrDeclaration))
|
|
95
|
+
return checker.getExportSpecifierLocalTargetSymbol(specifierOrDeclaration);
|
|
96
|
+
const name = ts.getNameOfDeclaration(specifierOrDeclaration);
|
|
97
|
+
return name ? checker.getSymbolAtLocation(name) : undefined;
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* Every in-program mention of the import bindings that name this export -- an
|
|
101
|
+
* importer's local identifier, or `ns.name` for a namespace import whose
|
|
102
|
+
* every use selects a member -- or null when any path could expose the
|
|
103
|
+
* binding to code outside the compiled program.
|
|
104
|
+
*
|
|
105
|
+
* Null (open) when: the module set is unstated; the declaring file is not an
|
|
106
|
+
* ES module of the set, is CommonJS, or is an entry; some dynamic module
|
|
107
|
+
* reference is non-literal; the module (or any module re-exporting the
|
|
108
|
+
* binding) is reached by `import()`/`require`/`import = require`, is an
|
|
109
|
+
* entry, or matches an unresolved specifier; a namespace import of such a
|
|
110
|
+
* module is used other than by static member selection; `export * as ns`
|
|
111
|
+
* re-exports it; or `export =` publishes the import.
|
|
112
|
+
*
|
|
113
|
+
* Followed (closed): named and default imports, local `export { x }` /
|
|
114
|
+
* `export default x` of an import, and `export { x } from` / `export * from`
|
|
115
|
+
* re-exports -- each re-exporting module is itself subjected to the same
|
|
116
|
+
* proof. References inside the declaring module are NOT included; the caller
|
|
117
|
+
* has them from value flow. Type-only mentions are omitted. An export no
|
|
118
|
+
* module imports answers `[]`.
|
|
119
|
+
*/
|
|
120
|
+
export const inProgramImportReferencesOf = (checker, flow, specifierOrDeclaration) => {
|
|
121
|
+
const modules = statedModuleSetOf(flow);
|
|
122
|
+
const watched = process.env['GEA_IMPORTERS_DEBUG'];
|
|
123
|
+
const refuse = (reason, at) => {
|
|
124
|
+
if (watched !== undefined) {
|
|
125
|
+
const site = at ?? specifierOrDeclaration;
|
|
126
|
+
const source = site.getSourceFile();
|
|
127
|
+
const line = source.getLineAndCharacterOfPosition(site.getStart()).line + 1;
|
|
128
|
+
console.error(`[IMPORTERS] ${reason} ${source.fileName}:${line} ${site.getText().replace(/\s+/g, ' ').slice(0, 60)}`);
|
|
129
|
+
}
|
|
130
|
+
return null;
|
|
131
|
+
};
|
|
132
|
+
if (!modules)
|
|
133
|
+
return refuse('no-stated-module-set');
|
|
134
|
+
const file = specifierOrDeclaration.getSourceFile();
|
|
135
|
+
if (file.isDeclarationFile || !ts.isExternalModule(file) || file.commonJsModuleIndicator)
|
|
136
|
+
return refuse('not-an-es-module');
|
|
137
|
+
const graph = importGraphOf(checker, modules);
|
|
138
|
+
if (graph.opaque)
|
|
139
|
+
return refuse('import-graph-opaque');
|
|
140
|
+
const target = resolveFlowSymbolAlias(checker, exportedSymbolOf(checker, specifierOrDeclaration));
|
|
141
|
+
const module = checker.getSymbolAtLocation(file);
|
|
142
|
+
if (!target || (target.flags & ts.SymbolFlags.Alias) !== 0 || !module)
|
|
143
|
+
return refuse('export-target-unresolved');
|
|
144
|
+
const references = [];
|
|
145
|
+
const visited = new Set();
|
|
146
|
+
const resolvesToTarget = (symbol) => resolveFlowSymbolAlias(checker, symbol) === target;
|
|
147
|
+
// A mention in code the program never runs reads nothing and hands nothing
|
|
148
|
+
// on. `files` is every module the checker loaded, which is more than the
|
|
149
|
+
// program evaluates: three's `ColorSpaceNode.js` imports `ColorManagement`
|
|
150
|
+
// and passes it a fresh `Matrix3`, and counting that dead call left every
|
|
151
|
+
// `ColorManagement` method's parameters open -- boxed, and dispatched
|
|
152
|
+
// dynamically on the three.js app's first frame.
|
|
153
|
+
const reachable = modules.reachable;
|
|
154
|
+
const runs = (reference) => reachable === undefined || nodeIsReachable(reachable, reference);
|
|
155
|
+
/** Whether every module that can read `name` off `source` is enumerated. */
|
|
156
|
+
const exportedAs = (source, name) => {
|
|
157
|
+
const key = `${source.fileName}\0${name}`;
|
|
158
|
+
if (visited.has(key))
|
|
159
|
+
return true;
|
|
160
|
+
visited.add(key);
|
|
161
|
+
const sourceModule = checker.getSymbolAtLocation(source);
|
|
162
|
+
if (!sourceModule || !graph.files.has(source) || graph.entries.has(source) || graph.dynamic.has(sourceModule)) {
|
|
163
|
+
refuse(`module-${!sourceModule ? 'unnamed' : !graph.files.has(source) ? 'outside-graph' : graph.entries.has(source) ? 'is-entry' : 'dynamic'}`, source);
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
const segment = lastSegment(source.fileName);
|
|
167
|
+
if (graph.unresolved.has(segment)) {
|
|
168
|
+
refuse(`unresolved-specifier:${segment}`, source);
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
if (segment === 'index' && graph.unresolved.has(lastSegment(source.fileName.replace(/[\\/][^\\/]*$/, '')))) {
|
|
172
|
+
refuse('unresolved-index-directory', source);
|
|
173
|
+
return false;
|
|
174
|
+
}
|
|
175
|
+
for (const { file: importer, declaration } of graph.edges.get(sourceModule) ?? []) {
|
|
176
|
+
if (ts.isImportDeclaration(declaration)) {
|
|
177
|
+
const clause = declaration.importClause;
|
|
178
|
+
if (!clause)
|
|
179
|
+
continue;
|
|
180
|
+
if (clause.name && name === 'default' && !bindingUses(importer, clause.name))
|
|
181
|
+
return refuse('default-binding-open', clause) === null && false;
|
|
182
|
+
const bindings = clause.namedBindings;
|
|
183
|
+
if (bindings && ts.isNamespaceImport(bindings)) {
|
|
184
|
+
if (!namespaceUses(importer, bindings.name, name))
|
|
185
|
+
return refuse('namespace-import-open', bindings) === null && false;
|
|
186
|
+
}
|
|
187
|
+
else if (bindings) {
|
|
188
|
+
for (const element of bindings.elements)
|
|
189
|
+
if (!element.isTypeOnly && (element.propertyName ?? element.name).text === name && !bindingUses(importer, element.name))
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
const clause = declaration.exportClause;
|
|
195
|
+
if (clause && ts.isNamespaceExport(clause))
|
|
196
|
+
return refuse('namespace-re-export', clause) === null && false;
|
|
197
|
+
if (!clause) {
|
|
198
|
+
// `export * from` never forwards `default`, and a local export of the
|
|
199
|
+
// same name shadows the star.
|
|
200
|
+
if (name === 'default')
|
|
201
|
+
continue;
|
|
202
|
+
const forwarding = checker.getSymbolAtLocation(importer);
|
|
203
|
+
const forwarded = forwarding && checker.getExportsOfModule(forwarding).find((symbol) => symbol.name === name);
|
|
204
|
+
if (forwarded && resolvesToTarget(forwarded) && !exportedAs(importer, name))
|
|
205
|
+
return false;
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
for (const element of clause.elements)
|
|
209
|
+
if (!element.isTypeOnly && (element.propertyName ?? element.name).text === name && !exportedAs(importer, element.name.text))
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
return true;
|
|
213
|
+
};
|
|
214
|
+
/** A local import binding: its uses are references, its re-exports recurse. */
|
|
215
|
+
const bindingUses = (importer, binding) => {
|
|
216
|
+
const alias = checker.getSymbolAtLocation(binding);
|
|
217
|
+
if (!alias)
|
|
218
|
+
return false;
|
|
219
|
+
for (const statement of importer.statements) {
|
|
220
|
+
if (!ts.isExportDeclaration(statement) || statement.moduleSpecifier || statement.isTypeOnly)
|
|
221
|
+
continue;
|
|
222
|
+
const clause = statement.exportClause;
|
|
223
|
+
if (!clause || !ts.isNamedExports(clause))
|
|
224
|
+
continue;
|
|
225
|
+
for (const element of clause.elements)
|
|
226
|
+
if (!element.isTypeOnly &&
|
|
227
|
+
checker.getExportSpecifierLocalTargetSymbol(element) === alias &&
|
|
228
|
+
!exportedAs(importer, element.name.text))
|
|
229
|
+
return false;
|
|
230
|
+
}
|
|
231
|
+
for (const reference of mentionsOf(checker, graph, importer, alias)) {
|
|
232
|
+
if (reference === binding || typeOnlyMention(reference) || ts.isExportSpecifier(reference.parent) || !runs(reference))
|
|
233
|
+
continue;
|
|
234
|
+
const parent = reference.parent;
|
|
235
|
+
if (ts.isExportAssignment(parent)) {
|
|
236
|
+
if (parent.isExportEquals || !exportedAs(importer, 'default'))
|
|
237
|
+
return false;
|
|
238
|
+
continue;
|
|
239
|
+
}
|
|
240
|
+
references.push(reference);
|
|
241
|
+
}
|
|
242
|
+
return true;
|
|
243
|
+
};
|
|
244
|
+
/** A namespace import is closed only while every use selects a member statically. */
|
|
245
|
+
const namespaceUses = (importer, binding, name) => {
|
|
246
|
+
const alias = checker.getSymbolAtLocation(binding);
|
|
247
|
+
if (!alias)
|
|
248
|
+
return false;
|
|
249
|
+
for (const reference of mentionsOf(checker, graph, importer, alias)) {
|
|
250
|
+
if (reference === binding || typeOnlyMention(reference) || !runs(reference))
|
|
251
|
+
continue;
|
|
252
|
+
const parent = reference.parent;
|
|
253
|
+
const selected = ts.isPropertyAccessExpression(parent)
|
|
254
|
+
? parent.name.text
|
|
255
|
+
: ts.isElementAccessExpression(parent) && ts.isStringLiteralLike(parent.argumentExpression)
|
|
256
|
+
? parent.argumentExpression.text
|
|
257
|
+
: null;
|
|
258
|
+
if (selected === null || parent.expression !== reference)
|
|
259
|
+
return false;
|
|
260
|
+
if (selected === name)
|
|
261
|
+
references.push(parent);
|
|
262
|
+
}
|
|
263
|
+
return true;
|
|
264
|
+
};
|
|
265
|
+
for (const exported of checker.getExportsOfModule(module))
|
|
266
|
+
if (resolvesToTarget(exported) && !exportedAs(file, exported.name))
|
|
267
|
+
return null;
|
|
268
|
+
return references;
|
|
269
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
/**
|
|
3
|
+
* Whether stringifying a value of this type can execute code this program
|
|
4
|
+
* wrote. Only the intrinsic hooks matter: a data member is read by the
|
|
5
|
+
* emitter's own rendering, never by a source body.
|
|
6
|
+
*/
|
|
7
|
+
/** Whether every coercion hook this type answers is the host's own. */
|
|
8
|
+
export declare const coercionHooksAreHost: (checker: ts.TypeChecker, type: ts.Type) => boolean;
|
|
9
|
+
export declare const coercesWithoutSourceCode: (checker: ts.TypeChecker, type: ts.Type) => boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Whether `reference` is an argument of a `console.log`/`console.error` call on
|
|
12
|
+
* the host's own `console`, and is therefore CONSUMED AS TEXT rather than
|
|
13
|
+
* published.
|
|
14
|
+
*
|
|
15
|
+
* `host-members.ts` claims exactly these two members and lowers them to
|
|
16
|
+
* `gea::host::console::log/error(<text>)`, with `emit-tostring.ts`'s
|
|
17
|
+
* `consoleArgumentsText` rendering every operand at the call site. The host
|
|
18
|
+
* never receives the object, only characters -- so an argument is not a
|
|
19
|
+
* publication of the value, provided the rendering itself runs no source code.
|
|
20
|
+
* Three's `Object3D.add` reports `object` to the console on its
|
|
21
|
+
* added-to-itself guard, and that one argument was the terminal of 35 escapes.
|
|
22
|
+
*
|
|
23
|
+
* `null` means the site is not a text sink and the caller's other rules apply.
|
|
24
|
+
*/
|
|
25
|
+
export declare const hostTextSinkArgumentOf: (checker: ts.TypeChecker, reference: ts.Expression) => boolean | null;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { unwrapErasedExpression } from '../producers/erasure.js';
|
|
3
|
+
const TEXT_SINK_MEMBERS = new Set(['log', 'error']);
|
|
4
|
+
/** The three hooks a ToString/ToPrimitive conversion can reach. */
|
|
5
|
+
const coercionHook = (name) => name === 'toString' || name === 'valueOf' || name.startsWith('__@toPrimitive');
|
|
6
|
+
const declaredByHost = (symbol) => (symbol.declarations?.length ?? 0) > 0 && symbol.declarations.every((declaration) => declaration.getSourceFile().hasNoDefaultLib);
|
|
7
|
+
/**
|
|
8
|
+
* Whether stringifying a value of this type can execute code this program
|
|
9
|
+
* wrote. Only the intrinsic hooks matter: a data member is read by the
|
|
10
|
+
* emitter's own rendering, never by a source body.
|
|
11
|
+
*/
|
|
12
|
+
/** Whether every coercion hook this type answers is the host's own. */
|
|
13
|
+
export const coercionHooksAreHost = (checker, type) => checker
|
|
14
|
+
.getPropertiesOfType(checker.getApparentType(type))
|
|
15
|
+
.every((property) => !coercionHook(property.escapedName) || declaredByHost(property));
|
|
16
|
+
export const coercesWithoutSourceCode = (checker, type) => {
|
|
17
|
+
if (type.isUnion() || type.isIntersection())
|
|
18
|
+
return type.types.every((arm) => coercesWithoutSourceCode(checker, arm));
|
|
19
|
+
if ((type.flags & ts.TypeFlags.Any) !== 0 || (type.flags & ts.TypeFlags.Unknown) !== 0)
|
|
20
|
+
return false;
|
|
21
|
+
if ((type.flags & ts.TypeFlags.Object) === 0)
|
|
22
|
+
return true;
|
|
23
|
+
// An array is rendered by joining its elements, which reaches each element's
|
|
24
|
+
// own hooks. Following that is the element proof's job, not this one's.
|
|
25
|
+
if (checker.isArrayLikeType(type))
|
|
26
|
+
return false;
|
|
27
|
+
return coercionHooksAreHost(checker, type);
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Whether `reference` is an argument of a `console.log`/`console.error` call on
|
|
31
|
+
* the host's own `console`, and is therefore CONSUMED AS TEXT rather than
|
|
32
|
+
* published.
|
|
33
|
+
*
|
|
34
|
+
* `host-members.ts` claims exactly these two members and lowers them to
|
|
35
|
+
* `gea::host::console::log/error(<text>)`, with `emit-tostring.ts`'s
|
|
36
|
+
* `consoleArgumentsText` rendering every operand at the call site. The host
|
|
37
|
+
* never receives the object, only characters -- so an argument is not a
|
|
38
|
+
* publication of the value, provided the rendering itself runs no source code.
|
|
39
|
+
* Three's `Object3D.add` reports `object` to the console on its
|
|
40
|
+
* added-to-itself guard, and that one argument was the terminal of 35 escapes.
|
|
41
|
+
*
|
|
42
|
+
* `null` means the site is not a text sink and the caller's other rules apply.
|
|
43
|
+
*/
|
|
44
|
+
export const hostTextSinkArgumentOf = (checker, reference) => {
|
|
45
|
+
// A spread argument is not one value the sink might keep: it is however many
|
|
46
|
+
// the array holds, each rendered on its own. `console.error( message,
|
|
47
|
+
// ...params )` is the shape three's logging shim ends in.
|
|
48
|
+
const spread = ts.isSpreadElement(reference.parent) && reference.parent.expression === reference ? reference.parent : null;
|
|
49
|
+
const call = spread?.parent ?? reference.parent;
|
|
50
|
+
if (!ts.isCallExpression(call) || !call.arguments.includes(spread ?? reference))
|
|
51
|
+
return null;
|
|
52
|
+
if (spread === null && call.arguments.some(ts.isSpreadElement))
|
|
53
|
+
return null;
|
|
54
|
+
const callee = unwrapErasedExpression(call.expression);
|
|
55
|
+
// `String(value)` is ToString spelled as a call. It is the same consumption:
|
|
56
|
+
// characters come out, the value stays where it was. Source transforms emit
|
|
57
|
+
// it wherever a concatenation's operand has to be converted explicitly.
|
|
58
|
+
if (spread === null && ts.isIdentifier(callee) && callee.text === 'String' && call.arguments.length === 1) {
|
|
59
|
+
const intrinsic = checker.getSymbolAtLocation(callee);
|
|
60
|
+
if (!intrinsic || intrinsic.name !== 'String' || !declaredByHost(intrinsic))
|
|
61
|
+
return null;
|
|
62
|
+
return coercesWithoutSourceCode(checker, checker.getTypeAtLocation(reference));
|
|
63
|
+
}
|
|
64
|
+
if (!ts.isPropertyAccessExpression(callee) && !ts.isElementAccessExpression(callee))
|
|
65
|
+
return null;
|
|
66
|
+
const member = ts.isPropertyAccessExpression(callee)
|
|
67
|
+
? callee.name.text
|
|
68
|
+
: ts.isStringLiteralLike(callee.argumentExpression)
|
|
69
|
+
? callee.argumentExpression.text
|
|
70
|
+
: null;
|
|
71
|
+
if (member === null || !TEXT_SINK_MEMBERS.has(member))
|
|
72
|
+
return null;
|
|
73
|
+
const receiver = unwrapErasedExpression(callee.expression);
|
|
74
|
+
if (!ts.isIdentifier(receiver) || receiver.text !== 'console')
|
|
75
|
+
return null;
|
|
76
|
+
const console = checker.getSymbolAtLocation(receiver);
|
|
77
|
+
if (!console || console.name !== 'console' || !declaredByHost(console))
|
|
78
|
+
return null;
|
|
79
|
+
const method = checker.getPropertyOfType(checker.getTypeAtLocation(receiver), member);
|
|
80
|
+
if (!method || !declaredByHost(method))
|
|
81
|
+
return null;
|
|
82
|
+
const rendered = checker.getTypeAtLocation(reference);
|
|
83
|
+
if (spread === null)
|
|
84
|
+
return coercesWithoutSourceCode(checker, rendered);
|
|
85
|
+
const element = checker.getIndexTypeOfType(rendered, ts.IndexKind.Number);
|
|
86
|
+
return element !== undefined && coercesWithoutSourceCode(checker, element);
|
|
87
|
+
};
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { FlowCallSite, ValueFlowIndex } from './model.js';
|
|
3
|
+
import type { IntrinsicProtocolRequirement } from '../deferred-intrinsic-protocols.js';
|
|
4
|
+
export type IntrinsicArrayCallbackMethod = 'forEach' | 'map' | 'filter' | 'some' | 'every' | 'find' | 'findIndex' | 'findLast' | 'findLastIndex' | 'flatMap' | 'sort' | 'toSorted' | 'reduce' | 'reduceRight';
|
|
5
|
+
export type IntrinsicArrayCallbackRole = 'element' | 'index' | 'array' | 'sort-left' | 'sort-right' | 'reduce-accumulator' | 'reduce-current';
|
|
6
|
+
export type IntrinsicArrayCallbackValueSource = {
|
|
7
|
+
readonly kind: 'array-elements';
|
|
8
|
+
readonly receiver: ts.Expression;
|
|
9
|
+
readonly excludesSeedElement?: 'first' | 'last';
|
|
10
|
+
} | {
|
|
11
|
+
readonly kind: 'array-index';
|
|
12
|
+
} | {
|
|
13
|
+
readonly kind: 'receiver';
|
|
14
|
+
readonly receiver: ts.Expression;
|
|
15
|
+
} | {
|
|
16
|
+
readonly kind: 'reduce-accumulator';
|
|
17
|
+
readonly receiver: ts.Expression;
|
|
18
|
+
readonly initialValue: ts.Expression | null;
|
|
19
|
+
readonly seedElement: 'first' | 'last' | null;
|
|
20
|
+
/** Later callback invocations can receive the prior callback result. */
|
|
21
|
+
readonly feedback: 'callback-completion';
|
|
22
|
+
};
|
|
23
|
+
export interface IntrinsicArrayCallbackArgument {
|
|
24
|
+
/** Runtime callback argument position; callback `this` is described separately. */
|
|
25
|
+
readonly position: number;
|
|
26
|
+
readonly role: IntrinsicArrayCallbackRole;
|
|
27
|
+
readonly source: IntrinsicArrayCallbackValueSource;
|
|
28
|
+
}
|
|
29
|
+
export interface IntrinsicArrayCallbackFrame {
|
|
30
|
+
readonly call: ts.CallExpression;
|
|
31
|
+
readonly method: IntrinsicArrayCallbackMethod;
|
|
32
|
+
readonly receiver: ts.Expression;
|
|
33
|
+
readonly memberKey: string;
|
|
34
|
+
/** The expression occupying the intrinsic callback operand. The graph resolves its callable values. */
|
|
35
|
+
readonly callback: ts.Expression;
|
|
36
|
+
readonly callbackOperandPosition: number;
|
|
37
|
+
readonly arguments: readonly IntrinsicArrayCallbackArgument[];
|
|
38
|
+
readonly initialValue: ts.Expression | null;
|
|
39
|
+
readonly thisBinding: {
|
|
40
|
+
readonly kind: 'callback-thisArg';
|
|
41
|
+
/** null means the intrinsic supplies undefined; target strictness governs JS this conversion. */
|
|
42
|
+
readonly value: ts.Expression | null;
|
|
43
|
+
/** Arrow callback targets ignore thisArg and retain their lexical receiver. */
|
|
44
|
+
readonly arrowsUseLexicalThis: true;
|
|
45
|
+
};
|
|
46
|
+
/** The graph must prove a runtime Array root and no own receiver slot shadowing. */
|
|
47
|
+
readonly receiverObligations: {
|
|
48
|
+
readonly arrayBrand: true;
|
|
49
|
+
readonly unshadowedMember: true;
|
|
50
|
+
readonly memberKey: string;
|
|
51
|
+
};
|
|
52
|
+
/** Must be included by the graph's final seal; this helper does not discharge it. */
|
|
53
|
+
readonly protocolRequirements: readonly IntrinsicProtocolRequirement[];
|
|
54
|
+
/** Whether the method declaration itself was authenticated by checker identity. */
|
|
55
|
+
readonly identity: 'standard-array-member' | 'runtime-array-lookup';
|
|
56
|
+
}
|
|
57
|
+
export type IntrinsicArrayCallbackFrameResult = {
|
|
58
|
+
readonly kind: 'not-intrinsic';
|
|
59
|
+
} | {
|
|
60
|
+
readonly kind: 'unresolved';
|
|
61
|
+
readonly reason: string;
|
|
62
|
+
} | {
|
|
63
|
+
readonly kind: 'no-callback';
|
|
64
|
+
readonly call: ts.CallExpression;
|
|
65
|
+
readonly method: 'sort' | 'toSorted';
|
|
66
|
+
readonly receiver: ts.Expression;
|
|
67
|
+
readonly memberKey: string;
|
|
68
|
+
readonly receiverObligations: IntrinsicArrayCallbackFrame['receiverObligations'];
|
|
69
|
+
readonly protocolRequirements: readonly IntrinsicProtocolRequirement[];
|
|
70
|
+
readonly identity: IntrinsicArrayCallbackFrame['identity'];
|
|
71
|
+
} | {
|
|
72
|
+
readonly kind: 'frame';
|
|
73
|
+
readonly frame: IntrinsicArrayCallbackFrame;
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Describe callback frames for authenticated Array/ReadonlyArray methods.
|
|
77
|
+
* This is an inventory leaf: it never resolves callback values, array
|
|
78
|
+
* contents, aliases, receiver closure, or callable completion. The caller
|
|
79
|
+
* must discharge the receiver and intrinsic-prototype obligations in its
|
|
80
|
+
* shared proof graph. A method name alone never authenticates a source
|
|
81
|
+
* lookalike; when checker attribution is absent on an `any` receiver, the
|
|
82
|
+
* result is explicitly only a runtime-array candidate.
|
|
83
|
+
*/
|
|
84
|
+
export declare const intrinsicArrayCallbackFrameOf: (checker: ts.TypeChecker, flow: ValueFlowIndex, site: FlowCallSite) => IntrinsicArrayCallbackFrameResult;
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
const callbackShape = (method, optionalCallback, thisArgumentPosition, callbackRoles) => ({ method, optionalCallback, thisArgumentPosition, callbackRoles });
|
|
3
|
+
const methodShapes = new Map([
|
|
4
|
+
...['forEach', 'map', 'filter', 'some', 'every', 'find', 'findIndex', 'findLast', 'findLastIndex', 'flatMap'].map((method) => [method, callbackShape(method, false, 1, ['element', 'index', 'array'])]),
|
|
5
|
+
...['sort', 'toSorted'].map((method) => [
|
|
6
|
+
method,
|
|
7
|
+
callbackShape(method, true, null, ['sort-left', 'sort-right'])
|
|
8
|
+
]),
|
|
9
|
+
...['reduce', 'reduceRight'].map((method) => [
|
|
10
|
+
method,
|
|
11
|
+
callbackShape(method, false, null, ['reduce-accumulator', 'reduce-current', 'index', 'array'])
|
|
12
|
+
])
|
|
13
|
+
]);
|
|
14
|
+
const literalMemberKey = (callee) => {
|
|
15
|
+
if (ts.isPropertyAccessExpression(callee))
|
|
16
|
+
return callee.name.text;
|
|
17
|
+
if (!ts.isElementAccessExpression(callee) || !callee.argumentExpression)
|
|
18
|
+
return null;
|
|
19
|
+
const key = callee.argumentExpression;
|
|
20
|
+
return ts.isStringLiteralLike(key) || ts.isNumericLiteral(key) ? key.text : null;
|
|
21
|
+
};
|
|
22
|
+
const unionParts = (type) => (type.isUnion() ? type.types.flatMap(unionParts) : [type]);
|
|
23
|
+
const standardArrayMember = (checker, anchor, declaration) => {
|
|
24
|
+
const owner = declaration.parent;
|
|
25
|
+
return (ts.isInterfaceDeclaration(owner) &&
|
|
26
|
+
(owner.name.text === 'Array' || owner.name.text === 'ReadonlyArray') &&
|
|
27
|
+
declaration.getSourceFile().hasNoDefaultLib &&
|
|
28
|
+
checker.getSymbolAtLocation(owner.name) === checker.resolveName(owner.name.text, anchor, ts.SymbolFlags.Interface, false));
|
|
29
|
+
};
|
|
30
|
+
const isUndefinedValue = (checker, flow, expression) => {
|
|
31
|
+
const value = ts.isParenthesizedExpression(expression) ? expression.expression : expression;
|
|
32
|
+
if (ts.isVoidExpression(value))
|
|
33
|
+
return true;
|
|
34
|
+
if (!ts.isIdentifier(value) || value.text !== 'undefined' || flow.targetOf(value)?.declaration)
|
|
35
|
+
return false;
|
|
36
|
+
const symbol = checker.getSymbolAtLocation(value);
|
|
37
|
+
const declarations = symbol?.declarations ?? [];
|
|
38
|
+
const globalUndefined = checker.resolveName('undefined', value, ts.SymbolFlags.Value, false);
|
|
39
|
+
return (symbol !== undefined &&
|
|
40
|
+
symbol === globalUndefined &&
|
|
41
|
+
(checker.getTypeAtLocation(value).flags & ts.TypeFlags.Undefined) !== 0 &&
|
|
42
|
+
(declarations.length === 0 || declarations.every((declaration) => declaration.getSourceFile().hasNoDefaultLib)));
|
|
43
|
+
};
|
|
44
|
+
const sourceForRole = (role, receiver, initialValue, method) => {
|
|
45
|
+
switch (role) {
|
|
46
|
+
case 'element':
|
|
47
|
+
case 'sort-left':
|
|
48
|
+
case 'sort-right':
|
|
49
|
+
case 'reduce-current':
|
|
50
|
+
return {
|
|
51
|
+
kind: 'array-elements',
|
|
52
|
+
receiver,
|
|
53
|
+
...(method === 'reduce' && initialValue === null ? { excludesSeedElement: 'first' } : {}),
|
|
54
|
+
...(method === 'reduceRight' && initialValue === null ? { excludesSeedElement: 'last' } : {})
|
|
55
|
+
};
|
|
56
|
+
case 'index':
|
|
57
|
+
return { kind: 'array-index' };
|
|
58
|
+
case 'array':
|
|
59
|
+
return { kind: 'receiver', receiver };
|
|
60
|
+
case 'reduce-accumulator':
|
|
61
|
+
return {
|
|
62
|
+
kind: 'reduce-accumulator',
|
|
63
|
+
receiver,
|
|
64
|
+
initialValue,
|
|
65
|
+
seedElement: initialValue === null ? (method === 'reduce' ? 'first' : 'last') : null,
|
|
66
|
+
feedback: 'callback-completion'
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Describe callback frames for authenticated Array/ReadonlyArray methods.
|
|
72
|
+
* This is an inventory leaf: it never resolves callback values, array
|
|
73
|
+
* contents, aliases, receiver closure, or callable completion. The caller
|
|
74
|
+
* must discharge the receiver and intrinsic-prototype obligations in its
|
|
75
|
+
* shared proof graph. A method name alone never authenticates a source
|
|
76
|
+
* lookalike; when checker attribution is absent on an `any` receiver, the
|
|
77
|
+
* result is explicitly only a runtime-array candidate.
|
|
78
|
+
*/
|
|
79
|
+
export const intrinsicArrayCallbackFrameOf = (checker, flow, site) => {
|
|
80
|
+
if (!ts.isCallExpression(site.call) || site.operands.kind !== 'call' || site.operands.explicitThis)
|
|
81
|
+
return { kind: 'not-intrinsic' };
|
|
82
|
+
const callee = site.operands.callee;
|
|
83
|
+
if (!ts.isPropertyAccessExpression(callee) && !ts.isElementAccessExpression(callee))
|
|
84
|
+
return { kind: 'not-intrinsic' };
|
|
85
|
+
const memberKey = literalMemberKey(callee);
|
|
86
|
+
if (memberKey === null)
|
|
87
|
+
return { kind: 'not-intrinsic' };
|
|
88
|
+
const shape = methodShapes.get(memberKey);
|
|
89
|
+
if (!shape)
|
|
90
|
+
return { kind: 'not-intrinsic' };
|
|
91
|
+
if (site.operands.dispatch.kind !== 'member' || site.operands.receiver === null)
|
|
92
|
+
return { kind: 'unresolved', reason: 'not-a-normal-member-call' };
|
|
93
|
+
if (site.operands.receiver !== callee.expression)
|
|
94
|
+
return { kind: 'unresolved', reason: 'receiver-does-not-match-member-lookup' };
|
|
95
|
+
const receiver = site.operands.receiver;
|
|
96
|
+
const receiverType = checker.getTypeAtLocation(receiver);
|
|
97
|
+
const parts = unionParts(receiverType);
|
|
98
|
+
const anyReceiver = parts.some((part) => (part.flags & ts.TypeFlags.Any) !== 0);
|
|
99
|
+
const member = checker.getSymbolAtLocation(ts.isPropertyAccessExpression(callee) ? callee.name : callee.argumentExpression);
|
|
100
|
+
let identity;
|
|
101
|
+
if (member?.declarations?.length) {
|
|
102
|
+
if (!member.declarations.some((declaration) => standardArrayMember(checker, receiver, declaration)))
|
|
103
|
+
return { kind: 'not-intrinsic' };
|
|
104
|
+
identity = 'standard-array-member';
|
|
105
|
+
}
|
|
106
|
+
else if (anyReceiver)
|
|
107
|
+
identity = 'runtime-array-lookup';
|
|
108
|
+
else
|
|
109
|
+
return { kind: 'unresolved', reason: 'array-member-identity-unavailable' };
|
|
110
|
+
// The frame relies on the intrinsic method running with the intrinsic
|
|
111
|
+
// semantics, and what that reads off `Array.prototype` is finite: the method
|
|
112
|
+
// itself, every index (a hole read falls through to the prototype) and, for
|
|
113
|
+
// the species-creating methods (`map`/`filter`/`flatMap`/`toSorted`),
|
|
114
|
+
// `constructor` and `@@species`; `length` and the present elements are own.
|
|
115
|
+
// Demanding the whole prototype instead fails under ANY unattributed
|
|
116
|
+
// prototype-key write -- on hono-hello that was the one obligation the sealed
|
|
117
|
+
// census could not discharge (reg-exp-router `[middleware, routes].forEach`)
|
|
118
|
+
// while none of the keys the call reads was ever written. An `any` receiver
|
|
119
|
+
// proves nothing about the receiver's own shape, so the runtime lookup keeps
|
|
120
|
+
// the whole-prototype obligation.
|
|
121
|
+
const protocolRequirements = [
|
|
122
|
+
identity === 'standard-array-member'
|
|
123
|
+
? { intrinsic: 'Array', prototypeKeys: { names: [memberKey, 'constructor', '@@species'], arrayIndices: true }, location: site.call }
|
|
124
|
+
: { intrinsic: 'Array', location: site.call }
|
|
125
|
+
];
|
|
126
|
+
const receiverObligations = { arrayBrand: true, unshadowedMember: true, memberKey };
|
|
127
|
+
const args = site.operands.args;
|
|
128
|
+
if (args.some(ts.isSpreadElement))
|
|
129
|
+
return { kind: 'unresolved', reason: 'spread-arguments' };
|
|
130
|
+
const callback = args[0];
|
|
131
|
+
if (!callback) {
|
|
132
|
+
if (!shape.optionalCallback)
|
|
133
|
+
return { kind: 'unresolved', reason: 'missing-required-callback' };
|
|
134
|
+
return {
|
|
135
|
+
kind: 'no-callback',
|
|
136
|
+
call: site.call,
|
|
137
|
+
method: shape.method,
|
|
138
|
+
receiver,
|
|
139
|
+
memberKey,
|
|
140
|
+
receiverObligations,
|
|
141
|
+
protocolRequirements,
|
|
142
|
+
identity
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
if (shape.optionalCallback && isUndefinedValue(checker, flow, callback))
|
|
146
|
+
return {
|
|
147
|
+
kind: 'no-callback',
|
|
148
|
+
call: site.call,
|
|
149
|
+
method: shape.method,
|
|
150
|
+
receiver,
|
|
151
|
+
memberKey,
|
|
152
|
+
receiverObligations,
|
|
153
|
+
protocolRequirements,
|
|
154
|
+
identity
|
|
155
|
+
};
|
|
156
|
+
const initialValue = shape.method === 'reduce' || shape.method === 'reduceRight' ? (args[1] ?? null) : null;
|
|
157
|
+
const thisArgument = shape.thisArgumentPosition === null ? null : (args[shape.thisArgumentPosition] ?? null);
|
|
158
|
+
const arguments_ = shape.callbackRoles.map((role, position) => ({
|
|
159
|
+
position,
|
|
160
|
+
role,
|
|
161
|
+
source: sourceForRole(role, receiver, initialValue, shape.method)
|
|
162
|
+
}));
|
|
163
|
+
return {
|
|
164
|
+
kind: 'frame',
|
|
165
|
+
frame: {
|
|
166
|
+
call: site.call,
|
|
167
|
+
method: shape.method,
|
|
168
|
+
receiver,
|
|
169
|
+
memberKey,
|
|
170
|
+
callback,
|
|
171
|
+
callbackOperandPosition: 0,
|
|
172
|
+
arguments: arguments_,
|
|
173
|
+
initialValue,
|
|
174
|
+
thisBinding: { kind: 'callback-thisArg', value: thisArgument, arrowsUseLexicalThis: true },
|
|
175
|
+
receiverObligations,
|
|
176
|
+
protocolRequirements,
|
|
177
|
+
identity
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
};
|