@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,863 @@
1
+ import ts from 'typescript';
2
+ import { operationId, semanticResultId } from '../../../identity/ids.js';
3
+ import { bindingKindOf } from './binding-kind.js';
4
+ import { blocked, mintOperationId, mintResult, operand } from './mint.js';
5
+ import { citeExpressionResult } from './references.js';
6
+ import { sourceForValue, valueEdgesInto, hasNativeIterationCursor, staticPropertyKeyTextOf, isRuntimeSymbolMember, staticSpreadMembersOf, staticFunctionNameOf, staticClassNameOf, staticClassLengthOf, expectedParameterCountOf, ownPrototypePropertyOf } from './shared.js';
7
+ import { isClosedTupleSpread, tupleSpreadReads } from './tuple-spread.js';
8
+ import { isDynamicIterationSource } from './protocol.js';
9
+ import { iteratorMethodSymbolOf } from './iteration-yield.js';
10
+ import { sharedPrimitiveDomainOf } from '../../model/primitive-domain.js';
11
+ import { symbolPropertyKeyText } from '../../model/structural-types.js';
12
+ import { normalCompletion, pureEffects } from '../../model/operands.js';
13
+ const unwrappedStructuralShape = (context, type) => {
14
+ const shape = context.table.get(type).shape;
15
+ if ((shape.kind === 'declared' || shape.kind === 'object-anchor') && shape.body !== null)
16
+ return unwrappedStructuralShape(context, shape.body);
17
+ if (shape.kind === 'intersection' && shape.resolved !== null)
18
+ return unwrappedStructuralShape(context, shape.resolved);
19
+ return shape;
20
+ };
21
+ const structuralMemberKeyText = (member) => {
22
+ const key = member.key;
23
+ return key.kind === 'symbol' ? symbolPropertyKeyText(key.declaration) : String(key.value);
24
+ };
25
+ /** The declared field a statically keyed literal property installs, if any. */
26
+ const objectLiteralFieldTypeOf = (context, receiverType, key) => {
27
+ const shape = unwrappedStructuralShape(context, receiverType);
28
+ if (!shape || shape.kind !== 'object')
29
+ return null;
30
+ return shape.members.find((member) => structuralMemberKeyText(member) === key)?.type ?? null;
31
+ };
32
+ /** The concrete element slot each ordinary array-literal operand enters. */
33
+ const arrayLiteralElementRolesOf = (context, shapeType, operands) => {
34
+ const shape = unwrappedStructuralShape(context, shapeType);
35
+ if (!shape)
36
+ return [];
37
+ const roles = [];
38
+ for (const element of operands) {
39
+ if (element.role !== 'element')
40
+ continue;
41
+ const type = shape.kind === 'array' ? shape.element : shape.kind === 'tuple' ? shape.elements[element.ordinal]?.type : undefined;
42
+ if (type !== undefined)
43
+ roles.push({ role: 'element', ordinal: element.ordinal, owner: 'array-element', type });
44
+ }
45
+ return roles;
46
+ };
47
+ /** A data-property key as the language sees it: a string, from a non-computed name. */
48
+ const keyTextOf = (name) => {
49
+ if (!name)
50
+ return null;
51
+ if (ts.isIdentifier(name) || ts.isPrivateIdentifier(name))
52
+ return name.text;
53
+ if (ts.isStringLiteral(name) || ts.isNumericLiteral(name))
54
+ return name.text;
55
+ return null;
56
+ };
57
+ /**
58
+ * The key one object-literal member is defined under, and whether it is
59
+ * computed.
60
+ *
61
+ * `{ [k]: v }` is two different constructs wearing one syntax, and which one it
62
+ * is is decided by the key's TYPE, never by the brackets:
63
+ *
64
+ * - A key the type system pins -- `{ ['a']: v }`, `{ [K]: v }` for a
65
+ * literal-typed `const`, `{ [S]: v }` for a `unique symbol` -- is a STATIC
66
+ * key. The checker resolves the literal's own type to a named member
67
+ * (`{ a: V }`, and `keyof` lists it), the layout gives that member a struct
68
+ * field, and `o.a` reads it. So it is published exactly as a written name is:
69
+ * one constant operand, `keyIsComputed: false`. This is the identical rule
70
+ * `class-lifecycle.ts` already applies to `class C { [S]: T }`, generalized
71
+ * from `unique symbol` to every fixed key by `staticPropertyKeyTextOf`.
72
+ * - A key that is genuinely a runtime value is a DYNAMIC definition, cited from
73
+ * whichever family normalized the bracketed expression and marked
74
+ * `keyIsComputed: true`. Whether the receiver can take one is not decided
75
+ * here: `preflight/property-access.ts` asks the target for the
76
+ * `<carrier>:define-own-property:true` recipe, which a dictionary claims and
77
+ * a struct does not.
78
+ *
79
+ * ToPropertyKey is what separates the second case from a refusal. `string`,
80
+ * `number` and `symbol`, including literal unions in one domain, already have
81
+ * one primitive carrier. No union dispatch or coercion is needed. A
82
+ * numeric key needs no separate coercion here because the receiver a numeric
83
+ * index signature derives is itself numerically keyed, so both sides of the
84
+ * store already agree. Every other carrier (`any`/`unknown` above all, which
85
+ * the checker admits where it admits nothing else) has no key conversion at
86
+ * all, and is refused by name rather than spelled into a table whose key type
87
+ * it does not have.
88
+ */
89
+ const objectLiteralKeyOperand = (context, name, stringType, receiverType) => {
90
+ const constantKey = (text) => ({
91
+ operand: operand('key', 0, { kind: 'constant', text, literal: 'string' }, stringType),
92
+ computed: false
93
+ });
94
+ if (!ts.isComputedPropertyName(name)) {
95
+ const text = keyTextOf(name);
96
+ return text === null
97
+ ? { blocked: `an object literal property name of syntax kind ${ts.SyntaxKind[name.kind]} is not a data-property key` }
98
+ : constantKey(text);
99
+ }
100
+ const keyType = context.types.typeAt(name.expression);
101
+ const staticText = staticPropertyKeyTextOf(context, keyType);
102
+ if (staticText !== null && !isRuntimeSymbolMember(context, receiverType, keyType))
103
+ return constantKey(staticText);
104
+ const shape = context.table.get(keyType).shape;
105
+ const domain = sharedPrimitiveDomainOf((id) => context.table.get(id).shape, shape);
106
+ const convertible = domain === 'string' || domain === 'number' || domain === 'symbol';
107
+ if (!convertible) {
108
+ const described = shape.kind === 'primitive' ? shape.primitive : shape.kind;
109
+ return {
110
+ blocked: `a computed property key of type "${described}" has no ToPropertyKey conversion; only string, number and symbol keys convert`
111
+ };
112
+ }
113
+ const cited = citeExpressionResult(name.expression, context);
114
+ if (cited.kind === 'unmodelled')
115
+ return { blocked: cited.reason };
116
+ return { operand: operand('key', 0, cited.source, keyType), computed: true };
117
+ };
118
+ /**
119
+ * The value an object literal method installs: the function object its own
120
+ * allocation candidate publishes.
121
+ *
122
+ * The census routes a `MethodDeclaration` inside an object literal to the
123
+ * allocation family in its own right (`census.ts`'s `familyOf`), exactly as it
124
+ * routes the object literal itself, so `createAllocationProducer.contribute`
125
+ * is called on it independently and mints a `function-object` allocation from
126
+ * it via the same `isCallableNode` path an arrow-function property value goes
127
+ * through. That call has not necessarily happened yet by the time this
128
+ * property is defined -- producers run candidate by candidate, not in any
129
+ * order this file controls -- so citing its result cannot be a lookup. It is
130
+ * a prediction instead, computing the exact identity that call independently
131
+ * mints from the same node: `sourceForValue`/`citeExpressionResult` do this
132
+ * for every ordinary expression already, and this is that same rule stated
133
+ * for a method, which is not an expression and so has no entry through that
134
+ * path. The ordinal is 0 because the census gives a `MethodDeclaration` the
135
+ * allocation family exactly once, so `mintOperationId` only ever assigns it
136
+ * one identity.
137
+ */
138
+ const methodValueOf = (method, context) => {
139
+ const allocationId = operationId(context.identities.nodeIdOf(method), 'allocation', 0);
140
+ return {
141
+ source: { kind: 'result', result: semanticResultId(allocationId, 'value') },
142
+ type: context.types.typeAt(method)
143
+ };
144
+ };
145
+ /**
146
+ * The data properties an object literal installs, as their own operations.
147
+ *
148
+ * A property key here is a language-level *value* -- the string
149
+ * CreateDataPropertyOrThrow receives -- not an identity, which is why reading
150
+ * the name node's text is correct rather than a source-shaped shortcut: two
151
+ * different literals spelling the same key really do install the same key, and
152
+ * that is exactly what the constant records. A method installs the same way:
153
+ * `PropertyDefinitionEvaluation` for a `MethodDefinition` is `CreateMethod`
154
+ * followed by the identical `CreateDataPropertyOrThrow` an ordinary value
155
+ * property gets, which is why this is one loop and not two -- a method is a
156
+ * data-property definition whose value happens to come from a function
157
+ * allocation instead of an evaluated expression.
158
+ */
159
+ /**
160
+ * `{ ...a, b: 1 }` -- CopyDataProperties (ECMA-262 7.3.25), for a source whose
161
+ * shape is statically known.
162
+ *
163
+ * The spec copies the source's OWN ENUMERABLE properties, and for a data-only
164
+ * object shape that set is exactly its members: one `[[Get]]` on the source
165
+ * and one `CreateDataPropertyOrThrow` on the target per member, in the shape's
166
+ * own order, installed at the position the spread occupies so a later literal
167
+ * key still overwrites it -- which is the whole of the spec's semantics here.
168
+ *
169
+ * Refused BY NAME, never approximated, when the source is not that:
170
+ *
171
+ * - an INDEX SIGNATURE means the own-property set is not known until runtime,
172
+ * and copying only the declared members would silently drop the rest;
173
+ * - an ACCESSOR must be CALLED -- `{ ...o }` copies a getter's returned value,
174
+ * not the getter -- and calling one is a user-code invocation this producer
175
+ * does not model here;
176
+ * - a `signature`-shaped member is a METHOD, which on a class instance lives
177
+ * on the prototype and is therefore not own-enumerable at all; the shape
178
+ * alone cannot tell an own function-valued field from a prototype method,
179
+ * so both are refused rather than one guessed;
180
+ * - `membersDropped` says a projection already filtered this body, so its
181
+ * member list is not the source's own-property set (see
182
+ * `representation/object-shape.ts` for why that bit exists);
183
+ * - a symbol key is skipped by CopyDataProperties only when non-enumerable,
184
+ * and the shape does not record enumerability, so it is refused too.
185
+ *
186
+ * The two operations per member are minted on the SPREAD's own node, so their
187
+ * ordinals are consecutive within `(node, 'property')` exactly as
188
+ * `operationsOfNode` (normalize/gating.ts) requires.
189
+ */
190
+ const spreadCopyOf = (property, receiver, receiverType, candidate, context) => {
191
+ const sourceType = context.types.typeAt(property.expression);
192
+ const admitted = staticSpreadMembersOf(context, sourceType);
193
+ if ('blocked' in admitted) {
194
+ // A source with no statically known own-property set is not a refusal
195
+ // here any more -- `producers/protocol.ts`'s `contributeObjectSpread`
196
+ // mints a `protocol: 'spread'` operation for this EXACT `SpreadAssignment`
197
+ // node under exactly this condition (the same shared predicate,
198
+ // `staticSpreadMembersOf`, so the two can never disagree about which
199
+ // sources take which path), and that operation performs the runtime
200
+ // `CopyDataProperties` copy this field-by-field loop cannot. So this
201
+ // member is DEFERRED to that operation rather than blocking the whole
202
+ // literal: the id is predicted, not re-minted -- `protocol.ts` owns this
203
+ // node's `'protocol'` family census assignment and mints the operation
204
+ // itself, exactly as `methodValueOf` above predicts an object-literal
205
+ // method's own allocation id without re-minting it.
206
+ //
207
+ // Whether that operation can actually LOWER -- the receiver must resolve
208
+ // to a dictionary-capable carrier, and the source's arm kinds must be
209
+ // ones the copy knows how to render -- is answered later, by
210
+ // `ir/lower-protocol.ts`, which fails closed by name when it cannot; this
211
+ // producer does not re-derive that answer, which is not available until
212
+ // representation is derived.
213
+ return { deferred: operationId(context.identities.nodeIdOf(property), 'protocol', 0) };
214
+ }
215
+ // Only the fields the LITERAL's own type declares are installed.
216
+ //
217
+ // `{ ...extra, ...base }` typed `Extra` really does carry `base`'s extra keys
218
+ // in JavaScript, and a native record cannot: its layout is fixed, and the
219
+ // struct this literal allocates is the one its own type names. Which is also
220
+ // the only view any consumer can ever take of it -- no typed read reaches a
221
+ // key the type does not declare, and a native record has no dynamic
222
+ // enumeration to expose one. So the copy is scoped to the target's own
223
+ // fields, rather than emitting a store into a member that does not exist.
224
+ // A target whose shape is not statically known has no field set to scope to,
225
+ // and refuses by name here rather than installing a guess.
226
+ const target = staticSpreadMembersOf(context, receiverType);
227
+ if ('blocked' in target) {
228
+ return { blocked: `an object spread into a target with no statically known field set cannot place its copies (${target.blocked})` };
229
+ }
230
+ const installable = new Map(target.members.flatMap((member) => (member.key.kind === 'symbol' ? [] : [[String(member.key.value), member.type]])));
231
+ const stringType = context.table.intern({ kind: 'primitive', primitive: 'string' });
232
+ const sourceValue = sourceForValue(context, property.expression);
233
+ const operations = [];
234
+ const edges = [];
235
+ const spreadNode = context.identities.nodeIdOf(property);
236
+ for (const member of admitted.members) {
237
+ // Every member reaching here was admitted by `staticSpreadMembersOf`
238
+ // above -- data-only, non-accessor, string- or number-keyed -- so the key
239
+ // is readable without a second check that could disagree with it.
240
+ if (member.key.kind === 'symbol')
241
+ continue;
242
+ const key = String(member.key.value);
243
+ const destinationType = installable.get(key);
244
+ if (destinationType === undefined)
245
+ continue;
246
+ const read = mintOperationId(context.ordinals, spreadNode, 'property');
247
+ const readOperands = [
248
+ operand('receiver', 0, sourceValue, sourceType),
249
+ operand('key', 0, { kind: 'constant', text: key, literal: 'string' }, stringType)
250
+ ];
251
+ operations.push({
252
+ id: read,
253
+ family: 'property',
254
+ internalMethod: 'get',
255
+ strict: true,
256
+ keyIsComputed: false,
257
+ descriptor: null,
258
+ caller: candidate.caller,
259
+ operands: readOperands,
260
+ results: [mintResult(read, 'value', member.type)],
261
+ completion: normalCompletion,
262
+ effects: { ...pureEffects, readsMutableState: true },
263
+ evaluationOrdinal: candidate.evaluationOrdinal
264
+ });
265
+ edges.push(...valueEdgesInto(read, readOperands));
266
+ const install = mintOperationId(context.ordinals, spreadNode, 'property');
267
+ const installOperands = [
268
+ operand('receiver', 0, { kind: 'result', result: receiver }, receiverType, { kind: 'provenance' }),
269
+ operand('key', 0, { kind: 'constant', text: key, literal: 'string' }, stringType),
270
+ operand('value', 0, { kind: 'result', result: semanticResultId(read, 'value') }, member.type)
271
+ ];
272
+ operations.push({
273
+ id: install,
274
+ family: 'property',
275
+ internalMethod: 'define-own-property',
276
+ strict: true,
277
+ keyIsComputed: false,
278
+ descriptor: { writable: true, enumerable: true, configurable: true },
279
+ caller: candidate.caller,
280
+ operands: installOperands,
281
+ // The source member is what this read PRODUCES; the destination member
282
+ // is what the following definition STORES. They can differ under a
283
+ // contextual literal type (`{ p: any }` spread into `{ p: void }`), so
284
+ // the conversion role must name the latter or preflight audits the
285
+ // source against itself and silently skips the real store conversion.
286
+ conversionRoles: [{ role: 'value', ordinal: 0, owner: 'declared-field', type: destinationType }],
287
+ results: [mintResult(install, 'value', receiverType)],
288
+ completion: normalCompletion,
289
+ effects: { readsMutableState: false, writesMutableState: true, allocates: false, callsUserCode: false },
290
+ evaluationOrdinal: candidate.evaluationOrdinal
291
+ });
292
+ edges.push(...valueEdgesInto(install, installOperands), { kind: 'evaluation', from: read, to: install });
293
+ }
294
+ return { operations, edges };
295
+ };
296
+ const definePropertiesOf = (node, receiver, receiverType, candidate, context) => {
297
+ if (!receiver)
298
+ return { blocked: 'an object literal allocation published no result for its property definitions to install onto' };
299
+ const stringType = context.table.intern({ kind: 'primitive', primitive: 'string' });
300
+ const operations = [];
301
+ const edges = [];
302
+ let previous = null;
303
+ for (const property of node.properties) {
304
+ // A spread installs one property per member of its source, in the shape's
305
+ // own order and at the position the spread occupies -- so a later literal
306
+ // key still overwrites what it copied, exactly as the language orders it.
307
+ if (ts.isSpreadAssignment(property)) {
308
+ const copy = spreadCopyOf(property, receiver, receiverType, candidate, context);
309
+ if ('blocked' in copy)
310
+ return copy;
311
+ if ('deferred' in copy) {
312
+ // This member's copy is performed by the `protocol: 'spread'`
313
+ // operation `protocol.ts` publishes for this same node, not by any
314
+ // operation minted here -- see `spreadCopyOf`. Still order it exactly
315
+ // where the source places it: `{ 'Content-Type': x, ...headers }`
316
+ // sets the known key FIRST and the spread's runtime copy can OVERWRITE
317
+ // it, so the evaluation edge into and out of the deferred operation is
318
+ // the only thing here that keeps that order observable.
319
+ if (previous)
320
+ edges.push({ kind: 'evaluation', from: previous, to: copy.deferred });
321
+ previous = copy.deferred;
322
+ continue;
323
+ }
324
+ for (const copied of copy.operations) {
325
+ if (previous)
326
+ edges.push({ kind: 'evaluation', from: previous, to: copied.id });
327
+ previous = copied.id;
328
+ }
329
+ operations.push(...copy.operations);
330
+ edges.push(...copy.edges);
331
+ continue;
332
+ }
333
+ // An accessor installs no *value*: `MethodDefinitionEvaluation` gives it an
334
+ // accessor descriptor, whose get/set slots hold the bodies this literal's
335
+ // own shape already names (`structural-declarations.ts`'s
336
+ // `literalAccessorOf`), so there is no data property to define here and no
337
+ // storage for one to be defined into. Creating the function object is pure,
338
+ // so skipping the definition drops nothing observable -- the body itself is
339
+ // still allocated, by this producer, at the accessor's own candidate.
340
+ if (ts.isGetAccessorDeclaration(property) || ts.isSetAccessorDeclaration(property)) {
341
+ // ...but only when the shape this literal ALLOCATES really does name it.
342
+ // The literal's own shape always does (`literalAccessorOf`); the shape a
343
+ // CONTEXTUAL type supplies need not -- an interface's `get next(): T` has
344
+ // no body, so it is an ordinary data member of a shape the host
345
+ // implements, and a literal laid out as that interface had its getter
346
+ // skipped here and no field written for it either. The record allocated
347
+ // with a default-constructed `CallableObject` in that slot then
348
+ // segfaulted on the first read (`typed-custom-iterator-close.ts`'s
349
+ // `typedNextGetterSource`). Matched on the DECLARATION's own id rather
350
+ // than on a re-derived key, so a computed well-known-symbol accessor is
351
+ // checked by the same test as a written one.
352
+ const own = context.identities.declarationIdOf(property);
353
+ const shape = unwrappedStructuralShape(context, receiverType);
354
+ const named = shape !== null &&
355
+ shape.kind === 'object' &&
356
+ shape.members.some((member) => member.accessor?.getter === own || member.accessor?.setter === own);
357
+ if (!named) {
358
+ return {
359
+ blocked: 'an object literal accessor whose allocated shape declares the member as ordinary data has nowhere to install its body; ' +
360
+ 'reading it would call an unset slot'
361
+ };
362
+ }
363
+ continue;
364
+ }
365
+ const name = property.name;
366
+ const isMethod = ts.isMethodDeclaration(property);
367
+ // Read before the narrowing below exhausts this union, so the refusal can
368
+ // still name the form it refused if the union ever grows a member the
369
+ // three tests do not cover.
370
+ const propertyKind = property.kind;
371
+ if (!(ts.isPropertyAssignment(property) || ts.isShorthandPropertyAssignment(property) || isMethod)) {
372
+ // A member form this producer does not model at all -- saying so is
373
+ // better than installing a property under a guessed name.
374
+ return { blocked: `an object literal property of syntax kind ${ts.SyntaxKind[propertyKind]} has no readable data-property key` };
375
+ }
376
+ const key = objectLiteralKeyOperand(context, name, stringType, receiverType);
377
+ if ('blocked' in key)
378
+ return key;
379
+ const id = mintOperationId(context.ordinals, context.identities.nodeIdOf(property), 'property');
380
+ // `{ x }` is sugar for `{ x: x }`: the value is a read of the same
381
+ // identifier that names the key. A method has no separate value
382
+ // expression at all -- its own declaration node *is* the value, by way of
383
+ // the allocation it independently publishes.
384
+ const value = isMethod
385
+ ? methodValueOf(property, context)
386
+ : (() => {
387
+ const valueNode = ts.isPropertyAssignment(property) ? property.initializer : property.name;
388
+ return { source: sourceForValue(context, valueNode), type: context.types.typeAt(valueNode) };
389
+ })();
390
+ const operands = [
391
+ operand('receiver', 0, { kind: 'result', result: receiver }, receiverType, { kind: 'provenance' }),
392
+ key.operand,
393
+ operand('value', 0, value.source, value.type)
394
+ ];
395
+ const fieldType = key.operand.source.kind === 'constant' ? objectLiteralFieldTypeOf(context, receiverType, key.operand.source.text) : null;
396
+ operations.push({
397
+ id,
398
+ family: 'property',
399
+ internalMethod: 'define-own-property',
400
+ strict: true,
401
+ keyIsComputed: key.computed,
402
+ // CreateDataPropertyOrThrow installs a fully permissive data property;
403
+ // these are the attributes the language fixes, not a default chosen here.
404
+ descriptor: { writable: true, enumerable: true, configurable: true },
405
+ caller: candidate.caller,
406
+ operands,
407
+ ...(fieldType === null ? {} : { conversionRoles: [{ role: 'value', ordinal: 0, owner: 'declared-field', type: fieldType }] }),
408
+ // The result is the object with this property installed, not the value
409
+ // that was installed: CreateDataPropertyOrThrow returns nothing useful,
410
+ // and it is the object that the literal's consumers go on to cite.
411
+ results: [mintResult(id, 'value', receiverType)],
412
+ completion: normalCompletion,
413
+ effects: { readsMutableState: false, writesMutableState: true, allocates: false, callsUserCode: false },
414
+ evaluationOrdinal: candidate.evaluationOrdinal
415
+ });
416
+ edges.push(...valueEdgesInto(id, operands));
417
+ // Properties install left to right, and that order is observable through
418
+ // enumeration and through side effects in the values. Sharing the
419
+ // candidate's ordinal says nothing about which of these runs first, so the
420
+ // order travels on an explicit edge, which is the only thing a consumer is
421
+ // allowed to read it from.
422
+ if (previous)
423
+ edges.push({ kind: 'evaluation', from: previous, to: id });
424
+ previous = id;
425
+ }
426
+ return { operations, edges };
427
+ };
428
+ const isCallableNode = (node) => ts.isFunctionExpression(node) ||
429
+ ts.isArrowFunction(node) ||
430
+ ts.isFunctionDeclaration(node) ||
431
+ ts.isMethodDeclaration(node) ||
432
+ // An object literal's own accessor. `MethodDefinitionEvaluation` for a
433
+ // `get`/`set` runs `OrdinaryFunctionCreate` exactly as it does for a method;
434
+ // what differs is only what the definition that follows installs, and that
435
+ // is the *literal's* business, below. (A class accessor never arrives here:
436
+ // the census routes it to `class-lifecycle`, which allocates it itself.)
437
+ ts.isGetAccessorDeclaration(node) ||
438
+ ts.isSetAccessorDeclaration(node);
439
+ /** A declaration instantiated with the enclosing function body, before that body's statements execute. */
440
+ const isBodyLevelFunctionDeclaration = (node) => {
441
+ if (!ts.isFunctionDeclaration(node) || !ts.isBlock(node.parent))
442
+ return false;
443
+ const owner = node.parent.parent;
444
+ return ((ts.isFunctionDeclaration(owner) ||
445
+ ts.isFunctionExpression(owner) ||
446
+ ts.isArrowFunction(owner) ||
447
+ ts.isMethodDeclaration(owner) ||
448
+ ts.isConstructorDeclaration(owner) ||
449
+ ts.isGetAccessorDeclaration(owner) ||
450
+ ts.isSetAccessorDeclaration(owner)) &&
451
+ owner.body === node.parent);
452
+ };
453
+ /**
454
+ * `null` for a node this producer does not model.
455
+ *
456
+ * The census routes an object literal's own accessor definitions here too,
457
+ * and those are not any of the kinds below. Falling through to
458
+ * `function-object` for them would publish a callable allocation that names no
459
+ * function -- a shape `AllocationOperation.callable` cannot honestly fill --
460
+ * so the unmodelled kinds are refused by name instead.
461
+ */
462
+ /**
463
+ * The binding a `function f() {}` statement initializes.
464
+ *
465
+ * A function declaration does two things: it instantiates a callable, and it
466
+ * initializes the binding that names it -- hoisted, so the name holds the
467
+ * function before any statement in the enclosing body runs. A function
468
+ * *expression* with a BindingIdentifier does the same two things in a
469
+ * different scope: `InstantiateOrdinaryFunctionExpression` builds a fresh
470
+ * declarative environment, gives it exactly one immutable binding for that
471
+ * name, makes it the closure's `[[Environment]]`, and initializes it with the
472
+ * closure before returning. So it introduces a cell too, and publishing only
473
+ * the declaration's was the defect -- every read of a named function
474
+ * expression's own name (the `requestAnimationFrame(loop)` idiom, one
475
+ * occurrence in each of twelve corpus apps) named a declaration no operation
476
+ * introduced, and `bindingReference` refused it as an ambient one with no host
477
+ * protocol. Which execution context owns the cell is already answered by
478
+ * `candidate.caller`: the environment is created by whatever evaluates the
479
+ * expression, exactly as a declaration's cell belongs to the body that hoists
480
+ * it. Nothing leaks to the enclosing scope from this, because scoping is the
481
+ * checker's answer, not this one's -- an outer name never resolves to this
482
+ * declaration, so no read outside the body can reach the cell.
483
+ *
484
+ * An anonymous function expression still names nothing, and neither does an
485
+ * object-literal method: its name is a property key installed by
486
+ * `definePropertiesOf`, not a binding any scope resolves.
487
+ */
488
+ const nameBindingOf = (node, allocation, candidate, context) => {
489
+ if (!(ts.isFunctionDeclaration(node) || ts.isFunctionExpression(node)) || !node.name)
490
+ return [];
491
+ const value = allocation.results[0];
492
+ if (!value)
493
+ return [];
494
+ const id = mintOperationId(context.ordinals, candidate.id, 'binding');
495
+ // Mutability and the dead zone come from the one shared authority rather
496
+ // than from constants here, because the read side asks the same function --
497
+ // `references.ts`, `computations.ts` and `invocations.ts` all reach a
498
+ // binding read's kind through `bindingKindOf`. A declaration binding is
499
+ // still mutable and hoisted; a function expression's self-name is the
500
+ // immutable, dead-zone-free binding the language creates for it. Two
501
+ // producers computing this separately is what `BindingKind`'s own doc
502
+ // comment forbids, and a cell whose introduction and reads disagreed about
503
+ // its lifetime would be one cell with two lifetimes.
504
+ const { mutable, temporalDeadZone } = bindingKindOf(node);
505
+ return [
506
+ {
507
+ id,
508
+ family: 'binding',
509
+ action: 'initialize',
510
+ declaration: context.identities.declarationIdOf(node),
511
+ mutable,
512
+ temporalDeadZone,
513
+ ...(isBodyLevelFunctionDeclaration(node) ? { hoistedFunctionInitialization: true } : {}),
514
+ caller: candidate.caller,
515
+ operands: [operand('initializer', 0, { kind: 'result', result: value.id }, allocation.shape)],
516
+ results: [mintResult(id, 'value', allocation.shape)],
517
+ completion: normalCompletion,
518
+ effects: { ...pureEffects, writesMutableState: true },
519
+ evaluationOrdinal: candidate.evaluationOrdinal
520
+ }
521
+ ];
522
+ };
523
+ /**
524
+ * A spread source that is neither a native cursor nor dynamic, but declares
525
+ * its own `[Symbol.iterator]` -- a class with a `*[Symbol.iterator]()`, the
526
+ * shape every hand-written iterable has.
527
+ *
528
+ * `protocol.ts` already mints the whole GetIterator record for it; only this
529
+ * producer refused to consume one, so `[...new Range(1, 4)]` was blocked for
530
+ * a protocol that was installed. The operand cites that record exactly as a
531
+ * dynamic spread's does, and `ir/lower-allocation.ts` gathers the cursor it
532
+ * carries.
533
+ */
534
+ const gathersDeclaredIterator = (context, expression) => {
535
+ // A plain array, a Set, a string, a tuple -- everything with a native range
536
+ // copy -- declares `[Symbol.iterator]` too, and `protocol.ts` mints NO
537
+ // record for those (its `consumedWithoutIterator` bypass returns first). So
538
+ // they are excluded here rather than asked: citing a record nobody publishes
539
+ // is a withheld certificate, which is what `[...state.items, action.item]`
540
+ // became when this predicate answered on the symbol alone.
541
+ const type = context.types.typeAt(expression);
542
+ if (hasNativeIterationCursor(context, type) || isDynamicIterationSource(context, type) || isClosedTupleSpread(context, expression))
543
+ return false;
544
+ return iteratorMethodSymbolOf(context.types.rawTypeAt(expression)) !== null;
545
+ };
546
+ const allocatedKindOf = (node) => {
547
+ if (ts.isObjectLiteralExpression(node))
548
+ return 'object-literal';
549
+ if (ts.isArrayLiteralExpression(node))
550
+ return 'array-literal';
551
+ if (ts.isClassExpression(node))
552
+ return 'class-constructor-object';
553
+ if (ts.isRegularExpressionLiteral(node))
554
+ return 'regexp-object';
555
+ return isCallableNode(node) ? 'function-object' : null;
556
+ };
557
+ /**
558
+ * The outermost `as T`/`<T>` assertion in an unbroken chain of assertions and
559
+ * parentheses wrapping `node`, or `null` when `node` is not the operand of one.
560
+ *
561
+ * `expr as unknown as T` -- the standard double-cast idiom for bypassing
562
+ * structural compatibility -- parses as two nested `AsExpression`s, the inner
563
+ * one asserting `unknown`. `producers/invocations.ts`'s own
564
+ * `enclosingTypeAssertion` correctly reads only the immediate wrapper for its
565
+ * single-assertion call sites; reading only the immediate parent here would
566
+ * answer `unknown` and miss the caller's actual intent, so this climbs
567
+ * through every chained assertion to the last one instead of stopping at the
568
+ * first.
569
+ */
570
+ const outermostTypeAssertion = (node) => {
571
+ let current = node;
572
+ let outermost = null;
573
+ for (;;) {
574
+ let parent = current.parent;
575
+ while (parent !== undefined && ts.isParenthesizedExpression(parent) && parent.expression === current) {
576
+ current = parent;
577
+ parent = current.parent;
578
+ }
579
+ if (parent === undefined || !(ts.isAsExpression(parent) || ts.isTypeAssertionExpression(parent)) || parent.expression !== current) {
580
+ return outermost;
581
+ }
582
+ outermost = parent;
583
+ current = parent;
584
+ }
585
+ };
586
+ /**
587
+ * Whether `id`'s structural shape is a call+construct signature, through
588
+ * `unwrappedStructuralShape` above -- the one place this file already
589
+ * answers "what does a `declared`/intersection wrapper actually name," so a
590
+ * second, narrower unwrap here would be the same two-authorities risk this
591
+ * file's own header on `unwrappedStructuralShape`'s callers exists to avoid.
592
+ */
593
+ const isCallAndConstructShape = (context, id) => {
594
+ const signature = unwrappedStructuralShape(context, id);
595
+ return signature?.kind === 'signature' && signature.call.length > 0 && signature.construct.length > 0;
596
+ };
597
+ /**
598
+ * A plain function's allocation shape, honoring an immediate `as T`/`<T>`
599
+ * assertion that adds a construct signature the literal's own inferred type
600
+ * never states.
601
+ *
602
+ * TypeScript's checker never gives an ordinary `FunctionExpression`/
603
+ * `FunctionDeclaration` a construct signature of its own -- `valueTypeAt`
604
+ * below reflects exactly what the checker inferred, a call-only signature --
605
+ * even though ECMA-262 15.2.4 OrdinaryFunctionCreate gives every non-arrow,
606
+ * non-method, non-generator, non-async function real `[[Construct]]`
607
+ * behavior and a real own "prototype" property. A program that casts such a
608
+ * value to a call+construct interface (`function (v) {...} as unknown as
609
+ * DualCallableConstructor`, an ajv-style `((v) => boolean) & { new (...): T
610
+ * }` intersection) is not lying about the runtime -- it is naming a fact the
611
+ * checker's own inference just does not surface for typed function syntax
612
+ * the way it does for the untyped `this.x = ` constructor-function idiom
613
+ * (`structural-receiver.ts`'s `jsConstructorReceiverOf`).
614
+ *
615
+ * Safe to honor because this compiler renders the callable's own construct
616
+ * thunk from its own body (`targets/cpp/translation-unit.ts`'s
617
+ * `constructThunkOf`, `targets/cpp/emit-callable.ts`'s `emitAllocateCallable`)
618
+ * -- unlike `JSON.parse`'s `any` (`producers/invocations.ts`'s
619
+ * `jsonParseResultOverride`), this is never trusting an opaque host's word
620
+ * for a shape it does not itself build. Restricted to the allocation's own
621
+ * DIRECT assertion chain -- never a later `as T` on a separate reference to
622
+ * the same declaration (`const reflected = Factory as FactoryWithDefault`
623
+ * elsewhere in the file), which would need a whole-program census of every
624
+ * reachable cast this producer is not given -- and to ordinary function
625
+ * syntax only: an arrow, a method, a generator or an async function is never
626
+ * a legal `new` target in real JavaScript, and honoring a cast that claims
627
+ * otherwise here would certify an impossible construction instead of
628
+ * refusing it.
629
+ *
630
+ * That census was BUILT and reverted on 2026-09-08, measured rather than
631
+ * argued: it resolves the cast correctly and still buys nothing, because the
632
+ * asserted type in every program that wants this is an INTERSECTION
633
+ * (`typeof Factory & (new (v: number) => T)`) and an intersection of a call
634
+ * type with a construct type interns as an object shape with zero members --
635
+ * so `isCallAndConstructShape` answers `false` for the DIRECT spelling too.
636
+ * The wall is intersection resolution, not the reach of this rule. See
637
+ * a finding of the same date.
638
+ */
639
+ const constructibleAssertionShapeOf = (context, node) => {
640
+ if (node.asteriskToken !== undefined)
641
+ return null;
642
+ if ((ts.getCombinedModifierFlags(node) & ts.ModifierFlags.Async) !== 0)
643
+ return null;
644
+ const assertion = outermostTypeAssertion(node);
645
+ if (!assertion)
646
+ return null;
647
+ const asserted = context.types.typeAt(assertion);
648
+ return isCallAndConstructShape(context, asserted) ? asserted : null;
649
+ };
650
+ export const createAllocationProducer = (context) => ({
651
+ family: 'allocation',
652
+ contribute: (candidate) => {
653
+ const node = candidate.node;
654
+ if (ts.isArrayLiteralExpression(node)) {
655
+ // A spread is admitted when its own source has a NATIVE ITERATION CURSOR
656
+ // -- a plain array, a `Set<T>`, a `Map<K, V>`, a `string` or a
657
+ // `Generator<T, ...>`, the same predicate `protocol.ts`'s bypass uses so
658
+ // the two halves cannot disagree about which sources take the range copy
659
+ // -- or when it is a CLOSED TUPLE (positional expansion,
660
+ // `tuple-spread.ts`). Anything else -- a user-defined iterable, a
661
+ // `Symbol.iterator` method written by hand, a tuple with an
662
+ // optional/rest element -- still
663
+ // needs the general iterator protocol, which is not installed, so it is
664
+ // refused here exactly as before. `.find()` rather than `.some()`
665
+ // because the refusal needs to name a candidate; which one is a detail,
666
+ // not part of the contract.
667
+ const inadmissibleSpread = node.elements.find((element) => ts.isSpreadElement(element) &&
668
+ !hasNativeIterationCursor(context, context.types.typeAt(element.expression)) &&
669
+ !isDynamicIterationSource(context, context.types.typeAt(element.expression)) &&
670
+ !isClosedTupleSpread(context, element.expression) &&
671
+ !gathersDeclaredIterator(context, element.expression));
672
+ if (inadmissibleSpread) {
673
+ return {
674
+ kind: 'blocked',
675
+ blocker: blocked(candidate.id, 'allocation', 'array literal spread needs the iterator protocol, which is not installed', 'P4')
676
+ };
677
+ }
678
+ }
679
+ const operationIdentity = mintOperationId(context.ordinals, candidate.id, 'allocation');
680
+ const operands = [];
681
+ // The reads a tuple spread expands to, and the edges wiring each one to the
682
+ // receiver it indexes. Collected here so the contribution can publish them
683
+ // alongside the allocation itself.
684
+ const expansions = [];
685
+ const expansionEdges = [];
686
+ if (ts.isArrayLiteralExpression(node)) {
687
+ // The operand's own ordinal is its position in the ELEMENT SEQUENCE the
688
+ // literal builds, which stops being the syntactic index the moment a
689
+ // tuple spread expands one written element into several. Everything
690
+ // downstream reads the ordinal as that sequence position -- `lowerTupleLiteral`
691
+ // matches operand `n` to the record field keyed `String(n)`,
692
+ // `arrayLiteralSlotsOf` merges the `element`/`spread` roles back into one
693
+ // ordered run by it, and `arrayLiteralElementTarget` looks a tuple field
694
+ // up by it -- so it is counted, never taken from `forEach`'s index.
695
+ let position = 0;
696
+ for (const element of node.elements) {
697
+ if (ts.isOmittedExpression(element)) {
698
+ // A hole is not an element whose value is `undefined`; it is a slot
699
+ // the language defines but this site leaves empty, and the two are
700
+ // observably different (`in`, enumeration order on assignment).
701
+ operands.push(operand('element', position, { kind: 'absent' }, context.types.typeOf(context.checker.getUndefinedType())));
702
+ position += 1;
703
+ }
704
+ else if (ts.isSpreadElement(element)) {
705
+ // A closed tuple is expanded into one ordinary `element` operand per
706
+ // position, each citing its own `[[Get]]`: the literal `[...pair, 4]`
707
+ // then reaches every later layer as the three-element literal it
708
+ // provably is, needing no spread-aware code anywhere downstream.
709
+ const expanded = tupleSpreadReads(context, candidate, element.expression);
710
+ if (expanded) {
711
+ expansions.push(...expanded.operations);
712
+ expansionEdges.push(...expanded.edges);
713
+ for (const slot of expanded.positions) {
714
+ operands.push(operand('element', position, slot.source, slot.type));
715
+ position += 1;
716
+ }
717
+ continue;
718
+ }
719
+ // Admitted only when `hasNativeIterationCursor` passed above. This operand
720
+ // names the spread's own source (the whole array, e.g. `xs`), not a
721
+ // single element, so `ir/lower-allocation.ts` can range-copy it
722
+ // directly instead of through a materialized iterator. The distinct
723
+ // 'spread' role is what tells this operand apart from an ordinary
724
+ // element at the same position -- collapsing the two under 'element'
725
+ // would leave that lowering no way to know which push shape a given
726
+ // operand needs.
727
+ const sourceType = context.types.typeAt(element.expression);
728
+ // A dynamic spread consumes the one GetIterator record the protocol
729
+ // candidate publishes. Re-reading the source here would invoke
730
+ // @@iterator twice and lose observable iterator identity.
731
+ const source = isDynamicIterationSource(context, sourceType) || gathersDeclaredIterator(context, element.expression)
732
+ ? {
733
+ kind: 'result',
734
+ result: semanticResultId(operationId(context.identities.nodeIdOf(element), 'protocol', 1), 'iterator-record')
735
+ }
736
+ : sourceForValue(context, element.expression);
737
+ operands.push(operand('spread', position, source, sourceType));
738
+ position += 1;
739
+ }
740
+ else {
741
+ operands.push(operand('element', position, sourceForValue(context, element), context.types.typeAt(element)));
742
+ position += 1;
743
+ }
744
+ }
745
+ }
746
+ if (ts.isRegularExpressionLiteral(node)) {
747
+ // A regexp literal's pattern and flags are SOURCE TEXT, exactly as a
748
+ // template literal's segments are, so they travel the same way: as
749
+ // constant operands the producer read off the token. No step of the
750
+ // language computes either one (ECMA-262 22.2.4.1 `RegExp(pattern,
751
+ // flags)` receives them already final from the literal's Parse Node),
752
+ // and nothing downstream should have to re-lex the literal to get them.
753
+ //
754
+ // The split is on the LAST `/`, which is exact rather than approximate:
755
+ // the grammar is `/ RegularExpressionBody / RegularExpressionFlags`, and
756
+ // `RegularExpressionFlags` is a sequence of `IdentifierPartChar`, which
757
+ // never includes `/`. So the final `/` in the token is always the
758
+ // terminating one, even when the body contains `[/]` or `\/`.
759
+ const text = node.text;
760
+ const terminator = text.lastIndexOf('/');
761
+ if (terminator <= 0) {
762
+ return {
763
+ kind: 'blocked',
764
+ blocker: blocked(candidate.id, 'allocation', `a regular-expression literal's token ${JSON.stringify(text)} has no closing delimiter to split its flags off`, 'P1')
765
+ };
766
+ }
767
+ const patternType = context.table.intern({ kind: 'primitive', primitive: 'string' });
768
+ operands.push(operand('pattern-source', 0, { kind: 'constant', text: text.slice(1, terminator), literal: 'string' }, patternType));
769
+ operands.push(operand('pattern-flags', 0, { kind: 'constant', text: text.slice(terminator + 1), literal: 'string' }, patternType));
770
+ }
771
+ const allocated = allocatedKindOf(node);
772
+ if (!allocated) {
773
+ return {
774
+ kind: 'blocked',
775
+ blocker: blocked(candidate.id, 'allocation', `no allocation is modelled for a node of syntax kind ${ts.SyntaxKind[node.kind]}`, 'P1')
776
+ };
777
+ }
778
+ // A callable's shape is what its *declaration* denotes, which for an
779
+ // accessor is its own signature and not the property type its name carries
780
+ // -- see `structural-declarations.ts`'s `accessorSignatureOf`. An ordinary
781
+ // function directly wrapped in an `as T`/`<T>` assertion that adds a
782
+ // construct signature overrides that default -- see
783
+ // `constructibleAssertionShapeOf` just above.
784
+ const constructibleShape = ts.isFunctionExpression(node) || ts.isFunctionDeclaration(node) ? constructibleAssertionShapeOf(context, node) : null;
785
+ const shape = constructibleShape ?? (isCallableNode(node) ? context.types.valueTypeAt(node) : context.types.typeAt(node));
786
+ const operation = {
787
+ id: operationIdentity,
788
+ family: 'allocation',
789
+ caller: candidate.caller,
790
+ allocated,
791
+ // Only a callable allocation names a function; everything else states
792
+ // `null` rather than an id that would be meaningless at that coordinate.
793
+ callable: isCallableNode(node) ? context.identities.functionIdOf(node) : null,
794
+ ...(isCallableNode(node)
795
+ ? {
796
+ functionSource: node.getText(),
797
+ functionName: staticFunctionNameOf(node),
798
+ functionLength: expectedParameterCountOf(node),
799
+ generatorFunction: 'asteriskToken' in node && node.asteriskToken !== undefined,
800
+ ...(ownPrototypePropertyOf(node) === null ? {} : { ownPrototypeProperty: ownPrototypePropertyOf(node) === true })
801
+ }
802
+ : {}),
803
+ // A class expression's constructor object names its class and its
804
+ // `[[Name]]` (`const A = class {}` is "A"), exactly as
805
+ // `class-lifecycle.ts`'s `allocateFunctionObject` does for a declaration.
806
+ ...(ts.isClassExpression(node)
807
+ ? {
808
+ classDeclaration: context.identities.declarationIdOf(node),
809
+ functionName: staticClassNameOf(node),
810
+ functionLength: staticClassLengthOf(node)
811
+ }
812
+ : {}),
813
+ shape,
814
+ ...(allocated === 'array-literal' ? { conversionRoles: arrayLiteralElementRolesOf(context, shape, operands) } : {}),
815
+ ...(isBodyLevelFunctionDeclaration(node) ? { hoistedFunctionInitialization: true } : {}),
816
+ operands,
817
+ results: [mintResult(operationIdentity, 'value', shape)],
818
+ // The allocation itself never throws; a throwing element or heritage
819
+ // evaluation is that sub-expression's own operation, not this one's.
820
+ completion: normalCompletion,
821
+ effects: { readsMutableState: false, writesMutableState: false, allocates: true, callsUserCode: false },
822
+ // Evaluation position comes from the shared per-caller counter, never
823
+ // from a source offset: the two are not comparable, so an operation
824
+ // ordinalled by offset sorts before every operation ordinalled by count
825
+ // regardless of the order either actually runs in.
826
+ evaluationOrdinal: candidate.evaluationOrdinal
827
+ };
828
+ if (isCallableNode(node)) {
829
+ return {
830
+ kind: 'operations',
831
+ operations: [operation, ...nameBindingOf(node, operation, candidate, context)],
832
+ edges: valueEdgesInto(operationIdentity, operands)
833
+ };
834
+ }
835
+ if (!ts.isObjectLiteralExpression(node)) {
836
+ // The expanded tuple-spread reads are published with the allocation that
837
+ // cites them, never separately: `contribution.ts` commits one candidate
838
+ // atomically, so an allocation whose operands name results published by
839
+ // a *different* candidate would be withheld the moment that candidate
840
+ // were blocked, and the two must stand or fall together.
841
+ return {
842
+ kind: 'operations',
843
+ operations: [...expansions, operation],
844
+ edges: [...expansionEdges, ...valueEdgesInto(operationIdentity, operands)]
845
+ };
846
+ }
847
+ // An object literal is OrdinaryObjectCreate followed by one
848
+ // CreateDataPropertyOrThrow per property, and modelling it as a single
849
+ // allocation carrying value operands loses every key: `{ a: 1 }` and
850
+ // `{ x: 1 }` would publish identical operations. Each definition is its
851
+ // own operation, keyed on its own property node, so its key survives and
852
+ // so the emitted object is the one the source describes.
853
+ const definitions = definePropertiesOf(node, operation.results[0]?.id ?? null, shape, candidate, context);
854
+ if ('blocked' in definitions) {
855
+ return { kind: 'blocked', blocker: blocked(candidate.id, 'allocation', definitions.blocked, 'P1') };
856
+ }
857
+ return {
858
+ kind: 'operations',
859
+ operations: [operation, ...definitions.operations],
860
+ edges: [...valueEdgesInto(operationIdentity, operands), ...definitions.edges]
861
+ };
862
+ }
863
+ });