@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,602 @@
1
+ import { representationKey } from '../../../representation/model.js';
2
+ import { createCppEmitBlockedError, operandText } from '../emit-context.js';
3
+ import { alignedValueText } from '../emit-narrowing.js';
4
+ import { toStringRefusal, toStringText } from '../emit-tostring.js';
5
+ import { cppConstantLiteral, cppTypeOf } from '../types.js';
6
+ const elementKey = (element) => representationKey(element);
7
+ /** A `number` scalar -- the carrier every index, count and position argument below must have. */
8
+ const isNumber = (operand) => operand.representation.kind === 'scalar' && operand.representation.domain === 'number';
9
+ /**
10
+ * The arity gate, written once. An omitted trailing optional argument never
11
+ * reaches `operation.arguments` at all, so the arities listed here are
12
+ * PHYSICAL arities and each one selects its own runtime overload, which
13
+ * supplies the spec's default at its own definition rather than having one
14
+ * synthesized here.
15
+ */
16
+ const requireArity = (member, clause, arities, args) => {
17
+ if (arities.includes(args.length))
18
+ return;
19
+ throw createCppEmitBlockedError(`runtime-helper:element:${member}`, `"Array.prototype.${member}" is spelled for ${arities.join(' or ')} argument(s) (ECMA-262 ${clause}); this call passes ${args.length}`);
20
+ };
21
+ const requireNumber = (member, ordinal, args) => {
22
+ const argument = args[ordinal];
23
+ if (argument && isNumber(argument))
24
+ return;
25
+ throw createCppEmitBlockedError(`runtime-helper:element:${member}`, `"Array.prototype.${member}" argument ${ordinal} carries "${argument ? representationKey(argument.representation) : 'nothing'}", not a number scalar -- ` +
26
+ 'the specification ToIntegerOrInfinity-coerces it, and coercion of an arbitrary value has no box here');
27
+ };
28
+ const requireElement = (member, ordinal, element, args) => {
29
+ const argument = args[ordinal];
30
+ if (argument && elementKey(argument.representation) === elementKey(element))
31
+ return;
32
+ throw createCppEmitBlockedError(`runtime-helper:element:${member}:${elementKey(element)}`, `"Array.prototype.${member}" argument ${ordinal} carries "${argument ? representationKey(argument.representation) : 'nothing'}", which is not the ` +
33
+ `receiver's own element carrier "${elementKey(element)}"`);
34
+ };
35
+ /** A plain `gea::runtime::array::<member>(receiver, ...args)`, with each argument's carrier already gated by the caller. */
36
+ const call = (ctx, member, receiverText, args) => `gea::runtime::array::${member}(${[receiverText, ...args.map((argument) => operandText(ctx, argument))].join(', ')})`;
37
+ /**
38
+ * The mutating bulk pair, ECMA-262 23.1.3.23 `push` and 23.1.3.37 `unshift`.
39
+ *
40
+ * Both take a rest parameter, so `ir/lower.ts`'s `packRestArguments` has
41
+ * already packed every call argument into one `array-object` before this runs
42
+ * -- a three-argument `a.push(x, y, z)` arrives here as `args.length === 1`.
43
+ * That is what makes the rendering a two-step bulk write rather than a
44
+ * comma-chain of one call per argument: `appendRange`/`prependRange`
45
+ * (gea_runtime.h) already are "insert every slot of one `ArrayObject` into
46
+ * another, in order, holes and all", which for a rest pack is exactly the
47
+ * spec's own loop. The observable end state is identical for a plain array
48
+ * with no exotic `length`/index setters, which is the only receiver an
49
+ * `array-object` carrier ever is. The final `Set(O, "length", len)` and
50
+ * `Return len` are the same `->length()` read `.length` already uses.
51
+ *
52
+ * A comma expression: C++ sequences the bulk write fully before `length()`
53
+ * reads it, so this is one expression whose value is the new length -- exactly
54
+ * the shape `emitCall` renders either as a bare statement or as an assignment.
55
+ */
56
+ /**
57
+ * The one `arrayMethods` entry `emit-arrays.ts`'s counted-loop census also has
58
+ * to recognize, by name, before this table has run at all -- see that file's
59
+ * `pushLookups`. Named here rather than left a bare `'push'` literal in both
60
+ * files so the two cannot silently name two different methods: this is a
61
+ * bulk APPEND specifically (ECMA-262 23.1.3.23), not `unshift`'s bulk prepend,
62
+ * because the loop rewrite it feeds only ever turns a counted push into a
63
+ * range append -- a counted `unshift` would have to run its bound in reverse,
64
+ * which nothing here builds.
65
+ */
66
+ export const arrayBulkAppendMethodName = 'push';
67
+ const bulkInsertText = (member, clause, spelling) => (ctx, receiverText, element, args) => {
68
+ const packed = args[0];
69
+ if (args.length !== 1 || !packed) {
70
+ throw createCppEmitBlockedError(`runtime-helper:element:${member}:${elementKey(element)}`, `"Array.prototype.${member}" (ECMA-262 ${clause}) expects its rest argument already packed into one array-object by ir/lower.ts's ` +
71
+ `packRestArguments; this call arrives with ${args.length} operand(s)`);
72
+ }
73
+ if (packed.representation.kind !== 'array-object') {
74
+ throw createCppEmitBlockedError(`runtime-helper:element:${member}:${elementKey(element)}`, `"Array.prototype.${member}"'s packed rest argument carries a "${packed.representation.kind}" carrier, not "array-object"`);
75
+ }
76
+ // The pack the lowering built exists only to be drained back out here, and
77
+ // where the census withheld it (`EmitContext.pendingPacks`) its elements are
78
+ // written straight into the receiver instead -- one allocation and one
79
+ // `ArrayObject` per call saved, which in a loop is one per iteration. The
80
+ // runtime's own variadic form also names the receiver once, which the
81
+ // comma-expression below cannot: a receiver expression that is itself a
82
+ // fresh object would otherwise be built twice, and the length read would
83
+ // report the wrong one.
84
+ const withheld = ctx.pendingPacks.get(packed.value);
85
+ const packedElement = packed.representation.element;
86
+ if (elementKey(packedElement) === elementKey(element)) {
87
+ if (withheld)
88
+ return `gea::runtime::array::${member}(${[receiverText, ...withheld.elements].join(', ')})`;
89
+ return `(${receiverText}->${spelling}(*${operandText(ctx, packed)}, 0), ${receiverText}->length())`;
90
+ }
91
+ // Two element carriers that disagree are usually a real miscompile risk --
92
+ // the header's own rule, and the reason this stayed a bare refusal. But
93
+ // one disagreement is a spelling of the SAME shape: hono's pattern router
94
+ // pushes `[pattern, method, handlerTuple]` into a `Route<T>[]` whose
95
+ // innermost tuple interned under a second shape id with a byte-identical
96
+ // field list, and `recastedRecordText`'s own recast is exactly what
97
+ // reconciles that pair everywhere else. It is applied per element rather
98
+ // than to the pack, because a bulk `appendRange` copies one `ArrayObject`
99
+ // instantiation into another and there is no such copy to make -- only a
100
+ // withheld pack, whose elements are still separate expressions, has
101
+ // anything to convert. `convertedValueText` is the one authority for
102
+ // whether a pair converts at all; a pair it refuses still refuses here.
103
+ const converted = withheld?.elements.map((text) => alignedValueText(ctx, 'prototype/emit-prototype-array.ts:174', packedElement, element, text)) ?? null;
104
+ if (converted !== null && converted.every((text) => text !== null)) {
105
+ return `gea::runtime::array::${member}(${[receiverText, ...converted].join(', ')})`;
106
+ }
107
+ throw createCppEmitBlockedError(`runtime-helper:element:${member}:${elementKey(element)}`, `"Array.prototype.${member}"'s packed rest argument carries element "${elementKey(packedElement)}", which does not match the ` +
108
+ `receiver's own element "${elementKey(element)}"`);
109
+ };
110
+ /**
111
+ * The callback-taking family: `map`, `filter`, `forEach`, `find`, `findIndex`,
112
+ * `some`, `every`, `flatMap`.
113
+ *
114
+ * One argument only. The spec's second parameter is `thisArg`, which binds
115
+ * `this` inside the callback -- and a `CallableObject` carries its own
116
+ * environment rather than a rebindable receiver, so there is nothing here to
117
+ * bind it to. Refused by name rather than silently ignored: dropping it would
118
+ * run the callback with the wrong `this`, which is a wrong answer and not a
119
+ * missing feature.
120
+ *
121
+ * The result's element type is the callback's own return type, deduced in the
122
+ * runtime template rather than spelled here: the emitter would have to
123
+ * re-derive it from the plan's carrier for the call's result, which is a
124
+ * second authority for a fact the C++ type system already holds exactly.
125
+ */
126
+ const callbackMethodText = (member, clause) => (ctx, receiverText, _element, args) => {
127
+ const callback = args[0];
128
+ if (args.length !== 1 || !callback) {
129
+ throw createCppEmitBlockedError(`runtime-helper:element:${member}:${elementKey(_element)}`, `"Array.prototype.${member}" is spelled for its one callback argument (ECMA-262 ${clause}); this call passes ${args.length}` +
130
+ (args.length > 1 ? `, and ECMA-262 ${clause}'s second parameter is a thisArg a CallableObject has nothing to bind` : ''));
131
+ }
132
+ return `gea::runtime::array::${member}(${receiverText}, ${elementAdaptedCallbackText(ctx, member, clause, _element, callback)})`;
133
+ };
134
+ /**
135
+ * The callback, as the runtime's per-element call can invoke it.
136
+ *
137
+ * `gea::runtime::array`'s `mapCall` (and its siblings) hand the callable the
138
+ * element AS the element's own C++ type, at whichever arity the callable takes.
139
+ * That is exact while the callback's first parameter IS the element carrier. A
140
+ * callback declared WIDER than the element -- `nums.map(label)` with `label:
141
+ * (x: number | string) => string`, or hono's `matchResult[0].map(([[, route]])
142
+ * => route)`, whose parameter is the union of the two arms' tuple elements
143
+ * while each arm's array holds exactly one of them -- is a call whose argument
144
+ * needs the conversion any direct call renders at its call site, except that
145
+ * this call site is inside the runtime template. C++ does not perform it:
146
+ * `gea::TaggedUnion` has no converting constructor (arm injection is
147
+ * `ofArm<i>`, spelled by the emitter), so `is_invocable` fails at every arity
148
+ * and the template falls through to its last resort and does not compile --
149
+ * an error at the C++ step, after certification, about a program this backend
150
+ * had already accepted.
151
+ *
152
+ * So the conversion is rendered here, at the one boundary the emitter owns: a
153
+ * lambda of EXACTLY the callback's own arity that converts the element into
154
+ * the first parameter's carrier through `alignedValueText` -- the one authority
155
+ * on which pairs convert -- and forwards the index and the array untouched.
156
+ * Exactly the arity, never a variadic forwarder: `mapCall` picks its call by
157
+ * `is_invocable`, and a lambda that accepted anything would be picked at the
158
+ * three-argument arity and then fail to call a one-parameter callback inside
159
+ * its own body. The callable is init-captured by value so an rvalue callback
160
+ * expression is evaluated once, not once per element.
161
+ *
162
+ * Untouched when the first parameter already carries the element -- the text
163
+ * is exactly what it was, so nothing that emitted before moves -- and untouched
164
+ * for a callable that is not a `function-value-dispatch` or that declares a
165
+ * receiver, which the runtime passes `Undefined{}` for ahead of the element.
166
+ * Refused BY NAME when the pair has no conversion, when the index or array
167
+ * parameter is not the one the runtime hands over, or when the callback is
168
+ * variadic: a refusal at emission is the fail-closed answer the C++ error was
169
+ * standing in for.
170
+ */
171
+ const elementAdaptedCallbackText = (ctx, member, clause, element, callback) => {
172
+ const text = operandText(ctx, callback);
173
+ const carrier = callback.representation;
174
+ if (carrier.kind !== 'function-value-dispatch' || carrier.abi.receiver !== null)
175
+ return text;
176
+ const [first, index, array, ...beyond] = carrier.abi.parameters;
177
+ if (!first || representationKey(first.value) === representationKey(element))
178
+ return text;
179
+ const refuse = (detail) => {
180
+ throw createCppEmitBlockedError(`runtime-helper:callback:${member}:${elementKey(element)}`, `"Array.prototype.${member}" (ECMA-262 ${clause}) hands its callback the receiver's element "${elementKey(element)}" and the callback's ` +
181
+ `first parameter carries "${representationKey(first.value)}"; ${detail}`);
182
+ };
183
+ if (carrier.abi.restFrom !== null || beyond.length > 0)
184
+ refuse('a callback with more parameters than element, index and array has no runtime call shape');
185
+ const converted = alignedValueText(ctx, 'prototype/emit-prototype-array.ts:elementAdaptedCallbackText', element, first.value, '__gea_element');
186
+ if (converted === null)
187
+ refuse('no installed conversion reconciles them');
188
+ if (index && representationKey(index.value) !== 'scalar(number)')
189
+ refuse(`its index parameter carries "${representationKey(index.value)}", and the runtime passes a number`);
190
+ if (array && (array.value.kind !== 'array-object' || representationKey(array.value.element) !== representationKey(element)))
191
+ refuse(`its array parameter carries "${representationKey(array.value)}", and the runtime passes the receiver itself`);
192
+ const formals = [`const ${cppTypeOf(element)}& __gea_element`];
193
+ const actuals = [converted];
194
+ if (index) {
195
+ formals.push('double __gea_index');
196
+ actuals.push('__gea_index');
197
+ }
198
+ if (array) {
199
+ formals.push(`const ${cppTypeOf(array.value)}& __gea_array`);
200
+ actuals.push('__gea_array');
201
+ }
202
+ return `[__gea_fn = ${text}](${formals.join(', ')}) { return __gea_fn(${actuals.join(', ')}); }`;
203
+ };
204
+ /**
205
+ * `find` and `at` -- and, with them, `pop` and `shift`: the members whose
206
+ * ECMA-262 result is `undefined` when there is nothing there (23.1.3.9 step 6,
207
+ * 23.1.3.1 step 6, 23.1.3.22 step 3.a, 23.1.3.26 step 3.a).
208
+ *
209
+ * `undefined` is a real value, not an absence to shrug at, so the runtime
210
+ * answers `gea::Optional<E>` and this reconciles that actual result with the
211
+ * plan's carrier through the ordinary conversion table. A dynamic result is
212
+ * therefore boxed per state, including an Undefined box for the absent arm;
213
+ * a concrete carrier that cannot preserve absence is refused.
214
+ *
215
+ * A call with NO result at all is a different thing and passes: `arr.pop();`
216
+ * in statement position discards the value, and `emitCall` renders it as a
217
+ * bare expression statement. The mutation is the point there, the `Optional`
218
+ * is constructed and dropped, and there is no carrier to disagree with.
219
+ */
220
+ const optionalElementResultText = (ctx, member, clause, element, result, text) => {
221
+ if (result === null)
222
+ return text;
223
+ const carrier = result.representation;
224
+ const produced = { kind: 'optional', payload: element, absence: 'undefined' };
225
+ const converted = alignedValueText(ctx, 'prototype/emit-prototype-array.ts:242', produced, carrier, text);
226
+ if (converted !== null)
227
+ return converted;
228
+ throw createCppEmitBlockedError(`conversion:${representationKey(produced)}->${representationKey(carrier)}`, `"Array.prototype.${member}" answers \`undefined\` when there is no such element (ECMA-262 ${clause}), so this backend renders it as an optional ` +
229
+ `"${elementKey(element)}"; this call's result carries "${representationKey(carrier)}", and no installed conversion preserves both states`);
230
+ };
231
+ /**
232
+ * ECMA-262 23.1.3.31 splice(start, deleteCount, ...items)` -- the member that
233
+ * both mutates in place AND returns the removed elements, which is what makes
234
+ * it the one no "returns the receiver" shortcut can fake.
235
+ *
236
+ * Three physical arities, because `lib.es5.d.ts` declares two overloads and
237
+ * the rest pack only exists in one of them: `splice(start)` (the spec's
238
+ * "deleteCount absent" branch, everything from `start` onward),
239
+ * `splice(start, deleteCount)`, and `splice(start, deleteCount, ...items)`
240
+ * where the third operand is the packed rest.
241
+ */
242
+ const spliceText = (ctx, receiverText, element, args) => {
243
+ requireArity('splice', '23.1.3.30', [1, 2, 3], args);
244
+ requireNumber('splice', 0, args);
245
+ if (args.length >= 2)
246
+ requireNumber('splice', 1, args);
247
+ if (args.length === 3) {
248
+ const packed = args[2];
249
+ if (!packed || packed.representation.kind !== 'array-object' || elementKey(packed.representation.element) !== elementKey(element)) {
250
+ throw createCppEmitBlockedError(`runtime-helper:element:splice:${elementKey(element)}`, `"Array.prototype.splice"'s packed rest argument carries "${packed ? representationKey(packed.representation) : 'nothing'}", not an array-object of ` +
251
+ `the receiver's own element "${elementKey(element)}"`);
252
+ }
253
+ }
254
+ return call(ctx, 'splice', receiverText, args);
255
+ };
256
+ /**
257
+ * ECMA-262 23.1.3.30 sort(comparefn)`.
258
+ *
259
+ * Two renderings, because the two forms are two different operations rather
260
+ * than one with a default. With a comparator, the ordering is the program's.
261
+ * WITHOUT one, step 3's default compares `ToString(x)` against `ToString(y)`
262
+ * by code unit -- a genuinely STRING comparison, which is why `[10, 9].sort()`
263
+ * is `[10, 9]`. That default needs a ToString for the element carrier, and
264
+ * this runtime has one only for a string or a scalar; every other element is
265
+ * refused by name here rather than left to fail as a C++ overload error, which
266
+ * would name a template and not the member.
267
+ */
268
+ const sortText = (ctx, receiverText, element, args) => {
269
+ requireArity('sort', '23.1.3.30', [0, 1], args);
270
+ if (args.length === 1)
271
+ return call(ctx, 'sort', receiverText, args);
272
+ if (element.kind !== 'string' && element.kind !== 'scalar') {
273
+ throw createCppEmitBlockedError(`runtime-helper:element:sort:${elementKey(element)}`, `"Array.prototype.sort" with no comparator uses ECMA-262 23.1.3.30 step 3's default, which compares ToString(x) against ToString(y); this ` +
274
+ `receiver's element carries "${elementKey(element)}", and this runtime states a ToString only for a string or a scalar -- pass a comparator, ` +
275
+ 'or the ToString of that carrier is the gap to close');
276
+ }
277
+ return `gea::runtime::array::sortDefault(${receiverText})`;
278
+ };
279
+ /**
280
+ * ECMA-262 23.1.3.18 join(separator)`. The same ToString requirement `sort`'s
281
+ * default has, for the same reason: step 3.d ToStrings every element that is
282
+ * not a hole, `undefined` or `null`.
283
+ *
284
+ * Unlike `sort`, this one does not refuse a non-string/scalar element outright:
285
+ * `gea::runtime::array::join` (the fast path below) calls a single free
286
+ * `gea::host::detail::toString` overload set, which only covers string and
287
+ * scalar -- but the COMPILER's own `toStringText` (emit-tostring.ts) already
288
+ * converts far more (`optional`, `tagged-union` of convertible arms, ...), for
289
+ * the identical ECMA-262 ToString this member needs. The gap is that an
290
+ * `optional`'s ToString needs to know which absence (`null` vs `undefined`) it
291
+ * holds -- a STATIC fact `toStringText` reads off the carrier -- and a runtime
292
+ * template instantiated once per element TYPE has no per-call-site way to
293
+ * carry that. So an element carrier the fast path cannot take is rendered as
294
+ * an inline loop instead, applying `toStringText`'s already-composed
295
+ * conversion text to each element read out of the SAME `ArrayObject` accessors
296
+ * (`size`/`present`/`at`) the fast path itself uses -- one ToString, reached
297
+ * two ways, rather than a second one invented for the loop.
298
+ *
299
+ * `[typeof d.value, d.writable, d.enumerable, d.configurable].join('/')`
300
+ * (`test/runtime/static-intrinsic-reflection.runtime.js`'s own `describe`) is
301
+ * exactly this: TypeScript's ambient `PropertyDescriptor.writable` etc. are
302
+ * `boolean | undefined`, so the array literal's element unifies to
303
+ * `optional(tagged-union(scalar(boolean), string), undefined)`.
304
+ */
305
+ const joinText = (ctx, receiverText, element, args) => {
306
+ requireArity('join', '23.1.3.18', [0, 1], args);
307
+ const separator = args[0];
308
+ if (separator && separator.representation.kind !== 'string') {
309
+ throw createCppEmitBlockedError(`runtime-helper:element:join:${elementKey(element)}`, `"Array.prototype.join"'s separator carries a "${representationKey(separator.representation)}" carrier, not a string`);
310
+ }
311
+ if (element.kind === 'string' || element.kind === 'scalar')
312
+ return call(ctx, 'join', receiverText, args);
313
+ // `nullishJoinsEmpty`: step 3.d's own rule, not the general ToString every
314
+ // other caller of this table needs -- see `toStringText`'s own header.
315
+ const converted = toStringText('__gea_join_src->at(__gea_join_i)', element, ctx.classes, ctx.deriver, false, true);
316
+ if (converted === null) {
317
+ throw createCppEmitBlockedError(`runtime-helper:element:join:${elementKey(element)}`, `"Array.prototype.join" ToStrings every element (ECMA-262 23.1.3.18 step 3.d); this receiver's element carries "${elementKey(element)}", and ` +
318
+ `neither this runtime's fast join path nor its inline ToString fallback converts it: ${toStringRefusal(element, ctx.classes, ctx.deriver)}`);
319
+ }
320
+ const separatorText = separator ? operandText(ctx, separator) : cppConstantLiteral(',', 'string', { kind: 'string' });
321
+ return ('([&]() -> std::string { ' +
322
+ `const auto& __gea_join_src = ${receiverText}; std::string __gea_join_result; ` +
323
+ 'for (std::size_t __gea_join_i = 0; __gea_join_i < __gea_join_src->size(); ++__gea_join_i) { ' +
324
+ `if (__gea_join_i != 0) __gea_join_result += ${separatorText}; ` +
325
+ `if (__gea_join_src->present(__gea_join_i)) __gea_join_result += ${converted}; ` +
326
+ '} return __gea_join_result; })()');
327
+ };
328
+ /**
329
+ * ECMA-262 23.1.3.2 concat(...items)`.
330
+ *
331
+ * The rest pack's element decides which half of step 5's IsConcatSpreadable
332
+ * test applies, and it is a compile-time fact: a packed element that is itself
333
+ * an `array-object` of the receiver's element SPREADS, one that IS the
334
+ * receiver's element is appended whole. A packed element that is neither --
335
+ * the `(T | ConcatArray<T>)[]` overload's own union, reached when a single
336
+ * call mixes the two -- is refused by name, because deciding between the two
337
+ * would mean reading a runtime tag and the two arms produce different lengths.
338
+ */
339
+ const concatText = (ctx, receiverText, element, args) => {
340
+ const packed = args[0];
341
+ if (args.length !== 1 || !packed) {
342
+ throw createCppEmitBlockedError(`runtime-helper:element:concat:${elementKey(element)}`, '"Array.prototype.concat" expects its rest argument already packed into one array-object by ir/lower.ts\'s packRestArguments; ' +
343
+ `this call arrives with ${args.length} operand(s)`);
344
+ }
345
+ const carrier = packed.representation;
346
+ const spreads = carrier.kind === 'array-object' &&
347
+ carrier.element.kind === 'array-object' &&
348
+ elementKey(carrier.element.element) === elementKey(element);
349
+ const appends = carrier.kind === 'array-object' && elementKey(carrier.element) === elementKey(element);
350
+ if (!spreads && !appends) {
351
+ throw createCppEmitBlockedError(`runtime-helper:element:concat:${elementKey(element)}`, `"Array.prototype.concat"'s packed rest argument carries "${representationKey(carrier)}"; this backend renders it only when every item is the ` +
352
+ `receiver's own element "${elementKey(element)}" (appended whole) or an array-object of it (spread) -- a mixed ` +
353
+ '`(T | ConcatArray<T>)[]` pack would need a runtime tag test, and its two arms produce different lengths');
354
+ }
355
+ return call(ctx, 'concat', receiverText, args);
356
+ };
357
+ /**
358
+ * ECMA-262 23.1.3.13 flat(depth)`, at depth 1 only.
359
+ *
360
+ * A deeper flatten changes the RESULT'S ELEMENT TYPE by an amount that depends
361
+ * on the depth argument's VALUE, and a value is not a type: there is no single
362
+ * C++ result carrier for `flat(n)`. `flat()` and the literal `flat(1)` are the
363
+ * one depth this backend can spell, and every other depth is refused by name
364
+ * rather than silently flattened once.
365
+ */
366
+ const flatText = (ctx, receiverText, element, args) => {
367
+ requireArity('flat', '23.1.3.14', [0, 1], args);
368
+ const depth = args[0];
369
+ if (depth) {
370
+ const constant = ctx.constantTexts.get(depth.value);
371
+ if (constant !== '1') {
372
+ throw createCppEmitBlockedError(`runtime-helper:element:flat:${elementKey(element)}`, `"Array.prototype.flat" is rendered at depth 1 only (its own default); this call's depth is ` +
373
+ `${constant === undefined ? 'not a compile-time constant' : `the constant ${constant}`}, and a depth other than 1 changes the result's element ` +
374
+ "type by an amount that depends on the argument's value, which no single C++ carrier can spell");
375
+ }
376
+ }
377
+ // The ownership check is not pedantry: `gea::runtime::array::flat` takes the
378
+ // inner array as a `shared_ptr<ArrayObject<Inner>>`, which is what an
379
+ // `array-object` carrier spells only at `shared-refcount`. Any other
380
+ // ownership would miss the template and surface as a C++ overload error
381
+ // naming a template instead of this member.
382
+ if (element.kind === 'array-object' && element.ownership === 'shared-refcount') {
383
+ return `gea::runtime::array::flat(${receiverText})`;
384
+ }
385
+ // A per-slot `T | T[]` union -- `(string | string[])[]`'s own tagged union
386
+ // when the checker cannot prove every element the same arm -- is the OTHER
387
+ // shape `flat()` actually has to handle: ECMA-262's own FlattenIntoArray
388
+ // tests `IsArray` per element at runtime regardless, so a two-arm union of
389
+ // exactly [leaf, array-object(leaf)] is not a harder case, just a
390
+ // differently-shaped one. `gea::runtime::array::flat`'s sibling overload
391
+ // (gea_runtime.h) renders it; anything else -- three arms, the array arm
392
+ // not `shared-refcount`, the two arms not agreeing on the leaf type --
393
+ // still refuses below rather than guessing.
394
+ if (element.kind === 'tagged-union' &&
395
+ element.arms.length === 2 &&
396
+ element.arms[1]?.value.kind === 'array-object' &&
397
+ element.arms[1].value.ownership === 'shared-refcount' &&
398
+ elementKey(element.arms[1].value.element) === elementKey(element.arms[0].value)) {
399
+ return `gea::runtime::array::flat(${receiverText})`;
400
+ }
401
+ throw createCppEmitBlockedError(`runtime-helper:element:flat:${elementKey(element)}`, `"Array.prototype.flat" flattens one level of nested arrays; this receiver's element carries "${elementKey(element)}", which is neither a ` +
402
+ 'shared-refcount array-object nor a two-arm [leaf, array-object(leaf)] union, so there is nothing this backend can flatten');
403
+ };
404
+ /** The ranged, index-argument members: every argument is a position and the runtime overload for this arity supplies the spec's own default for the rest. */
405
+ const rangedMethodText = (member, clause, arities, elementOrdinal) => (ctx, receiverText, element, args) => {
406
+ requireArity(member, clause, arities, args);
407
+ for (let ordinal = 0; ordinal < args.length; ordinal += 1) {
408
+ if (ordinal === elementOrdinal)
409
+ requireElement(member, ordinal, element, args);
410
+ else
411
+ requireNumber(member, ordinal, args);
412
+ }
413
+ return call(ctx, member, receiverText, args);
414
+ };
415
+ /** The reducers: `reduce(cb)` and `reduce(cb, initialValue)` are two physical arities and two runtime overloads; the no-initial form's empty-array TypeError lives in the runtime. */
416
+ const reduceText = (member, clause) => (ctx, receiverText, _element, args) => {
417
+ requireArity(member, clause, [1, 2], args);
418
+ return call(ctx, member, receiverText, args);
419
+ };
420
+ /** `pop`/`shift`: no arguments at all, and an optional element for a result -- the receiver is the whole call. */
421
+ const optionalNullaryText = (member, clause) => (ctx, receiverText, element, args, result) => {
422
+ requireArity(member, clause, [0], args);
423
+ return optionalElementResultText(ctx, member, clause, element, result, `gea::runtime::array::${member}(${receiverText})`);
424
+ };
425
+ /**
426
+ * `filter` under a TYPE-GUARD predicate, whose result element is NARROWER than
427
+ * the receiver's.
428
+ *
429
+ * `Array.prototype.filter` has two declarations in `lib.es5.d.ts`: the ordinary
430
+ * one keeps the element, and `filter<S extends T>(predicate: (v: T) => v is S):
431
+ * S[]` states that every value the guard kept is an `S`. hono's
432
+ * `utils/html.ts` selects the second -- `res.filter<string>(Boolean as any)`
433
+ * over a `(string | undefined)[]` -- and the checker publishes the call's
434
+ * result as `string[]`.
435
+ *
436
+ * The runtime template cannot answer that: its `kept` array is built from the
437
+ * receiver's own `E`, so it hands back `(string | undefined)[]` and the store
438
+ * into the narrowed cell has no conversion -- and none may be installed, for
439
+ * the reason `conversions.ts` states beside the refusal: a conversion between
440
+ * two `array-object` carriers with different elements can only ALLOCATE, which
441
+ * silently detaches a mutable array from every other name for it.
442
+ *
443
+ * `filter` is the one method where that objection does not apply, because the
444
+ * array in question is one `filter` itself MINTS -- nothing else can hold it
445
+ * yet, so choosing its element is a choice this call owns rather than a recast
446
+ * of somebody's array. So the narrowing happens as each kept element is
447
+ * appended, through the one conversion authority, and the runtime overload
448
+ * takes the projection that performs it.
449
+ */
450
+ const filterText = (ctx, receiverText, element, args, result) => {
451
+ const plain = callbackMethodText('filter', '23.1.3.8');
452
+ const kept = result?.representation;
453
+ if (!kept || kept.kind !== 'array-object' || representationKey(kept.element) === representationKey(element)) {
454
+ return plain(ctx, receiverText, element, args, result);
455
+ }
456
+ const callback = args[0];
457
+ if (args.length !== 1 || !callback)
458
+ return plain(ctx, receiverText, element, args, result);
459
+ const projected = alignedValueText(ctx, 'prototype/emit-prototype-array.ts:filterText', element, kept.element, '__gea_kept');
460
+ if (projected === null) {
461
+ throw createCppEmitBlockedError(`runtime-helper:element:filter:${elementKey(element)}`, `"Array.prototype.filter" (ECMA-262 23.1.3.8) publishes "${representationKey(kept.element)}" elements over a receiver ` +
462
+ `carrying "${elementKey(element)}", and no installed conversion narrows one into the other`);
463
+ }
464
+ const keptType = cppTypeOf(kept.element);
465
+ const predicate = elementAdaptedCallbackText(ctx, 'filter', '23.1.3.8', element, callback);
466
+ return (`gea::runtime::array::filterNarrowed<${keptType}>(${receiverText}, ${predicate}, ` +
467
+ `+[](const ${cppTypeOf(element)}& __gea_kept) -> ${keptType} { return ${projected}; })`);
468
+ };
469
+ const findText = (ctx, receiverText, element, args, result) => {
470
+ const text = callbackMethodText('find', '23.1.3.9')(ctx, receiverText, element, args, result);
471
+ return optionalElementResultText(ctx, 'find', '23.1.3.9', element, result, text);
472
+ };
473
+ const atText = (ctx, receiverText, element, args, result) => {
474
+ requireArity('at', '23.1.3.1', [1], args);
475
+ requireNumber('at', 0, args);
476
+ return optionalElementResultText(ctx, 'at', '23.1.3.1', element, result, call(ctx, 'at', receiverText, args));
477
+ };
478
+ /** `emit-carrier-members.ts`'s `arrayAccessText` defers exactly these keys off an `array-object` receiver -- one authority for "is this method implemented". */
479
+ export const arrayMethods = new Map([
480
+ [arrayBulkAppendMethodName, bulkInsertText(arrayBulkAppendMethodName, '23.1.3.23', 'appendRange')],
481
+ ['unshift', bulkInsertText('unshift', '23.1.3.37', 'prependRange')],
482
+ ['map', callbackMethodText('map', '23.1.3.21')],
483
+ ['filter', filterText],
484
+ ['forEach', callbackMethodText('forEach', '23.1.3.15')],
485
+ ['findIndex', callbackMethodText('findIndex', '23.1.3.10')],
486
+ ['some', callbackMethodText('some', '23.1.3.29')],
487
+ ['every', callbackMethodText('every', '23.1.3.6')],
488
+ ['flatMap', callbackMethodText('flatMap', '23.1.3.14')],
489
+ ['find', findText],
490
+ ['at', atText],
491
+ ['pop', optionalNullaryText('pop', '23.1.3.22')],
492
+ ['shift', optionalNullaryText('shift', '23.1.3.27')],
493
+ ['reduce', reduceText('reduce', '23.1.3.24')],
494
+ ['reduceRight', reduceText('reduceRight', '23.1.3.25')],
495
+ ['splice', spliceText],
496
+ ['sort', sortText],
497
+ ['join', joinText],
498
+ // ECMA-262 23.1.3.36 `toString()`: `Let func be ? Get(array, "join"). If
499
+ // IsCallable(func) is false, set func to %Object.prototype.toString%.
500
+ // Return ? Call(func, array).` Every array this backend carries has a real
501
+ // `join` (it is implemented above, unconditionally), so step 3's fallback
502
+ // never applies and this is exactly `join()` with no arguments -- the same
503
+ // fact `test/runtime/static-intrinsic-reflection.runtime.js`'s own
504
+ // `typeof Array.prototype.join` line depends on `join` existing for.
505
+ //
506
+ // Borrowed Object.prototype.toString calls are authenticated ObjectTag
507
+ // computations and never enter this Array-specific algorithm.
508
+ ['toString', (ctx, receiverText, element) => joinText(ctx, receiverText, element, [], null)],
509
+ ['concat', concatText],
510
+ ['flat', flatText],
511
+ ['slice', rangedMethodText('slice', '23.1.3.28', [0, 1, 2], null)],
512
+ ['indexOf', rangedMethodText('indexOf', '23.1.3.17', [1, 2], 0)],
513
+ ['lastIndexOf', rangedMethodText('lastIndexOf', '23.1.3.20', [1, 2], 0)],
514
+ ['includes', rangedMethodText('includes', '23.1.3.16', [1, 2], 0)],
515
+ ['fill', rangedMethodText('fill', '23.1.3.7', [1, 2, 3], 0)],
516
+ ['reverse', rangedMethodText('reverse', '23.1.3.26', [0], null)]
517
+ ]);
518
+ export const arrayPrototypeMethods = new Set(arrayMethods.keys());
519
+ /**
520
+ * Members this backend states a REASON for not implementing, rather than
521
+ * letting them fall into the generic "here is the list of what is implemented"
522
+ * refusal. "Not built yet" and "cannot be built without X" are different
523
+ * answers, and only the second tells you what to build.
524
+ */
525
+ /**
526
+ * Names an Array INHERITS -- from `Array.prototype` or, past it,
527
+ * `Object.prototype` -- that this backend renders nothing for.
528
+ *
529
+ * Kept apart from `arrayMemberRefusals` above, which is about members
530
+ * `Array.prototype` itself declares and this backend has simply not built.
531
+ * These are the reason `arrayAccessText` may not treat "not an index, not
532
+ * `length`, not an extension field, not a method" as "an ordinary own
533
+ * property, ask the expando sidecar": the sidecar answers OWN properties, and
534
+ * for every name here the language answers from the PROTOTYPE CHAIN instead.
535
+ * Handing one to the sidecar would find nothing and publish `undefined` --
536
+ * turning a compile-time refusal into a silently wrong answer, which is the
537
+ * one trade this backend never makes.
538
+ */
539
+ export const arrayInheritedMemberRefusals = new Set([
540
+ 'constructor',
541
+ 'hasOwnProperty',
542
+ 'isPrototypeOf',
543
+ 'propertyIsEnumerable',
544
+ 'valueOf',
545
+ '__proto__',
546
+ '__defineGetter__',
547
+ '__defineSetter__',
548
+ '__lookupGetter__',
549
+ '__lookupSetter__'
550
+ ]);
551
+ export const arrayMemberRefusals = new Map([
552
+ [
553
+ 'keys',
554
+ 'ECMA-262 23.1.3.19 keys() returns an ITERATOR object, which is a first-class value this backend does not mint -- emit-iterator.ts lowers only the ' +
555
+ 'fused for-of cursor, never a standalone iterator'
556
+ ],
557
+ ['values', 'ECMA-262 23.1.3.38 values() returns an ITERATOR object; see keys()'],
558
+ ['entries', 'ECMA-262 23.1.3.5 entries() returns an ITERATOR of [index, value] pairs; see keys()'],
559
+ [
560
+ 'findLast',
561
+ 'ECMA-262 23.1.3.11 findLast(predicate) is `find` walked from the end and is simply unbuilt here, not blocked -- the same optional-element result ' +
562
+ 'carrier `find` uses would carry it'
563
+ ],
564
+ [
565
+ 'findLastIndex',
566
+ 'ECMA-262 23.1.3.12 findLastIndex(predicate) is `findIndex` walked from the end and is simply unbuilt here, not blocked'
567
+ ],
568
+ [
569
+ 'copyWithin',
570
+ "ECMA-262 23.1.3.4 copyWithin(target, start, end) is unbuilt here, not blocked -- it is `fill`'s ranged shape over a self-copy"
571
+ ],
572
+ [
573
+ 'toSorted',
574
+ 'ECMA-262 23.1.3.34 toSorted / toReversed / toSpliced / with are the ES2023 non-mutating twins; each needs the same copy-then-mutate shape ' +
575
+ '`slice` already has and is unbuilt here, not blocked'
576
+ ],
577
+ [
578
+ 'toLocaleString',
579
+ "ECMA-262 23.1.3.32 toLocaleString calls each element's own toLocaleString, which is locale-sensitive; there is no locale database here"
580
+ ]
581
+ ]);
582
+ /**
583
+ * The Array.prototype members that MUTATE their receiver (ECMA-262 23.1.3).
584
+ *
585
+ * Read by `emitCall` to tick a reactive array's revision cell after a call that
586
+ * changed its contents. It is a property of the language, not of this
587
+ * backend's rendering of it -- `slice` and `concat` build a new array and
588
+ * change nothing, `splice` and `sort` change the receiver in place -- so it is
589
+ * stated once here beside the renderings rather than re-derived from what each
590
+ * one happens to emit.
591
+ */
592
+ export const mutatingArrayMembers = new Set([
593
+ 'push',
594
+ 'pop',
595
+ 'shift',
596
+ 'unshift',
597
+ 'splice',
598
+ 'sort',
599
+ 'reverse',
600
+ 'fill',
601
+ 'copyWithin'
602
+ ]);