@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,37 @@
1
+ import type { Representation } from '../representation/model.js';
2
+ import type { ConversionCapability, ConversionNodeId } from './algebra.js';
3
+ import type { ConversionRuntimeRegistry } from './registry.js';
4
+ export type { ClassifierMaterializerPair, ConversionRuntimeRegistry } from './registry.js';
5
+ export { validateConversionGraph } from './graph-validation.js';
6
+ /**
7
+ * Derivation of the dynamic-conversion capability algebra.
8
+ *
9
+ * This module answers one question: given a target `Representation`, what is
10
+ * the capability for converting an already-boxed dynamic value into it? The
11
+ * answer is read off the normative table in the architecture doc's "Exhaustive
12
+ * dynamic-conversion capability algebra" section, not re-derived from source
13
+ * shape or invented per call site. A kind the table marks `Never` returns
14
+ * `never` unconditionally; a kind the table gates on installed runtime support
15
+ * consults the registry and returns `never` when nothing is installed, rather
16
+ * than fabricating a materializer that would turn a missing capability into a
17
+ * silent miscompile.
18
+ */
19
+ /**
20
+ * Recursion state for one derivation.
21
+ *
22
+ * `inProgress` maps a `Representation` object -- by reference, not by a
23
+ * structural key -- to the node id it was assigned when first entered. A
24
+ * structural key would have to walk the whole shape to compute, which loops
25
+ * forever on a genuinely cyclic `Representation` graph (the standard way to
26
+ * express a recursive type without an explicit indirection layer); checking
27
+ * the exact object reference already on the current path costs nothing and
28
+ * terminates immediately. A shared, non-cyclic leaf reused at two unrelated
29
+ * positions is never mistaken for a cycle, because each recursive call only
30
+ * ever sees the map built along its own ancestor chain, not its siblings'.
31
+ */
32
+ export interface ConversionDerivationContext {
33
+ readonly registry: ConversionRuntimeRegistry;
34
+ readonly inProgress: ReadonlyMap<Representation, ConversionNodeId>;
35
+ }
36
+ export declare const createConversionDerivationContext: (registry: ConversionRuntimeRegistry) => ConversionDerivationContext;
37
+ export declare const deriveConversionCapability: (target: Representation, context: ConversionDerivationContext) => ConversionCapability;
@@ -0,0 +1,260 @@
1
+ import { representationKey } from '../representation/model.js';
2
+ import { classRefDomainsOverlap, classifierDomainsOverlap, never } from './algebra.js';
3
+ export { validateConversionGraph } from './graph-validation.js';
4
+ export const createConversionDerivationContext = (registry) => ({
5
+ registry,
6
+ inProgress: new Map()
7
+ });
8
+ /** Wraps an installed pair as `Atom`, or `never` when nothing is installed or the pair disagrees on domain. */
9
+ const atomFrom = (pair, missingReason) => {
10
+ if (!pair)
11
+ return never(missingReason);
12
+ if (pair.classifier.domain !== pair.materializer.domain) {
13
+ return never(`installed classifier domain "${pair.classifier.domain}" does not equal installed materializer domain "${pair.materializer.domain}"`);
14
+ }
15
+ return { kind: 'atom', classifier: pair.classifier, materializer: pair.materializer };
16
+ };
17
+ /** An installed pair as `Atom`, or `null` so the caller can state its own refusal. */
18
+ const maybeAtom = (pair) => pair === null ? null : { kind: 'atom', classifier: pair.classifier, materializer: pair.materializer };
19
+ export const deriveConversionCapability = (target, context) =>
20
+ // A recursive reference must name the graph node that actually owns this
21
+ // carrier. `buildConversionGraph` keys nodes by `representationKey`, not by
22
+ // a derivation-local path such as "root".
23
+ deriveAt(target, context, representationKey(target));
24
+ const deriveAt = (target, context, path) => {
25
+ const enclosing = context.inProgress.get(target);
26
+ if (enclosing !== undefined)
27
+ return { kind: 'recursive-ref', node: enclosing };
28
+ // `path` describes a capability location for diagnostics; recursive refs
29
+ // name graph nodes. Keep those namespaces separate so a nested recurrence
30
+ // points to `representationKey(target)`, the id buildConversionGraph emits.
31
+ const nested = {
32
+ registry: context.registry,
33
+ inProgress: new Map(context.inProgress).set(target, representationKey(target))
34
+ };
35
+ switch (target.kind) {
36
+ case 'unresolved':
37
+ // Lattice bottom: selection never happened, so there is no physical target to convert into.
38
+ return never(`no physical target exists (unresolved: ${target.reason})`);
39
+ case 'void':
40
+ return never('void is not a runtime value carrier');
41
+ case 'scalar':
42
+ // A TypeScript annotation does not perform ToNumber. Dynamic values
43
+ // reaching a scalar slot are assertions and require the slot's exact
44
+ // runtime tag/range materializer. Explicit ToNumber lives at its own
45
+ // semantic operation.
46
+ return atomFrom(context.registry.scalarMaterializer(target.domain), `no installed exact tag/range materializer for scalar domain "${target.domain}"`);
47
+ case 'string': {
48
+ // A `string` annotation is an exact String-tag assertion, not implicit
49
+ // ToString. String(value), templates, and property keys request that
50
+ // abstract operation at their own semantic sites.
51
+ return atomFrom(context.registry.stringMaterializer(), 'no installed exact string-tag materializer');
52
+ }
53
+ case 'symbol':
54
+ return atomFrom(context.registry.symbolMaterializer(), 'no installed exact symbol-tag materializer');
55
+ case 'null':
56
+ return atomFrom(context.registry.nullMaterializer(), 'the runtime does not distinguish null with an exact tag');
57
+ case 'undefined':
58
+ return atomFrom(context.registry.undefinedMaterializer(), 'the runtime does not distinguish undefined with an exact tag');
59
+ case 'class-ref':
60
+ return atomFrom(context.registry.classRefMaterializer(target.declaration, target.ownership), `no installed nominal-token materializer for class ${target.declaration} (${target.ownership}); structural object tests do not qualify`);
61
+ case 'native-handle':
62
+ return atomFrom(context.registry.nativeHandleMaterializer(target.protocol, target.version, target.native), `no versioned host-protocol materializer installed for ${target.protocol}@${target.version}`);
63
+ case 'record':
64
+ // A record assertion is an object product: every required key and every
65
+ // typed field must be checked from the dynamic object. The emitter may
66
+ // keep an exact boxed payload as a fast path, but that optimization does
67
+ // not change the conversion capability into an identity-only claim -- an
68
+ // arbitrary dynamic object still has to materialize the declared shape.
69
+ if (target.accessors.length !== 0)
70
+ return never('a record with accessors has no pure dynamic product materializer');
71
+ return deriveRecord(target, nested, path);
72
+ case 'record-with-index':
73
+ // The algebra has no shape for this carrier's open half for the same
74
+ // reason it has none for `dictionary` (below): Product needs a complete
75
+ // frozen field list, and the index signature is deliberately open. A
76
+ // materializer that only populated the named fields and left the
77
+ // sidecar empty would silently drop every dynamic-keyed property a
78
+ // dynamic value actually carried, which is a worse answer than refusing.
79
+ return (maybeAtom(context.registry.boxedIdentityMaterializer(target)) ??
80
+ never(`record-with-index shape "${target.shapeId}" has an open dictionary sidecar; no checked, semantics-preserving ` +
81
+ 'object/dictionary view exists for it, and a snapshot cast is forbidden'));
82
+ case 'proxy-object':
83
+ return never('a Proxy cannot be reconstructed from an arbitrary object value');
84
+ case 'native-record-ref':
85
+ // The same round trip a `record` gets immediately above, and available
86
+ // for exactly the same reason: `Value::box` records the payload's own
87
+ // C++ type whoever owns the layout, so a `gea::Ref<gea::runtime::Date>`
88
+ // this program boxed is recognized and handed back by the identical
89
+ // primitive. The refusal below is the honest answer only for the
90
+ // ownerships no round trip exists for -- a `borrowed` reference has no
91
+ // lifetime to hand back, and the registry says so by answering `null`.
92
+ return atomFrom(context.registry.recordRefMaterializer(target.shapeId, target.ownership), `an erased or borrowed native reference to shape "${target.shapeId}" (${target.ownership}) is not recoverable from a dynamic value`);
93
+ case 'borrowed-ref':
94
+ return never('lifetime and alias authority cannot be synthesized');
95
+ case 'array-object':
96
+ return deriveArrayObject(target, nested, path);
97
+ case 'dense-buffer':
98
+ // Compiler/runtime-private storage per representation/model.ts; no JavaScript value is ever observed as one.
99
+ return never('a dense buffer is compiler/runtime-private storage, never a JavaScript-observable value');
100
+ case 'typed-array':
101
+ // ECMA-262 23.2's typed array views have no generic "wrap this dynamic
102
+ // value" constructor: `new Uint8Array(dynamicValue)` dispatches on
103
+ // `dynamicValue`'s own runtime shape (a length, an ArrayBuffer, an
104
+ // iterable) rather than performing one uniform conversion, so there is
105
+ // no single materializer this algebra could name for a fixed target
106
+ // element width.
107
+ return (maybeAtom(context.registry.boxedIdentityMaterializer(target)) ??
108
+ never('a typed array cannot be reconstructed from an arbitrary dynamic value; no single ECMAScript operation produces one that way'));
109
+ case 'array-buffer':
110
+ case 'shared-array-buffer':
111
+ // The same refusal one level down, and for a stronger reason: an
112
+ // ArrayBuffer is an OBJECT IDENTITY over a block of bytes, so the only
113
+ // way to obtain one from a dynamic value is to unwrap the identity the
114
+ // value already holds -- which is a brand check this algebra has no
115
+ // shape for -- and the alternative, copying the bytes, would produce a
116
+ // buffer no view of the original aliases.
117
+ return (maybeAtom(context.registry.boxedIdentityMaterializer(target)) ??
118
+ never('an ArrayBuffer is an object identity over a byte block; no pure projection reconstructs one from a dynamic value'));
119
+ case 'data-view':
120
+ return never('a DataView is an object identity over a byte block; no pure projection reconstructs one from a dynamic value');
121
+ case 'native-sequence':
122
+ return never('a storage snapshot is not an ECMAScript Array identity');
123
+ case 'iterator':
124
+ return never('iterator acquisition is an effectful semantic protocol, not a pure projection');
125
+ case 'promise':
126
+ return never('promise assimilation is an effectful semantic protocol, not a pure projection');
127
+ case 'dictionary':
128
+ // The round trip first, the same order and for the same reason `record`
129
+ // above takes it: a `gea::Dictionary<V>` THIS program boxed comes back
130
+ // as itself, recognized by the payload type `Value::box` recorded, with
131
+ // no key walk and no reconstruction.
132
+ //
133
+ // The refusal below is about RECONSTRUCTION and stays exactly right for
134
+ // it: the algebra has no shape for an open string-keyed view -- Product
135
+ // needs a complete frozen field list, Collection's domain is
136
+ // Array-shaped -- so building a dictionary out of an arbitrary dynamic
137
+ // value would be the fabricated materializer this module must not
138
+ // produce. Handing back the object that was boxed is not that: it is a
139
+ // tag check, an address check and a handle copy.
140
+ return (maybeAtom(context.registry.boxedIdentityMaterializer(target)) ??
141
+ never('no checked, semantics-preserving object/dictionary view exists; a snapshot cast is forbidden'));
142
+ case 'keyed-collection':
143
+ // Same gap as `dictionary` above, one step further out. Recovering a
144
+ // `Map<K, V>` from a box would need a runtime brand check plus a
145
+ // per-entry checked conversion of BOTH positions, and this registry
146
+ // installs no such classifier -- v1 spelled that route as
147
+ // `gea_cpp_typed_js_map::from_dynamic_checked`, which is exactly the
148
+ // boxed round trip this compiler declines to build.
149
+ return never('no checked Map/Set materializer is installed; recovering a keyed collection from a dynamic value needs a runtime ' +
150
+ 'brand check plus a per-entry checked conversion of both key and value');
151
+ case 'function':
152
+ return atomFrom(context.registry.functionMaterializer(target.functionId, target.abi), `category-only function checks are insufficient; no authenticated callable-identity materializer installed for ${target.functionId}`);
153
+ case 'function-family':
154
+ return never('a closed authenticated family tag and ABI join are required, and family authority is not a runtime classifier/materializer');
155
+ case 'constructor-family':
156
+ case 'constructor-value-dispatch':
157
+ case 'function-and-constructor':
158
+ return never('constructor identity is nominal authority; no runtime materializer can rediscover it from a dynamic value');
159
+ case 'function-value-family':
160
+ return never('family membership and optional absence require exact tag authority that no runtime materializer can supply');
161
+ case 'generic-function-set':
162
+ return never('a generic function set is a compile-time choice among source declarations; no runtime value materializes one');
163
+ case 'callable-identity':
164
+ // A boxed value that IS a function does carry one of these, but reading
165
+ // it back needs an authenticated callable classifier, and this registry
166
+ // installs none -- the same gap `function` above states.
167
+ return never('no installed classifier recovers a function identity from a dynamic value');
168
+ case 'function-value-dispatch':
169
+ return atomFrom(context.registry.functionValueDispatchMaterializer(target.abi), 'no checked dynamic Function adapter is installed for this evaluated dispatch ABI');
170
+ case 'optional':
171
+ return deriveOptional(target, nested, path);
172
+ case 'tagged-union':
173
+ return deriveTaggedUnion(target, nested, path);
174
+ case 'dynamic':
175
+ return { kind: 'identity' };
176
+ }
177
+ };
178
+ const deriveRecord = (target, context, path) => {
179
+ const materializer = context.registry.recordMaterializer(target.shapeId, target.ownership);
180
+ if (!materializer)
181
+ return never(`no installed product materializer for record shape "${target.shapeId}" (${target.ownership})`);
182
+ const fields = target.fields.map((field) => ({
183
+ key: field.key,
184
+ required: field.required,
185
+ capability: deriveAt(field.value, context, `${path}.${field.key}`)
186
+ }));
187
+ return { kind: 'product', fields, materializer };
188
+ };
189
+ const deriveArrayObject = (target, context, path) => {
190
+ // The fields an extended interface adds have no dynamic source: a boxed
191
+ // value materialized element by element is a plain array, and reading it
192
+ // as one with fields would hand back defaults for data the value never
193
+ // carried.
194
+ if (target.extension !== null)
195
+ return never("an Array carrying an extended interface's typed fields has no dynamic source for those fields");
196
+ const domain = context.registry.arrayObjectDomain(target.ownership);
197
+ if (!domain)
198
+ return never(`no installed materializable-ordinary-Array domain for ownership "${target.ownership}"`);
199
+ if (!domain.preservesHoles || !domain.preservesIdentity) {
200
+ // The table requires hole/present-undefined preservation and shared Array identity outright; an
201
+ // installed domain that drops either is not the domain the architecture calls for, so it fails closed.
202
+ return never('installed array domain does not preserve hole and shared-identity semantics required for array-object');
203
+ }
204
+ const element = deriveAt(target.element, context, `${path}[]`);
205
+ return { kind: 'collection', element, domain };
206
+ };
207
+ const deriveOptional = (target, context, path) => {
208
+ // `target.absence` names WHICH of the two absent values this optional means --
209
+ // passing it through is what lets a backend answer `Null` for one and
210
+ // `Undefined` for the other rather than being forced to pick one tag for both
211
+ // (see `optionalAbsenceTag`'s own doc: `gea::Optional<T>` records only
212
+ // presence/absence, so a single fixed tag would silently mismatch whichever
213
+ // spelling it did not choose).
214
+ const absenceTag = context.registry.optionalAbsenceTag(target.absence);
215
+ if (absenceTag === null)
216
+ return never("no exact absence tag is installed to distinguish an optional's absent case");
217
+ const payload = deriveAt(target.payload, context, `${path}.payload`);
218
+ return { kind: 'optional', payload, absenceTag };
219
+ };
220
+ const deriveTaggedUnion = (target, context, path) => {
221
+ const seenTags = new Set();
222
+ for (const arm of target.arms) {
223
+ if (seenTags.has(arm.tag))
224
+ return never(`tagged-union arms are not a complete unique-tag census: duplicate tag "${arm.tag}"`);
225
+ seenTags.add(arm.tag);
226
+ }
227
+ // Nominal family tests admit descendants. Consequently `Base | Derived`
228
+ // has no unique dynamic arm for a Derived allocation: both projections are
229
+ // true, and choosing by declaration order would silently change the union's
230
+ // stored identity. Sibling program classes remain disjoint under the
231
+ // single-inheritance class table; only an ancestor relation is overlap.
232
+ for (let left = 0; left < target.arms.length; left++) {
233
+ const leftValue = target.arms[left].value;
234
+ if (leftValue.kind !== 'class-ref')
235
+ continue;
236
+ for (let right = left + 1; right < target.arms.length; right++) {
237
+ const rightValue = target.arms[right].value;
238
+ if (rightValue.kind === 'class-ref' && classRefDomainsOverlap(leftValue, rightValue))
239
+ return never('tagged-union nominal arms overlap through a base/derived class family and have no unique dynamic member');
240
+ }
241
+ }
242
+ // Collect every arm's classifier before deriving any payload capability, so disjointness is proved
243
+ // from the classifiers' own domains -- never inferred from the order the arms happen to be declared in.
244
+ const classified = [];
245
+ for (const arm of target.arms) {
246
+ const classifier = context.registry.taggedUnionArmClassifier(arm);
247
+ if (!classifier)
248
+ return never(`no installed disjointness-proving classifier for tagged-union arm "${arm.tag}"`);
249
+ classified.push({ tag: arm.tag, classifier, value: arm.value });
250
+ }
251
+ if (classified.some((entry, index) => classified.slice(index + 1).some((other) => classifierDomainsOverlap(entry.classifier, other.classifier)))) {
252
+ return never('tagged-union arm classifiers share a runtime domain and are therefore not pairwise disjoint');
253
+ }
254
+ const arms = classified.map((entry) => ({
255
+ tag: entry.tag,
256
+ classifier: entry.classifier,
257
+ capability: deriveAt(entry.value, context, `${path}#${entry.tag}`)
258
+ }));
259
+ return { kind: 'sum', arms };
260
+ };
@@ -0,0 +1,8 @@
1
+ import type { ConversionNode } from './algebra.js';
2
+ /**
3
+ * Validates a whole conversion graph: every node's internal shape via
4
+ * `validateCapability`, plus the one defect a single node can never see on its
5
+ * own -- a `recursive-ref` chain that loops through other nodes forever
6
+ * without ever reaching a materializer.
7
+ */
8
+ export declare const validateConversionGraph: (nodes: readonly ConversionNode[]) => void;
@@ -0,0 +1,97 @@
1
+ import { validateCapability } from './algebra.js';
2
+ /**
3
+ * Whether a conversion graph's `recursive-ref` sites actually close.
4
+ *
5
+ * `isMaterializable` in algebra.ts treats every `recursive-ref` as trivially
6
+ * materializable, because a single capability in isolation has no other node
7
+ * to consult. That is correct for that question, but it means a set of nodes
8
+ * that only ever refer to each other -- with no node in the cycle ever
9
+ * reaching a real `Atom`, `Identity`, or a `Product`/`Collection`/`Sum` whose
10
+ * every branch bottoms out -- would still read as materializable. This module
11
+ * is the whole-graph check that catches that: it resolves every node's
12
+ * materializability by consulting the nodes its `recursive-ref`s point to, and
13
+ * rejects a reference into a cycle that never reaches a base case.
14
+ */
15
+ const capabilityReachesMaterializer = (capability, resolved) => {
16
+ switch (capability.kind) {
17
+ case 'never':
18
+ return false;
19
+ case 'identity':
20
+ case 'atom':
21
+ case 'coercion':
22
+ case 'static':
23
+ case 'class-family':
24
+ return true;
25
+ case 'optional':
26
+ return capabilityReachesMaterializer(capability.payload, resolved);
27
+ case 'product':
28
+ return capability.fields.every((field) => capabilityReachesMaterializer(field.capability, resolved));
29
+ case 'collection':
30
+ return capabilityReachesMaterializer(capability.element, resolved);
31
+ case 'sum':
32
+ return capability.arms.length > 0 && capability.arms.every((arm) => capabilityReachesMaterializer(arm.capability, resolved));
33
+ case 'recursive-ref':
34
+ return resolved.get(capability.node) ?? false;
35
+ }
36
+ };
37
+ /**
38
+ * Least fixed point over "does this node's capability reach a materializer".
39
+ * The relation only ever flips a node from `false` to `true`, so it is
40
+ * monotone and converges in at most `nodes.length` passes.
41
+ */
42
+ const resolveMaterializability = (nodes) => {
43
+ const resolved = new Map(nodes.map((node) => [node.id, false]));
44
+ let changed = true;
45
+ while (changed) {
46
+ changed = false;
47
+ for (const node of nodes) {
48
+ if (resolved.get(node.id))
49
+ continue;
50
+ if (capabilityReachesMaterializer(node.capability, resolved)) {
51
+ resolved.set(node.id, true);
52
+ changed = true;
53
+ }
54
+ }
55
+ }
56
+ return resolved;
57
+ };
58
+ const collectRecursiveRefs = (capability) => {
59
+ switch (capability.kind) {
60
+ case 'never':
61
+ case 'identity':
62
+ case 'atom':
63
+ case 'coercion':
64
+ case 'static':
65
+ case 'class-family':
66
+ return [];
67
+ case 'recursive-ref':
68
+ return [capability.node];
69
+ case 'optional':
70
+ return collectRecursiveRefs(capability.payload);
71
+ case 'product':
72
+ return capability.fields.flatMap((field) => collectRecursiveRefs(field.capability));
73
+ case 'collection':
74
+ return collectRecursiveRefs(capability.element);
75
+ case 'sum':
76
+ return capability.arms.flatMap((arm) => collectRecursiveRefs(arm.capability));
77
+ }
78
+ };
79
+ /**
80
+ * Validates a whole conversion graph: every node's internal shape via
81
+ * `validateCapability`, plus the one defect a single node can never see on its
82
+ * own -- a `recursive-ref` chain that loops through other nodes forever
83
+ * without ever reaching a materializer.
84
+ */
85
+ export const validateConversionGraph = (nodes) => {
86
+ const nodeIds = new Set(nodes.map((node) => node.id));
87
+ for (const node of nodes)
88
+ validateCapability(node.capability, nodeIds, node.id);
89
+ const resolved = resolveMaterializability(nodes);
90
+ for (const node of nodes) {
91
+ for (const ref of collectRecursiveRefs(node.capability)) {
92
+ if (!resolved.get(ref)) {
93
+ throw new Error(`conversion node "${node.id}": recursive reference to "${ref}" never reaches a materializer (unclosed cycle)`);
94
+ }
95
+ }
96
+ }
97
+ };
@@ -0,0 +1,13 @@
1
+ import type { ConversionNode } from './algebra.js';
2
+ import { type Representation } from '../representation/model.js';
3
+ /** A selected native adapter ignores only an added receiver. The ordinary
4
+ * frame is unchanged, so callable provenance may enter the original body
5
+ * with those arguments and no receiver, retaining the same Function identity.
6
+ */
7
+ export declare const nativeReceiverIgnoringCallableAdapterMatches: (source: Representation, target: Representation, node: ConversionNode | null | undefined) => boolean;
8
+ /** A cited identity-preserving native adapter can also discard a fixed
9
+ * trailing argument suffix. Only the source prefix reaches its body; result
10
+ * and prefix carriers stay identical. Receiver adaptation is licensed by the
11
+ * same selected conversion, never inferred from class spellings here.
12
+ */
13
+ export declare const nativeCallablePrefixAdapterMatches: (source: Representation, target: Representation, node: ConversionNode | null | undefined) => boolean;
@@ -0,0 +1,53 @@
1
+ import { abiOfCallee } from '../projection/callee.js';
2
+ import { abiKey, representationKey } from '../representation/model.js';
3
+ /** A selected native adapter ignores only an added receiver. The ordinary
4
+ * frame is unchanged, so callable provenance may enter the original body
5
+ * with those arguments and no receiver, retaining the same Function identity.
6
+ */
7
+ export const nativeReceiverIgnoringCallableAdapterMatches = (source, target, node) => {
8
+ if (!node || representationKey(node.source) !== representationKey(source) || representationKey(node.target) !== representationKey(target))
9
+ return false;
10
+ const from = abiOfCallee(source);
11
+ const to = abiOfCallee(target);
12
+ if (!from || !to || from.receiver !== null || to.receiver === null || abiKey({ ...from, receiver: to.receiver }) !== abiKey(to))
13
+ return false;
14
+ const capability = node.capability;
15
+ if (capability.kind !== 'atom' && capability.kind !== 'static')
16
+ return false;
17
+ const materializer = capability.materializer;
18
+ const adapter = materializer.callableAdapter;
19
+ return (materializer.nativeFieldProtocol === 'unused' &&
20
+ materializer.callableIdentityTransport === 'preserved' &&
21
+ adapter !== undefined &&
22
+ abiKey(adapter.from) === abiKey(from) &&
23
+ abiKey(adapter.to) === abiKey(to));
24
+ };
25
+ /** A cited identity-preserving native adapter can also discard a fixed
26
+ * trailing argument suffix. Only the source prefix reaches its body; result
27
+ * and prefix carriers stay identical. Receiver adaptation is licensed by the
28
+ * same selected conversion, never inferred from class spellings here.
29
+ */
30
+ export const nativeCallablePrefixAdapterMatches = (source, target, node) => {
31
+ if (!node || representationKey(node.source) !== representationKey(source) || representationKey(node.target) !== representationKey(target))
32
+ return false;
33
+ const from = abiOfCallee(source);
34
+ const to = abiOfCallee(target);
35
+ if (!from || !to || from.restFrom !== null || to.restFrom !== null || from.parameters.length > to.parameters.length)
36
+ return false;
37
+ if (from.receiver !== null && to.receiver === null)
38
+ return false;
39
+ if (abiKey({ ...from, receiver: to.receiver, parameters: to.parameters.slice(0, from.parameters.length) }) !==
40
+ abiKey({ ...from, receiver: to.receiver }))
41
+ return false;
42
+ if (representationKey(from.result) !== representationKey(to.result))
43
+ return false;
44
+ const capability = node.capability;
45
+ if (capability.kind !== 'atom' && capability.kind !== 'static')
46
+ return false;
47
+ const materializer = capability.materializer;
48
+ return (materializer.nativeFieldProtocol === 'unused' &&
49
+ materializer.callableIdentityTransport === 'preserved' &&
50
+ materializer.callableAdapter !== undefined &&
51
+ abiKey(materializer.callableAdapter.from) === abiKey(from) &&
52
+ abiKey(materializer.callableAdapter.to) === abiKey(to));
53
+ };
@@ -0,0 +1,12 @@
1
+ import type { ConversionNode, MaterializerContract } from './algebra.js';
2
+ import { type Representation } from '../representation/model.js';
3
+ /** Called by materializer producers only after selecting an identity-preserving native operation. */
4
+ export declare const nativeClassReferenceIdentityOf: (source: Representation, target: Representation) => Pick<MaterializerContract, "nativeClassReferenceIdentity">;
5
+ /**
6
+ * A native reference can change its nullable/union envelope without exposing
7
+ * another route to its fields. Structural records and containers are excluded:
8
+ * their conversion can publish nested aliases that a class-slot census has not
9
+ * indexed. The installed conversion must independently certify preservation of
10
+ * reference identity; absence of boxing or allocation alone is not that proof.
11
+ */
12
+ export declare const nativeClassReferenceTransportMatches: (source: Representation, target: Representation, node: ConversionNode | null | undefined) => boolean;
@@ -0,0 +1,39 @@
1
+ import { representationKey } from '../representation/model.js';
2
+ const referenceEnvelope = (value) => {
3
+ switch (value.kind) {
4
+ case 'class-ref':
5
+ return value.ownership === 'shared-refcount';
6
+ case 'null':
7
+ case 'undefined':
8
+ return true;
9
+ case 'optional':
10
+ return referenceEnvelope(value.payload);
11
+ case 'tagged-union':
12
+ return value.arms.length > 0 && value.arms.every((arm) => referenceEnvelope(arm.value));
13
+ default:
14
+ return false;
15
+ }
16
+ };
17
+ /** Called by materializer producers only after selecting an identity-preserving native operation. */
18
+ export const nativeClassReferenceIdentityOf = (source, target) => referenceEnvelope(source) && referenceEnvelope(target) ? { nativeClassReferenceIdentity: 'preserved' } : {};
19
+ /**
20
+ * A native reference can change its nullable/union envelope without exposing
21
+ * another route to its fields. Structural records and containers are excluded:
22
+ * their conversion can publish nested aliases that a class-slot census has not
23
+ * indexed. The installed conversion must independently certify preservation of
24
+ * reference identity; absence of boxing or allocation alone is not that proof.
25
+ */
26
+ export const nativeClassReferenceTransportMatches = (source, target, node) => {
27
+ if (!node ||
28
+ representationKey(node.source) !== representationKey(source) ||
29
+ representationKey(node.target) !== representationKey(target) ||
30
+ !referenceEnvelope(source) ||
31
+ !referenceEnvelope(target))
32
+ return false;
33
+ const capability = node.capability;
34
+ return (capability.kind === 'identity' ||
35
+ ((capability.kind === 'atom' || capability.kind === 'static' || capability.kind === 'class-family') &&
36
+ !capability.materializer.allocates &&
37
+ capability.materializer.nativeFieldProtocol === 'unused' &&
38
+ capability.materializer.nativeClassReferenceIdentity === 'preserved'));
39
+ };
@@ -0,0 +1,25 @@
1
+ import type { ConversionNode } from './algebra.js';
2
+ import { type Representation } from '../representation/model.js';
3
+ /** Consume the selected materializer's payload proof. The existence of a
4
+ * different native recipe for this pair cannot certify the installed one.
5
+ *
6
+ * `class-family` joins `atom`/`static` here, not beside them by coincidence:
7
+ * `conversion/build.ts`'s `narrowingCapabilityFor` wraps the IDENTICAL
8
+ * `installed.materializer` a plain narrowing `atom` would get, reaching for
9
+ * `class-family` only because a base handle narrowed to a union of
10
+ * descendants needs the class-table-aware cascade
11
+ * `targets/cpp/emit-narrowing.ts`'s `classFamilyLoadText` renders, not
12
+ * because the runtime proof about the value differs -- `algebra.ts`'s own
13
+ * `transfersNativeStorage` already treats `atom`/`static`/`class-family`
14
+ * identically for exactly this reason. Refusing the capability kind here
15
+ * while accepting it two lines up (for `atom`) meant a class field read back
16
+ * through a narrowing/widening class-family conversion -- a base field typed
17
+ * `Object3D` resolved at one call site to a closed union of its own
18
+ * descendants, or the reverse -- could never be `exact` even when the cited
19
+ * materializer proved the identical non-allocating, field-protocol-free,
20
+ * payload-preserving transfer an `atom` pair proves for the same shape of
21
+ * conversion. The materializer conditions below are UNCHANGED from the
22
+ * `atom`/`static` case; only which `capability.kind` may present one is
23
+ * widened.
24
+ */
25
+ export declare const nativePayloadTransportMatches: (source: Representation, target: Representation, node: ConversionNode | null | undefined) => boolean;
@@ -0,0 +1,33 @@
1
+ import { representationKey } from '../representation/model.js';
2
+ /** Consume the selected materializer's payload proof. The existence of a
3
+ * different native recipe for this pair cannot certify the installed one.
4
+ *
5
+ * `class-family` joins `atom`/`static` here, not beside them by coincidence:
6
+ * `conversion/build.ts`'s `narrowingCapabilityFor` wraps the IDENTICAL
7
+ * `installed.materializer` a plain narrowing `atom` would get, reaching for
8
+ * `class-family` only because a base handle narrowed to a union of
9
+ * descendants needs the class-table-aware cascade
10
+ * `targets/cpp/emit-narrowing.ts`'s `classFamilyLoadText` renders, not
11
+ * because the runtime proof about the value differs -- `algebra.ts`'s own
12
+ * `transfersNativeStorage` already treats `atom`/`static`/`class-family`
13
+ * identically for exactly this reason. Refusing the capability kind here
14
+ * while accepting it two lines up (for `atom`) meant a class field read back
15
+ * through a narrowing/widening class-family conversion -- a base field typed
16
+ * `Object3D` resolved at one call site to a closed union of its own
17
+ * descendants, or the reverse -- could never be `exact` even when the cited
18
+ * materializer proved the identical non-allocating, field-protocol-free,
19
+ * payload-preserving transfer an `atom` pair proves for the same shape of
20
+ * conversion. The materializer conditions below are UNCHANGED from the
21
+ * `atom`/`static` case; only which `capability.kind` may present one is
22
+ * widened.
23
+ */
24
+ export const nativePayloadTransportMatches = (source, target, node) => {
25
+ if (!node || representationKey(node.source) !== representationKey(source) || representationKey(node.target) !== representationKey(target))
26
+ return false;
27
+ const capability = node.capability;
28
+ return (capability.kind === 'identity' ||
29
+ ((capability.kind === 'atom' || capability.kind === 'static' || capability.kind === 'class-family') &&
30
+ !capability.materializer.allocates &&
31
+ capability.materializer.nativeFieldProtocol === 'unused' &&
32
+ capability.materializer.nativePayloadTransport === 'preserved'));
33
+ };
@@ -0,0 +1,49 @@
1
+ import type { Representation } from '../representation/model.js';
2
+ import { type NativeSumPlan } from './native-sum.js';
3
+ export type NativeSelectionStep = {
4
+ readonly kind: 'identity';
5
+ } | {
6
+ readonly kind: 'null';
7
+ } | {
8
+ readonly kind: 'reference-null';
9
+ readonly absent: NativeSelectionStep;
10
+ } | {
11
+ readonly kind: 'transfer';
12
+ readonly plan: NativeSumPlan;
13
+ } | {
14
+ readonly kind: 'class-cast';
15
+ readonly target: Extract<Representation, {
16
+ kind: 'class-ref';
17
+ }>;
18
+ readonly down: boolean;
19
+ } | {
20
+ readonly kind: 'optional';
21
+ readonly absence: 'null' | 'undefined';
22
+ readonly present: NativeSelectionStep | null;
23
+ readonly absent: NativeSelectionStep | null;
24
+ } | {
25
+ readonly kind: 'dispatch';
26
+ readonly arms: readonly (NativeSelectionStep | null)[];
27
+ };
28
+ /** A sealed selection uses only native tags, payload loads and nominal handle casts. */
29
+ export interface NativeSelectionRecipe {
30
+ readonly source: string;
31
+ readonly target: string;
32
+ readonly step: NativeSelectionStep;
33
+ }
34
+ /**
35
+ * Selection is partial in its runtime domain, never partial in its analysis.
36
+ * Every excluded alternative must be proven disjoint. An opaque alternative
37
+ * keeps the general conversion recipe; it cannot be dropped to avoid boxing.
38
+ * Admission still belongs to the caller's existing narrowing authority.
39
+ */
40
+ export declare const nativeSelectionRecipeOf: (source: Representation, target: Representation) => NativeSelectionRecipe | null;
41
+ /** Widening may not discard an alternative or require a successful downcast. */
42
+ export declare const nativeTotalSelectionRecipeOf: (source: Representation, target: Representation) => NativeSelectionRecipe | null;
43
+ /**
44
+ * The same total step for ONE alternative a caller has already proven live
45
+ * (a merge's live arm, its live absence). Leaves are admitted here too: the
46
+ * `null -> shared Ref` rule and the nominal upcast are total, and neither
47
+ * can discard an alternative. A downcast or a collapsed-null test is not.
48
+ */
49
+ export declare const nativeTotalSelectionStepOf: (source: Representation, target: Representation) => NativeSelectionStep | null;