@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,700 @@
1
+ import ts from 'typescript';
2
+ import { bagShapeTypeAt } from './object-bag-bindings.js';
3
+ /**
4
+ * `never[]` IS NOT A TYPE THE PROGRAM ASKED FOR.
5
+ *
6
+ * `this.children = []` and `state.probe = []` type as `never[]`, and TS's
7
+ * evolving-array widening does not cross a function boundary -- so the nine
8
+ * `Vector3`s `WebGLLights.js` pushes into `state.probe` one line later never
9
+ * reach the cell's type, and every read of it derives a carrier for a value
10
+ * that cannot exist. `collection-bindings.ts` already answers what the writes
11
+ * actually produce; this is the one place its answer enters the type system.
12
+ *
13
+ * Wired here rather than in `typeOf` because the answer is keyed by NODE:
14
+ * `typeOf` receives a `ts.Type`, and every `never[]` in the program is the
15
+ * SAME checker type object regardless of which cell it came from. Only the
16
+ * node says which array this is.
17
+ *
18
+ * `checker.createArrayType` is checker-internal, so there is no `T[]`
19
+ * `ts.Type` to hand back -- and none is needed. This compiler's own `array`
20
+ * shape is what the pipeline consumes, and interning it directly from the
21
+ * element's structural id is both shorter and free of a synthesized checker
22
+ * type nothing else would recognise.
23
+ *
24
+ * ⛔ This is NOT the reachability question. A `never` here is TypeScript's
25
+ * mis-inference, not a proof of anything -- `state.probe[ i ].set( 0, 0, 0 )`
26
+ * at `WebGLLights.js:216` is unconditional and runs every frame. Marking such
27
+ * an operand unreachable was tried and miscompiled live code. Correcting the
28
+ * ELEMENT TYPE is the opposite move: it gives that line the carrier it always
29
+ * needed instead of declaring it dead.
30
+ */
31
+ /**
32
+ * An empty array literal whose element type nothing states -- `const r = []`
33
+ * with no annotation, no contextual type, and no write this census could
34
+ * resolve.
35
+ *
36
+ * The checker calls such a literal `never[]`, and `representation/primitives.ts`
37
+ * gives `never` the same physical nothing as `void`, which `storedCarrier`
38
+ * spells `undefined` in a stored position. So the literal's carrier came out
39
+ * `array-object(undefined)` -- a claim that the array can hold NOTHING -- while
40
+ * the cell it fills and every read of it carry the checker's own evolving
41
+ * `any[]`. Two authorities over one storage, and the compiler had picked the
42
+ * strictly less true one: three's `WebGLUniforms.seqWithValue` does `const r =
43
+ * []`, pushes into it, and returns it, and the conversion the return needed
44
+ * (`array-object(undefined) -> array-object(dynamic)`) can never exist, because
45
+ * a carrier that holds nothing is not a carrier the program's values fit.
46
+ *
47
+ * `never` is what the checker says when it has nothing to say here, not a
48
+ * statement that the array is uninhabited -- the program pushes into it. The
49
+ * honest element for "unstated" is the box, which is also exactly what the
50
+ * checker itself answers at every reference (`any[]`).
51
+ *
52
+ * Gated on `never` alone, and on the literal being genuinely EMPTY. A
53
+ * contextually typed `[]` already has a real element and never reaches here;
54
+ * `Array<undefined>` is a statement, shares the `undefined` element carrier,
55
+ * and must keep it -- an `undefined[]` really can hold `undefined`s, and this
56
+ * must not be the thing that decides it cannot.
57
+ */
58
+ /**
59
+ * An array whose element type NOTHING states -- `const r = []` with no
60
+ * annotation, no contextual type, and no write this census could resolve --
61
+ * asked of the same three node shapes `inferredArrayElementAt` answers for.
62
+ *
63
+ * The checker calls such an array `never[]`, and `representation/primitives.ts`
64
+ * gives `never` the same physical nothing as `void`, which `storedCarrier`
65
+ * spells `undefined` in a stored position. So the carrier came out
66
+ * `array-object(undefined)` -- a claim that the array can hold NOTHING -- while
67
+ * the program pushes into it. three's `WebGLUniforms.seqWithValue` is the case:
68
+ * `const r = []`, `r.push( u )` in a loop, `return r`, and the conversion the
69
+ * return needs (`array-object(undefined) -> array-object(dynamic)`) can never
70
+ * exist, because a carrier that holds nothing is not one the program's values
71
+ * fit. The refusal was right and the carrier was wrong.
72
+ *
73
+ * `never` is what the checker says when it has nothing to say here, not a proof
74
+ * that the array is uninhabited. The honest element for "unstated" is the box --
75
+ * which is also what the checker itself answers at every reference once its own
76
+ * evolving-array widening gives up (`any[]`).
77
+ *
78
+ * Gated on `never` alone. `any` already reaches the box without this;
79
+ * `Array<undefined>` is a statement that shares the `undefined` element carrier
80
+ * and must keep it, since an `undefined[]` really can hold `undefined`s; and a
81
+ * contextually typed `[]` has a real element and never gets here. Asked only
82
+ * after the census has had its say, because an element the census bound is real
83
+ * evidence and outranks this.
84
+ */
85
+ /**
86
+ * Whether an empty `[]` is an arm of a merge that STATES its element type.
87
+ *
88
+ * `r.tokens ? r.tokens : []` over `tokens?: SonioxToken[]` is the shape. TS
89
+ * gives the literal no contextual type here -- a conditional arm inherits the
90
+ * conditional's own, and `const tokens = ...` states none -- so the literal
91
+ * types `never[]` and reaches `unstatedNeverArray` looking exactly like the
92
+ * evidence-free `const r = []` that rule was written for. It is not one: the
93
+ * conditional's own type is `SonioxToken[]`, and that IS a statement of what
94
+ * this arm's elements are, made by the expression the arm belongs to rather
95
+ * than by a contextual type. Boxing it puts two authorities over one merge --
96
+ * `array-object(dynamic)` on the arm, `array-object(native-record-ref)` on the
97
+ * merge -- and no load converts between them, so the program certified and was
98
+ * then refused at emission (`examples/apps/voice-notes`, its whole file).
99
+ *
100
+ * Refusing to box is the entire fix: `ir/lower-narrow.ts`'s `mergeIncoming`
101
+ * already handles this idiom by name, materializing the empty array in the
102
+ * MERGE's own carrier rather than converting into it -- but it recognises the
103
+ * arm by its element deriving to the physical nothing, which is precisely what
104
+ * the box overwrites. The two rules were each right about a different `[]` and
105
+ * this is the one line that says which is which.
106
+ *
107
+ * Asked of the merge's OWN type, not of a contextual type, and only for a
108
+ * non-`never`/non-`any` element: a merge that is itself unstated (`xs ? xs :
109
+ * []` where `xs` is `any[]`) states nothing this arm could adopt, and falls
110
+ * through to the box exactly as before.
111
+ */
112
+ const mergeStatesElement = (checker, layoutTypeAt, node) => {
113
+ let arm = node;
114
+ while (arm.parent && ts.isParenthesizedExpression(arm.parent))
115
+ arm = arm.parent;
116
+ const parent = arm.parent;
117
+ if (!parent)
118
+ return false;
119
+ const isMergeArm = (ts.isConditionalExpression(parent) && (parent.whenTrue === arm || parent.whenFalse === arm)) ||
120
+ (ts.isBinaryExpression(parent) &&
121
+ (parent.operatorToken.kind === ts.SyntaxKind.AmpersandAmpersandToken ||
122
+ parent.operatorToken.kind === ts.SyntaxKind.BarBarToken ||
123
+ parent.operatorToken.kind === ts.SyntaxKind.QuestionQuestionToken) &&
124
+ (parent.left === arm || parent.right === arm));
125
+ if (!isMergeArm)
126
+ return false;
127
+ // The off switch exists so both arms of the gate that landed this run
128
+ // against ONE dist -- see this repo's `GEA_BAG_OFF`/`GEA_FLOW_CENSUS_OFF`.
129
+ if (process.env['GEA_MERGE_ARRAY_ELEMENT_OFF'])
130
+ return false;
131
+ const merged = layoutTypeAt(parent);
132
+ if (!checker.isArrayType(merged))
133
+ return false;
134
+ const [element] = checker.getTypeArguments(merged);
135
+ return element !== undefined && (element.flags & (ts.TypeFlags.Never | ts.TypeFlags.Any)) === 0;
136
+ };
137
+ export const unstatedNeverArray = (checker, collections, layoutTypeAt, node) => {
138
+ const neverElement = (type) => {
139
+ if (!checker.isArrayType(type))
140
+ return false;
141
+ const [element] = checker.getTypeArguments(type);
142
+ return element !== undefined && (element.flags & ts.TypeFlags.Never) !== 0;
143
+ };
144
+ if (ts.isArrayLiteralExpression(node)) {
145
+ if (mergeStatesElement(checker, layoutTypeAt, node))
146
+ return false;
147
+ // `const empty: never[] = []`, `[] as never[]`: the literal's element IS
148
+ // stated, by the annotation or assertion that gives it its contextual
149
+ // type; only a literal with no context at all (`const r = []`) is the
150
+ // evidence-free case the box exists for.
151
+ const contextual = checker.getContextualType(node);
152
+ if (contextual && checker.isArrayType(contextual))
153
+ return false;
154
+ return node.elements.length === 0 && collections.arrayElementAt(node) === null && neverElement(layoutTypeAt(node));
155
+ }
156
+ if (ts.isVariableDeclaration(node) || ts.isPropertyDeclaration(node)) {
157
+ return !node.type && collections.arrayElementForOwner(node) === null && neverElement(layoutTypeAt(node));
158
+ }
159
+ // A PARAMETER the array reached through a `call-argument` edge is one more
160
+ // name for the caller's storage, and `collection-bindings.ts`'s alias
161
+ // closure already put its declaration in the refused component. It is not a
162
+ // `never[]` candidate -- this census never owned parameters -- so the only
163
+ // question asked of it is the refusal, and the only answer given is the box
164
+ // the caller's own cell already carries.
165
+ // A parameter that STATES its element (an annotation, or a JSDoc `@param`)
166
+ // is not unstated, and the caller's box is not permission to overrule it --
167
+ // that disagreement has no sound conversion and belongs at the refusal, not
168
+ // here. Both spellings are asked, the way `jsdoc-type-names.ts` asks them.
169
+ if (ts.isParameter(node))
170
+ return (node.type === undefined &&
171
+ ts.getJSDocType(node) === undefined &&
172
+ ts.getJSDocParameterTags(node).length === 0 &&
173
+ collections.arrayRefusalForOwner(node) !== null &&
174
+ checker.isArrayType(layoutTypeAt(node)));
175
+ if (ts.isIdentifier(node) || ts.isPropertyAccessExpression(node)) {
176
+ if (statesItsOwnType(checker, node))
177
+ return false;
178
+ // A REFUSED component reads back boxed even where the checker's own
179
+ // flow-sensitive answer at this reference looks concrete. The census
180
+ // admitted this array -- it is an unannotated empty literal whose whole
181
+ // write set it tried and failed to join -- so the storage is the box;
182
+ // letting one read take TypeScript's narrower evolving-array answer gives
183
+ // one array two carriers, and the emitter's only bridge between two
184
+ // `array-object` carriers is a fresh array. For a mutable `ArrayObject`
185
+ // that silently drops everything a callee pushes (three's
186
+ // `getProgramCacheKey`: every program cache key came out identical).
187
+ // Gated on the checker STILL calling this reference an array: where its
188
+ // own answer is a bare `any` (three's `WebGLOutput`, whose `_effects` is
189
+ // assigned an unannotated parameter) the reference is not an array read at
190
+ // all, and boxing it as one gives `_effects.length` an `any` member type
191
+ // over an `ArrayObject` receiver -- two authorities again, the other way.
192
+ if (collections.arrayRefusalForRead(node) !== null && checker.isArrayType(layoutTypeAt(node)))
193
+ return true;
194
+ return collections.arrayElementForRead(node) === null && neverElement(layoutTypeAt(node));
195
+ }
196
+ return false;
197
+ };
198
+ /**
199
+ * Whether the binding a read names DECLARES its type. `export const
200
+ * emptyArray: never[] = [] as never[]` (tsc's core.ts) is stated, not
201
+ * unstated: the empty array is the program's own sentinel -- `type.resolvedBaseTypes
202
+ * = emptyArray` marks a circular resolution in progress and `=== emptyArray`
203
+ * detects it -- and a read of it is `never[]` exactly as the declaration says.
204
+ * The box is the answer for the evidence-free `const r = []`, and the
205
+ * declaration branch above already exempts an annotated declaration; this is
206
+ * the same exemption at the read. Without it the cell carried `never[]` while
207
+ * every read of it carried `any[]` -- two authorities over one storage, 367
208
+ * unmet binding reads on the tsc self-compile, and a target no conversion
209
+ * could honestly serve. What a `never[]` converts INTO is
210
+ * `targets/cpp/conversions.ts`'s question (the one empty array of the target
211
+ * element, by identity); this only keeps the read honest about its source.
212
+ */
213
+ const statesItsOwnType = (checker, node) => {
214
+ const symbol = checker.getSymbolAtLocation(ts.isPropertyAccessExpression(node) ? node.name : node);
215
+ const target = symbol && (symbol.flags & ts.SymbolFlags.Alias) !== 0 ? checker.getAliasedSymbol(symbol) : symbol;
216
+ return (target?.declarations ?? []).some((declaration) => (ts.isVariableDeclaration(declaration) ||
217
+ ts.isParameter(declaration) ||
218
+ ts.isPropertyDeclaration(declaration) ||
219
+ ts.isPropertySignature(declaration)) &&
220
+ declaration.type !== undefined);
221
+ };
222
+ export const inferredArrayElementAt = (checker, collections, layoutTypeAt, node) => {
223
+ if (ts.isArrayLiteralExpression(node))
224
+ return collections.arrayElementAt(node);
225
+ // THE CELL'S OWN DECLARATION -- neither the literal that filled it nor a
226
+ // read of it, and the node a cell's stored carrier is actually published
227
+ // from. `const uvBuffer = []` types as `never[]` at the
228
+ // `VariableDeclaration`, so the cell carried `array-object(undefined)`
229
+ // while every read of it carried the census's real element -- two
230
+ // authorities over one storage, surfacing as an unsatisfiable
231
+ // `binding-read-conversion:array-object(undefined)->array-object(X)` per
232
+ // read rather than as an error anywhere. `typeArgumentsForOwner`'s arm one
233
+ // collection family over exists for exactly this reason and this is its
234
+ // counterpart; see `collections.arrayElementForOwner`.
235
+ if (ts.isVariableDeclaration(node) || ts.isPropertyDeclaration(node)) {
236
+ if (node.type)
237
+ return null;
238
+ const declared = layoutTypeAt(node);
239
+ if (!checker.isArrayType(declared))
240
+ return null;
241
+ return collections.arrayElementForOwner(node);
242
+ }
243
+ if (!ts.isIdentifier(node) && !ts.isPropertyAccessExpression(node))
244
+ return null;
245
+ const own = layoutTypeAt(node);
246
+ if (!checker.isArrayType(own))
247
+ return null;
248
+ if (statesItsOwnType(checker, node))
249
+ return null;
250
+ // An evolving checker read can already say number[] before the array is
251
+ // published into an object and a later alias writes undefined. The census
252
+ // owns only unannotated empty-array allocations and joins those alias writes;
253
+ // its physical element must therefore survive every read of that same cell,
254
+ // including earlier reads whose local checker view looks concrete.
255
+ return collections.arrayElementForRead(node);
256
+ };
257
+ /**
258
+ * The array type a `new Array(n)` fills, read off the position it is written
259
+ * into -- `contextualCollectionTypeAt` below, one constructor over.
260
+ *
261
+ * `lib.es5.d.ts` declares `new (arrayLength: number): any[]`, and the
262
+ * non-generic overload is the one every `new Array(n)` selects, so the
263
+ * element reads back `any` whatever the program assigns it to. That `any` is
264
+ * not a statement about the elements; it is the absence of one, and there is
265
+ * nothing for a destination to contradict: ECMA-262 10.4.2.1 makes a fresh
266
+ * array of n HOLES, which has no elements at all. The position the
267
+ * allocation fills DOES state the element, and the checker already checked
268
+ * the allocation against it.
269
+ *
270
+ * It has to be answered here, in the type system, rather than only as the
271
+ * invocation's published result: `partOffsets = new Array(len)` (hono's trie
272
+ * router, over `let partOffsets: number[] | null = null`) puts the allocation
273
+ * behind an assignment whose own value the mapper reads from its right-hand
274
+ * side, and the merge that cell's later reads join would otherwise publish
275
+ * `array-object(dynamic)` against an allocation the invocation published as
276
+ * `array-object(scalar(number))`. Two authorities over one storage, and no
277
+ * conversion between two `array-object` carriers whose elements disagree is
278
+ * installed or ever may be (`targets/cpp/conversions.ts` says why).
279
+ *
280
+ * A union destination is admitted only through its SOLE array arm, which is
281
+ * what `T[] | null` is; two array arms state nothing this could pick between,
282
+ * and an element the destination itself leaves `any`/`unknown` states nothing
283
+ * either. Explicit type arguments (`new Array<T>(n)`) are a statement already
284
+ * and never reach here.
285
+ */
286
+ export const contextualArrayConstructTypeAt = (checker, node) => {
287
+ if (!ts.isNewExpression(node) || node.typeArguments !== undefined)
288
+ return null;
289
+ if (!ts.isIdentifier(node.expression) || node.expression.text !== 'Array')
290
+ return null;
291
+ const receiver = checker.getSymbolAtLocation(node.expression);
292
+ const receiverDeclaration = receiver?.valueDeclaration;
293
+ if (!receiver || receiver.name !== 'Array' || !receiverDeclaration || !receiverDeclaration.getSourceFile().isDeclarationFile)
294
+ return null;
295
+ const own = checker.getTypeAtLocation(node);
296
+ if (!checker.isArrayType(own))
297
+ return null;
298
+ const [element] = checker.getTypeArguments(own);
299
+ if (!element || (element.flags & ts.TypeFlags.Any) === 0)
300
+ return null;
301
+ const context = statedContextOf(checker, node);
302
+ if (!context)
303
+ return null;
304
+ const arrays = (context.isUnion() ? context.types : [context]).filter((member) => checker.isArrayType(member));
305
+ const [filled] = arrays;
306
+ if (!filled || arrays.length !== 1)
307
+ return null;
308
+ const [filledElement] = checker.getTypeArguments(filled);
309
+ if (!filledElement || (filledElement.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) !== 0)
310
+ return null;
311
+ return filled;
312
+ };
313
+ /**
314
+ * The type a bare `new Map()`/`new Set()`/`new WeakMap()`/`new WeakSet()`
315
+ * fills, read off the position it is written into, when its own inference
316
+ * states nothing.
317
+ *
318
+ * The checker types every argument-less `new Map()` as `Map<any, any>`: the
319
+ * constructor overload it selects is the non-generic `new (): Map<any, any>`,
320
+ * and no contextual type changes that (`l.s ??= new Map()`, `l.t = new
321
+ * Map()`, `const m: Map<string, number> = new Map()`, `return new Map()`
322
+ * against `Map<string, number> | undefined` -- every one reads back
323
+ * `Map<any, any>`, measured). Those `any`s are not a statement about the
324
+ * keys and values; they are the absence of one. The position the allocation
325
+ * fills DOES state them, and the checker already checked the allocation
326
+ * against it, so the fill is the type.
327
+ *
328
+ * Asked after `inferredCollectionTypeArgumentsAt`: a census that watched the
329
+ * cell's own writes has looked at more than the position's annotation has.
330
+ * Asked only for exactly this shape -- no arguments, no explicit type
331
+ * arguments, every inferred type argument `any`, and a contextual type that
332
+ * is the same generic (or a union of it with absences alone) with stated
333
+ * arguments. `new Box()` on a generic class infers `unknown`, not `any`, and
334
+ * a contextual BASE class for a derived allocation is a different generic
335
+ * target, so neither reaches here. tsc's `classInfo.memberInfos ??= new
336
+ * Map()` and `links.serializedTypes ||= new Map()` are the shape: the merge
337
+ * published the allocation's `keyed-collection(map, dynamic, dynamic)`
338
+ * against a cell declared `Map<K, V>`, an unsatisfiable narrowing per site.
339
+ */
340
+ export const contextualCollectionTypeAt = (checker, node) => {
341
+ if (!ts.isNewExpression(node) || node.typeArguments !== undefined || (node.arguments?.length ?? 0) > 0)
342
+ return null;
343
+ const own = checker.getTypeAtLocation(node);
344
+ const target = genericTargetOf(own);
345
+ if (!target)
346
+ return null;
347
+ const ownArguments = checker.getTypeArguments(own);
348
+ if (ownArguments.length === 0 || !ownArguments.every((argument) => (argument.flags & ts.TypeFlags.Any) !== 0))
349
+ return null;
350
+ const context = statedContextOf(checker, node);
351
+ if (!context)
352
+ return null;
353
+ const substantive = (context.isUnion() ? context.types : [context]).filter((member) => (member.flags & (ts.TypeFlags.Undefined | ts.TypeFlags.Null | ts.TypeFlags.Void)) === 0);
354
+ const [filled] = substantive;
355
+ if (!filled || substantive.length !== 1 || genericTargetOf(filled) !== target)
356
+ return null;
357
+ const filledArguments = checker.getTypeArguments(filled);
358
+ if (filledArguments.some((argument) => (argument.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) !== 0))
359
+ return null;
360
+ return filled;
361
+ };
362
+ /**
363
+ * The stated type of an expression the checker types as a DYNAMIC collection
364
+ * only because the allocation feeding it stated nothing -- the contextual
365
+ * answer above, followed through the syntax that carries an allocation to
366
+ * its use without restating it.
367
+ *
368
+ * `(cache || (cache = new Map())).set(key, value)` is the shape (tsc's
369
+ * `createSymlinkCache`, `links.extendedContainersByFile`): the allocation is
370
+ * typed by its position (`Map<string, number>`, above), but the checker's
371
+ * type of the ASSIGNMENT is the allocation's own `Map<any, any>`, the `||`
372
+ * subtype-REDUCES `Map<string, number> | Map<any, any>` to `Map<any, any>`
373
+ * because the stated one is a subtype of the dynamic one (measured), and the
374
+ * `.set` call's result -- the receiver, per `Map.prototype.set` -- is then
375
+ * resolved off that reduced type. So a value the mapper laid out as
376
+ * `Map<string, number>` flows through three nodes each of which the checker
377
+ * reports as `Map<any, any>`, and the call's result was a
378
+ * `Ref<Map<Value, Value>>` clang refused to assign the receiver into.
379
+ *
380
+ * Followed through exactly the carriers a value passes unchanged: the
381
+ * parentheses, an assignment (whose value IS the RHS), the two merges that
382
+ * yield an operand as-is (`||`, `??` -- `&&` yields the LEFT, which the
383
+ * checker types on its own), and a member call resolved on a stated
384
+ * receiver, whose result is re-read from the stated receiver's own member.
385
+ * A merge whose stated arms differ is built through the checker's internal
386
+ * union (the same guarded reach `derived-expression-type.ts` makes); a
387
+ * checker without it, or a member with overloads this cannot pick between,
388
+ * answers `null` and the checker's own reading stands, exactly as before.
389
+ */
390
+ export const statedCollectionTypeAt = (checker, node) => {
391
+ if (ts.isNewExpression(node))
392
+ return contextualCollectionTypeAt(checker, node);
393
+ if (ts.isParenthesizedExpression(node))
394
+ return statedCollectionTypeAt(checker, node.expression);
395
+ if (ts.isBinaryExpression(node)) {
396
+ const operator = node.operatorToken.kind;
397
+ if (operator === ts.SyntaxKind.EqualsToken)
398
+ return statedCollectionTypeAt(checker, node.right);
399
+ if (operator !== ts.SyntaxKind.BarBarToken && operator !== ts.SyntaxKind.QuestionQuestionToken)
400
+ return null;
401
+ const right = statedCollectionTypeAt(checker, node.right);
402
+ if (!right)
403
+ return null;
404
+ const left = checker.getNonNullableType(statedCollectionTypeAt(checker, node.left) ?? checker.getTypeAtLocation(node.left));
405
+ if (left === right)
406
+ return right;
407
+ const constructing = checker;
408
+ return typeof constructing.getUnionType === 'function' ? constructing.getUnionType([left, right]) : null;
409
+ }
410
+ if (!ts.isCallExpression(node) || node.questionDotToken || !ts.isPropertyAccessExpression(node.expression))
411
+ return null;
412
+ const receiver = statedCollectionTypeAt(checker, node.expression.expression);
413
+ if (!receiver)
414
+ return null;
415
+ const property = checker.getPropertyOfType(receiver, node.expression.name.text);
416
+ if (!property)
417
+ return null;
418
+ const supplied = node.arguments.length;
419
+ const signatures = checker
420
+ .getTypeOfSymbolAtLocation(property, node.expression)
421
+ .getCallSignatures()
422
+ .filter((signature) => signature.getTypeParameters() === undefined && signature.getParameters().length >= supplied);
423
+ const [signature] = signatures;
424
+ return signature && signatures.length === 1 ? signature.getReturnType() : null;
425
+ };
426
+ /**
427
+ * The type a position states for the value written into it -- the checker's
428
+ * contextual type, except inside a callback passed to a generic call, where
429
+ * the checker answers with the INFERENCE-TIME context: `getOrCreate(map,
430
+ * key, () => new Map())` reads `Map<any, any>` for the arrow's body (measured)
431
+ * because the arrow was contextually typed while `K`/`V` were still being
432
+ * inferred, whereas the call's RESOLVED signature says `() => Map<string,
433
+ * number>`. For a body expression or a direct `return` of an arrow that is an
434
+ * argument of a call, the resolved parameter's own call signature's return
435
+ * type is the statement; everything else is the contextual type as given.
436
+ */
437
+ const statedContextOf = (checker, node) => {
438
+ const contextual = checker.getContextualType(node);
439
+ const returning = ts.isReturnStatement(node.parent) ? node.parent : node;
440
+ const callback = returning.parent;
441
+ const body = (ts.isArrowFunction(callback) || ts.isFunctionExpression(callback)) &&
442
+ (callback.body === node ||
443
+ (ts.isBlock(callback.body) && callback.body.statements.length > 0 && callback.body.statements.includes(returning)));
444
+ if (!body)
445
+ return contextual;
446
+ const call = callback.parent;
447
+ if (!ts.isCallExpression(call) && !ts.isNewExpression(call))
448
+ return contextual;
449
+ const index = call.arguments?.findIndex((argument) => argument === callback) ?? -1;
450
+ if (index < 0 || call.arguments?.slice(0, index).some(ts.isSpreadElement))
451
+ return contextual;
452
+ const parameter = checker.getResolvedSignature(call)?.getParameters()[index];
453
+ if (!parameter)
454
+ return contextual;
455
+ const [signature] = checker.getTypeOfSymbolAtLocation(parameter, call).getCallSignatures();
456
+ return signature ? signature.getReturnType() : contextual;
457
+ };
458
+ const genericTargetOf = (type) => {
459
+ if ((type.flags & ts.TypeFlags.Object) === 0)
460
+ return null;
461
+ if ((type.objectFlags & ts.ObjectFlags.Reference) === 0)
462
+ return null;
463
+ return type.target;
464
+ };
465
+ /**
466
+ * THE K/(V) A BARE `new Map()`/`new Set()`/`new WeakMap()`/`new WeakSet()`
467
+ * NEVER STATES, ENTERED INTO THE TYPE SYSTEM -- `inferredArrayElementAt`'s
468
+ * exact counterpart, one collection family over, kept in this module rather
469
+ * than a new sibling for the same reason as every other file at the
470
+ * directory's own 40-file architecture cap: it is the SAME question
471
+ * (`collection-bindings.ts`'s answer entering the type system at the one
472
+ * place a node-keyed override can reach it), asked of the census's OTHER
473
+ * half.
474
+ *
475
+ * `collection-bindings.ts` has answered this since it was written --
476
+ * `typeArgumentsAt` -- but until now nothing in the representation pipeline
477
+ * ever asked it: `grep -rn "typeArgumentsAt" src/` found only the census's
478
+ * own declaration, default and implementation. Unwired since its creation
479
+ * (`a0c56f8d2`: "Add an unwired collection type-argument census (0/56 bind
480
+ * today, by design)"). Every bare `new Map()` in the program is the SAME
481
+ * checker type object (K and V both default to whatever the constructor's
482
+ * own declared defaults are), so -- exactly as for `never[]` above -- only
483
+ * the NODE says which logical collection this is.
484
+ *
485
+ * Three node shapes reach a collection's stored type, and all three are
486
+ * answered from the accessor pair `collection-bindings.ts` already exposes
487
+ * for exactly this:
488
+ *
489
+ * - the allocation itself (`new Map()` -- `typeArgumentsAt`);
490
+ * - the owner's own declaration (`private store = new Map()` types the
491
+ * FIELD from the `PropertyDeclaration` node, a different node than the
492
+ * `new Map()` it holds, and a cell rebuilt in more than one place --
493
+ * `this.m = new Map()` again in a `reset()` method -- has no single
494
+ * allocation site to ask at all -- `typeArgumentsForOwner`);
495
+ * - a later READ of the cell (`this.store` at `this.store.set(key, value)`
496
+ * -- `typeArgumentsForRead`).
497
+ *
498
+ * A fourth shape -- the RESULT of a call that returns its own receiver
499
+ * (`Map.prototype.set` returns `this`, so `m.set(a,b).set(c,d)` chains) --
500
+ * is NOT handled here. Recognising it would mean asking, generically, "does
501
+ * this resolved callee return its own receiver" -- a host-protocol fact
502
+ * `host-protocols.ts` does not yet state for the keyed-collection family,
503
+ * and hardcoding the method name `'set'` to answer it is exactly the
504
+ * one-off-syntax shortcut this campaign is trying to stop making. Left
505
+ * unhandled rather than guessed at; see this session's `NOTES.md`.
506
+ *
507
+ * The generic (defaulted) shape this overrides is reused for everything but
508
+ * `typeArguments`: the family, ownership policy and body-independence are
509
+ * already correct -- `representation/collections.ts`'s
510
+ * `deriveKeyedCollection` reads `shape.typeArguments` alone and never
511
+ * `shape.body` at all (`Map`/`Set`'s ambient body is intentionally sealed
512
+ * off one case above it in `representation/derive.ts`'s `'declared'` case)
513
+ * -- so re-deriving the family/declaration here would be a second,
514
+ * competing opinion instead of a strictly narrower one. `body: null` is
515
+ * therefore correct, not a placeholder: nothing downstream of a
516
+ * keyed-collection carrier ever reads it.
517
+ */
518
+ export const inferredCollectionTypeArgumentsAt = (collections, table, typeOf, bags, own, node) => {
519
+ const bound = ts.isNewExpression(node)
520
+ ? collections.typeArgumentsAt(node)
521
+ : ts.isVariableDeclaration(node) || ts.isPropertyDeclaration(node)
522
+ ? collections.typeArgumentsForOwner(node)
523
+ : ts.isIdentifier(node) || ts.isPropertyAccessExpression(node)
524
+ ? collections.typeArgumentsForRead(node)
525
+ : null;
526
+ if (!bound)
527
+ return null;
528
+ const generic = table.get(typeOf(own)).shape;
529
+ const direct = overriddenCollectionShape(table, typeOf, bags, bound, generic);
530
+ if (direct !== null)
531
+ return direct;
532
+ // A cell the program lets go ABSENT holds the collection inside a union,
533
+ // and refusing there put the census's answer on the reads and the
534
+ // checker's on the declaration -- the exact two-authorities failure the
535
+ // owner-keyed accessor exists to prevent, one level down.
536
+ //
537
+ // `WebGLRenderer.js`'s `let programs = materialProperties.programs` is the
538
+ // shape: the initializer is `Map<any, any> | undefined`, so this refused
539
+ // and the cell kept `optional(keyed-collection(map, dynamic, dynamic))`,
540
+ // while every read past the `if ( programs === undefined )` guard is a
541
+ // bare `Map` this census answers `keyed-collection(map, string, dynamic)`
542
+ // for -- an unsatisfiable `binding-read-conversion:optional(keyed-
543
+ // collection@...)->keyed-collection(map,string,...)` per read. The
544
+ // narrowing `optional(T) -> T` the reads need is installed and licensed;
545
+ // it simply never applied, because the two `T`s were not the same `T`.
546
+ //
547
+ // Admitted only for a union whose every OTHER member is an absence
548
+ // keyword: `Map<K,V> | undefined` and `Map<K,V> | null` are one storage
549
+ // the program sometimes leaves empty, and the override belongs to the
550
+ // payload. A union with a second substantive member is a genuinely
551
+ // different value in each arm and is refused, exactly as before -- there
552
+ // is no single collection for the census's answer to be about.
553
+ if (generic.kind !== 'union')
554
+ return null;
555
+ const members = generic.members.map((member) => ({ id: member, shape: table.get(member).shape }));
556
+ const payloads = members.filter((member) => member.shape.kind !== 'primitive' || !isAbsenceKeyword(member.shape.primitive));
557
+ const payload = payloads.length === 1 ? payloads[0] : null;
558
+ if (payload === null)
559
+ return null;
560
+ const overridden = overriddenCollectionShape(table, typeOf, bags, bound, payload.shape);
561
+ if (overridden === null)
562
+ return null;
563
+ return table.intern({
564
+ kind: 'union',
565
+ members: generic.members.map((member) => (member === payload.id ? overridden : member))
566
+ });
567
+ };
568
+ const isAbsenceKeyword = (primitive) => primitive === 'undefined' || primitive === 'null';
569
+ /**
570
+ * The census's K/(V) written back over one `'declared'` collection shape, or
571
+ * `null` when this shape was never that collection to begin with (a refusal
572
+ * elsewhere already fired, or the node's type genuinely is not one) --
573
+ * refuse by silence, the same as every other node the caller is asked about
574
+ * and has nothing to say for.
575
+ */
576
+ const overriddenCollectionShape = (table, typeOf, bags, bound, generic) => {
577
+ if (generic.kind !== 'declared')
578
+ return null;
579
+ // The checker's own key argument stays wherever this census bound none:
580
+ // `key` is `null` for a collection whose K it could not resolve but whose V
581
+ // it could -- a statement about K alone, never a refusal of the collection
582
+ // (`CollectionTypeArguments.key`).
583
+ const keyId = bound.key ? typeOf(bound.key) : generic.typeArguments[0];
584
+ if (keyId === undefined)
585
+ return null;
586
+ // The FAMILY, not `bound.value`, decides the arity: `bound.value` is `null`
587
+ // both for a `Set`/`WeakSet` (which the shape asks nothing about, by
588
+ // `CollectionTypeArguments`'s own doc) AND for a `Map`/`WeakMap` this
589
+ // census bound a key for but never observed a `.set` call on (`new Map()`
590
+ // read only through `.has`/`.get`). Those are NOT the same shape: the first
591
+ // is a genuine 1-argument family, and `deriveKeyedCollection` refuses a
592
+ // 1-argument `map`/`weak-map` outright ("needs exactly 2"). The checker's
593
+ // OWN generic-defaulted instantiation already carries the right arity for
594
+ // whichever family this is -- `MapConstructor`'s bare `new Map()` checks as
595
+ // `Map<unknown, unknown>`, never `Map<unknown>` -- so `generic.typeArguments
596
+ // .length` is what this reads, not the census's own value slot. A `map`/
597
+ // `weak-map` with no bound value keeps the checker's OWN (uninformative)
598
+ // value argument rather than inventing one: only the KEY improved, exactly
599
+ // as much as the evidence supports.
600
+ // `boundValueTypeId`, not `bound.value`: a value slot this census left open
601
+ // as `value-unresolved` can still be answered here, and the cell's carrier
602
+ // and every `.get` off it must read the SAME answer.
603
+ const valueId = boundValueTypeId(table, typeOf, bags, bound);
604
+ const typeArguments = generic.typeArguments.length >= 2 ? [keyId, valueId ?? generic.typeArguments[1]] : [keyId];
605
+ return table.intern({ kind: 'declared', declaration: generic.declaration, typeArguments, body: null });
606
+ };
607
+ /**
608
+ * The VALUE slot of a bound collection, finishing the one question
609
+ * `collection-bindings.ts` had to leave open.
610
+ *
611
+ * That census types a `.set` value argument through the checker and the
612
+ * parameter census, and neither can answer `properties.set( object, map )`
613
+ * where `map` is an object bag: the checker says `any`, and the bag census --
614
+ * the one authority that knows -- does not exist yet when it runs
615
+ * (`frontend.ts` places `bags` after `compose()`, because a bag's answer is an
616
+ * `ObjectBagShape` and only `table.intern` turns one into a type). So the
617
+ * unresolved arguments travel here as `valueEvidence`, where the table and
618
+ * both censuses are in scope.
619
+ *
620
+ * ALL-OR-NOTHING, and identical across every argument. A value slot derived
621
+ * half from this census and half from the checker's `any` would be a second
622
+ * authority over one storage -- the defect this whole path exists to close --
623
+ * and two bags that disagree are a real disagreement no later layer resolves,
624
+ * so both answer nothing and the checker's own (uninformative) argument
625
+ * stands, exactly as before.
626
+ */
627
+ const boundValueTypeId = (table, typeOf, bags, bound) => {
628
+ if (bound.value)
629
+ return typeOf(bound.value);
630
+ if (bound.valueEvidence.length === 0)
631
+ return null;
632
+ let agreed = null;
633
+ for (const evidence of bound.valueEvidence) {
634
+ const resolved = bagShapeTypeAt(table, typeOf, bags, evidence);
635
+ if (resolved === null || (agreed !== null && resolved !== agreed))
636
+ return null;
637
+ agreed = resolved;
638
+ }
639
+ return agreed;
640
+ };
641
+ /**
642
+ * What `collection.get( k )` publishes, when the census -- not the checker --
643
+ * is the one that knows what this collection holds.
644
+ *
645
+ * `inferredCollectionTypeArgumentsAt` above fixes the RECEIVER's own type, and
646
+ * that is not enough: a prototype call's result comes from the CALLEE'S
647
+ * SIGNATURE, which the checker instantiates from the receiver EXPRESSION's
648
+ * type, never from whatever this compiler later selected for it. So
649
+ * `properties.get( renderTarget )` over a `WeakMap` the census bound stays
650
+ * `any`, and every `renderTargetProperties = properties.get( ... )` in three's
651
+ * renderer is a `dynamic -> record` conversion nothing installs -- while the
652
+ * cell the value came OUT of is laid out natively. One storage, two
653
+ * authorities, exactly one operation apart.
654
+ *
655
+ * `V | undefined`, because that is what `Map`/`WeakMap`'s own `get` returns
656
+ * and the census changes only which `V`. The union is built structurally
657
+ * rather than as a `ts.Type`: `ts.TypeChecker.getUnionType` is not public, and
658
+ * this file already interns shapes directly for the same reason.
659
+ *
660
+ * Answers ONLY where a value was actually bound. A `Set`/`WeakSet` has no
661
+ * value (`CollectionTypeArguments`'s own doc), and a `Map` the program only
662
+ * ever reads leaves `value` null rather than inventing one -- both keep the
663
+ * checker's answer, unchanged. The census itself admits only a bare `new
664
+ * Map()` with no type arguments and no constructor argument, so an annotated
665
+ * `Map<string, Foo | null>` never reaches here and the author's own statement
666
+ * stays authoritative.
667
+ */
668
+ export const collectionMemberResultTypeAt = (collections, table, typeOf, bags, layoutTypeAt, node) => {
669
+ if (!ts.isCallExpression(node))
670
+ return null;
671
+ const callee = node.expression;
672
+ if (!ts.isPropertyAccessExpression(callee))
673
+ return null;
674
+ const member = callee.name.text;
675
+ if (member !== 'get' && member !== 'set' && member !== 'add')
676
+ return null;
677
+ const receiver = callee.expression;
678
+ // `typeArgumentsForRead` resolves the receiver to the DECLARATION that owns
679
+ // the collection and answers only for one this census actually bound, so a
680
+ // `.get`/`.set`/`.add` on anything else -- a host object, a class of the
681
+ // program's own with a method of that name -- resolves to no owner and falls
682
+ // through untouched.
683
+ const bound = collections.typeArgumentsForRead(receiver);
684
+ if (!bound)
685
+ return null;
686
+ // `Map.prototype.set` and `Set.prototype.add` return the RECEIVER, so their
687
+ // result is whatever the receiver's own narrowed shape is -- asked through
688
+ // the same function that narrows the receiver itself rather than rebuilt
689
+ // here, so the two cannot state different type arguments for one call. This
690
+ // is not a nicety: `slots.set( 'a', new Slot( 4 ) )` on a bare `new Map()`
691
+ // emitted `Ref<Map<Value, Value>> = Ref<Map<string, Ref<Slot>>>` and clang
692
+ // rejected it outright -- the receiver had the census's answer and the call
693
+ // that returns that same receiver had the checker's.
694
+ if (member !== 'get')
695
+ return inferredCollectionTypeArgumentsAt(collections, table, typeOf, bags, layoutTypeAt(receiver), receiver);
696
+ const value = boundValueTypeId(table, typeOf, bags, bound);
697
+ if (value === null)
698
+ return null;
699
+ return table.intern({ kind: 'union', members: [value, table.intern({ kind: 'primitive', primitive: 'undefined' })] });
700
+ };