@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,573 @@
1
+ import { boxedValueText } from './emit-dynamic-properties.js';
2
+ import { isCanonicalNumberPropertyKeyText, representationKey } from '../../representation/model.js';
3
+ import { completeTemplateObjectCarrier, isCompleteTemplateObjectCarrier, templateObjectCapabilityKeyOf } from '../../representation/template-object.js';
4
+ import { fieldPresenceOf, staticOwnFieldsOf } from '../../representation/record-fields.js';
5
+ import { regexpFlagSupportKeyOf, spreadSourceCarrierKeyOf } from '../../ir/certify/carrier-keys.js';
6
+ import { createCppEmitBlockedError, defineValue, internTemplateObject, operandText } from './emit-context.js';
7
+ import { memberAccessOperator } from './emit-carrier-members.js';
8
+ import { cppArrayExtensionStructName, cppRecordFieldName, cppRecordAccessorEnvironmentName, cppRecordFieldPresenceName, cppRecordStructName, cppStringLiteral, cppTypeOf } from './types.js';
9
+ import { declaredRecordFieldOf, declaredFieldRepresentationOf, recordAccessorsOfShape } from './records.js';
10
+ import { alignedValueText } from './emit-narrowing.js';
11
+ import { cppRegExpNativeTypes } from './regexp-types.js';
12
+ import { armAt, armIs } from './emit-union-properties.js';
13
+ import { packedEnvironmentText } from './emit-callable.js';
14
+ /**
15
+ * How an object literal comes into being.
16
+ *
17
+ * One subject: the allocation itself, and the member writes that follow it.
18
+ * Which of the three shapes a literal takes -- a struct by value, a struct
19
+ * behind a `shared_ptr`, or a keyed container -- is decided by the carrier the
20
+ * deriver already chose, never re-decided here.
21
+ */
22
+ const emitFieldInits = (ctx, lines, receiverName, representation, ownership, fields) => {
23
+ const accessor = memberAccessOperator(ownership);
24
+ for (const field of fields) {
25
+ const rawValueText = operandText(ctx, field.value);
26
+ // An object literal's OWN inferred carrier for a field can be narrower
27
+ // than the struct it is physically allocated as: a call site that passes
28
+ // `{ src: "x" }` where the parameter declares `src?: string | Uint8Array
29
+ // | ...` allocates that WIDER struct directly, with no intermediate
30
+ // narrow-typed literal ever constructed in between -- so the plain
31
+ // `std::string` this field's own operand carries has to widen into the
32
+ // struct's `Optional<TaggedUnion<...>>` member on this very first write,
33
+ // exactly as `emit-properties.ts`'s `emitFieldStore` already widens a
34
+ // later store into an existing field. Reusing `declaredFieldRepresentationOf`
35
+ // -- the identical authority that store asks -- is what keeps an
36
+ // allocation's first write and a later store from silently disagreeing
37
+ // about whether a field needs one. Without this a `gea::TaggedUnion`
38
+ // field initialized straight from a literal's narrower operand has no
39
+ // implicit conversion clang will accept, and the mismatch was never a
40
+ // narrowing this compiler could see: `AllocateRecordOperation.fields`
41
+ // reads each value's own operand representation, never the receiver's
42
+ // declared one.
43
+ const held = declaredFieldRepresentationOf(ctx.deriver, representation, field.key, ctx.classes);
44
+ const valueText = (held ? alignedValueText(ctx, 'emit-allocation.ts:71', field.value.representation, held, rawValueText) : null) ?? rawValueText;
45
+ // `field.key` is the layout's own key -- `"0"` for a tuple slot -- not a
46
+ // C++ member name. `renderStructDefinition` declared that member through
47
+ // `cppRecordFieldName`, so the initializer has to reach it the same way.
48
+ lines.push(`${receiverName}${accessor}${cppRecordFieldName(field.key)} = ${valueText};`);
49
+ const declared = declaredRecordFieldOf(ctx.deriver, representation, field.key, ctx.classes);
50
+ if (declared && !declared.required) {
51
+ lines.push(`${receiverName}${accessor}${cppRecordFieldPresenceName(field.key)} = true;`);
52
+ }
53
+ }
54
+ };
55
+ /**
56
+ * An object literal whose layout is a DICTIONARY, not a struct.
57
+ *
58
+ * A declared type with an index signature (`{ [key: string]: Style }`, a
59
+ * `Record<K, V>`) derives a `dictionary` carrier rather than a record --
60
+ * `deriveObject` routes it there before it ever considers fields -- so a
61
+ * literal written against one has no struct members to assign. Each member is
62
+ * a keyed store instead, through the container's own `operator[]`, which is
63
+ * exactly the store path `gea::Dictionary`/`gea::NumericDictionary` document
64
+ * (`read` is the non-inserting counterpart, for the read side).
65
+ *
66
+ * Nothing here boxes: the container is `Dictionary<V>` over the value carrier
67
+ * the deriver already chose, and each member's own text is written into it
68
+ * unchanged. A numeric-keyed dictionary takes the key as the number it is --
69
+ * `{ 0: x }` is `dict[0]`, not `dict["0"]` -- because the container is keyed by
70
+ * `double` and quoting it would name a key nothing ever reads.
71
+ */
72
+ const emitAllocateDictionary = (ctx, lines, operation, representation) => {
73
+ const name = defineValue(ctx, operation.result);
74
+ if (representation.ownership === 'borrowed') {
75
+ throw createCppEmitBlockedError('runtime-helper:allocation:object-literal:dictionary(borrowed)', 'a "dictionary" allocation carries ownership "borrowed", but a borrowed reference names an object some other frame owns; ' +
76
+ 'there is nothing for an allocation to borrow from');
77
+ }
78
+ // `cppTypeOf(representation, 'owned')` is the container itself, with the
79
+ // ownership wrapper the carrier would otherwise add stripped off -- exactly
80
+ // what `make_shared` needs as its type argument, read from the one authority
81
+ // that spells `gea::Dictionary`/`gea::NumericDictionary` rather than naming
82
+ // either here.
83
+ const storage = cppTypeOf(representation, 'owned');
84
+ lines.push(representation.ownership === 'shared-refcount' ? `${name} = gea::makeRef<${storage}>();` : `${name} = ${storage}{};`);
85
+ const subscript = memberAccessOperator(representation.ownership) === '->' ? `(*${name})` : name;
86
+ for (const field of operation.fields) {
87
+ if (representation.key === 'symbol') {
88
+ throw createCppEmitBlockedError('runtime-helper:allocation:object-literal:dictionary(symbol-key)', 'a symbol-keyed dictionary literal needs the runtime symbol expression for each computed key, but this allocation operation records only its canonical field name');
89
+ }
90
+ // A number-keyed container is keyed by `double`. A property name is always
91
+ // a string in the source, so the numeric key is the name read back as the
92
+ // number it spells -- and a name that does not spell one has no key in this
93
+ // container at all, which refuses rather than silently storing under a
94
+ // value nothing reads.
95
+ if (representation.key === 'number' && !isCanonicalNumberPropertyKeyText(field.key)) {
96
+ throw createCppEmitBlockedError('runtime-helper:allocation:object-literal:dictionary(non-numeric-key)', `stores member "${field.key}" into a number-keyed dictionary, but that name does not spell a numeric key`);
97
+ }
98
+ // Numeric storage is keyed by the already-canonical PropertyKey text;
99
+ // this safely includes NaN/infinities and preserves -0's alias with "0".
100
+ const key = cppStringLiteral(field.key);
101
+ const rawValueText = operandText(ctx, field.value);
102
+ // A dictionary literal's own members can name narrower carriers than the
103
+ // table's declared value type -- `{ a: true }` against `{ [k: string]:
104
+ // string | number | boolean }` writes a `bool` into a `V` that is really a
105
+ // `gea::TaggedUnion<...>`, exactly the reconciliation
106
+ // `emit-properties.ts`'s own `defineOwnProperty` dictionary store already
107
+ // applies to a LATER keyed write. Widening on the very first write too is
108
+ // what keeps an allocation-time member and a later `dict[k] = v` store
109
+ // from silently disagreeing about whether one needs it.
110
+ const widened = alignedValueText(ctx, 'emit-allocation.ts:152', field.value.representation, representation.value, rawValueText) ?? rawValueText;
111
+ lines.push(`${subscript}[${key}] = ${widened};`);
112
+ }
113
+ };
114
+ export const emitAllocateRecord = (ctx, lines, operation) => {
115
+ const representation = operation.result.representation;
116
+ if (representation.kind === 'dynamic') {
117
+ const name = defineValue(ctx, operation.result);
118
+ lines.push(`${name} = gea::Value::object();`);
119
+ for (const field of operation.fields) {
120
+ lines.push(`${name}.setProperty(gea::PropertyKey::string(${cppStringLiteral(field.key)}), ${boxedValueText(ctx, field.value, 'dynamic object field')});`);
121
+ }
122
+ return;
123
+ }
124
+ if (representation.kind === 'dictionary') {
125
+ emitAllocateDictionary(ctx, lines, operation, representation);
126
+ return;
127
+ }
128
+ if (representation.kind !== 'record' && representation.kind !== 'record-with-index' && representation.kind !== 'native-record-ref') {
129
+ throw createCppEmitBlockedError(`runtime-helper:allocation:object-literal:${representation.kind}`, `carries a "${representation.kind}" result, but this emitter only allocates "record", "record-with-index", "native-record-ref" and "dictionary"`);
130
+ }
131
+ // Ownership decides how the object comes into being, and the carrier kind
132
+ // does not. All three carriers name their storage through the same
133
+ // authority (`cppRecordStructName`, rendered by `records.ts`), and what
134
+ // separates them is identity semantics -- whether two references to this
135
+ // object are the same object -- which is a question about the *carrier*,
136
+ // already answered before anything reaches this emitter. Dispatching
137
+ // allocation on the kind instead of the ownership is what made a shared
138
+ // `record` refuse while a shared `native-record-ref` allocated, though the
139
+ // two would emit the identical line; it also meant this file refused an
140
+ // allocation the manifest already claimed a recipe for, which is the wrong
141
+ // direction for an over-claim to point.
142
+ //
143
+ // `record-with-index` needs nothing beyond that: its index-signature half
144
+ // (the `gea_dynamic` sidecar `records.ts`'s `renderStructDefinition`
145
+ // already gives every such struct) is a MEMBER of the same struct
146
+ // `cppRecordStructName` names, not a second allocation -- `cppTypeOf`
147
+ // (`types.ts`) already spells `record` and `record-with-index` through the
148
+ // identical `case 'record': case 'record-with-index':` fallthrough, for
149
+ // exactly this reason. An object literal with no computed-key member (the
150
+ // common case: `this.morphAttributes = {}`, later filled by separate
151
+ // `define-own-property` stores -- see `AllocateRecordOperation`'s own
152
+ // comment) allocates the empty struct here and every member, named or
153
+ // indexed, is written afterward through `emit-properties.ts`'s
154
+ // `emitFieldStoreLines` and `emit-carrier-members.ts`'s
155
+ // `emitRecordIndexSidecarStore` -- the identical split a `record` allocation
156
+ // with members installed as later stores already goes through. A literal
157
+ // that DOES supply computed-key members inline reaches `emitFieldInits`
158
+ // below for its named half exactly like a `record` does; nothing here
159
+ // writes to the index sidecar, because `producers/shared.ts`'s own literal
160
+ // lowering never puts an index-signature member in `operation.fields` --
161
+ // only a real property name is.
162
+ // The host's own struct name when one was stated, exactly as `types.ts`'s
163
+ // `cppTypeOf` spells the same carrier -- a `gea_record_*` name minted here
164
+ // would be a second, incompatible identity for a type the engine already
165
+ // declares. The `owned` arm below goes through `cppTypeOf` and so always had
166
+ // this; the shared arm did not, and a stated-native allocation
167
+ // (`gea::runtime::regex::MatchResult`) named a struct nothing defines.
168
+ const structName = (representation.kind === 'native-record-ref' ? representation.native : null) ?? cppRecordStructName(representation.shapeId);
169
+ const name = defineValue(ctx, operation.result);
170
+ switch (representation.ownership) {
171
+ case 'owned':
172
+ lines.push(`${name} = ${cppTypeOf(representation)}{};`);
173
+ break;
174
+ case 'shared-refcount':
175
+ lines.push(`${name} = gea::makeRef<${structName}>();`);
176
+ break;
177
+ case 'borrowed':
178
+ // A borrow is a reference to an object something else owns, and an
179
+ // allocation has no such object to point at: emitting one would have to
180
+ // invent a lifetime the program never states. This is the one ownership
181
+ // that is genuinely unallocatable rather than merely unwritten.
182
+ throw createCppEmitBlockedError(`runtime-helper:allocation:object-literal:${representation.kind}(borrowed)`, `a "${representation.kind}" allocation carries ownership "borrowed", but a borrowed reference names an object some other ` +
183
+ 'frame owns; there is nothing for an allocation to borrow from');
184
+ }
185
+ emitFieldInits(ctx, lines, name, representation, representation.ownership, operation.fields);
186
+ emitAccessorEnvironments(ctx, lines, name, representation, representation.ownership);
187
+ };
188
+ /**
189
+ * The environment a capturing accessor is entered with, stored on the object
190
+ * the accessor is reached through.
191
+ *
192
+ * An accessor has no `CallableObject` to carry its captures -- it is called by
193
+ * name off the shape (`emit-properties.ts`) -- so `get current() { return n +
194
+ * 1 }` written inside a function had nowhere to receive that function's `n`
195
+ * from, and refused. The object IS the transport: it is allocated in the very
196
+ * frame that owns the cells, so the environment is packed HERE, exactly as an
197
+ * `allocate-callable` packs one, through the same `packedEnvironmentText`.
198
+ * Which halves carry one is `captures.ts`'s admission, the same answer
199
+ * `renderStructDefinition` declared the member from.
200
+ */
201
+ const emitAccessorEnvironments = (ctx, lines, receiverName, representation, ownership) => {
202
+ const accessors = representation.kind === 'record'
203
+ ? representation.accessors
204
+ : representation.kind === 'native-record-ref'
205
+ ? (recordAccessorsOfShape(ctx.deriver, representation.shapeId) ?? [])
206
+ : [];
207
+ const member = memberAccessOperator(ownership);
208
+ for (const accessor of accessors) {
209
+ for (const half of ['getter', 'setter']) {
210
+ const body = half === 'getter' ? accessor.getter : accessor.setter;
211
+ if (body === null)
212
+ continue;
213
+ const admission = ctx.captures.of(body);
214
+ if (admission.kind === 'none')
215
+ continue;
216
+ if (admission.kind === 'refused') {
217
+ throw createCppEmitBlockedError(`capture:accessor:${accessor.key}`, `the ${half} of "${accessor.key}" captures a cell this allocation cannot transport: ${admission.reason}`);
218
+ }
219
+ lines.push(`${receiverName}${member}${cppRecordAccessorEnvironmentName(accessor.key, half)} = ${packedEnvironmentText(ctx, lines, body, admission)};`);
220
+ }
221
+ }
222
+ };
223
+ /**
224
+ * The lines that fill one array member with `texts`, through the same
225
+ * `make_shared` + `push` sequence `emit-arrays.ts` allocates an array literal
226
+ * with -- the identical carrier and the identical runtime call, so a template
227
+ * object's arrays and an ordinary one's are one thing, not two.
228
+ */
229
+ const templateArrayLines = (target, array, texts, role) => {
230
+ if (array.element.kind !== 'string') {
231
+ throw createCppEmitBlockedError(`runtime-helper:${templateObjectCapabilityKeyOf(array)}`, `a template object's ${role} array holds "${representationKey(array.element)}" elements; GetTemplateObject fills both arrays with strings`);
232
+ }
233
+ if (array.ownership !== 'shared-refcount') {
234
+ throw createCppEmitBlockedError(`runtime-helper:${templateObjectCapabilityKeyOf(array)}`, `a template object's ${role} array carries ownership "${array.ownership}"; only a shared array is spelled with std::make_shared here`);
235
+ }
236
+ return [
237
+ `${target} = gea::makeRef<gea::ArrayObject<${cppTypeOf(array.element)}>>();`,
238
+ ...texts.map((text) => `${target}->push(${cppStringLiteral(text)});`)
239
+ ];
240
+ };
241
+ /**
242
+ * The ordinary `TemplateStringsArray` carrier: an Array whose one extra own
243
+ * field, `raw`, lives in its typed extension sidecar.
244
+ *
245
+ * `raw` cannot be a separate record wrapped around the Array. The language
246
+ * hands the cooked Array itself to the tag, and `raw` is an own property of
247
+ * that same identity. The ArrayObject extension is the native representation
248
+ * of exactly that shape, so this keeps the indexed cooked values and `raw`
249
+ * together without boxing either one.
250
+ */
251
+ const templateArrayObjectBody = (carrier, operation) => {
252
+ if (carrier.ownership !== 'shared-refcount') {
253
+ throw createCppEmitBlockedError(`runtime-helper:${templateObjectCapabilityKeyOf(carrier)}`, `a template object carries ownership "${carrier.ownership}", but per-site identity needs one shared object every evaluation reaches, not a per-evaluation copy`);
254
+ }
255
+ if (carrier.element.kind !== 'string') {
256
+ throw createCppEmitBlockedError(`runtime-helper:${templateObjectCapabilityKeyOf(carrier)}`, `a template object's cooked array holds "${representationKey(carrier.element)}" elements; GetTemplateObject fills it with strings`);
257
+ }
258
+ const extension = carrier.extension;
259
+ const rawFields = extension?.filter((field) => field.key === 'raw') ?? [];
260
+ if (rawFields.length !== 1 || extension === null) {
261
+ throw createCppEmitBlockedError(`runtime-helper:${templateObjectCapabilityKeyOf(carrier)}`, 'a TemplateStringsArray carrier declares no unique "raw" extension field for GetTemplateObject to install');
262
+ }
263
+ if (extension.some((field) => field.key !== 'raw')) {
264
+ throw createCppEmitBlockedError(`runtime-helper:${templateObjectCapabilityKeyOf(carrier)}`, 'a TemplateStringsArray carrier declares extension fields besides "raw"; GetTemplateObject does not invent values for them');
265
+ }
266
+ const raw = rawFields[0];
267
+ if (raw === undefined) {
268
+ throw createCppEmitBlockedError(`runtime-helper:${templateObjectCapabilityKeyOf(carrier)}`, 'a TemplateStringsArray carrier declared one "raw" extension field but did not retain it for GetTemplateObject to install');
269
+ }
270
+ if (!raw.required || raw.value.kind !== 'array-object') {
271
+ throw createCppEmitBlockedError(`runtime-helper:${templateObjectCapabilityKeyOf(raw.value)}`, `a template object's "raw" extension carries "${representationKey(raw.value)}"; GetTemplateObject sets it to a required Array of raw strings`);
272
+ }
273
+ const holder = cppTypeOf(carrier);
274
+ const rawMember = `gea_object->template extensionFieldsMut<${cppArrayExtensionStructName(extension)}>().${cppRecordFieldName(raw.key)}`;
275
+ const body = [
276
+ `${holder} gea_object = gea::makeRef<${cppTypeOf(carrier, 'owned')}>();`,
277
+ ...operation.cooked.map((segment) => segment.kind === 'undefined' ? 'gea_object->pushUndefined();' : `gea_object->push(${cppStringLiteral(segment.text)});`),
278
+ ...templateArrayLines(rawMember, raw.value, operation.raw, 'raw'),
279
+ `gea::finalizeTemplateObject(gea_object, ${rawMember});`,
280
+ 'return gea_object;'
281
+ ];
282
+ return { holder, body };
283
+ };
284
+ /**
285
+ * `` tag`a${b}c` ``'s first argument: the template object, built once per site.
286
+ *
287
+ * The per-site `static` IS the semantics. ECMA-262 13.2.8.3 caches
288
+ * `GetTemplateObject` per Parse Node, so the tag must be handed the same object
289
+ * on every evaluation -- that is what makes a `WeakMap`-keyed tag cache (the
290
+ * dominant real use of tagged templates) work at all. A fresh object per
291
+ * evaluation would compile, run, and be quietly wrong.
292
+ *
293
+ * Only the native Array exotic carrier is admitted. A record-with-index can
294
+ * resemble the checker's structural declaration, but it cannot implement
295
+ * Array index/length descriptors, frozen integrity, or the exact `raw` own
296
+ * property. Treating that resemblance as a carrier was therefore a silent
297
+ * semantic downgrade, not another valid lowering.
298
+ */
299
+ export const emitAllocateTemplateObject = (ctx, lines, operation) => {
300
+ const representation = operation.result.representation;
301
+ if (isCompleteTemplateObjectCarrier(representation)) {
302
+ // Render from the same canonical object the predicate compared against, so
303
+ // this function cannot gradually grow a second, broader carrier contract.
304
+ const { holder, body } = templateArrayObjectBody(completeTemplateObjectCarrier, operation);
305
+ const accessor = internTemplateObject(ctx.templateObjects, operation, holder, body);
306
+ const name = defineValue(ctx, operation.result);
307
+ lines.push(`${name} = ${accessor}();`);
308
+ return;
309
+ }
310
+ throw createCppEmitBlockedError(`runtime-helper:${templateObjectCapabilityKeyOf(representation)}`, `a template object carries "${representationKey(representation)}"; the complete GetTemplateObject contract requires an ` +
311
+ 'array-object with a required raw string-array extension and shared ownership, because a structural record cannot implement Array exotic ' +
312
+ 'index/length descriptors, frozen integrity, or invalid-escape cooked undefined slots');
313
+ };
314
+ /**
315
+ * A regular-expression literal (ECMA-262 22.2.4.1 `RegExp(pattern, flags)`).
316
+ *
317
+ * Rendered as a construction of the runtime's own pattern type, never as a
318
+ * struct with ten fields written one by one, and the difference is not
319
+ * cosmetic. `RegExpInitialize` (22.2.3.2) parses the source, validates the
320
+ * flags, and DERIVES `global`/`ignoreCase`/`multiline`/`sticky`/`unicode`/
321
+ * `dotAll`/`hasIndices` from the flag string -- so the ten members a reader
322
+ * sees are one constructor's answers, not ten independent stores. A field-by-
323
+ * field allocation would also skip the SyntaxError 22.2.3.2 step 6 throws for
324
+ * a repeated or unknown flag.
325
+ *
326
+ * The carrier check is a real gate rather than a formality: this operation is
327
+ * only reachable for a result the deriver gave the pattern carrier to, and if
328
+ * some other carrier ever reached here the honest answer is a refusal, not a
329
+ * construction of a type the value is not held in.
330
+ */
331
+ /**
332
+ * Whether a pattern source contains an ES2018 Unicode PROPERTY ESCAPE
333
+ * (`\p{...}` / `\P{...}`).
334
+ *
335
+ * `std::regex` has no such construct or Unicode Character Database. The
336
+ * runtime rejects a computed source at construction; a LITERAL's source is
337
+ * known here, so the honest answer is a refusal at build time instead.
338
+ *
339
+ * Only when the pattern is in Unicode mode: outside it, Annex B B.1.2 makes
340
+ * `\p` an IdentityEscape for the letter `p`, which `std::regex` matches
341
+ * correctly. Written as a character walk because the architecture gate
342
+ * forbids a RegExp literal under `targets/cpp` -- and because a regular
343
+ * expression that scans regular-expression source is the wrong instrument for
344
+ * a question this simple.
345
+ */
346
+ const namesAUnicodePropertyEscape = (source, flags) => {
347
+ if (!flags.includes('u') && !flags.includes('v'))
348
+ return false;
349
+ for (let index = 0; index < source.length; index += 1) {
350
+ if (source.charCodeAt(index) !== 92)
351
+ continue;
352
+ const marker = source.charAt(index + 1);
353
+ if ((marker === 'p' || marker === 'P') && source.charAt(index + 2) === '{')
354
+ return true;
355
+ // Every other escape consumes its own next character, so `\\p{L}` -- an
356
+ // escaped backslash followed by a literal `p` -- is not one of these.
357
+ index += 1;
358
+ }
359
+ return false;
360
+ };
361
+ export const emitAllocateRegExp = (ctx, lines, operation) => {
362
+ const representation = operation.result.representation;
363
+ const nativePattern = representation.kind === 'native-record-ref' && representation.native === cppRegExpNativeTypes.pattern;
364
+ if (!nativePattern && representation.kind !== 'dynamic') {
365
+ throw createCppEmitBlockedError(`runtime-helper:allocation:regexp-object:${representation.kind}(${regexpFlagSupportKeyOf(operation.flags)})`, `a regular-expression literal is carried as "${representationKey(representation)}"; this backend builds one as ${cppRegExpNativeTypes.pattern} or boxes that exact Pattern at a dynamic boundary`);
366
+ }
367
+ if (namesAUnicodePropertyEscape(operation.source, operation.flags)) {
368
+ throw createCppEmitBlockedError(`runtime-helper:allocation:regexp-object:${representation.kind}(${regexpFlagSupportKeyOf(operation.flags)})`, `the pattern /${operation.source}/${operation.flags} names an ES2018 Unicode property escape (\\p{...}); std::regex, which this backend's ` +
369
+ "matcher and v1 geatsc's both compile against, has no such construct and no Unicode Character Database to answer one from. Refused here rather " +
370
+ "than at run time because a literal's source is known now -- a pattern built from a computed string still fails closed as a SyntaxError during " +
371
+ 'RegExp construction');
372
+ }
373
+ if (operation.flags.includes('v')) {
374
+ throw createCppEmitBlockedError(`runtime-helper:allocation:regexp-object:${representation.kind}(${regexpFlagSupportKeyOf(operation.flags)})`, `the pattern /${operation.source}/${operation.flags} uses UnicodeSets RegExp semantics; the native matcher has no UnicodeSets parser or set-string ` +
375
+ 'implementation, so this literal is refused rather than being routed through an incompatible character-class grammar');
376
+ }
377
+ if (operation.flags.includes('u') && operation.flags.includes('i')) {
378
+ throw createCppEmitBlockedError(`runtime-helper:allocation:regexp-object:${representation.kind}(${regexpFlagSupportKeyOf(operation.flags)})`, `the pattern /${operation.source}/${operation.flags} combines Unicode matching with ignoreCase; std::regex has no ECMAScript Unicode simple-case-folding ` +
379
+ 'table, so this literal is refused rather than claiming locale-dependent case behavior is JavaScript Unicode semantics');
380
+ }
381
+ const name = defineValue(ctx, operation.result);
382
+ // `constructPatternOrThrow` rather than `gea::makeRef<Pattern>` directly:
383
+ // it is the ported entry point that runs 22.2.3.2's validation first, so an
384
+ // unknown or repeated flag throws where the language says it throws. The
385
+ // ownership the deriver chose is `shared-refcount` unconditionally for this
386
+ // carrier (see `derive.ts`), which is what the helper returns.
387
+ const construct = `gea::runtime::regex::constructPatternOrThrow(${cppStringLiteral(operation.source)}, ${cppStringLiteral(operation.flags)})`;
388
+ lines.push(representation.kind === 'dynamic' ? `${name} = gea::Value::box(gea::Value::Tag::Object, ${construct});` : `${name} = ${construct};`);
389
+ };
390
+ // Re-exported so `emit.ts` can fold this into its existing single-line
391
+ // `emit-allocation.js` import instead of adding a whole new import line --
392
+ // `emit.ts` sits at the architecture gate's line cap. The implementation
393
+ // itself lives in `emit-tonumber.ts`, where the rest of ToNumber/ToNumeric
394
+ // conversion already lives; this file has nothing to do with allocation.
395
+ export { emitToNumericCoercion } from './emit-tonumber.js';
396
+ /**
397
+ * Object spread's `CopyDataProperties` for a source whose own-property set is
398
+ * not known until this runs -- `SpreadCopyOperation` (ir/model.ts), lowered
399
+ * from `producers/protocol.ts`'s `protocol: 'spread'` operation by
400
+ * `ir/lower-protocol.ts`. Lives here, not in a file of its own: it is one
401
+ * more way an object's own storage gets written -- the same subject this
402
+ * file's `emitAllocateDictionary` (above) already owns for a literal's own
403
+ * keys -- and `targets/cpp` sits at the architecture gate's per-directory
404
+ * file-count cap, so a new top-level file for one function is not free here.
405
+ *
406
+ * This backend renders two deliberately narrow receiver/source pairs:
407
+ * `dynamic` into `dynamic`, with the full CopyDataProperties key,
408
+ * descriptor, Get, and CreateDataProperty sequence; and a plain
409
+ * `dictionary` receiver with the statically selected structural source
410
+ * carriers below. A dynamic source does not certify the dictionary path: it
411
+ * may contain symbol keys that the dictionary's string-key insertion loop
412
+ * cannot preserve.
413
+ *
414
+ * The SOURCE may be a plain `dictionary`, a `tagged-union` whose arms are
415
+ * each a `dictionary` or a `record`, or an `optional` wrapping either of
416
+ * those -- `HeaderRecord`'s own three arms (`Record<'Content-Type',
417
+ * BaseMime> | Record<ResponseHeader, string | string[]> | Record<string,
418
+ * string | string[]>`) are exactly one `record`, one `record` and one
419
+ * `dictionary`, and `setDefaultContentType`'s `headers?: HeaderRecord`
420
+ * parameter wraps that same union `optional`. A `dictionary` arm's copy is a
421
+ * runtime walk (`gea::Dictionary::copyInto`, gea_runtime.h); a `record` arm's
422
+ * copy is a static per-FIELD unroll, since its keys are known at compile
423
+ * time; an `optional` source is `CopyDataProperties(obj, source)` itself --
424
+ * spreading `null`/`undefined` is a no-op per that abstract operation, so an
425
+ * absent optional renders no copy at all, and a present one recurses into
426
+ * whichever of the two shapes its payload is. Any other kind -- `record-
427
+ * with-index`, `native-record-ref`, `class-ref`, ... -- refuses by name:
428
+ * unrolling those needs a field list this file does not have a uniform way
429
+ * to read yet, and a record arm with an accessor member refuses for the same
430
+ * reason `producers/shared.ts`'s `staticSpreadMembersOf` already refuses one
431
+ * on the static-copy path -- an accessor must be CALLED, which is not
432
+ * modelled here.
433
+ */
434
+ export const emitSpreadCopy = (ctx, lines, operation) => {
435
+ const receiver = operation.receiver.representation;
436
+ const source = operation.source.representation;
437
+ if (source.kind === 'dynamic' && receiver.kind !== 'dynamic') {
438
+ throw createCppEmitBlockedError(`runtime-helper:protocol:spread:next:${spreadSourceCarrierKeyOf(source.kind, source, receiver, ctx.deriver)}`, `requires a dynamic object-spread receiver for a dynamic source, but the receiver is a "${representationKey(receiver)}"; this runtime-key walk is installed only for a dynamic receiver`);
439
+ }
440
+ if (receiver.kind === 'dynamic') {
441
+ if (source.kind !== 'dynamic') {
442
+ throw createCppEmitBlockedError(`runtime-helper:protocol:spread:next:${spreadSourceCarrierKeyOf(source.kind, source, receiver, ctx.deriver)}`, `writes a dynamic object-spread receiver from a "${representationKey(source)}" source; this runtime-key walk is installed only for a dynamic source`);
443
+ }
444
+ const receiverText = operandText(ctx, operation.receiver);
445
+ const sourceText = operandText(ctx, operation.source);
446
+ lines.push('{');
447
+ lines.push(`const auto& __gea_spread_source = ${sourceText};`);
448
+ lines.push('if (__gea_spread_source.tag() != gea::Value::Tag::Null && __gea_spread_source.tag() != gea::Value::Tag::Undefined) {');
449
+ lines.push('for (const gea::PropertyKey& __gea_spread_key : __gea_spread_source.ownPropertyKeys()) {');
450
+ lines.push('gea::PropertyDescriptor __gea_spread_descriptor;');
451
+ lines.push('if (!__gea_spread_source.ownDescriptor(__gea_spread_key, __gea_spread_descriptor) || !__gea_spread_descriptor.enumerable) continue;');
452
+ lines.push(`if (!${receiverText}.defineProperty(__gea_spread_key, gea::PropertyDescriptor::assignment(__gea_spread_source.getProperty(__gea_spread_key)))) {`);
453
+ lines.push('gea::host::throwRuntimeError("TypeError", "object spread target rejected a property");');
454
+ lines.push('}');
455
+ lines.push('}');
456
+ lines.push('}');
457
+ lines.push('}');
458
+ return;
459
+ }
460
+ if (receiver.kind !== 'dictionary') {
461
+ throw createCppEmitBlockedError(`runtime-helper:protocol:spread:next:${spreadSourceCarrierKeyOf(source.kind, source, receiver, ctx.deriver)}`, `writes a runtime object-spread copy into a "${receiver.kind}" receiver, but this emitter only renders one into a "dictionary"`);
462
+ }
463
+ if (receiver.ownership === 'borrowed') {
464
+ throw createCppEmitBlockedError('runtime-helper:protocol:spread:next:dictionary(borrowed)', 'writes into a dictionary receiver carried with ownership "borrowed", which names no object this copy may write through');
465
+ }
466
+ const receiverText = operandText(ctx, operation.receiver);
467
+ const receiverRef = memberAccessOperator(receiver.ownership) === '->' ? `(*${receiverText})` : receiverText;
468
+ const sourceText = operandText(ctx, operation.source);
469
+ emitSpreadSourceCopy(ctx, lines, source, sourceText, receiver, receiverRef);
470
+ };
471
+ const emitSpreadSourceCopy = (ctx, lines, source, sourceText, receiver, receiverRef) => {
472
+ // `null`/`undefined` copy nothing (`CopyDataProperties`'s own definition),
473
+ // so the absent branch is simply empty rather than a converted "empty
474
+ // dictionary" write -- there is no receiver mutation to make at all.
475
+ if (source.kind === 'optional') {
476
+ lines.push(`if (${sourceText}.has_value()) {`);
477
+ emitSpreadSourceCopy(ctx, lines, source.payload, `(*${sourceText})`, receiver, receiverRef);
478
+ lines.push('}');
479
+ return;
480
+ }
481
+ if (source.kind !== 'tagged-union') {
482
+ emitSpreadArmCopy(ctx, lines, source, sourceText, receiver, receiverRef);
483
+ return;
484
+ }
485
+ const arms = source.arms;
486
+ if (arms.length === 0) {
487
+ throw createCppEmitBlockedError('runtime-helper:protocol:spread:next:tagged-union(no-arms)', 'reads a runtime object-spread source carried as a tagged union with no arms');
488
+ }
489
+ if (arms.length === 1) {
490
+ emitSpreadArmCopy(ctx, lines, arms[0].value, armAt(sourceText, 0), receiver, receiverRef);
491
+ return;
492
+ }
493
+ // Exactly one arm is live at runtime (`gea::TaggedUnion`'s own invariant),
494
+ // so each arm's copy is guarded by `armIs` -- the same per-arm dispatch
495
+ // style `emit-union-properties.ts`'s other renderers use. The last arm
496
+ // needs no guard: the union has already proven live by elimination.
497
+ arms.forEach((arm, index) => {
498
+ const isLast = index === arms.length - 1;
499
+ lines.push(index === 0 ? `if (${armIs(sourceText, index)}) {` : isLast ? '} else {' : `} else if (${armIs(sourceText, index)}) {`);
500
+ emitSpreadArmCopy(ctx, lines, arm.value, armAt(sourceText, index), receiver, receiverRef);
501
+ });
502
+ lines.push('}');
503
+ };
504
+ const emitSpreadArmCopy = (ctx, lines, arm, armText, receiver, receiverRef) => {
505
+ if (arm.kind === 'dictionary') {
506
+ emitSpreadDictionaryArmCopy(ctx, lines, arm, armText, receiver, receiverRef);
507
+ return;
508
+ }
509
+ // A `class-ref` and a data-only `native-record-ref` name their field list
510
+ // rather than carrying it, and `CopyDataProperties` copies exactly that
511
+ // list: a class instance's own enumerable keys ARE the fields, since its
512
+ // methods and accessors live on the prototype and are not own properties at
513
+ // all. `staticOwnFieldsOf` (representation/record-fields.ts) is the one
514
+ // place that rule is stated, and it is the same function the preflight key
515
+ // admitting this source consulted -- reading a different list here than the
516
+ // one that licensed the render is the certify-then-crash that key exists to
517
+ // prevent.
518
+ const fields = staticOwnFieldsOf(ctx.deriver, arm);
519
+ if (fields !== null && (arm.kind !== 'record' || arm.accessors.length === 0)) {
520
+ emitSpreadFieldCopy(ctx, lines, fields, `${armText}${memberAccessOperator(ownershipOfSpreadArm(arm))}`, receiver, receiverRef);
521
+ return;
522
+ }
523
+ throw createCppEmitBlockedError(`runtime-helper:protocol:spread:next:${spreadSourceCarrierKeyOf(arm.kind, arm, receiver, ctx.deriver)}`, `reads a runtime object-spread source carried as "${arm.kind}", but this emitter only copies a source whose own key set a static ` +
524
+ 'field list reproduces exactly: a "dictionary", or a record/class shape with no accessor member');
525
+ };
526
+ /** A shape-named source's ownership, which decides whether its fields are reached through `.` or `->`. */
527
+ const ownershipOfSpreadArm = (arm) => arm.kind === 'record' || arm.kind === 'class-ref' || arm.kind === 'native-record-ref' ? arm.ownership : 'owned';
528
+ /** A converting lambda for a value type this emitter cannot express as a bare identity -- `emit-narrowing.ts`'s own conversion text, wrapped as a callable `gea::Dictionary::copyInto` invokes per entry. */
529
+ const spreadConvertingLambda = (ctx, source, target) => {
530
+ const converted = alignedValueText(ctx, 'emit-allocation.ts:640', source, target, '__v');
531
+ if (converted === null) {
532
+ throw createCppEmitBlockedError(`conversion:${representationKey(source)}->${representationKey(target)}`, `copies a dictionary source whose value is carried as "${representationKey(source)}" into a receiver whose value is carried as ` +
533
+ `"${representationKey(target)}"; no conversion between those is licensed`);
534
+ }
535
+ return `[](const ${cppTypeOf(source)}& __v) { return ${converted}; }`;
536
+ };
537
+ const emitSpreadDictionaryArmCopy = (ctx, lines, arm, armText, receiver, receiverRef) => {
538
+ if (arm.key !== receiver.key) {
539
+ throw createCppEmitBlockedError(`runtime-helper:protocol:spread:next:${spreadSourceCarrierKeyOf('dictionary', arm, receiver, ctx.deriver)}`, `copies a "${arm.key}"-keyed dictionary source into a "${receiver.key}"-keyed dictionary receiver; the two key domains do not convert`);
540
+ }
541
+ const armMember = `${armText}${memberAccessOperator(arm.ownership)}`;
542
+ const sameValueShape = representationKey(arm.value) === representationKey(receiver.value);
543
+ const converter = sameValueShape ? '[](const auto& __v) { return __v; }' : spreadConvertingLambda(ctx, arm.value, receiver.value);
544
+ lines.push(`${armMember}copyInto(${receiverRef}, ${converter});`);
545
+ };
546
+ const emitSpreadFieldCopy = (ctx, lines, fields, armMember, receiver, receiverRef) => {
547
+ if (receiver.key !== 'string' && fields.length > 0) {
548
+ throw createCppEmitBlockedError(`runtime-helper:protocol:spread:next:record->dictionary(${receiver.key})`, `copies statically named string fields into a "${receiver.key}"-keyed dictionary receiver; CopyDataProperties cannot change their PropertyKey domain`);
549
+ }
550
+ for (const field of fields) {
551
+ if (field.key.startsWith('sym(')) {
552
+ throw createCppEmitBlockedError('runtime-helper:protocol:spread:next:record(symbol-field)', `copies the symbol-named field "${field.key}", whose runtime Symbol identity cannot be reconstructed from its representation field name`);
553
+ }
554
+ // A field that may be absent is copied only when it IS there --
555
+ // `CopyDataProperties` (ECMA-262 7.3.25) walks the source's OWN property
556
+ // keys, and a missing key contributes nothing. Generated record storage's
557
+ // explicit presence bit is independent of the value carrier, so a present
558
+ // `undefined` is copied while an absent field is skipped.
559
+ if (fieldPresenceOf(field) === 'unprovable') {
560
+ throw createCppEmitBlockedError('runtime-helper:protocol:spread:next:record(unprovable-presence)', `copies a record source field "${field.key}" whose presence is unprovable beside "${representationKey(field.value)}"; this ` +
561
+ 'emitter copies a required field or an optional generated field with an independent presence bit');
562
+ }
563
+ const fieldText = `${armMember}${cppRecordFieldName(field.key)}`;
564
+ const readText = fieldText;
565
+ const converted = alignedValueText(ctx, 'emit-allocation.ts:704', field.value, receiver.value, readText);
566
+ if (converted === null) {
567
+ throw createCppEmitBlockedError(`conversion:${representationKey(field.value)}->${representationKey(receiver.value)}`, `copies a record source field "${field.key}" carried as "${representationKey(field.value)}" into a receiver whose value is carried as ` +
568
+ `"${representationKey(receiver.value)}"; no conversion between those is licensed`);
569
+ }
570
+ const write = `${receiverRef}[${cppStringLiteral(field.key)}] = ${converted};`;
571
+ lines.push(field.required ? write : `if (${armMember}${cppRecordFieldPresenceName(field.key)}) { ${write} }`);
572
+ }
573
+ };