@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,261 @@
1
+ import ts from 'typescript';
2
+ import type { DeclarationId, StructuralTypeId } from '../../identity/ids.js';
3
+ import type { SignatureParameter } from './structural-types.js';
4
+ /**
5
+ * The signature TypeScript selected for an invocation.
6
+ *
7
+ * This is checker resolution, not runtime target proof. It says which
8
+ * declaration the checker picked; it does not claim that declaration is the
9
+ * complete set of functions that can run. That claim is a separate attachment
10
+ * so that a monkey-patched, shadowed, or reassigned callee cannot inherit the
11
+ * checker's confidence.
12
+ */
13
+ /**
14
+ * Where a generic instantiation came from.
15
+ *
16
+ * The public checker API exposes the type arguments a call site wrote, but not
17
+ * the mapper it inferred. `inferred` therefore records that substitutions exist
18
+ * and are unavailable. A consumer that needs instantiated parameter types must
19
+ * fail closed on it -- re-deriving substitutions from argument expressions,
20
+ * callee spelling, or declaration display names is exactly the rediscovery this
21
+ * layer exists to prevent.
22
+ */
23
+ export type TypeArgumentProvenance = {
24
+ readonly kind: 'none';
25
+ } | {
26
+ readonly kind: 'explicit';
27
+ readonly arguments: readonly ExplicitTypeArgument[];
28
+ } | {
29
+ readonly kind: 'inferred';
30
+ readonly reason: 'checker-mapper-not-public';
31
+ };
32
+ /** One written type argument, paired with the parameter it instantiates. */
33
+ export interface ExplicitTypeArgument {
34
+ readonly parameter: DeclarationId;
35
+ readonly argument: StructuralTypeId;
36
+ }
37
+ /** Whether the selected declaration is real source or an ambient declaration. */
38
+ export type SignatureProvenance = 'source' | 'ambient';
39
+ export interface SelectedSignature {
40
+ /** The declaration the checker selected. Identity, never a display name. */
41
+ readonly declaration: DeclarationId;
42
+ readonly provenance: SignatureProvenance;
43
+ /**
44
+ * Runtime parameter shape. An explicit `this` parameter is authenticated
45
+ * separately and excluded here, because it is a type-system device rather
46
+ * than an argument the call site passes.
47
+ */
48
+ readonly parameters: readonly SignatureParameter[];
49
+ readonly minimumArity: number;
50
+ readonly thisParameter: StructuralTypeId | null;
51
+ readonly typeArguments: TypeArgumentProvenance;
52
+ /** The instantiated structural return type of the selected signature. */
53
+ readonly returnType: StructuralTypeId;
54
+ }
55
+ /**
56
+ * Why an invocation's result type may differ from its selected signature's
57
+ * return type.
58
+ *
59
+ * Every reason is listed here. Anything else disagreeing is a defect, and
60
+ * the check below is what turns that defect into a failure instead of letting a
61
+ * consumer silently pick whichever type it prefers.
62
+ */
63
+ export type InvocationResultDivergence =
64
+ /** `a?.b()` adds the short-circuit `undefined` path to the call result. */
65
+ {
66
+ readonly kind: 'optional-call-short-circuit';
67
+ }
68
+ /** `super()` evaluates to `void`, not to the base constructor's instance type. */
69
+ | {
70
+ readonly kind: 'super-constructor-initialization';
71
+ }
72
+ /**
73
+ * `JSON.parse(text) as T`: the call's own declared return type is `any`
74
+ * (`lib.es5.d.ts`), and the caller's own assertion is what names the real,
75
+ * physical type this backend renders `JSON.parse` as returning
76
+ * (`targets/cpp/emit-json.ts`'s `jsonCallText` — this compiler controls and
77
+ * renders `JSON.parse`'s own implementation, which is what makes
78
+ * substituting the caller's asserted type safe here and nowhere else; see
79
+ * `producers/invocations.ts`'s `jsonParseResultOverride`).
80
+ */
81
+ | {
82
+ readonly kind: 'json-parse-type-assertion';
83
+ }
84
+ /**
85
+ * `new Array(n)`: the constructor's own declared return type is `any[]`
86
+ * (`lib.es5.d.ts`'s `ArrayConstructor` has no generic parameter for a
87
+ * contextual type to narrow), and the enclosing `as T[]` assertion or the
88
+ * variable/field declaration this construction directly initializes is
89
+ * what names the real, physical element type this backend allocates
90
+ * (`targets/cpp/emit-callable.ts`'s `emitArrayConstruct` -- this compiler
91
+ * controls and renders `new Array(n)`'s own implementation, which is what
92
+ * makes substituting the declared element type safe here and nowhere else;
93
+ * see `producers/invocations.ts`'s `arrayConstructResultOverride`).
94
+ */
95
+ | {
96
+ readonly kind: 'array-construct-type-annotation';
97
+ }
98
+ /**
99
+ * `new RangeError(m) as RangeError & { code: string }`: the constructor's
100
+ * own declared return type is the plain error interface, and the enclosing
101
+ * assertion is what names the record this backend actually mints.
102
+ * `gea::host::<Ctor>::create<ErrorRecord>` is a TEMPLATE over the struct
103
+ * (`targets/cpp/runtime/gea_runtime.h`) -- this compiler controls and
104
+ * renders the construction, so it can allocate the asserted shape directly
105
+ * and the extra fields are value-initialized exactly as an omitted property
106
+ * would be. Without it the construction mints one struct and the binding
107
+ * holding it declares another, and no conversion between two unrelated C++
108
+ * structs exists: certified, emitted, and rejected by clang. See
109
+ * `producers/invocations.ts`'s `errorConstructResultOverride`.
110
+ */
111
+ | {
112
+ readonly kind: 'error-construct-type-assertion';
113
+ }
114
+ /**
115
+ * `new Map()`/`new Set()`/`new WeakMap()`/`new WeakSet()`: the ambient
116
+ * constructor's own declared signature has nothing to infer K/(V) from --
117
+ * no type arguments, no constructor argument -- so the checker defaults
118
+ * both to `unknown`, and the selected signature's return type is that
119
+ * defaulted, uninformative shape. `collection-bindings.ts`'s whole-program
120
+ * census (`typeArgumentsAt`/`typeArgumentsForOwner`/`typeArgumentsForRead`)
121
+ * answers the SAME question `array-construct-type-annotation` answers for
122
+ * `new Array(n)` one collection family over: what does the program's own
123
+ * later use of this cell actually store. `structural.ts`'s `typeAt` already
124
+ * substitutes that census's answer for this call's own published result
125
+ * (`inferredCollectionTypeArgumentsAt`, `structural-array-element.ts`) --
126
+ * this divergence exists so that substitution does not also have to agree
127
+ * with the SEPARATE, checker-only computation `buildSelectedSignature`
128
+ * derives from the resolved signature object. See
129
+ * `producers/invocations.ts`'s `collectionConstructResultOverride`.
130
+ */
131
+ | {
132
+ readonly kind: 'collection-construct-type-inference';
133
+ }
134
+ /**
135
+ * `Object.create(null)`: `lib.es5.d.ts` declares the return type `any`, and
136
+ * the enclosing `as T` assertion or the annotation of the variable/field
137
+ * this call directly initializes is what names the object carrier this
138
+ * backend actually mints. 20.1.2.2's OrdinaryObjectCreate with a null
139
+ * prototype and no own properties is physically an empty
140
+ * `gea::Dictionary<V>` or a value-initialized record struct, and
141
+ * `targets/cpp/host/emit-host-object.ts`'s `createText` -- this compiler's
142
+ * own rendering of the call -- mints exactly that. Without it the call
143
+ * boxes a `DynamicObject` that the annotated store then unboxes into a
144
+ * different C++ payload type, which aborts at runtime rather than failing
145
+ * to compile. See `producers/invocations.ts`'s `objectCreateResultOverride`.
146
+ */
147
+ | {
148
+ readonly kind: 'object-create-type-annotation';
149
+ }
150
+ /**
151
+ * `Object.assign(target, source)` returns the target object itself. The
152
+ * ambient generic signature reports `T & U`, which describes the extra
153
+ * properties visible through TypeScript but is not a second allocation and
154
+ * must not become a second physical carrier. The native renderer mutates the
155
+ * target (using its identity-keyed expando table for source keys the target
156
+ * does not declare) and returns that same target handle. See
157
+ * `producers/invocations.ts`'s `objectAssignTargetOverride`.
158
+ */
159
+ | {
160
+ readonly kind: 'object-assign-target-identity';
161
+ }
162
+ /**
163
+ * `collection.get( k )` on a `Map`/`WeakMap` that same census bound: the
164
+ * sibling of the construct divergence above, at the OTHER end of the same
165
+ * storage. Fixing the receiver's type does not fix this call, because a
166
+ * prototype call's result comes from the callee's SIGNATURE, which the
167
+ * checker instantiates from the receiver EXPRESSION's type rather than from
168
+ * whatever this compiler selected for it -- so `buildSelectedSignature`
169
+ * derives `any` from the resolved signature while `structural.ts`'s `typeAt`
170
+ * publishes the census's `V | undefined`
171
+ * (`collectionMemberResultTypeAt`, `structural-array-element.ts`). The two
172
+ * are not in conflict; the signature is simply the half the checker could
173
+ * not instantiate. See `producers/invocations.ts`'s
174
+ * `collectionMemberResultOverride`.
175
+ */
176
+ | {
177
+ readonly kind: 'collection-member-type-inference';
178
+ }
179
+ /**
180
+ * A call that RETURNS an object bag: three's `WebGLProperties.get`, whose
181
+ * body is `let map = properties.get( object ); if ( map === undefined ) {
182
+ * map = {}; ... } return map`. Nothing in the source states that return
183
+ * type, so `buildSelectedSignature` derives `any` from the resolved
184
+ * signature, while `object-bag-bindings.ts`'s whole-program census bound the
185
+ * 47 members the renderer then reads off it and `structural.ts`'s `typeAt`
186
+ * publishes them (`bagShapeTypeAt` via `callResultShapeAt`).
187
+ *
188
+ * The bag census REFUSES to answer at a call unless a caller takes on this
189
+ * declaration -- see `callResultShapeAt`'s own header for the measurement
190
+ * that made that rule (withheld 8 -> 20 when only one authority moved). See
191
+ * `producers/invocations.ts`'s `bagResultOverride`.
192
+ */
193
+ | {
194
+ readonly kind: 'bag-return-inference';
195
+ }
196
+ /**
197
+ * `const K = Symbol.for('k')`: TypeScript's own rule, not this compiler's.
198
+ * `checkCallExpression` replaces a `Symbol()`/`Symbol.for()` call's result
199
+ * with a FRESH `unique symbol` type when the call is the initializer of a
200
+ * `const` declaration or a `readonly static` property, while the selected
201
+ * signature still returns plain `symbol`. Both are the same physical thing
202
+ * -- `representation/derive.ts` maps `unique-symbol` and `symbol` to the one
203
+ * `{ kind: 'symbol' }` carrier -- so nothing downstream has to choose; this
204
+ * arm exists to say the disagreement is the language's, so a disagreement
205
+ * that is NOT can still fail closed.
206
+ */
207
+ | {
208
+ readonly kind: 'unique-symbol-fresh-type';
209
+ }
210
+ /**
211
+ * `Array.of.call(Pack, ...)` / `Array.prototype.map.call(arrayLike, fn)`:
212
+ * `Function.prototype.call`/`.apply`'s own ambient signature
213
+ * (`call<T, A extends any[], R>(this: (this: T, ...args: A) => R, thisArg:
214
+ * T, ...args: A): R`) ties its return type to ONE inferred parameter `R`,
215
+ * which loses precision the moment the receiver's own call is itself
216
+ * generic or overloaded (`Array.prototype.map<U>(...): U[]` has its own
217
+ * free `U` nothing in `.call`'s three type parameters resolves through).
218
+ * `normalize/structural-callable.ts`'s `createStructuralCallResultResolver`
219
+ * reads the receiver's OWN authenticated call signature(s) directly instead
220
+ * -- the same "receiver has a call signature" test
221
+ * `flow/callable-reach.ts`'s `unwrapExplicitThisCall` makes of the identical
222
+ * shape -- and `structural.ts`'s `callResultAt` already wires that answer
223
+ * into `context.types.typeAt(node)`, which is what an invocation's
224
+ * published result falls back to. This licenses the resulting disagreement
225
+ * against the checker's own overload-resolved `signature.getReturnType()`;
226
+ * see `producers/invocations.ts`'s `isExplicitThisCallWithAuthenticatedReceiver`.
227
+ */
228
+ | {
229
+ readonly kind: 'explicit-this-call-return';
230
+ } | {
231
+ readonly kind: 'none';
232
+ };
233
+ /**
234
+ * Fail closed when the invocation result and the selected return type disagree
235
+ * for a reason the language does not license.
236
+ *
237
+ * A divergence that is real must be declared, not inferred downstream. If this
238
+ * throws, the producer published two answers for one operation.
239
+ */
240
+ export declare const validateInvocationResult: (signature: SelectedSignature, invocationResult: StructuralTypeId, divergence: InvocationResultDivergence) => void;
241
+ /**
242
+ * Instantiated parameter types, or `null` when the checker withheld the mapper.
243
+ *
244
+ * Returning `null` is the fail-closed answer. A caller must handle it by
245
+ * reporting a missing capability, never by reconstructing substitutions.
246
+ */
247
+ export declare const instantiatedParameterTypes: (signature: SelectedSignature) => readonly StructuralTypeId[] | null;
248
+ /**
249
+ * Whether the checker's own `unique symbol` rule is what made this call's
250
+ * result differ from its signature's return type.
251
+ *
252
+ * TypeScript's `checkCallExpression` gives a `Symbol()`/`Symbol.for()` call a
253
+ * FRESH `unique symbol` type when the call initializes a `const` declaration or
254
+ * a `readonly static` property, while the signature it selected still returns
255
+ * plain `symbol`. That is the language's rule, and this reads the checker's own
256
+ * two answers to recognize it -- the flags on the published result and on the
257
+ * selected signature's return type -- rather than re-deriving which callees the
258
+ * rule applies to from a name. A disagreement of any other shape still fails
259
+ * closed in `validateInvocationResult`.
260
+ */
261
+ export declare const isUniqueSymbolFreshType: (checker: ts.TypeChecker, node: ts.Node, signature: ts.Signature | undefined) => boolean;
@@ -0,0 +1,55 @@
1
+ import ts from 'typescript';
2
+ /**
3
+ * Fail closed when the invocation result and the selected return type disagree
4
+ * for a reason the language does not license.
5
+ *
6
+ * A divergence that is real must be declared, not inferred downstream. If this
7
+ * throws, the producer published two answers for one operation.
8
+ */
9
+ export const validateInvocationResult = (signature, invocationResult, divergence) => {
10
+ if (divergence.kind !== 'none')
11
+ return;
12
+ if (signature.returnType === invocationResult)
13
+ return;
14
+ throw new Error(`invocation result ${invocationResult} disagrees with selected return type ${signature.returnType} ` +
15
+ `for declaration ${signature.declaration} with no declared divergence`);
16
+ };
17
+ /**
18
+ * Instantiated parameter types, or `null` when the checker withheld the mapper.
19
+ *
20
+ * Returning `null` is the fail-closed answer. A caller must handle it by
21
+ * reporting a missing capability, never by reconstructing substitutions.
22
+ */
23
+ export const instantiatedParameterTypes = (signature) => {
24
+ if (signature.typeArguments.kind === 'inferred')
25
+ return null;
26
+ return signature.parameters.map((parameter) => parameter.type);
27
+ };
28
+ /**
29
+ * Whether the checker's own `unique symbol` rule is what made this call's
30
+ * result differ from its signature's return type.
31
+ *
32
+ * TypeScript's `checkCallExpression` gives a `Symbol()`/`Symbol.for()` call a
33
+ * FRESH `unique symbol` type when the call initializes a `const` declaration or
34
+ * a `readonly static` property, while the signature it selected still returns
35
+ * plain `symbol`. That is the language's rule, and this reads the checker's own
36
+ * two answers to recognize it -- the flags on the published result and on the
37
+ * selected signature's return type -- rather than re-deriving which callees the
38
+ * rule applies to from a name. A disagreement of any other shape still fails
39
+ * closed in `validateInvocationResult`.
40
+ */
41
+ export const isUniqueSymbolFreshType = (checker, node, signature) => {
42
+ if (signature === undefined)
43
+ return false;
44
+ // STATED, not HOLDS: per the doc comment above, this deliberately compares
45
+ // two of the CHECKER's own answers (the published result's flags against
46
+ // the selected signature's return-type flags) to recognize one specific
47
+ // language rule (a fresh `unique symbol` from `Symbol()`/`Symbol.for()`).
48
+ // It is not asking what this node holds as a value -- it is asking whether
49
+ // the checker itself treated this call specially -- so a census substitute
50
+ // would compare the wrong pair of types and could stop recognizing the
51
+ // rule. Left as a direct checker call.
52
+ if ((checker.getTypeAtLocation(node).flags & ts.TypeFlags.UniqueESSymbol) === 0)
53
+ return false;
54
+ return (checker.getReturnTypeOfSignature(signature).flags & ts.TypeFlags.ESSymbol) !== 0;
55
+ };
@@ -0,0 +1,93 @@
1
+ import type { StructuralTypeId } from '../../identity/ids.js';
2
+ import { type StructuralShape, type StructuralType } from './structural-types.js';
3
+ /**
4
+ * The interning table for structural types.
5
+ *
6
+ * Interning is what makes structural identity decidable: two shapes are the
7
+ * same type exactly when they intern to the same id. Recursion is handled by
8
+ * anchoring: a declared shape reserves its id before its members are built, so
9
+ * a member that refers back to the declaration resolves to an id that already
10
+ * exists instead of recursing forever.
11
+ *
12
+ * An id is a counter, never the shape's key. A key names the whole shape, and a
13
+ * nested shape's key contains its members' keys -- so embedding the key in the
14
+ * id would make identity strings grow with the depth of the type, and every
15
+ * consumer that concatenates two of them grow quadratically. The key stays in
16
+ * the interning map, where it is compared once.
17
+ */
18
+ /**
19
+ * An anchor and whether this call is the one that reserved it.
20
+ *
21
+ * `fresh` is the whole answer to "may I complete this?", and it has to come
22
+ * from the table because the table is the only thing that knows. A caller
23
+ * keeping its own set of anchors-it-has-marked is a second authority over one
24
+ * fact, and the two drift: an anchor completed by one walk and then unmarked by
25
+ * another walk's unwind reads as "not completed" and gets built a second time,
26
+ * which `complete` then refuses.
27
+ */
28
+ export interface AnchorReservation {
29
+ readonly id: StructuralTypeId;
30
+ /** True exactly when this call created the reservation, so this caller owns completing or abandoning it. */
31
+ readonly fresh: boolean;
32
+ }
33
+ export interface StructuralTypeTable {
34
+ /** Intern a shape and return its canonical identity. */
35
+ readonly intern: (shape: StructuralShape) => StructuralTypeId;
36
+ /**
37
+ * Reserve the identity of a recursive declared shape before its members are
38
+ * known, then complete it. A shape must be completed before the table seals;
39
+ * an anchor left open is a normalization defect, not an unresolved type.
40
+ */
41
+ readonly anchor: (declarationKey: string) => AnchorReservation;
42
+ readonly complete: (id: StructuralTypeId, shape: StructuralShape) => void;
43
+ /**
44
+ * Give up on an anchor whose walk was abandoned.
45
+ *
46
+ * A walk can be unwound before it completes an anchor it reserved -- a
47
+ * self-referential type retrying an outer entry does exactly that
48
+ * (`semantics/normalize/structural-self-reference.ts`) -- and the retry does
49
+ * not always reach the same anchor again: a declared anchor's key embeds its
50
+ * type arguments' ids, and those change when a member that interned as a
51
+ * union the first time anchors the second. So the reservation would sit open
52
+ * forever and the table would refuse to seal.
53
+ *
54
+ * The id is not deleted: shapes interned during the abandoned walk still name
55
+ * it, and reading one must answer rather than throw. It is completed with an
56
+ * `unresolved` shape saying exactly what happened, and its *key* is released
57
+ * so a retry that asks for the same key gets a fresh, completable anchor.
58
+ */
59
+ readonly abandon: (id: StructuralTypeId) => void;
60
+ /**
61
+ * Release an anchor's KEY without touching its completed shape, so a later
62
+ * `anchor()` call for the same declaration mints a fresh id instead of
63
+ * reusing this one.
64
+ *
65
+ * Different from `abandon`: this anchor did not fail -- it completed, and
66
+ * its shape stays exactly as built, valid forever for anyone who already
67
+ * captured this id. The hazard is narrower and only visible from outside the
68
+ * table: this anchor's build may have read another anchor's id while that
69
+ * OTHER anchor was still open (a legitimate self-reference at the time), and
70
+ * that other anchor has since been abandoned and, on retry, completes under
71
+ * a *different* id. Reusing this anchor's key would keep handing out a
72
+ * shape that cites the abandoned id forever, even though the retry produced
73
+ * a correct answer nobody asked for again. The caller (`structural.ts`)
74
+ * knows which ids were touched inside a failed attempt's journal and calls
75
+ * this for every one of them; only the ones that are still an anchor key
76
+ * (i.e. really were built by `anchor()`, not `intern()`) do anything -- a
77
+ * plain content-addressed shape has no such key to release, so this is a
78
+ * no-op for it and safe to call unconditionally.
79
+ */
80
+ readonly releaseKey: (id: StructuralTypeId) => void;
81
+ readonly get: (id: StructuralTypeId) => StructuralType;
82
+ /**
83
+ * Whether this id is an anchor reserved and not yet completed -- the one
84
+ * state `get` cannot answer. A walk that inspects the shapes behind ids it
85
+ * was handed while sibling anchors are still open (`structural.ts`'s family
86
+ * layout, flattening a member's union) asks this first.
87
+ */
88
+ readonly isOpen: (id: StructuralTypeId) => boolean;
89
+ /** Whether the shape at this id reaches an anchor a frame abandoned. See the implementation. */
90
+ readonly citesAbandoned: (id: StructuralTypeId) => boolean;
91
+ readonly seal: () => ReadonlyMap<StructuralTypeId, StructuralType>;
92
+ }
93
+ export declare const createStructuralTypeTable: () => StructuralTypeTable;
@@ -0,0 +1,237 @@
1
+ import { structuralShapeKey } from './structural-types.js';
2
+ export const createStructuralTypeTable = () => {
3
+ const byKey = new Map();
4
+ // The reverse of `byKey`, kept in lockstep. `abandon` and `releaseKey` both
5
+ // need "what key does this id currently own, if any" -- without this, that
6
+ // question is a linear scan of `byKey`, paid on every rollback entry.
7
+ const idToKey = new Map();
8
+ const byId = new Map();
9
+ // The CONTENT key a completed anchor also owns, kept apart from `idToKey`
10
+ // because an anchor owns two keys at once: `anchor:<declaration>`, which is
11
+ // what recursion resolves through, and its shape's own canonical key, which
12
+ // is what makes it findable by anyone who builds the identical shape later.
13
+ const contentKeys = new Map();
14
+ const openAnchors = new Set();
15
+ // Which anchors were given up on, and under which key. Kept only so the
16
+ // completion guard below can say *why* an anchor is closed: "abandoned" and
17
+ // "completed twice" are different defects with different fixes, and one
18
+ // message covering both sends the reader to the wrong one.
19
+ const abandoned = new Map();
20
+ // A monotonic counter, never `byKey.size`: `abandon` releases a key, and a
21
+ // size-derived id would then hand the next shape an id already in use --
22
+ // two unrelated types under one identity, which is not a wrong answer this
23
+ // table could ever notice.
24
+ let nextId = 0;
25
+ let sealed = false;
26
+ const requireOpen = () => {
27
+ if (sealed)
28
+ throw new Error('structural type table is sealed; interning a new shape after seal would create a second answer');
29
+ };
30
+ // Union is associative: a synthesized (A | B | undefined) | C | null
31
+ // names the same values as A | B | C | undefined | null. Keeping the inner
32
+ // union as an arm hides one absence from carrier selection and gives the
33
+ // same type different identities depending on how inference grouped it.
34
+ // Expand only known union shapes. Open anchors remain references; following
35
+ // an object/class member here would change the type rather than normalize it.
36
+ const canonicalShape = (shape) => {
37
+ if (shape.kind !== 'union')
38
+ return shape;
39
+ const members = new Set();
40
+ const expanding = new Set();
41
+ const visit = (id) => {
42
+ const member = byId.get(id);
43
+ if (member?.kind !== 'union' || expanding.has(id)) {
44
+ members.add(id);
45
+ return;
46
+ }
47
+ expanding.add(id);
48
+ for (const child of member.members)
49
+ visit(child);
50
+ expanding.delete(id);
51
+ };
52
+ for (const member of shape.members)
53
+ visit(member);
54
+ return { kind: 'union', members: [...members] };
55
+ };
56
+ const intern = (input) => {
57
+ requireOpen();
58
+ const shape = canonicalShape(input);
59
+ const key = structuralShapeKey(shape);
60
+ const existing = byKey.get(key);
61
+ if (existing)
62
+ return existing;
63
+ const id = `type|${nextId++}`;
64
+ byKey.set(key, id);
65
+ idToKey.set(id, key);
66
+ byId.set(id, shape);
67
+ return id;
68
+ };
69
+ const anchor = (declarationKey) => {
70
+ requireOpen();
71
+ const key = `anchor:${declarationKey}`;
72
+ const existing = byKey.get(key);
73
+ if (existing)
74
+ return { id: existing, fresh: false };
75
+ const id = `type|${nextId++}`;
76
+ byKey.set(key, id);
77
+ idToKey.set(id, key);
78
+ openAnchors.add(id);
79
+ return { id, fresh: true };
80
+ };
81
+ const keyOf = (id) => idToKey.get(id) ?? null;
82
+ const complete = (id, input) => {
83
+ requireOpen();
84
+ if (!openAnchors.delete(id)) {
85
+ const why = abandoned.has(id)
86
+ ? `it was abandoned (key ${abandoned.get(id) ?? ''})`
87
+ : `it was already completed (key ${keyOf(id) ?? '<released>'})`;
88
+ throw new Error(`structural type ${id} is not an open anchor and cannot be completed: ${why}`);
89
+ }
90
+ const shape = canonicalShape(input);
91
+ byId.set(id, shape);
92
+ // An anchor is reserved by DECLARATION and completed with CONTENT, and
93
+ // until this line the content was never addressable: `intern` looks a
94
+ // shape up by `structuralShapeKey`, `complete` only wrote `byId`, so the
95
+ // very next `intern` of the identical shape missed and minted a second
96
+ // id for it. One type, two ids -- and every consumer keyed on the id then
97
+ // sees two carriers where the language has one, which is the
98
+ // "field X is stored as ... and this read publishes ..." refusal with two
99
+ // sides that print the same thing.
100
+ //
101
+ // Measured on hono: the `H` handler union's own call signature was
102
+ // anchored as `type|955` and re-interned as `type|1307`, which split the
103
+ // router's `Result` tuple, its `add`/`match` member conventions and the
104
+ // `#matchResult` cell into twins in five separate refusals.
105
+ //
106
+ // Nominal identity is not at risk: `declared`, `class-instance`,
107
+ // `class-constructor` and `object-anchor` all carry their declaration in
108
+ // their key, so two declarations with identical bodies keep two ids. What
109
+ // this merges is what has no nominal identity to lose -- a signature, an
110
+ // object body -- which is exactly what interning is for.
111
+ //
112
+ // An existing owner wins. A structurally identical shape interned WHILE
113
+ // this anchor was open is already the id everything built since then
114
+ // cites, and re-pointing the key would make `byKey` disagree with what is
115
+ // already in the graph. The anchor stays reachable by its own key either
116
+ // way.
117
+ const contentKey = structuralShapeKey(shape);
118
+ if (!byKey.has(contentKey)) {
119
+ byKey.set(contentKey, id);
120
+ contentKeys.set(id, contentKey);
121
+ }
122
+ };
123
+ const abandon = (id) => {
124
+ requireOpen();
125
+ if (!openAnchors.delete(id))
126
+ return;
127
+ const realKey = idToKey.get(id);
128
+ const key = realKey ?? '<key already released>';
129
+ abandoned.set(id, key);
130
+ if (realKey) {
131
+ idToKey.delete(id);
132
+ byKey.delete(realKey);
133
+ }
134
+ // The key travels into the reason. An abandoned anchor is only ever seen
135
+ // downstream as an unresolved member of some other shape, and without the
136
+ // key that report names neither the type that was being walked nor the
137
+ // declaration it came from -- which is the whole question when one shows up.
138
+ byId.set(id, { kind: 'unresolved', reason: `a walk reserved this anchor for ${key} and was unwound before completing it` });
139
+ };
140
+ /**
141
+ * Whether the shape at `id` reaches, through any of the ids it names, an
142
+ * anchor some frame gave up on.
143
+ *
144
+ * This is the question `releaseKey`'s only caller actually has. An unwound
145
+ * walk has to withdraw the shapes it built *on an abandoned sibling* --
146
+ * those cite an id that is now an `unresolved` stub -- but withdrawing the
147
+ * rest is not conservative, it MINTS DUPLICATES: an anchor whose key is
148
+ * released and whose declaration is walked again by a later specialization
149
+ * view gets a second id for one type, and every consumer keyed on the id
150
+ * then sees two carriers where the language has one. Measured on hono:
151
+ * `Headers` held three ids and `Request` two, which is where
152
+ * `binding-read-conversion:function-value-dispatch(...)->...(identical...)`
153
+ * came from -- a conversion between a carrier and itself, unsatisfiable
154
+ * because there is nothing to convert.
155
+ *
156
+ * A structural scan rather than a per-kind walk: this answers a diagnostic
157
+ * question about ids a shape happens to name, not a semantic one about what
158
+ * a shape MEANS, so it must not go stale when a shape kind gains a field --
159
+ * which is exactly what a hand-maintained enumeration would do.
160
+ */
161
+ const citesAbandoned = (id) => {
162
+ const seen = new Set();
163
+ const pending = [id];
164
+ while (pending.length > 0) {
165
+ const next = pending.pop();
166
+ if (next === undefined || seen.has(next))
167
+ continue;
168
+ seen.add(next);
169
+ if (abandoned.has(next))
170
+ return true;
171
+ const shape = byId.get(next);
172
+ if (!shape)
173
+ continue;
174
+ const scan = (value) => {
175
+ if (typeof value === 'string') {
176
+ if (/^type\|\d+$/.test(value))
177
+ pending.push(value);
178
+ return;
179
+ }
180
+ if (Array.isArray(value)) {
181
+ for (const element of value)
182
+ scan(element);
183
+ return;
184
+ }
185
+ if (value !== null && typeof value === 'object')
186
+ for (const element of Object.values(value))
187
+ scan(element);
188
+ };
189
+ scan(shape);
190
+ }
191
+ return false;
192
+ };
193
+ const releaseKey = (id) => {
194
+ requireOpen();
195
+ // An anchor still open belongs to `abandon`, not this: it has not
196
+ // completed yet, and releasing its key out from under an in-flight build
197
+ // would let a second, concurrent reservation mint a duplicate anchor for
198
+ // the same declaration. Every caller of `releaseKey` only ever names an
199
+ // id whose build already returned (see the docstring), so this is a
200
+ // defensive no-op, not a path this table expects to take.
201
+ if (openAnchors.has(id))
202
+ return;
203
+ // Both keys, for the one reason this function exists: nothing may reach
204
+ // this id by name again. Leaving the content key behind would keep
205
+ // handing it out to every later build of the identical shape, which is
206
+ // precisely the "keeps citing an abandoned id forever" hazard the
207
+ // docstring describes, reached by the other road.
208
+ const contentKey = contentKeys.get(id);
209
+ if (contentKey !== undefined) {
210
+ contentKeys.delete(id);
211
+ byKey.delete(contentKey);
212
+ }
213
+ const key = idToKey.get(id);
214
+ if (!key || !key.startsWith('anchor:'))
215
+ return;
216
+ idToKey.delete(id);
217
+ byKey.delete(key);
218
+ };
219
+ const get = (id) => {
220
+ const shape = byId.get(id);
221
+ if (!shape)
222
+ throw new Error(`structural type ${id} was referenced before it was interned`);
223
+ return { id, shape };
224
+ };
225
+ const seal = () => {
226
+ if (openAnchors.size > 0) {
227
+ throw new Error(`structural type table sealed with ${openAnchors.size} incomplete recursive anchor(s): ${[...openAnchors].join(', ')}`);
228
+ }
229
+ sealed = true;
230
+ const result = new Map();
231
+ for (const [id, shape] of byId)
232
+ result.set(id, Object.freeze({ id, shape }));
233
+ return result;
234
+ };
235
+ const isOpen = (id) => openAnchors.has(id);
236
+ return { intern, anchor, complete, abandon, citesAbandoned, releaseKey, get, isOpen, seal };
237
+ };