@geastack/compiler 1.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (966) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +149 -0
  3. package/dist/cli-analyze.d.ts +1 -0
  4. package/dist/cli-analyze.js +61 -0
  5. package/dist/cli-coverage.d.ts +1 -0
  6. package/dist/cli-coverage.js +329 -0
  7. package/dist/cli-emit.d.ts +10 -0
  8. package/dist/cli-emit.js +398 -0
  9. package/dist/cli-module-graph.d.ts +18 -0
  10. package/dist/cli-module-graph.js +123 -0
  11. package/dist/cli-package-source.d.ts +5 -0
  12. package/dist/cli-package-source.js +116 -0
  13. package/dist/cli-project.d.ts +2 -0
  14. package/dist/cli-project.js +60 -0
  15. package/dist/cli.d.ts +2 -0
  16. package/dist/cli.js +199 -0
  17. package/dist/compiler.d.ts +228 -0
  18. package/dist/compiler.js +1029 -0
  19. package/dist/conversion/algebra.d.ts +218 -0
  20. package/dist/conversion/algebra.js +155 -0
  21. package/dist/conversion/build.d.ts +67 -0
  22. package/dist/conversion/build.js +1378 -0
  23. package/dist/conversion/derive.d.ts +37 -0
  24. package/dist/conversion/derive.js +260 -0
  25. package/dist/conversion/graph-validation.d.ts +8 -0
  26. package/dist/conversion/graph-validation.js +97 -0
  27. package/dist/conversion/native-callable-adapter.d.ts +13 -0
  28. package/dist/conversion/native-callable-adapter.js +53 -0
  29. package/dist/conversion/native-class-reference.d.ts +12 -0
  30. package/dist/conversion/native-class-reference.js +39 -0
  31. package/dist/conversion/native-payload-transport.d.ts +25 -0
  32. package/dist/conversion/native-payload-transport.js +33 -0
  33. package/dist/conversion/native-selection.d.ts +49 -0
  34. package/dist/conversion/native-selection.js +135 -0
  35. package/dist/conversion/native-sum.d.ts +42 -0
  36. package/dist/conversion/native-sum.js +115 -0
  37. package/dist/conversion/nodes.d.ts +55 -0
  38. package/dist/conversion/nodes.js +91 -0
  39. package/dist/conversion/operand-view.d.ts +14 -0
  40. package/dist/conversion/operand-view.js +20 -0
  41. package/dist/conversion/record-view.d.ts +157 -0
  42. package/dist/conversion/record-view.js +273 -0
  43. package/dist/conversion/registry.d.ts +217 -0
  44. package/dist/conversion/registry.js +1 -0
  45. package/dist/diagnostics/model.d.ts +76 -0
  46. package/dist/diagnostics/model.js +60 -0
  47. package/dist/diagnostics/sweep.d.ts +31 -0
  48. package/dist/diagnostics/sweep.js +112 -0
  49. package/dist/identity/ids.d.ts +179 -0
  50. package/dist/identity/ids.js +212 -0
  51. package/dist/ir/absent-class-arm.d.ts +48 -0
  52. package/dist/ir/absent-class-arm.js +157 -0
  53. package/dist/ir/borrow-effects.d.ts +23 -0
  54. package/dist/ir/borrow-effects.js +151 -0
  55. package/dist/ir/borrowed-call-arguments.d.ts +40 -0
  56. package/dist/ir/borrowed-call-arguments.js +117 -0
  57. package/dist/ir/build.d.ts +168 -0
  58. package/dist/ir/build.js +459 -0
  59. package/dist/ir/call-dispatch.d.ts +38 -0
  60. package/dist/ir/call-dispatch.js +502 -0
  61. package/dist/ir/call-entry.d.ts +142 -0
  62. package/dist/ir/call-entry.js +386 -0
  63. package/dist/ir/callable-class-flow.d.ts +27 -0
  64. package/dist/ir/callable-class-flow.js +1386 -0
  65. package/dist/ir/callable-field-slots.d.ts +22 -0
  66. package/dist/ir/callable-field-slots.js +166 -0
  67. package/dist/ir/callable-identity-demand.d.ts +52 -0
  68. package/dist/ir/callable-identity-demand.js +460 -0
  69. package/dist/ir/callable-member-candidates.d.ts +9 -0
  70. package/dist/ir/callable-member-candidates.js +39 -0
  71. package/dist/ir/callable-records.d.ts +21 -0
  72. package/dist/ir/callable-records.js +411 -0
  73. package/dist/ir/captures.d.ts +26 -0
  74. package/dist/ir/captures.js +335 -0
  75. package/dist/ir/certificate.d.ts +45 -0
  76. package/dist/ir/certificate.js +47 -0
  77. package/dist/ir/certify/carrier-keys.d.ts +73 -0
  78. package/dist/ir/certify/carrier-keys.js +221 -0
  79. package/dist/ir/certify/function-source.d.ts +4 -0
  80. package/dist/ir/certify/function-source.js +28 -0
  81. package/dist/ir/certify/has-property-key.d.ts +88 -0
  82. package/dist/ir/certify/has-property-key.js +116 -0
  83. package/dist/ir/certify/instanceof-key.d.ts +24 -0
  84. package/dist/ir/certify/instanceof-key.js +35 -0
  85. package/dist/ir/certify/property-access-keys.d.ts +172 -0
  86. package/dist/ir/certify/property-access-keys.js +291 -0
  87. package/dist/ir/certify/property-access.d.ts +3 -0
  88. package/dist/ir/certify/property-access.js +597 -0
  89. package/dist/ir/certify/runtime-helper.d.ts +3 -0
  90. package/dist/ir/certify/runtime-helper.js +326 -0
  91. package/dist/ir/certify/typeof-operand.d.ts +14 -0
  92. package/dist/ir/certify/typeof-operand.js +16 -0
  93. package/dist/ir/certify.d.ts +123 -0
  94. package/dist/ir/certify.js +481 -0
  95. package/dist/ir/class-evaluation.d.ts +26 -0
  96. package/dist/ir/class-evaluation.js +50 -0
  97. package/dist/ir/class-static-fields.d.ts +60 -0
  98. package/dist/ir/class-static-fields.js +108 -0
  99. package/dist/ir/construct-entry.d.ts +26 -0
  100. package/dist/ir/construct-entry.js +117 -0
  101. package/dist/ir/dead-values.d.ts +90 -0
  102. package/dist/ir/dead-values.js +184 -0
  103. package/dist/ir/deferral.d.ts +99 -0
  104. package/dist/ir/deferral.js +409 -0
  105. package/dist/ir/dense-loops.d.ts +230 -0
  106. package/dist/ir/dense-loops.js +697 -0
  107. package/dist/ir/dominance.d.ts +82 -0
  108. package/dist/ir/dominance.js +268 -0
  109. package/dist/ir/emission-representations.d.ts +71 -0
  110. package/dist/ir/emission-representations.js +350 -0
  111. package/dist/ir/facts.d.ts +218 -0
  112. package/dist/ir/facts.js +181 -0
  113. package/dist/ir/fixed-data-definition.d.ts +19 -0
  114. package/dist/ir/fixed-data-definition.js +49 -0
  115. package/dist/ir/generator-split.d.ts +38 -0
  116. package/dist/ir/generator-split.js +329 -0
  117. package/dist/ir/hoist.d.ts +55 -0
  118. package/dist/ir/hoist.js +375 -0
  119. package/dist/ir/instantiation.d.ts +61 -0
  120. package/dist/ir/instantiation.js +137 -0
  121. package/dist/ir/integer-storage.d.ts +170 -0
  122. package/dist/ir/integer-storage.js +822 -0
  123. package/dist/ir/integers.d.ts +161 -0
  124. package/dist/ir/integers.js +539 -0
  125. package/dist/ir/integrity-restrictions.d.ts +50 -0
  126. package/dist/ir/integrity-restrictions.js +118 -0
  127. package/dist/ir/local-iterators.d.ts +4 -0
  128. package/dist/ir/local-iterators.js +27 -0
  129. package/dist/ir/lower-allocation.d.ts +4 -0
  130. package/dist/ir/lower-allocation.js +325 -0
  131. package/dist/ir/lower-completion.d.ts +15 -0
  132. package/dist/ir/lower-completion.js +25 -0
  133. package/dist/ir/lower-destructuring.d.ts +5 -0
  134. package/dist/ir/lower-destructuring.js +693 -0
  135. package/dist/ir/lower-element.d.ts +29 -0
  136. package/dist/ir/lower-element.js +111 -0
  137. package/dist/ir/lower-exceptions.d.ts +47 -0
  138. package/dist/ir/lower-exceptions.js +92 -0
  139. package/dist/ir/lower-flow.d.ts +137 -0
  140. package/dist/ir/lower-flow.js +600 -0
  141. package/dist/ir/lower-graph.d.ts +218 -0
  142. package/dist/ir/lower-graph.js +687 -0
  143. package/dist/ir/lower-invocation.d.ts +4 -0
  144. package/dist/ir/lower-invocation.js +514 -0
  145. package/dist/ir/lower-narrow.d.ts +53 -0
  146. package/dist/ir/lower-narrow.js +320 -0
  147. package/dist/ir/lower-operands.d.ts +272 -0
  148. package/dist/ir/lower-operands.js +461 -0
  149. package/dist/ir/lower-property.d.ts +21 -0
  150. package/dist/ir/lower-property.js +132 -0
  151. package/dist/ir/lower-protocol.d.ts +11 -0
  152. package/dist/ir/lower-protocol.js +118 -0
  153. package/dist/ir/lower-short-circuit.d.ts +41 -0
  154. package/dist/ir/lower-short-circuit.js +63 -0
  155. package/dist/ir/lower.d.ts +82 -0
  156. package/dist/ir/lower.js +1346 -0
  157. package/dist/ir/model.d.ts +1474 -0
  158. package/dist/ir/model.js +6 -0
  159. package/dist/ir/native-absent-property.d.ts +3 -0
  160. package/dist/ir/native-absent-property.js +13 -0
  161. package/dist/ir/native-array-transport.d.ts +7 -0
  162. package/dist/ir/native-array-transport.js +46 -0
  163. package/dist/ir/native-callable-bind.d.ts +9 -0
  164. package/dist/ir/native-callable-bind.js +30 -0
  165. package/dist/ir/native-carrier-predicate.d.ts +34 -0
  166. package/dist/ir/native-carrier-predicate.js +49 -0
  167. package/dist/ir/native-class-accessor.d.ts +18 -0
  168. package/dist/ir/native-class-accessor.js +52 -0
  169. package/dist/ir/native-class-construction.d.ts +16 -0
  170. package/dist/ir/native-class-construction.js +71 -0
  171. package/dist/ir/native-class-initialization.d.ts +15 -0
  172. package/dist/ir/native-class-initialization.js +56 -0
  173. package/dist/ir/native-class-origins.d.ts +13 -0
  174. package/dist/ir/native-class-origins.js +237 -0
  175. package/dist/ir/native-dictionary-transport.d.ts +6 -0
  176. package/dist/ir/native-dictionary-transport.js +37 -0
  177. package/dist/ir/native-enumeration.d.ts +14 -0
  178. package/dist/ir/native-enumeration.js +26 -0
  179. package/dist/ir/native-equality.d.ts +10 -0
  180. package/dist/ir/native-equality.js +18 -0
  181. package/dist/ir/native-field-owner.d.ts +37 -0
  182. package/dist/ir/native-field-owner.js +183 -0
  183. package/dist/ir/native-fixed-layout.d.ts +41 -0
  184. package/dist/ir/native-fixed-layout.js +232 -0
  185. package/dist/ir/native-host-construction.d.ts +53 -0
  186. package/dist/ir/native-host-construction.js +62 -0
  187. package/dist/ir/native-key-query.d.ts +4 -0
  188. package/dist/ir/native-key-query.js +38 -0
  189. package/dist/ir/native-merge-transport.d.ts +25 -0
  190. package/dist/ir/native-merge-transport.js +71 -0
  191. package/dist/ir/native-record-index-transport.d.ts +11 -0
  192. package/dist/ir/native-record-index-transport.js +34 -0
  193. package/dist/ir/native-record-index.d.ts +12 -0
  194. package/dist/ir/native-record-index.js +27 -0
  195. package/dist/ir/native-reflect-field.d.ts +5 -0
  196. package/dist/ir/native-reflect-field.js +33 -0
  197. package/dist/ir/native-sequence-transport.d.ts +7 -0
  198. package/dist/ir/native-sequence-transport.js +53 -0
  199. package/dist/ir/numeric-intrinsics.d.ts +13 -0
  200. package/dist/ir/numeric-intrinsics.js +57 -0
  201. package/dist/ir/object-value-conversions.d.ts +20 -0
  202. package/dist/ir/object-value-conversions.js +50 -0
  203. package/dist/ir/physical-class-reflection.d.ts +9 -0
  204. package/dist/ir/physical-class-reflection.js +57 -0
  205. package/dist/ir/presence-proof.d.ts +42 -0
  206. package/dist/ir/presence-proof.js +490 -0
  207. package/dist/ir/program-facts.d.ts +106 -0
  208. package/dist/ir/program-facts.js +319 -0
  209. package/dist/ir/proven-branches.d.ts +16 -0
  210. package/dist/ir/proven-branches.js +219 -0
  211. package/dist/ir/queries.d.ts +41 -0
  212. package/dist/ir/queries.js +213 -0
  213. package/dist/ir/reflection-demand.d.ts +64 -0
  214. package/dist/ir/reflection-demand.js +1394 -0
  215. package/dist/ir/refusal.d.ts +43 -0
  216. package/dist/ir/refusal.js +28 -0
  217. package/dist/ir/shake.d.ts +37 -0
  218. package/dist/ir/shake.js +1078 -0
  219. package/dist/ir/static-callables.d.ts +11 -0
  220. package/dist/ir/static-callables.js +163 -0
  221. package/dist/ir/string-layout-reuse.d.ts +13 -0
  222. package/dist/ir/string-layout-reuse.js +39 -0
  223. package/dist/ir/string-length-reuse.d.ts +8 -0
  224. package/dist/ir/string-length-reuse.js +47 -0
  225. package/dist/ir/transfer.d.ts +78 -0
  226. package/dist/ir/transfer.js +270 -0
  227. package/dist/ir/type-query-results.d.ts +25 -0
  228. package/dist/ir/type-query-results.js +96 -0
  229. package/dist/ir/typed-property-access.d.ts +100 -0
  230. package/dist/ir/typed-property-access.js +161 -0
  231. package/dist/ir/verify.d.ts +19 -0
  232. package/dist/ir/verify.js +355 -0
  233. package/dist/plugins/apple/constructors.d.ts +112 -0
  234. package/dist/plugins/apple/constructors.js +217 -0
  235. package/dist/plugins/apple/host.d.ts +181 -0
  236. package/dist/plugins/apple/host.js +262 -0
  237. package/dist/plugins/apple/jsx.d.ts +2 -0
  238. package/dist/plugins/apple/jsx.js +293 -0
  239. package/dist/plugins/apple/members.d.ts +16 -0
  240. package/dist/plugins/apple/members.js +190 -0
  241. package/dist/plugins/apple/plugin.d.ts +2 -0
  242. package/dist/plugins/apple/plugin.js +156 -0
  243. package/dist/plugins/gea/component-classes.d.ts +25 -0
  244. package/dist/plugins/gea/component-classes.js +162 -0
  245. package/dist/plugins/gea/component-inline.d.ts +13 -0
  246. package/dist/plugins/gea/component-inline.js +532 -0
  247. package/dist/plugins/gea/constructors.d.ts +23 -0
  248. package/dist/plugins/gea/constructors.js +100 -0
  249. package/dist/plugins/gea/contract.d.ts +150 -0
  250. package/dist/plugins/gea/contract.js +195 -0
  251. package/dist/plugins/gea/element-ref.d.ts +31 -0
  252. package/dist/plugins/gea/element-ref.js +45 -0
  253. package/dist/plugins/gea/host.d.ts +520 -0
  254. package/dist/plugins/gea/host.js +762 -0
  255. package/dist/plugins/gea/lower.d.ts +6 -0
  256. package/dist/plugins/gea/lower.js +195 -0
  257. package/dist/plugins/gea/members.d.ts +22 -0
  258. package/dist/plugins/gea/members.js +221 -0
  259. package/dist/plugins/gea/plugin.d.ts +22 -0
  260. package/dist/plugins/gea/plugin.js +307 -0
  261. package/dist/plugins/gea/prelude.d.ts +78 -0
  262. package/dist/plugins/gea/prelude.js +153 -0
  263. package/dist/plugins/gea/producer.d.ts +5 -0
  264. package/dist/plugins/gea/producer.js +52 -0
  265. package/dist/plugins/gea/reactive-slots.d.ts +49 -0
  266. package/dist/plugins/gea/reactive-slots.js +578 -0
  267. package/dist/plugins/gea/render-bridge.d.ts +6 -0
  268. package/dist/plugins/gea/render-bridge.js +281 -0
  269. package/dist/plugins/gea/slots.d.ts +15 -0
  270. package/dist/plugins/gea/slots.js +36 -0
  271. package/dist/plugins/gea/template-analysis.d.ts +151 -0
  272. package/dist/plugins/gea/template-analysis.js +346 -0
  273. package/dist/plugins/gea/user-agent-styles.d.ts +9 -0
  274. package/dist/plugins/gea/user-agent-styles.js +94 -0
  275. package/dist/plugins/installed.d.ts +19 -0
  276. package/dist/plugins/installed.js +21 -0
  277. package/dist/plugins/load.d.ts +7 -0
  278. package/dist/plugins/load.js +207 -0
  279. package/dist/plugins/model.d.ts +735 -0
  280. package/dist/plugins/model.js +47 -0
  281. package/dist/plugins/webgl/host.d.ts +77 -0
  282. package/dist/plugins/webgl/host.js +162 -0
  283. package/dist/plugins/webgl/plugin.d.ts +40 -0
  284. package/dist/plugins/webgl/plugin.js +99 -0
  285. package/dist/preflight/obligations.d.ts +206 -0
  286. package/dist/preflight/obligations.js +36 -0
  287. package/dist/preflight/report.d.ts +20 -0
  288. package/dist/preflight/report.js +61 -0
  289. package/dist/preflight/run.d.ts +39 -0
  290. package/dist/preflight/run.js +403 -0
  291. package/dist/project-preparation.d.ts +33 -0
  292. package/dist/project-preparation.js +314 -0
  293. package/dist/projection/abi.d.ts +82 -0
  294. package/dist/projection/abi.js +349 -0
  295. package/dist/projection/apply-arguments.d.ts +12 -0
  296. package/dist/projection/apply-arguments.js +20 -0
  297. package/dist/projection/bindings.d.ts +250 -0
  298. package/dist/projection/bindings.js +340 -0
  299. package/dist/projection/callee.d.ts +196 -0
  300. package/dist/projection/callee.js +444 -0
  301. package/dist/projection/class-property-presence.d.ts +28 -0
  302. package/dist/projection/class-property-presence.js +58 -0
  303. package/dist/projection/class-prototype.d.ts +5 -0
  304. package/dist/projection/class-prototype.js +23 -0
  305. package/dist/projection/class-storage.d.ts +26 -0
  306. package/dist/projection/class-storage.js +236 -0
  307. package/dist/projection/classes.d.ts +283 -0
  308. package/dist/projection/classes.js +944 -0
  309. package/dist/projection/coercions.d.ts +20 -0
  310. package/dist/projection/coercions.js +33 -0
  311. package/dist/projection/dispatch.d.ts +167 -0
  312. package/dist/projection/dispatch.js +379 -0
  313. package/dist/projection/fields.d.ts +123 -0
  314. package/dist/projection/fields.js +383 -0
  315. package/dist/projection/instance-test.d.ts +78 -0
  316. package/dist/projection/instance-test.js +156 -0
  317. package/dist/projection/slots.d.ts +146 -0
  318. package/dist/projection/slots.js +663 -0
  319. package/dist/projection/synthesized-abi.d.ts +61 -0
  320. package/dist/projection/synthesized-abi.js +94 -0
  321. package/dist/representation/array-index.d.ts +14 -0
  322. package/dist/representation/array-index.js +17 -0
  323. package/dist/representation/callable-object.d.ts +3 -0
  324. package/dist/representation/callable-object.js +6 -0
  325. package/dist/representation/collections.d.ts +84 -0
  326. package/dist/representation/collections.js +139 -0
  327. package/dist/representation/derive.d.ts +159 -0
  328. package/dist/representation/derive.js +2546 -0
  329. package/dist/representation/difference.d.ts +30 -0
  330. package/dist/representation/difference.js +240 -0
  331. package/dist/representation/field-descriptor-policy.d.ts +19 -0
  332. package/dist/representation/field-descriptor-policy.js +39 -0
  333. package/dist/representation/function-constructor.d.ts +13 -0
  334. package/dist/representation/function-constructor.js +9 -0
  335. package/dist/representation/host-abi.d.ts +32 -0
  336. package/dist/representation/host-abi.js +97 -0
  337. package/dist/representation/host-templates.d.ts +67 -0
  338. package/dist/representation/host-templates.js +94 -0
  339. package/dist/representation/intersection.d.ts +84 -0
  340. package/dist/representation/intersection.js +149 -0
  341. package/dist/representation/literal-destination.d.ts +43 -0
  342. package/dist/representation/literal-destination.js +133 -0
  343. package/dist/representation/merge.d.ts +18 -0
  344. package/dist/representation/merge.js +83 -0
  345. package/dist/representation/model.d.ts +1160 -0
  346. package/dist/representation/model.js +1019 -0
  347. package/dist/representation/numeric-index.d.ts +13 -0
  348. package/dist/representation/numeric-index.js +29 -0
  349. package/dist/representation/object-shape.d.ts +109 -0
  350. package/dist/representation/object-shape.js +123 -0
  351. package/dist/representation/optional.d.ts +12 -0
  352. package/dist/representation/optional.js +87 -0
  353. package/dist/representation/plan.d.ts +60 -0
  354. package/dist/representation/plan.js +78 -0
  355. package/dist/representation/policies.d.ts +589 -0
  356. package/dist/representation/policies.js +107 -0
  357. package/dist/representation/primitive-domain.d.ts +1 -0
  358. package/dist/representation/primitive-domain.js +1 -0
  359. package/dist/representation/primitives.d.ts +44 -0
  360. package/dist/representation/primitives.js +78 -0
  361. package/dist/representation/publish.d.ts +49 -0
  362. package/dist/representation/publish.js +648 -0
  363. package/dist/representation/record-fields.d.ts +96 -0
  364. package/dist/representation/record-fields.js +116 -0
  365. package/dist/representation/template-object.d.ts +11 -0
  366. package/dist/representation/template-object.js +26 -0
  367. package/dist/representation/union.d.ts +30 -0
  368. package/dist/representation/union.js +324 -0
  369. package/dist/representation/value-records.d.ts +3 -0
  370. package/dist/representation/value-records.js +307 -0
  371. package/dist/representation/verify.d.ts +17 -0
  372. package/dist/representation/verify.js +221 -0
  373. package/dist/semantics/alias-this-field-declaration-transform.d.ts +4 -0
  374. package/dist/semantics/alias-this-field-declaration-transform.js +207 -0
  375. package/dist/semantics/ambient-type-realization-transform.d.ts +62 -0
  376. package/dist/semantics/ambient-type-realization-transform.js +168 -0
  377. package/dist/semantics/ambient.d.ts +24 -0
  378. package/dist/semantics/ambient.js +119 -0
  379. package/dist/semantics/borrowed-builtin-call-bind-source-transform.d.ts +4 -0
  380. package/dist/semantics/borrowed-builtin-call-bind-source-transform.js +341 -0
  381. package/dist/semantics/callable-origins.d.ts +46 -0
  382. package/dist/semantics/callable-origins.js +354 -0
  383. package/dist/semantics/class-alias.d.ts +7 -0
  384. package/dist/semantics/class-alias.js +37 -0
  385. package/dist/semantics/class-heritage.d.ts +34 -0
  386. package/dist/semantics/class-heritage.js +104 -0
  387. package/dist/semantics/commonjs-wrapper.d.ts +69 -0
  388. package/dist/semantics/commonjs-wrapper.js +231 -0
  389. package/dist/semantics/constructor-slot-subclasses.d.ts +28 -0
  390. package/dist/semantics/constructor-slot-subclasses.js +112 -0
  391. package/dist/semantics/declaration-overlay-transform.d.ts +35 -0
  392. package/dist/semantics/declaration-overlay-transform.js +2157 -0
  393. package/dist/semantics/define-property-source-transform.d.ts +4 -0
  394. package/dist/semantics/define-property-source-transform.js +437 -0
  395. package/dist/semantics/diagnostic-source-preparation.d.ts +24 -0
  396. package/dist/semantics/diagnostic-source-preparation.js +82 -0
  397. package/dist/semantics/documentation-ranges.d.ts +22 -0
  398. package/dist/semantics/documentation-ranges.js +36 -0
  399. package/dist/semantics/dynamic-fallback.d.ts +86 -0
  400. package/dist/semantics/dynamic-fallback.js +249 -0
  401. package/dist/semantics/frontend-timing.d.ts +6 -0
  402. package/dist/semantics/frontend-timing.js +35 -0
  403. package/dist/semantics/frontend.d.ts +504 -0
  404. package/dist/semantics/frontend.js +1157 -0
  405. package/dist/semantics/host-declaration-provenance.d.ts +11 -0
  406. package/dist/semantics/host-declaration-provenance.js +18 -0
  407. package/dist/semantics/host-methods.d.ts +24 -0
  408. package/dist/semantics/host-methods.js +74 -0
  409. package/dist/semantics/host-protocols.d.ts +429 -0
  410. package/dist/semantics/host-protocols.js +1501 -0
  411. package/dist/semantics/inherited-accessor.d.ts +7 -0
  412. package/dist/semantics/inherited-accessor.js +48 -0
  413. package/dist/semantics/interface-families.d.ts +70 -0
  414. package/dist/semantics/interface-families.js +180 -0
  415. package/dist/semantics/interface-implementors.d.ts +53 -0
  416. package/dist/semantics/interface-implementors.js +87 -0
  417. package/dist/semantics/jsdoc-namepath-transform.d.ts +4 -0
  418. package/dist/semantics/jsdoc-namepath-transform.js +85 -0
  419. package/dist/semantics/model/coverage.d.ts +68 -0
  420. package/dist/semantics/model/coverage.js +73 -0
  421. package/dist/semantics/model/edges.d.ts +103 -0
  422. package/dist/semantics/model/edges.js +20 -0
  423. package/dist/semantics/model/graph.d.ts +55 -0
  424. package/dist/semantics/model/graph.js +129 -0
  425. package/dist/semantics/model/operands.d.ts +159 -0
  426. package/dist/semantics/model/operands.js +26 -0
  427. package/dist/semantics/model/operations.d.ts +496 -0
  428. package/dist/semantics/model/operations.js +2 -0
  429. package/dist/semantics/model/primitive-domain.d.ts +26 -0
  430. package/dist/semantics/model/primitive-domain.js +38 -0
  431. package/dist/semantics/model/selected-signature.d.ts +261 -0
  432. package/dist/semantics/model/selected-signature.js +55 -0
  433. package/dist/semantics/model/structural-type-table.d.ts +93 -0
  434. package/dist/semantics/model/structural-type-table.js +237 -0
  435. package/dist/semantics/model/structural-types.d.ts +367 -0
  436. package/dist/semantics/model/structural-types.js +200 -0
  437. package/dist/semantics/module-resolution.d.ts +23 -0
  438. package/dist/semantics/module-resolution.js +227 -0
  439. package/dist/semantics/new-callee-class-tag-source-transform.d.ts +4 -0
  440. package/dist/semantics/new-callee-class-tag-source-transform.js +64 -0
  441. package/dist/semantics/node-project.d.ts +13 -0
  442. package/dist/semantics/node-project.js +107 -0
  443. package/dist/semantics/node-source-hooks.d.ts +1 -0
  444. package/dist/semantics/node-source-hooks.js +63 -0
  445. package/dist/semantics/normalize/absent-globals.d.ts +143 -0
  446. package/dist/semantics/normalize/absent-globals.js +191 -0
  447. package/dist/semantics/normalize/arguments-objects.d.ts +43 -0
  448. package/dist/semantics/normalize/arguments-objects.js +60 -0
  449. package/dist/semantics/normalize/asserted-arm-absence.d.ts +28 -0
  450. package/dist/semantics/normalize/asserted-arm-absence.js +61 -0
  451. package/dist/semantics/normalize/assignment-patterns.d.ts +70 -0
  452. package/dist/semantics/normalize/assignment-patterns.js +147 -0
  453. package/dist/semantics/normalize/bag-absence.d.ts +8 -0
  454. package/dist/semantics/normalize/bag-absence.js +42 -0
  455. package/dist/semantics/normalize/binding-fixpoint.d.ts +36 -0
  456. package/dist/semantics/normalize/binding-fixpoint.js +140 -0
  457. package/dist/semantics/normalize/callback-parameter-contracts.d.ts +16 -0
  458. package/dist/semantics/normalize/callback-parameter-contracts.js +91 -0
  459. package/dist/semantics/normalize/cells/agreement.d.ts +46 -0
  460. package/dist/semantics/normalize/cells/agreement.js +34 -0
  461. package/dist/semantics/normalize/cells/candidates.d.ts +17 -0
  462. package/dist/semantics/normalize/cells/candidates.js +35 -0
  463. package/dist/semantics/normalize/cells/facts.d.ts +19 -0
  464. package/dist/semantics/normalize/cells/facts.js +90 -0
  465. package/dist/semantics/normalize/cells/index.d.ts +10 -0
  466. package/dist/semantics/normalize/cells/index.js +6 -0
  467. package/dist/semantics/normalize/cells/model.d.ts +98 -0
  468. package/dist/semantics/normalize/cells/model.js +2 -0
  469. package/dist/semantics/normalize/cells/policies/bag.d.ts +44 -0
  470. package/dist/semantics/normalize/cells/policies/bag.js +114 -0
  471. package/dist/semantics/normalize/cells/policies/collection.d.ts +42 -0
  472. package/dist/semantics/normalize/cells/policies/collection.js +218 -0
  473. package/dist/semantics/normalize/cells/policies/field.d.ts +28 -0
  474. package/dist/semantics/normalize/cells/policies/field.js +40 -0
  475. package/dist/semantics/normalize/cells/policies/index.d.ts +49 -0
  476. package/dist/semantics/normalize/cells/policies/index.js +58 -0
  477. package/dist/semantics/normalize/cells/policies/local.d.ts +18 -0
  478. package/dist/semantics/normalize/cells/policies/local.js +37 -0
  479. package/dist/semantics/normalize/cells/policies/parameter.d.ts +28 -0
  480. package/dist/semantics/normalize/cells/policies/parameter.js +39 -0
  481. package/dist/semantics/normalize/cells/policies/return.d.ts +26 -0
  482. package/dist/semantics/normalize/cells/policies/return.js +45 -0
  483. package/dist/semantics/normalize/cells/policies/shared.d.ts +33 -0
  484. package/dist/semantics/normalize/cells/policies/shared.js +45 -0
  485. package/dist/semantics/normalize/cells/policy.d.ts +72 -0
  486. package/dist/semantics/normalize/cells/policy.js +18 -0
  487. package/dist/semantics/normalize/cells/registry.d.ts +14 -0
  488. package/dist/semantics/normalize/cells/registry.js +17 -0
  489. package/dist/semantics/normalize/census-refusal.d.ts +62 -0
  490. package/dist/semantics/normalize/census-refusal.js +27 -0
  491. package/dist/semantics/normalize/census.d.ts +109 -0
  492. package/dist/semantics/normalize/census.js +667 -0
  493. package/dist/semantics/normalize/collection-bindings.d.ts +278 -0
  494. package/dist/semantics/normalize/collection-bindings.js +677 -0
  495. package/dist/semantics/normalize/commonjs-module-record.d.ts +21 -0
  496. package/dist/semantics/normalize/commonjs-module-record.js +289 -0
  497. package/dist/semantics/normalize/commonjs-require.d.ts +13 -0
  498. package/dist/semantics/normalize/commonjs-require.js +1527 -0
  499. package/dist/semantics/normalize/contribution.d.ts +63 -0
  500. package/dist/semantics/normalize/contribution.js +172 -0
  501. package/dist/semantics/normalize/dead-typeof-guards.d.ts +64 -0
  502. package/dist/semantics/normalize/dead-typeof-guards.js +152 -0
  503. package/dist/semantics/normalize/deferred-intrinsic-protocols.d.ts +57 -0
  504. package/dist/semantics/normalize/deferred-intrinsic-protocols.js +109 -0
  505. package/dist/semantics/normalize/derived-expression-type.d.ts +1070 -0
  506. package/dist/semantics/normalize/derived-expression-type.js +3463 -0
  507. package/dist/semantics/normalize/evaluation-order.d.ts +16 -0
  508. package/dist/semantics/normalize/evaluation-order.js +37 -0
  509. package/dist/semantics/normalize/field-bindings.d.ts +167 -0
  510. package/dist/semantics/normalize/field-bindings.js +1125 -0
  511. package/dist/semantics/normalize/flow/array-element-continuation.d.ts +27 -0
  512. package/dist/semantics/normalize/flow/array-element-continuation.js +1452 -0
  513. package/dist/semantics/normalize/flow/callable-array-origins.d.ts +42 -0
  514. package/dist/semantics/normalize/flow/callable-array-origins.js +318 -0
  515. package/dist/semantics/normalize/flow/callable-completions.d.ts +45 -0
  516. package/dist/semantics/normalize/flow/callable-completions.js +82 -0
  517. package/dist/semantics/normalize/flow/callable-reach.d.ts +237 -0
  518. package/dist/semantics/normalize/flow/callable-reach.js +7174 -0
  519. package/dist/semantics/normalize/flow/class-family-member-read.d.ts +16 -0
  520. package/dist/semantics/normalize/flow/class-family-member-read.js +992 -0
  521. package/dist/semantics/normalize/flow/collection-value-continuation.d.ts +21 -0
  522. package/dist/semantics/normalize/flow/collection-value-continuation.js +192 -0
  523. package/dist/semantics/normalize/flow/component-solver.d.ts +199 -0
  524. package/dist/semantics/normalize/flow/component-solver.js +587 -0
  525. package/dist/semantics/normalize/flow/computed-key-set.d.ts +84 -0
  526. package/dist/semantics/normalize/flow/computed-key-set.js +660 -0
  527. package/dist/semantics/normalize/flow/export-importers.d.ts +24 -0
  528. package/dist/semantics/normalize/flow/export-importers.js +269 -0
  529. package/dist/semantics/normalize/flow/host-text-sink.d.ts +25 -0
  530. package/dist/semantics/normalize/flow/host-text-sink.js +87 -0
  531. package/dist/semantics/normalize/flow/intrinsic-array-callback-frames.d.ts +84 -0
  532. package/dist/semantics/normalize/flow/intrinsic-array-callback-frames.js +180 -0
  533. package/dist/semantics/normalize/flow/intrinsic-data-definition.d.ts +35 -0
  534. package/dist/semantics/normalize/flow/intrinsic-data-definition.js +140 -0
  535. package/dist/semantics/normalize/flow/invocation-facts.d.ts +98 -0
  536. package/dist/semantics/normalize/flow/invocation-facts.js +257 -0
  537. package/dist/semantics/normalize/flow/member-call-forwarding.d.ts +122 -0
  538. package/dist/semantics/normalize/flow/member-call-forwarding.js +835 -0
  539. package/dist/semantics/normalize/flow/model.d.ts +357 -0
  540. package/dist/semantics/normalize/flow/model.js +177 -0
  541. package/dist/semantics/normalize/flow/native-collection-protocol.d.ts +24 -0
  542. package/dist/semantics/normalize/flow/native-collection-protocol.js +252 -0
  543. package/dist/semantics/normalize/flow/node-path-token.d.ts +3 -0
  544. package/dist/semantics/normalize/flow/node-path-token.js +53 -0
  545. package/dist/semantics/normalize/flow/object-binding-continuation.d.ts +11 -0
  546. package/dist/semantics/normalize/flow/object-binding-continuation.js +42 -0
  547. package/dist/semantics/normalize/flow/origin-authority.d.ts +56 -0
  548. package/dist/semantics/normalize/flow/origin-authority.js +2 -0
  549. package/dist/semantics/normalize/flow/owned-class-receivers.d.ts +35 -0
  550. package/dist/semantics/normalize/flow/owned-class-receivers.js +191 -0
  551. package/dist/semantics/normalize/flow/parameter-values.d.ts +27 -0
  552. package/dist/semantics/normalize/flow/parameter-values.js +251 -0
  553. package/dist/semantics/normalize/flow/proof-hypotheses.d.ts +66 -0
  554. package/dist/semantics/normalize/flow/proof-hypotheses.js +162 -0
  555. package/dist/semantics/normalize/flow/record-alias-closure.d.ts +27 -0
  556. package/dist/semantics/normalize/flow/record-alias-closure.js +298 -0
  557. package/dist/semantics/normalize/flow/seeded-origins.d.ts +43 -0
  558. package/dist/semantics/normalize/flow/seeded-origins.js +54 -0
  559. package/dist/semantics/normalize/flow/source-class-data.d.ts +132 -0
  560. package/dist/semantics/normalize/flow/source-class-data.js +838 -0
  561. package/dist/semantics/normalize/flow/source-class-instanceof.d.ts +13 -0
  562. package/dist/semantics/normalize/flow/source-class-instanceof.js +37 -0
  563. package/dist/semantics/normalize/flow/source-class-static-data.d.ts +16 -0
  564. package/dist/semantics/normalize/flow/source-class-static-data.js +47 -0
  565. package/dist/semantics/normalize/flow/source-construction-frames.d.ts +12 -0
  566. package/dist/semantics/normalize/flow/source-construction-frames.js +118 -0
  567. package/dist/semantics/normalize/flow/source-invocation-frame-layout.d.ts +34 -0
  568. package/dist/semantics/normalize/flow/source-invocation-frame-layout.js +78 -0
  569. package/dist/semantics/normalize/flow/source-invocation-receiver.d.ts +37 -0
  570. package/dist/semantics/normalize/flow/source-invocation-receiver.js +95 -0
  571. package/dist/semantics/normalize/flow/source-prototype-method-identity.d.ts +23 -0
  572. package/dist/semantics/normalize/flow/source-prototype-method-identity.js +81 -0
  573. package/dist/semantics/normalize/flow/source-record-data.d.ts +29 -0
  574. package/dist/semantics/normalize/flow/source-record-data.js +626 -0
  575. package/dist/semantics/normalize/flow/source-value-session.d.ts +77 -0
  576. package/dist/semantics/normalize/flow/source-value-session.js +3089 -0
  577. package/dist/semantics/normalize/flow/targets.d.ts +118 -0
  578. package/dist/semantics/normalize/flow/targets.js +405 -0
  579. package/dist/semantics/normalize/flow/value-flow.d.ts +36 -0
  580. package/dist/semantics/normalize/flow/value-flow.js +823 -0
  581. package/dist/semantics/normalize/flow/value-provenance.d.ts +31 -0
  582. package/dist/semantics/normalize/flow/value-provenance.js +112 -0
  583. package/dist/semantics/normalize/gating.d.ts +51 -0
  584. package/dist/semantics/normalize/gating.js +560 -0
  585. package/dist/semantics/normalize/generic-function-choice.d.ts +31 -0
  586. package/dist/semantics/normalize/generic-function-choice.js +115 -0
  587. package/dist/semantics/normalize/global-host-mutations.d.ts +51 -0
  588. package/dist/semantics/normalize/global-host-mutations.js +5989 -0
  589. package/dist/semantics/normalize/host-effect-contracts.d.ts +77 -0
  590. package/dist/semantics/normalize/host-effect-contracts.js +143 -0
  591. package/dist/semantics/normalize/host-mutation-computed-keys.d.ts +38 -0
  592. package/dist/semantics/normalize/host-mutation-computed-keys.js +26 -0
  593. package/dist/semantics/normalize/host-mutation-key-reader.d.ts +66 -0
  594. package/dist/semantics/normalize/host-mutation-key-reader.js +192 -0
  595. package/dist/semantics/normalize/host-mutation-keys.d.ts +114 -0
  596. package/dist/semantics/normalize/host-mutation-keys.js +183 -0
  597. package/dist/semantics/normalize/identities.d.ts +172 -0
  598. package/dist/semantics/normalize/identities.js +426 -0
  599. package/dist/semantics/normalize/implicit-arguments-tuple.d.ts +97 -0
  600. package/dist/semantics/normalize/implicit-arguments-tuple.js +197 -0
  601. package/dist/semantics/normalize/implicit-arguments.d.ts +11 -0
  602. package/dist/semantics/normalize/implicit-arguments.js +39 -0
  603. package/dist/semantics/normalize/instantiation.d.ts +73 -0
  604. package/dist/semantics/normalize/instantiation.js +399 -0
  605. package/dist/semantics/normalize/intrinsic-property-call.d.ts +18 -0
  606. package/dist/semantics/normalize/intrinsic-property-call.js +69 -0
  607. package/dist/semantics/normalize/intrinsic-prototype.d.ts +41 -0
  608. package/dist/semantics/normalize/intrinsic-prototype.js +87 -0
  609. package/dist/semantics/normalize/intrinsic-static-member.d.ts +14 -0
  610. package/dist/semantics/normalize/intrinsic-static-member.js +23 -0
  611. package/dist/semantics/normalize/jsdoc-type-names.d.ts +32 -0
  612. package/dist/semantics/normalize/jsdoc-type-names.js +512 -0
  613. package/dist/semantics/normalize/keyof.d.ts +32 -0
  614. package/dist/semantics/normalize/keyof.js +110 -0
  615. package/dist/semantics/normalize/local-bindings.d.ts +176 -0
  616. package/dist/semantics/normalize/local-bindings.js +1826 -0
  617. package/dist/semantics/normalize/logical-result-type.d.ts +16 -0
  618. package/dist/semantics/normalize/logical-result-type.js +102 -0
  619. package/dist/semantics/normalize/namespace-paths.d.ts +57 -0
  620. package/dist/semantics/normalize/namespace-paths.js +108 -0
  621. package/dist/semantics/normalize/normalize.d.ts +57 -0
  622. package/dist/semantics/normalize/normalize.js +68 -0
  623. package/dist/semantics/normalize/object-bag-bindings.d.ts +305 -0
  624. package/dist/semantics/normalize/object-bag-bindings.js +1290 -0
  625. package/dist/semantics/normalize/omitted-stated-parameter.d.ts +53 -0
  626. package/dist/semantics/normalize/omitted-stated-parameter.js +59 -0
  627. package/dist/semantics/normalize/open-type-form.d.ts +10 -0
  628. package/dist/semantics/normalize/open-type-form.js +32 -0
  629. package/dist/semantics/normalize/parameter-bindings.d.ts +361 -0
  630. package/dist/semantics/normalize/parameter-bindings.js +3339 -0
  631. package/dist/semantics/normalize/parameter-slot.d.ts +264 -0
  632. package/dist/semantics/normalize/parameter-slot.js +491 -0
  633. package/dist/semantics/normalize/physical-overload-result.d.ts +77 -0
  634. package/dist/semantics/normalize/physical-overload-result.js +99 -0
  635. package/dist/semantics/normalize/primitive-property-absence.d.ts +12 -0
  636. package/dist/semantics/normalize/primitive-property-absence.js +60 -0
  637. package/dist/semantics/normalize/producer-context.d.ts +376 -0
  638. package/dist/semantics/normalize/producer-context.js +1 -0
  639. package/dist/semantics/normalize/producers/allocations.d.ts +3 -0
  640. package/dist/semantics/normalize/producers/allocations.js +863 -0
  641. package/dist/semantics/normalize/producers/binding-kind.d.ts +37 -0
  642. package/dist/semantics/normalize/producers/binding-kind.js +36 -0
  643. package/dist/semantics/normalize/producers/bindings.d.ts +85 -0
  644. package/dist/semantics/normalize/producers/bindings.js +710 -0
  645. package/dist/semantics/normalize/producers/boundary.d.ts +34 -0
  646. package/dist/semantics/normalize/producers/boundary.js +123 -0
  647. package/dist/semantics/normalize/producers/class-lifecycle.d.ts +3 -0
  648. package/dist/semantics/normalize/producers/class-lifecycle.js +902 -0
  649. package/dist/semantics/normalize/producers/computations.d.ts +3 -0
  650. package/dist/semantics/normalize/producers/computations.js +613 -0
  651. package/dist/semantics/normalize/producers/control-loops.d.ts +30 -0
  652. package/dist/semantics/normalize/producers/control-loops.js +91 -0
  653. package/dist/semantics/normalize/producers/control.d.ts +30 -0
  654. package/dist/semantics/normalize/producers/control.js +923 -0
  655. package/dist/semantics/normalize/producers/declaration-lifecycle.d.ts +3 -0
  656. package/dist/semantics/normalize/producers/declaration-lifecycle.js +390 -0
  657. package/dist/semantics/normalize/producers/destructuring.d.ts +45 -0
  658. package/dist/semantics/normalize/producers/destructuring.js +1180 -0
  659. package/dist/semantics/normalize/producers/dynamic-language.d.ts +3 -0
  660. package/dist/semantics/normalize/producers/dynamic-language.js +70 -0
  661. package/dist/semantics/normalize/producers/erasure.d.ts +51 -0
  662. package/dist/semantics/normalize/producers/erasure.js +90 -0
  663. package/dist/semantics/normalize/producers/installed.d.ts +3 -0
  664. package/dist/semantics/normalize/producers/installed.js +55 -0
  665. package/dist/semantics/normalize/producers/invocations.d.ts +35 -0
  666. package/dist/semantics/normalize/producers/invocations.js +1796 -0
  667. package/dist/semantics/normalize/producers/iteration-yield.d.ts +59 -0
  668. package/dist/semantics/normalize/producers/iteration-yield.js +235 -0
  669. package/dist/semantics/normalize/producers/jsx.d.ts +3 -0
  670. package/dist/semantics/normalize/producers/jsx.js +360 -0
  671. package/dist/semantics/normalize/producers/mint.d.ts +39 -0
  672. package/dist/semantics/normalize/producers/mint.js +44 -0
  673. package/dist/semantics/normalize/producers/nullish.d.ts +16 -0
  674. package/dist/semantics/normalize/producers/nullish.js +27 -0
  675. package/dist/semantics/normalize/producers/object-assignment.d.ts +8 -0
  676. package/dist/semantics/normalize/producers/object-assignment.js +204 -0
  677. package/dist/semantics/normalize/producers/object-tag.d.ts +9 -0
  678. package/dist/semantics/normalize/producers/object-tag.js +119 -0
  679. package/dist/semantics/normalize/producers/optional-chain.d.ts +44 -0
  680. package/dist/semantics/normalize/producers/optional-chain.js +75 -0
  681. package/dist/semantics/normalize/producers/properties.d.ts +21 -0
  682. package/dist/semantics/normalize/producers/properties.js +1053 -0
  683. package/dist/semantics/normalize/producers/protocol.d.ts +67 -0
  684. package/dist/semantics/normalize/producers/protocol.js +695 -0
  685. package/dist/semantics/normalize/producers/references.d.ts +53 -0
  686. package/dist/semantics/normalize/producers/references.js +1027 -0
  687. package/dist/semantics/normalize/producers/shared.d.ts +561 -0
  688. package/dist/semantics/normalize/producers/shared.js +1683 -0
  689. package/dist/semantics/normalize/producers/spread-arguments.d.ts +72 -0
  690. package/dist/semantics/normalize/producers/spread-arguments.js +375 -0
  691. package/dist/semantics/normalize/producers/tagged-template.d.ts +5 -0
  692. package/dist/semantics/normalize/producers/tagged-template.js +307 -0
  693. package/dist/semantics/normalize/producers/tuple-spread.d.ts +189 -0
  694. package/dist/semantics/normalize/producers/tuple-spread.js +279 -0
  695. package/dist/semantics/normalize/property-key-domain.d.ts +36 -0
  696. package/dist/semantics/normalize/property-key-domain.js +150 -0
  697. package/dist/semantics/normalize/reachability.d.ts +189 -0
  698. package/dist/semantics/normalize/reachability.js +1057 -0
  699. package/dist/semantics/normalize/reassigned-bindings.d.ts +13 -0
  700. package/dist/semantics/normalize/reassigned-bindings.js +41 -0
  701. package/dist/semantics/normalize/record-storage-families.d.ts +11 -0
  702. package/dist/semantics/normalize/record-storage-families.js +109 -0
  703. package/dist/semantics/normalize/return-bindings.d.ts +260 -0
  704. package/dist/semantics/normalize/return-bindings.js +1311 -0
  705. package/dist/semantics/normalize/return-paths.d.ts +2 -0
  706. package/dist/semantics/normalize/return-paths.js +28 -0
  707. package/dist/semantics/normalize/script-global-redefinition.d.ts +44 -0
  708. package/dist/semantics/normalize/script-global-redefinition.js +75 -0
  709. package/dist/semantics/normalize/specialization.d.ts +201 -0
  710. package/dist/semantics/normalize/specialization.js +1824 -0
  711. package/dist/semantics/normalize/structural-array-element.d.ts +176 -0
  712. package/dist/semantics/normalize/structural-array-element.js +700 -0
  713. package/dist/semantics/normalize/structural-array-read.d.ts +13 -0
  714. package/dist/semantics/normalize/structural-array-read.js +124 -0
  715. package/dist/semantics/normalize/structural-callable.d.ts +12 -0
  716. package/dist/semantics/normalize/structural-callable.js +82 -0
  717. package/dist/semantics/normalize/structural-creation-order.d.ts +32 -0
  718. package/dist/semantics/normalize/structural-creation-order.js +111 -0
  719. package/dist/semantics/normalize/structural-declarations.d.ts +395 -0
  720. package/dist/semantics/normalize/structural-declarations.js +968 -0
  721. package/dist/semantics/normalize/structural-declared-body.d.ts +25 -0
  722. package/dist/semantics/normalize/structural-declared-body.js +147 -0
  723. package/dist/semantics/normalize/structural-generics.d.ts +56 -0
  724. package/dist/semantics/normalize/structural-generics.js +120 -0
  725. package/dist/semantics/normalize/structural-indexed-access.d.ts +11 -0
  726. package/dist/semantics/normalize/structural-indexed-access.js +126 -0
  727. package/dist/semantics/normalize/structural-instantiated-member.d.ts +64 -0
  728. package/dist/semantics/normalize/structural-instantiated-member.js +407 -0
  729. package/dist/semantics/normalize/structural-joins.d.ts +44 -0
  730. package/dist/semantics/normalize/structural-joins.js +143 -0
  731. package/dist/semantics/normalize/structural-layout-relevance.d.ts +29 -0
  732. package/dist/semantics/normalize/structural-layout-relevance.js +391 -0
  733. package/dist/semantics/normalize/structural-layout-type.d.ts +11 -0
  734. package/dist/semantics/normalize/structural-layout-type.js +1468 -0
  735. package/dist/semantics/normalize/structural-leaves.d.ts +49 -0
  736. package/dist/semantics/normalize/structural-leaves.js +125 -0
  737. package/dist/semantics/normalize/structural-local-union.d.ts +13 -0
  738. package/dist/semantics/normalize/structural-local-union.js +133 -0
  739. package/dist/semantics/normalize/structural-members.d.ts +26 -0
  740. package/dist/semantics/normalize/structural-members.js +84 -0
  741. package/dist/semantics/normalize/structural-mutable-method.d.ts +15 -0
  742. package/dist/semantics/normalize/structural-mutable-method.js +109 -0
  743. package/dist/semantics/normalize/structural-parts.d.ts +131 -0
  744. package/dist/semantics/normalize/structural-parts.js +737 -0
  745. package/dist/semantics/normalize/structural-receiver.d.ts +66 -0
  746. package/dist/semantics/normalize/structural-receiver.js +551 -0
  747. package/dist/semantics/normalize/structural-rules.d.ts +112 -0
  748. package/dist/semantics/normalize/structural-rules.js +93 -0
  749. package/dist/semantics/normalize/structural-self-reference.d.ts +150 -0
  750. package/dist/semantics/normalize/structural-self-reference.js +494 -0
  751. package/dist/semantics/normalize/structural.d.ts +202 -0
  752. package/dist/semantics/normalize/structural.js +4218 -0
  753. package/dist/semantics/normalize/unreduced-type-form.d.ts +41 -0
  754. package/dist/semantics/normalize/unreduced-type-form.js +53 -0
  755. package/dist/semantics/normalize/unresolvable-names.d.ts +56 -0
  756. package/dist/semantics/normalize/unresolvable-names.js +140 -0
  757. package/dist/semantics/package-sources.d.ts +16 -0
  758. package/dist/semantics/package-sources.js +365 -0
  759. package/dist/semantics/program.d.ts +151 -0
  760. package/dist/semantics/program.js +667 -0
  761. package/dist/semantics/prototype-install-source-transform.d.ts +4 -0
  762. package/dist/semantics/prototype-install-source-transform.js +341 -0
  763. package/dist/semantics/prototype-object-class-source-transform.d.ts +4 -0
  764. package/dist/semantics/prototype-object-class-source-transform.js +525 -0
  765. package/dist/semantics/prototype-reparenting.d.ts +50 -0
  766. package/dist/semantics/prototype-reparenting.js +317 -0
  767. package/dist/semantics/stable-checker.d.ts +10 -0
  768. package/dist/semantics/stable-checker.js +148 -0
  769. package/dist/semantics/subclass-member-overlay-transform.d.ts +35 -0
  770. package/dist/semantics/subclass-member-overlay-transform.js +1418 -0
  771. package/dist/semantics/symbol-keyed-expando-source-transform.d.ts +4 -0
  772. package/dist/semantics/symbol-keyed-expando-source-transform.js +66 -0
  773. package/dist/semantics/this-constructor-source-transform.d.ts +4 -0
  774. package/dist/semantics/this-constructor-source-transform.js +122 -0
  775. package/dist/semantics/uninstantiable-classes.d.ts +22 -0
  776. package/dist/semantics/uninstantiable-classes.js +75 -0
  777. package/dist/targets/cpp/balanced-units.d.ts +3 -0
  778. package/dist/targets/cpp/balanced-units.js +58 -0
  779. package/dist/targets/cpp/borrowed-call-entry.d.ts +30 -0
  780. package/dist/targets/cpp/borrowed-call-entry.js +68 -0
  781. package/dist/targets/cpp/captures.d.ts +68 -0
  782. package/dist/targets/cpp/captures.js +269 -0
  783. package/dist/targets/cpp/class-layout.d.ts +313 -0
  784. package/dist/targets/cpp/class-layout.js +483 -0
  785. package/dist/targets/cpp/class-properties/computed-method-value.d.ts +25 -0
  786. package/dist/targets/cpp/class-properties/computed-method-value.js +22 -0
  787. package/dist/targets/cpp/class-properties/emit-class-properties.d.ts +216 -0
  788. package/dist/targets/cpp/class-properties/emit-class-properties.js +917 -0
  789. package/dist/targets/cpp/class-properties/native-prototype.d.ts +11 -0
  790. package/dist/targets/cpp/class-properties/native-prototype.js +101 -0
  791. package/dist/targets/cpp/class-ref-transport.d.ts +12 -0
  792. package/dist/targets/cpp/class-ref-transport.js +32 -0
  793. package/dist/targets/cpp/conversions.d.ts +3 -0
  794. package/dist/targets/cpp/conversions.js +2027 -0
  795. package/dist/targets/cpp/deferral-safety.d.ts +82 -0
  796. package/dist/targets/cpp/deferral-safety.js +86 -0
  797. package/dist/targets/cpp/direct-call-receivers.d.ts +37 -0
  798. package/dist/targets/cpp/direct-call-receivers.js +79 -0
  799. package/dist/targets/cpp/document.d.ts +74 -0
  800. package/dist/targets/cpp/document.js +106 -0
  801. package/dist/targets/cpp/emit-allocation.d.ts +60 -0
  802. package/dist/targets/cpp/emit-allocation.js +573 -0
  803. package/dist/targets/cpp/emit-arrays.d.ts +119 -0
  804. package/dist/targets/cpp/emit-arrays.js +1047 -0
  805. package/dist/targets/cpp/emit-binding-reference.d.ts +17 -0
  806. package/dist/targets/cpp/emit-binding-reference.js +120 -0
  807. package/dist/targets/cpp/emit-bindings.d.ts +158 -0
  808. package/dist/targets/cpp/emit-bindings.js +769 -0
  809. package/dist/targets/cpp/emit-buffers.d.ts +156 -0
  810. package/dist/targets/cpp/emit-buffers.js +573 -0
  811. package/dist/targets/cpp/emit-callable.d.ts +230 -0
  812. package/dist/targets/cpp/emit-callable.js +2154 -0
  813. package/dist/targets/cpp/emit-carrier-members.d.ts +406 -0
  814. package/dist/targets/cpp/emit-carrier-members.js +1224 -0
  815. package/dist/targets/cpp/emit-coercion.d.ts +26 -0
  816. package/dist/targets/cpp/emit-coercion.js +39 -0
  817. package/dist/targets/cpp/emit-context.d.ts +1882 -0
  818. package/dist/targets/cpp/emit-context.js +904 -0
  819. package/dist/targets/cpp/emit-dynamic-properties.d.ts +174 -0
  820. package/dist/targets/cpp/emit-dynamic-properties.js +1249 -0
  821. package/dist/targets/cpp/emit-equality.d.ts +39 -0
  822. package/dist/targets/cpp/emit-equality.js +472 -0
  823. package/dist/targets/cpp/emit-exceptions.d.ts +104 -0
  824. package/dist/targets/cpp/emit-exceptions.js +513 -0
  825. package/dist/targets/cpp/emit-field-owner.d.ts +4 -0
  826. package/dist/targets/cpp/emit-field-owner.js +27 -0
  827. package/dist/targets/cpp/emit-in.d.ts +31 -0
  828. package/dist/targets/cpp/emit-in.js +426 -0
  829. package/dist/targets/cpp/emit-instanceof.d.ts +19 -0
  830. package/dist/targets/cpp/emit-instanceof.js +601 -0
  831. package/dist/targets/cpp/emit-integers.d.ts +68 -0
  832. package/dist/targets/cpp/emit-integers.js +184 -0
  833. package/dist/targets/cpp/emit-iterator.d.ts +100 -0
  834. package/dist/targets/cpp/emit-iterator.js +1137 -0
  835. package/dist/targets/cpp/emit-json.d.ts +73 -0
  836. package/dist/targets/cpp/emit-json.js +823 -0
  837. package/dist/targets/cpp/emit-jsx.d.ts +74 -0
  838. package/dist/targets/cpp/emit-jsx.js +806 -0
  839. package/dist/targets/cpp/emit-mixed-binary.d.ts +51 -0
  840. package/dist/targets/cpp/emit-mixed-binary.js +60 -0
  841. package/dist/targets/cpp/emit-namespaces.d.ts +101 -0
  842. package/dist/targets/cpp/emit-namespaces.js +133 -0
  843. package/dist/targets/cpp/emit-narrowing.d.ts +738 -0
  844. package/dist/targets/cpp/emit-narrowing.js +3967 -0
  845. package/dist/targets/cpp/emit-native-equality.d.ts +3 -0
  846. package/dist/targets/cpp/emit-native-equality.js +14 -0
  847. package/dist/targets/cpp/emit-native-selection.d.ts +5 -0
  848. package/dist/targets/cpp/emit-native-selection.js +37 -0
  849. package/dist/targets/cpp/emit-object-tag.d.ts +4 -0
  850. package/dist/targets/cpp/emit-object-tag.js +108 -0
  851. package/dist/targets/cpp/emit-owned-record.d.ts +2 -0
  852. package/dist/targets/cpp/emit-owned-record.js +15 -0
  853. package/dist/targets/cpp/emit-presence.d.ts +78 -0
  854. package/dist/targets/cpp/emit-presence.js +376 -0
  855. package/dist/targets/cpp/emit-properties.d.ts +105 -0
  856. package/dist/targets/cpp/emit-properties.js +1640 -0
  857. package/dist/targets/cpp/emit-record-view.d.ts +20 -0
  858. package/dist/targets/cpp/emit-record-view.js +354 -0
  859. package/dist/targets/cpp/emit-return.d.ts +5 -0
  860. package/dist/targets/cpp/emit-return.js +237 -0
  861. package/dist/targets/cpp/emit-sum-widening.d.ts +10 -0
  862. package/dist/targets/cpp/emit-sum-widening.js +69 -0
  863. package/dist/targets/cpp/emit-tonumber.d.ts +38 -0
  864. package/dist/targets/cpp/emit-tonumber.js +177 -0
  865. package/dist/targets/cpp/emit-tostring.d.ts +92 -0
  866. package/dist/targets/cpp/emit-tostring.js +556 -0
  867. package/dist/targets/cpp/emit-typeof.d.ts +49 -0
  868. package/dist/targets/cpp/emit-typeof.js +317 -0
  869. package/dist/targets/cpp/emit-union-properties.d.ts +181 -0
  870. package/dist/targets/cpp/emit-union-properties.js +1281 -0
  871. package/dist/targets/cpp/emit.d.ts +45 -0
  872. package/dist/targets/cpp/emit.js +2225 -0
  873. package/dist/targets/cpp/error-types.d.ts +4 -0
  874. package/dist/targets/cpp/error-types.js +11 -0
  875. package/dist/targets/cpp/function-source-reads.d.ts +72 -0
  876. package/dist/targets/cpp/function-source-reads.js +148 -0
  877. package/dist/targets/cpp/host/atomics.d.ts +25 -0
  878. package/dist/targets/cpp/host/atomics.js +63 -0
  879. package/dist/targets/cpp/host/core-globals.d.ts +108 -0
  880. package/dist/targets/cpp/host/core-globals.js +158 -0
  881. package/dist/targets/cpp/host/dynamic-argument-members.d.ts +42 -0
  882. package/dist/targets/cpp/host/dynamic-argument-members.js +61 -0
  883. package/dist/targets/cpp/host/emit-host-arity.d.ts +139 -0
  884. package/dist/targets/cpp/host/emit-host-arity.js +232 -0
  885. package/dist/targets/cpp/host/emit-host-invoke.d.ts +91 -0
  886. package/dist/targets/cpp/host/emit-host-invoke.js +1105 -0
  887. package/dist/targets/cpp/host/emit-host-object.d.ts +55 -0
  888. package/dist/targets/cpp/host/emit-host-object.js +2206 -0
  889. package/dist/targets/cpp/host/emit-host-properties.d.ts +69 -0
  890. package/dist/targets/cpp/host/emit-host-properties.js +533 -0
  891. package/dist/targets/cpp/host/emit-host-reflect.d.ts +4 -0
  892. package/dist/targets/cpp/host/emit-host-reflect.js +180 -0
  893. package/dist/targets/cpp/host/emit-host-value.d.ts +120 -0
  894. package/dist/targets/cpp/host/emit-host-value.js +392 -0
  895. package/dist/targets/cpp/host/host-members.d.ts +505 -0
  896. package/dist/targets/cpp/host/host-members.js +819 -0
  897. package/dist/targets/cpp/host/host-method-aliases.d.ts +30 -0
  898. package/dist/targets/cpp/host/host-method-aliases.js +76 -0
  899. package/dist/targets/cpp/host/native-protocols.d.ts +47 -0
  900. package/dist/targets/cpp/host/native-protocols.js +183 -0
  901. package/dist/targets/cpp/host/object-protocol.d.ts +351 -0
  902. package/dist/targets/cpp/host/object-protocol.js +671 -0
  903. package/dist/targets/cpp/host-namespace-reads.d.ts +83 -0
  904. package/dist/targets/cpp/host-namespace-reads.js +113 -0
  905. package/dist/targets/cpp/manifest/capabilities.d.ts +39 -0
  906. package/dist/targets/cpp/manifest/capabilities.js +1484 -0
  907. package/dist/targets/cpp/manifest.d.ts +23 -0
  908. package/dist/targets/cpp/manifest.js +113 -0
  909. package/dist/targets/cpp/native-error-base.d.ts +38 -0
  910. package/dist/targets/cpp/native-error-base.js +74 -0
  911. package/dist/targets/cpp/native-narrowing-transport.d.ts +12 -0
  912. package/dist/targets/cpp/native-narrowing-transport.js +151 -0
  913. package/dist/targets/cpp/native-selection-helpers.d.ts +11 -0
  914. package/dist/targets/cpp/native-selection-helpers.js +46 -0
  915. package/dist/targets/cpp/native-symbol-keys.d.ts +8 -0
  916. package/dist/targets/cpp/native-symbol-keys.js +34 -0
  917. package/dist/targets/cpp/ownership.d.ts +43 -0
  918. package/dist/targets/cpp/ownership.js +38 -0
  919. package/dist/targets/cpp/owning-conversion-input.d.ts +14 -0
  920. package/dist/targets/cpp/owning-conversion-input.js +12 -0
  921. package/dist/targets/cpp/property-read-claims.d.ts +62 -0
  922. package/dist/targets/cpp/property-read-claims.js +23 -0
  923. package/dist/targets/cpp/property-store-claims.d.ts +62 -0
  924. package/dist/targets/cpp/property-store-claims.js +26 -0
  925. package/dist/targets/cpp/prototype/emit-prototype-array.d.ts +111 -0
  926. package/dist/targets/cpp/prototype/emit-prototype-array.js +602 -0
  927. package/dist/targets/cpp/prototype/emit-prototype-date.d.ts +133 -0
  928. package/dist/targets/cpp/prototype/emit-prototype-date.js +515 -0
  929. package/dist/targets/cpp/prototype/emit-prototype-error.d.ts +13 -0
  930. package/dist/targets/cpp/prototype/emit-prototype-error.js +54 -0
  931. package/dist/targets/cpp/prototype/emit-prototype-invoke.d.ts +34 -0
  932. package/dist/targets/cpp/prototype/emit-prototype-invoke.js +1003 -0
  933. package/dist/targets/cpp/prototype/emit-prototype-iterator.d.ts +47 -0
  934. package/dist/targets/cpp/prototype/emit-prototype-iterator.js +250 -0
  935. package/dist/targets/cpp/prototype/emit-prototype-promise.d.ts +46 -0
  936. package/dist/targets/cpp/prototype/emit-prototype-promise.js +143 -0
  937. package/dist/targets/cpp/prototype/emit-prototype-regexp.d.ts +335 -0
  938. package/dist/targets/cpp/prototype/emit-prototype-regexp.js +853 -0
  939. package/dist/targets/cpp/prototype/emit-prototype-string.d.ts +42 -0
  940. package/dist/targets/cpp/prototype/emit-prototype-string.js +252 -0
  941. package/dist/targets/cpp/prototype/prototype-method-reads.d.ts +25 -0
  942. package/dist/targets/cpp/prototype/prototype-method-reads.js +182 -0
  943. package/dist/targets/cpp/reactive-dependencies.d.ts +140 -0
  944. package/dist/targets/cpp/reactive-dependencies.js +432 -0
  945. package/dist/targets/cpp/reactive-origins.d.ts +44 -0
  946. package/dist/targets/cpp/reactive-origins.js +82 -0
  947. package/dist/targets/cpp/records.d.ts +277 -0
  948. package/dist/targets/cpp/records.js +2427 -0
  949. package/dist/targets/cpp/recursive-containers.d.ts +43 -0
  950. package/dist/targets/cpp/recursive-containers.js +144 -0
  951. package/dist/targets/cpp/regexp-types.d.ts +56 -0
  952. package/dist/targets/cpp/regexp-types.js +59 -0
  953. package/dist/targets/cpp/substrate.d.ts +125 -0
  954. package/dist/targets/cpp/substrate.js +12 -0
  955. package/dist/targets/cpp/translation-unit.d.ts +219 -0
  956. package/dist/targets/cpp/translation-unit.js +2063 -0
  957. package/dist/targets/cpp/types.d.ts +280 -0
  958. package/dist/targets/cpp/types.js +1135 -0
  959. package/dist/targets/cpp/virtual-methods.d.ts +95 -0
  960. package/dist/targets/cpp/virtual-methods.js +264 -0
  961. package/package.json +95 -0
  962. package/src/targets/cpp/runtime/gea_dynamic_proxy.h +824 -0
  963. package/src/targets/cpp/runtime/gea_eval.h +1376 -0
  964. package/src/targets/cpp/runtime/gea_native_class_prototype.h +44 -0
  965. package/src/targets/cpp/runtime/gea_runtime.h +29222 -0
  966. package/src/targets/cpp/runtime/gea_runtime_builtins.cpp +55 -0
@@ -0,0 +1,573 @@
1
+ import { typedArrayMemberTemplateOf, typedArraySetSourceAccepted, typedArraySetSourceOf } from '../../representation/host-templates.js';
2
+ import { createCppEmitBlockedError, defineValue, operandText, wellKnownSymbolMemberOf } from './emit-context.js';
3
+ import { cppScalarType, cppStringLiteral, cppTypeOf } from './types.js';
4
+ const typedArrayTagNames = {
5
+ int8: 'Int8Array',
6
+ uint8: 'Uint8Array',
7
+ 'uint8-clamped': 'Uint8ClampedArray',
8
+ int16: 'Int16Array',
9
+ uint16: 'Uint16Array',
10
+ int32: 'Int32Array',
11
+ uint32: 'Uint32Array',
12
+ float32: 'Float32Array',
13
+ float64: 'Float64Array'
14
+ };
15
+ /** Builtin `@@toStringTag` values carried directly by the binary-view family. */
16
+ export const binaryToStringTagText = (representation) => {
17
+ if (representation.kind === 'typed-array')
18
+ return cppStringLiteral(typedArrayTagNames[representation.element]);
19
+ if (representation.kind === 'array-buffer')
20
+ return cppStringLiteral('ArrayBuffer');
21
+ if (representation.kind === 'shared-array-buffer')
22
+ return cppStringLiteral('SharedArrayBuffer');
23
+ if (representation.kind === 'data-view')
24
+ return cppStringLiteral('DataView');
25
+ return null;
26
+ };
27
+ /**
28
+ * The `ArrayBuffer`/`DataView` half of the binary family: their constructions,
29
+ * their member reads, and the calls those reads fuse with -- plus the
30
+ * buffer-shaped members of a typed array (`buffer`/`byteLength`/`byteOffset`,
31
+ * `set`/`subarray`/`slice`/`fill`), which belong here rather than with the
32
+ * indexed access in `emit-carrier-members.ts` because every one of them is
33
+ * about the underlying BLOCK rather than about an element.
34
+ *
35
+ * A file of its own, and not a section of `emit-callable.ts` or
36
+ * `emit-prototype-array.ts`: those two are already large, and what this holds
37
+ * is one subject -- ECMA-262 25.1/25.3 plus 23.2's non-indexed surface --
38
+ * whose members and refusals belong beside each other. Each refusal states
39
+ * what is missing and why, because "not built" and "cannot be built without
40
+ * X" are different answers.
41
+ */
42
+ /**
43
+ * `new ArrayBuffer(byteLength)` -- ECMA-262 25.1.4.1.
44
+ *
45
+ * Here, beside `emitTypedArrayConstruct` in spirit and for the identical
46
+ * structural reason (`emit-callable.ts`'s own comment states it in full): the
47
+ * checker's overload set for `ArrayBufferConstructor` is
48
+ * `new (byteLength?: number, options?: ArrayBufferOptions)`, whose second
49
+ * parameter is an options bag this compiler derives no carrier for, so
50
+ * `representation/host-abi.ts` cannot join a single physical frame and
51
+ * `.construct` is correctly `null`. This reads the construction's own
52
+ * already-resolved argument instead.
53
+ *
54
+ * The `maxByteLength` option -- ECMAScript 2024's RESIZABLE buffers -- is
55
+ * refused by name rather than ignored. Ignoring it would produce a
56
+ * fixed-length buffer whose later `resize` silently did nothing, which is the
57
+ * kind of quiet divergence this whole family exists to avoid; `gea::ArrayBuffer`
58
+ * is a `std::vector`, so resizing is implementable, but a resize INVALIDATES
59
+ * every view's cached base pointer and nothing here republishes those.
60
+ */
61
+ /**
62
+ * The two carriers `core-globals.ts`'s `coreNativeTypes` states for the
63
+ * Encoding Standard's classes, named here so the construct path and that table
64
+ * cannot drift apart on the spelling.
65
+ */
66
+ const textEncoderCarrier = 'gea::runtime::textcodec::TextEncoder';
67
+ const textDecoderCarrier = 'gea::runtime::textcodec::TextDecoder';
68
+ /**
69
+ * The three ambient constructor PROTOCOL NAMES `emitArrayBufferConstruct`,
70
+ * `emitSharedArrayBufferConstruct` and `emitDataViewConstruct` below render.
71
+ *
72
+ * Each dispatches structurally, off the construct operation's own already-
73
+ * resolved result carrier (`result.kind === 'array-buffer'` / `'shared-array-
74
+ * buffer'` / `'data-view'` in `emit-callable.ts`'s `emitConstruct`), never off
75
+ * this name -- so, exactly like the keyed-collection family's own such table,
76
+ * this is not read by the renderers; it is their restatement of which ambient
77
+ * names their own comments already document, exported for
78
+ * `host/native-protocols.ts` to derive a native-boundary claim from.
79
+ */
80
+ export const cppBinaryBufferFamilyConstructorProtocols = [
81
+ 'ArrayBufferConstructor',
82
+ 'SharedArrayBufferConstructor',
83
+ 'DataViewConstructor'
84
+ ];
85
+ export const emitArrayBufferConstruct = (ctx, lines, operation, result) => {
86
+ if (result.ownership !== 'shared-refcount') {
87
+ throw createCppEmitBlockedError('call-abi:construct:array-buffer', `an ArrayBuffer allocation carries ownership "${result.ownership}", but this emitter only spells std::make_shared for "shared-refcount"`);
88
+ }
89
+ const name = defineValue(ctx, operation.result);
90
+ const argument = operation.arguments[0];
91
+ if (!argument) {
92
+ lines.push(`${name} = gea::makeRef<gea::ArrayBuffer>();`);
93
+ return;
94
+ }
95
+ if (operation.arguments.length > 1) {
96
+ throw createCppEmitBlockedError('call-abi:construct:array-buffer', `constructs an ArrayBuffer from ${operation.arguments.length} arguments; the second is ECMAScript 2024's ` +
97
+ '`{ maxByteLength }` resizable-buffer option, which is refused rather than ignored -- a resize reallocates the ' +
98
+ "block and every view's cached base pointer would dangle, and nothing here republishes those");
99
+ }
100
+ const carrier = argument.representation;
101
+ if (carrier.kind !== 'scalar' || carrier.domain !== 'number') {
102
+ throw createCppEmitBlockedError('call-abi:construct:array-buffer', `constructs an ArrayBuffer from a "${carrier.kind}" argument; ECMA-262 25.1.4.1 takes a byte length (a number) and nothing else`);
103
+ }
104
+ lines.push(`${name} = gea::makeRef<gea::ArrayBuffer>(gea::detail::typedArrayLengthIndex(${operandText(ctx, argument)}), std::uint8_t{0});`);
105
+ };
106
+ /** `new SharedArrayBuffer(byteLength)`, ECMA-262 25.2.3.1. */
107
+ export const emitSharedArrayBufferConstruct = (ctx, lines, operation, result) => {
108
+ if (result.ownership !== 'shared-refcount') {
109
+ throw createCppEmitBlockedError('call-abi:construct:shared-array-buffer', `a SharedArrayBuffer allocation carries ownership "${result.ownership}", not shared-refcount`);
110
+ }
111
+ if (operation.arguments.length !== 1) {
112
+ throw createCppEmitBlockedError('call-abi:construct:shared-array-buffer', `constructs a SharedArrayBuffer from ${operation.arguments.length} arguments; only its required byteLength form is implemented`);
113
+ }
114
+ const argument = operation.arguments[0];
115
+ if (!argument || argument.representation.kind !== 'scalar' || argument.representation.domain !== 'number') {
116
+ throw createCppEmitBlockedError('call-abi:construct:shared-array-buffer', 'constructs a SharedArrayBuffer from a non-number byte length');
117
+ }
118
+ lines.push(`${defineValue(ctx, operation.result)} = gea::makeRef<gea::SharedArrayBuffer>(gea::detail::typedArrayLengthIndex(${operandText(ctx, argument)}));`);
119
+ };
120
+ /**
121
+ * `new DataView(buffer, byteOffset?, byteLength?)` -- ECMA-262 25.3.2.1.
122
+ *
123
+ * Three parameters of one shape, so unlike its siblings this one COULD have
124
+ * joined an ABI; it is rendered here anyway, beside the buffer family it
125
+ * belongs to, because the absent-argument rule is the specification's rather
126
+ * than C++'s: an omitted `byteLength` means "to the end of the buffer", which
127
+ * the runtime spells as a NaN (v1's own convention, kept), while an omitted
128
+ * `byteOffset` means zero. A C++ default argument cannot express the first
129
+ * without repeating the buffer's length at the call site.
130
+ */
131
+ export const emitDataViewConstruct = (ctx, lines, operation, result) => {
132
+ if (result.ownership !== 'shared-refcount') {
133
+ throw createCppEmitBlockedError('call-abi:construct:data-view', `a DataView allocation carries ownership "${result.ownership}", but this emitter only spells std::make_shared for "shared-refcount"`);
134
+ }
135
+ const buffer = operation.arguments[0];
136
+ if (!buffer || buffer.representation.kind !== 'array-buffer') {
137
+ throw createCppEmitBlockedError('call-abi:construct:data-view', `constructs a DataView over a "${buffer?.representation.kind ?? 'missing'}" argument; ECMA-262 25.3.2.1 takes an ` +
138
+ 'ArrayBuffer, and a SharedArrayBuffer -- the other type its signature admits -- has a concurrent memory model ' +
139
+ 'this backend has no threads to honor');
140
+ }
141
+ if (operation.arguments.length > 3) {
142
+ throw createCppEmitBlockedError('call-abi:construct:data-view', `constructs a DataView from ${operation.arguments.length} arguments; ECMA-262 25.3.2.1 declares three`);
143
+ }
144
+ const name = defineValue(ctx, operation.result);
145
+ const offset = operation.arguments[1];
146
+ const length = operation.arguments[2];
147
+ const offsetText = offset ? numberArgumentText(ctx, offset, 'byteOffset') : '0.0';
148
+ // An omitted `byteLength` is the buffer's remaining bytes, which the runtime
149
+ // reads a NaN as -- see `gea::DataView`'s constructor. Spelled here rather
150
+ // than defaulted in C++ so the two absences stay distinguishable.
151
+ const lengthText = length ? numberArgumentText(ctx, length, 'byteLength') : 'std::numeric_limits<double>::quiet_NaN()';
152
+ lines.push(`${name} = gea::makeRef<gea::DataView>(${operandText(ctx, buffer)}, ${offsetText}, ${lengthText});`);
153
+ };
154
+ /** One numeric constructor argument, refused by name when the program carries it as anything but a number. */
155
+ const numberArgumentText = (ctx, argument, role) => {
156
+ const carrier = argument.representation;
157
+ if (carrier.kind !== 'scalar' || carrier.domain !== 'number') {
158
+ throw createCppEmitBlockedError('call-abi:construct:data-view', `passes a "${carrier.kind}" as a DataView ${role}, which ECMA-262 25.3.2.1 declares a number`);
159
+ }
160
+ return operandText(ctx, argument);
161
+ };
162
+ /**
163
+ * `new Uint8Array(buffer, byteOffset?, length?)` -- ECMA-262 23.2.5.1's third
164
+ * overload, the one that ALIASES rather than copies.
165
+ *
166
+ * Kept here with the rest of the buffer family rather than inside
167
+ * `emitTypedArrayConstruct`, because what it is about is the block: the result
168
+ * shares `buffer`'s bytes, so a write through either view is seen by the
169
+ * other, which is the whole reason `gea::TypedArray` stores a shared byte
170
+ * vector instead of a `vector<T>` of its own.
171
+ *
172
+ * A `byteOffset` that is not a multiple of the element width, or a length that
173
+ * would run past the block, is a RangeError in the specification and a named
174
+ * abort in `TypedArray::fromBuffer` -- this renders the call and the runtime
175
+ * checks it, rather than this re-deriving the check from constants it may not
176
+ * have.
177
+ */
178
+ export const emitTypedArrayBufferConstruct = (ctx, lines, operation, target) => {
179
+ const buffer = operation.arguments[0];
180
+ if (!buffer)
181
+ throw createCppEmitBlockedError('call-abi:construct:typed-array', 'constructs a typed array view over no buffer');
182
+ const name = defineValue(ctx, operation.result);
183
+ if (operation.arguments.length > 3) {
184
+ throw createCppEmitBlockedError('call-abi:construct:typed-array', `constructs a typed array from ${operation.arguments.length} arguments; ECMA-262 23.2.5.1's buffer overload declares three`);
185
+ }
186
+ const offset = operation.arguments[1];
187
+ const length = operation.arguments[2];
188
+ const offsetText = offset ? `gea::detail::typedArrayLengthIndex(${numberArgumentText(ctx, offset, 'byteOffset')})` : '0';
189
+ // Absent length means "the rest of the block", which the runtime cannot
190
+ // guess from a `0` -- so it is computed here from the buffer the call
191
+ // already names: every remaining byte, divided by this view's element width.
192
+ const lengthText = length
193
+ ? `gea::detail::typedArrayLengthIndex(${numberArgumentText(ctx, length, 'length')})`
194
+ : `(${operandText(ctx, buffer)}->size() - ${offsetText}) / sizeof(${target}::value_type)`;
195
+ const block = operandText(ctx, buffer);
196
+ if (buffer.representation.kind === 'shared-array-buffer') {
197
+ lines.push(`${name} = gea::makeRef<${target}>(${target}::fromSharedBuffer(${block}, ${offsetText}, ${lengthText}));`);
198
+ return;
199
+ }
200
+ lines.push(`${name} = gea::makeRef<${target}>(${target}::fromBuffer(${block}, ${offsetText}, ${lengthText}));`);
201
+ };
202
+ /**
203
+ * ECMA-262 25.1's own members. `byteLength` is the only readable data
204
+ * property; `slice` is the only method with a rendering, and it defers to fuse
205
+ * with its call the way every other prototype method in this backend does.
206
+ *
207
+ * What refuses, by name and with the reason: `resize`/`transfer`/
208
+ * `transferToFixedLength`/`resizable`/`maxByteLength`/`detached`
209
+ * (ECMAScript 2024 -- resizing or detaching the block dangles every view's
210
+ * cached base pointer, and nothing here republishes those) and
211
+ * `ArrayBuffer.isView` (a static, not an instance member, and this backend has
212
+ * no brand test that could answer it without a runtime tag every carrier would
213
+ * have to pay for).
214
+ */
215
+ export const arrayBufferMemberRefusals = new Map([
216
+ [
217
+ 'resize',
218
+ 'ECMAScript 2024 resizable buffers reallocate the block, which dangles the cached base pointer every view over it holds; ' +
219
+ 'nothing here republishes those, so a resize would corrupt every existing view rather than fail'
220
+ ],
221
+ [
222
+ 'resizable',
223
+ 'a resizable ArrayBuffer is not constructible here (see "resize"), so answering this would always be a constant false dressed as a query'
224
+ ],
225
+ ['maxByteLength', 'a resizable ArrayBuffer is not constructible here (see "resize")'],
226
+ [
227
+ 'transfer',
228
+ 'transferring an ArrayBuffer DETACHES the source, after which every view over it must throw on access; this runtime has no detached state and no throw at that boundary'
229
+ ],
230
+ ['transferToFixedLength', 'the same detachment this backend cannot represent -- see "transfer"'],
231
+ ['detached', 'nothing here can detach a buffer (see "transfer"), so this would always be a constant false dressed as a query']
232
+ ]);
233
+ /** `ArrayBuffer.prototype` methods that defer at the `[[Get]]` and fuse with the call that follows. */
234
+ export const arrayBufferPrototypeMethods = new Set(['slice']);
235
+ /**
236
+ * The ArrayBuffer reading of a property access, or `null` when the receiver is
237
+ * not one.
238
+ *
239
+ * A computed key refuses rather than indexing: ECMA-262 25.1 gives an
240
+ * ArrayBuffer no exotic `[[Get]]` at all, so `b[0]` really is `undefined` and
241
+ * answering it with a byte would be a wrong answer, not a missing one.
242
+ */
243
+ /** Whether an ArrayBuffer member read is a deferred prototype method read. Stated once; the renderer and the prototype-read walk both ask it. */
244
+ export const deferredArrayBufferMethodClaim = (staticKeyTexts, receiver, key) => {
245
+ if (receiver.representation.kind !== 'array-buffer')
246
+ return null;
247
+ const staticKey = staticKeyTexts.get(key.value);
248
+ if (staticKey === undefined || staticKey === 'byteLength')
249
+ return null;
250
+ if (!arrayBufferPrototypeMethods.has(staticKey))
251
+ return null;
252
+ return { receiverKind: 'array-buffer', member: staticKey, receiver: { kind: 'operand', operand: receiver }, receiverElement: null };
253
+ };
254
+ export const arrayBufferAccessText = (ctx, receiver, key, result) => {
255
+ if (receiver.representation.kind !== 'array-buffer')
256
+ return null;
257
+ const receiverText = operandText(ctx, receiver);
258
+ // Whether this key IS static, and what it names, decides which member is
259
+ // being read (byteLength, a deferred method, or a refusal by name) versus
260
+ // the final computed-key refusal below -- a claim, not a spelling, so it
261
+ // reads the pre-render map rather than `constantTexts`'s render-time accretion.
262
+ const staticKey = ctx.staticKeyTexts.get(key.value);
263
+ if (staticKey === 'byteLength')
264
+ return `static_cast<double>(${receiverText}->size())`;
265
+ if (wellKnownSymbolMemberOf(ctx, key) === 'toStringTag')
266
+ return cppStringLiteral('ArrayBuffer');
267
+ if (staticKey !== undefined) {
268
+ if (deferredArrayBufferMethodClaim(ctx.staticKeyTexts, receiver, key) !== null) {
269
+ if (result === null) {
270
+ throw createCppEmitBlockedError('property-access:array-buffer:get:false', `"${staticKey}" is an ArrayBuffer.prototype method, and this access publishes no value for its call to consume`);
271
+ }
272
+ return '';
273
+ }
274
+ const stated = arrayBufferMemberRefusals.get(staticKey);
275
+ throw createCppEmitBlockedError('property-access:array-buffer:get:false', stated !== undefined
276
+ ? `"${staticKey}" is an ArrayBuffer member this backend states no rendering for: ${stated}`
277
+ : `an ArrayBuffer property "${staticKey}" is an ordinary property, and ECMA-262 25.1 gives an ArrayBuffer no property table beyond ` +
278
+ 'byteLength and slice');
279
+ }
280
+ throw createCppEmitBlockedError('property-access:array-buffer:get:true', 'an ArrayBuffer has no indexed access at all (ECMA-262 25.1 defines no exotic [[Get]] for one), so a computed key on ' +
281
+ 'it is `undefined` rather than a byte, and this backend refuses it instead of answering the byte');
282
+ };
283
+ /** SharedArrayBuffer has fixed geometry but intentionally no ArrayBuffer-only slice/transfer surface. */
284
+ export const sharedArrayBufferAccessText = (ctx, receiver, key) => {
285
+ if (receiver.representation.kind !== 'shared-array-buffer')
286
+ return null;
287
+ // Same static-key claim as `arrayBufferAccessText` above: the pre-render
288
+ // map, so a render-time-folded text is never mistaken for a static member name.
289
+ const staticKey = ctx.staticKeyTexts.get(key.value);
290
+ const receiverText = operandText(ctx, receiver);
291
+ if (staticKey === 'byteLength')
292
+ return `static_cast<double>(${receiverText}->size())`;
293
+ if (wellKnownSymbolMemberOf(ctx, key) === 'toStringTag')
294
+ return cppStringLiteral('SharedArrayBuffer');
295
+ if (staticKey !== undefined) {
296
+ throw createCppEmitBlockedError('property-access:shared-array-buffer:get:false', `SharedArrayBuffer.${staticKey} is not implemented; only byteLength is admitted`);
297
+ }
298
+ throw createCppEmitBlockedError('property-access:shared-array-buffer:get:true', 'SharedArrayBuffer has no indexed access');
299
+ };
300
+ /**
301
+ * ECMA-262 25.3's `DataView` members: the three geometry accessors, and the
302
+ * sixteen typed accessors this backend renders.
303
+ *
304
+ * `getBigInt64`/`getBigUint64`/`setBigInt64`/`setBigUint64` are deliberately
305
+ * absent and refuse by name. v1 implements all four and returns/accepts a
306
+ * `double`, which loses precision above 2^53 -- silently, which is exactly the
307
+ * failure a BigInt exists to prevent. This backend has no BigInt carrier at
308
+ * all, so refusing is the honest answer.
309
+ */
310
+ const dataViewAccessors = new Map([
311
+ ['getInt8', { spelling: 'getInt8', endian: false, write: false }],
312
+ ['getUint8', { spelling: 'getUint8', endian: false, write: false }],
313
+ ['getInt16', { spelling: 'getInt16', endian: true, write: false }],
314
+ ['getUint16', { spelling: 'getUint16', endian: true, write: false }],
315
+ ['getInt32', { spelling: 'getInt32', endian: true, write: false }],
316
+ ['getUint32', { spelling: 'getUint32', endian: true, write: false }],
317
+ ['getFloat32', { spelling: 'getFloat32', endian: true, write: false }],
318
+ ['getFloat64', { spelling: 'getFloat64', endian: true, write: false }],
319
+ ['setInt8', { spelling: 'setInt8', endian: false, write: true }],
320
+ ['setUint8', { spelling: 'setUint8', endian: false, write: true }],
321
+ ['setInt16', { spelling: 'setInt16', endian: true, write: true }],
322
+ ['setUint16', { spelling: 'setUint16', endian: true, write: true }],
323
+ ['setInt32', { spelling: 'setInt32', endian: true, write: true }],
324
+ ['setUint32', { spelling: 'setUint32', endian: true, write: true }],
325
+ ['setFloat32', { spelling: 'setFloat32', endian: true, write: true }],
326
+ ['setFloat64', { spelling: 'setFloat64', endian: true, write: true }]
327
+ ]);
328
+ const bigIntAccessorRefusal = 'its element is a BigInt, and this backend has no BigInt carrier; v1 answers this one with a `double`, which silently ' +
329
+ 'rounds every value above 2^53 -- exactly what a BigInt exists to prevent -- so it is refused here rather than ported';
330
+ export const dataViewMemberRefusals = new Map([
331
+ ['getBigInt64', bigIntAccessorRefusal],
332
+ ['getBigUint64', bigIntAccessorRefusal],
333
+ ['setBigInt64', bigIntAccessorRefusal],
334
+ ['setBigUint64', bigIntAccessorRefusal]
335
+ ]);
336
+ /** `DataView.prototype` methods that defer at the `[[Get]]` and fuse with the call that follows. */
337
+ export const dataViewPrototypeMethods = new Set([...dataViewAccessors.keys()]);
338
+ /** Whether a DataView member read is a deferred prototype method read. Stated once; the renderer and the prototype-read walk both ask it. */
339
+ export const deferredDataViewMethodClaim = (staticKeyTexts, receiver, key) => {
340
+ if (receiver.representation.kind !== 'data-view')
341
+ return null;
342
+ const staticKey = staticKeyTexts.get(key.value);
343
+ if (staticKey === undefined || staticKey === 'byteLength' || staticKey === 'byteOffset' || staticKey === 'buffer')
344
+ return null;
345
+ if (!dataViewPrototypeMethods.has(staticKey))
346
+ return null;
347
+ return { receiverKind: 'data-view', member: staticKey, receiver: { kind: 'operand', operand: receiver }, receiverElement: null };
348
+ };
349
+ /** The DataView reading of a property access, or `null` when the receiver is not one. */
350
+ export const dataViewAccessText = (ctx, receiver, key, result) => {
351
+ if (receiver.representation.kind !== 'data-view')
352
+ return null;
353
+ const receiverText = operandText(ctx, receiver);
354
+ // Same static-key claim as `arrayBufferAccessText` above: the pre-render
355
+ // map, so a render-time-folded text is never mistaken for a static member name.
356
+ const staticKey = ctx.staticKeyTexts.get(key.value);
357
+ if (wellKnownSymbolMemberOf(ctx, key) === 'toStringTag')
358
+ return cppStringLiteral('DataView');
359
+ if (staticKey === 'byteLength')
360
+ return `${receiverText}->byteLength()`;
361
+ if (staticKey === 'byteOffset')
362
+ return `${receiverText}->byteOffset()`;
363
+ if (staticKey === 'buffer')
364
+ return `${receiverText}->buffer()`;
365
+ if (staticKey !== undefined) {
366
+ if (deferredDataViewMethodClaim(ctx.staticKeyTexts, receiver, key) !== null) {
367
+ if (result === null) {
368
+ throw createCppEmitBlockedError('property-access:data-view:get:false', `"${staticKey}" is a DataView.prototype method, and this access publishes no value for its call to consume`);
369
+ }
370
+ return '';
371
+ }
372
+ const stated = dataViewMemberRefusals.get(staticKey);
373
+ throw createCppEmitBlockedError('property-access:data-view:get:false', stated !== undefined
374
+ ? `"${staticKey}" is a DataView member this backend states no rendering for: ${stated}`
375
+ : `a DataView property "${staticKey}" is an ordinary property, and ECMA-262 25.3 gives a DataView no property table beyond ` +
376
+ 'buffer, byteLength, byteOffset and its typed accessors');
377
+ }
378
+ throw createCppEmitBlockedError('property-access:data-view:get:true', 'a DataView has no indexed access (ECMA-262 25.3 defines no exotic [[Get]] for one); every read goes through a named ' +
379
+ 'accessor whose width and byte order it states');
380
+ };
381
+ /**
382
+ * The DataView call, fused with its deferred `[[Get]]`.
383
+ *
384
+ * `littleEndian` is the point of this family and is passed EXPLICITLY at every
385
+ * width that has one, never left to a C++ default: ECMA-262 25.3.1.1 defaults
386
+ * it to `false` (BIG-endian), which is the opposite of every machine this
387
+ * runs on, so an omission that silently became the host's own order would read
388
+ * different numbers from the same bytes on different targets.
389
+ */
390
+ export const dataViewCallText = (ctx, member, receiver, args) => {
391
+ const accessor = dataViewAccessors.get(member);
392
+ if (!accessor) {
393
+ throw createCppEmitBlockedError(`host-member-call:DataView.${member}`, `"${member}" was recorded as a deferred DataView read but this file renders no call for it`);
394
+ }
395
+ const fixed = accessor.write ? 2 : 1;
396
+ const offsetAndValue = args.slice(0, fixed).map((argument) => operandText(ctx, argument));
397
+ if (offsetAndValue.length < fixed) {
398
+ throw createCppEmitBlockedError(`host-member-call:DataView.${member}`, `DataView.prototype.${member} needs ${fixed} argument(s) and this call passes ${offsetAndValue.length}`);
399
+ }
400
+ if (!accessor.endian) {
401
+ if (args.length > fixed) {
402
+ throw createCppEmitBlockedError(`host-member-call:DataView.${member}`, `DataView.prototype.${member} is single-byte and takes no littleEndian argument, but this call passes one`);
403
+ }
404
+ return `${receiver}->${accessor.spelling}(${offsetAndValue.join(', ')})`;
405
+ }
406
+ const endian = args[fixed];
407
+ // ECMA-262 25.3.1.1 step 6: `ToBoolean(isLittleEndian)`, with an omitted
408
+ // argument reading `false`. Rendered as the literal so the emitted call
409
+ // states the order it means.
410
+ const endianText = endian === undefined ? 'false' : booleanArgumentText(ctx, endian, member);
411
+ return `${receiver}->${accessor.spelling}(${[...offsetAndValue, endianText].join(', ')})`;
412
+ };
413
+ const booleanArgumentText = (ctx, argument, member) => {
414
+ const carrier = argument.representation;
415
+ if (carrier.kind === 'scalar' && carrier.domain === 'boolean')
416
+ return operandText(ctx, argument);
417
+ throw createCppEmitBlockedError(`host-member-call:DataView.${member}`, `DataView.prototype.${member} received its littleEndian argument as "${carrier.kind}"; ECMA-262 25.3.1.1 applies ToBoolean ` +
418
+ 'to it, and this backend installs that conversion for a boolean carrier only');
419
+ };
420
+ /**
421
+ * A typed array's BUFFER-shaped members: geometry accessors, element width, and the
422
+ * four methods that operate on ranges of the block rather than on one element.
423
+ *
424
+ * Split from `typedArrayAccessText`'s indexed reading (emit-carrier-members.ts)
425
+ * on that same line: an index is about an element and these are about the
426
+ * block, and the block is what this file is about.
427
+ */
428
+ export const typedArrayBufferMembers = new Set(['buffer', 'byteLength', 'byteOffset', 'BYTES_PER_ELEMENT']);
429
+ /** `%TypedArray%.prototype` methods this file renders, which defer at the `[[Get]]` and fuse with the call. */
430
+ export const typedArrayPrototypeMethods = new Set(['set', 'subarray', 'slice', 'fill', 'toString']);
431
+ /** The buffer-shaped reading of a typed-array property, or `null` when the key is not one of them. */
432
+ export const typedArrayBufferMemberText = (receiverText, representation, key) => {
433
+ if (key === 'buffer')
434
+ return representation.buffer === 'shared-array-buffer' ? `${receiverText}->sharedBuffer()` : `${receiverText}->buffer()`;
435
+ if (key === 'byteLength')
436
+ return `${receiverText}->byteLength()`;
437
+ if (key === 'byteOffset')
438
+ return `${receiverText}->byteOffset()`;
439
+ // The same storage spelling drives TypedArray<T> and this immutable element
440
+ // width. Reading an empty/subarray view must not divide byteLength by length.
441
+ // Both concrete receivers and selected union arms use this member authority.
442
+ if (key === 'BYTES_PER_ELEMENT')
443
+ return `static_cast<double>(sizeof(${typedArrayElementSpelling(representation)}))`;
444
+ return null;
445
+ };
446
+ /**
447
+ * The typed-array range call, fused with its deferred `[[Get]]`.
448
+ *
449
+ * An omitted `end` is rendered as the receiver's own `length()` rather than
450
+ * defaulted in the runtime, because only this call site knows whether an
451
+ * absence was `end` or `start` -- the runtime's relative-index fold reads a
452
+ * `NaN` as 0, which is right for a start and wrong for an end.
453
+ *
454
+ * `fill` is spelled as a comma expression: ECMA-262 23.2.3.9 returns the view
455
+ * itself, and the runtime's `fill` is `void` because a `shared_ptr`-owned
456
+ * object cannot hand out its own owner. The receiver's text is already here,
457
+ * so `(a->fill(...), a)` is the same value with nothing to own.
458
+ */
459
+ export const typedArrayCallText = (ctx, member, receiver, element, args) => {
460
+ const rangeStart = (index) => (args[index] === undefined ? '0.0' : operandText(ctx, args[index]));
461
+ const rangeEnd = (index) => args[index] === undefined ? `${receiver}->length()` : operandText(ctx, args[index]);
462
+ // ECMA-262 23.2.3.32: `%TypedArray%.prototype.toString` IS
463
+ // `Array.prototype.toString`, which is `join()` with the default separator
464
+ // -- a comma between elements and nothing else. The runtime's own
465
+ // `join(Ref<TypedArray<E>>)` overload is that algorithm, written beside the
466
+ // Array one so a typed array and an Array cannot answer differently; this
467
+ // only routes the explicit member to it.
468
+ //
469
+ // Node's `Buffer` overrides `toString` to DECODE its bytes, which is a
470
+ // different function on a different type. A receiver whose declared type is
471
+ // a Buffer reaches that class's own member; a receiver declared
472
+ // `Uint8Array` -- which is what `@hono/node-server`'s `websocket-types.ts`
473
+ // declares its close `reason` as -- gets the specification's answer, and
474
+ // this renders the type the program actually stated.
475
+ if (member === 'toString') {
476
+ if (args.length !== 0) {
477
+ throw createCppEmitBlockedError('host-member-call:TypedArray.toString', `%TypedArray%.prototype.toString takes no arguments and this call passes ${args.length}`);
478
+ }
479
+ return `gea::runtime::array::join(${receiver})`;
480
+ }
481
+ if (member === 'subarray' || member === 'slice') {
482
+ return `${receiver}->${member}(${rangeStart(0)}, ${rangeEnd(1)})`;
483
+ }
484
+ if (member === 'fill') {
485
+ const value = args[0];
486
+ if (!value)
487
+ throw createCppEmitBlockedError('host-member-call:TypedArray.fill', 'TypedArray.prototype.fill needs a value argument and this call passes none');
488
+ return `(${receiver}->fill(${operandText(ctx, value)}, ${rangeStart(1)}, ${rangeEnd(2)}), ${receiver})`;
489
+ }
490
+ // `set`'s template, and which sources it copies from, are stated once in
491
+ // `representation/host-templates.ts` -- the IR's frame for this call reads
492
+ // the same predicates, so the two cannot describe different C++.
493
+ if (typedArrayMemberTemplateOf(member) !== 'typed-array-set')
494
+ throw createCppEmitBlockedError('host-member-call:TypedArray.set', `TypedArray.prototype.${member} was deferred to a typed-array call, and no template here renders it`);
495
+ const source = args[0];
496
+ if (!source)
497
+ throw createCppEmitBlockedError('host-member-call:TypedArray.set', 'TypedArray.prototype.set needs a source argument and this call passes none');
498
+ const offset = args[1] === undefined ? '0.0' : operandText(ctx, args[1]);
499
+ const carrier = source.representation;
500
+ // Two sources, two ECMA-262 algorithms (23.2.3.26 steps 5 and 6), and the
501
+ // difference is real: a typed-array source is read through its own element
502
+ // type, while an Array source may hold HOLES that read as `undefined`.
503
+ const single = typedArraySetSourceOf(carrier);
504
+ if (single === 'typed-array') {
505
+ return `(${receiver}->setFrom(*${operandText(ctx, source)}, ${offset}), gea::Undefined{})`;
506
+ }
507
+ if (single === 'number-array') {
508
+ return `(${receiver}->setFromArray(${operandText(ctx, source)}, ${offset}), gea::Undefined{})`;
509
+ }
510
+ if (carrier.kind === 'tagged-union' && typedArraySetSourceAccepted(carrier)) {
511
+ const sourceText = operandText(ctx, source);
512
+ const branches = carrier.arms.map((arm, index) => {
513
+ const value = `${sourceText}.get<${index}>()`;
514
+ if (typedArraySetSourceOf(arm.value) === 'typed-array')
515
+ return `(${receiver}->setFrom(*${value}, ${offset}), gea::Undefined{})`;
516
+ return `(${receiver}->setFromArray(${value}, ${offset}), gea::Undefined{})`;
517
+ });
518
+ return branches.reduceRight((rest, branch, index) => (index === branches.length - 1 ? branch : `${sourceText}.is<${index}>() ? ${branch} : (${rest})`), '');
519
+ }
520
+ throw createCppEmitBlockedError('host-member-call:TypedArray.set', `TypedArray.prototype.set of element "${element}" received a "${carrier.kind}" source; ECMA-262 23.2.3.26 takes a typed ` +
521
+ 'array or an array-like of numbers, and any other array-like needs the generic length-and-index protocol this backend does not lower');
522
+ };
523
+ /** The element spelling a deferred typed-array read carries to its call, so `set`'s refusal can name it. */
524
+ export const typedArrayElementSpelling = (representation) => cppScalarType(representation.element);
525
+ /** The pointee a typed-array construction allocates -- shared by both construct paths so the two cannot spell it differently. */
526
+ export const typedArrayTargetSpelling = (representation) => cppTypeOf({ ...representation, ownership: 'owned' });
527
+ /**
528
+ * `new TextEncoder()` / `new TextDecoder([label])`, or `null` when this
529
+ * construction is not one of the two.
530
+ *
531
+ * Rendered here rather than through the host CONSTRUCTOR table
532
+ * (`ctx.hosts.constructors`) for a reason the table's own shape states: its
533
+ * fixed-arity rows are checked against the checker's PADDED frame, and
534
+ * `new (label?: string, options?: TextDecoderOptions)` pads to two arguments
535
+ * for every call site including `new TextDecoder()`. A `'pass-through'` row
536
+ * would take any count and hand the options bag to C++, where the failure is
537
+ * a template error rather than a refusal naming what is missing. Counting the
538
+ * arguments the program actually WROTE is the only way both to accept the two
539
+ * real forms and to refuse the third by name, which is the same reason
540
+ * `ArrayBuffer` and `DataView` above are rendered here and not stated as rows.
541
+ */
542
+ export const emitTextCodecConstruct = (ctx, lines, operation) => {
543
+ const result = operation.result.representation;
544
+ if (result.kind !== 'native-handle')
545
+ return false;
546
+ const spelling = result.native;
547
+ if (spelling !== textEncoderCarrier && spelling !== textDecoderCarrier)
548
+ return false;
549
+ const count = operation.arguments.length;
550
+ if (spelling === textEncoderCarrier) {
551
+ // Encoding Standard 6.1: `new TextEncoder()` takes nothing, and the
552
+ // checker's own signature says so, so any argument at all is a program
553
+ // this backend has no reading of rather than one to silently discard.
554
+ if (count !== 0) {
555
+ throw createCppEmitBlockedError(`host-invocation:${textEncoderCarrier}`, `constructs a TextEncoder from ${count} argument(s); the Encoding Standard's constructor takes none`);
556
+ }
557
+ lines.push(`${defineValue(ctx, operation.result)} = ${textEncoderCarrier}{};`);
558
+ return true;
559
+ }
560
+ if (count > 1) {
561
+ throw createCppEmitBlockedError(`host-invocation:${textDecoderCarrier}`, `constructs a TextDecoder from ${count} arguments; the second is the ` +
562
+ '`{ fatal, ignoreBOM }` options bag, and reading it needs either the boxed dynamic carrier this compiler forbids or a ' +
563
+ 'compile-time probe of a program-generated struct declared after the runtime header -- so it is refused rather than ' +
564
+ 'ignored, which would silently decode malformed input the opposite way');
565
+ }
566
+ const label = operation.arguments[0];
567
+ // The label is validated, not stored: `TextDecoder::create` accepts exactly
568
+ // the Encoding Standard's three utf-8 labels and aborts by name on any
569
+ // other, which is where the specification raises a RangeError.
570
+ const argument = label === undefined ? '' : operandText(ctx, label);
571
+ lines.push(`${defineValue(ctx, operation.result)} = ${textDecoderCarrier}::create(${argument});`);
572
+ return true;
573
+ };