@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,96 @@
1
+ import type { RecordField, Representation } from './model.js';
2
+ import type { RepresentationDeriver } from './derive.js';
3
+ /**
4
+ * The own enumerable fields of a value whose key set a STATIC list can
5
+ * reproduce exactly, or `null` when it cannot.
6
+ *
7
+ * This is a stronger question than "what fields does this shape have", and the
8
+ * difference is the whole point: a caller that copies or enumerates a value key
9
+ * by key is wrong if the runtime object has one key more than the list, so a
10
+ * carrier that admits keys beyond its declared fields must answer `null` rather
11
+ * than answer partially.
12
+ *
13
+ * - A `record` carries its fields inline; a `class-ref` and a
14
+ * `native-record-ref` carry only a `shapeId` (`model.ts`), so their list
15
+ * comes from the deriver -- the same authority `targets/cpp/records.ts`
16
+ * builds the C++ struct body from, so the struct's members and this list
17
+ * cannot be two answers that merely agree today.
18
+ * - ACCESSORS are absent, and that is the language's rule rather than an
19
+ * omission: a class's `get x()` lives on the PROTOTYPE, so it is not an own
20
+ * property of the instance and `{ ...instance }` never copies it. `fields`
21
+ * and `accessors` are separate arrays on a `record` for exactly this reason
22
+ * (`recordFieldsOf`, derive.ts).
23
+ * - An INDEX signature answers `null`: `record-with-index` says the value may
24
+ * hold keys nothing declared, and a static unroll would copy the declared
25
+ * ones and silently drop the rest.
26
+ * - A HOST-stated struct (`native !== null`) answers `null` too. Its own
27
+ * enumerable properties are the host's to define; this compiler emits no
28
+ * definition for it and cannot know whether the C++ members it was told
29
+ * about are the JavaScript object's own keys.
30
+ *
31
+ * It lives in `representation/` because both the preflight key that decides
32
+ * whether an object spread can be rendered and the emitter that renders it must
33
+ * ask the identical question -- a spread preflight admits and the emitter then
34
+ * reads a different field list for is the certify-then-crash both exist to
35
+ * prevent.
36
+ */
37
+ export declare const staticOwnFieldsOf: (deriver: RepresentationDeriver, representation: Representation) => readonly RecordField[] | null;
38
+ /**
39
+ * How a field's PRESENCE is decided when something copies or enumerates the
40
+ * object key by key.
41
+ *
42
+ * - `unconditional`: no test is rendered. A required field is always there.
43
+ * - `flagged`: generated record storage carries a presence bit independent of
44
+ * the value member. Keeping the two separate is what distinguishes `{}`
45
+ * from `{ key: undefined }`, including when the value carrier is itself an
46
+ * optional or a tagged union containing `undefined`.
47
+ * - `unprovable` remains part of the answer type for non-record storage. A
48
+ * generated `RecordField`, however, is never in that state: its `required`
49
+ * fact is represented physically by the paired bit rendered in
50
+ * `targets/cpp/records.ts`.
51
+ */
52
+ export type FieldPresence = 'unconditional' | 'flagged' | 'unprovable';
53
+ export declare const fieldPresenceOf: (field: RecordField) => FieldPresence;
54
+ /**
55
+ * The members `Object.prototype` itself declares.
56
+ *
57
+ * Core ECMAScript rather than anything a host installs, named outright for the
58
+ * same reason `semantics/host-protocols.ts` names `Generator`, `Map` and `Set`:
59
+ * there is no table to read it from, and the list is fixed by the language.
60
+ *
61
+ * It exists because `in` walks the PROTOTYPE CHAIN. "This layout declares no
62
+ * such field" proves the key is not an OWN property, which is a different
63
+ * statement from "the operator answers false" -- `'toString' in o` is true for
64
+ * every ordinary object. A key on this list is therefore left unproven rather
65
+ * than answered: the true answer is very probably `true`, but a physical struct
66
+ * has no prototype object for the question to be about, and claiming either
67
+ * answer would be stating something this compiler has not modelled.
68
+ */
69
+ export declare const objectPrototypeMemberNames: ReadonlySet<string>;
70
+ /** What a layout can prove about one statically-written key: `[[HasProperty]]`'s answer, or that it has none. */
71
+ export type StaticKeyPresence = 'present' | 'flagged' | 'unprovable';
72
+ /**
73
+ * Whether a statically-written key is a property of a value with this layout.
74
+ *
75
+ * Only PRESENCE is ever proven. A prototype can add keys and never removes
76
+ * one, so "this layout has the field" settles the answer no matter what is
77
+ * behind the value -- except for a key `Object.prototype` itself declares,
78
+ * where an absent flag would still read `true` at runtime, so those are
79
+ * excluded by name.
80
+ *
81
+ * ⛔ ABSENCE IS NOT PROVEN HERE, and the reason is measured rather than
82
+ * cautious. An earlier version of this function answered `absent` when a
83
+ * `record` (or a compiler-emitted `native-record-ref`) declared no such field,
84
+ * reasoning that such a carrier is a plain struct with `Object.prototype`
85
+ * behind it. It is -- and the answer was still wrong, because getting there
86
+ * can SLICE. `test/fixtures/in-operator-class-through-interface.ts` is the case:
87
+ * passing `new Box()` to a parameter typed as the interface `Shape` emits
88
+ * `gea_record_type_8{v2->size}`, a fresh struct holding one field, so the
89
+ * `Box`'s `describe` is gone at the boundary. `'describe' in shape` then
90
+ * compiled to `false` where JavaScript answers `true` -- a program that
91
+ * compiled, ran and returned the opposite of the language's answer, where
92
+ * before it had simply refused. Proving absence needs a whole-program fact
93
+ * (nothing converts a class instance into this shape), which is a real proof
94
+ * this layer does not have and must not fake.
95
+ */
96
+ export declare const staticKeyPresenceOf: (fields: readonly RecordField[] | null, key: string | null) => StaticKeyPresence;
@@ -0,0 +1,116 @@
1
+ /**
2
+ * The own enumerable fields of a value whose key set a STATIC list can
3
+ * reproduce exactly, or `null` when it cannot.
4
+ *
5
+ * This is a stronger question than "what fields does this shape have", and the
6
+ * difference is the whole point: a caller that copies or enumerates a value key
7
+ * by key is wrong if the runtime object has one key more than the list, so a
8
+ * carrier that admits keys beyond its declared fields must answer `null` rather
9
+ * than answer partially.
10
+ *
11
+ * - A `record` carries its fields inline; a `class-ref` and a
12
+ * `native-record-ref` carry only a `shapeId` (`model.ts`), so their list
13
+ * comes from the deriver -- the same authority `targets/cpp/records.ts`
14
+ * builds the C++ struct body from, so the struct's members and this list
15
+ * cannot be two answers that merely agree today.
16
+ * - ACCESSORS are absent, and that is the language's rule rather than an
17
+ * omission: a class's `get x()` lives on the PROTOTYPE, so it is not an own
18
+ * property of the instance and `{ ...instance }` never copies it. `fields`
19
+ * and `accessors` are separate arrays on a `record` for exactly this reason
20
+ * (`recordFieldsOf`, derive.ts).
21
+ * - An INDEX signature answers `null`: `record-with-index` says the value may
22
+ * hold keys nothing declared, and a static unroll would copy the declared
23
+ * ones and silently drop the rest.
24
+ * - A HOST-stated struct (`native !== null`) answers `null` too. Its own
25
+ * enumerable properties are the host's to define; this compiler emits no
26
+ * definition for it and cannot know whether the C++ members it was told
27
+ * about are the JavaScript object's own keys.
28
+ *
29
+ * It lives in `representation/` because both the preflight key that decides
30
+ * whether an object spread can be rendered and the emitter that renders it must
31
+ * ask the identical question -- a spread preflight admits and the emitter then
32
+ * reads a different field list for is the certify-then-crash both exist to
33
+ * prevent.
34
+ */
35
+ export const staticOwnFieldsOf = (deriver, representation) => {
36
+ if (representation.kind === 'record')
37
+ return representation.fields;
38
+ if (representation.kind === 'record-with-index')
39
+ return null;
40
+ const shapeId = representation.kind === 'class-ref'
41
+ ? representation.shapeId
42
+ : representation.kind === 'native-record-ref' && representation.native === null
43
+ ? representation.shapeId
44
+ : null;
45
+ if (shapeId === null)
46
+ return null;
47
+ const carrier = deriver.layoutOf(shapeId);
48
+ return carrier.kind === 'record' ? carrier.fields : null;
49
+ };
50
+ export const fieldPresenceOf = (field) => {
51
+ if (field.required)
52
+ return 'unconditional';
53
+ return 'flagged';
54
+ };
55
+ /**
56
+ * The members `Object.prototype` itself declares.
57
+ *
58
+ * Core ECMAScript rather than anything a host installs, named outright for the
59
+ * same reason `semantics/host-protocols.ts` names `Generator`, `Map` and `Set`:
60
+ * there is no table to read it from, and the list is fixed by the language.
61
+ *
62
+ * It exists because `in` walks the PROTOTYPE CHAIN. "This layout declares no
63
+ * such field" proves the key is not an OWN property, which is a different
64
+ * statement from "the operator answers false" -- `'toString' in o` is true for
65
+ * every ordinary object. A key on this list is therefore left unproven rather
66
+ * than answered: the true answer is very probably `true`, but a physical struct
67
+ * has no prototype object for the question to be about, and claiming either
68
+ * answer would be stating something this compiler has not modelled.
69
+ */
70
+ export const objectPrototypeMemberNames = new Set([
71
+ 'constructor',
72
+ 'hasOwnProperty',
73
+ 'isPrototypeOf',
74
+ 'propertyIsEnumerable',
75
+ 'toLocaleString',
76
+ 'toString',
77
+ 'valueOf',
78
+ '__proto__',
79
+ '__defineGetter__',
80
+ '__defineSetter__',
81
+ '__lookupGetter__',
82
+ '__lookupSetter__'
83
+ ]);
84
+ /**
85
+ * Whether a statically-written key is a property of a value with this layout.
86
+ *
87
+ * Only PRESENCE is ever proven. A prototype can add keys and never removes
88
+ * one, so "this layout has the field" settles the answer no matter what is
89
+ * behind the value -- except for a key `Object.prototype` itself declares,
90
+ * where an absent flag would still read `true` at runtime, so those are
91
+ * excluded by name.
92
+ *
93
+ * ⛔ ABSENCE IS NOT PROVEN HERE, and the reason is measured rather than
94
+ * cautious. An earlier version of this function answered `absent` when a
95
+ * `record` (or a compiler-emitted `native-record-ref`) declared no such field,
96
+ * reasoning that such a carrier is a plain struct with `Object.prototype`
97
+ * behind it. It is -- and the answer was still wrong, because getting there
98
+ * can SLICE. `test/fixtures/in-operator-class-through-interface.ts` is the case:
99
+ * passing `new Box()` to a parameter typed as the interface `Shape` emits
100
+ * `gea_record_type_8{v2->size}`, a fresh struct holding one field, so the
101
+ * `Box`'s `describe` is gone at the boundary. `'describe' in shape` then
102
+ * compiled to `false` where JavaScript answers `true` -- a program that
103
+ * compiled, ran and returned the opposite of the language's answer, where
104
+ * before it had simply refused. Proving absence needs a whole-program fact
105
+ * (nothing converts a class instance into this shape), which is a real proof
106
+ * this layer does not have and must not fake.
107
+ */
108
+ export const staticKeyPresenceOf = (fields, key) => {
109
+ if (fields === null || key === null || objectPrototypeMemberNames.has(key))
110
+ return 'unprovable';
111
+ const field = fields.find((candidate) => candidate.key === key);
112
+ if (!field)
113
+ return 'unprovable';
114
+ const presence = fieldPresenceOf(field);
115
+ return presence === 'unconditional' ? 'present' : presence === 'flagged' ? 'flagged' : 'unprovable';
116
+ };
@@ -0,0 +1,11 @@
1
+ import { type Representation } from './model.js';
2
+ export declare const completeTemplateObjectCarrier: Extract<Representation, {
3
+ kind: 'array-object';
4
+ }>;
5
+ export declare const completeTemplateObjectCarrierKey: string;
6
+ export declare const templateObjectCapabilityKeyOf: (representation: Representation) => string;
7
+ export declare const completeTemplateObjectCapabilityKey: string;
8
+ /** Canonical-key equality deliberately includes cooked, raw, ownership, and every extension field. */
9
+ export declare const isCompleteTemplateObjectCarrier: (representation: Representation) => representation is Extract<Representation, {
10
+ kind: "array-object";
11
+ }>;
@@ -0,0 +1,26 @@
1
+ import { representationKey } from './model.js';
2
+ /**
3
+ * The one physical carrier which can implement ECMAScript's
4
+ * `GetTemplateObject` result. Keeping this object here makes the capability
5
+ * claimed by preflight and the shape consumed by an emitter one fact: a plain
6
+ * `readonly string[]` is assignable *from* this value, but is not itself a
7
+ * sufficient carrier for producing it.
8
+ */
9
+ const templateString = { kind: 'string' };
10
+ const templateRaw = {
11
+ kind: 'array-object',
12
+ element: templateString,
13
+ ownership: 'shared-refcount',
14
+ extension: null
15
+ };
16
+ export const completeTemplateObjectCarrier = {
17
+ kind: 'array-object',
18
+ element: templateString,
19
+ ownership: 'shared-refcount',
20
+ extension: [{ key: 'raw', value: templateRaw, required: true }]
21
+ };
22
+ export const completeTemplateObjectCarrierKey = representationKey(completeTemplateObjectCarrier);
23
+ export const templateObjectCapabilityKeyOf = (representation) => `allocation:template-object:${representationKey(representation)}`;
24
+ export const completeTemplateObjectCapabilityKey = templateObjectCapabilityKeyOf(completeTemplateObjectCarrier);
25
+ /** Canonical-key equality deliberately includes cooked, raw, ownership, and every extension field. */
26
+ export const isCompleteTemplateObjectCarrier = (representation) => representationKey(representation) === completeTemplateObjectCarrierKey;
@@ -0,0 +1,30 @@
1
+ import type { StructuralTypeId } from '../identity/ids.js';
2
+ import type { StructuralShape } from '../semantics/model/structural-types.js';
3
+ import type { Representation } from './model.js';
4
+ /**
5
+ * What the deriver a union needs from the deriver that owns it.
6
+ *
7
+ * A union's carrier is built out of its members' carriers, so this cannot be a
8
+ * free function: it has to ask the same memoized, cycle-guarded `derive` its
9
+ * caller is in the middle of, or a self-referential union would re-derive its
10
+ * own members forever. Handing those two answers in keeps the recursion the
11
+ * owner's, and keeps this file from becoming a second deriver.
12
+ */
13
+ export interface UnionDeriverContext {
14
+ readonly shapeOf: (id: StructuralTypeId) => StructuralShape | null;
15
+ readonly derive: (id: StructuralTypeId) => Representation;
16
+ /** Whether no value can have this type -- the deriver's own answer, so an arm rule and the carrier rule agree. */
17
+ readonly isNeverType: (id: StructuralTypeId) => boolean;
18
+ }
19
+ /**
20
+ * The carrier of a union type.
21
+ *
22
+ * Three answers, in order of how much the members prove: an `Optional<T>` when
23
+ * exactly one arm is an absence value, the primitive itself when every arm is a
24
+ * literal of one primitive, and a `TaggedUnion` otherwise -- discriminated by a
25
+ * literal key the arms share when they have one, and by arm position when they
26
+ * do not.
27
+ */
28
+ export declare const createUnionDeriver: (context: UnionDeriverContext) => ((shape: Extract<StructuralShape, {
29
+ kind: "union";
30
+ }>) => Representation);
@@ -0,0 +1,324 @@
1
+ import { primitiveDomainOf } from './primitive-domain.js';
2
+ import { representationKey } from './model.js';
3
+ import { optionalOf } from './optional.js';
4
+ import { primitiveCarrier, storedCarrier, unresolved } from './primitives.js';
5
+ /**
6
+ * The carrier of a union type.
7
+ *
8
+ * Three answers, in order of how much the members prove: an `Optional<T>` when
9
+ * exactly one arm is an absence value, the primitive itself when every arm is a
10
+ * literal of one primitive, and a `TaggedUnion` otherwise -- discriminated by a
11
+ * literal key the arms share when they have one, and by arm position when they
12
+ * do not.
13
+ */
14
+ export const createUnionDeriver = (context) => {
15
+ const { shapeOf, derive, isNeverType } = context;
16
+ /** The literal text discriminating each arm, when one member key does so. */
17
+ const discriminantOf = (arms) => {
18
+ const shapes = arms.map(shapeOf);
19
+ const objects = shapes.flatMap((shape) => (shape && shape.kind === 'object' ? [shape] : []));
20
+ if (objects.length !== arms.length)
21
+ return null;
22
+ const first = objects[0];
23
+ if (!first)
24
+ return null;
25
+ for (const member of first.members) {
26
+ if (member.key.kind !== 'string' || member.optional)
27
+ continue;
28
+ const key = member.key.value;
29
+ const tags = [];
30
+ for (const shape of objects) {
31
+ const candidate = shape.members.find((other) => other.key.kind === 'string' && other.key.value === key);
32
+ if (!candidate || candidate.optional)
33
+ break;
34
+ const tagShape = shapeOf(candidate.type);
35
+ if (!tagShape || tagShape.kind !== 'literal')
36
+ break;
37
+ tags.push(tagShape.text);
38
+ }
39
+ // Distinct literals at one required key is what makes the arms provably
40
+ // disjoint at runtime. Anything weaker would produce a union whose arms
41
+ // cannot be told apart, which is a mis-selection, not a conservative one.
42
+ if (tags.length === objects.length && new Set(tags).size === tags.length)
43
+ return { key, tags };
44
+ }
45
+ return null;
46
+ };
47
+ /** The carrier an arm holds -- the same `storedCarrier` rule `derive.ts` applies to every other stored position. */
48
+ const deriveStored = (id) => storedCarrier(derive(id));
49
+ /**
50
+ * Runtime identity carried by a union arm in addition to its physical
51
+ * payload. A callable ABI is not an identity: unrelated functions may
52
+ * share it, so only a checker-closed FunctionId set is executable evidence.
53
+ */
54
+ const runtimeDiscriminatorOf = (value) => {
55
+ switch (value.kind) {
56
+ case 'function':
57
+ return { kind: 'callable-membership', members: [value.functionId] };
58
+ case 'function-family':
59
+ case 'function-value-family':
60
+ return value.members.length > 0
61
+ ? { kind: 'callable-membership', members: [...new Set(value.members)].sort() }
62
+ : { kind: 'unverifiable-callable' };
63
+ case 'function-value-dispatch':
64
+ case 'function-and-constructor':
65
+ case 'constructor-family':
66
+ case 'constructor-value-dispatch':
67
+ case 'generic-function-set':
68
+ return { kind: 'unverifiable-callable' };
69
+ case 'dynamic':
70
+ // A broad Function value retains the already-dynamic box and claims
71
+ // every callable. The Function tag can distinguish it from a string,
72
+ // number, object, etc.; it cannot distinguish it from another callable
73
+ // arm, which boxDiscriminantsOfArm's pairwise collision check refuses.
74
+ return value.reason === 'untyped-callable' ? { kind: 'callable-tag' } : { kind: 'carrier' };
75
+ default:
76
+ return { kind: 'carrier' };
77
+ }
78
+ };
79
+ const armOf = (tag, value, semanticType) => ({
80
+ tag,
81
+ value,
82
+ semanticType,
83
+ runtimeDiscriminator: runtimeDiscriminatorOf(value)
84
+ });
85
+ // The deriver's own `isNeverType`, not a shape test of this file's own: an
86
+ // arm can be uninhabited without SPELLING `never` -- `number & null`, the
87
+ // arm a monomorphized copy makes of the checker's `T & null` (see
88
+ // `derive.ts`'s `isUninhabitedPrimitiveIntersection`) -- and the carrier
89
+ // rule and this arm rule must answer that from one place.
90
+ const isNever = (id) => isNeverType(id);
91
+ const deriveUnion = (shape) => {
92
+ // `never` contributes no arm. It is the empty type, so `T | never` is `T`
93
+ // -- TypeScript's own union normalization says so, and the checker usually
94
+ // applies it before this deriver ever sees the members. It does not always:
95
+ // a generic default (`class Base<RootElement = never>`, then `RootElement |
96
+ // null`) reaches here with the member still in place. Keeping it built an
97
+ // arm out of a type that names no value, which then had to be given some
98
+ // carrier -- and `null | never` came out as a sum of two absences, a
99
+ // carrier one flag cannot discriminate, so a field that is plainly just
100
+ // `null` was refused.
101
+ const stated = [...new Set(shape.members)];
102
+ const members = stated.filter((member) => !isNever(member));
103
+ if (members.length === 0)
104
+ return { kind: 'void' };
105
+ const absent = members.filter((member) => absenceOf(member) !== null);
106
+ const present = members.filter((member) => absenceOf(member) === null);
107
+ // How many DISTINGUISHABLE absences the union states, not how many members
108
+ // state one: `Response | void | undefined` states exactly one, because
109
+ // `void` and `undefined` are the same stored value.
110
+ const absences = new Set(absent.map((member) => absenceOf(member)));
111
+ if (present.length === 0) {
112
+ const only = absent[0];
113
+ if (absent.length === 1 && only)
114
+ return derive(only);
115
+ // `null | undefined` is two distinguishable values, not one absence.
116
+ if (absences.size === 1 && only)
117
+ return deriveStored(only);
118
+ return { kind: 'tagged-union', arms: absenceArms(absent) };
119
+ }
120
+ const payload = derivePresent(present);
121
+ if (absent.length === 0)
122
+ return payload;
123
+ const sole = absences.size === 1 ? [...absences][0] : null;
124
+ if (sole)
125
+ return optionalOf(payload, sole);
126
+ // Both absence values are present, so a single absence tag cannot encode
127
+ // which one a value is; the sum keeps them apart. `payload` already
128
+ // distinguishes every present arm on its own -- `derivePresent` builds a
129
+ // tagged union of them whenever more than one exists -- so wrapping it
130
+ // behind one `'present'` tag nests that distinction instead of
131
+ // discarding it, exactly the way `optionalOf` above already nests a
132
+ // multi-arm payload under a single absence flag. There is nothing special
133
+ // about exactly one present arm: the construction below only ever needed
134
+ // `payload` and `presentType`, both of which already exist for any
135
+ // `present.length >= 1`.
136
+ const presentType = present[0];
137
+ if (presentType) {
138
+ return { kind: 'tagged-union', arms: [...absenceArms(absent), armOf('present', payload, presentType)] };
139
+ }
140
+ return unresolved('no primitive for a union carrying both absence values alongside several present arms');
141
+ };
142
+ /**
143
+ * Which absence a union member states, or `null` for a member that states a
144
+ * value.
145
+ *
146
+ * `void` answers `'undefined'`, and that is the whole of what this adds over
147
+ * reading the primitive directly. A stored `void` IS the `undefined`
148
+ * carrier -- `storedCarrier` (`primitives.ts`) already says so, and says why
149
+ * at length: `void` is a completed evaluation with no value, which is
150
+ * exactly the value `undefined` names once anything KEEPS it. A union arm is
151
+ * a stored position, so `T | void` and `T | undefined` are one carrier.
152
+ *
153
+ * They were two. `T | undefined` collapsed to `optional(T, undefined)` while
154
+ * `T | void` became `tagged-union(undefined | T)`, and the two spellings met
155
+ * at hono's `defineWebSocketHelper`: the handler slot is
156
+ * `Response | void | Promise<Response | void>`, whose promise arm derived
157
+ * `promise(tagged-union(undefined | class-ref(Response)))`, while the async
158
+ * arrow the program passes returns `Promise<Response | undefined>` and
159
+ * derived `promise(optional(class-ref(Response), undefined))`. One carrier,
160
+ * two names, and therefore no conversion between them -- the
161
+ * `CallExpression|1065` slot drift on `websocket.ts`.
162
+ */
163
+ const absenceOf = (id) => {
164
+ const member = shapeOf(id);
165
+ if (member?.kind !== 'primitive')
166
+ return null;
167
+ if (member.primitive === 'null')
168
+ return 'null';
169
+ return member.primitive === 'undefined' || member.primitive === 'void' ? 'undefined' : null;
170
+ };
171
+ const absenceArms = (absent) => absent.flatMap((member) => {
172
+ const absence = absenceOf(member);
173
+ if (absence === null)
174
+ return [];
175
+ const value = absence === 'null' ? { kind: 'null' } : { kind: 'undefined' };
176
+ return [armOf(absence, value, member)];
177
+ });
178
+ /**
179
+ * The fallback carrier for a union whose arms share no literal discriminant.
180
+ *
181
+ * ECMAScript gives such a union -- `string | number`, or two record types
182
+ * with disjoint keys -- no property to read that names which arm is live:
183
+ * there is no discriminant to find because none exists, not because this
184
+ * deriver failed to find one. The generic answer is still a sum, just tagged
185
+ * by the arm's own position in this union's canonical member list instead of
186
+ * by a literal the source published. That position is exactly the same
187
+ * identity `discriminantOf`'s tags already use above, so this is the same
188
+ * primitive with a compiler-assigned tag rather than a different one.
189
+ *
190
+ * Every arm must resolve on its own before it is admitted: embedding an
191
+ * unresolved arm here would trade one honest `unresolved` union for a
192
+ * tagged-union that only fails later, at `verify.ts`'s generic walk, instead
193
+ * of naming its own gap where it occurred.
194
+ */
195
+ /**
196
+ * One member per distinct carrier, in the order the union first states each.
197
+ *
198
+ * A member that does not resolve is kept rather than dropped: it has no
199
+ * carrier to be equal to anything by, and removing it would silently shrink
200
+ * the union. Whichever path consumes this list then reports that gap by name
201
+ * -- `armIndexUnion` and the discriminated path both derive every member they
202
+ * are handed -- instead of this collapse swallowing it.
203
+ */
204
+ const canonicalMembersOf = (present) => {
205
+ const byCarrier = new Map();
206
+ const unresolvedMembers = [];
207
+ for (const member of present) {
208
+ const value = deriveStored(member);
209
+ if (value.kind === 'unresolved') {
210
+ unresolvedMembers.push(member);
211
+ continue;
212
+ }
213
+ const key = representationKey(value);
214
+ if (!byCarrier.has(key))
215
+ byCarrier.set(key, member);
216
+ }
217
+ return [...withoutNominallySubsumed([...byCarrier.values()]), ...unresolvedMembers];
218
+ };
219
+ /**
220
+ * A class-ref member an ANCESTOR of its own is also a member of carries
221
+ * nothing the ancestor does not already carry, so it contributes no arm.
222
+ *
223
+ * This is the same rule one line up -- "members that derive to ONE carrier
224
+ * are ONE arm" -- asked of a nominal family instead of a structural key. A
225
+ * `Derived` allocation answers TRUE to the `Base` arm's nominal test as well
226
+ * as its own (`classIdentityExtends` admits descendants, which is what lets a
227
+ * `Derived` reach a `Base` slot at all), so `Base | Derived` built as a
228
+ * two-arm sum is a sum whose arms are NOT pairwise disjoint: no runtime test
229
+ * can say which is live, and picking by declaration order would put a
230
+ * `Derived` in the `Base` arm on one path and its own on another. The
231
+ * conversion algebra already refuses such a union by name
232
+ * (`conversion/derive.ts`'s `classRefDomainsOverlap` check) -- correctly, but
233
+ * the defect is here, where the undiscriminable sum was built.
234
+ *
235
+ * Collapsing loses no physical fact: `Base | Derived` and `Base` are one
236
+ * `Ref<Base>` holding the same allocation, and the derived-only members stay
237
+ * reachable exactly where TypeScript already requires them to be -- behind an
238
+ * `instanceof`, whose narrowing is the checked class-family downcast this
239
+ * backend already renders over a single base carrier.
240
+ *
241
+ * `@hono/node-server` reaches this through `request[incomingKey] as
242
+ * IncomingMessage | Http2ServerRequest`, where the node shim's
243
+ * `Http2ServerRequest extends IncomingMessage`.
244
+ *
245
+ * Ownership is part of the test: two carriers that disagree on it are two
246
+ * different physical handles, and neither subsumes the other.
247
+ */
248
+ const withoutNominallySubsumed = (members) => {
249
+ const classRefs = members.map((member) => {
250
+ const value = deriveStored(member);
251
+ return value.kind === 'class-ref' ? value : null;
252
+ });
253
+ if (classRefs.filter((value) => value !== null).length < 2)
254
+ return members;
255
+ return members.filter((_, index) => {
256
+ const value = classRefs[index];
257
+ if (!value)
258
+ return true;
259
+ return !classRefs.some((other) => other !== null && other !== value && other.ownership === value.ownership && value.ancestors.includes(other.declaration));
260
+ });
261
+ };
262
+ const armIndexUnion = (present) => {
263
+ const arms = [];
264
+ for (const [position, member] of present.entries()) {
265
+ const value = deriveStored(member);
266
+ if (value.kind === 'unresolved')
267
+ return unresolved(`no primitive for union arm ${member}: ${value.reason}`);
268
+ arms.push(armOf(String(position), value, member));
269
+ }
270
+ return { kind: 'tagged-union', arms };
271
+ };
272
+ /** The carrier for the non-absent arms of a union. */
273
+ const derivePresent = (present) => {
274
+ const only = present[0];
275
+ if (present.length === 1 && only)
276
+ return deriveStored(only);
277
+ // A union of literals of one primitive is that primitive: the arms differ in
278
+ // value, not in carrier, so a sum would add a tag that discriminates nothing.
279
+ // `primitiveDomainOf` is the one authority for "these values are all this
280
+ // primitive" -- `value-records.ts` asks it of a record's field.
281
+ const primitives = new Set(present.map((member) => primitiveDomainOf(shapeOf(member))));
282
+ if (primitives.size === 1 && !primitives.has(null)) {
283
+ const [primitive] = [...primitives];
284
+ const carrier = primitive ? primitiveCarrier(primitive) : null;
285
+ if (carrier)
286
+ return carrier;
287
+ }
288
+ // Members that derive to ONE carrier are ONE arm.
289
+ //
290
+ // `gea::TaggedUnion` is documented as "a sum whose arms are proven pairwise
291
+ // disjoint at runtime", and two arms of the same carrier are not.
292
+ // `OrientationLock | OrientationLock[]` is the shape that proves it: the
293
+ // checker flattens it to seven string literals beside one array, the rule
294
+ // above cannot fire because not every member is a literal, and tagging each
295
+ // literal separately builds a union of seven identical `std::string` arms
296
+ // whose discriminant no runtime test could ever set correctly -- seven arms
297
+ // that read back the same bytes, distinguished only by an index nothing
298
+ // observes. This is that same rule -- a union of literals of one primitive
299
+ // IS that primitive -- applied to a union that is only PARTLY literals.
300
+ //
301
+ // The group's first member is the one cited as the arm's `semanticType`.
302
+ // Every member of a group derives to the identical carrier, so every one of
303
+ // them answers the arm's member census identically; which of them is named
304
+ // changes no physical fact.
305
+ const canonical = canonicalMembersOf(present);
306
+ const single = canonical.length === 1 ? canonical[0] : undefined;
307
+ if (single)
308
+ return deriveStored(single);
309
+ const discriminant = discriminantOf(canonical);
310
+ if (!discriminant)
311
+ return armIndexUnion(canonical);
312
+ const arms = canonical.flatMap((member, position) => {
313
+ const tag = discriminant.tags[position];
314
+ if (tag === undefined)
315
+ return [];
316
+ const value = deriveStored(member);
317
+ return [armOf(tag, value, member)];
318
+ });
319
+ if (arms.length !== canonical.length)
320
+ return unresolved('discriminant tag census did not cover every union arm');
321
+ return { kind: 'tagged-union', arms };
322
+ };
323
+ return deriveUnion;
324
+ };
@@ -0,0 +1,3 @@
1
+ import type { StructuralTypeId } from '../identity/ids.js';
2
+ import type { SemanticGraph } from '../semantics/model/graph.js';
3
+ export declare const valueRecordTypesOf: (graph: SemanticGraph) => ReadonlySet<StructuralTypeId>;