@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,1019 @@
1
+ import { createHash } from 'node:crypto';
2
+ /**
3
+ * Physical carriers.
4
+ *
5
+ * A representation answers "which physical thing holds this value", and it is
6
+ * selected from an already-published semantic result. It is never a second
7
+ * interpretation of the source: if choosing a carrier requires re-reading the
8
+ * program, the semantic layer did not publish enough.
9
+ *
10
+ * `array-object` and `dense-buffer` are deliberately different kinds. A
11
+ * JavaScript-observable Array is an exotic object with hole semantics, an
12
+ * array-index key domain, and `length` define/delete/truncation rules; a dense
13
+ * buffer is a compiler-private storage block with none of that. Letting one
14
+ * kind mean both is what allows a single Array to be a tagged array object in
15
+ * one endpoint and a bare vector in another.
16
+ */
17
+ /** The only reasons a value may be carried dynamically. */
18
+ export const dynamicReasons = [
19
+ /** Explicit compiler option permits C++ dynamic dispatch without a static specialization. */
20
+ 'opt-in-fallback',
21
+ /** `ToString` of a value whose type the program never narrows. */
22
+ 'tostring-of-unknown',
23
+ /** A thrown value, which JavaScript does not type. */
24
+ 'thrown-error-carrier',
25
+ /** `JSON.parse` with no asserted result type. */
26
+ 'unasserted-json-parse',
27
+ /** The program itself declared `any`/`unknown` and never narrowed it. */
28
+ 'declared-any-never-narrowed',
29
+ /** A host-authenticated CommonJS module record is deliberately an `any` boundary. */
30
+ 'commonjs-module-boundary',
31
+ // The bare `Function` interface (`lib.es5.d.ts`), which states a value is
32
+ // callable and states nothing else: no parameter list, no arity, no result.
33
+ // That is `unknown` for callables, and it is a genuinely dynamic boundary
34
+ // rather than a lowering this compiler has not written yet -- a physical
35
+ // frame cannot be chosen from a signature the program never gave. The
36
+ // checker already reaches this same conclusion on the CALLEE side, where it
37
+ // declines to check a call whose callee is `Function` and answers `any`
38
+ // (see `resolvedCalleeSignatureType`, semantics/normalize/producers/
39
+ // shared.ts); this is the same answer for a `Function`-typed VALUE, so the
40
+ // two are one authority instead of two.
41
+ //
42
+ // Reached by more than an explicit `value: Function` annotation:
43
+ // `typeof x === 'function'` narrows an `unknown` TO `Function`, and
44
+ // `lib.es5.d.ts` types `Object.prototype.constructor` as `Function`. Before
45
+ // this reason existed all three derived to `native-handle(Function@1)` --
46
+ // a host protocol no target can ever register, since there is no C++ type
47
+ // for "some callable" -- so the program refused with an obligation nothing
48
+ // could satisfy instead of boxing the one thing that genuinely is dynamic.
49
+ 'untyped-callable',
50
+ // A read of `call`/`apply`/`bind` off a Function object the program itself
51
+ // installed an own property of that name onto. `lib.es5.d.ts` types such a
52
+ // read as `Function.prototype`'s method, which is not what the program will
53
+ // find there: the own property shadows it, and what the own-property table
54
+ // holds is whatever was written, under no declared convention. The renderer
55
+ // already agrees -- `ir/certify/property-access-keys.ts` gives exactly this
56
+ // read the `(prototype-dynamic)` recipe, which emits `callableDynamicGet`
57
+ // and yields a `gea::Value` -- so before this reason existed the carrier and
58
+ // the code emitted for it disagreed about the same read.
59
+ 'shadowed-callable-builtin'
60
+ ];
61
+ /**
62
+ * A whole numeric property table stores text keys after ToPropertyKey, unlike
63
+ * a numeric sidecar selected from a record's disjoint index signatures. Keep
64
+ * the numeric fast path, but carry other non-Symbol primitives through the
65
+ * table's text protocol. In particular absence names "undefined"/"null";
66
+ * recovering a number would either refuse it or alias a different property.
67
+ */
68
+ export const dictionaryKeyDomainOf = (declared, key) => {
69
+ if (declared !== 'number' || (key.kind === 'scalar' && key.domain === 'number'))
70
+ return declared;
71
+ const primitiveText = (value) => {
72
+ if (value.kind === 'scalar' || value.kind === 'string' || value.kind === 'null' || value.kind === 'undefined' || value.kind === 'void')
73
+ return true;
74
+ if (value.kind === 'optional')
75
+ return primitiveText(value.payload);
76
+ return value.kind === 'tagged-union' && value.arms.length > 0 && value.arms.every((arm) => primitiveText(arm.value));
77
+ };
78
+ return primitiveText(key) ? 'string' : declared;
79
+ };
80
+ /** Exact ECMAScript Number::toString spelling accepted by a number index signature. */
81
+ export const isCanonicalNumberPropertyKeyText = (text) => {
82
+ const numeric = Number(text);
83
+ return Number.isNaN(numeric) ? text === 'NaN' : String(numeric) === text;
84
+ };
85
+ /** Select the disjoint sidecar addressed by a statically carried property key. */
86
+ export const recordIndexForKeyCarrier = (indexes, key, constantText) => {
87
+ if (key.kind === 'symbol')
88
+ return indexes.find((index) => index.key === 'symbol') ?? null;
89
+ if (key.kind === 'scalar' && key.domain === 'number')
90
+ return indexes.find((index) => index.key === 'string') ?? indexes.find((index) => index.key === 'number') ?? null;
91
+ if (key.kind === 'string') {
92
+ const stringIndex = indexes.find((index) => index.key === 'string');
93
+ if (stringIndex)
94
+ return stringIndex;
95
+ // A number index is a set of PROPERTY KEYS, not a set of finite doubles.
96
+ // Number::toString is the canonicalizer: in particular NaN and both
97
+ // infinities are valid keys, while -0 aliases "0" and "01" is not the
98
+ // canonical spelling of 1.
99
+ const canonical = constantText !== undefined && isCanonicalNumberPropertyKeyText(constantText);
100
+ return canonical ? (indexes.find((index) => index.key === 'number') ?? null) : null;
101
+ }
102
+ if (key.kind === 'tagged-union' &&
103
+ key.arms.every((arm) => arm.value.kind === 'string' || (arm.value.kind === 'scalar' && arm.value.domain === 'number')))
104
+ return indexes.find((index) => index.key === 'string') ?? null;
105
+ return null;
106
+ };
107
+ /**
108
+ * `passingOf`'s answer for `value` under `ownership` (the ABI's own override
109
+ * for this position, or `null` to ask the carrier's own tier -- mirroring
110
+ * `cppTypeOf`'s optional second argument).
111
+ *
112
+ * `string` and `callable-identity` carry no `ownership` field at all -- a
113
+ * `std::string` always owns its buffer and `gea::Ref<gea::FunctionObjectIdentity>`
114
+ * is `cppTypeOf`'s one hardcoded reference spelling -- so both are named
115
+ * directly rather than falling out of the ownership-tier check below. Every
116
+ * other reference-shaped carrier (`class-ref`, `record`, `record-with-index`,
117
+ * `native-record-ref`, `array-object`, `typed-array`, `array-buffer`,
118
+ * `shared-array-buffer`, `data-view`, `keyed-collection`, `dictionary`) is
119
+ * spelled `gea::Ref<...>` by `cppTypeOf`'s `cppOwnershipWrap` exactly when its
120
+ * effective ownership is `shared-refcount`, which is what `'ownership' in
121
+ * value` plus the tier check reproduces without spelling anything.
122
+ *
123
+ * The one exception this function and `targets/cpp/types.ts`'s
124
+ * `cppAbiParameterType` still apply identically: an ArrayBuffer-family view
125
+ * keeps ITS OWN shared-refcount tier even when a function-value signature
126
+ * stamps the parameter `owned` after publication settled on the standard
127
+ * buffer carrier as shared, because the bytes still have observable reference
128
+ * identity a by-value copy would silently break.
129
+ */
130
+ export const passingOf = (value, ownership = null) => {
131
+ const aliasing = value.kind === 'array-buffer' || value.kind === 'shared-array-buffer' || value.kind === 'data-view' || value.kind === 'typed-array';
132
+ const effective = aliasing && value.ownership === 'shared-refcount' && ownership === 'owned'
133
+ ? value.ownership
134
+ : (ownership ?? ('ownership' in value ? value.ownership : null));
135
+ return value.kind === 'string' || value.kind === 'callable-identity' || effective === 'shared-refcount' ? 'const-ref' : 'by-value';
136
+ };
137
+ /**
138
+ * The fixpoint identity a carrier participates in, or `null` for an ordinary
139
+ * acyclic container. Kept in the model so derivation, verification, and the
140
+ * C++ spelling read the same fact instead of each inferring recursion from a
141
+ * traversal of their own.
142
+ */
143
+ export const recursiveCarrierOf = (representation) => {
144
+ switch (representation.kind) {
145
+ case 'array-object':
146
+ case 'keyed-collection':
147
+ case 'dictionary':
148
+ case 'function-value-dispatch':
149
+ return representation.recursive ?? null;
150
+ case 'native-record-ref':
151
+ return representation.recursive ?? null;
152
+ default:
153
+ return null;
154
+ }
155
+ };
156
+ /**
157
+ * A stable key for a representation.
158
+ *
159
+ * Two carriers are the same carrier exactly when their keys match. This is used
160
+ * to detect the case the architecture forbids outright: one value published
161
+ * with two different carriers in two endpoints.
162
+ */
163
+ /**
164
+ * Keys already built, by the carrier object that produced them.
165
+ *
166
+ * A carrier is immutable -- every field of every variant is `readonly`, and
167
+ * nothing in this compiler writes one after it is constructed -- so a key is a
168
+ * function of the object's identity and may be remembered by it. That is worth
169
+ * remembering because the key is recursive and inlines its whole subject: the
170
+ * deepest one a measured application produced was 26,467 characters, a
171
+ * `record-with-index` carrying an entire host object's shape, and it was rebuilt
172
+ * from nothing on every call. The same measurement found 112,276 selected
173
+ * results resolving to 2,660 distinct carrier objects, so all but ~2% of the
174
+ * calls ask for a key that already exists.
175
+ *
176
+ * A `WeakMap` rather than a `Map` because the carriers outlive nothing: they
177
+ * belong to the plan, and a strong table here would keep every carrier of every
178
+ * compilation alive for the life of the process.
179
+ */
180
+ const keysByRepresentation = new WeakMap();
181
+ const abiKeys = new WeakMap();
182
+ /**
183
+ * How a nested carrier contributes to its parent's key.
184
+ *
185
+ * ⛔ This used to be the child's WHOLE key, spliced in as text -- which makes a
186
+ * key a tree serialization of a graph, and that is not merely wasteful, it does
187
+ * not terminate at any useful size. mongodb's `Filter` carrier has three fields
188
+ * that each contain the next level, so every level TRIPLED its parent's key:
189
+ * measured at 1,191 characters at the innermost level, 11 MB eight levels up,
190
+ * 299 MB three levels above that, and then `Array.join` threw
191
+ * `RangeError: Invalid string length` -- V8 caps a string at 536,870,888
192
+ * characters and the full key would have been ~17 GB. The compile died with a
193
+ * stack trace naming a template literal, in a compiler whose whole discipline
194
+ * is to refuse with a reason.
195
+ *
196
+ * `structural-self-reference.ts` closes that particular cycle, so no carrier
197
+ * SHOULD be that deep any more. This is the other half, and it is the half that
198
+ * holds for every future target and every future program: a key is now bounded
199
+ * by the carrier's OWN field count, never by the size of the graph beneath it.
200
+ * Any two distinct sub-carriers still give distinct parent keys -- the digest is
201
+ * over the child's own full key, so a difference anywhere below propagates up
202
+ * through every enclosing digest, exactly as a Merkle chain does.
203
+ *
204
+ * The digest is prefixed with what it stands for (`record#type|1041@a3f9...`)
205
+ * rather than left opaque. A key is read by people: it names the missing
206
+ * primitive in every unmet-obligation row the compass prints, and an obligation
207
+ * that says only `k9f2c...` would trade one unreadable report (8 KB of inlined
208
+ * header fields on ONE line, which is what this produced for hono's `Context`)
209
+ * for another.
210
+ */
211
+ // `GEA_FULL_KEYS` prints every nested key in full: a digest names WHICH union a
212
+ // refusal is about, never what its arms are, and finding the arm a merge could
213
+ // not reach needs the arms. Read once at load, so the keys are the same
214
+ // everywhere in one run.
215
+ const nestedKeyLimit = process.env['GEA_FULL_KEYS'] ? Number.POSITIVE_INFINITY : 80;
216
+ // Memoized beside `keysByRepresentation`, and for the same reason: the digest
217
+ // is a pure function of the carrier, and a parent key asks for it once per
218
+ // field on every rebuild of a parent that is not itself remembered yet. On
219
+ // TypeScript's own compiler the digest, not the walk, was half the cost of
220
+ // keying a union's arms.
221
+ const nestedKeys = new WeakMap();
222
+ const nestedKey = (representation) => {
223
+ const remembered = nestedKeys.get(representation);
224
+ if (remembered !== undefined)
225
+ return remembered;
226
+ const own = representationKey(representation);
227
+ const built = own.length <= nestedKeyLimit ? own : digestedKey(representation, own);
228
+ nestedKeys.set(representation, built);
229
+ return built;
230
+ };
231
+ const digestedKey = (representation, own) => {
232
+ const shaped = 'shapeId' in representation ? representation.shapeId : undefined;
233
+ const label = shaped === undefined ? representation.kind : `${representation.kind}#${shaped}`;
234
+ return `${label}@${createHash('sha256').update(own).digest('hex').slice(0, 16)}`;
235
+ };
236
+ /**
237
+ * The extension half of an `array-object` key: empty for a plain array, so
238
+ * every key written before extensions existed is unchanged, and the field
239
+ * list -- name, requiredness, carrier -- for an extended one. Exported so the
240
+ * emitter names the generated struct by the same identity the carrier has.
241
+ */
242
+ export const arrayExtensionKey = (extension) => extension === null
243
+ ? ''
244
+ : `,{${extension.map((field) => `${field.key}${field.required ? '' : '?'}:${representationKey(field.value)}`).join(',')}}`;
245
+ export const representationKey = (representation) => {
246
+ const remembered = keysByRepresentation.get(representation);
247
+ if (remembered !== undefined)
248
+ return remembered;
249
+ const built = buildRepresentationKey(representation);
250
+ keysByRepresentation.set(representation, built);
251
+ return built;
252
+ };
253
+ const buildRepresentationKey = (representation) => {
254
+ const recursive = recursiveCarrierOf(representation);
255
+ // A recursive carrier is a graph node, not a tree. Its structural identity
256
+ // is the full key: descending into its children would serialize the cycle
257
+ // forever, while replacing it with a digest would hide the declaration/type
258
+ // identity which proves the two paths carry the same native object.
259
+ if (recursive) {
260
+ switch (representation.kind) {
261
+ case 'array-object':
262
+ case 'keyed-collection':
263
+ case 'dictionary':
264
+ return `recursive(${recursive.type},${recursive.container},${representation.ownership})`;
265
+ case 'native-record-ref':
266
+ return `recursive(${recursive.type},${recursive.container},${representation.ownership})`;
267
+ // A callable wrapper is one by-value struct, so its ownership is fixed
268
+ // rather than carried. It is still spelled, because the back edge and
269
+ // the definition must key IDENTICALLY -- that identity is what proves a
270
+ // parameter bound from the reference and an ABI spelled from the
271
+ // definition name the same physical object.
272
+ case 'function-value-dispatch':
273
+ return `recursive(${recursive.type},${recursive.container},owned)`;
274
+ default:
275
+ throw new Error(`recursive marker appeared on non-container ${representation.kind}`);
276
+ }
277
+ }
278
+ switch (representation.kind) {
279
+ case 'unresolved':
280
+ return `unresolved(${representation.reason})`;
281
+ case 'void':
282
+ case 'string':
283
+ case 'symbol':
284
+ case 'null':
285
+ case 'undefined':
286
+ return representation.kind;
287
+ case 'scalar':
288
+ return `scalar(${representation.domain})`;
289
+ case 'class-ref':
290
+ return `class-ref(${representation.declaration},${representation.ownership})`;
291
+ case 'native-handle':
292
+ // `call`/`construct` are folded into the key -- omitting them would let
293
+ // two handles of the same protocol that disagree on invocability
294
+ // collide under one key, which is exactly the "one value, two carriers"
295
+ // case `representationKey` exists to catch.
296
+ return (`native-handle(${representation.protocol}@${representation.version}` +
297
+ `;call=${representation.call ? abiKey(representation.call) : '-'}` +
298
+ `;construct=${representation.construct ? abiKey(representation.construct) : '-'})`);
299
+ case 'record':
300
+ return `record(${representation.shapeId},${representation.ownership},${representation.fields
301
+ .map((field) => `${field.key}${field.required ? '' : '?'}:${nestedKey(field.value)}`)
302
+ .join(',')};${representation.accessors.map((accessor) => `${accessor.key}=${accessor.getter ?? '-'}/${accessor.setter ?? '-'}`).join(',')})`;
303
+ case 'record-with-index':
304
+ return `record-with-index(${representation.shapeId},${representation.ownership},${representation.fields
305
+ .map((field) => `${field.key}${field.required ? '' : '?'}:${nestedKey(field.value)}`)
306
+ .join(',')};${representation.indexes.map((index) => `index[${index.key}]=${nestedKey(index.value)}`).join(';')})`;
307
+ case 'proxy-object':
308
+ return `proxy-object(${nestedKey(representation.target)},${nestedKey(representation.handler)})`;
309
+ case 'native-record-ref':
310
+ return `native-record-ref(${representation.shapeId},${representation.ownership},${representation.native ?? ''})`;
311
+ case 'borrowed-ref':
312
+ return `borrowed-ref(${nestedKey(representation.referent)})`;
313
+ case 'array-object':
314
+ return `array-object(${nestedKey(representation.element)},${representation.ownership}${arrayExtensionKey(representation.extension)})`;
315
+ case 'dense-buffer':
316
+ return `dense-buffer(${nestedKey(representation.element)})`;
317
+ case 'typed-array':
318
+ return `typed-array(${representation.element},${representation.buffer},${representation.ownership})`;
319
+ case 'array-buffer':
320
+ return `array-buffer(${representation.ownership})`;
321
+ case 'shared-array-buffer':
322
+ return `shared-array-buffer(${representation.ownership})`;
323
+ case 'data-view':
324
+ return `data-view(${representation.ownership})`;
325
+ case 'native-sequence':
326
+ return `native-sequence(${nestedKey(representation.element)})`;
327
+ case 'iterator':
328
+ return `iterator(${nestedKey(representation.element)})`;
329
+ case 'promise':
330
+ return `promise(${nestedKey(representation.value)})`;
331
+ case 'keyed-collection':
332
+ return (`keyed-collection(${representation.family},${nestedKey(representation.key)},` +
333
+ `${representation.value ? nestedKey(representation.value) : '-'},${representation.ownership})`);
334
+ case 'dictionary':
335
+ return `dictionary(${representation.key},${nestedKey(representation.value)},${representation.ownership})`;
336
+ case 'function':
337
+ return `function(${representation.functionId},${abiKey(representation.abi)})`;
338
+ case 'function-family':
339
+ return `function-family(${[...representation.members].sort().join('+')},${abiKey(representation.abi)})`;
340
+ case 'constructor-family':
341
+ return `constructor-family(${[...representation.members].sort().join('+')},${abiKey(representation.abi)})`;
342
+ case 'constructor-value-dispatch':
343
+ return `constructor-value-dispatch(${abiKey(representation.abi)})`;
344
+ case 'function-and-constructor':
345
+ return `function-and-constructor(${abiKey(representation.call)},${abiKey(representation.construct)})`;
346
+ case 'function-value-family':
347
+ return `function-value-family(${[...representation.members].sort().join('+')},${abiKey(representation.abi)},${representation.optional})`;
348
+ case 'function-value-dispatch':
349
+ return `function-value-dispatch(${abiKey(representation.abi)})`;
350
+ case 'callable-identity':
351
+ return 'callable-identity';
352
+ case 'generic-function-set':
353
+ return `generic-function-set(${representation.members.join('+')})`;
354
+ case 'optional':
355
+ return `optional(${nestedKey(representation.payload)},${representation.absence})`;
356
+ case 'tagged-union':
357
+ return `tagged-union(${representation.arms
358
+ .map((arm) => {
359
+ const discriminator = arm.runtimeDiscriminator.kind === 'callable-membership'
360
+ ? `callable(${[...arm.runtimeDiscriminator.members].sort().join('+')})`
361
+ : arm.runtimeDiscriminator.kind;
362
+ return `${arm.tag}:${discriminator}:${nestedKey(arm.value)}`;
363
+ })
364
+ .join('|')})`;
365
+ case 'dynamic':
366
+ return `dynamic(${representation.reason})`;
367
+ }
368
+ };
369
+ /** A stable key for a calling convention. */
370
+ export const abiKey = (abi) => {
371
+ const remembered = abiKeys.get(abi);
372
+ if (remembered !== undefined)
373
+ return remembered;
374
+ const built = buildAbiKey(abi);
375
+ abiKeys.set(abi, built);
376
+ return built;
377
+ };
378
+ const buildAbiKey = (abi) => `(${abi.parameters.map((parameter) => `${nestedKey(parameter.value)}/${parameter.ownership}`).join(',')}` +
379
+ `${abi.restFrom === null ? '' : `|rest@${abi.restFrom}`})` +
380
+ `->${nestedKey(abi.result)}` +
381
+ `@${abi.receiver ? nestedKey(abi.receiver) : '-'}`;
382
+ /**
383
+ * Whether a carrier boxes a value that has a static type.
384
+ *
385
+ * Used by the no-boxing gate. `dynamic` is legitimate only for the four
386
+ * declared reasons; every other appearance is a defect to fix at the producer.
387
+ */
388
+ export const isBoxed = (representation) => representation.kind === 'dynamic';
389
+ /**
390
+ * Every carrier kind ECMAScript's `ToBoolean` can never answer `false` for.
391
+ *
392
+ * Each of these is, in every shape this compiler ever selects for it, a JS
393
+ * Object or a callable -- and an Object is truthy regardless of its contents,
394
+ * empty array, empty record and zero-argument callable included. `native-
395
+ * handle` is deliberately absent even though it is also object-shaped: a host
396
+ * handle self-encodes its own absence as an invalid state
397
+ * (`representation/optional.ts`'s collapse of `T | null` onto one), which
398
+ * *is* a falsy state this fact must not claim away. `tagged-union` is absent
399
+ * from the set itself and handled by recursion in `isDeadMergeContribution`
400
+ * below, because whether one can be falsy depends on its arms, not its kind.
401
+ */
402
+ const alwaysTruthyKinds = new Set([
403
+ 'record',
404
+ 'record-with-index',
405
+ 'native-record-ref',
406
+ 'array-object',
407
+ 'dictionary',
408
+ 'typed-array',
409
+ 'promise',
410
+ // A Map/Set/WeakMap/WeakSet is an ordinary Object for ToBoolean: `new Map()`
411
+ // is truthy with zero entries, exactly as `[]` is.
412
+ 'keyed-collection',
413
+ 'proxy-object',
414
+ 'function',
415
+ 'function-family',
416
+ 'function-value-family',
417
+ 'function-value-dispatch',
418
+ // A function object is truthy whatever its convention -- and the identity
419
+ // carrier is the SAME object, reached through the handle every callable
420
+ // already owns. Its absence lives in the `optional` wrapper around it, as it
421
+ // does for every other callable kind here.
422
+ 'callable-identity',
423
+ 'generic-function-set',
424
+ 'constructor-family',
425
+ 'constructor-value-dispatch',
426
+ 'function-and-constructor'
427
+ ]);
428
+ /**
429
+ * Whether a carrier has no absent state at all -- so `a ?? b` over it never
430
+ * evaluates `b`.
431
+ *
432
+ * Read straight off `alwaysTruthyKinds` because that set is already exactly
433
+ * this fact plus more: every kind in it is an Object or a callable whose
434
+ * absence, where it has one, lives in an `optional` WRAPPER rather than in the
435
+ * carrier itself. The three carriers that self-encode absence are outside the
436
+ * set for reasons its own comment states -- `native-handle` and a
437
+ * shared-refcount `class-ref`, the two `representation/optional.ts` collapses
438
+ * `T | null` onto -- and so are `optional`, `dynamic` and every sum, each of
439
+ * which plainly has one.
440
+ *
441
+ * `constructor-family` is the measured case: node-server's `export const
442
+ * CloseEvent: typeof globalThis.CloseEvent = globalThis.CloseEvent ?? class
443
+ * extends Event {...}`. The plan gives the global read a bare constructor
444
+ * family, which is the census's own statement that the value is there -- a host
445
+ * that says otherwise says so through `semantics/normalize/absent-globals.ts`,
446
+ * which turns the read's type into `undefined` and takes the carrier out of
447
+ * this set. So the fallback class never runs, and asking for a conversion
448
+ * between two unrelated program classes is asking for a value that arm never
449
+ * produces.
450
+ */
451
+ export const carriesNoAbsence = (representation) => alwaysTruthyKinds.has(representation.kind);
452
+ /**
453
+ * Whether `representation` -- unwrapped once if it is an `optional` -- can
454
+ * only ever be absent, never a live, present-but-falsy value.
455
+ *
456
+ * This is the fact that licenses treating one arm of a merge as dead code
457
+ * rather than a missing conversion: `a && a.b` keeps `a` on the branch where
458
+ * `a` tested falsy, and an Object is never falsy, so when `a`'s own payload
459
+ * is one, the present case cannot be the reason that branch runs -- only
460
+ * `a`'s own absence can, and the checker's own type for the whole `&&`
461
+ * already reflects that by excluding the payload from the join. A bare
462
+ * (non-optional) representation with an always-truthy kind answers `true`
463
+ * too: it has no absence at all, so if it reaches here as the falsy side of
464
+ * an `&&`, the branch is not merely narrowed, it is wholly unreachable.
465
+ *
466
+ * One fact with one asker: `ir/lower-narrow.ts`'s `mergeIncoming` (what a
467
+ * dead arm lowers to). Preflight's `buildMergeNarrowingObligations` asked it
468
+ * too until Phase 1.6 deleted that second decision tree; the obligation ids
469
+ * quoted below are its historical spelling of the same pairs.
470
+ */
471
+ /**
472
+ * Whether a merge's own carrier has an absent state a dead `&&` arm can be
473
+ * materialized into.
474
+ *
475
+ * The companion fact to `isDeadMergeContribution`: that one says the kept arm
476
+ * contributes nothing but absence, this one says the merge has somewhere to
477
+ * put it. Both authorities need both halves, and both used to spell this one
478
+ * as `kind === 'optional'`.
479
+ *
480
+ * That spelling was too narrow by exactly one carrier, and it is the carrier
481
+ * this file's own `alwaysTruthyKinds` comment already names: `optional.ts`
482
+ * COLLAPSES `T | null` onto a bare `native-handle`, because a host handle
483
+ * self-encodes absence as an invalid state. So a merge whose checker type is
484
+ * `WSInst | null` has carrier `native-handle`, not `optional` -- and the
485
+ * `kind === 'optional'` test then refused a program the collapse itself
486
+ * created.
487
+ *
488
+ * Measured on `examples/dialer`: `if (e.candidate && this.ws)`, with
489
+ * `ws: WebSocketInstance | null`, raised
490
+ * `merge-narrowing:optional(native-record-ref(...),null)->native-handle(...)`,
491
+ * an obligation no conversion could ever satisfy, on a program with zero
492
+ * violations. The C++ side already had the spelling all along --
493
+ * `types.ts`'s `carriesAbsence` answers `true` for `native-handle`, so the
494
+ * constant renders as an empty handle (`gea::host::WebSocket{}`), which is
495
+ * exactly what `emit-narrowing.ts`'s `emptyHandleText` writes for the same
496
+ * carrier on the store path.
497
+ */
498
+ /**
499
+ * Whether a carrier has an `undefined` state at all -- the question a
500
+ * definedness test asks, asked of the carrier rather than of a value.
501
+ *
502
+ * `targets/cpp/emit-presence.ts`'s `definedTestText` is the same rule as a
503
+ * spelling, and delegates here rather than restating it: a carrier this answers
504
+ * `false` for renders the test as the constant `true`, which is honest -- such a
505
+ * value genuinely cannot be `undefined` -- and is exactly why a lowering that
506
+ * MERGES over a definedness guard has to ask this first. A merge over a
507
+ * constant-true test is not a merge; its absent arm is dead, and building one
508
+ * anyway hands the emitter a branch whose other side can never run.
509
+ *
510
+ * A host handle's own absence stands for `null`, never for `undefined` (see
511
+ * `optionalOf`), so it is defined whatever it holds -- as is every carrier that
512
+ * is simply a value that exists.
513
+ */
514
+ export const carriesUndefined = (representation) => {
515
+ if (representation.kind === 'undefined' || representation.kind === 'void')
516
+ return true;
517
+ if (representation.kind === 'borrowed-ref')
518
+ return carriesUndefined(representation.referent);
519
+ if (representation.kind === 'optional')
520
+ return representation.absence === 'undefined';
521
+ if (representation.kind === 'tagged-union')
522
+ return representation.arms.some((arm) => carriesUndefined(arm.value));
523
+ return representation.kind === 'dynamic';
524
+ };
525
+ /**
526
+ * Whether `ir/lower-destructuring.ts`'s array-pattern fast path already reads
527
+ * this carrier positionally, in place: a plain array, a positional tuple
528
+ * record (`ir/lower-allocation.ts`'s `lowerTupleLiteral` names the same shape
529
+ * "record" -- there is deliberately no separate tuple carrier), or a tagged
530
+ * union every arm of which is itself one of these two --
531
+ * `preflight/tuple-destructuring.ts`'s uniform tuple-union.
532
+ */
533
+ export const isArrayPatternCapable = (representation) => {
534
+ if (representation.kind === 'array-object')
535
+ return true;
536
+ if (representation.kind === 'record')
537
+ return representation.fields.every((field, index) => field.key === String(index));
538
+ if (representation.kind === 'tagged-union')
539
+ return representation.arms.every((arm) => isArrayPatternCapable(arm.value));
540
+ return false;
541
+ };
542
+ /**
543
+ * The one arm of a tagged union a nested array-pattern position can read
544
+ * positionally, when every OTHER arm cannot -- `number | number[]`, the
545
+ * per-position element of a plain (non-tuple) array whose own element is
546
+ * itself a union: exactly one arm (the array) supports positional reads, and
547
+ * the other (the number) is exactly the value ECMA-262 7.4.2 `GetIterator`
548
+ * throws a `TypeError` over. `null` for a union with zero such arms, or with
549
+ * MORE than one -- two capable arms (`number[] | string[]`) is a genuine
550
+ * ambiguity this compiler does not resolve, and refusing it is the
551
+ * fail-closed answer, not a guess.
552
+ */
553
+ export const soleArrayPatternCapableArm = (representation) => {
554
+ if (representation.kind !== 'tagged-union')
555
+ return null;
556
+ let sole = null;
557
+ for (const [index, arm] of representation.arms.entries()) {
558
+ if (!isArrayPatternCapable(arm.value))
559
+ continue;
560
+ if (sole)
561
+ return null;
562
+ sole = { index, arm: arm.value };
563
+ }
564
+ return sole;
565
+ };
566
+ /**
567
+ * The payload under a field value's own `undefined`-optional carrier, or
568
+ * `null` for every other field.
569
+ *
570
+ * Property presence no longer comes from this wrapper. Generated structs keep
571
+ * an independent bit for every `!required` field, because a present property
572
+ * whose value is `undefined` and a missing property are observably different.
573
+ * This helper remains the value-carrier decomposition used where code needs
574
+ * the payload of `T | undefined` itself.
575
+ */
576
+ export const absentFieldPayload = (field) => !field.required && field.value.kind === 'optional' && field.value.absence === 'undefined' ? field.value.payload : null;
577
+ export const carriesMergeAbsence = (representation) => representation.kind === 'optional' ||
578
+ representation.kind === 'native-handle' ||
579
+ (representation.kind === 'class-ref' && representation.ownership === 'shared-refcount');
580
+ /**
581
+ * Whether a tagged union tags absence in an arm of its own.
582
+ *
583
+ * The one fact an arm cannot see about itself, and the fact that decides
584
+ * whether the arm beside it is the absence-collapsed form of its carrier --
585
+ * see `isDeadMergeArm`.
586
+ */
587
+ const unionTagsAbsence = (union) => union.arms.some((arm) => arm.value.kind === 'null' || arm.value.kind === 'undefined' || arm.value.kind === 'void');
588
+ /**
589
+ * `isDeadMergeContribution` over a carrier that may sit INSIDE another one,
590
+ * carrying the single fact only that enclosing carrier knows: whether absence
591
+ * is tagged in a place of its own out there.
592
+ *
593
+ * `class-ref(shared-refcount)` and `native-handle` are deliberately outside
594
+ * `alwaysTruthyKinds` because `representation/optional.ts` COLLAPSES `T | null`
595
+ * onto them, so a BARE one is genuinely nullable and that null is a falsy state
596
+ * nothing may claim away. `absenceTaggedOutside` is precisely the proof that
597
+ * the collapse did not happen here, and it arrives two ways:
598
+ *
599
+ * - a union carrying its own `null`/`undefined` arm. Arms are disjoint, so a
600
+ * `present:` arm sitting beside a `null:` arm carries a type null was already
601
+ * removed from. Without this, three's `this.environment &&
602
+ * this.environment.isTexture` over a `Texture | null` field raised
603
+ * `merge-narrowing:tagged-union(undefined|null|present:class-ref(...,shared-
604
+ * refcount))->tagged-union(undefined|null|present:scalar(boolean))` -- an
605
+ * obligation no conversion could satisfy, because all three arms read live
606
+ * and `partialDeadMergeArms` therefore reported no split to rebuild from.
607
+ * - an `optional` WRAPPER around one of them. `optionalOf` collapses these two
608
+ * payloads for `absence === 'null'` and only then, so a surviving wrapper can
609
+ * only be tagged `'undefined'` -- and `union.ts` reaches that wrapper solely
610
+ * when the source union had exactly ONE absent member. Both facts together
611
+ * say `null` was never in the type, so the pointer inside is object-shaped
612
+ * and therefore always truthy. Without this, mongodb's `this.session &&
613
+ * this.session.inTransaction()` -- `session: ClientSession | undefined`, the
614
+ * guard-and-call idiom -- raised `merge-narrowing:optional(class-ref(...,
615
+ * shared-refcount),undefined)->optional(scalar(boolean),undefined)`, 39 rows
616
+ * over three classes, for a merge whose kept arm can only ever be absent.
617
+ */
618
+ const isDeadMergePayload = (representation, absenceTaggedOutside) => {
619
+ if (representation.kind === 'optional')
620
+ return isDeadMergePayload(representation.payload, true);
621
+ if (representation.kind === 'tagged-union') {
622
+ const tagsAbsence = unionTagsAbsence(representation);
623
+ return representation.arms.every((arm) => isDeadMergePayload(arm.value, tagsAbsence || absenceTaggedOutside));
624
+ }
625
+ if (absenceTaggedOutside && (representation.kind === 'class-ref' || representation.kind === 'native-handle'))
626
+ return true;
627
+ // A class instance is object-shaped and so always truthy -- unless it is the
628
+ // one shape that self-encodes absence, exactly as `native-handle` does. A
629
+ // REFCOUNTED instance is a `gea::Ref<T>` that `optional.ts` collapses
630
+ // `T | null` onto, so a null one is a falsy state this must not claim away.
631
+ if (representation.kind === 'class-ref')
632
+ return representation.ownership !== 'shared-refcount';
633
+ return alwaysTruthyKinds.has(representation.kind);
634
+ };
635
+ export const isDeadMergeContribution = (representation) => isDeadMergePayload(representation, false);
636
+ /**
637
+ * The `||` mirror of `isDeadMergeContribution`: a kept operand with NO truthy
638
+ * state. `a || b` publishes `a` only when `ToBoolean(a)` is true, and a carrier
639
+ * that is only ever `null`/`undefined` (propertyHelper's `verifyProp || name`,
640
+ * where every caller passes `null` or nothing) has no such state, so the
641
+ * kept branch never runs and the merge only ever publishes the evaluated
642
+ * side. Nothing is converted because nothing arrives. Asked by
643
+ * `ir/lower-narrow.ts`'s `mergeIncoming`. Deliberately not extended to an
644
+ * `optional` or a union: those carry a payload that CAN be truthy.
645
+ */
646
+ export const contributesNoTruthiness = (representation) => representation.kind === 'null' || representation.kind === 'undefined' || representation.kind === 'void';
647
+ /**
648
+ * Whether every falsy state this carrier has is an ABSENCE -- the WHOLE-operand
649
+ * question, as against `isDeadMergeContribution`'s per-arm one.
650
+ *
651
+ * The two differ over exactly the carriers `optional.ts` COLLAPSES `T | null`
652
+ * onto: a bare `class-ref(shared-refcount)` (a `gea::Ref<T>`) and a bare
653
+ * `native-handle`. `isDeadMergeContribution` must refuse those, and its own
654
+ * comment says why -- a null `Ref` is a falsy state, and an ARM proven dead is
655
+ * DROPPED from `partialDeadMergeArms`'s rebuild, so a null flowing through a
656
+ * dropped arm would fall out of the chain into a neighbour's value.
657
+ *
658
+ * Asked of a whole `&&` operand into a merge that carries an absence, nothing
659
+ * is dropped and the answer changes. ECMAScript's `ToBoolean` is `true` for
660
+ * every object, so the only value such a carrier can hold on the branch where
661
+ * it tested falsy is its own null -- and the merge's own absence is where that
662
+ * null belongs. `crash.ts`'s `this.engine && this.endBuffer` (`AudioEngine |
663
+ * null` guarding a `BufferLike | null`) is the shape: the kept operand
664
+ * contributes nothing the merge does not already have a state for, yet
665
+ * `merge-narrowing:class-ref(...)->optional(native-record-ref(...),null)`
666
+ * asked for a conversion no registry could hold.
667
+ *
668
+ * Strictly wider than `isDeadMergeContribution` -- `absenceTaggedOutside` only
669
+ * ever ENABLES the return above -- so every merge the narrower fact licensed
670
+ * is licensed identically here. `ir/lower-narrow.ts`'s `mergeIncoming` asks
671
+ * this one and does not re-derive it.
672
+ */
673
+ export const contributesOnlyAbsence = (representation) => isDeadMergePayload(representation, true);
674
+ /**
675
+ * The per-arm decomposition of `isDeadMergeContribution`, asked only when the
676
+ * WHOLE answer is neither wholly `true` nor wholly `false`.
677
+ *
678
+ * `isDeadMergeContribution` covers two ends: every arm dead (the kept operand
679
+ * contributes nothing but its own absence -- `mergeIncoming`'s existing
680
+ * bypass) and every arm live (an ordinary conversion, already the general
681
+ * conversion graph's job). This is the middle: SOME arms dead, at least one
682
+ * live -- `results[name]` typed `T[] | string`, where `T[]` can never be the
683
+ * reason a `&&` fell through but `string` can (an empty one).
684
+ *
685
+ * Returns `null` for anything that is not that middle case: not a tagged
686
+ * union at all (once unwrapped of one optional layer, matching
687
+ * `isDeadMergeContribution`'s own unwrap), wholly dead, or wholly live. Each
688
+ * `null` is a real "does not apply", not a missing answer -- the caller falls
689
+ * through to whichever of the two existing paths does apply.
690
+ *
691
+ * One fact, asked from both authorities that must never disagree about it,
692
+ * exactly as `isDeadMergeContribution` and `carriesMergeAbsence` already are:
693
+ * `ir/lower-narrow.ts`'s `mergeIncoming`, which both decides to rebuild via
694
+ * the live-arm proof instead of a general conversion and checks that the
695
+ * rebuild is buildable at all -- every live arm must actually have somewhere
696
+ * to convert to, and the source's own absence, if it has one, needs
697
+ * `carriesMergeAbsence(merged)` to hold it -- blocking the body otherwise.
698
+ */
699
+ /**
700
+ * Whether `representation` is boolean-shaped: itself `scalar(boolean)`, or an
701
+ * `optional` whose payload is.
702
+ *
703
+ * The signal `ir/lower-narrow.ts`'s `mergeIncoming` checks
704
+ * before licensing `ToBoolean` (`targets/cpp/emit-presence.ts`'s
705
+ * `booleanTestText`) as a live arm's conversion into a `&&` merge's own
706
+ * carrier, rather than requiring a structural, value-preserving one.
707
+ *
708
+ * Sound only here, at a `&&` merge whose own published type already
709
+ * collapsed to boolean-or-absent: ECMA-262's own definition of `&&` decides
710
+ * which operand to keep by `ToBoolean`, so when the checker's inferred type
711
+ * for the WHOLE expression is `boolean | undefined` rather than the kept
712
+ * operand's own type, it has already proven the kept contribution is
713
+ * meaningful only as its truthiness -- an object-shaped arm has no boolean
714
+ * value of its own, but it does have a `ToBoolean` answer, and that answer is
715
+ * exactly what the checker's type says this merge publishes. This is why
716
+ * `partialDeadMergeArms`'s live/dead split still matters here rather than
717
+ * making this a blanket "any carrier converts to boolean" capability: the
718
+ * SAME renderer applies `ToBoolean` only to arms this merge's own narrowing
719
+ * already proved live, one call site's condition and nowhere else -- not a
720
+ * new entry in the general conversion registry, which would let it fire for
721
+ * any unrelated occurrence of the same representation pair.
722
+ */
723
+ /**
724
+ * Whether a `&&` merge publishes its kept operand's TRUTHINESS rather than
725
+ * its value.
726
+ *
727
+ * The same proof `isBooleanShapedMergeTarget` states for one live arm of a
728
+ * partially-dead tagged union, asked of the kept operand as a WHOLE -- and
729
+ * for the same reason. ECMA-262 decides which operand `&&` keeps by
730
+ * `ToBoolean` in the first place, so when the checker's type for the whole
731
+ * expression is a plain `boolean` while the kept operand's own carrier is
732
+ * not, it has already proven the kept contribution meaningful only as its
733
+ * truthiness. `object && object.isObject3D` over three's `Object3D` is the
734
+ * shape: the merge publishes `boolean`, the kept side is a
735
+ * `class-ref(shared-refcount)` -- nullable, because `optional.ts` collapses
736
+ * `T | null` onto it -- and its `ToBoolean` (`emit-presence.ts`'s
737
+ * `booleanTestText`, total over every carrier) IS the value this branch
738
+ * yields.
739
+ *
740
+ * Deliberately EXACT, not `isBooleanShapedMergeTarget`'s optional-tolerant
741
+ * test: `optional(scalar(boolean))` would need the boolean wrapped back into
742
+ * an optional, a second step `ir/lower-narrow.ts` has no conversion use to
743
+ * name here. A merge that publishes `boolean | undefined` keeps raising its
744
+ * obligation, correctly, rather than being half-answered.
745
+ *
746
+ * Asked by `ir/lower-narrow.ts`'s `mergeIncoming`, the one authority on what
747
+ * a merge arm builds.
748
+ */
749
+ export const mergesAsTruthiness = (merged) => merged.kind === 'scalar' && merged.domain === 'boolean';
750
+ export const isBooleanShapedMergeTarget = (representation) => {
751
+ const payload = representation.kind === 'optional' ? representation.payload : representation;
752
+ return payload.kind === 'scalar' && payload.domain === 'boolean';
753
+ };
754
+ export const partialDeadMergeArms = (representation) => {
755
+ const candidate = representation.kind === 'optional' ? representation.payload : representation;
756
+ const keptIsOptional = representation.kind === 'optional';
757
+ if (candidate.kind !== 'tagged-union')
758
+ return null;
759
+ const tagsAbsence = unionTagsAbsence(candidate);
760
+ const liveIndices = candidate.arms
761
+ .map((arm, index) => (isDeadMergePayload(arm.value, tagsAbsence || keptIsOptional) ? -1 : index))
762
+ .filter((index) => index >= 0);
763
+ if (liveIndices.length === 0 || liveIndices.length === candidate.arms.length)
764
+ return null;
765
+ return { payload: candidate, liveIndices, keptIsOptional };
766
+ };
767
+ /**
768
+ * The ownership class a carrier crosses a body boundary under, or `null` when
769
+ * it states none a copy can be proven safe under.
770
+ *
771
+ * One function, because everything that spells a `capture:` capability keys
772
+ * the manifest's `captureOwnershipSupport` by this string: `ir/certify.ts`
773
+ * demands it, `targets/cpp/captures.ts` admits it, and
774
+ * `emit-binding-reference.ts` names it in the refusal when admission says no.
775
+ *
776
+ * It used to be two. This one answered `'value'` by `default` and the one in
777
+ * `ir/captures.ts` answered `null` for `unresolved`, `proxy-object`,
778
+ * `borrowed-ref`, `dense-buffer`, `native-sequence`, `iterator` and `promise`
779
+ * -- so certification published `capture:value` for carriers whose admission
780
+ * then refused them by name, the same certify/print disagreement 2.3 fixed
781
+ * four of. The fail-CLOSED answer is the correct one and is what survives: a
782
+ * carrier that names no copy-safe ownership must refuse where the certificate
783
+ * is minted, not where the text is spelled. The hole was invisible only
784
+ * because `AllocateCallableOperation.captures` is still unfilled, so
785
+ * `ir/certify.ts`'s own demand list is empty today.
786
+ */
787
+ export const ownershipOf = (representation) => {
788
+ switch (representation.kind) {
789
+ case 'void':
790
+ case 'scalar':
791
+ case 'string':
792
+ // `gea::Symbol` is an interned id and nothing aliases one, exactly as for
793
+ // `string` above.
794
+ case 'symbol':
795
+ case 'null':
796
+ case 'undefined':
797
+ case 'function':
798
+ case 'function-family':
799
+ case 'function-value-family':
800
+ case 'function-value-dispatch':
801
+ case 'generic-function-set':
802
+ case 'constructor-family':
803
+ case 'constructor-value-dispatch':
804
+ case 'function-and-constructor':
805
+ // Nothing else aliases a plain value. A callable carrier's own
806
+ // `environment` pointer is a deliberate, permanent leak (see
807
+ // `emitAllocateCallable`), so copying the `{invoke, environment}` pair
808
+ // into another environment is exactly as safe as the original copy.
809
+ return 'value';
810
+ case 'native-handle':
811
+ // A host handle is copied by value and the HOST owns what it names:
812
+ // every carrier a host states for one is a value type -- an id, a small
813
+ // struct, or a standard container -- and none owns the object on the
814
+ // other side of the boundary. A copy in an environment stays good for
815
+ // exactly as long as the host keeps the thing it names.
816
+ return 'value';
817
+ case 'class-ref':
818
+ case 'record':
819
+ case 'record-with-index':
820
+ case 'native-record-ref':
821
+ case 'array-object':
822
+ case 'dictionary':
823
+ case 'typed-array':
824
+ case 'array-buffer':
825
+ case 'shared-array-buffer':
826
+ case 'data-view':
827
+ case 'keyed-collection':
828
+ return representation.ownership;
829
+ case 'optional':
830
+ // `gea::Optional<T>` copies its payload by the same rule `T` copies by;
831
+ // an optional local is not a different capture question from a required
832
+ // one, only a wrapped one.
833
+ return ownershipOf(representation.payload);
834
+ case 'dynamic':
835
+ // The box copies by value and the copy is independent: `gea::Value`'s
836
+ // payload is a `std::shared_ptr<void>`, so a copy is a refcount bump
837
+ // over an immutable-by-construction cell.
838
+ return 'value';
839
+ case 'tagged-union': {
840
+ // A sum is copy-safe only when every arm is: the live arm is a runtime
841
+ // fact. Ask each arm's ownership rule instead of maintaining a second
842
+ // table that could disagree with those same carriers outside a union.
843
+ let weakest = 'value';
844
+ for (const arm of representation.arms) {
845
+ const ownership = ownershipOf(arm.value);
846
+ if (ownership === null)
847
+ return null;
848
+ if (ownership !== 'value')
849
+ weakest = ownership;
850
+ }
851
+ return weakest;
852
+ }
853
+ default:
854
+ // `unresolved`, `proxy-object`, `borrowed-ref`, `dense-buffer`,
855
+ // `native-sequence`, `iterator`, `promise`: none states a copy-safe
856
+ // ownership, either because the carrier has no ownership field to read
857
+ // (a proxy's two-part identity) or because it is explicitly borrowed
858
+ // from somewhere else. Refusing them is the fail-closed answer, not a
859
+ // gap to route around with a box.
860
+ return null;
861
+ }
862
+ };
863
+ /**
864
+ * The `capture:` capability discriminator for a carrier -- what both the
865
+ * demand and the refusal spell.
866
+ *
867
+ * A carrier with no copy-safe ownership still has to name SOMETHING, because
868
+ * a demand keyed on a name the manifest cannot publish is precisely how the
869
+ * refusal stays typed and attributable: `capture:unsupported-proxy-object`
870
+ * says which carrier could not be transported, where a bare `capture:null`
871
+ * would say only that one could not. `null` for the representation itself is
872
+ * a placement that never stated one, which is a different unknown and spells
873
+ * differently.
874
+ */
875
+ export const captureCapabilityOf = (representation) => representation === null ? 'unstated' : (ownershipOf(representation) ?? `unsupported-${representation.kind}`);
876
+ /**
877
+ * Every carrier reachable inside a representation, including the root.
878
+ *
879
+ * One walk, shared: `verify.ts`'s guards ask "is anything in here unresolved /
880
+ * boxed / a dense buffer", and a probe in the emitter asks "is anything in here
881
+ * unresolved" before it asks for a physical C++ type. Two copies of this switch
882
+ * would answer those questions over different carrier sets, which is precisely
883
+ * how a fail-closed guard silently stops covering a kind.
884
+ *
885
+ * ⛔ `record-with-index` was missing from this switch and fell through to
886
+ * `default`, so nothing inside one was ever visited: mongodb's `Filter` -- a
887
+ * record-with-index whose fields are the whole query -- was invisible to every
888
+ * guard built on this walk.
889
+ */
890
+ export function* walkRepresentation(representation, visited = new Set()) {
891
+ // With `visited`, a carrier OBJECT is yielded once across every walk that
892
+ // shares the set. The derive memo hands every reader of one structural
893
+ // type the same object, so a record's field carriers, a union's arms and
894
+ // the selections that embed them are one DAG, not a forest of trees --
895
+ // and a per-node question asked of that DAG is answered once per node.
896
+ if (visited.has(representation))
897
+ return;
898
+ visited.add(representation);
899
+ yield representation;
900
+ const walk = (inner) => walkRepresentation(inner, visited);
901
+ switch (representation.kind) {
902
+ case 'record':
903
+ for (const field of representation.fields)
904
+ yield* walk(field.value);
905
+ return;
906
+ case 'record-with-index':
907
+ for (const field of representation.fields)
908
+ yield* walk(field.value);
909
+ for (const index of representation.indexes)
910
+ yield* walk(index.value);
911
+ return;
912
+ case 'proxy-object':
913
+ yield* walk(representation.target);
914
+ yield* walk(representation.handler);
915
+ return;
916
+ case 'borrowed-ref':
917
+ yield* walk(representation.referent);
918
+ return;
919
+ case 'array-object':
920
+ yield* walk(representation.element);
921
+ for (const field of representation.extension ?? [])
922
+ yield* walk(field.value);
923
+ return;
924
+ case 'dense-buffer':
925
+ case 'native-sequence':
926
+ yield* walk(representation.element);
927
+ return;
928
+ case 'iterator':
929
+ yield* walk(representation.element);
930
+ yield* walk(representation.resume);
931
+ yield* walk(representation.completion);
932
+ return;
933
+ case 'promise':
934
+ yield* walk(representation.value);
935
+ return;
936
+ case 'keyed-collection':
937
+ yield* walk(representation.key);
938
+ if (representation.value)
939
+ yield* walk(representation.value);
940
+ return;
941
+ case 'dictionary':
942
+ yield* walk(representation.value);
943
+ return;
944
+ case 'optional':
945
+ yield* walk(representation.payload);
946
+ return;
947
+ case 'tagged-union':
948
+ for (const arm of representation.arms)
949
+ yield* walk(arm.value);
950
+ return;
951
+ case 'function':
952
+ case 'function-family':
953
+ case 'constructor-family':
954
+ case 'constructor-value-dispatch':
955
+ case 'function-value-family':
956
+ case 'function-value-dispatch':
957
+ for (const parameter of representation.abi.parameters)
958
+ yield* walk(parameter.value);
959
+ yield* walk(representation.abi.result);
960
+ if (representation.abi.receiver)
961
+ yield* walk(representation.abi.receiver);
962
+ return;
963
+ case 'function-and-constructor':
964
+ for (const abi of [representation.call, representation.construct]) {
965
+ for (const parameter of abi.parameters)
966
+ yield* walk(parameter.value);
967
+ yield* walk(abi.result);
968
+ if (abi.receiver)
969
+ yield* walk(abi.receiver);
970
+ }
971
+ return;
972
+ case 'unresolved':
973
+ case 'void':
974
+ case 'scalar':
975
+ case 'string':
976
+ case 'symbol':
977
+ case 'null':
978
+ case 'undefined':
979
+ case 'class-ref':
980
+ case 'native-handle':
981
+ case 'native-record-ref':
982
+ case 'typed-array':
983
+ case 'array-buffer':
984
+ case 'shared-array-buffer':
985
+ case 'data-view':
986
+ case 'dynamic':
987
+ case 'generic-function-set':
988
+ case 'callable-identity':
989
+ return;
990
+ default: {
991
+ const unhandled = representation;
992
+ throw new Error(`unhandled representation in traversal: ${String(unhandled)}`);
993
+ }
994
+ }
995
+ }
996
+ /**
997
+ * Whether a carrier holds lattice bottom anywhere inside it.
998
+ *
999
+ * `unresolved` has no physical type, and `targets/cpp/types.ts`'s `cppTypeOf`
1000
+ * throws on one rather than inventing a slot -- correctly, since a carrier that
1001
+ * was never selected must not materialize as a default-constructed value. That
1002
+ * makes it a hazard for the emitter's *probes*: a function asking "could this
1003
+ * record be recast to an array?" is asking a question with a legitimate `false`
1004
+ * answer, and it must not blow up the compile to find out. Asking this first is
1005
+ * how such a probe stays a probe.
1006
+ */
1007
+ export const containsUnresolved = (representation) => {
1008
+ for (const found of walkRepresentation(representation))
1009
+ if (found.kind === 'unresolved')
1010
+ return true;
1011
+ return false;
1012
+ };
1013
+ /**
1014
+ * The carrier every `throw` converts its value into: ECMAScript does not
1015
+ * type a thrown value, so this is the one genuinely dynamic boundary the
1016
+ * language itself states. The catch side reads it back without conversion
1017
+ * (`ir/lower-exceptions.ts`).
1018
+ */
1019
+ export const thrownValueCarrier = { kind: 'dynamic', reason: 'thrown-error-carrier' };