@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,667 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { isAmbientDeclaration } from '../ambient.js';
|
|
3
|
+
import { arrayAssignmentWriteTargetOf, isArrayAssignmentPatternElement, isAssignmentPattern, isObjectAssignmentElement, objectAssignmentElementOfTarget } from './assignment-patterns.js';
|
|
4
|
+
import { regionId } from '../../identity/ids.js';
|
|
5
|
+
import { forEachEvaluationChild } from './evaluation-order.js';
|
|
6
|
+
import { enclosingCallIfCallee } from './producers/erasure.js';
|
|
7
|
+
import { rootSpecialization } from './identities.js';
|
|
8
|
+
/**
|
|
9
|
+
* The family a syntax kind belongs to.
|
|
10
|
+
*
|
|
11
|
+
* `null` means the node is not itself an operation -- a type annotation, a
|
|
12
|
+
* modifier, a token. Returning `null` is different from returning a family and
|
|
13
|
+
* then failing to normalize it: the first says "there is nothing here", the
|
|
14
|
+
* second says "there is something here I could not model", and only the second
|
|
15
|
+
* is a blocker.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Whether an identifier is a value reference rather than a name.
|
|
19
|
+
*
|
|
20
|
+
* `obj.foo`, `{ foo: 1 }`, `class C`, and `import { foo }` all contain an
|
|
21
|
+
* identifier that never evaluates: it names something. Censusing those as
|
|
22
|
+
* references would inflate the reference family with candidates no producer can
|
|
23
|
+
* ever publish, and an inflated census is exactly what makes "not installed"
|
|
24
|
+
* stop meaning anything.
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* Whether an identifier is an intrinsic JSX tag rather than a value reference.
|
|
28
|
+
*
|
|
29
|
+
* JSX's grammar decides this, and it decides it from the spelling: a
|
|
30
|
+
* lowercase-initial identifier in tag position names an intrinsic element,
|
|
31
|
+
* anything else resolves as a value. This is the same kind of authority a
|
|
32
|
+
* string literal's characters carry -- the tag is data the language reads --
|
|
33
|
+
* and it is why the rule can be stated here without consulting the checker.
|
|
34
|
+
*/
|
|
35
|
+
const isIntrinsicJsxTagName = (node) => {
|
|
36
|
+
const parent = node.parent;
|
|
37
|
+
if (!parent)
|
|
38
|
+
return false;
|
|
39
|
+
const inTagPosition = (ts.isJsxOpeningElement(parent) || ts.isJsxSelfClosingElement(parent) || ts.isJsxClosingElement(parent)) && parent.tagName === node;
|
|
40
|
+
if (!inTagPosition || !ts.isIdentifier(node))
|
|
41
|
+
return false;
|
|
42
|
+
const first = node.text.charAt(0);
|
|
43
|
+
return first === first.toLowerCase() && first !== first.toUpperCase();
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Whether an identifier resolves a value out of a scope.
|
|
47
|
+
*
|
|
48
|
+
* Exported because it is an authority, not a helper: the census uses it to
|
|
49
|
+
* decide which identifiers become reference candidates, and `frontend.ts`'s
|
|
50
|
+
* ambient-host walk uses the same answer to decide which identifiers name a
|
|
51
|
+
* cell a host owns. Two walks with two rules would disagree exactly on the
|
|
52
|
+
* awkward cases -- a JSX tag, an import specifier, a property key -- and each
|
|
53
|
+
* disagreement is a binding one layer thinks exists and the other does not.
|
|
54
|
+
*/
|
|
55
|
+
export const isValueReference = (node, paths) => {
|
|
56
|
+
if (objectAssignmentElementOfTarget(node))
|
|
57
|
+
return false;
|
|
58
|
+
const parent = node.parent;
|
|
59
|
+
if (!parent)
|
|
60
|
+
return false;
|
|
61
|
+
// The member half of a property access is a key, not a reference. The object
|
|
62
|
+
// half is a reference and reaches this function separately.
|
|
63
|
+
if (ts.isPropertyAccessExpression(parent) && parent.name === node)
|
|
64
|
+
return false;
|
|
65
|
+
// The object half of `Debug.x` when `Debug` is a source namespace is a path
|
|
66
|
+
// segment, not a read (`namespace-paths.ts`) -- but only when the whole
|
|
67
|
+
// access IS a path or a qualified member. An access that resolves to no
|
|
68
|
+
// member keeps its ordinary shape, receiver read included.
|
|
69
|
+
if (ts.isPropertyAccessExpression(parent) &&
|
|
70
|
+
parent.expression === node &&
|
|
71
|
+
(paths.isPath(parent) || paths.memberSymbolOf(parent) !== null)) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
if (ts.isQualifiedName(parent))
|
|
75
|
+
return false;
|
|
76
|
+
// A bare type reference (`: GeaJsxElement`, `Array<T>`'s `T`) names a type,
|
|
77
|
+
// not a value: TypeScript keeps the type and value namespaces separate, and
|
|
78
|
+
// this identifier is never looked up against a value-holding scope. A
|
|
79
|
+
// dotted reference's own name half is already excluded above via
|
|
80
|
+
// `isQualifiedName`; this is the same fact for the one-segment case, where
|
|
81
|
+
// the identifier's parent is the `TypeReferenceNode` itself rather than a
|
|
82
|
+
// `QualifiedName` link inside one. Without this, a walk that (unlike the
|
|
83
|
+
// census's own, which skips `TypeNode` subtrees outright) descends into
|
|
84
|
+
// type annotations sees `GeaJsxElement` in `function Image(...):
|
|
85
|
+
// GeaJsxElement` as a value read, mints a phantom host-object binding keyed
|
|
86
|
+
// by the interface's bare name, and a later `native-handle` derived from it
|
|
87
|
+
// spells a `gea_native_protocol_GeaJsxElement_v1` tag `gea_runtime.h` never
|
|
88
|
+
// declares -- a program that certifies and then fails in clang.
|
|
89
|
+
if (ts.isTypeReferenceNode(parent) && parent.typeName === node)
|
|
90
|
+
return false;
|
|
91
|
+
if (ts.isMetaProperty(parent))
|
|
92
|
+
return false;
|
|
93
|
+
// A label is resolved against enclosing labeled statements, not against a
|
|
94
|
+
// binding, so it is not a reference to anything a scope holds.
|
|
95
|
+
if (ts.isLabeledStatement(parent) && parent.label === node)
|
|
96
|
+
return false;
|
|
97
|
+
if ((ts.isBreakStatement(parent) || ts.isContinueStatement(parent)) && parent.label === node)
|
|
98
|
+
return false;
|
|
99
|
+
if (ts.isImportSpecifier(parent) || ts.isExportSpecifier(parent) || ts.isImportClause(parent) || ts.isNamespaceImport(parent))
|
|
100
|
+
return false;
|
|
101
|
+
if (ts.isPropertyAssignment(parent) && parent.name === node)
|
|
102
|
+
return false;
|
|
103
|
+
// An intrinsic JSX tag is data, not a name: `<view/>` reads nothing from any
|
|
104
|
+
// scope, and the identifier's own symbol is the *property signature* on the
|
|
105
|
+
// JSX namespace's `IntrinsicElements`, which is a type-level member with no
|
|
106
|
+
// value cell behind it. Censusing it as a reference makes the element read a
|
|
107
|
+
// binding the program never introduces. A capitalised or dotted tag is the
|
|
108
|
+
// opposite -- it really does resolve a value -- and stays a reference; the
|
|
109
|
+
// element producer states the same rule, and both read it from the tag's own
|
|
110
|
+
// spelling because that is where the JSX grammar puts it.
|
|
111
|
+
if (isIntrinsicJsxTagName(node))
|
|
112
|
+
return false;
|
|
113
|
+
// A JSX attribute name is a property key, exactly as a property assignment's
|
|
114
|
+
// name is.
|
|
115
|
+
if (ts.isJsxAttribute(parent) && parent.name === node)
|
|
116
|
+
return false;
|
|
117
|
+
// `{ x }` is the one place a name and a read are the same identifier: the
|
|
118
|
+
// shorthand really does evaluate `x`, so dropping it would lose a real read.
|
|
119
|
+
if (ts.isShorthandPropertyAssignment(parent))
|
|
120
|
+
return true;
|
|
121
|
+
// `export default foo` READS `foo`. ECMA-262 spells that production as an
|
|
122
|
+
// `AssignmentExpression` (§16.2.3), evaluated once during module evaluation,
|
|
123
|
+
// and the module's `*default*` binding is initialized from the value it
|
|
124
|
+
// produces -- an ordinary read, no different from `const d = foo`.
|
|
125
|
+
//
|
|
126
|
+
// TypeScript nevertheless reports the identifier as the ExportAssignment's
|
|
127
|
+
// own NAME (`getNonAssignedNameOfDeclaration` returns `expression` when it is
|
|
128
|
+
// an identifier), because the checker needs an alias symbol there for CJS
|
|
129
|
+
// interop. That is a fact about the type system's naming, not about what
|
|
130
|
+
// runs, and the declaration-name rule at the end of this function -- written
|
|
131
|
+
// for `let x = 1`, where the name really is not read -- would otherwise
|
|
132
|
+
// silently absorb it: the identifier gets no family, `citeExpressionResult`
|
|
133
|
+
// reports the expression as unmodelled, and the whole module is blocked with
|
|
134
|
+
// "expression of syntax kind Identifier has no normalized family". Every
|
|
135
|
+
// node-compat builtin ends in `export default <namespace object>`, so both
|
|
136
|
+
// `node:http` and `node:events` failed on exactly this line.
|
|
137
|
+
if (ts.isExportAssignment(parent) && parent.expression === node)
|
|
138
|
+
return true;
|
|
139
|
+
// In `const { a: b } = o`, `a` is the key read from `o` and `b` is the binding.
|
|
140
|
+
// Only `b` is what `getNameOfDeclaration` reports, so `a` is excluded here.
|
|
141
|
+
if (ts.isBindingElement(parent) && parent.propertyName === node)
|
|
142
|
+
return false;
|
|
143
|
+
if (ts.isEnumMember(parent) && parent.name === node)
|
|
144
|
+
return false;
|
|
145
|
+
// The name of a declaration is the thing being declared. `let x = 1` binds
|
|
146
|
+
// `x`; it does not read it, and treating it as a read would invent an
|
|
147
|
+
// evaluation that never happens.
|
|
148
|
+
// `ts.isDeclaration` is checker-internal; `getNameOfDeclaration` is the public
|
|
149
|
+
// answer to the same question and returns nothing for a non-declaration.
|
|
150
|
+
return ts.getNameOfDeclaration(parent) !== node;
|
|
151
|
+
};
|
|
152
|
+
/**
|
|
153
|
+
* Whether `node` is a plain identifier used DIRECTLY as a for-of/for-in loop's
|
|
154
|
+
* own head, with no `var`/`let`/`const` of its own -- `var v; for (v of xs)`,
|
|
155
|
+
* where `v` is declared elsewhere and merely reused.
|
|
156
|
+
*
|
|
157
|
+
* ECMA-262's `ForIn/OfStatement : for ( LeftHandSideExpression of
|
|
158
|
+
* AssignmentExpression )` never evaluates this position as a value -- there is
|
|
159
|
+
* no `GetValue` step, only `PutValue`, performed once per iteration from the
|
|
160
|
+
* loop's own `IteratorStep`/enumerate step (`ForOfBodyEvaluation`/
|
|
161
|
+
* `ForIn/OfHeadEvaluation`). This is the write-target twin of
|
|
162
|
+
* `arrayAssignmentWriteTargetOf`, for the one shape that predicate does not
|
|
163
|
+
* cover: a single identifier rather than an array pattern's element.
|
|
164
|
+
*
|
|
165
|
+
* Without this exclusion the identifier fell through to `isValueReference`'s
|
|
166
|
+
* default rule (`getNameOfDeclaration` finds no declaration at this position,
|
|
167
|
+
* so it answered "yes, a reference"), which censused it as a value READ the
|
|
168
|
+
* loop never performs, and left the actual per-iteration write with no
|
|
169
|
+
* producer at all: `gating.ts`'s own `visitHere` already reserves the
|
|
170
|
+
* `iteration` scope for exactly this write (its comment names "the
|
|
171
|
+
* `VariableDeclarationList` holding `value`'s own declaration, or a bare
|
|
172
|
+
* assignment target" as the two shapes `node.initializer` can be), waiting on
|
|
173
|
+
* a producer that never existed. `producers/bindings.ts`'s
|
|
174
|
+
* `contributeForOfLoopHeadWrite` is that producer, keyed by this same family.
|
|
175
|
+
*
|
|
176
|
+
* A property or element access loop head (`for (obj.p of xs)`, `for (arr[i]
|
|
177
|
+
* of xs)`) is a different, earlier-classified shape (`property` family, via
|
|
178
|
+
* the `PropertyAccessExpression`/`ElementAccessExpression` arms above) and is
|
|
179
|
+
* not covered here.
|
|
180
|
+
*/
|
|
181
|
+
const isForOfLoopHeadWriteTarget = (node) => {
|
|
182
|
+
const parent = node.parent;
|
|
183
|
+
return parent !== undefined && (ts.isForOfStatement(parent) || ts.isForInStatement(parent)) && parent.initializer === node;
|
|
184
|
+
};
|
|
185
|
+
/** A class body owns its members' lifecycle; an object literal allocates them. */
|
|
186
|
+
const hasClassLikeParent = (node) => node.parent !== undefined && ts.isClassLike(node.parent);
|
|
187
|
+
/**
|
|
188
|
+
* A function-like declaration that states a signature and no implementation.
|
|
189
|
+
*
|
|
190
|
+
* `ts.isPropertyDeclaration` is deliberately not covered: a property with no
|
|
191
|
+
* initializer is not the same shape at all -- it still declares a field the
|
|
192
|
+
* constructor installs -- so only the nodes that would otherwise allocate a
|
|
193
|
+
* *callable* are asked.
|
|
194
|
+
*/
|
|
195
|
+
const isFunctionLikeWithoutBody = (node) => (ts.isFunctionDeclaration(node) ||
|
|
196
|
+
ts.isMethodDeclaration(node) ||
|
|
197
|
+
ts.isGetAccessorDeclaration(node) ||
|
|
198
|
+
ts.isSetAccessorDeclaration(node)) &&
|
|
199
|
+
node.body === undefined;
|
|
200
|
+
/** An `abstract` member: a declaration the class states and every concrete subclass must implement. */
|
|
201
|
+
const isAbstractClassMember = (node) => hasClassLikeParent(node) &&
|
|
202
|
+
ts.canHaveModifiers(node) &&
|
|
203
|
+
(ts.getModifiers(node)?.some((modifier) => modifier.kind === ts.SyntaxKind.AbstractKeyword) ?? false);
|
|
204
|
+
export const familyOf = (node, paths) => {
|
|
205
|
+
if (isObjectAssignmentElement(node))
|
|
206
|
+
return 'destructuring';
|
|
207
|
+
if (objectAssignmentElementOfTarget(node))
|
|
208
|
+
return null;
|
|
209
|
+
// A simple array-assignment target (`[a, o.p, arr[0]] = ...`) is a WRITE,
|
|
210
|
+
// never the ordinary read `reference`/`property` would census it as -- the
|
|
211
|
+
// sibling pattern candidate below reads the position, and this candidate
|
|
212
|
+
// only stores into it. Checked ahead of the property/reference rules for
|
|
213
|
+
// the same reason `objectAssignmentElementOfTarget` is checked ahead of
|
|
214
|
+
// them: an excluded node must never fall through to its ordinary family.
|
|
215
|
+
if (arrayAssignmentWriteTargetOf(node))
|
|
216
|
+
return 'destructuring';
|
|
217
|
+
// The default `=` and rest `...` WRAPPERS around such a target are not
|
|
218
|
+
// themselves censused -- they exist only to be keyed by the array
|
|
219
|
+
// pattern's own extraction/default operations (`destructuring.ts`'s
|
|
220
|
+
// `contributeArrayAssignmentPattern`), the same way a binding pattern's
|
|
221
|
+
// `BindingElement` node is a key rather than a computation.
|
|
222
|
+
if ((ts.isSpreadElement(node) || (ts.isBinaryExpression(node) && node.operatorToken.kind === ts.SyntaxKind.EqualsToken)) &&
|
|
223
|
+
isArrayAssignmentPatternElement(node)) {
|
|
224
|
+
return null;
|
|
225
|
+
}
|
|
226
|
+
if (ts.isCallExpression(node) || ts.isNewExpression(node) || ts.isTaggedTemplateExpression(node)) {
|
|
227
|
+
// `import(...)` is a call in syntax only: its target is resolved at runtime
|
|
228
|
+
// by the host, so treating it as an ordinary call would fabricate a target.
|
|
229
|
+
if (ts.isCallExpression(node) && node.expression.kind === ts.SyntaxKind.ImportKeyword)
|
|
230
|
+
return 'dynamic-language';
|
|
231
|
+
return 'invocation';
|
|
232
|
+
}
|
|
233
|
+
if (ts.isPropertyAccessExpression(node)) {
|
|
234
|
+
// `Debug.log` in `Debug.log.trace(...)`: a path segment, no operation.
|
|
235
|
+
if (paths.isPath(node))
|
|
236
|
+
return null;
|
|
237
|
+
// `Debug.assert`: a qualified binding reference -- the same family, and
|
|
238
|
+
// the same `reference`/`binding` pair, that a bare `assert` written inside
|
|
239
|
+
// the namespace body publishes. See `namespace-paths.ts`.
|
|
240
|
+
if (paths.memberSymbolOf(node) !== null)
|
|
241
|
+
return 'reference';
|
|
242
|
+
return 'property';
|
|
243
|
+
}
|
|
244
|
+
if (ts.isElementAccessExpression(node))
|
|
245
|
+
return 'property';
|
|
246
|
+
if (ts.isIdentifier(node) || ts.isPrivateIdentifier(node)) {
|
|
247
|
+
if (isForOfLoopHeadWriteTarget(node))
|
|
248
|
+
return 'binding';
|
|
249
|
+
return isValueReference(node, paths) ? 'reference' : null;
|
|
250
|
+
}
|
|
251
|
+
// `this` resolves against the environment chain exactly as a name does --
|
|
252
|
+
// `ResolveThisBinding` is `GetThisEnvironment().GetThisBinding()` -- so it is
|
|
253
|
+
// a reference site, and censusing it as one is what gives the receiver a
|
|
254
|
+
// published result instead of a placeholder every consumer has to invent.
|
|
255
|
+
if (node.kind === ts.SyntaxKind.ThisKeyword)
|
|
256
|
+
return 'reference';
|
|
257
|
+
// `super` in `super.x`/`super.x(...)` resolves against the environment
|
|
258
|
+
// chain the identical way `this` does: `GetSuperBase` reads the active
|
|
259
|
+
// function's `[[HomeObject]]`, and a class method's home object is a fully
|
|
260
|
+
// static fact -- the class's OWN declaration -- known without running
|
|
261
|
+
// anything. Censusing it as a reference, the same family `this` gets, is
|
|
262
|
+
// what lets `references.ts`'s reference producer publish a result for it
|
|
263
|
+
// instead of every consumer inventing its own placeholder.
|
|
264
|
+
//
|
|
265
|
+
// Excluded when `super` is itself the bare callee of a call (`super(...)`):
|
|
266
|
+
// that shape is grammar-restricted to a constructor and reads the base's
|
|
267
|
+
// own *constructor*, a different question already answered a different way
|
|
268
|
+
// (`invocations.ts`'s `superConstructorRead`, reached through
|
|
269
|
+
// `ts.isCallExpression`'s branch above rather than this one). Syntax
|
|
270
|
+
// permits `super` in exactly three positions -- `super(...)`, `super.x`,
|
|
271
|
+
// `super[x]` -- and only the bare-callee one is that different question, so
|
|
272
|
+
// this is the one shape carved back out rather than the other way round.
|
|
273
|
+
if (node.kind === ts.SyntaxKind.SuperKeyword && enclosingCallIfCallee(node) === null)
|
|
274
|
+
return 'reference';
|
|
275
|
+
// A formal parameter introduces a binding, exactly as a variable declaration
|
|
276
|
+
// does; the only difference is where its value comes from. Leaving it out of
|
|
277
|
+
// the census makes every parameter read a read of a cell nothing declared,
|
|
278
|
+
// which is invisible to every later layer -- the precise failure the census
|
|
279
|
+
// exists to make measurable.
|
|
280
|
+
if (ts.isVariableDeclaration(node) || ts.isBindingElement(node) || ts.isParameter(node))
|
|
281
|
+
return 'binding';
|
|
282
|
+
if (ts.isObjectLiteralExpression(node) || ts.isArrayLiteralExpression(node)) {
|
|
283
|
+
return isAssignmentPattern(node) ? 'destructuring' : 'allocation';
|
|
284
|
+
}
|
|
285
|
+
if (ts.isFunctionExpression(node) ||
|
|
286
|
+
ts.isArrowFunction(node) ||
|
|
287
|
+
ts.isFunctionDeclaration(node) ||
|
|
288
|
+
ts.isClassExpression(node) ||
|
|
289
|
+
ts.isRegularExpressionLiteral(node)) {
|
|
290
|
+
// A declaration with no body allocates nothing. `OrdinaryFunctionCreate`
|
|
291
|
+
// needs a body to close over; what a bodiless declaration states is that a
|
|
292
|
+
// function exists somewhere else -- either the host's, in `declare global
|
|
293
|
+
// { function requestAnimationFrame(...) }`, or this program's own
|
|
294
|
+
// implementation signature, in an overload set whose last member carries
|
|
295
|
+
// the body.
|
|
296
|
+
//
|
|
297
|
+
// Censusing one anyway published a callable whose ABI declared parameters
|
|
298
|
+
// no body could ever bind, and `projection/abi.ts` refused the program for
|
|
299
|
+
// it -- naming the arity mismatch rather than the declaration that has no
|
|
300
|
+
// body to bind them in. Five corpus apps were blocked that way.
|
|
301
|
+
return isFunctionLikeWithoutBody(node) ? null : 'allocation';
|
|
302
|
+
}
|
|
303
|
+
if (ts.isClassDeclaration(node) || ts.isClassStaticBlockDeclaration(node) || ts.isConstructorDeclaration(node))
|
|
304
|
+
return 'class-lifecycle';
|
|
305
|
+
if (ts.isMethodDeclaration(node) ||
|
|
306
|
+
ts.isGetAccessorDeclaration(node) ||
|
|
307
|
+
ts.isSetAccessorDeclaration(node) ||
|
|
308
|
+
ts.isPropertyDeclaration(node)) {
|
|
309
|
+
// A bodiless method is the same non-event a bodiless function is: an
|
|
310
|
+
// overload signature, or a member an ambient class merely declares --
|
|
311
|
+
// EXCEPT an `abstract` one, which is neither. `abstract check(value:
|
|
312
|
+
// number): boolean` allocates nothing and still states a real class-
|
|
313
|
+
// evaluation fact: the class declares this key, and every concrete
|
|
314
|
+
// subclass must fill it. That declaration is what roots a dispatch family
|
|
315
|
+
// (`targets/cpp/virtual-methods.ts`), and censusing it as nothing is why
|
|
316
|
+
// `rules.map(r => r.describe())` over an abstract-typed array went through
|
|
317
|
+
// a boxed dynamic property read that aborted at runtime.
|
|
318
|
+
if (isFunctionLikeWithoutBody(node))
|
|
319
|
+
return isAbstractClassMember(node) ? 'class-lifecycle' : null;
|
|
320
|
+
// The same syntax kinds appear in an object literal, where they are part of
|
|
321
|
+
// building one object rather than steps of class evaluation.
|
|
322
|
+
return hasClassLikeParent(node) ? 'class-lifecycle' : 'allocation';
|
|
323
|
+
}
|
|
324
|
+
if (ts.isBinaryExpression(node) ||
|
|
325
|
+
ts.isPrefixUnaryExpression(node) ||
|
|
326
|
+
ts.isPostfixUnaryExpression(node) ||
|
|
327
|
+
ts.isConditionalExpression(node) ||
|
|
328
|
+
// A `TemplateExpression` is a string concatenation -- EXCEPT the one under a
|
|
329
|
+
// tagged template, which is not evaluated as a string at all. ECMA-262
|
|
330
|
+
// 13.3.11.1 hands the tag the segments and the raw substitution values;
|
|
331
|
+
// nothing calls `ToString` on a substitution. Censusing it as a computation
|
|
332
|
+
// anyway is not merely dead work: a substitution whose `ToString` throws
|
|
333
|
+
// (a symbol, an object with a throwing `toString`) would throw at a site
|
|
334
|
+
// the language says never stringifies it. `tagged-template.ts` reads the
|
|
335
|
+
// spans' expressions directly, so nothing is lost by leaving this node to
|
|
336
|
+
// its tagged parent.
|
|
337
|
+
(ts.isTemplateExpression(node) && !ts.isTaggedTemplateExpression(node.parent)) ||
|
|
338
|
+
ts.isTypeOfExpression(node) ||
|
|
339
|
+
ts.isVoidExpression(node) ||
|
|
340
|
+
ts.isDeleteExpression(node)) {
|
|
341
|
+
return 'computation';
|
|
342
|
+
}
|
|
343
|
+
if (ts.isIfStatement(node) ||
|
|
344
|
+
ts.isForStatement(node) ||
|
|
345
|
+
ts.isForOfStatement(node) ||
|
|
346
|
+
ts.isForInStatement(node) ||
|
|
347
|
+
ts.isWhileStatement(node) ||
|
|
348
|
+
ts.isDoStatement(node) ||
|
|
349
|
+
ts.isSwitchStatement(node) ||
|
|
350
|
+
ts.isReturnStatement(node) ||
|
|
351
|
+
ts.isThrowStatement(node) ||
|
|
352
|
+
ts.isTryStatement(node) ||
|
|
353
|
+
ts.isBreakStatement(node) ||
|
|
354
|
+
ts.isContinueStatement(node) ||
|
|
355
|
+
ts.isLabeledStatement(node) ||
|
|
356
|
+
ts.isAwaitExpression(node) ||
|
|
357
|
+
ts.isYieldExpression(node) ||
|
|
358
|
+
node.kind === ts.SyntaxKind.DebuggerStatement) {
|
|
359
|
+
return 'control';
|
|
360
|
+
}
|
|
361
|
+
// JSX element syntax is the only surface in the language whose meaning comes
|
|
362
|
+
// from declarations rather than from the specification, so it gets its own
|
|
363
|
+
// family instead of being folded into allocation or invocation -- neither of
|
|
364
|
+
// which is true of it under every JSX namespace a program may supply.
|
|
365
|
+
if (ts.isJsxElement(node) || ts.isJsxSelfClosingElement(node) || ts.isJsxFragment(node))
|
|
366
|
+
return 'element';
|
|
367
|
+
if (ts.isObjectBindingPattern(node) || ts.isArrayBindingPattern(node))
|
|
368
|
+
return 'destructuring';
|
|
369
|
+
if (ts.isSpreadElement(node) || ts.isSpreadAssignment(node))
|
|
370
|
+
return 'protocol';
|
|
371
|
+
if (ts.isCatchClause(node))
|
|
372
|
+
return 'boundary';
|
|
373
|
+
if (ts.isImportDeclaration(node) || ts.isExportDeclaration(node) || ts.isExportAssignment(node))
|
|
374
|
+
return 'declaration-lifecycle';
|
|
375
|
+
return null;
|
|
376
|
+
};
|
|
377
|
+
/**
|
|
378
|
+
* Whether this node is an arrow function's expression body.
|
|
379
|
+
*
|
|
380
|
+
* `EvaluateBody` for an `ExpressionBody` is `Return ? Evaluation of
|
|
381
|
+
* AssignmentExpression`: the return is part of the arrow's call, and no
|
|
382
|
+
* `ReturnStatement` exists to census. A concise body is the one place in the
|
|
383
|
+
* language where a single node both produces a value and carries it out of the
|
|
384
|
+
* call.
|
|
385
|
+
*/
|
|
386
|
+
const isConciseArrowBody = (node) => node.parent !== undefined && ts.isArrowFunction(node.parent) && node.parent.body === node && !ts.isBlock(node);
|
|
387
|
+
/**
|
|
388
|
+
* Whether this node is a class field's initializer expression.
|
|
389
|
+
*
|
|
390
|
+
* `ClassFieldDefinitionRecord`'s initializer is a function whose whole body is
|
|
391
|
+
* `Return ? Evaluation of the initializer` -- the same implicit return a
|
|
392
|
+
* concise arrow body performs, for the same reason: the value has to leave the
|
|
393
|
+
* call, and no `ReturnStatement` exists to census.
|
|
394
|
+
*/
|
|
395
|
+
export const isFieldInitializerBody = (node) => node.parent !== undefined && ts.isPropertyDeclaration(node.parent) && node.parent.initializer === node;
|
|
396
|
+
/** Whether `node` is `ancestor` or lies inside it. */
|
|
397
|
+
const isWithin = (node, ancestor) => {
|
|
398
|
+
for (let current = node; current; current = current.parent)
|
|
399
|
+
if (current === ancestor)
|
|
400
|
+
return true;
|
|
401
|
+
return false;
|
|
402
|
+
};
|
|
403
|
+
/**
|
|
404
|
+
* Whether this node is a parameter property: `constructor(readonly name: T)`.
|
|
405
|
+
*
|
|
406
|
+
* TypeScript's own predicate, not a re-derivation of it -- the modifier set
|
|
407
|
+
* that makes a parameter also declare a member is the language's rule, and
|
|
408
|
+
* spelling it a second time here would be a second authority over it.
|
|
409
|
+
*/
|
|
410
|
+
export const isParameterProperty = (node) => node.parent !== undefined && ts.isParameterPropertyDeclaration(node, node.parent);
|
|
411
|
+
/**
|
|
412
|
+
* Every family a node carries, in evaluation order.
|
|
413
|
+
*
|
|
414
|
+
* Almost every node carries one. A concise arrow body and a field initializer
|
|
415
|
+
* carry two -- the expression and the implicit return -- and they stay
|
|
416
|
+
* distinguishable because identity is keyed by `(node, family, ordinal)`, so
|
|
417
|
+
* neither can be mistaken for the other by a consumer citing one of them.
|
|
418
|
+
* Dropping the second is what made an arrow function evaluate its body and
|
|
419
|
+
* then return nothing.
|
|
420
|
+
*
|
|
421
|
+
* A parameter property carries two for a third reason: it IS two declarations
|
|
422
|
+
* written as one. `constructor(readonly name: string)` declares a formal
|
|
423
|
+
* parameter -- the `binding` every parameter is -- and an instance member the
|
|
424
|
+
* constructor assigns that parameter into. The second half is class evaluation,
|
|
425
|
+
* so it is `class-lifecycle`, and its caller is the constructor the parameter
|
|
426
|
+
* sits in, which is exactly where the assignment belongs.
|
|
427
|
+
*/
|
|
428
|
+
export const familiesOf = (node, paths) => {
|
|
429
|
+
const primary = familyOf(node, paths);
|
|
430
|
+
if (isParameterProperty(node))
|
|
431
|
+
return primary ? [primary, 'class-lifecycle'] : ['class-lifecycle'];
|
|
432
|
+
// A class EXPRESSION is an allocation (its value is the constructor object)
|
|
433
|
+
// and, when it extends something, one step of class evaluation too: the
|
|
434
|
+
// heritage read `ClassDefinitionEvaluation` performs. Without that event the
|
|
435
|
+
// projection saw no base for `const D = class extends B {}`, and an
|
|
436
|
+
// inherited field read on a `D` instance went through the dynamic sidecar
|
|
437
|
+
// and aborted. The declaration form publishes the same event from
|
|
438
|
+
// `class-lifecycle.ts`'s `contributeClass`; this is the expression's half.
|
|
439
|
+
// A written constructor is the other lifecycle step an expression shares
|
|
440
|
+
// with a declaration: its callable allocation is what gives the body a
|
|
441
|
+
// stated convention (`class-lifecycle.ts`'s `writtenConstructorAllocationOf`).
|
|
442
|
+
if (ts.isClassExpression(node) &&
|
|
443
|
+
(node.heritageClauses?.some((clause) => clause.token === ts.SyntaxKind.ExtendsKeyword) ||
|
|
444
|
+
node.members.some((member) => ts.isConstructorDeclaration(member) && member.body !== undefined))) {
|
|
445
|
+
return primary ? [primary, 'class-lifecycle'] : ['class-lifecycle'];
|
|
446
|
+
}
|
|
447
|
+
if (!isConciseArrowBody(node) && !isFieldInitializerBody(node))
|
|
448
|
+
return primary ? [primary] : [];
|
|
449
|
+
// A concise body that is itself a control expression (`await x`, `yield x`)
|
|
450
|
+
// would collide with its own implicit return at one identity; the return is
|
|
451
|
+
// what the arrow needs, and the census refuses to publish two operations that
|
|
452
|
+
// cannot be told apart rather than silently keeping one of them.
|
|
453
|
+
if (primary === 'control')
|
|
454
|
+
return ['control'];
|
|
455
|
+
return primary ? [primary, 'control'] : ['control'];
|
|
456
|
+
};
|
|
457
|
+
/** The nearest enclosing function or region that executes this node. */
|
|
458
|
+
const callerOf = (node, identities, regions, path) => {
|
|
459
|
+
let current = node.parent;
|
|
460
|
+
while (current) {
|
|
461
|
+
if (ts.isFunctionDeclaration(current) ||
|
|
462
|
+
ts.isFunctionExpression(current) ||
|
|
463
|
+
ts.isArrowFunction(current) ||
|
|
464
|
+
ts.isMethodDeclaration(current) ||
|
|
465
|
+
ts.isConstructorDeclaration(current) ||
|
|
466
|
+
ts.isGetAccessorDeclaration(current) ||
|
|
467
|
+
ts.isSetAccessorDeclaration(current)) {
|
|
468
|
+
return { kind: 'function', functionId: identities.functionIdOf(current, path) };
|
|
469
|
+
}
|
|
470
|
+
// A field initializer is a function, not a region: `ClassFieldDefinition`
|
|
471
|
+
// creates one with `OrdinaryFunctionCreate` and calls it with the instance
|
|
472
|
+
// as its receiver, once per construction. Modelling it as a region would
|
|
473
|
+
// leave it with no calling convention to declare that receiver, and the
|
|
474
|
+
// `this` its body reads would have no frame slot to come from.
|
|
475
|
+
//
|
|
476
|
+
// Only the INITIALIZER is that function. A computed key (`[incomingKey]:
|
|
477
|
+
// T`) is evaluated by ClassDefinitionEvaluation itself, in the class
|
|
478
|
+
// body's scope, before any instance exists; attributing its reference to
|
|
479
|
+
// the field function handed a field WITHOUT an initializer -- for which
|
|
480
|
+
// `class-lifecycle.ts` correctly allocates no function object -- an
|
|
481
|
+
// operation owned by a function that has no allocation, and ABI
|
|
482
|
+
// projection refused the whole program ("no function-object allocation
|
|
483
|
+
// published a callable carrier"). `@hono/node-server`'s adapted
|
|
484
|
+
// `LightRequest` declares exactly such a field. The key's owner is
|
|
485
|
+
// whatever owns the class body, found by continuing the walk.
|
|
486
|
+
if (ts.isPropertyDeclaration(current)) {
|
|
487
|
+
if (current.initializer !== undefined && isWithin(node, current.initializer)) {
|
|
488
|
+
return { kind: 'function', functionId: identities.functionIdOf(current, path) };
|
|
489
|
+
}
|
|
490
|
+
current = current.parent;
|
|
491
|
+
continue;
|
|
492
|
+
}
|
|
493
|
+
// A static block executes in its own context too, and collapsing it into
|
|
494
|
+
// the class body or the module body would lose the order in which class
|
|
495
|
+
// evaluation runs it.
|
|
496
|
+
if (ts.isClassStaticBlockDeclaration(current)) {
|
|
497
|
+
const id = regionId(identities.declarationIdOf(current, path), 'static-block');
|
|
498
|
+
if (!regions.has(id)) {
|
|
499
|
+
regions.set(id, { id, role: 'static-block', bodyNode: identities.nodeIdOf(current, path), caller: null });
|
|
500
|
+
}
|
|
501
|
+
return { kind: 'region', regionId: id };
|
|
502
|
+
}
|
|
503
|
+
current = current.parent;
|
|
504
|
+
}
|
|
505
|
+
const file = node.getSourceFile();
|
|
506
|
+
const id = regionId(identities.nodeIdOf(file), 'module-body');
|
|
507
|
+
if (!regions.has(id))
|
|
508
|
+
regions.set(id, { id, role: 'module-body', bodyNode: identities.nodeIdOf(file), caller: null });
|
|
509
|
+
return { kind: 'region', regionId: id };
|
|
510
|
+
};
|
|
511
|
+
const callerKey = (caller) => (caller.kind === 'function' ? `fn|${caller.functionId}` : `region|${caller.regionId}`);
|
|
512
|
+
export const censusProgram = (files, identities, reachable, specializations, namespacePaths) => {
|
|
513
|
+
const candidates = [];
|
|
514
|
+
const regions = new Map();
|
|
515
|
+
const ordinals = new Map();
|
|
516
|
+
const nextOrdinal = (caller) => {
|
|
517
|
+
const key = callerKey(caller);
|
|
518
|
+
const ordinal = ordinals.get(key) ?? 0;
|
|
519
|
+
ordinals.set(key, ordinal + 1);
|
|
520
|
+
return ordinal;
|
|
521
|
+
};
|
|
522
|
+
for (const file of files) {
|
|
523
|
+
/**
|
|
524
|
+
* Census this node's own candidates.
|
|
525
|
+
*
|
|
526
|
+
* `callerPath` is the path of the scope that *holds* this node, which is
|
|
527
|
+
* not always the path its children are walked under: a generic declaration
|
|
528
|
+
* is held by an unspecialized scope while everything inside it belongs to
|
|
529
|
+
* one copy.
|
|
530
|
+
*/
|
|
531
|
+
const record = (node, callerPath, path) => {
|
|
532
|
+
const families = familiesOf(node, namespacePaths);
|
|
533
|
+
if (families.length === 0)
|
|
534
|
+
return;
|
|
535
|
+
const caller = callerOf(node, identities, regions, callerPath);
|
|
536
|
+
const owner = ts.isClassDeclaration(node) ? node : ts.isClassDeclaration(node.parent) ? node.parent : null;
|
|
537
|
+
for (const family of families) {
|
|
538
|
+
candidates.push({
|
|
539
|
+
node,
|
|
540
|
+
id: identities.nodeIdOf(node, path),
|
|
541
|
+
family,
|
|
542
|
+
caller,
|
|
543
|
+
...(owner && reachable.classIsLayoutOnly(owner) ? { classLayoutOnly: true } : {}),
|
|
544
|
+
evaluationOrdinal: nextOrdinal(caller),
|
|
545
|
+
specialization: path
|
|
546
|
+
});
|
|
547
|
+
}
|
|
548
|
+
};
|
|
549
|
+
const visit = (node, path) => {
|
|
550
|
+
// Ambient module/global blocks describe host values; none of their children execute.
|
|
551
|
+
if (ts.isModuleDeclaration(node) && isAmbientDeclaration(node))
|
|
552
|
+
return;
|
|
553
|
+
// A type annotation contains no operations: nothing in it evaluates. The
|
|
554
|
+
// one exception is a heritage clause, whose expression really is evaluated
|
|
555
|
+
// at class definition time, so it is descended into rather than skipped.
|
|
556
|
+
if (ts.isTypeNode(node) && !ts.isExpressionWithTypeArguments(node))
|
|
557
|
+
return;
|
|
558
|
+
// An overload signature -- a bodiless, non-abstract function or method
|
|
559
|
+
// -- is not a runtime event (`familyOf` already answers `null` for the
|
|
560
|
+
// node itself), and nothing UNDER it evaluates either: its parameters
|
|
561
|
+
// bind nothing, and a computed name such as `[Symbol.iterator]` is
|
|
562
|
+
// evaluated once, for the implementation that follows. Descending into
|
|
563
|
+
// it minted that key's `Symbol.iterator` read as an operation whose
|
|
564
|
+
// caller was the signature's own function id -- a function no
|
|
565
|
+
// allocation ever publishes a carrier for -- and `projection/abi.ts`
|
|
566
|
+
// refused the program at the signature with "no function-object
|
|
567
|
+
// allocation published a callable carrier" (node-compat's
|
|
568
|
+
// URLSearchParams `*[Symbol.iterator]` overload pair;
|
|
569
|
+
// `test/runtime/class-symbol-iterator-generator-overload.ts`). A
|
|
570
|
+
// named overload had no child that evaluates, which is why it never
|
|
571
|
+
// showed the same refusal.
|
|
572
|
+
if (isFunctionLikeWithoutBody(node) && !isAbstractClassMember(node))
|
|
573
|
+
return;
|
|
574
|
+
// A static method nothing in the program NAMES. The class around it is
|
|
575
|
+
// live -- its layout is what a live reference reaches -- but a body only
|
|
576
|
+
// `C.m` can reach, with no `C.m` anywhere, is dead exactly as an
|
|
577
|
+
// unreferenced top-level function is. `reachability.ts` is the one
|
|
578
|
+
// authority on that, asked here for the same reason `statementsOf` is
|
|
579
|
+
// asked below: so there is one answer and not two.
|
|
580
|
+
if (reachable.memberIsPruned(node))
|
|
581
|
+
return;
|
|
582
|
+
// Monomorphization, as the census performs it: a generic declaration's
|
|
583
|
+
// subtree is walked once per instantiation the program makes, with that
|
|
584
|
+
// instantiation's ordinal pushed onto the path. Every identity minted
|
|
585
|
+
// underneath is therefore per copy, which is what makes `T` answerable --
|
|
586
|
+
// there is no longer one body with a hole in it, there are as many bodies
|
|
587
|
+
// as the program has instantiations, each with a type in that position.
|
|
588
|
+
//
|
|
589
|
+
// A generic the program never instantiates is walked *not at all*. Its
|
|
590
|
+
// body has no meaning until something fills the hole, and emitting one
|
|
591
|
+
// copy with the hole still open is exactly the state this removes.
|
|
592
|
+
//
|
|
593
|
+
// Which node carries the copies is `genericSubjectOf`'s question, not
|
|
594
|
+
// this walk's: `const f = <T>(...) => ...` keys them on the arrow while
|
|
595
|
+
// the declaration naming it is what has to be recorded per copy, so the
|
|
596
|
+
// fork is hoisted here and the arrow reached as a child finds itself
|
|
597
|
+
// already inside its own copy. Forking it again would push a second entry
|
|
598
|
+
// for the same owner and mint identities under a path no use site names.
|
|
599
|
+
const holder = path[path.length - 1];
|
|
600
|
+
if (holder !== undefined && holder.owner === node) {
|
|
601
|
+
forEachEvaluationChild(node, (child) => visit(child, path));
|
|
602
|
+
record(node, path, path);
|
|
603
|
+
return;
|
|
604
|
+
}
|
|
605
|
+
const subject = identities.genericSubjectOf(node);
|
|
606
|
+
const copies = specializations.specializationsOf(subject);
|
|
607
|
+
if (copies.length > 0) {
|
|
608
|
+
for (const copy of copies) {
|
|
609
|
+
const inner = [...path, { owner: subject, ordinal: copy.ordinal }];
|
|
610
|
+
// Children first, then this node: the ordinal is an *evaluation*
|
|
611
|
+
// index, and the generic's own allocation evaluates after whatever it
|
|
612
|
+
// encloses is laid out.
|
|
613
|
+
forEachEvaluationChild(node, (child) => visit(child, inner));
|
|
614
|
+
record(node, path, inner);
|
|
615
|
+
}
|
|
616
|
+
return;
|
|
617
|
+
}
|
|
618
|
+
// The other half of that rule, and the case a framework barrel makes
|
|
619
|
+
// ordinary: `mount<RootComponent extends Component>` is in every app's
|
|
620
|
+
// module graph, and the apps that never call it instantiate it never.
|
|
621
|
+
// Walking it once anyway publishes a function-object allocation whose
|
|
622
|
+
// carrier *is* the open hole, which representation then refuses -- one
|
|
623
|
+
// uncalled generic in a shared module denied a whole program its
|
|
624
|
+
// certificate. There is no such function in this program, so nothing is
|
|
625
|
+
// recorded for it.
|
|
626
|
+
if (specializations.isGeneric(subject))
|
|
627
|
+
return;
|
|
628
|
+
// Children first, then this node: the ordinal is an *evaluation* index,
|
|
629
|
+
// and an expression's operands evaluate before the expression does. A
|
|
630
|
+
// pre-order index says the opposite, and where the graph leaves two
|
|
631
|
+
// operations unordered -- an assignment's store and whatever consumes the
|
|
632
|
+
// assignment's value, say -- the tie would break in favour of the
|
|
633
|
+
// consumer, scheduling a store after the `return` that reads it. Sibling
|
|
634
|
+
// order is preserved either way, so statements still run in source order.
|
|
635
|
+
// RequireObjectCoercible runs before any assignment target is evaluated.
|
|
636
|
+
// Each element then publishes its own extraction and write in order.
|
|
637
|
+
if (ts.isObjectLiteralExpression(node) && isAssignmentPattern(node)) {
|
|
638
|
+
record(node, path, path);
|
|
639
|
+
forEachEvaluationChild(node, (child) => visit(child, path));
|
|
640
|
+
return;
|
|
641
|
+
}
|
|
642
|
+
// GetIterator runs once, up front, before any element's target
|
|
643
|
+
// reference is resolved or its default evaluated -- the array-pattern
|
|
644
|
+
// twin of the object-pattern rule immediately above.
|
|
645
|
+
if (ts.isArrayLiteralExpression(node) && isAssignmentPattern(node)) {
|
|
646
|
+
record(node, path, path);
|
|
647
|
+
forEachEvaluationChild(node, (child) => visit(child, path));
|
|
648
|
+
return;
|
|
649
|
+
}
|
|
650
|
+
forEachEvaluationChild(node, (child) => visit(child, path));
|
|
651
|
+
record(node, path, path);
|
|
652
|
+
};
|
|
653
|
+
// The statements this program reaches, not the file: a declaration nothing
|
|
654
|
+
// reaches has no meaning to census, exactly as an uninstantiated generic
|
|
655
|
+
// above has none. `reachability.ts` is the one authority on which those
|
|
656
|
+
// are, and every other whole-program walk asks the same one.
|
|
657
|
+
for (const node of reachable.statementsOf(file))
|
|
658
|
+
visit(node, rootSpecialization);
|
|
659
|
+
}
|
|
660
|
+
const byFamily = new Map();
|
|
661
|
+
for (const candidate of candidates) {
|
|
662
|
+
const bucket = byFamily.get(candidate.family) ?? [];
|
|
663
|
+
bucket.push(candidate);
|
|
664
|
+
byFamily.set(candidate.family, bucket);
|
|
665
|
+
}
|
|
666
|
+
return { candidates, regions, byFamily };
|
|
667
|
+
};
|