@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.
Files changed (966) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +149 -0
  3. package/dist/cli-analyze.d.ts +1 -0
  4. package/dist/cli-analyze.js +61 -0
  5. package/dist/cli-coverage.d.ts +1 -0
  6. package/dist/cli-coverage.js +329 -0
  7. package/dist/cli-emit.d.ts +10 -0
  8. package/dist/cli-emit.js +398 -0
  9. package/dist/cli-module-graph.d.ts +18 -0
  10. package/dist/cli-module-graph.js +123 -0
  11. package/dist/cli-package-source.d.ts +5 -0
  12. package/dist/cli-package-source.js +116 -0
  13. package/dist/cli-project.d.ts +2 -0
  14. package/dist/cli-project.js +60 -0
  15. package/dist/cli.d.ts +2 -0
  16. package/dist/cli.js +199 -0
  17. package/dist/compiler.d.ts +228 -0
  18. package/dist/compiler.js +1029 -0
  19. package/dist/conversion/algebra.d.ts +218 -0
  20. package/dist/conversion/algebra.js +155 -0
  21. package/dist/conversion/build.d.ts +67 -0
  22. package/dist/conversion/build.js +1378 -0
  23. package/dist/conversion/derive.d.ts +37 -0
  24. package/dist/conversion/derive.js +260 -0
  25. package/dist/conversion/graph-validation.d.ts +8 -0
  26. package/dist/conversion/graph-validation.js +97 -0
  27. package/dist/conversion/native-callable-adapter.d.ts +13 -0
  28. package/dist/conversion/native-callable-adapter.js +53 -0
  29. package/dist/conversion/native-class-reference.d.ts +12 -0
  30. package/dist/conversion/native-class-reference.js +39 -0
  31. package/dist/conversion/native-payload-transport.d.ts +25 -0
  32. package/dist/conversion/native-payload-transport.js +33 -0
  33. package/dist/conversion/native-selection.d.ts +49 -0
  34. package/dist/conversion/native-selection.js +135 -0
  35. package/dist/conversion/native-sum.d.ts +42 -0
  36. package/dist/conversion/native-sum.js +115 -0
  37. package/dist/conversion/nodes.d.ts +55 -0
  38. package/dist/conversion/nodes.js +91 -0
  39. package/dist/conversion/operand-view.d.ts +14 -0
  40. package/dist/conversion/operand-view.js +20 -0
  41. package/dist/conversion/record-view.d.ts +157 -0
  42. package/dist/conversion/record-view.js +273 -0
  43. package/dist/conversion/registry.d.ts +217 -0
  44. package/dist/conversion/registry.js +1 -0
  45. package/dist/diagnostics/model.d.ts +76 -0
  46. package/dist/diagnostics/model.js +60 -0
  47. package/dist/diagnostics/sweep.d.ts +31 -0
  48. package/dist/diagnostics/sweep.js +112 -0
  49. package/dist/identity/ids.d.ts +179 -0
  50. package/dist/identity/ids.js +212 -0
  51. package/dist/ir/absent-class-arm.d.ts +48 -0
  52. package/dist/ir/absent-class-arm.js +157 -0
  53. package/dist/ir/borrow-effects.d.ts +23 -0
  54. package/dist/ir/borrow-effects.js +151 -0
  55. package/dist/ir/borrowed-call-arguments.d.ts +40 -0
  56. package/dist/ir/borrowed-call-arguments.js +117 -0
  57. package/dist/ir/build.d.ts +168 -0
  58. package/dist/ir/build.js +459 -0
  59. package/dist/ir/call-dispatch.d.ts +38 -0
  60. package/dist/ir/call-dispatch.js +502 -0
  61. package/dist/ir/call-entry.d.ts +142 -0
  62. package/dist/ir/call-entry.js +386 -0
  63. package/dist/ir/callable-class-flow.d.ts +27 -0
  64. package/dist/ir/callable-class-flow.js +1386 -0
  65. package/dist/ir/callable-field-slots.d.ts +22 -0
  66. package/dist/ir/callable-field-slots.js +166 -0
  67. package/dist/ir/callable-identity-demand.d.ts +52 -0
  68. package/dist/ir/callable-identity-demand.js +460 -0
  69. package/dist/ir/callable-member-candidates.d.ts +9 -0
  70. package/dist/ir/callable-member-candidates.js +39 -0
  71. package/dist/ir/callable-records.d.ts +21 -0
  72. package/dist/ir/callable-records.js +411 -0
  73. package/dist/ir/captures.d.ts +26 -0
  74. package/dist/ir/captures.js +335 -0
  75. package/dist/ir/certificate.d.ts +45 -0
  76. package/dist/ir/certificate.js +47 -0
  77. package/dist/ir/certify/carrier-keys.d.ts +73 -0
  78. package/dist/ir/certify/carrier-keys.js +221 -0
  79. package/dist/ir/certify/function-source.d.ts +4 -0
  80. package/dist/ir/certify/function-source.js +28 -0
  81. package/dist/ir/certify/has-property-key.d.ts +88 -0
  82. package/dist/ir/certify/has-property-key.js +116 -0
  83. package/dist/ir/certify/instanceof-key.d.ts +24 -0
  84. package/dist/ir/certify/instanceof-key.js +35 -0
  85. package/dist/ir/certify/property-access-keys.d.ts +172 -0
  86. package/dist/ir/certify/property-access-keys.js +291 -0
  87. package/dist/ir/certify/property-access.d.ts +3 -0
  88. package/dist/ir/certify/property-access.js +597 -0
  89. package/dist/ir/certify/runtime-helper.d.ts +3 -0
  90. package/dist/ir/certify/runtime-helper.js +326 -0
  91. package/dist/ir/certify/typeof-operand.d.ts +14 -0
  92. package/dist/ir/certify/typeof-operand.js +16 -0
  93. package/dist/ir/certify.d.ts +123 -0
  94. package/dist/ir/certify.js +481 -0
  95. package/dist/ir/class-evaluation.d.ts +26 -0
  96. package/dist/ir/class-evaluation.js +50 -0
  97. package/dist/ir/class-static-fields.d.ts +60 -0
  98. package/dist/ir/class-static-fields.js +108 -0
  99. package/dist/ir/construct-entry.d.ts +26 -0
  100. package/dist/ir/construct-entry.js +117 -0
  101. package/dist/ir/dead-values.d.ts +90 -0
  102. package/dist/ir/dead-values.js +184 -0
  103. package/dist/ir/deferral.d.ts +99 -0
  104. package/dist/ir/deferral.js +409 -0
  105. package/dist/ir/dense-loops.d.ts +230 -0
  106. package/dist/ir/dense-loops.js +697 -0
  107. package/dist/ir/dominance.d.ts +82 -0
  108. package/dist/ir/dominance.js +268 -0
  109. package/dist/ir/emission-representations.d.ts +71 -0
  110. package/dist/ir/emission-representations.js +350 -0
  111. package/dist/ir/facts.d.ts +218 -0
  112. package/dist/ir/facts.js +181 -0
  113. package/dist/ir/fixed-data-definition.d.ts +19 -0
  114. package/dist/ir/fixed-data-definition.js +49 -0
  115. package/dist/ir/generator-split.d.ts +38 -0
  116. package/dist/ir/generator-split.js +329 -0
  117. package/dist/ir/hoist.d.ts +55 -0
  118. package/dist/ir/hoist.js +375 -0
  119. package/dist/ir/instantiation.d.ts +61 -0
  120. package/dist/ir/instantiation.js +137 -0
  121. package/dist/ir/integer-storage.d.ts +170 -0
  122. package/dist/ir/integer-storage.js +822 -0
  123. package/dist/ir/integers.d.ts +161 -0
  124. package/dist/ir/integers.js +539 -0
  125. package/dist/ir/integrity-restrictions.d.ts +50 -0
  126. package/dist/ir/integrity-restrictions.js +118 -0
  127. package/dist/ir/local-iterators.d.ts +4 -0
  128. package/dist/ir/local-iterators.js +27 -0
  129. package/dist/ir/lower-allocation.d.ts +4 -0
  130. package/dist/ir/lower-allocation.js +325 -0
  131. package/dist/ir/lower-completion.d.ts +15 -0
  132. package/dist/ir/lower-completion.js +25 -0
  133. package/dist/ir/lower-destructuring.d.ts +5 -0
  134. package/dist/ir/lower-destructuring.js +693 -0
  135. package/dist/ir/lower-element.d.ts +29 -0
  136. package/dist/ir/lower-element.js +111 -0
  137. package/dist/ir/lower-exceptions.d.ts +47 -0
  138. package/dist/ir/lower-exceptions.js +92 -0
  139. package/dist/ir/lower-flow.d.ts +137 -0
  140. package/dist/ir/lower-flow.js +600 -0
  141. package/dist/ir/lower-graph.d.ts +218 -0
  142. package/dist/ir/lower-graph.js +687 -0
  143. package/dist/ir/lower-invocation.d.ts +4 -0
  144. package/dist/ir/lower-invocation.js +514 -0
  145. package/dist/ir/lower-narrow.d.ts +53 -0
  146. package/dist/ir/lower-narrow.js +320 -0
  147. package/dist/ir/lower-operands.d.ts +272 -0
  148. package/dist/ir/lower-operands.js +461 -0
  149. package/dist/ir/lower-property.d.ts +21 -0
  150. package/dist/ir/lower-property.js +132 -0
  151. package/dist/ir/lower-protocol.d.ts +11 -0
  152. package/dist/ir/lower-protocol.js +118 -0
  153. package/dist/ir/lower-short-circuit.d.ts +41 -0
  154. package/dist/ir/lower-short-circuit.js +63 -0
  155. package/dist/ir/lower.d.ts +82 -0
  156. package/dist/ir/lower.js +1346 -0
  157. package/dist/ir/model.d.ts +1474 -0
  158. package/dist/ir/model.js +6 -0
  159. package/dist/ir/native-absent-property.d.ts +3 -0
  160. package/dist/ir/native-absent-property.js +13 -0
  161. package/dist/ir/native-array-transport.d.ts +7 -0
  162. package/dist/ir/native-array-transport.js +46 -0
  163. package/dist/ir/native-callable-bind.d.ts +9 -0
  164. package/dist/ir/native-callable-bind.js +30 -0
  165. package/dist/ir/native-carrier-predicate.d.ts +34 -0
  166. package/dist/ir/native-carrier-predicate.js +49 -0
  167. package/dist/ir/native-class-accessor.d.ts +18 -0
  168. package/dist/ir/native-class-accessor.js +52 -0
  169. package/dist/ir/native-class-construction.d.ts +16 -0
  170. package/dist/ir/native-class-construction.js +71 -0
  171. package/dist/ir/native-class-initialization.d.ts +15 -0
  172. package/dist/ir/native-class-initialization.js +56 -0
  173. package/dist/ir/native-class-origins.d.ts +13 -0
  174. package/dist/ir/native-class-origins.js +237 -0
  175. package/dist/ir/native-dictionary-transport.d.ts +6 -0
  176. package/dist/ir/native-dictionary-transport.js +37 -0
  177. package/dist/ir/native-enumeration.d.ts +14 -0
  178. package/dist/ir/native-enumeration.js +26 -0
  179. package/dist/ir/native-equality.d.ts +10 -0
  180. package/dist/ir/native-equality.js +18 -0
  181. package/dist/ir/native-field-owner.d.ts +37 -0
  182. package/dist/ir/native-field-owner.js +183 -0
  183. package/dist/ir/native-fixed-layout.d.ts +41 -0
  184. package/dist/ir/native-fixed-layout.js +232 -0
  185. package/dist/ir/native-host-construction.d.ts +53 -0
  186. package/dist/ir/native-host-construction.js +62 -0
  187. package/dist/ir/native-key-query.d.ts +4 -0
  188. package/dist/ir/native-key-query.js +38 -0
  189. package/dist/ir/native-merge-transport.d.ts +25 -0
  190. package/dist/ir/native-merge-transport.js +71 -0
  191. package/dist/ir/native-record-index-transport.d.ts +11 -0
  192. package/dist/ir/native-record-index-transport.js +34 -0
  193. package/dist/ir/native-record-index.d.ts +12 -0
  194. package/dist/ir/native-record-index.js +27 -0
  195. package/dist/ir/native-reflect-field.d.ts +5 -0
  196. package/dist/ir/native-reflect-field.js +33 -0
  197. package/dist/ir/native-sequence-transport.d.ts +7 -0
  198. package/dist/ir/native-sequence-transport.js +53 -0
  199. package/dist/ir/numeric-intrinsics.d.ts +13 -0
  200. package/dist/ir/numeric-intrinsics.js +57 -0
  201. package/dist/ir/object-value-conversions.d.ts +20 -0
  202. package/dist/ir/object-value-conversions.js +50 -0
  203. package/dist/ir/physical-class-reflection.d.ts +9 -0
  204. package/dist/ir/physical-class-reflection.js +57 -0
  205. package/dist/ir/presence-proof.d.ts +42 -0
  206. package/dist/ir/presence-proof.js +490 -0
  207. package/dist/ir/program-facts.d.ts +106 -0
  208. package/dist/ir/program-facts.js +319 -0
  209. package/dist/ir/proven-branches.d.ts +16 -0
  210. package/dist/ir/proven-branches.js +219 -0
  211. package/dist/ir/queries.d.ts +41 -0
  212. package/dist/ir/queries.js +213 -0
  213. package/dist/ir/reflection-demand.d.ts +64 -0
  214. package/dist/ir/reflection-demand.js +1394 -0
  215. package/dist/ir/refusal.d.ts +43 -0
  216. package/dist/ir/refusal.js +28 -0
  217. package/dist/ir/shake.d.ts +37 -0
  218. package/dist/ir/shake.js +1078 -0
  219. package/dist/ir/static-callables.d.ts +11 -0
  220. package/dist/ir/static-callables.js +163 -0
  221. package/dist/ir/string-layout-reuse.d.ts +13 -0
  222. package/dist/ir/string-layout-reuse.js +39 -0
  223. package/dist/ir/string-length-reuse.d.ts +8 -0
  224. package/dist/ir/string-length-reuse.js +47 -0
  225. package/dist/ir/transfer.d.ts +78 -0
  226. package/dist/ir/transfer.js +270 -0
  227. package/dist/ir/type-query-results.d.ts +25 -0
  228. package/dist/ir/type-query-results.js +96 -0
  229. package/dist/ir/typed-property-access.d.ts +100 -0
  230. package/dist/ir/typed-property-access.js +161 -0
  231. package/dist/ir/verify.d.ts +19 -0
  232. package/dist/ir/verify.js +355 -0
  233. package/dist/plugins/apple/constructors.d.ts +112 -0
  234. package/dist/plugins/apple/constructors.js +217 -0
  235. package/dist/plugins/apple/host.d.ts +181 -0
  236. package/dist/plugins/apple/host.js +262 -0
  237. package/dist/plugins/apple/jsx.d.ts +2 -0
  238. package/dist/plugins/apple/jsx.js +293 -0
  239. package/dist/plugins/apple/members.d.ts +16 -0
  240. package/dist/plugins/apple/members.js +190 -0
  241. package/dist/plugins/apple/plugin.d.ts +2 -0
  242. package/dist/plugins/apple/plugin.js +156 -0
  243. package/dist/plugins/gea/component-classes.d.ts +25 -0
  244. package/dist/plugins/gea/component-classes.js +162 -0
  245. package/dist/plugins/gea/component-inline.d.ts +13 -0
  246. package/dist/plugins/gea/component-inline.js +532 -0
  247. package/dist/plugins/gea/constructors.d.ts +23 -0
  248. package/dist/plugins/gea/constructors.js +100 -0
  249. package/dist/plugins/gea/contract.d.ts +150 -0
  250. package/dist/plugins/gea/contract.js +195 -0
  251. package/dist/plugins/gea/element-ref.d.ts +31 -0
  252. package/dist/plugins/gea/element-ref.js +45 -0
  253. package/dist/plugins/gea/host.d.ts +520 -0
  254. package/dist/plugins/gea/host.js +762 -0
  255. package/dist/plugins/gea/lower.d.ts +6 -0
  256. package/dist/plugins/gea/lower.js +195 -0
  257. package/dist/plugins/gea/members.d.ts +22 -0
  258. package/dist/plugins/gea/members.js +221 -0
  259. package/dist/plugins/gea/plugin.d.ts +22 -0
  260. package/dist/plugins/gea/plugin.js +307 -0
  261. package/dist/plugins/gea/prelude.d.ts +78 -0
  262. package/dist/plugins/gea/prelude.js +153 -0
  263. package/dist/plugins/gea/producer.d.ts +5 -0
  264. package/dist/plugins/gea/producer.js +52 -0
  265. package/dist/plugins/gea/reactive-slots.d.ts +49 -0
  266. package/dist/plugins/gea/reactive-slots.js +578 -0
  267. package/dist/plugins/gea/render-bridge.d.ts +6 -0
  268. package/dist/plugins/gea/render-bridge.js +281 -0
  269. package/dist/plugins/gea/slots.d.ts +15 -0
  270. package/dist/plugins/gea/slots.js +36 -0
  271. package/dist/plugins/gea/template-analysis.d.ts +151 -0
  272. package/dist/plugins/gea/template-analysis.js +346 -0
  273. package/dist/plugins/gea/user-agent-styles.d.ts +9 -0
  274. package/dist/plugins/gea/user-agent-styles.js +94 -0
  275. package/dist/plugins/installed.d.ts +19 -0
  276. package/dist/plugins/installed.js +21 -0
  277. package/dist/plugins/load.d.ts +7 -0
  278. package/dist/plugins/load.js +207 -0
  279. package/dist/plugins/model.d.ts +735 -0
  280. package/dist/plugins/model.js +47 -0
  281. package/dist/plugins/webgl/host.d.ts +77 -0
  282. package/dist/plugins/webgl/host.js +162 -0
  283. package/dist/plugins/webgl/plugin.d.ts +40 -0
  284. package/dist/plugins/webgl/plugin.js +99 -0
  285. package/dist/preflight/obligations.d.ts +206 -0
  286. package/dist/preflight/obligations.js +36 -0
  287. package/dist/preflight/report.d.ts +20 -0
  288. package/dist/preflight/report.js +61 -0
  289. package/dist/preflight/run.d.ts +39 -0
  290. package/dist/preflight/run.js +403 -0
  291. package/dist/project-preparation.d.ts +33 -0
  292. package/dist/project-preparation.js +314 -0
  293. package/dist/projection/abi.d.ts +82 -0
  294. package/dist/projection/abi.js +349 -0
  295. package/dist/projection/apply-arguments.d.ts +12 -0
  296. package/dist/projection/apply-arguments.js +20 -0
  297. package/dist/projection/bindings.d.ts +250 -0
  298. package/dist/projection/bindings.js +340 -0
  299. package/dist/projection/callee.d.ts +196 -0
  300. package/dist/projection/callee.js +444 -0
  301. package/dist/projection/class-property-presence.d.ts +28 -0
  302. package/dist/projection/class-property-presence.js +58 -0
  303. package/dist/projection/class-prototype.d.ts +5 -0
  304. package/dist/projection/class-prototype.js +23 -0
  305. package/dist/projection/class-storage.d.ts +26 -0
  306. package/dist/projection/class-storage.js +236 -0
  307. package/dist/projection/classes.d.ts +283 -0
  308. package/dist/projection/classes.js +944 -0
  309. package/dist/projection/coercions.d.ts +20 -0
  310. package/dist/projection/coercions.js +33 -0
  311. package/dist/projection/dispatch.d.ts +167 -0
  312. package/dist/projection/dispatch.js +379 -0
  313. package/dist/projection/fields.d.ts +123 -0
  314. package/dist/projection/fields.js +383 -0
  315. package/dist/projection/instance-test.d.ts +78 -0
  316. package/dist/projection/instance-test.js +156 -0
  317. package/dist/projection/slots.d.ts +146 -0
  318. package/dist/projection/slots.js +663 -0
  319. package/dist/projection/synthesized-abi.d.ts +61 -0
  320. package/dist/projection/synthesized-abi.js +94 -0
  321. package/dist/representation/array-index.d.ts +14 -0
  322. package/dist/representation/array-index.js +17 -0
  323. package/dist/representation/callable-object.d.ts +3 -0
  324. package/dist/representation/callable-object.js +6 -0
  325. package/dist/representation/collections.d.ts +84 -0
  326. package/dist/representation/collections.js +139 -0
  327. package/dist/representation/derive.d.ts +159 -0
  328. package/dist/representation/derive.js +2546 -0
  329. package/dist/representation/difference.d.ts +30 -0
  330. package/dist/representation/difference.js +240 -0
  331. package/dist/representation/field-descriptor-policy.d.ts +19 -0
  332. package/dist/representation/field-descriptor-policy.js +39 -0
  333. package/dist/representation/function-constructor.d.ts +13 -0
  334. package/dist/representation/function-constructor.js +9 -0
  335. package/dist/representation/host-abi.d.ts +32 -0
  336. package/dist/representation/host-abi.js +97 -0
  337. package/dist/representation/host-templates.d.ts +67 -0
  338. package/dist/representation/host-templates.js +94 -0
  339. package/dist/representation/intersection.d.ts +84 -0
  340. package/dist/representation/intersection.js +149 -0
  341. package/dist/representation/literal-destination.d.ts +43 -0
  342. package/dist/representation/literal-destination.js +133 -0
  343. package/dist/representation/merge.d.ts +18 -0
  344. package/dist/representation/merge.js +83 -0
  345. package/dist/representation/model.d.ts +1160 -0
  346. package/dist/representation/model.js +1019 -0
  347. package/dist/representation/numeric-index.d.ts +13 -0
  348. package/dist/representation/numeric-index.js +29 -0
  349. package/dist/representation/object-shape.d.ts +109 -0
  350. package/dist/representation/object-shape.js +123 -0
  351. package/dist/representation/optional.d.ts +12 -0
  352. package/dist/representation/optional.js +87 -0
  353. package/dist/representation/plan.d.ts +60 -0
  354. package/dist/representation/plan.js +78 -0
  355. package/dist/representation/policies.d.ts +589 -0
  356. package/dist/representation/policies.js +107 -0
  357. package/dist/representation/primitive-domain.d.ts +1 -0
  358. package/dist/representation/primitive-domain.js +1 -0
  359. package/dist/representation/primitives.d.ts +44 -0
  360. package/dist/representation/primitives.js +78 -0
  361. package/dist/representation/publish.d.ts +49 -0
  362. package/dist/representation/publish.js +648 -0
  363. package/dist/representation/record-fields.d.ts +96 -0
  364. package/dist/representation/record-fields.js +116 -0
  365. package/dist/representation/template-object.d.ts +11 -0
  366. package/dist/representation/template-object.js +26 -0
  367. package/dist/representation/union.d.ts +30 -0
  368. package/dist/representation/union.js +324 -0
  369. package/dist/representation/value-records.d.ts +3 -0
  370. package/dist/representation/value-records.js +307 -0
  371. package/dist/representation/verify.d.ts +17 -0
  372. package/dist/representation/verify.js +221 -0
  373. package/dist/semantics/alias-this-field-declaration-transform.d.ts +4 -0
  374. package/dist/semantics/alias-this-field-declaration-transform.js +207 -0
  375. package/dist/semantics/ambient-type-realization-transform.d.ts +62 -0
  376. package/dist/semantics/ambient-type-realization-transform.js +168 -0
  377. package/dist/semantics/ambient.d.ts +24 -0
  378. package/dist/semantics/ambient.js +119 -0
  379. package/dist/semantics/borrowed-builtin-call-bind-source-transform.d.ts +4 -0
  380. package/dist/semantics/borrowed-builtin-call-bind-source-transform.js +341 -0
  381. package/dist/semantics/callable-origins.d.ts +46 -0
  382. package/dist/semantics/callable-origins.js +354 -0
  383. package/dist/semantics/class-alias.d.ts +7 -0
  384. package/dist/semantics/class-alias.js +37 -0
  385. package/dist/semantics/class-heritage.d.ts +34 -0
  386. package/dist/semantics/class-heritage.js +104 -0
  387. package/dist/semantics/commonjs-wrapper.d.ts +69 -0
  388. package/dist/semantics/commonjs-wrapper.js +231 -0
  389. package/dist/semantics/constructor-slot-subclasses.d.ts +28 -0
  390. package/dist/semantics/constructor-slot-subclasses.js +112 -0
  391. package/dist/semantics/declaration-overlay-transform.d.ts +35 -0
  392. package/dist/semantics/declaration-overlay-transform.js +2157 -0
  393. package/dist/semantics/define-property-source-transform.d.ts +4 -0
  394. package/dist/semantics/define-property-source-transform.js +437 -0
  395. package/dist/semantics/diagnostic-source-preparation.d.ts +24 -0
  396. package/dist/semantics/diagnostic-source-preparation.js +82 -0
  397. package/dist/semantics/documentation-ranges.d.ts +22 -0
  398. package/dist/semantics/documentation-ranges.js +36 -0
  399. package/dist/semantics/dynamic-fallback.d.ts +86 -0
  400. package/dist/semantics/dynamic-fallback.js +249 -0
  401. package/dist/semantics/frontend-timing.d.ts +6 -0
  402. package/dist/semantics/frontend-timing.js +35 -0
  403. package/dist/semantics/frontend.d.ts +504 -0
  404. package/dist/semantics/frontend.js +1157 -0
  405. package/dist/semantics/host-declaration-provenance.d.ts +11 -0
  406. package/dist/semantics/host-declaration-provenance.js +18 -0
  407. package/dist/semantics/host-methods.d.ts +24 -0
  408. package/dist/semantics/host-methods.js +74 -0
  409. package/dist/semantics/host-protocols.d.ts +429 -0
  410. package/dist/semantics/host-protocols.js +1501 -0
  411. package/dist/semantics/inherited-accessor.d.ts +7 -0
  412. package/dist/semantics/inherited-accessor.js +48 -0
  413. package/dist/semantics/interface-families.d.ts +70 -0
  414. package/dist/semantics/interface-families.js +180 -0
  415. package/dist/semantics/interface-implementors.d.ts +53 -0
  416. package/dist/semantics/interface-implementors.js +87 -0
  417. package/dist/semantics/jsdoc-namepath-transform.d.ts +4 -0
  418. package/dist/semantics/jsdoc-namepath-transform.js +85 -0
  419. package/dist/semantics/model/coverage.d.ts +68 -0
  420. package/dist/semantics/model/coverage.js +73 -0
  421. package/dist/semantics/model/edges.d.ts +103 -0
  422. package/dist/semantics/model/edges.js +20 -0
  423. package/dist/semantics/model/graph.d.ts +55 -0
  424. package/dist/semantics/model/graph.js +129 -0
  425. package/dist/semantics/model/operands.d.ts +159 -0
  426. package/dist/semantics/model/operands.js +26 -0
  427. package/dist/semantics/model/operations.d.ts +496 -0
  428. package/dist/semantics/model/operations.js +2 -0
  429. package/dist/semantics/model/primitive-domain.d.ts +26 -0
  430. package/dist/semantics/model/primitive-domain.js +38 -0
  431. package/dist/semantics/model/selected-signature.d.ts +261 -0
  432. package/dist/semantics/model/selected-signature.js +55 -0
  433. package/dist/semantics/model/structural-type-table.d.ts +93 -0
  434. package/dist/semantics/model/structural-type-table.js +237 -0
  435. package/dist/semantics/model/structural-types.d.ts +367 -0
  436. package/dist/semantics/model/structural-types.js +200 -0
  437. package/dist/semantics/module-resolution.d.ts +23 -0
  438. package/dist/semantics/module-resolution.js +227 -0
  439. package/dist/semantics/new-callee-class-tag-source-transform.d.ts +4 -0
  440. package/dist/semantics/new-callee-class-tag-source-transform.js +64 -0
  441. package/dist/semantics/node-project.d.ts +13 -0
  442. package/dist/semantics/node-project.js +107 -0
  443. package/dist/semantics/node-source-hooks.d.ts +1 -0
  444. package/dist/semantics/node-source-hooks.js +63 -0
  445. package/dist/semantics/normalize/absent-globals.d.ts +143 -0
  446. package/dist/semantics/normalize/absent-globals.js +191 -0
  447. package/dist/semantics/normalize/arguments-objects.d.ts +43 -0
  448. package/dist/semantics/normalize/arguments-objects.js +60 -0
  449. package/dist/semantics/normalize/asserted-arm-absence.d.ts +28 -0
  450. package/dist/semantics/normalize/asserted-arm-absence.js +61 -0
  451. package/dist/semantics/normalize/assignment-patterns.d.ts +70 -0
  452. package/dist/semantics/normalize/assignment-patterns.js +147 -0
  453. package/dist/semantics/normalize/bag-absence.d.ts +8 -0
  454. package/dist/semantics/normalize/bag-absence.js +42 -0
  455. package/dist/semantics/normalize/binding-fixpoint.d.ts +36 -0
  456. package/dist/semantics/normalize/binding-fixpoint.js +140 -0
  457. package/dist/semantics/normalize/callback-parameter-contracts.d.ts +16 -0
  458. package/dist/semantics/normalize/callback-parameter-contracts.js +91 -0
  459. package/dist/semantics/normalize/cells/agreement.d.ts +46 -0
  460. package/dist/semantics/normalize/cells/agreement.js +34 -0
  461. package/dist/semantics/normalize/cells/candidates.d.ts +17 -0
  462. package/dist/semantics/normalize/cells/candidates.js +35 -0
  463. package/dist/semantics/normalize/cells/facts.d.ts +19 -0
  464. package/dist/semantics/normalize/cells/facts.js +90 -0
  465. package/dist/semantics/normalize/cells/index.d.ts +10 -0
  466. package/dist/semantics/normalize/cells/index.js +6 -0
  467. package/dist/semantics/normalize/cells/model.d.ts +98 -0
  468. package/dist/semantics/normalize/cells/model.js +2 -0
  469. package/dist/semantics/normalize/cells/policies/bag.d.ts +44 -0
  470. package/dist/semantics/normalize/cells/policies/bag.js +114 -0
  471. package/dist/semantics/normalize/cells/policies/collection.d.ts +42 -0
  472. package/dist/semantics/normalize/cells/policies/collection.js +218 -0
  473. package/dist/semantics/normalize/cells/policies/field.d.ts +28 -0
  474. package/dist/semantics/normalize/cells/policies/field.js +40 -0
  475. package/dist/semantics/normalize/cells/policies/index.d.ts +49 -0
  476. package/dist/semantics/normalize/cells/policies/index.js +58 -0
  477. package/dist/semantics/normalize/cells/policies/local.d.ts +18 -0
  478. package/dist/semantics/normalize/cells/policies/local.js +37 -0
  479. package/dist/semantics/normalize/cells/policies/parameter.d.ts +28 -0
  480. package/dist/semantics/normalize/cells/policies/parameter.js +39 -0
  481. package/dist/semantics/normalize/cells/policies/return.d.ts +26 -0
  482. package/dist/semantics/normalize/cells/policies/return.js +45 -0
  483. package/dist/semantics/normalize/cells/policies/shared.d.ts +33 -0
  484. package/dist/semantics/normalize/cells/policies/shared.js +45 -0
  485. package/dist/semantics/normalize/cells/policy.d.ts +72 -0
  486. package/dist/semantics/normalize/cells/policy.js +18 -0
  487. package/dist/semantics/normalize/cells/registry.d.ts +14 -0
  488. package/dist/semantics/normalize/cells/registry.js +17 -0
  489. package/dist/semantics/normalize/census-refusal.d.ts +62 -0
  490. package/dist/semantics/normalize/census-refusal.js +27 -0
  491. package/dist/semantics/normalize/census.d.ts +109 -0
  492. package/dist/semantics/normalize/census.js +667 -0
  493. package/dist/semantics/normalize/collection-bindings.d.ts +278 -0
  494. package/dist/semantics/normalize/collection-bindings.js +677 -0
  495. package/dist/semantics/normalize/commonjs-module-record.d.ts +21 -0
  496. package/dist/semantics/normalize/commonjs-module-record.js +289 -0
  497. package/dist/semantics/normalize/commonjs-require.d.ts +13 -0
  498. package/dist/semantics/normalize/commonjs-require.js +1527 -0
  499. package/dist/semantics/normalize/contribution.d.ts +63 -0
  500. package/dist/semantics/normalize/contribution.js +172 -0
  501. package/dist/semantics/normalize/dead-typeof-guards.d.ts +64 -0
  502. package/dist/semantics/normalize/dead-typeof-guards.js +152 -0
  503. package/dist/semantics/normalize/deferred-intrinsic-protocols.d.ts +57 -0
  504. package/dist/semantics/normalize/deferred-intrinsic-protocols.js +109 -0
  505. package/dist/semantics/normalize/derived-expression-type.d.ts +1070 -0
  506. package/dist/semantics/normalize/derived-expression-type.js +3463 -0
  507. package/dist/semantics/normalize/evaluation-order.d.ts +16 -0
  508. package/dist/semantics/normalize/evaluation-order.js +37 -0
  509. package/dist/semantics/normalize/field-bindings.d.ts +167 -0
  510. package/dist/semantics/normalize/field-bindings.js +1125 -0
  511. package/dist/semantics/normalize/flow/array-element-continuation.d.ts +27 -0
  512. package/dist/semantics/normalize/flow/array-element-continuation.js +1452 -0
  513. package/dist/semantics/normalize/flow/callable-array-origins.d.ts +42 -0
  514. package/dist/semantics/normalize/flow/callable-array-origins.js +318 -0
  515. package/dist/semantics/normalize/flow/callable-completions.d.ts +45 -0
  516. package/dist/semantics/normalize/flow/callable-completions.js +82 -0
  517. package/dist/semantics/normalize/flow/callable-reach.d.ts +237 -0
  518. package/dist/semantics/normalize/flow/callable-reach.js +7174 -0
  519. package/dist/semantics/normalize/flow/class-family-member-read.d.ts +16 -0
  520. package/dist/semantics/normalize/flow/class-family-member-read.js +992 -0
  521. package/dist/semantics/normalize/flow/collection-value-continuation.d.ts +21 -0
  522. package/dist/semantics/normalize/flow/collection-value-continuation.js +192 -0
  523. package/dist/semantics/normalize/flow/component-solver.d.ts +199 -0
  524. package/dist/semantics/normalize/flow/component-solver.js +587 -0
  525. package/dist/semantics/normalize/flow/computed-key-set.d.ts +84 -0
  526. package/dist/semantics/normalize/flow/computed-key-set.js +660 -0
  527. package/dist/semantics/normalize/flow/export-importers.d.ts +24 -0
  528. package/dist/semantics/normalize/flow/export-importers.js +269 -0
  529. package/dist/semantics/normalize/flow/host-text-sink.d.ts +25 -0
  530. package/dist/semantics/normalize/flow/host-text-sink.js +87 -0
  531. package/dist/semantics/normalize/flow/intrinsic-array-callback-frames.d.ts +84 -0
  532. package/dist/semantics/normalize/flow/intrinsic-array-callback-frames.js +180 -0
  533. package/dist/semantics/normalize/flow/intrinsic-data-definition.d.ts +35 -0
  534. package/dist/semantics/normalize/flow/intrinsic-data-definition.js +140 -0
  535. package/dist/semantics/normalize/flow/invocation-facts.d.ts +98 -0
  536. package/dist/semantics/normalize/flow/invocation-facts.js +257 -0
  537. package/dist/semantics/normalize/flow/member-call-forwarding.d.ts +122 -0
  538. package/dist/semantics/normalize/flow/member-call-forwarding.js +835 -0
  539. package/dist/semantics/normalize/flow/model.d.ts +357 -0
  540. package/dist/semantics/normalize/flow/model.js +177 -0
  541. package/dist/semantics/normalize/flow/native-collection-protocol.d.ts +24 -0
  542. package/dist/semantics/normalize/flow/native-collection-protocol.js +252 -0
  543. package/dist/semantics/normalize/flow/node-path-token.d.ts +3 -0
  544. package/dist/semantics/normalize/flow/node-path-token.js +53 -0
  545. package/dist/semantics/normalize/flow/object-binding-continuation.d.ts +11 -0
  546. package/dist/semantics/normalize/flow/object-binding-continuation.js +42 -0
  547. package/dist/semantics/normalize/flow/origin-authority.d.ts +56 -0
  548. package/dist/semantics/normalize/flow/origin-authority.js +2 -0
  549. package/dist/semantics/normalize/flow/owned-class-receivers.d.ts +35 -0
  550. package/dist/semantics/normalize/flow/owned-class-receivers.js +191 -0
  551. package/dist/semantics/normalize/flow/parameter-values.d.ts +27 -0
  552. package/dist/semantics/normalize/flow/parameter-values.js +251 -0
  553. package/dist/semantics/normalize/flow/proof-hypotheses.d.ts +66 -0
  554. package/dist/semantics/normalize/flow/proof-hypotheses.js +162 -0
  555. package/dist/semantics/normalize/flow/record-alias-closure.d.ts +27 -0
  556. package/dist/semantics/normalize/flow/record-alias-closure.js +298 -0
  557. package/dist/semantics/normalize/flow/seeded-origins.d.ts +43 -0
  558. package/dist/semantics/normalize/flow/seeded-origins.js +54 -0
  559. package/dist/semantics/normalize/flow/source-class-data.d.ts +132 -0
  560. package/dist/semantics/normalize/flow/source-class-data.js +838 -0
  561. package/dist/semantics/normalize/flow/source-class-instanceof.d.ts +13 -0
  562. package/dist/semantics/normalize/flow/source-class-instanceof.js +37 -0
  563. package/dist/semantics/normalize/flow/source-class-static-data.d.ts +16 -0
  564. package/dist/semantics/normalize/flow/source-class-static-data.js +47 -0
  565. package/dist/semantics/normalize/flow/source-construction-frames.d.ts +12 -0
  566. package/dist/semantics/normalize/flow/source-construction-frames.js +118 -0
  567. package/dist/semantics/normalize/flow/source-invocation-frame-layout.d.ts +34 -0
  568. package/dist/semantics/normalize/flow/source-invocation-frame-layout.js +78 -0
  569. package/dist/semantics/normalize/flow/source-invocation-receiver.d.ts +37 -0
  570. package/dist/semantics/normalize/flow/source-invocation-receiver.js +95 -0
  571. package/dist/semantics/normalize/flow/source-prototype-method-identity.d.ts +23 -0
  572. package/dist/semantics/normalize/flow/source-prototype-method-identity.js +81 -0
  573. package/dist/semantics/normalize/flow/source-record-data.d.ts +29 -0
  574. package/dist/semantics/normalize/flow/source-record-data.js +626 -0
  575. package/dist/semantics/normalize/flow/source-value-session.d.ts +77 -0
  576. package/dist/semantics/normalize/flow/source-value-session.js +3089 -0
  577. package/dist/semantics/normalize/flow/targets.d.ts +118 -0
  578. package/dist/semantics/normalize/flow/targets.js +405 -0
  579. package/dist/semantics/normalize/flow/value-flow.d.ts +36 -0
  580. package/dist/semantics/normalize/flow/value-flow.js +823 -0
  581. package/dist/semantics/normalize/flow/value-provenance.d.ts +31 -0
  582. package/dist/semantics/normalize/flow/value-provenance.js +112 -0
  583. package/dist/semantics/normalize/gating.d.ts +51 -0
  584. package/dist/semantics/normalize/gating.js +560 -0
  585. package/dist/semantics/normalize/generic-function-choice.d.ts +31 -0
  586. package/dist/semantics/normalize/generic-function-choice.js +115 -0
  587. package/dist/semantics/normalize/global-host-mutations.d.ts +51 -0
  588. package/dist/semantics/normalize/global-host-mutations.js +5989 -0
  589. package/dist/semantics/normalize/host-effect-contracts.d.ts +77 -0
  590. package/dist/semantics/normalize/host-effect-contracts.js +143 -0
  591. package/dist/semantics/normalize/host-mutation-computed-keys.d.ts +38 -0
  592. package/dist/semantics/normalize/host-mutation-computed-keys.js +26 -0
  593. package/dist/semantics/normalize/host-mutation-key-reader.d.ts +66 -0
  594. package/dist/semantics/normalize/host-mutation-key-reader.js +192 -0
  595. package/dist/semantics/normalize/host-mutation-keys.d.ts +114 -0
  596. package/dist/semantics/normalize/host-mutation-keys.js +183 -0
  597. package/dist/semantics/normalize/identities.d.ts +172 -0
  598. package/dist/semantics/normalize/identities.js +426 -0
  599. package/dist/semantics/normalize/implicit-arguments-tuple.d.ts +97 -0
  600. package/dist/semantics/normalize/implicit-arguments-tuple.js +197 -0
  601. package/dist/semantics/normalize/implicit-arguments.d.ts +11 -0
  602. package/dist/semantics/normalize/implicit-arguments.js +39 -0
  603. package/dist/semantics/normalize/instantiation.d.ts +73 -0
  604. package/dist/semantics/normalize/instantiation.js +399 -0
  605. package/dist/semantics/normalize/intrinsic-property-call.d.ts +18 -0
  606. package/dist/semantics/normalize/intrinsic-property-call.js +69 -0
  607. package/dist/semantics/normalize/intrinsic-prototype.d.ts +41 -0
  608. package/dist/semantics/normalize/intrinsic-prototype.js +87 -0
  609. package/dist/semantics/normalize/intrinsic-static-member.d.ts +14 -0
  610. package/dist/semantics/normalize/intrinsic-static-member.js +23 -0
  611. package/dist/semantics/normalize/jsdoc-type-names.d.ts +32 -0
  612. package/dist/semantics/normalize/jsdoc-type-names.js +512 -0
  613. package/dist/semantics/normalize/keyof.d.ts +32 -0
  614. package/dist/semantics/normalize/keyof.js +110 -0
  615. package/dist/semantics/normalize/local-bindings.d.ts +176 -0
  616. package/dist/semantics/normalize/local-bindings.js +1826 -0
  617. package/dist/semantics/normalize/logical-result-type.d.ts +16 -0
  618. package/dist/semantics/normalize/logical-result-type.js +102 -0
  619. package/dist/semantics/normalize/namespace-paths.d.ts +57 -0
  620. package/dist/semantics/normalize/namespace-paths.js +108 -0
  621. package/dist/semantics/normalize/normalize.d.ts +57 -0
  622. package/dist/semantics/normalize/normalize.js +68 -0
  623. package/dist/semantics/normalize/object-bag-bindings.d.ts +305 -0
  624. package/dist/semantics/normalize/object-bag-bindings.js +1290 -0
  625. package/dist/semantics/normalize/omitted-stated-parameter.d.ts +53 -0
  626. package/dist/semantics/normalize/omitted-stated-parameter.js +59 -0
  627. package/dist/semantics/normalize/open-type-form.d.ts +10 -0
  628. package/dist/semantics/normalize/open-type-form.js +32 -0
  629. package/dist/semantics/normalize/parameter-bindings.d.ts +361 -0
  630. package/dist/semantics/normalize/parameter-bindings.js +3339 -0
  631. package/dist/semantics/normalize/parameter-slot.d.ts +264 -0
  632. package/dist/semantics/normalize/parameter-slot.js +491 -0
  633. package/dist/semantics/normalize/physical-overload-result.d.ts +77 -0
  634. package/dist/semantics/normalize/physical-overload-result.js +99 -0
  635. package/dist/semantics/normalize/primitive-property-absence.d.ts +12 -0
  636. package/dist/semantics/normalize/primitive-property-absence.js +60 -0
  637. package/dist/semantics/normalize/producer-context.d.ts +376 -0
  638. package/dist/semantics/normalize/producer-context.js +1 -0
  639. package/dist/semantics/normalize/producers/allocations.d.ts +3 -0
  640. package/dist/semantics/normalize/producers/allocations.js +863 -0
  641. package/dist/semantics/normalize/producers/binding-kind.d.ts +37 -0
  642. package/dist/semantics/normalize/producers/binding-kind.js +36 -0
  643. package/dist/semantics/normalize/producers/bindings.d.ts +85 -0
  644. package/dist/semantics/normalize/producers/bindings.js +710 -0
  645. package/dist/semantics/normalize/producers/boundary.d.ts +34 -0
  646. package/dist/semantics/normalize/producers/boundary.js +123 -0
  647. package/dist/semantics/normalize/producers/class-lifecycle.d.ts +3 -0
  648. package/dist/semantics/normalize/producers/class-lifecycle.js +902 -0
  649. package/dist/semantics/normalize/producers/computations.d.ts +3 -0
  650. package/dist/semantics/normalize/producers/computations.js +613 -0
  651. package/dist/semantics/normalize/producers/control-loops.d.ts +30 -0
  652. package/dist/semantics/normalize/producers/control-loops.js +91 -0
  653. package/dist/semantics/normalize/producers/control.d.ts +30 -0
  654. package/dist/semantics/normalize/producers/control.js +923 -0
  655. package/dist/semantics/normalize/producers/declaration-lifecycle.d.ts +3 -0
  656. package/dist/semantics/normalize/producers/declaration-lifecycle.js +390 -0
  657. package/dist/semantics/normalize/producers/destructuring.d.ts +45 -0
  658. package/dist/semantics/normalize/producers/destructuring.js +1180 -0
  659. package/dist/semantics/normalize/producers/dynamic-language.d.ts +3 -0
  660. package/dist/semantics/normalize/producers/dynamic-language.js +70 -0
  661. package/dist/semantics/normalize/producers/erasure.d.ts +51 -0
  662. package/dist/semantics/normalize/producers/erasure.js +90 -0
  663. package/dist/semantics/normalize/producers/installed.d.ts +3 -0
  664. package/dist/semantics/normalize/producers/installed.js +55 -0
  665. package/dist/semantics/normalize/producers/invocations.d.ts +35 -0
  666. package/dist/semantics/normalize/producers/invocations.js +1796 -0
  667. package/dist/semantics/normalize/producers/iteration-yield.d.ts +59 -0
  668. package/dist/semantics/normalize/producers/iteration-yield.js +235 -0
  669. package/dist/semantics/normalize/producers/jsx.d.ts +3 -0
  670. package/dist/semantics/normalize/producers/jsx.js +360 -0
  671. package/dist/semantics/normalize/producers/mint.d.ts +39 -0
  672. package/dist/semantics/normalize/producers/mint.js +44 -0
  673. package/dist/semantics/normalize/producers/nullish.d.ts +16 -0
  674. package/dist/semantics/normalize/producers/nullish.js +27 -0
  675. package/dist/semantics/normalize/producers/object-assignment.d.ts +8 -0
  676. package/dist/semantics/normalize/producers/object-assignment.js +204 -0
  677. package/dist/semantics/normalize/producers/object-tag.d.ts +9 -0
  678. package/dist/semantics/normalize/producers/object-tag.js +119 -0
  679. package/dist/semantics/normalize/producers/optional-chain.d.ts +44 -0
  680. package/dist/semantics/normalize/producers/optional-chain.js +75 -0
  681. package/dist/semantics/normalize/producers/properties.d.ts +21 -0
  682. package/dist/semantics/normalize/producers/properties.js +1053 -0
  683. package/dist/semantics/normalize/producers/protocol.d.ts +67 -0
  684. package/dist/semantics/normalize/producers/protocol.js +695 -0
  685. package/dist/semantics/normalize/producers/references.d.ts +53 -0
  686. package/dist/semantics/normalize/producers/references.js +1027 -0
  687. package/dist/semantics/normalize/producers/shared.d.ts +561 -0
  688. package/dist/semantics/normalize/producers/shared.js +1683 -0
  689. package/dist/semantics/normalize/producers/spread-arguments.d.ts +72 -0
  690. package/dist/semantics/normalize/producers/spread-arguments.js +375 -0
  691. package/dist/semantics/normalize/producers/tagged-template.d.ts +5 -0
  692. package/dist/semantics/normalize/producers/tagged-template.js +307 -0
  693. package/dist/semantics/normalize/producers/tuple-spread.d.ts +189 -0
  694. package/dist/semantics/normalize/producers/tuple-spread.js +279 -0
  695. package/dist/semantics/normalize/property-key-domain.d.ts +36 -0
  696. package/dist/semantics/normalize/property-key-domain.js +150 -0
  697. package/dist/semantics/normalize/reachability.d.ts +189 -0
  698. package/dist/semantics/normalize/reachability.js +1057 -0
  699. package/dist/semantics/normalize/reassigned-bindings.d.ts +13 -0
  700. package/dist/semantics/normalize/reassigned-bindings.js +41 -0
  701. package/dist/semantics/normalize/record-storage-families.d.ts +11 -0
  702. package/dist/semantics/normalize/record-storage-families.js +109 -0
  703. package/dist/semantics/normalize/return-bindings.d.ts +260 -0
  704. package/dist/semantics/normalize/return-bindings.js +1311 -0
  705. package/dist/semantics/normalize/return-paths.d.ts +2 -0
  706. package/dist/semantics/normalize/return-paths.js +28 -0
  707. package/dist/semantics/normalize/script-global-redefinition.d.ts +44 -0
  708. package/dist/semantics/normalize/script-global-redefinition.js +75 -0
  709. package/dist/semantics/normalize/specialization.d.ts +201 -0
  710. package/dist/semantics/normalize/specialization.js +1824 -0
  711. package/dist/semantics/normalize/structural-array-element.d.ts +176 -0
  712. package/dist/semantics/normalize/structural-array-element.js +700 -0
  713. package/dist/semantics/normalize/structural-array-read.d.ts +13 -0
  714. package/dist/semantics/normalize/structural-array-read.js +124 -0
  715. package/dist/semantics/normalize/structural-callable.d.ts +12 -0
  716. package/dist/semantics/normalize/structural-callable.js +82 -0
  717. package/dist/semantics/normalize/structural-creation-order.d.ts +32 -0
  718. package/dist/semantics/normalize/structural-creation-order.js +111 -0
  719. package/dist/semantics/normalize/structural-declarations.d.ts +395 -0
  720. package/dist/semantics/normalize/structural-declarations.js +968 -0
  721. package/dist/semantics/normalize/structural-declared-body.d.ts +25 -0
  722. package/dist/semantics/normalize/structural-declared-body.js +147 -0
  723. package/dist/semantics/normalize/structural-generics.d.ts +56 -0
  724. package/dist/semantics/normalize/structural-generics.js +120 -0
  725. package/dist/semantics/normalize/structural-indexed-access.d.ts +11 -0
  726. package/dist/semantics/normalize/structural-indexed-access.js +126 -0
  727. package/dist/semantics/normalize/structural-instantiated-member.d.ts +64 -0
  728. package/dist/semantics/normalize/structural-instantiated-member.js +407 -0
  729. package/dist/semantics/normalize/structural-joins.d.ts +44 -0
  730. package/dist/semantics/normalize/structural-joins.js +143 -0
  731. package/dist/semantics/normalize/structural-layout-relevance.d.ts +29 -0
  732. package/dist/semantics/normalize/structural-layout-relevance.js +391 -0
  733. package/dist/semantics/normalize/structural-layout-type.d.ts +11 -0
  734. package/dist/semantics/normalize/structural-layout-type.js +1468 -0
  735. package/dist/semantics/normalize/structural-leaves.d.ts +49 -0
  736. package/dist/semantics/normalize/structural-leaves.js +125 -0
  737. package/dist/semantics/normalize/structural-local-union.d.ts +13 -0
  738. package/dist/semantics/normalize/structural-local-union.js +133 -0
  739. package/dist/semantics/normalize/structural-members.d.ts +26 -0
  740. package/dist/semantics/normalize/structural-members.js +84 -0
  741. package/dist/semantics/normalize/structural-mutable-method.d.ts +15 -0
  742. package/dist/semantics/normalize/structural-mutable-method.js +109 -0
  743. package/dist/semantics/normalize/structural-parts.d.ts +131 -0
  744. package/dist/semantics/normalize/structural-parts.js +737 -0
  745. package/dist/semantics/normalize/structural-receiver.d.ts +66 -0
  746. package/dist/semantics/normalize/structural-receiver.js +551 -0
  747. package/dist/semantics/normalize/structural-rules.d.ts +112 -0
  748. package/dist/semantics/normalize/structural-rules.js +93 -0
  749. package/dist/semantics/normalize/structural-self-reference.d.ts +150 -0
  750. package/dist/semantics/normalize/structural-self-reference.js +494 -0
  751. package/dist/semantics/normalize/structural.d.ts +202 -0
  752. package/dist/semantics/normalize/structural.js +4218 -0
  753. package/dist/semantics/normalize/unreduced-type-form.d.ts +41 -0
  754. package/dist/semantics/normalize/unreduced-type-form.js +53 -0
  755. package/dist/semantics/normalize/unresolvable-names.d.ts +56 -0
  756. package/dist/semantics/normalize/unresolvable-names.js +140 -0
  757. package/dist/semantics/package-sources.d.ts +16 -0
  758. package/dist/semantics/package-sources.js +365 -0
  759. package/dist/semantics/program.d.ts +151 -0
  760. package/dist/semantics/program.js +667 -0
  761. package/dist/semantics/prototype-install-source-transform.d.ts +4 -0
  762. package/dist/semantics/prototype-install-source-transform.js +341 -0
  763. package/dist/semantics/prototype-object-class-source-transform.d.ts +4 -0
  764. package/dist/semantics/prototype-object-class-source-transform.js +525 -0
  765. package/dist/semantics/prototype-reparenting.d.ts +50 -0
  766. package/dist/semantics/prototype-reparenting.js +317 -0
  767. package/dist/semantics/stable-checker.d.ts +10 -0
  768. package/dist/semantics/stable-checker.js +148 -0
  769. package/dist/semantics/subclass-member-overlay-transform.d.ts +35 -0
  770. package/dist/semantics/subclass-member-overlay-transform.js +1418 -0
  771. package/dist/semantics/symbol-keyed-expando-source-transform.d.ts +4 -0
  772. package/dist/semantics/symbol-keyed-expando-source-transform.js +66 -0
  773. package/dist/semantics/this-constructor-source-transform.d.ts +4 -0
  774. package/dist/semantics/this-constructor-source-transform.js +122 -0
  775. package/dist/semantics/uninstantiable-classes.d.ts +22 -0
  776. package/dist/semantics/uninstantiable-classes.js +75 -0
  777. package/dist/targets/cpp/balanced-units.d.ts +3 -0
  778. package/dist/targets/cpp/balanced-units.js +58 -0
  779. package/dist/targets/cpp/borrowed-call-entry.d.ts +30 -0
  780. package/dist/targets/cpp/borrowed-call-entry.js +68 -0
  781. package/dist/targets/cpp/captures.d.ts +68 -0
  782. package/dist/targets/cpp/captures.js +269 -0
  783. package/dist/targets/cpp/class-layout.d.ts +313 -0
  784. package/dist/targets/cpp/class-layout.js +483 -0
  785. package/dist/targets/cpp/class-properties/computed-method-value.d.ts +25 -0
  786. package/dist/targets/cpp/class-properties/computed-method-value.js +22 -0
  787. package/dist/targets/cpp/class-properties/emit-class-properties.d.ts +216 -0
  788. package/dist/targets/cpp/class-properties/emit-class-properties.js +917 -0
  789. package/dist/targets/cpp/class-properties/native-prototype.d.ts +11 -0
  790. package/dist/targets/cpp/class-properties/native-prototype.js +101 -0
  791. package/dist/targets/cpp/class-ref-transport.d.ts +12 -0
  792. package/dist/targets/cpp/class-ref-transport.js +32 -0
  793. package/dist/targets/cpp/conversions.d.ts +3 -0
  794. package/dist/targets/cpp/conversions.js +2027 -0
  795. package/dist/targets/cpp/deferral-safety.d.ts +82 -0
  796. package/dist/targets/cpp/deferral-safety.js +86 -0
  797. package/dist/targets/cpp/direct-call-receivers.d.ts +37 -0
  798. package/dist/targets/cpp/direct-call-receivers.js +79 -0
  799. package/dist/targets/cpp/document.d.ts +74 -0
  800. package/dist/targets/cpp/document.js +106 -0
  801. package/dist/targets/cpp/emit-allocation.d.ts +60 -0
  802. package/dist/targets/cpp/emit-allocation.js +573 -0
  803. package/dist/targets/cpp/emit-arrays.d.ts +119 -0
  804. package/dist/targets/cpp/emit-arrays.js +1047 -0
  805. package/dist/targets/cpp/emit-binding-reference.d.ts +17 -0
  806. package/dist/targets/cpp/emit-binding-reference.js +120 -0
  807. package/dist/targets/cpp/emit-bindings.d.ts +158 -0
  808. package/dist/targets/cpp/emit-bindings.js +769 -0
  809. package/dist/targets/cpp/emit-buffers.d.ts +156 -0
  810. package/dist/targets/cpp/emit-buffers.js +573 -0
  811. package/dist/targets/cpp/emit-callable.d.ts +230 -0
  812. package/dist/targets/cpp/emit-callable.js +2154 -0
  813. package/dist/targets/cpp/emit-carrier-members.d.ts +406 -0
  814. package/dist/targets/cpp/emit-carrier-members.js +1224 -0
  815. package/dist/targets/cpp/emit-coercion.d.ts +26 -0
  816. package/dist/targets/cpp/emit-coercion.js +39 -0
  817. package/dist/targets/cpp/emit-context.d.ts +1882 -0
  818. package/dist/targets/cpp/emit-context.js +904 -0
  819. package/dist/targets/cpp/emit-dynamic-properties.d.ts +174 -0
  820. package/dist/targets/cpp/emit-dynamic-properties.js +1249 -0
  821. package/dist/targets/cpp/emit-equality.d.ts +39 -0
  822. package/dist/targets/cpp/emit-equality.js +472 -0
  823. package/dist/targets/cpp/emit-exceptions.d.ts +104 -0
  824. package/dist/targets/cpp/emit-exceptions.js +513 -0
  825. package/dist/targets/cpp/emit-field-owner.d.ts +4 -0
  826. package/dist/targets/cpp/emit-field-owner.js +27 -0
  827. package/dist/targets/cpp/emit-in.d.ts +31 -0
  828. package/dist/targets/cpp/emit-in.js +426 -0
  829. package/dist/targets/cpp/emit-instanceof.d.ts +19 -0
  830. package/dist/targets/cpp/emit-instanceof.js +601 -0
  831. package/dist/targets/cpp/emit-integers.d.ts +68 -0
  832. package/dist/targets/cpp/emit-integers.js +184 -0
  833. package/dist/targets/cpp/emit-iterator.d.ts +100 -0
  834. package/dist/targets/cpp/emit-iterator.js +1137 -0
  835. package/dist/targets/cpp/emit-json.d.ts +73 -0
  836. package/dist/targets/cpp/emit-json.js +823 -0
  837. package/dist/targets/cpp/emit-jsx.d.ts +74 -0
  838. package/dist/targets/cpp/emit-jsx.js +806 -0
  839. package/dist/targets/cpp/emit-mixed-binary.d.ts +51 -0
  840. package/dist/targets/cpp/emit-mixed-binary.js +60 -0
  841. package/dist/targets/cpp/emit-namespaces.d.ts +101 -0
  842. package/dist/targets/cpp/emit-namespaces.js +133 -0
  843. package/dist/targets/cpp/emit-narrowing.d.ts +738 -0
  844. package/dist/targets/cpp/emit-narrowing.js +3967 -0
  845. package/dist/targets/cpp/emit-native-equality.d.ts +3 -0
  846. package/dist/targets/cpp/emit-native-equality.js +14 -0
  847. package/dist/targets/cpp/emit-native-selection.d.ts +5 -0
  848. package/dist/targets/cpp/emit-native-selection.js +37 -0
  849. package/dist/targets/cpp/emit-object-tag.d.ts +4 -0
  850. package/dist/targets/cpp/emit-object-tag.js +108 -0
  851. package/dist/targets/cpp/emit-owned-record.d.ts +2 -0
  852. package/dist/targets/cpp/emit-owned-record.js +15 -0
  853. package/dist/targets/cpp/emit-presence.d.ts +78 -0
  854. package/dist/targets/cpp/emit-presence.js +376 -0
  855. package/dist/targets/cpp/emit-properties.d.ts +105 -0
  856. package/dist/targets/cpp/emit-properties.js +1640 -0
  857. package/dist/targets/cpp/emit-record-view.d.ts +20 -0
  858. package/dist/targets/cpp/emit-record-view.js +354 -0
  859. package/dist/targets/cpp/emit-return.d.ts +5 -0
  860. package/dist/targets/cpp/emit-return.js +237 -0
  861. package/dist/targets/cpp/emit-sum-widening.d.ts +10 -0
  862. package/dist/targets/cpp/emit-sum-widening.js +69 -0
  863. package/dist/targets/cpp/emit-tonumber.d.ts +38 -0
  864. package/dist/targets/cpp/emit-tonumber.js +177 -0
  865. package/dist/targets/cpp/emit-tostring.d.ts +92 -0
  866. package/dist/targets/cpp/emit-tostring.js +556 -0
  867. package/dist/targets/cpp/emit-typeof.d.ts +49 -0
  868. package/dist/targets/cpp/emit-typeof.js +317 -0
  869. package/dist/targets/cpp/emit-union-properties.d.ts +181 -0
  870. package/dist/targets/cpp/emit-union-properties.js +1281 -0
  871. package/dist/targets/cpp/emit.d.ts +45 -0
  872. package/dist/targets/cpp/emit.js +2225 -0
  873. package/dist/targets/cpp/error-types.d.ts +4 -0
  874. package/dist/targets/cpp/error-types.js +11 -0
  875. package/dist/targets/cpp/function-source-reads.d.ts +72 -0
  876. package/dist/targets/cpp/function-source-reads.js +148 -0
  877. package/dist/targets/cpp/host/atomics.d.ts +25 -0
  878. package/dist/targets/cpp/host/atomics.js +63 -0
  879. package/dist/targets/cpp/host/core-globals.d.ts +108 -0
  880. package/dist/targets/cpp/host/core-globals.js +158 -0
  881. package/dist/targets/cpp/host/dynamic-argument-members.d.ts +42 -0
  882. package/dist/targets/cpp/host/dynamic-argument-members.js +61 -0
  883. package/dist/targets/cpp/host/emit-host-arity.d.ts +139 -0
  884. package/dist/targets/cpp/host/emit-host-arity.js +232 -0
  885. package/dist/targets/cpp/host/emit-host-invoke.d.ts +91 -0
  886. package/dist/targets/cpp/host/emit-host-invoke.js +1105 -0
  887. package/dist/targets/cpp/host/emit-host-object.d.ts +55 -0
  888. package/dist/targets/cpp/host/emit-host-object.js +2206 -0
  889. package/dist/targets/cpp/host/emit-host-properties.d.ts +69 -0
  890. package/dist/targets/cpp/host/emit-host-properties.js +533 -0
  891. package/dist/targets/cpp/host/emit-host-reflect.d.ts +4 -0
  892. package/dist/targets/cpp/host/emit-host-reflect.js +180 -0
  893. package/dist/targets/cpp/host/emit-host-value.d.ts +120 -0
  894. package/dist/targets/cpp/host/emit-host-value.js +392 -0
  895. package/dist/targets/cpp/host/host-members.d.ts +505 -0
  896. package/dist/targets/cpp/host/host-members.js +819 -0
  897. package/dist/targets/cpp/host/host-method-aliases.d.ts +30 -0
  898. package/dist/targets/cpp/host/host-method-aliases.js +76 -0
  899. package/dist/targets/cpp/host/native-protocols.d.ts +47 -0
  900. package/dist/targets/cpp/host/native-protocols.js +183 -0
  901. package/dist/targets/cpp/host/object-protocol.d.ts +351 -0
  902. package/dist/targets/cpp/host/object-protocol.js +671 -0
  903. package/dist/targets/cpp/host-namespace-reads.d.ts +83 -0
  904. package/dist/targets/cpp/host-namespace-reads.js +113 -0
  905. package/dist/targets/cpp/manifest/capabilities.d.ts +39 -0
  906. package/dist/targets/cpp/manifest/capabilities.js +1484 -0
  907. package/dist/targets/cpp/manifest.d.ts +23 -0
  908. package/dist/targets/cpp/manifest.js +113 -0
  909. package/dist/targets/cpp/native-error-base.d.ts +38 -0
  910. package/dist/targets/cpp/native-error-base.js +74 -0
  911. package/dist/targets/cpp/native-narrowing-transport.d.ts +12 -0
  912. package/dist/targets/cpp/native-narrowing-transport.js +151 -0
  913. package/dist/targets/cpp/native-selection-helpers.d.ts +11 -0
  914. package/dist/targets/cpp/native-selection-helpers.js +46 -0
  915. package/dist/targets/cpp/native-symbol-keys.d.ts +8 -0
  916. package/dist/targets/cpp/native-symbol-keys.js +34 -0
  917. package/dist/targets/cpp/ownership.d.ts +43 -0
  918. package/dist/targets/cpp/ownership.js +38 -0
  919. package/dist/targets/cpp/owning-conversion-input.d.ts +14 -0
  920. package/dist/targets/cpp/owning-conversion-input.js +12 -0
  921. package/dist/targets/cpp/property-read-claims.d.ts +62 -0
  922. package/dist/targets/cpp/property-read-claims.js +23 -0
  923. package/dist/targets/cpp/property-store-claims.d.ts +62 -0
  924. package/dist/targets/cpp/property-store-claims.js +26 -0
  925. package/dist/targets/cpp/prototype/emit-prototype-array.d.ts +111 -0
  926. package/dist/targets/cpp/prototype/emit-prototype-array.js +602 -0
  927. package/dist/targets/cpp/prototype/emit-prototype-date.d.ts +133 -0
  928. package/dist/targets/cpp/prototype/emit-prototype-date.js +515 -0
  929. package/dist/targets/cpp/prototype/emit-prototype-error.d.ts +13 -0
  930. package/dist/targets/cpp/prototype/emit-prototype-error.js +54 -0
  931. package/dist/targets/cpp/prototype/emit-prototype-invoke.d.ts +34 -0
  932. package/dist/targets/cpp/prototype/emit-prototype-invoke.js +1003 -0
  933. package/dist/targets/cpp/prototype/emit-prototype-iterator.d.ts +47 -0
  934. package/dist/targets/cpp/prototype/emit-prototype-iterator.js +250 -0
  935. package/dist/targets/cpp/prototype/emit-prototype-promise.d.ts +46 -0
  936. package/dist/targets/cpp/prototype/emit-prototype-promise.js +143 -0
  937. package/dist/targets/cpp/prototype/emit-prototype-regexp.d.ts +335 -0
  938. package/dist/targets/cpp/prototype/emit-prototype-regexp.js +853 -0
  939. package/dist/targets/cpp/prototype/emit-prototype-string.d.ts +42 -0
  940. package/dist/targets/cpp/prototype/emit-prototype-string.js +252 -0
  941. package/dist/targets/cpp/prototype/prototype-method-reads.d.ts +25 -0
  942. package/dist/targets/cpp/prototype/prototype-method-reads.js +182 -0
  943. package/dist/targets/cpp/reactive-dependencies.d.ts +140 -0
  944. package/dist/targets/cpp/reactive-dependencies.js +432 -0
  945. package/dist/targets/cpp/reactive-origins.d.ts +44 -0
  946. package/dist/targets/cpp/reactive-origins.js +82 -0
  947. package/dist/targets/cpp/records.d.ts +277 -0
  948. package/dist/targets/cpp/records.js +2427 -0
  949. package/dist/targets/cpp/recursive-containers.d.ts +43 -0
  950. package/dist/targets/cpp/recursive-containers.js +144 -0
  951. package/dist/targets/cpp/regexp-types.d.ts +56 -0
  952. package/dist/targets/cpp/regexp-types.js +59 -0
  953. package/dist/targets/cpp/substrate.d.ts +125 -0
  954. package/dist/targets/cpp/substrate.js +12 -0
  955. package/dist/targets/cpp/translation-unit.d.ts +219 -0
  956. package/dist/targets/cpp/translation-unit.js +2063 -0
  957. package/dist/targets/cpp/types.d.ts +280 -0
  958. package/dist/targets/cpp/types.js +1135 -0
  959. package/dist/targets/cpp/virtual-methods.d.ts +95 -0
  960. package/dist/targets/cpp/virtual-methods.js +264 -0
  961. package/package.json +95 -0
  962. package/src/targets/cpp/runtime/gea_dynamic_proxy.h +824 -0
  963. package/src/targets/cpp/runtime/gea_eval.h +1376 -0
  964. package/src/targets/cpp/runtime/gea_native_class_prototype.h +44 -0
  965. package/src/targets/cpp/runtime/gea_runtime.h +29222 -0
  966. package/src/targets/cpp/runtime/gea_runtime_builtins.cpp +55 -0
@@ -0,0 +1,560 @@
1
+ import ts from 'typescript';
2
+ import { operationFamilies, operationId, operationOfResult, semanticResultId } from '../../identity/ids.js';
3
+ import { operandOf } from '../model/operands.js';
4
+ import { forEachEvaluationChild } from './evaluation-order.js';
5
+ import { rootSpecialization } from './identities.js';
6
+ import { parameterValueResultOf } from './producers/bindings.js';
7
+ import { citeSwitchCaseTest, citeSwitchGroupTest, clauseTerminates } from './producers/control.js';
8
+ import { citeExpressionResult } from './producers/references.js';
9
+ import { optionalChainGuardOf, optionalCallGuardOf } from './producers/optional-chain.js';
10
+ import { citeExtractedElementValue } from './producers/destructuring.js';
11
+ /**
12
+ * Every operation one node published.
13
+ *
14
+ * Ordinals within a `(node, family)` pair are handed out consecutively from
15
+ * zero, so probing until the first absence enumerates them exactly. This is why
16
+ * the pass can gate a node without knowing which producer served it or how many
17
+ * operations that producer minted -- a compound assignment's three, an update's
18
+ * two, a property's get-then-set pair.
19
+ */
20
+ const operationsOfNode = (operations, node) => {
21
+ const found = [];
22
+ // The node half of the identity, built once instead of once per probe.
23
+ //
24
+ // Every probe below asks for `op|<node>|<family>|<ordinal>` and the node is
25
+ // the long part -- a file identity, a syntax kind, an ordinal and a
26
+ // specialization suffix. Rebuilding it for all fourteen families, and again
27
+ // for every ordinal of every family that answers, copied that string fifteen
28
+ // or more times to ask fifteen questions about one node. The ids are
29
+ // identical to `operationId`'s own spelling (this is the same concatenation
30
+ // it performs, with its first argument factored out), so the probe order,
31
+ // the answers, and the truncation at the first absent ordinal are unchanged.
32
+ const prefix = `op|${node}|`;
33
+ for (const family of operationFamilies) {
34
+ const familyPrefix = `${prefix}${family}|`;
35
+ for (let ordinal = 0;; ordinal += 1) {
36
+ const id = `${familyPrefix}${ordinal}`;
37
+ if (!operations.has(id))
38
+ break;
39
+ found.push(id);
40
+ }
41
+ }
42
+ return found;
43
+ };
44
+ /**
45
+ * A nested function body is not gated by whatever `if` its declaration sits in:
46
+ * it runs when it is called, which can be any time at all. Its *allocation* is
47
+ * gated, and that operation belongs to the enclosing body, so the boundary is
48
+ * the body -- not the declaration.
49
+ */
50
+ const bodyOfOwnCaller = (node) => {
51
+ if (ts.isFunctionDeclaration(node) || ts.isFunctionExpression(node) || ts.isArrowFunction(node))
52
+ return node.body ?? null;
53
+ if (ts.isMethodDeclaration(node) || ts.isConstructorDeclaration(node))
54
+ return node.body ?? null;
55
+ if (ts.isGetAccessorDeclaration(node) || ts.isSetAccessorDeclaration(node))
56
+ return node.body ?? null;
57
+ if (ts.isClassDeclaration(node) || ts.isClassExpression(node))
58
+ return node;
59
+ return null;
60
+ };
61
+ /** The condition's own published result, or `null` when nothing citable produces it. */
62
+ const guardOf = (condition, facts) => {
63
+ const cited = citeExpressionResult(condition, facts);
64
+ if (cited.kind !== 'source' || cited.source.kind !== 'result')
65
+ return null;
66
+ return cited.source.result;
67
+ };
68
+ export const gatingEdges = (input) => {
69
+ const { files, operations, specializations } = input;
70
+ const edges = [];
71
+ // One walker per copy, built on first use. Rebuilding a dozen closures for
72
+ // every node of every copy would rebuild them for one answer, the same way
73
+ // `normalize.ts` caches a producer set per copy and for the same reason.
74
+ const walkers = new Map();
75
+ // Emitted in chain order, outermost first: the lowering reads the chain back
76
+ // in the order the edges arrive, so a caller's own nesting is what states
77
+ // which scope contains which.
78
+ const pushGateEdgesFor = (to, gates) => {
79
+ for (const gate of gates) {
80
+ // Emitted in chain order, outermost first: the lowering reads the chain
81
+ // back in the order the edges arrive, so this walk's own nesting is what
82
+ // states which scope contains which.
83
+ if (gate.kind === 'loop')
84
+ edges.push({ kind: 'loop', loop: gate.loop, to });
85
+ else if (gate.kind === 'loop-latch')
86
+ edges.push({ kind: 'loop-latch', loop: gate.loop, to });
87
+ else if (gate.kind === 'region')
88
+ edges.push({ kind: 'region', region: gate.region, part: gate.part, to });
89
+ else
90
+ edges.push({ kind: 'conditional', guard: gate.guard, to, takenWhen: gate.takenWhen });
91
+ }
92
+ };
93
+ const walkerFor = (path) => {
94
+ const key = input.identities.copyKeyOf(path);
95
+ const cached = walkers.get(key);
96
+ if (cached)
97
+ return cached;
98
+ // Every id this walker mints goes through the copy's own view. A node the
99
+ // copy does not enclose still answers with its root identity -- the view
100
+ // truncates the path to the steps that actually contain the node -- so one
101
+ // walker per copy is correct for the whole subtree it reaches, not only
102
+ // for the part inside the generic.
103
+ const identities = input.identities.forSpecialization(path);
104
+ // The copy's own view, plus the program-wide census: one citation rule,
105
+ // whichever specialization is walking.
106
+ const facts = {
107
+ identities,
108
+ argumentsObjects: input.argumentsObjects,
109
+ unresolvableNames: input.unresolvableNames,
110
+ namespacePaths: input.namespacePaths
111
+ };
112
+ const emit = (node, gates) => {
113
+ if (gates.length === 0)
114
+ return;
115
+ for (const to of operationsOfNode(operations, identities.nodeIdOf(node)))
116
+ pushGateEdgesFor(to, gates);
117
+ };
118
+ /**
119
+ * Monomorphization, the same fork `census.ts` performs on the same census
120
+ * and in the same two halves.
121
+ *
122
+ * A generic's body is walked once per instantiation, under that copy's
123
+ * path, because that is the path the census minted the copy's operation
124
+ * ids under. Walking it once at the root instead names the generic, and a
125
+ * gate naming an operation no copy publishes is dropped by
126
+ * `normalize.ts`'s own dangling-edge filter -- silently, because a gate is
127
+ * invented by this pass rather than published by a producer, so no
128
+ * withheld-component blocker is reported for it. What reaches the lowering
129
+ * is then a body whose `if` arms both run.
130
+ *
131
+ * A generic the program never instantiates is walked not at all, for the
132
+ * reason the census states: it has no operations to gate.
133
+ */
134
+ const visit = (node, gates) => {
135
+ // A type annotation contains no operations, and a function body starts a
136
+ // caller of its own whose execution this chain says nothing about.
137
+ if (ts.isTypeNode(node) && !ts.isExpressionWithTypeArguments(node))
138
+ return;
139
+ const copies = specializations.specializationsOf(node);
140
+ if (copies.length > 0) {
141
+ for (const copy of copies) {
142
+ walkerFor([...path, { owner: node, ordinal: copy.ordinal }]).visitHere(node, gates);
143
+ }
144
+ return;
145
+ }
146
+ if (specializations.isGeneric(node))
147
+ return;
148
+ visitHere(node, gates);
149
+ };
150
+ const visitHere = (node, gates) => {
151
+ if (ts.isSpreadElement(node) || ts.isSpreadAssignment(node)) {
152
+ // `mintIteratorSteps` reserves all four protocol ordinals -- 0
153
+ // `get-method`, 1 `get-iterator`, 2 `next`, 3 `close` -- even when a
154
+ // step is skipped for THIS spread, for the identical reason the
155
+ // for-of/for-in branch below states: reserving the ordinal even when
156
+ // unused keeps each step's identity fixed across variants. A plain
157
+ // dynamic gather (`[...anySource]`, `mintIteratorSteps`' `appendGather`
158
+ // caller) publishes only `get-iterator` at ordinal 1 -- `get-method` at
159
+ // ordinal 0 is reserved but never published -- so `operationsOfNode`'s
160
+ // generic probe (which stops at the first missing ordinal, starting
161
+ // from zero) never reaches it: `emit(node, gates)` below found nothing
162
+ // for this node and left `get-iterator` at the unconditional outer
163
+ // scope. Inside a `try`, that stranded operation read as a dependency
164
+ // from OUTSIDE the region into it, and the promotion rule that moves a
165
+ // cross-region dependency ahead of the region's own marker
166
+ // (`ir/lower-graph.ts`'s `dependencies` loop) then required the try to
167
+ // wait on an operation it could only run by first being inside the
168
+ // try -- a cycle, not a bug in that rule. Gate the four fixed ordinals
169
+ // directly instead of probing for them: a gate naming an operation
170
+ // this spread never published is dropped by `normalize.ts`'s own
171
+ // dangling-edge filter, so this is safe for a closed-tuple or
172
+ // native-range-copy spread, which publish none of the four, too.
173
+ const nodeId = identities.nodeIdOf(node);
174
+ pushGateEdgesFor(operationId(nodeId, 'protocol', 0), gates);
175
+ pushGateEdgesFor(operationId(nodeId, 'protocol', 1), gates);
176
+ pushGateEdgesFor(operationId(nodeId, 'protocol', 2), gates);
177
+ pushGateEdgesFor(operationId(nodeId, 'protocol', 3), gates);
178
+ // and then FALL THROUGH to `emit(node, gates)` below. This branch ADDS
179
+ // the ordinals the probe cannot reach; it does not replace the generic
180
+ // handling, and an earlier version that returned here broke every
181
+ // spread whose operations the probe finds perfectly well. A rest
182
+ // TARGET (`[first, ...tail] = source`) is the case that exposed it:
183
+ // `mintIteratorSteps` keys all four ordinals on `candidate.id`
184
+ // (producers/protocol.ts), which for an assignment pattern is the
185
+ // enclosing ArrayLiteralExpression, never the rest element -- so the
186
+ // four gates above are dangling for it and drop out, and returning
187
+ // early meant its own node was never emitted at all. The enclosing
188
+ // `for...of`'s operations were then left unGated, and its guard's
189
+ // truthy arm read as re-entered after it had ended
190
+ // (`array-assignment-rest-target.ts`).
191
+ }
192
+ if (ts.isForOfStatement(node) || ts.isForInStatement(node)) {
193
+ const loop = operationId(identities.nodeIdOf(node), 'control', 0);
194
+ const loopOperation = operations.get(loop);
195
+ // `control.ts`'s `contributeForOfIn` reshapes every sync for-of/for-in
196
+ // loop into an ordinary head-tested one -- a `'condition'` operand
197
+ // instead of `'iterator-record'` -- for both the array/enumeration
198
+ // fast path AND the general dynamic-protocol path (a source neither
199
+ // `hasNativeIterationCursor` nor `hasNativeEnumerationCursor` claims a
200
+ // native cursor for; a `for...of` over `Headers`/`URLSearchParams` is
201
+ // this shape). The condition and the steps feeding it (get-method,
202
+ // get-iterator, next, the `!done` negation) have no source `ts.Node`
203
+ // of their own the way a real `while`/`for`'s condition expression
204
+ // does, so this branch reconstructs their fixed operation ids
205
+ // directly rather than visiting one: `protocol` ordinal 0 is
206
+ // `get-method`, 1 is `get-iterator`, 2 is always `next`, and the
207
+ // negation is `computation` ordinal 0, the only operation of that
208
+ // family this statement's own node ever mints.
209
+ //
210
+ // `get-method` (ordinal 0) is reserved but never MINTED on the fast
211
+ // path -- `mintIteratorSteps`'s `includeGetMethod: !arrayFastPath &&
212
+ // isForOf` -- so gating it there is a no-op (a gate naming an
213
+ // operation no copy publishes is dropped by `normalize.ts`'s own
214
+ // dangling-edge filter). On the general path it IS minted, runs once
215
+ // before the loop starts (the same scope as get-iterator, never the
216
+ // per-iteration `inside`), and until this line was never gated at
217
+ // all: nothing placed its operations inside the guard's arm, so they
218
+ // landed at the unconditional outer scope while get-iterator/next
219
+ // (gated below) stayed inside it -- the same arm then closes once
220
+ // (unconditionally-scoped code runs before it) and gets asked to
221
+ // reopen for the loop's own gated operations, which
222
+ // `lower-flow.ts`'s `enterArm` refuses by name: "the truthy arm of
223
+ // guard ... was re-entered after it had already ended". Confirmed by
224
+ // tracing hono's `Context#newResponse` (`context.ts:613`'s `for
225
+ // (const [key, value] of argHeaders)`, `argHeaders` a `Headers`):
226
+ // `get-method`'s own operation carried an EMPTY scope chain while
227
+ // `get-iterator`/`next` for the identical for-of correctly carried
228
+ // `guard(...,truthy)`.
229
+ //
230
+ // This entirely bypasses the generic `emit(node, gates)` call below --
231
+ // not merely runs before it -- because that call's own per-node scan
232
+ // would otherwise find the negation too (it sits at ordinal 0, unlike
233
+ // the protocol steps, which a real gap hides from it) and gate it a
234
+ // second time, at the wrong, unconditional outer scope. Handling the
235
+ // loop operation itself here as well keeps both gatings of this one node
236
+ // in one place instead of splitting it across two code paths.
237
+ if (loopOperation && operandOf(loopOperation, 'condition')) {
238
+ pushGateEdgesFor(loop, gates);
239
+ visit(node.expression, gates);
240
+ const nodeId = identities.nodeIdOf(node);
241
+ pushGateEdgesFor(operationId(nodeId, 'protocol', 0), gates);
242
+ pushGateEdgesFor(operationId(nodeId, 'protocol', 1), gates);
243
+ const inside = [...gates, { kind: 'loop', loop }];
244
+ pushGateEdgesFor(operationId(nodeId, 'protocol', 2), inside);
245
+ const negationId = operationId(nodeId, 'computation', 0);
246
+ pushGateEdgesFor(negationId, inside);
247
+ const iteration = [
248
+ ...inside,
249
+ { kind: 'guard', guard: semanticResultId(negationId, 'value'), takenWhen: 'truthy' }
250
+ ];
251
+ // ECMA-262's own `ForOfBodyEvaluation`: the loop variable is (re)bound
252
+ // from this iteration's value only once the loop is confirmed to
253
+ // continue, immediately before the body runs -- the same `iteration`
254
+ // scope the body itself gets, not the unconditional per-iteration
255
+ // `inside` scope `next`/the negation use (those must still run on the
256
+ // final, non-continuing check). `node.initializer` is a real
257
+ // `ts.Node` (the `VariableDeclarationList` holding `value`'s own
258
+ // declaration, or a bare assignment target), so it goes through the
259
+ // ordinary generic `visit` rather than a reconstructed id.
260
+ visit(node.initializer, iteration);
261
+ visit(node.statement, iteration);
262
+ return;
263
+ }
264
+ // Not the array fast path (or the candidate never built at all): fall
265
+ // through unchanged to the ordinary generic handling below, exactly as
266
+ // for-of/for-in were handled before this branch existed.
267
+ }
268
+ emit(node, gates);
269
+ const ownBody = bodyOfOwnCaller(node);
270
+ if (ownBody) {
271
+ // A parameter's default initializer runs inside the callee's own
272
+ // activation, at call time -- exactly like the body, and never at the
273
+ // declaration site. A function declared inside an `if` still binds its
274
+ // parameters fresh on every call, so a parameter child resets the chain
275
+ // the same way the body already does; only the declaration's own
276
+ // allocation stays gated by where it was written.
277
+ forEachEvaluationChild(node, (child) => visit(child, child === ownBody || ts.isParameter(child) ? [] : gates));
278
+ return;
279
+ }
280
+ // A binding element's own default -- `const { width = 10 } = options` --
281
+ // is the same shape one level in: the initializer runs only when the
282
+ // EXTRACTION came back `undefined`, so it is gated on the extraction's
283
+ // result exactly as a parameter's is gated on its raw argument. `nullish`
284
+ // is the arm vocabulary; which absence question is asked travels on the
285
+ // predicate, and `lower-graph.ts` states `is-defined` for this guard for
286
+ // the reason it states it for a parameter: `{ a = 1 }` over `{ a: null }`
287
+ // binds `null`, never `1`.
288
+ //
289
+ // Without this the initializer's operations sit ungated in the straight
290
+ // line, so `{ canvas = createCanvasElement() }` would CALL the factory
291
+ // whether or not a canvas was supplied.
292
+ if (ts.isBindingElement(node) && node.initializer) {
293
+ forEachEvaluationChild(node, (child) => {
294
+ if (child === node.initializer)
295
+ return;
296
+ visit(child, gates);
297
+ });
298
+ visit(node.initializer, [...gates, { kind: 'guard', guard: citeExtractedElementValue(node, identities), takenWhen: 'nullish' }]);
299
+ return;
300
+ }
301
+ if (ts.isParameter(node) && node.initializer) {
302
+ // Pattern extraction runs after the parameter's default has selected
303
+ // its value; only the initializer belongs under the absence guard.
304
+ visit(node.name, gates);
305
+ visit(node.initializer, [...gates, { kind: 'guard', guard: parameterValueResultOf(node, identities), takenWhen: 'nullish' }]);
306
+ return;
307
+ }
308
+ // A `switch` is an `if`/`else if` chain over one discriminant, and it is
309
+ // gated as one: clause `i` runs when its own test held and every earlier
310
+ // test did not. `producers/control.ts` mints those tests -- one strict
311
+ // equality per `case`, keyed on the clause -- and refuses the one shape a
312
+ // chain cannot say (a `default` that is not last), so what reaches here
313
+ // is exactly the shape these gates describe. The `default` clause has no
314
+ // test of its own; its gate is every case ON THE CHAIN having failed.
315
+ //
316
+ // A clause that can fall through (`control.ts`'s `clauseTerminates`)
317
+ // hands its guard forward exactly as an empty clause does: its body sits
318
+ // on its own guard's arm, and the next clause's guard is the `||` fold
319
+ // of the two, so the next body runs when either test held -- unless the
320
+ // first body left through a `break`, which jumps to the switch's exit.
321
+ // Its guard therefore does NOT join the chain as a falsy gate, which is
322
+ // also what lets it fall into `default`: that clause runs when nothing
323
+ // on the chain held, and the guard handed forward is not on it.
324
+ if (ts.isSwitchStatement(node)) {
325
+ visit(node.expression, gates);
326
+ const chain = [...gates];
327
+ let running = null;
328
+ for (const clause of node.caseBlock.clauses) {
329
+ if (!ts.isCaseClause(clause)) {
330
+ for (const statement of clause.statements)
331
+ visit(statement, chain);
332
+ running = null;
333
+ continue;
334
+ }
335
+ const test = citeSwitchCaseTest(clause, identities);
336
+ // Within an empty-clause group, every later label is evaluated only
337
+ // if the accumulated match failed. The group's || merge itself lives
338
+ // outside that arm, so the existing logical lowering can join it.
339
+ const labelGates = running === null ? chain : [...chain, { kind: 'guard', guard: running, takenWhen: 'falsy' }];
340
+ visit(clause.expression, labelGates);
341
+ pushGateEdgesFor(operationOfResult(test), labelGates);
342
+ const guard = running === null ? test : citeSwitchGroupTest(clause, identities);
343
+ if (running !== null)
344
+ pushGateEdgesFor(operationOfResult(guard), chain);
345
+ if (clause.statements.length === 0) {
346
+ running = guard;
347
+ continue;
348
+ }
349
+ for (const statement of clause.statements)
350
+ visit(statement, [...chain, { kind: 'guard', guard, takenWhen: 'truthy' }]);
351
+ if (!clauseTerminates(clause)) {
352
+ running = guard;
353
+ continue;
354
+ }
355
+ chain.push({ kind: 'guard', guard, takenWhen: 'falsy' });
356
+ running = null;
357
+ }
358
+ return;
359
+ }
360
+ if (ts.isIfStatement(node)) {
361
+ visit(node.expression, gates);
362
+ const guard = guardOf(node.expression, facts);
363
+ // A condition with no citable result cannot gate anything. The control
364
+ // producer refuses such a branch outright, so the arms below are already
365
+ // in a blocked body; descending with the chain unchanged keeps this pass
366
+ // from inventing a gate it cannot name.
367
+ visit(node.thenStatement, guard === null ? gates : [...gates, { kind: 'guard', guard, takenWhen: 'truthy' }]);
368
+ if (node.elseStatement)
369
+ visit(node.elseStatement, guard === null ? gates : [...gates, { kind: 'guard', guard, takenWhen: 'falsy' }]);
370
+ return;
371
+ }
372
+ // An optional chain does not evaluate what is inside its own brackets when
373
+ // the guard is absent: `h.on?.(side())` never calls `side`, and `a?.[k()]`
374
+ // never calls `k`. The producers state the *operation's* own gate as a
375
+ // conditional edge, which places the call or the `[[Get]]`; this is the
376
+ // other half, because an argument list and a computed key are subtrees, and
377
+ // only a walk that knows which syntax they belong to can put them inside
378
+ // the guard. Without it every argument was hoisted above the presence test
379
+ // -- a call the source program never makes.
380
+ const chain = optionalChainSubtree(node);
381
+ if (chain) {
382
+ visit(chain.evaluated, gates);
383
+ const guard = guardOf(chain.guard, facts);
384
+ const inside = guard === null ? gates : [...gates, { kind: 'guard', guard, takenWhen: 'present' }];
385
+ for (const gated of chain.gated)
386
+ visit(gated, inside);
387
+ return;
388
+ }
389
+ if (ts.isConditionalExpression(node)) {
390
+ visit(node.condition, gates);
391
+ const guard = guardOf(node.condition, facts);
392
+ visit(node.whenTrue, guard === null ? gates : [...gates, { kind: 'guard', guard, takenWhen: 'truthy' }]);
393
+ visit(node.whenFalse, guard === null ? gates : [...gates, { kind: 'guard', guard, takenWhen: 'falsy' }]);
394
+ return;
395
+ }
396
+ // `a ||= b`: the right-hand SUBTREE is evaluated only on the branch the
397
+ // operator does not short-circuit on, exactly as `a || b`'s is. Placing
398
+ // the STORE is not this pass's job -- whoever mints the store publishes a
399
+ // `conditional` edge for it (`producers/computations.ts`'s
400
+ // `contributeLogicalAssignment` for a binding target,
401
+ // `producers/properties.ts`'s `logical-set` for a property one), the same
402
+ // division of labour `a?.b()` uses: an edge places an operation, a gate
403
+ // places a subtree. The merge itself is deliberately ungated -- it is the
404
+ // join both branches reach.
405
+ if (ts.isBinaryExpression(node) && logicalAssignmentTakenWhen(node.operatorToken.kind) !== null) {
406
+ visit(node.left, gates);
407
+ const guard = guardOf(node.left, facts);
408
+ const takenWhen = logicalAssignmentTakenWhen(node.operatorToken.kind);
409
+ visit(node.right, guard === null || takenWhen === null ? gates : [...gates, { kind: 'guard', guard, takenWhen }]);
410
+ return;
411
+ }
412
+ if (ts.isBinaryExpression(node) && shortCircuitTakenWhen(node.operatorToken.kind) !== null) {
413
+ visit(node.left, gates);
414
+ const guard = guardOf(node.left, facts);
415
+ const takenWhen = shortCircuitTakenWhen(node.operatorToken.kind);
416
+ visit(node.right, guard === null || takenWhen === null ? gates : [...gates, { kind: 'guard', guard, takenWhen }]);
417
+ return;
418
+ }
419
+ // A `while`/`for` head-tested loop is a guard plus a back edge: the condition
420
+ // and the body are both inside the iteration, and the condition's own guard
421
+ // is what separates them. Stating both is what lets the lowering put the
422
+ // condition in a block the body's end can jump back to.
423
+ //
424
+ // `for`-`of`/`for`-`in` are absent: their iteration is driven by the
425
+ // iterator protocol, not by a boolean guard. A `do`/`while` is absent for
426
+ // the opposite reason and gets its own branch just below -- gating its
427
+ // body on the condition would skip the guaranteed first iteration.
428
+ //
429
+ // A `do`/`while` is a loop scope with *no* guard between the loop and the
430
+ // body: the body runs unconditionally on entry, which is the whole of
431
+ // what "tail-tested" means. The condition then sits one scope deeper, in
432
+ // the loop's latch -- the same block a `for` incrementor gets, and for
433
+ // the same reason: it is post-body code that `continue` must re-enter at,
434
+ // since ECMA-262 14.7.2 sends `continue` to the test, not to the top of
435
+ // the body. The back edge itself is the latch's own terminator, a branch
436
+ // the flow controller builds from `loop-tail`'s condition operand; there
437
+ // is no conditional gate to state here because no operation of this loop
438
+ // is conditional on the test at all.
439
+ if (ts.isDoStatement(node)) {
440
+ const loop = operationId(identities.nodeIdOf(node), 'control', 0);
441
+ if (operations.has(loop)) {
442
+ const inside = [...gates, { kind: 'loop', loop }];
443
+ visit(node.statement, inside);
444
+ visit(node.expression, [...inside, { kind: 'loop-latch', loop }]);
445
+ return;
446
+ }
447
+ }
448
+ const head = headTestedLoopOf(node);
449
+ if (head) {
450
+ const loop = operationId(identities.nodeIdOf(node), 'control', 0);
451
+ if (operations.has(loop)) {
452
+ const inside = [...gates, { kind: 'loop', loop }];
453
+ if (head.initializer)
454
+ visit(head.initializer, gates);
455
+ if (head.condition)
456
+ visit(head.condition, inside);
457
+ const guard = head.condition ? guardOf(head.condition, facts) : null;
458
+ const iteration = guard === null ? inside : [...inside, { kind: 'guard', guard, takenWhen: 'truthy' }];
459
+ visit(head.body, iteration);
460
+ // The incrementor is inside the iteration the same way the body is,
461
+ // but it is also `continue`'s real target: ECMA-262's `ForStatement`
462
+ // evaluation re-enters at the update expression, not at the test.
463
+ // Marking its own extra scope layer is what lets the lowering give it
464
+ // a block distinct from the header -- one a `continue` inside the
465
+ // body can jump to before the condition is ever re-tested.
466
+ if (head.incrementor)
467
+ visit(head.incrementor, [...iteration, { kind: 'loop-latch', loop }]);
468
+ return;
469
+ }
470
+ }
471
+ // A try statement's three clauses are mutually exclusive scopes that share
472
+ // no boolean guard: the runtime enters at most one of `try` and `catch`
473
+ // per attempt, and `finally` is not gated by either. `RegionEdge` is what
474
+ // lets the lowering treat this exactly like a guard or a loop -- an
475
+ // ordinary `ScopeRef` the flow controller opens and closes -- instead of a
476
+ // consumer re-deriving membership from source ranges, which is precisely
477
+ // the anti-pattern `edges.ts`'s own header comment refuses.
478
+ //
479
+ // The try statement's own operation (`control.ts`'s `contributeTry`) is
480
+ // not itself inside any of its three parts, so it is left ungated here --
481
+ // `emit(node, gates)` above already tagged it with whatever scope this try
482
+ // statement itself sits in, exactly as a loop's own header operation is
483
+ // tagged with the scope surrounding the loop, not the scope inside it.
484
+ if (ts.isTryStatement(node)) {
485
+ const region = operationId(identities.nodeIdOf(node), 'control', 0);
486
+ if (operations.has(region)) {
487
+ visit(node.tryBlock, [...gates, { kind: 'region', region, part: 'try' }]);
488
+ if (node.catchClause)
489
+ visit(node.catchClause, [...gates, { kind: 'region', region, part: 'catch' }]);
490
+ if (node.finallyBlock)
491
+ visit(node.finallyBlock, [...gates, { kind: 'region', region, part: 'finally' }]);
492
+ return;
493
+ }
494
+ }
495
+ forEachEvaluationChild(node, (child) => visit(child, gates));
496
+ };
497
+ const walker = { visit, visitHere };
498
+ walkers.set(key, walker);
499
+ return walker;
500
+ };
501
+ const root = walkerFor(rootSpecialization);
502
+ for (const file of files)
503
+ for (const statement of input.reachable.statementsOf(file))
504
+ root.visit(statement, []);
505
+ return edges;
506
+ };
507
+ /** A loop whose condition is evaluated before every iteration, including the first. */
508
+ const headTestedLoopOf = (node) => {
509
+ if (ts.isWhileStatement(node)) {
510
+ return { initializer: null, condition: node.expression, body: node.statement, incrementor: null };
511
+ }
512
+ if (ts.isForStatement(node)) {
513
+ return {
514
+ initializer: node.initializer ?? null,
515
+ condition: node.condition ?? null,
516
+ body: node.statement,
517
+ incrementor: node.incrementor ?? null
518
+ };
519
+ }
520
+ return null;
521
+ };
522
+ const optionalChainSubtree = (node) => {
523
+ if (ts.isCallExpression(node) && ts.isOptionalChain(node)) {
524
+ const guard = optionalCallGuardOf(node);
525
+ return guard ? { evaluated: node.expression, guard, gated: node.arguments } : null;
526
+ }
527
+ if (ts.isElementAccessExpression(node) && ts.isOptionalChain(node)) {
528
+ const guard = optionalChainGuardOf(node);
529
+ return guard ? { evaluated: node.expression, guard, gated: [node.argumentExpression] } : null;
530
+ }
531
+ return null;
532
+ };
533
+ /**
534
+ * The side a logical ASSIGNMENT evaluates its right operand -- and performs its
535
+ * store -- on, or `null` when the operator is not one of the three.
536
+ *
537
+ * Separate from `shortCircuitTakenWhen` rather than folded into it: the two
538
+ * answers happen to coincide, but the callers do different things with them
539
+ * (one gates a subtree, the other also gates a store), and a single table
540
+ * would let a plain `a || b` fall into the store-gating branch.
541
+ */
542
+ const logicalAssignmentTakenWhen = (kind) => {
543
+ if (kind === ts.SyntaxKind.AmpersandAmpersandEqualsToken)
544
+ return 'truthy';
545
+ if (kind === ts.SyntaxKind.BarBarEqualsToken)
546
+ return 'falsy';
547
+ if (kind === ts.SyntaxKind.QuestionQuestionEqualsToken)
548
+ return 'nullish';
549
+ return null;
550
+ };
551
+ /** The side a short-circuit operator evaluates its right operand on, or `null` when it is not one. */
552
+ const shortCircuitTakenWhen = (kind) => {
553
+ if (kind === ts.SyntaxKind.AmpersandAmpersandToken)
554
+ return 'truthy';
555
+ if (kind === ts.SyntaxKind.BarBarToken)
556
+ return 'falsy';
557
+ if (kind === ts.SyntaxKind.QuestionQuestionToken)
558
+ return 'nullish';
559
+ return null;
560
+ };
@@ -0,0 +1,31 @@
1
+ import ts from 'typescript';
2
+ /**
3
+ * The generic source functions a value expression is a CHOICE among.
4
+ *
5
+ * `const setOriginal = flags & NoOriginalNode ? identity : setOriginalNode`
6
+ * (TypeScript's `nodeFactory.ts`) holds one of two generic functions, decided
7
+ * at runtime. The checker's declared type for the binding is NOT that choice:
8
+ * `typeof identity` is a subtype of `typeof setOriginalNode` (fewer parameters,
9
+ * an unconstrained `T`), so union subtype reduction leaves `typeof
10
+ * setOriginalNode` alone, and every call through the binding resolves to
11
+ * `setOriginalNode`'s own signature -- run as an exact call to it, the
12
+ * program silently sets `original` on the branch that chose `identity`.
13
+ *
14
+ * The choice is a fact about the VALUE's flow, read here from the initializer's
15
+ * own arms: a conditional, a `||`/`??`, parentheses and erasures, down to
16
+ * names of module-level generic function declarations with a body (the same
17
+ * predicate `structural.ts`'s `genericSourceFunctionOf` states for a single
18
+ * member's type). A `const` with no annotation holds exactly its initializer,
19
+ * so a name resolving to one is the same choice; anything else -- a `let`, an
20
+ * annotation, a non-generic arm, a nested closure -- is not, and answers
21
+ * `null`. Two or more DISTINCT members make a choice; one is the function.
22
+ *
23
+ * One rule, asked by every reader: `structural.ts` types the binding, its
24
+ * reads and the choice expression itself as the union of the members' open
25
+ * types (which derives to `generic-function-set`); `specialization.ts` mints
26
+ * every member's copy at each call through it; `producers/invocations.ts`
27
+ * publishes the `closed-family` target those copies form.
28
+ */
29
+ export declare const genericFunctionChoiceMembersOf: (checker: ts.TypeChecker, node: ts.Node) => readonly ts.FunctionDeclaration[] | null;
30
+ /** The one member a name denotes, when it denotes a generic source function outright. */
31
+ export declare const genericSourceFunctionDeclarationOf: (declaration: ts.Declaration) => ts.FunctionDeclaration | null;