@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,39 @@
1
+ import type { NodeId, OperationFamily, OperationId, ResultRole, StructuralTypeId } from '../../../identity/ids.js';
2
+ import type { CensusBlocker } from '../../model/coverage.js';
3
+ import type { OperandEvaluation, OperandSource, SemanticCaller, SemanticOperand, SemanticResult } from '../../model/operands.js';
4
+ import type { PrimitiveFamily } from '../../model/coverage.js';
5
+ /**
6
+ * Shared minting helpers for family producers.
7
+ *
8
+ * One AST node can normalize to several operations, and the ordinal is what
9
+ * keeps them apart. Producers must allocate ordinals from a single counter per
10
+ * node so that two producers cannot mint the same identity for different
11
+ * operations -- which would silently merge two operations into one.
12
+ */
13
+ export interface OrdinalCounter {
14
+ readonly next: (source: NodeId, family: OperationFamily) => number;
15
+ }
16
+ export declare const createOrdinalCounter: () => OrdinalCounter;
17
+ /**
18
+ * Per-caller evaluation sequencing.
19
+ *
20
+ * Evaluation order is a property of the executing context, not of the family
21
+ * that happens to be publishing. One counter per caller shared by every producer
22
+ * is what keeps two families from handing out the same ordinal inside one
23
+ * function -- which would give two distinct operations one identity.
24
+ */
25
+ export interface EvaluationOrdinals {
26
+ readonly next: (caller: SemanticCaller) => number;
27
+ }
28
+ export declare const createEvaluationOrdinals: () => EvaluationOrdinals;
29
+ export declare const mintOperationId: (counter: OrdinalCounter, source: NodeId, family: OperationFamily) => OperationId;
30
+ export declare const mintResult: (operation: OperationId, role: ResultRole, type: StructuralTypeId) => SemanticResult;
31
+ export declare const operand: (role: string, ordinal: number, source: OperandSource, type: StructuralTypeId, evaluation?: OperandEvaluation) => SemanticOperand;
32
+ /**
33
+ * A blocker states a missing capability, not a source shape.
34
+ *
35
+ * "cannot normalize `foo.bar` in file X" is not a blocker: it names a site. The
36
+ * blocker must name what the compiler cannot yet do, so that fixing it fixes
37
+ * every site at once.
38
+ */
39
+ export declare const blocked: (source: NodeId, family: OperationFamily, reason: string, missingPrimitive: PrimitiveFamily | null) => CensusBlocker;
@@ -0,0 +1,44 @@
1
+ import { operationId, semanticResultId } from '../../../identity/ids.js';
2
+ export const createOrdinalCounter = () => {
3
+ const used = new Map();
4
+ return {
5
+ next: (source, family) => {
6
+ const key = `${source}|${family}`;
7
+ const ordinal = used.get(key) ?? 0;
8
+ used.set(key, ordinal + 1);
9
+ return ordinal;
10
+ }
11
+ };
12
+ };
13
+ const callerKey = (caller) => (caller.kind === 'function' ? `fn|${caller.functionId}` : `region|${caller.regionId}`);
14
+ export const createEvaluationOrdinals = () => {
15
+ const used = new Map();
16
+ return {
17
+ next: (caller) => {
18
+ const key = callerKey(caller);
19
+ const ordinal = used.get(key) ?? 0;
20
+ used.set(key, ordinal + 1);
21
+ return ordinal;
22
+ }
23
+ };
24
+ };
25
+ export const mintOperationId = (counter, source, family) => operationId(source, family, counter.next(source, family));
26
+ export const mintResult = (operation, role, type) => ({
27
+ id: semanticResultId(operation, role),
28
+ role,
29
+ type
30
+ });
31
+ export const operand = (role, ordinal, source, type, evaluation = { kind: 'runtime' }) => ({ role, ordinal, source, type, evaluation });
32
+ /**
33
+ * A blocker states a missing capability, not a source shape.
34
+ *
35
+ * "cannot normalize `foo.bar` in file X" is not a blocker: it names a site. The
36
+ * blocker must name what the compiler cannot yet do, so that fixing it fixes
37
+ * every site at once.
38
+ */
39
+ export const blocked = (source, family, reason, missingPrimitive) => ({
40
+ source,
41
+ family,
42
+ reason,
43
+ missingPrimitive
44
+ });
@@ -0,0 +1,16 @@
1
+ import ts from 'typescript';
2
+ /**
3
+ * Whether a type can never be `null` or `undefined`.
4
+ *
5
+ * `any`/`unknown` do not count: neither rules out either value, so a proof
6
+ * built on them is not a proof. `void` does not count either -- a `void` in a
7
+ * stored position is `undefined`, and treating it as a non-nullish type is how
8
+ * an absent value passes for a present one.
9
+ *
10
+ * Two questions in this compiler turn on it, and they must agree. A property
11
+ * access asks it of a receiver to decide whether the `[[Get]]` can throw
12
+ * (`properties.ts`), and both halves of an optional chain ask it of a declared
13
+ * type to decide whether the `undefined` the checker put on their result is the
14
+ * operator's own -- and so removable -- or the declaration's, and not.
15
+ */
16
+ export declare const excludesNullish: (type: ts.Type) => boolean;
@@ -0,0 +1,27 @@
1
+ import ts from 'typescript';
2
+ /**
3
+ * Whether a type can never be `null` or `undefined`.
4
+ *
5
+ * `any`/`unknown` do not count: neither rules out either value, so a proof
6
+ * built on them is not a proof. `void` does not count either -- a `void` in a
7
+ * stored position is `undefined`, and treating it as a non-nullish type is how
8
+ * an absent value passes for a present one.
9
+ *
10
+ * Two questions in this compiler turn on it, and they must agree. A property
11
+ * access asks it of a receiver to decide whether the `[[Get]]` can throw
12
+ * (`properties.ts`), and both halves of an optional chain ask it of a declared
13
+ * type to decide whether the `undefined` the checker put on their result is the
14
+ * operator's own -- and so removable -- or the declaration's, and not.
15
+ */
16
+ export const excludesNullish = (type) => {
17
+ const constituents = type.isUnion() ? type.types : [type];
18
+ const nullishOrUnproven = ts.TypeFlags.Null |
19
+ ts.TypeFlags.Undefined |
20
+ ts.TypeFlags.Void |
21
+ ts.TypeFlags.Any |
22
+ ts.TypeFlags.Unknown |
23
+ ts.TypeFlags.TypeParameter |
24
+ ts.TypeFlags.Conditional |
25
+ ts.TypeFlags.IndexedAccess;
26
+ return constituents.every((member) => (member.flags & nullishOrUnproven) === 0);
27
+ };
@@ -0,0 +1,8 @@
1
+ import ts from 'typescript';
2
+ import { type ObjectAssignmentElement } from '../assignment-patterns.js';
3
+ import type { CensusCandidate } from '../census.js';
4
+ import type { CandidateContribution } from '../contribution.js';
5
+ import type { ProducerContext } from '../producer-context.js';
6
+ /** Assignment patterns use the same reads and writes as ordinary expressions. */
7
+ export declare const contributeObjectAssignmentSource: (context: ProducerContext, candidate: CensusCandidate, node: ts.ObjectLiteralExpression) => CandidateContribution;
8
+ export declare const contributeObjectAssignmentElement: (context: ProducerContext, candidate: CensusCandidate, node: ObjectAssignmentElement) => CandidateContribution;
@@ -0,0 +1,204 @@
1
+ import ts from 'typescript';
2
+ import { operationId, regionId, semanticResultId } from '../../../identity/ids.js';
3
+ import { normalCompletion, throwingCompletion, pureEffects } from '../../model/operands.js';
4
+ import { objectAssignmentSource } from '../assignment-patterns.js';
5
+ import { memberTypeOf } from '../derived-expression-type.js';
6
+ import { bindingKindOf } from './binding-kind.js';
7
+ import { unwrapErasedExpression } from './erasure.js';
8
+ import { mintOperationId, mintResult, operand } from './mint.js';
9
+ import { citeExpressionResult } from './references.js';
10
+ import { asBlocked, isStrictContext, valueEdgesInto } from './shared.js';
11
+ /**
12
+ * This object pattern's own source, in whichever of the two shapes it
13
+ * takes: an ordinary `=` right-hand side (`objectAssignmentSource`), or a
14
+ * for-of LOOP-HEAD pattern (`for ({ x, y } of points)`), which has no `=` at
15
+ * all -- ECMA-262 assigns it from the loop's own IteratorStep, cited by the
16
+ * SAME fixed ordinal `producers/destructuring.ts`'s `arrayAssignmentSourceInfo`
17
+ * already cites for the array-literal sibling of this identical shape
18
+ * (`mintIteratorSteps` reserves `next` at ordinal 2 for exactly this). The
19
+ * loop's own ITERABLE states the per-iteration element -- never the pattern
20
+ * node's own checker type, which for a literal written as an assignment
21
+ * target is a contextually-typed shape matching the TARGET, not the source,
22
+ * the same trap that function's header documents at length.
23
+ *
24
+ * A NESTED object pattern (`{ a: { b } } = ...`) is still refused: its
25
+ * source is another element's own resolved value, which this producer has
26
+ * no citation for yet, exactly as before this loop-head shape was added.
27
+ */
28
+ const objectAssignmentSourceOf = (context, pattern) => {
29
+ const direct = objectAssignmentSource(pattern);
30
+ if (direct) {
31
+ const cited = citeExpressionResult(direct, context);
32
+ if (cited.kind === 'unmodelled')
33
+ return null;
34
+ return {
35
+ source: cited.source,
36
+ structuralType: context.types.typeAt(direct),
37
+ rawType: context.checker.getNonNullableType(context.types.rawTypeAt(direct))
38
+ };
39
+ }
40
+ const parent = pattern.parent;
41
+ if (!ts.isForOfStatement(parent) || parent.initializer !== pattern)
42
+ return null;
43
+ const id = operationId(context.identities.nodeIdOf(parent), 'protocol', 2);
44
+ const iterableRaw = context.checker.getNonNullableType(context.types.rawTypeAt(parent.expression));
45
+ const elementRaw = context.checker.getIndexTypeOfType(iterableRaw, ts.IndexKind.Number);
46
+ if (!elementRaw)
47
+ return null;
48
+ const nonNullElement = context.checker.getNonNullableType(elementRaw);
49
+ return {
50
+ source: { kind: 'result', result: semanticResultId(id, 'value') },
51
+ structuralType: context.types.typeOf(elementRaw),
52
+ rawType: nonNullElement
53
+ };
54
+ };
55
+ /** Assignment patterns use the same reads and writes as ordinary expressions. */
56
+ export const contributeObjectAssignmentSource = (context, candidate, node) => {
57
+ if (node.properties.some((property) => !ts.isPropertyAssignment(property) && !ts.isShorthandPropertyAssignment(property))) {
58
+ return asBlocked(candidate.id, 'destructuring', 'rest properties in object assignment are not yet modelled', null);
59
+ }
60
+ const info = objectAssignmentSourceOf(context, node);
61
+ if (!info)
62
+ return asBlocked(candidate.id, 'destructuring', 'nested object assignment sources are not yet modelled', null);
63
+ const id = mintOperationId(context.ordinals, candidate.id, 'destructuring');
64
+ const op = {
65
+ id,
66
+ family: 'destructuring',
67
+ form: 'object-source',
68
+ caller: candidate.caller,
69
+ evaluationOrdinal: candidate.evaluationOrdinal,
70
+ operands: [operand('base', 0, info.source, info.structuralType)],
71
+ results: [mintResult(id, 'value', info.structuralType)],
72
+ completion: throwingCompletion,
73
+ effects: pureEffects
74
+ };
75
+ return { kind: 'operations', operations: [op], edges: valueEdgesInto(id, op.operands) };
76
+ };
77
+ const staticPropertyName = (name) => ts.isIdentifier(name) || ts.isStringLiteralLike(name) || ts.isNumericLiteral(name) ? name.text : null;
78
+ export const contributeObjectAssignmentElement = (context, candidate, node) => {
79
+ const refuse = (reason) => asBlocked(candidate.id, 'destructuring', reason, null);
80
+ const pattern = node.parent;
81
+ if (!ts.isObjectLiteralExpression(pattern))
82
+ return refuse('object assignment element has no object pattern');
83
+ const info = objectAssignmentSourceOf(context, pattern);
84
+ if (!info)
85
+ return refuse('nested object assignment sources are not yet modelled');
86
+ if (ts.isShorthandPropertyAssignment(node) && node.objectAssignmentInitializer)
87
+ return refuse('defaulted object assignment is not yet modelled');
88
+ const target = unwrapErasedExpression(ts.isPropertyAssignment(node) ? node.initializer : node.name);
89
+ if (!ts.isIdentifier(target) && !ts.isPropertyAccessExpression(target) && !ts.isElementAccessExpression(target)) {
90
+ return refuse('object assignment target requires a name or a property reference; defaults and nested patterns are not yet modelled');
91
+ }
92
+ const key = staticPropertyName(node.name);
93
+ if (key === null)
94
+ return refuse('computed object assignment source keys are not yet modelled');
95
+ const stringType = context.table.intern({ kind: 'primitive', primitive: 'string' });
96
+ const sourceType = info.structuralType;
97
+ const rawSource = info.rawType;
98
+ const rawMember = memberTypeOf(context.checker, rawSource, key, node) ?? context.checker.getIndexTypeOfType(rawSource, ts.IndexKind.String);
99
+ // The extracted property's type belongs to the source, not to the target
100
+ // slot. A real conversion between those two is audited at the store.
101
+ const extractedType = context.types.typeOf(rawMember ?? ((rawSource.flags & ts.TypeFlags.Any) !== 0 ? rawSource : context.checker.getUndefinedType()));
102
+ const sourceResult = semanticResultId(operationId(context.identities.nodeIdOf(pattern), 'destructuring', 0), 'value');
103
+ const getId = mintOperationId(context.ordinals, candidate.id, 'destructuring');
104
+ const get = {
105
+ id: getId,
106
+ family: 'destructuring',
107
+ form: 'object-pattern',
108
+ caller: candidate.caller,
109
+ evaluationOrdinal: candidate.evaluationOrdinal,
110
+ operands: [
111
+ operand('base', 0, { kind: 'result', result: sourceResult }, sourceType),
112
+ operand('key', 0, { kind: 'constant', text: key, literal: 'string' }, stringType)
113
+ ],
114
+ results: [mintResult(getId, 'value', extractedType)],
115
+ completion: throwingCompletion,
116
+ effects: { readsMutableState: true, writesMutableState: false, allocates: false, callsUserCode: true }
117
+ };
118
+ const value = { kind: 'result', result: semanticResultId(getId, 'value') };
119
+ let write;
120
+ if (ts.isIdentifier(target)) {
121
+ // Shorthand keys have their own symbol. The value symbol names the cell.
122
+ const symbol = ts.isShorthandPropertyAssignment(node)
123
+ ? context.checker.getShorthandAssignmentValueSymbol(node)
124
+ : context.checker.getSymbolAtLocation(target);
125
+ const declaration = symbol ? context.identities.symbolDeclarationId(symbol) : null;
126
+ const declarationNode = symbol ? context.identities.declarationOfSymbol(symbol) : null;
127
+ if (!declaration || !declarationNode)
128
+ return refuse('object assignment target has no declared binding cell');
129
+ const id = mintOperationId(context.ordinals, candidate.id, 'binding');
130
+ const targetType = context.types.typeAt(target);
131
+ write = {
132
+ id,
133
+ family: 'binding',
134
+ action: 'write',
135
+ declaration,
136
+ ...bindingKindOf(declarationNode),
137
+ ...(context.commonJsBindings.has(declaration)
138
+ ? {
139
+ commonJs: {
140
+ global: context.commonJsBindings.get(declaration),
141
+ owner: regionId(context.identities.nodeIdOf(target.getSourceFile()), 'module-body')
142
+ }
143
+ }
144
+ : {}),
145
+ caller: candidate.caller,
146
+ evaluationOrdinal: candidate.evaluationOrdinal,
147
+ operands: [operand('value', 0, value, targetType)],
148
+ results: [mintResult(id, 'value', targetType)],
149
+ completion: normalCompletion,
150
+ effects: { ...pureEffects, writesMutableState: true }
151
+ };
152
+ }
153
+ else {
154
+ const receiver = citeExpressionResult(target.expression, context);
155
+ if (receiver.kind === 'unmodelled')
156
+ return refuse(receiver.reason);
157
+ const targetKey = ts.isPropertyAccessExpression(target)
158
+ ? target.name.text
159
+ : ts.isStringLiteralLike(target.argumentExpression) || ts.isNumericLiteral(target.argumentExpression)
160
+ ? target.argumentExpression.text
161
+ : null;
162
+ if (targetKey === null)
163
+ return refuse('computed object assignment target keys are not yet modelled');
164
+ const id = mintOperationId(context.ordinals, candidate.id, 'property');
165
+ const receiverType = context.types.typeAt(target.expression);
166
+ write = {
167
+ id,
168
+ family: 'property',
169
+ internalMethod: 'set',
170
+ strict: isStrictContext(target, context.buildIsStrict),
171
+ keyIsComputed: false,
172
+ descriptor: null,
173
+ caller: candidate.caller,
174
+ evaluationOrdinal: candidate.evaluationOrdinal,
175
+ operands: [
176
+ operand('receiver', 0, receiver.source, receiverType, { kind: 'provenance' }),
177
+ operand('key', 0, { kind: 'constant', text: targetKey, literal: 'string' }, stringType),
178
+ operand('value', 0, value, extractedType)
179
+ ],
180
+ results: [mintResult(id, 'value', receiverType)],
181
+ completion: throwingCompletion,
182
+ effects: { readsMutableState: false, writesMutableState: true, allocates: false, callsUserCode: true }
183
+ };
184
+ }
185
+ const edges = [
186
+ ...valueEdgesInto(getId, get.operands),
187
+ ...valueEdgesInto(write.id, write.operands),
188
+ { kind: 'evaluation', from: getId, to: write.id }
189
+ ];
190
+ // The write orders BEFORE the enclosing `=` expression's own value -- real
191
+ // only when this pattern IS the left side of one (`({ a } = src)` reads as
192
+ // the whole expression producing `src`, so every write must precede that).
193
+ // A for-of LOOP-HEAD pattern has no such enclosing expression at all: the
194
+ // pattern is the loop's own initializer, and citing a nonexistent
195
+ // `computation` operation at the loop statement's node id pointed this
196
+ // edge at whatever real operation happens to share that identity instead
197
+ // -- silently, and only visible as an unrelated evaluation-graph cycle at
198
+ // lowering.
199
+ const assignmentSource = objectAssignmentSource(pattern);
200
+ if (assignmentSource) {
201
+ edges.push({ kind: 'evaluation', from: write.id, to: operationId(context.identities.nodeIdOf(pattern.parent), 'computation', 0) });
202
+ }
203
+ return { kind: 'operations', operations: [get, write], edges };
204
+ };
@@ -0,0 +1,9 @@
1
+ import ts from 'typescript';
2
+ import type { CensusCandidate } from '../census.js';
3
+ import type { CandidateContribution } from '../contribution.js';
4
+ import type { ProducerContext } from '../producer-context.js';
5
+ /** Authenticate the borrowed algorithm while declarations and mutation facts exist. */
6
+ export declare const isAuthenticatedObjectTag: (context: ProducerContext, node: ts.Node) => node is ts.CallExpression;
7
+ export declare const contributeObjectTag: (context: ProducerContext, candidate: CensusCandidate, node: ts.Node) => CandidateContribution | null;
8
+ /** Proven intrinsic callee reads are consumed by the ObjectTag algorithm itself. */
9
+ export declare const isObjectTagCalleePart: (context: ProducerContext, node: ts.Node) => boolean;
@@ -0,0 +1,119 @@
1
+ import { outermostErasureOf } from './erasure.js';
2
+ import ts from 'typescript';
3
+ import { throwingCompletion } from '../../model/operands.js';
4
+ import { isGlobalObjectConstructor } from '../derived-expression-type.js';
5
+ import { mintOperationId, mintResult, operand } from './mint.js';
6
+ import { sourceForValue, unwrapErased, valueEdgesInto } from './shared.js';
7
+ import { intactIntrinsicPrototypeKeysType } from '../intrinsic-prototype.js';
8
+ import { intrinsicObjectKeysIntact } from '../host-mutation-keys.js';
9
+ /** Authenticate the borrowed algorithm while declarations and mutation facts exist. */
10
+ export const isAuthenticatedObjectTag = (context, node) => {
11
+ if (!ts.isCallExpression(node) || ts.isOptionalChain(node) || node.arguments.some(ts.isSpreadElement))
12
+ return false;
13
+ const call = unwrapErased(node.expression);
14
+ if (!ts.isPropertyAccessExpression(call) || call.name.text !== 'call')
15
+ return false;
16
+ const method = unwrapErased(call.expression);
17
+ if (!ts.isPropertyAccessExpression(method) || method.name.text !== 'toString')
18
+ return false;
19
+ const prototype = unwrapErased(method.expression);
20
+ if (!ts.isPropertyAccessExpression(prototype) || prototype.name.text !== 'prototype')
21
+ return false;
22
+ const owner = prototype.expression;
23
+ if (!isGlobalObjectConstructor(context.checker, owner, context.checker.getTypeAtLocation(owner)))
24
+ return false;
25
+ const taint = context.globalHostMutationTaint;
26
+ if (taint.has('*'))
27
+ return false;
28
+ // Function.call and CallableFunction.call have distinct checker declarations
29
+ // but borrow the same runtime prototype. Ask its shared mutation identity,
30
+ // for the one key this borrowing reads from it.
31
+ if (intactIntrinsicPrototypeKeysType(context, 'Function', { names: ['call'] }, owner) === null)
32
+ return false;
33
+ // Each link reads one key: `Object.prototype`, then its `toString`, then
34
+ // that function's `call`. A member link must not have been replaced; an
35
+ // owner link must not have had the next key written.
36
+ const keyReadThrough = new Map([
37
+ [owner, 'prototype'],
38
+ [prototype.name, 'toString'],
39
+ [method.name, 'call']
40
+ ]);
41
+ for (const location of [owner, prototype.name, method.name, call.name]) {
42
+ const symbol = context.checker.getSymbolAtLocation(location);
43
+ const declarations = location === owner ? (symbol?.valueDeclaration ? [symbol.valueDeclaration] : []) : (symbol?.declarations ?? []);
44
+ if (declarations.length === 0 || !declarations.every((declaration) => context.isStandardLibraryDeclaration?.(declaration) === true))
45
+ return false;
46
+ const identity = symbol
47
+ ? location === owner
48
+ ? context.identities.symbolValueDeclarationId(symbol, owner)
49
+ : context.identities.symbolDeclarationId(symbol)
50
+ : null;
51
+ if (identity === null)
52
+ return false;
53
+ const next = keyReadThrough.get(location);
54
+ // The owner and `Object.prototype` are objects read through by key; the
55
+ // member declarations are values that must not have been replaced.
56
+ const objectIntact = next === undefined || intrinsicObjectKeysIntact(taint, identity, { names: [next] });
57
+ const replaced = location !== owner && location !== prototype.name && taint.has(identity);
58
+ if (!objectIntact || replaced)
59
+ return false;
60
+ }
61
+ const primitivePrototypesIntact = (type) => {
62
+ if (type.isUnion())
63
+ return type.types.every(primitivePrototypesIntact);
64
+ const flags = type.flags;
65
+ const names = (flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) !== 0
66
+ ? ['Number', 'String', 'Boolean', 'BigInt', 'Symbol']
67
+ : (flags & ts.TypeFlags.NumberLike) !== 0
68
+ ? ['Number']
69
+ : (flags & ts.TypeFlags.StringLike) !== 0
70
+ ? ['String']
71
+ : (flags & ts.TypeFlags.BooleanLike) !== 0
72
+ ? ['Boolean']
73
+ : (flags & ts.TypeFlags.BigIntLike) !== 0
74
+ ? ['BigInt']
75
+ : (flags & ts.TypeFlags.ESSymbolLike) !== 0
76
+ ? ['Symbol']
77
+ : [];
78
+ // A primitive receiver's tag is read from its wrapper prototype's @@toStringTag.
79
+ return names.every((name) => intactIntrinsicPrototypeKeysType(context, name, { names: ['@@toStringTag'] }, node) !== null);
80
+ };
81
+ const receiver = node.arguments[0];
82
+ return !receiver || primitivePrototypesIntact(context.checker.getTypeAtLocation(receiver));
83
+ };
84
+ export const contributeObjectTag = (context, candidate, node) => {
85
+ if (!isAuthenticatedObjectTag(context, node))
86
+ return null;
87
+ // Preserve the invocation candidate's published identity: callers already cite it.
88
+ // Authentication changes the operation's algorithm, not the source expression.
89
+ const id = mintOperationId(context.ordinals, candidate.id, 'invocation');
90
+ const args = node.arguments;
91
+ const receiver = args[0];
92
+ const receiverIsVoid = receiver !== undefined && (context.checker.getTypeAtLocation(receiver).flags & ts.TypeFlags.Void) !== 0;
93
+ const operands = [
94
+ receiver && !receiverIsVoid
95
+ ? operand('operand', 0, sourceForValue(context, receiver), context.types.typeAt(receiver))
96
+ : operand('operand', 0, { kind: 'constant', text: 'undefined', literal: 'undefined' }, context.types.typeOf(context.checker.getUndefinedType())),
97
+ ...(receiverIsVoid ? args : args.slice(1)).map((argument, index) => operand('ignored-argument', index, sourceForValue(context, argument), context.types.typeAt(argument)))
98
+ ];
99
+ const operation = {
100
+ id,
101
+ family: 'computation',
102
+ caller: candidate.caller,
103
+ form: 'unary',
104
+ operator: 'ObjectTag',
105
+ operands,
106
+ results: [mintResult(id, 'value', context.types.typeOf(context.checker.getStringType()))],
107
+ completion: throwingCompletion,
108
+ effects: { readsMutableState: true, writesMutableState: false, allocates: false, callsUserCode: true },
109
+ evaluationOrdinal: candidate.evaluationOrdinal
110
+ };
111
+ return { kind: 'operations', operations: [operation], edges: valueEdgesInto(id, operands) };
112
+ };
113
+ /** Proven intrinsic callee reads are consumed by the ObjectTag algorithm itself. */
114
+ export const isObjectTagCalleePart = (context, node) => {
115
+ let current = outermostErasureOf(node);
116
+ while (ts.isPropertyAccessExpression(current.parent) && current.parent.expression === current)
117
+ current = outermostErasureOf(current.parent);
118
+ return ts.isCallExpression(current.parent) && current.parent.expression === current && isAuthenticatedObjectTag(context, current.parent);
119
+ };
@@ -0,0 +1,44 @@
1
+ import ts from 'typescript';
2
+ /**
3
+ * Which link of an optional chain answers for the whole chain, and what it
4
+ * branches on.
5
+ *
6
+ * Three producers ask this -- `properties.ts` builds the gated `[[Get]]`,
7
+ * `invocations.ts` builds the gated `[[Call]]`, and `references.ts` decides
8
+ * which of a link's two results a citer gets -- and they must agree exactly. A
9
+ * link that publishes a `short-circuit` result nobody cites leaves a value
10
+ * unread; a citer that asks for one nobody published names a result no producer
11
+ * installed, which the publication guard withholds silently. So the rule lives
12
+ * here once rather than as three spellings of it.
13
+ */
14
+ /**
15
+ * The nearest optional link's base, shared by every operation in that chain.
16
+ * ECMA-262 (2025), OptionalExpression / ChainEvaluation: plain suffixes keep
17
+ * the original short-circuit condition; only another ?. introduces a new one.
18
+ * Parentheses end a chain, so the walk follows the checker's OptionalChain
19
+ * flags instead of erasing expression wrappers before asking the question.
20
+ */
21
+ export declare const optionalChainGuardOf: (node: ts.Node) => ts.Expression | null;
22
+ export declare const optionalCallGuardOf: (node: ts.CallExpression) => ts.Expression | null;
23
+ /** Every value-producing link publishes the whole expression's undefined arm. */
24
+ export declare const publishesShortCircuit: (node: ts.Node) => boolean;
25
+ /**
26
+ * What a call's signature returns on the branch where it actually ran.
27
+ *
28
+ * The checker augments the signature it resolves for an optional call: ask
29
+ * `d?.scale(2)` for its resolved return and it answers `number | undefined`,
30
+ * not `number`. That `undefined` is the *chain's*, not the method's -- the
31
+ * method returns `number` and never runs at all on the other branch -- so a
32
+ * consumer that believes it builds a callee carrier the callee does not have,
33
+ * and the store of the real method into it has no conversion.
34
+ *
35
+ * The strip is licensed rather than assumed, exactly as `presentValueTypeOf`
36
+ * licenses the property half: the signature is asked for its *own* declared
37
+ * return, uninstantiated by any call site, and the `undefined` is removed only
38
+ * when that has none of its own. A signature with no declaration, an inferred
39
+ * return this cannot re-ask, or a genuinely `undefined`-returning one keeps the
40
+ * union -- wider than the truth, and never narrower than it.
41
+ */
42
+ export declare const presentReturnTypeOf: (checker: ts.TypeChecker, signature: ts.Signature) => ts.Type;
43
+ /** Whether this call is one whose resolved signature the checker augmented with the chain's `undefined`. */
44
+ export declare const isShortCircuitingCall: (call: ts.CallExpression | ts.NewExpression | ts.TaggedTemplateExpression) => boolean;
@@ -0,0 +1,75 @@
1
+ import ts from 'typescript';
2
+ import { excludesNullish } from './nullish.js';
3
+ /**
4
+ * Which link of an optional chain answers for the whole chain, and what it
5
+ * branches on.
6
+ *
7
+ * Three producers ask this -- `properties.ts` builds the gated `[[Get]]`,
8
+ * `invocations.ts` builds the gated `[[Call]]`, and `references.ts` decides
9
+ * which of a link's two results a citer gets -- and they must agree exactly. A
10
+ * link that publishes a `short-circuit` result nobody cites leaves a value
11
+ * unread; a citer that asks for one nobody published names a result no producer
12
+ * installed, which the publication guard withholds silently. So the rule lives
13
+ * here once rather than as three spellings of it.
14
+ */
15
+ /**
16
+ * The nearest optional link's base, shared by every operation in that chain.
17
+ * ECMA-262 (2025), OptionalExpression / ChainEvaluation: plain suffixes keep
18
+ * the original short-circuit condition; only another ?. introduces a new one.
19
+ * Parentheses end a chain, so the walk follows the checker's OptionalChain
20
+ * flags instead of erasing expression wrappers before asking the question.
21
+ */
22
+ export const optionalChainGuardOf = (node) => {
23
+ if (!ts.isOptionalChain(node))
24
+ return null;
25
+ if (ts.isNonNullExpression(node))
26
+ return optionalChainGuardOf(node.expression);
27
+ if (node.questionDotToken !== undefined)
28
+ return node.expression;
29
+ return optionalChainGuardOf(node.expression);
30
+ };
31
+ export const optionalCallGuardOf = (node) => optionalChainGuardOf(node);
32
+ /** Every value-producing link publishes the whole expression's undefined arm. */
33
+ export const publishesShortCircuit = (node) => optionalChainGuardOf(node) !== null;
34
+ /**
35
+ * What a call's signature returns on the branch where it actually ran.
36
+ *
37
+ * The checker augments the signature it resolves for an optional call: ask
38
+ * `d?.scale(2)` for its resolved return and it answers `number | undefined`,
39
+ * not `number`. That `undefined` is the *chain's*, not the method's -- the
40
+ * method returns `number` and never runs at all on the other branch -- so a
41
+ * consumer that believes it builds a callee carrier the callee does not have,
42
+ * and the store of the real method into it has no conversion.
43
+ *
44
+ * The strip is licensed rather than assumed, exactly as `presentValueTypeOf`
45
+ * licenses the property half: the signature is asked for its *own* declared
46
+ * return, uninstantiated by any call site, and the `undefined` is removed only
47
+ * when that has none of its own. A signature with no declaration, an inferred
48
+ * return this cannot re-ask, or a genuinely `undefined`-returning one keeps the
49
+ * union -- wider than the truth, and never narrower than it.
50
+ */
51
+ // Deliberately checker-only, not a bypass to route through a census: both
52
+ // callers (`producers/shared.ts`'s `resolvedCalleeSignatureType`,
53
+ // `producers/invocations.ts`'s `buildSelectedSignature`) already reconcile
54
+ // a census answer around this -- `invocations.ts`'s own extensive comment on
55
+ // `censusReturn`/`siteReturn` covers exactly why this stays the checker's raw
56
+ // SIGNATURE answer (this callee's own declared shape, stripped of the
57
+ // chain's synthetic `undefined`) rather than a second place asking the same
58
+ // return-binding question the census already owns downstream.
59
+ export const presentReturnTypeOf = (checker, signature) => {
60
+ const returned = signature.getReturnType();
61
+ const declaration = signature.getDeclaration();
62
+ const declared = declaration ? checker.getSignatureFromDeclaration(declaration) : undefined;
63
+ // `void | undefined` describes the chain's value, but `() => void` is the
64
+ // method's ABI. Normalizing that union as a stored value would publish an
65
+ // undefined-returning callable and make the actual void method unassignable.
66
+ // An explicitly void signature has no type parameters in its result to
67
+ // instantiate, so its declaration is also the exact present-branch answer.
68
+ if (declared && (declared.getReturnType().flags & ts.TypeFlags.Void) !== 0)
69
+ return declared.getReturnType();
70
+ if (!declared || !excludesNullish(declared.getReturnType()))
71
+ return returned;
72
+ return checker.getNonNullableType(returned);
73
+ };
74
+ /** Whether this call is one whose resolved signature the checker augmented with the chain's `undefined`. */
75
+ export const isShortCircuitingCall = (call) => ts.isCallExpression(call) && optionalCallGuardOf(call) !== null;
@@ -0,0 +1,21 @@
1
+ import ts from 'typescript';
2
+ import { type StructuralTypeId } from '../../../identity/ids.js';
3
+ import type { FamilyProducer } from '../contribution.js';
4
+ import type { ProducerContext } from '../producer-context.js';
5
+ type AccessNode = ts.PropertyAccessExpression | ts.ElementAccessExpression;
6
+ /**
7
+ * The value type published for this exact property expression.
8
+ *
9
+ * Consumers cite the property producer's result by identity, so they must cite
10
+ * its type from the same rule as well. In particular, an indexed dictionary
11
+ * read can publish `T | undefined` even when TypeScript's unchecked index
12
+ * signature reports only `T`; asking the checker again at a conditional merge
13
+ * erases the missing-key state the property operation deliberately restored.
14
+ * Optional chains cite their whole-expression result, including the synthetic
15
+ * `undefined` branch, rather than the present-only internal `[[Get]]` result.
16
+ */
17
+ export declare const propertyExpressionValueTypeAt: (context: ProducerContext, node: AccessNode) => StructuralTypeId;
18
+ /** Whether an expression is an authenticated host identity that cannot be nullish in this program. */
19
+ export declare const isAlwaysPresentHostExpression: (expression: ts.Expression, context: ProducerContext) => boolean;
20
+ export declare const createPropertyProducer: (context: ProducerContext) => FamilyProducer;
21
+ export {};