@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,853 @@
1
+ import { representationKey } from '../../../representation/model.js';
2
+ import { recordLayoutPolicyOf } from '../../../projection/fields.js';
3
+ import { createCppEmitBlockedError, defineValue, operandText, wellKnownSymbolMemberOfKey } from '../emit-context.js';
4
+ import { memberAccessOperator } from '../emit-carrier-members.js';
5
+ import { boxedValueText, propertyKeyText, unboxedReadText } from '../emit-dynamic-properties.js';
6
+ import { alignedValueText } from '../emit-narrowing.js';
7
+ import { toStringText } from '../emit-tostring.js';
8
+ import { cppRecordFieldKeyIsSymbol, cppRecordFieldName } from '../types.js';
9
+ import { cppRecordIndexSidecarNameFor } from '../records.js';
10
+ import { cppConstructPatternEntry, cppRegExpNativeTypes, cppStringObjectNativeType } from '../regexp-types.js';
11
+ import { arrayPrototypeMethods } from './emit-prototype-array.js';
12
+ /**
13
+ * `RegExp.prototype`, `RegExpExecArray` and `RegExpMatchArray`, as this
14
+ * backend renders them.
15
+ *
16
+ * The mechanism for the two METHODS is `emit-prototype-invoke.ts`'s deferred
17
+ * `[[Get]]` fused with the call that follows -- the same one String and Array
18
+ * use, for the same reason: `re.test` on its own is a function value bound to
19
+ * a receiver, and this backend mints no such value.
20
+ *
21
+ * The DATA members are rendered here and now, because on this carrier they
22
+ * really are native slots. `lastIndex` is deliberately different: it is the
23
+ * one writable own data property, so its cell retains a `gea::Value` and the
24
+ * typed read/write paths use the same native property operations as computed
25
+ * paths. Pattern itself remains a native shared reference throughout.
26
+ *
27
+ * Nothing here is allowed to fall through to the generic struct-member path.
28
+ * That path emits `receiver->key` for ANY key, so an unimplemented member
29
+ * would reach clang as an unknown-member error instead of a refusal naming the
30
+ * member -- which is the exact bug this lane exists to fix on the String side.
31
+ */
32
+ /** Which of the three regular-expression carriers an operand holds, or `null` for anything else. */
33
+ export const regexpRoleOf = (representation) => {
34
+ if (representation.kind !== 'native-record-ref' || representation.native === null)
35
+ return null;
36
+ if (representation.native === cppRegExpNativeTypes.pattern)
37
+ return 'pattern';
38
+ if (representation.native === cppRegExpNativeTypes['exec-result'])
39
+ return 'exec-result';
40
+ if (representation.native === cppRegExpNativeTypes['match-result'])
41
+ return 'match-result';
42
+ return null;
43
+ };
44
+ /** The record layout an object-shaped pattern argument exposes, or `null` for a carrier whose members this cannot read. */
45
+ const objectPatternLayoutOf = (ctx, carrier) => {
46
+ if (carrier.kind === 'record')
47
+ return { fields: carrier.fields, accessors: carrier.accessors, ownership: carrier.ownership, indexes: [] };
48
+ // An object that also declares an index signature is still the ordinary
49
+ // object 22.2.4.1 step 6 reads `source`/`flags` off -- the index is where
50
+ // its OTHER keys live, and `@@match` is one of them whenever the object
51
+ // states it with a computed symbol key. Declining the whole carrier for
52
+ // having an index refused `{ [Symbol.match]: false, source, toString() }`
53
+ // outright.
54
+ if (carrier.kind === 'record-with-index')
55
+ return { fields: carrier.fields, accessors: [], ownership: carrier.ownership, indexes: carrier.indexes };
56
+ // A `native` name means a compiler-owned layout (Pattern, Date, a recursive
57
+ // wrapper) or a host struct, none of which is the ordinary object 22.2.4.1
58
+ // step 6 reads `source`/`flags` off.
59
+ if (carrier.kind !== 'native-record-ref' || carrier.native !== null)
60
+ return null;
61
+ const layouts = recordLayoutPolicyOf(ctx.deriver, ctx.classes);
62
+ const fields = layouts.forShape(carrier.shapeId);
63
+ if (fields === null)
64
+ return null;
65
+ return { fields, accessors: layouts.accessorsForShape?.(carrier.shapeId) ?? [], ownership: carrier.ownership, indexes: [] };
66
+ };
67
+ /**
68
+ * One `Get(pattern, key)` of 22.2.4.1 step 6, already folded through
69
+ * `RegExpInitialize`'s own ToString of the result (22.2.3.2 steps 1 and 3).
70
+ *
71
+ * A key the shape does not declare is `undefined`, which `RegExpInitialize`
72
+ * turns into the empty string -- so an object with `[Symbol.match]` but no
73
+ * `flags` really does construct an unflagged pattern, and that is an answer,
74
+ * not a gap. A key backed by an ACCESSOR or by a field that may be absent is
75
+ * not: the first is a call this has no receiver-binding machinery for and the
76
+ * second makes "declared" and "present" different questions, so both refuse.
77
+ */
78
+ const objectPatternMemberText = (ctx, layout, text, key) => {
79
+ if (layout.accessors.some((accessor) => accessor.key === key))
80
+ return null;
81
+ const field = layout.fields.find((candidate) => candidate.key === key);
82
+ if (field === undefined)
83
+ return 'std::string()';
84
+ if (!field.required)
85
+ return null;
86
+ return toStringText(`${text}${memberAccessOperator(layout.ownership)}${cppRecordFieldName(key)}`, field.value, ctx.classes, ctx.deriver);
87
+ };
88
+ /**
89
+ * ECMA-262 22.2.4.1 steps 5-7 for a pattern argument that is an ordinary
90
+ * OBJECT -- neither a string nor a value already carrying `[[RegExpMatcher]]`.
91
+ *
92
+ * Step 5 has already been answered `false` by the caller: a value with the
93
+ * internal slot is exactly this backend's `Pattern` carrier, which the caller
94
+ * spells directly. What remains is the choice between step 6 and step 7, and
95
+ * it turns on `patternIsRegExp` -- `IsRegExp` (22.1.3.6), which for an object
96
+ * without the slot is `ToBoolean(Get(pattern, @@match))`.
97
+ *
98
+ * That is a RUNTIME question here even though the shape is fully static:
99
+ * `{ [Symbol.match]: true }` gives the member the widened type `boolean`, so
100
+ * no carrier proves which branch runs and both are rendered. The WHOLE
101
+ * construction is what the conditional selects, not the two arguments
102
+ * separately: `patternIsRegExp` is computed once at step 2 in the language, and
103
+ * a conditional per argument would read the member twice, in an order C++ does
104
+ * not fix, with step 7's ToString -- potentially a call to the object's own
105
+ * `toString` -- able to run between the two reads and change the second.
106
+ *
107
+ * A shape that declares no `@@match` member at all answers `IsRegExp` false
108
+ * statically, and only step 7 is rendered.
109
+ *
110
+ * `null` is returned for anything this cannot answer exactly, leaving the
111
+ * caller's own refusal to name the carrier.
112
+ */
113
+ export const regExpConstructionFromObject = (ctx, argument, flagsArgument) => {
114
+ const carrier = argument.representation;
115
+ const layout = objectPatternLayoutOf(ctx, carrier);
116
+ if (layout === null)
117
+ return null;
118
+ // Every text this composes is a `std::string`, so a flags argument that is
119
+ // not already one would have to be ToStringed into the same conditional; a
120
+ // non-string carrier there leaves the whole construction to the caller's
121
+ // refusal rather than answering half of it.
122
+ if (flagsArgument !== null && flagsArgument.representation.kind !== 'string')
123
+ return null;
124
+ const flagsText = flagsArgument === null ? null : operandText(ctx, flagsArgument);
125
+ const text = operandText(ctx, argument);
126
+ // Step 7 reaches `RegExpInitialize` with the object itself, whose ToString
127
+ // is the ONE authority every other spelling of that operation uses.
128
+ const stringified = toStringText(text, carrier, ctx.classes, ctx.deriver);
129
+ const absentFlags = flagsText ?? 'std::string()';
130
+ const match = layout.fields.find((field) => cppRecordFieldKeyIsSymbol(field.key) && wellKnownSymbolMemberOfKey(ctx.wellKnownSymbols, field.key) === 'match');
131
+ const initialize = (pattern, flags) => `${cppConstructPatternEntry}(${pattern}, ${flags})`;
132
+ // A symbol-keyed index is where a computed `[Symbol.match]` key lands, so
133
+ // an object carrying one has NOT been shown to lack `@@match` -- reading it
134
+ // as absent and going straight to step 7 would answer a question the layout
135
+ // never settled. `SymbolDictionary::read` returns a default-constructed
136
+ // value for a key it does not hold, which for a boolean table is `false`:
137
+ // exactly the `undefined`-is-falsy the specification asks for, so presence
138
+ // and value collapse into the one read the condition already needs.
139
+ //
140
+ // Only a boolean table is admitted, for the same reason the named-field
141
+ // branch below admits only a boolean field: any other carrier makes the
142
+ // condition a ToBoolean of an arbitrary value, which is a different
143
+ // operation than this composes.
144
+ const symbolIndex = layout.indexes.find((index) => index.key === 'symbol');
145
+ const indexedMatch = match === undefined && symbolIndex !== undefined && symbolIndex.value.kind === 'scalar' && symbolIndex.value.domain === 'boolean'
146
+ ? `${text}${memberAccessOperator(layout.ownership)}${cppRecordIndexSidecarNameFor(symbolIndex, layout.indexes)}` +
147
+ '.read(gea::wellKnownSymbol(gea::detail::WellKnownSymbol::Match))'
148
+ : null;
149
+ if (match === undefined && symbolIndex !== undefined && indexedMatch === null)
150
+ return null;
151
+ if (match === undefined && indexedMatch === null)
152
+ return stringified === null ? null : initialize(stringified, absentFlags);
153
+ // The presence bit and the value are two different facts; a member that may
154
+ // be absent would need both tested, so it refuses rather than reading a
155
+ // field whose storage the language says is not there.
156
+ if (match !== undefined && (!match.required || match.value.kind !== 'scalar' || match.value.domain !== 'boolean'))
157
+ return null;
158
+ const source = objectPatternMemberText(ctx, layout, text, 'source');
159
+ // Step 6.b: the object's own `flags` is consulted only when the CALL passed
160
+ // none. A supplied flags argument is step 6.c and wins in both arms.
161
+ const ownFlags = flagsText === null ? objectPatternMemberText(ctx, layout, text, 'flags') : flagsText;
162
+ if (stringified === null || source === null || ownFlags === null)
163
+ return null;
164
+ const condition = match !== undefined ? `${text}${memberAccessOperator(layout.ownership)}${cppRecordFieldName(match.key)}` : indexedMatch;
165
+ return `(${condition} ? ${initialize(source, ownFlags)} : ${initialize(stringified, absentFlags)})`;
166
+ };
167
+ /**
168
+ * The ten `RegExp.prototype` accessors (ECMA-262 22.2.6), each a real member of
169
+ * the ported `Pattern` under the interface's own name.
170
+ *
171
+ * `lastIndex` is in the same table as the other nine and is the only one that
172
+ * is not read-only -- 22.2.6.9 makes it an own writable data property while
173
+ * the rest are prototype getters. Both directions land on the same C++ member,
174
+ * so the read table is the write table.
175
+ */
176
+ const patternDataMembers = new Set([
177
+ 'source',
178
+ 'flags',
179
+ 'lastIndex',
180
+ 'global',
181
+ 'ignoreCase',
182
+ 'multiline',
183
+ 'sticky',
184
+ 'unicode',
185
+ 'dotAll',
186
+ 'hasIndices'
187
+ ]);
188
+ /**
189
+ * The `RegExp.prototype` methods this backend renders.
190
+ *
191
+ * Deliberately absent, each refused BY NAME at its access below:
192
+ *
193
+ * - `compile` -- ECMA-262 B.2.3, a legacy Annex B method that RE-INITIALIZES an
194
+ * existing pattern in place. Nothing here has been built for it, and it is
195
+ * the one member whose whole purpose is to make a pattern object change
196
+ * identity of behaviour mid-life.
197
+ * - the six `Symbol.match`/`Symbol.matchAll`/`Symbol.replace`/`Symbol.search`/
198
+ * `Symbol.split`/`Symbol.species` members -- these are reached by SYMBOL
199
+ * key, so they arrive with no constant text at all and are refused by the
200
+ * non-constant branch. The String-side members that dispatch THROUGH them
201
+ * (`s.match(re)` and friends) are rendered, directly, in
202
+ * `emit-prototype-string.ts`: the indirection through a well-known symbol is
203
+ * an extension point this backend does not install, not the operation.
204
+ */
205
+ const patternMethods = new Set(['test', 'exec', 'toString']);
206
+ /**
207
+ * The NAMED members of the two match-result interfaces.
208
+ *
209
+ * `length` is named here because match-result access is routed through this
210
+ * native member table. `MatchResult` inherits `ArrayObject<string>`, so its
211
+ * value comes from the base carrier's `length()` method.
212
+ *
213
+ * `indices` (the ES2022 `d` flag, `RegExpIndicesArray`) is deliberately
214
+ * absent and refused by name: it needs a per-capture `[start, end]` tuple
215
+ * array that neither this runtime nor v1's builds, and `std::regex` does not
216
+ * report group positions for non-participating groups at all.
217
+ */
218
+ const resultDataMembers = new Set(['index', 'input', 'length', 'groups']);
219
+ /** Whether `text` is a canonical array index -- a run of digits with no sign, point, or leading zero. */
220
+ const canonicalCaptureSlot = (text) => {
221
+ if (text.length === 0)
222
+ return false;
223
+ if (text.length > 1 && text.charCodeAt(0) === 48)
224
+ return false;
225
+ for (let index = 0; index < text.length; index += 1) {
226
+ const code = text.charCodeAt(index);
227
+ if (code < 48 || code > 57)
228
+ return false;
229
+ }
230
+ return true;
231
+ };
232
+ /** Whether a read's own carrier is `string`, or an optional whose payload is. */
233
+ const capturePayloadOf = (representation) => {
234
+ if (representation === undefined)
235
+ return null;
236
+ if (representation.kind === 'string')
237
+ return 'string';
238
+ if (representation.kind === 'optional' && representation.payload.kind === 'string')
239
+ return 'optional-string';
240
+ return null;
241
+ };
242
+ /**
243
+ * A capture slot read -- `m[0]`, `m[1]`, `m[i]`.
244
+ *
245
+ * Rendered through `capture`/`capturedOrAbsent` rather than as a member or a
246
+ * sidecar lookup, and the choice between the two is the READ's own carrier,
247
+ * never a preference. `RegExpExecArray extends Array<string>`, so an ordinary
248
+ * program types `m[1]` as `string` and cannot observe a non-participating
249
+ * group's `undefined` at all; a program compiled with
250
+ * `noUncheckedIndexedAccess` types the same read `string | undefined` and can.
251
+ * Answering the first with an optional would not compile, and answering the
252
+ * second with the empty string would be a silently wrong answer for a case the
253
+ * program is written to handle -- so both spellings exist and the plan picks.
254
+ */
255
+ const captureReadText = (role, receiverText, slotText, result) => {
256
+ const payload = capturePayloadOf(result);
257
+ if (payload === null) {
258
+ throw createCppEmitBlockedError(`property-access:${role}:get:true`, `a capture slot of a ${role} carries "${result ? representationKey(result) : 'nothing'}"; ECMA-262 22.2.7.2 puts a string or \`undefined\` in ` +
259
+ 'every slot, so this backend renders the read only into a string or an optional string');
260
+ }
261
+ return `${receiverText}->${payload === 'string' ? 'capture' : 'capturedOrAbsent'}(${slotText})`;
262
+ };
263
+ /**
264
+ * A `[[Get]]` off any of the three regular-expression carriers, or `null` when
265
+ * the receiver is not one -- in which case `emitGet` carries on unchanged.
266
+ *
267
+ * An empty string is a deferred method read, the same convention every other
268
+ * prototype table in this directory uses.
269
+ */
270
+ /**
271
+ * Whether a RegExp-family member read is a deferred prototype-method read, and
272
+ * what it is.
273
+ *
274
+ * Two shapes under one claim, because `regexpRoleOf` is what tells them apart:
275
+ * a PATTERN's own `RegExp.prototype` method, and an `Array.prototype` method
276
+ * reached through a match RESULT, which really is an Array in the language
277
+ * (22.1.3.13) and is read through `gea::runtime::regex::matchElements` -- a
278
+ * view over the receiver, which is why the receiver travels as its own kind
279
+ * rather than as pre-rendered text.
280
+ *
281
+ * Stated once; `regexpMemberText` and the prototype-read walk both ask it.
282
+ */
283
+ export const deferredRegexpMethodClaim = (
284
+ // Every caller passes `ctx.staticKeyTexts`; named for that so nobody hands
285
+ // this the render-widened `ctx.constantTexts` by mistake.
286
+ staticKeyTexts, receiver, key) => {
287
+ const role = regexpRoleOf(receiver.representation);
288
+ if (role === null)
289
+ return null;
290
+ const staticKey = staticKeyTexts.get(key.value);
291
+ if (staticKey === undefined)
292
+ return null;
293
+ if (role === 'pattern') {
294
+ if (staticKey === 'lastIndex' || patternDataMembers.has(staticKey) || !patternMethods.has(staticKey))
295
+ return null;
296
+ return { receiverKind: 'regexp', member: staticKey, receiver: { kind: 'operand', operand: receiver }, receiverElement: null };
297
+ }
298
+ if (resultDataMembers.has(staticKey) || canonicalCaptureSlot(staticKey))
299
+ return null;
300
+ if (!arrayPrototypeMethods.has(staticKey))
301
+ return null;
302
+ const element = { kind: 'string' };
303
+ return {
304
+ receiverKind: 'array-object',
305
+ member: staticKey,
306
+ receiver: { kind: 'match-elements', operand: receiver },
307
+ receiverElement: representationKey(element),
308
+ arrayCarrier: { kind: 'array-object', element, ownership: 'shared-refcount', extension: null }
309
+ };
310
+ };
311
+ export const regexpMemberText = (ctx, receiver, key, result, resultRepresentation,
312
+ // The caller's own narrowing reconciliation, applied to the DATA members
313
+ // and to nothing else. A read of `m.groups` guarded by `m.groups !==
314
+ // undefined` publishes the payload carrier while the field stores the
315
+ // optional, and that is exactly the reconciliation the generic struct-member
316
+ // path already performs -- this branch preempts that path, so it has to
317
+ // carry the same obligation rather than emit a raw member access that then
318
+ // fails to assign. The capture reads below do NOT go through it: they choose
319
+ // between `capture` and `capturedOrAbsent` on the published carrier already,
320
+ // and are not fields at all.
321
+ narrow) => {
322
+ const role = regexpRoleOf(receiver.representation);
323
+ if (role === null)
324
+ return null;
325
+ const receiverText = operandText(ctx, receiver);
326
+ // A claim, not a fold: this decides whether the access is a STATIC member at
327
+ // all, so it must not see a key text `constantTexts` only holds because the
328
+ // render minted it (a folded `typeof` reaching here via a computed key).
329
+ const staticKey = ctx.staticKeyTexts.get(key.value);
330
+ if (staticKey === undefined) {
331
+ // A computed key is admissible on a match result and only there: an
332
+ // element read (`m[i]`) is a capture slot, which this backend renders. A
333
+ // computed key on a PATTERN would be a property lookup on an object whose
334
+ // members are all statically known, so there is nothing for it to find.
335
+ if (role !== 'pattern' && key.representation.kind === 'scalar' && key.representation.domain === 'number') {
336
+ return captureReadText(role, receiverText, operandText(ctx, key), resultRepresentation);
337
+ }
338
+ if (role === 'pattern') {
339
+ const site = 'a computed own-property read on a RegExp';
340
+ return unboxedReadText(resultRepresentation ?? { kind: 'dynamic', reason: 'declared-any-never-narrowed' }, `gea::runtime::regex::dynamicGet(${receiverText}, ${propertyKeyText(ctx, key, site)})`, site);
341
+ }
342
+ throw createCppEmitBlockedError(`property-access:${representationKey(receiver.representation)}:get:true`, `a ${role} property access keyed by a "${representationKey(key.representation)}" carrier has no ToPropertyKey conversion here; the well-known-symbol ` +
343
+ 'members (Symbol.match, Symbol.replace, Symbol.search, Symbol.split, Symbol.matchAll, Symbol.species) are the extension point this backend does not ' +
344
+ 'install -- the String members that dispatch through them are rendered directly instead');
345
+ }
346
+ if (role === 'pattern') {
347
+ if (staticKey === 'lastIndex') {
348
+ const site = 'an own-property read of RegExp.lastIndex';
349
+ return unboxedReadText(resultRepresentation ?? { kind: 'dynamic', reason: 'declared-any-never-narrowed' }, `gea::runtime::regex::dynamicGet(${receiverText}, ${propertyKeyText(ctx, key, site)})`, site);
350
+ }
351
+ if (patternDataMembers.has(staticKey))
352
+ return narrow(staticKey, `${receiverText}->${staticKey}`);
353
+ if (deferredRegexpMethodClaim(ctx.staticKeyTexts, receiver, key) !== null) {
354
+ if (result === null) {
355
+ throw createCppEmitBlockedError(`host-invocation:RegExp.prototype.${staticKey}`, `"${staticKey}" is a RegExp.prototype method, and this access publishes no value for its call to consume`);
356
+ }
357
+ // Recorded by the prototype-read walk, which asked the same claim.
358
+ return '';
359
+ }
360
+ if (staticKey === 'compile') {
361
+ throw createCppEmitBlockedError(`property-access:${representationKey(receiver.representation)}:get:false`, '"compile" is RegExp’s legacy in-place reinitializer (ECMA-262 B.2.3); it is not an expando and has no native rendering');
362
+ }
363
+ const site = 'an own-property read on a RegExp';
364
+ return unboxedReadText(resultRepresentation ?? { kind: 'dynamic', reason: 'declared-any-never-narrowed' }, `gea::runtime::regex::dynamicGet(${receiverText}, ${propertyKeyText(ctx, key, site)})`, site);
365
+ }
366
+ if (resultDataMembers.has(staticKey)) {
367
+ // `length` is a DATA member of `ExecResult` (`double length`, beside
368
+ // `index`/`input`) and the inherited `ArrayObject::length()` of
369
+ // `MatchResult`; one spelling for both compiled the exec result's read as
370
+ // a call on a `double`.
371
+ const member = staticKey === 'length' && role === 'match-result' ? 'length()' : staticKey;
372
+ return narrow(staticKey, `${receiverText}->${member}`);
373
+ }
374
+ if (canonicalCaptureSlot(staticKey))
375
+ return captureReadText(role, receiverText, staticKey, resultRepresentation);
376
+ // An `Array.prototype` member reached through `extends Array<string>`.
377
+ //
378
+ // A match result IS an Array in the language -- 22.1.3.13 builds one, and
379
+ // `RegExpMatchArray` says so in the type. The runtime carrier inherits
380
+ // `ArrayObject<string>` and adds `index`, `input` and `groups`, so this
381
+ // upcast preserves the object while reusing the existing Array prototype
382
+ // implementation. Hono's pattern router is the first case that needed it:
383
+ // `(path.match(/.../g) || []).map(...)` over every route it registers.
384
+ if (deferredRegexpMethodClaim(ctx.staticKeyTexts, receiver, key) !== null) {
385
+ if (result === null) {
386
+ throw createCppEmitBlockedError(`host-invocation:Array.prototype.${staticKey}`, `"${staticKey}" is an Array.prototype method, and this access publishes no value for its call to consume`);
387
+ }
388
+ // Recorded by the prototype-read walk, which asked the same claim.
389
+ return '';
390
+ }
391
+ throw createCppEmitBlockedError(`property-access:${representationKey(receiver.representation)}:get:false`, `"${staticKey}" is a ${role === 'exec-result' ? 'RegExpExecArray' : 'RegExpMatchArray'} member this backend states no rendering for. Implemented: ` +
392
+ `${[...resultDataMembers].join(', ')}, and every canonical capture index. "indices" (the ES2022 \`d\` flag) needs a [start, end] tuple per capture ` +
393
+ 'group, which this runtime does not build and std::regex does not report for a group that did not participate');
394
+ };
395
+ /**
396
+ * Lifted out of `regexpStoreRefusal` below. Unlike `namespaceMemberStoreClaim`
397
+ * and `regexpDynamicSetClaim`, this one has exactly ONE caller
398
+ * (`regexpStoreRefusal` itself): its only outcomes past "not a RegExp" are
399
+ * "declines silently" and "refuses", and neither is a fact anything else
400
+ * reads. A refusal has no C++ to schedule and no value id to key a census by,
401
+ * so recording it in a prepass walk would mean either throwing from the walk
402
+ * -- which would report whichever refusal this store-only walk reaches
403
+ * first, rather than whichever operation of ANY kind actually renders first
404
+ * in the body, a reordering this refactor's own byte-identical gate cannot
405
+ * see -- or keeping a map nothing consults, the "capability with zero
406
+ * consumers" shape this codebase has already paid for once. So this claim is
407
+ * extracted for the same reason every other one is (the resolver no longer
408
+ * decides anything inline), without manufacturing a second caller it has no
409
+ * honest use for yet.
410
+ */
411
+ export const regexpStoreRefusalClaim = (ctx, receiver, key) => {
412
+ const role = regexpRoleOf(receiver.representation);
413
+ if (role === null)
414
+ return null;
415
+ // A claim deciding which stored member this is (or that it's an ordinary
416
+ // expando, below) -- must not admit a render-time-minted key text.
417
+ const staticKey = ctx.staticKeyTexts.get(key.value);
418
+ if (role === 'pattern' && staticKey === 'lastIndex')
419
+ return { kind: 'declines' };
420
+ // A named property that is not part of RegExp's own surface is an ordinary
421
+ // expando. It stays on Pattern's identity-keyed native sidecar, so the
422
+ // receiver remains `Ref<Pattern>` rather than being widened to `Value`.
423
+ if (role === 'pattern' &&
424
+ (staticKey === undefined || (!patternDataMembers.has(staticKey) && !patternMethods.has(staticKey) && staticKey !== 'compile')))
425
+ return { kind: 'declines' };
426
+ // `index`, `input`, `length` and `groups` only. A CAPTURE SLOT is not a
427
+ // member of the result object at all -- it is an element of the Array the
428
+ // language built (22.1.3.13) -- and `regexpCaptureSlotStoreClaim` below
429
+ // renders a write to one, so it must not be refused as a mutation of the
430
+ // runtime's answer alongside the four members that genuinely are.
431
+ if (role !== 'pattern' && staticKey !== undefined && resultDataMembers.has(staticKey)) {
432
+ return { kind: 'result-mutation', role, staticKey };
433
+ }
434
+ if (staticKey === 'exec')
435
+ return { kind: 'exec-override' };
436
+ return { kind: 'unsupported-member', role, staticKey };
437
+ };
438
+ /**
439
+ * A store into a regular-expression member.
440
+ *
441
+ * `lastIndex` is the one writable own data property ECMA-262 defines
442
+ * (22.2.6.9). It stays in the Pattern-owned `Value` cell through both direct
443
+ * and computed stores; the runtime applies ToLength only when matching.
444
+ *
445
+ * The `exec` override is the one case worth naming outright. `r.exec = fn` is
446
+ * legal TypeScript and legal ECMAScript, and 22.2.7.1 `RegExpExec` really does
447
+ * look the own property up and call it -- v1 carries a `gea_cpp_value
448
+ * exec_override` field for exactly this. Supporting it here would mean giving
449
+ * every pattern a boxed callable slot and routing every `exec`/`match`/
450
+ * `replace` through a dynamic check for it, which is the boxing this backend
451
+ * does not do. So it is refused, by name, with what it would cost.
452
+ *
453
+ * Decides nothing itself any more -- `regexpStoreRefusalClaim` above is the
454
+ * one authority; this only spells whichever of its outcomes came back.
455
+ */
456
+ export const regexpStoreRefusal = (ctx, receiver, key) => {
457
+ const decision = regexpStoreRefusalClaim(ctx, receiver, key);
458
+ if (decision === null || decision.kind === 'declines')
459
+ return;
460
+ if (decision.kind === 'result-mutation') {
461
+ throw createCppEmitBlockedError(`property-access:${representationKey(receiver.representation)}:set:false`, `writing "${decision.staticKey}" on a ${decision.role === 'exec-result' ? 'RegExpExecArray' : 'RegExpMatchArray'} would mutate a result object ` +
462
+ 'this backend hands back by shared pointer from the runtime; the match result is an answer, and no store into one is rendered');
463
+ }
464
+ if (decision.kind === 'exec-override') {
465
+ throw createCppEmitBlockedError('host-invocation:RegExp.prototype.exec', 'installing an own "exec" on a RegExp (ECMA-262 22.2.7.1 RegExpExec, step 3) makes every exec/match/replace/split dispatch through a ' +
466
+ 'user-supplied callable found at run time. v1 geatsc carries that as a boxed `gea_cpp_value exec_override` field on every pattern; this ' +
467
+ 'backend has no boxed callable slot on a native carrier and does not add one, so the override is refused rather than silently ignored -- ' +
468
+ 'silently ignoring it would run the built-in matcher for a program that replaced it');
469
+ }
470
+ throw createCppEmitBlockedError(`property-access:${representationKey(receiver.representation)}:set:${decision.staticKey === undefined}`, `writing "${decision.staticKey ?? 'a computed key'}" on a RegExp has no rendering here; "lastIndex" is the one writable member ECMA-262 22.2.6.9 ` +
471
+ 'defines, and the other nine are read-only accessors on the prototype');
472
+ };
473
+ /**
474
+ * A capture-slot STORE -- `m[0] = s`, `m[j] = s` -- with the slot's own text,
475
+ * or `null` when the operation is not one.
476
+ *
477
+ * A match result IS an Array in the language, and its capture slots are that
478
+ * Array's elements rather than members of the result object, so writing one is
479
+ * an ordinary element store and not a mutation of an answer the runtime owns.
480
+ * The read side has always agreed: `captureReadText` renders `m[i]` off both a
481
+ * static canonical index and a computed numeric key. This is the same access
482
+ * in the other direction, admitted on the same two key shapes, so the pair
483
+ * cannot disagree about which keys name a slot.
484
+ *
485
+ * hono's `Trie.insert` is the program that named it: `tokens[j] =
486
+ * tokens[j].replace(mark, groups[i][1])` over `path.match(re) || []`, whose
487
+ * union collapses to the match result alone (`normalize/structural.ts` drops
488
+ * the empty-array arm).
489
+ */
490
+ export const regexpCaptureSlotStoreClaim = (ctx, operation) => {
491
+ if (operation.kind !== 'set')
492
+ return null;
493
+ const role = regexpRoleOf(operation.receiver.representation);
494
+ if (role === null || role === 'pattern')
495
+ return null;
496
+ // A claim deciding whether this key names a slot -- must not admit a
497
+ // render-time-minted key text, for the reason every other claim here states.
498
+ const staticKey = ctx.staticKeyTexts.get(operation.key.value);
499
+ if (staticKey !== undefined)
500
+ return canonicalCaptureSlot(staticKey) ? { slotText: staticKey } : null;
501
+ if (operation.key.representation.kind !== 'scalar' || operation.key.representation.domain !== 'number')
502
+ return null;
503
+ return { slotText: operandText(ctx, operation.key) };
504
+ };
505
+ export const regexpDynamicSetClaim = (ctx, operation) => {
506
+ if (operation.kind !== 'set' || regexpRoleOf(operation.receiver.representation) !== 'pattern')
507
+ return null;
508
+ // A claim deciding whether this write targets a method name (and so is
509
+ // refused elsewhere) -- must not admit a render-time-minted key text.
510
+ const staticKey = ctx.staticKeyTexts.get(operation.key.value);
511
+ // Method replacement still needs RegExpExec dispatch support; preserve the
512
+ // existing explicit refusal instead of accepting an ignored override.
513
+ if (staticKey !== undefined && (patternMethods.has(staticKey) || staticKey === 'compile'))
514
+ return null;
515
+ return { staticKey };
516
+ };
517
+ /**
518
+ * RegExp [[Set]] for every key whose writability must be decided at run time.
519
+ * The receiver remains Ref<Pattern>; only the property value crosses the
520
+ * dynamic boundary required by a computed key.
521
+ *
522
+ * Decides nothing itself any more -- `regexpDynamicSetClaim` above is the one
523
+ * authority; this only spells the write once the claim admits it.
524
+ */
525
+ export const emitRegExpSet = (ctx, lines, operation) => {
526
+ const claim = regexpDynamicSetClaim(ctx, operation);
527
+ // `claim` is non-`null` only when `operation.kind === 'set'` -- the claim
528
+ // already proved it -- but that fact does not cross the function boundary
529
+ // for the type checker, which is all this second half of the check is for:
530
+ // narrowing `operation` to `SetOperation` so `.strict` below type-checks.
531
+ if (claim === null || operation.kind !== 'set')
532
+ return false;
533
+ const { staticKey } = claim;
534
+ const site = staticKey === undefined ? 'a computed "set" on a RegExp' : `a "set" of RegExp.${staticKey}`;
535
+ const receiverText = operandText(ctx, operation.receiver);
536
+ const write = `gea::runtime::regex::dynamicSet(${receiverText}, ${propertyKeyText(ctx, operation.key, site)}, ` +
537
+ `${boxedValueText(ctx, operation.value, site)})`;
538
+ if (operation.strict) {
539
+ lines.push(`if (!${write}) gea::host::throwRuntimeError("TypeError", "Cannot assign to read-only RegExp property");`);
540
+ }
541
+ else
542
+ lines.push(`${write};`);
543
+ if (!operation.result || operation.result.representation.kind === 'void')
544
+ return true;
545
+ const threaded = alignedValueText(ctx, 'prototype/emit-prototype-regexp.ts:350', operation.receiver.representation, operation.result.representation, receiverText);
546
+ if (threaded === null) {
547
+ throw createCppEmitBlockedError(`conversion:${representationKey(operation.receiver.representation)}->${representationKey(operation.result.representation)}`, `${site} publishes a "${representationKey(operation.result.representation)}" carrier, and the native RegExp receiver cannot be represented as it`);
548
+ }
549
+ lines.push(`${defineValue(ctx, operation.result)} = ${threaded};`);
550
+ return true;
551
+ };
552
+ /**
553
+ * The call text for a deferred `RegExp.prototype` method read.
554
+ *
555
+ * `test` is a member call on the `shared_ptr` because it is a member of the
556
+ * ported `Pattern` (v1: `Pattern::test`). `exec` is a free function because it
557
+ * builds an `ExecResult`, which is a second type -- and because the boxed
558
+ * `gea_cpp_value exec(...)` overload sitting beside it in v1 is deliberately
559
+ * not ported; this is the typed one (v1: `Pattern::exec_typed`).
560
+ */
561
+ export const regexpMethodCallText = (ctx, member, receiverText, args, result) => {
562
+ if (member === 'toString') {
563
+ if (args.length !== 0) {
564
+ throw createCppEmitBlockedError('host-invocation:RegExp.prototype.toString', `"RegExp.prototype.toString" takes no arguments; this call passes ${args.length}`);
565
+ }
566
+ return `${receiverText}->toString()`;
567
+ }
568
+ const input = args[0];
569
+ if (args.length !== 1 || !input) {
570
+ throw createCppEmitBlockedError(`host-invocation:RegExp.prototype.${member}`, `"RegExp.prototype.${member}" is spelled for its one string argument (ECMA-262 22.2.6.${member === 'test' ? '16' : '8'}); this call passes ${args.length}`);
571
+ }
572
+ if (input.representation.kind !== 'string') {
573
+ throw createCppEmitBlockedError(`host-invocation:RegExp.prototype.${member}`, `"RegExp.prototype.${member}" argument 0 carries "${representationKey(input.representation)}"; the specification ToStrings it, and ToString of an ` +
574
+ 'arbitrary value is what this backend has no box for');
575
+ }
576
+ const inputText = operandText(ctx, input);
577
+ if (member === 'test')
578
+ return `${receiverText}->test(${inputText})`;
579
+ // The result carrier is checked rather than assumed: 22.2.6.8 answers `null`
580
+ // on no match, so an `exec` whose result was not given an optional carrier
581
+ // would either not compile or silently unwrap an absent match into a
582
+ // zero-initialized result object.
583
+ const carrier = result?.representation;
584
+ const payload = carrier === undefined ? null : carrier.kind === 'optional' ? carrier.payload : carrier;
585
+ if (payload !== null && regexpRoleOf(payload) !== 'exec-result') {
586
+ throw createCppEmitBlockedError('host-invocation:RegExp.prototype.exec', `"RegExp.prototype.exec" answers a RegExpExecArray or \`null\` (ECMA-262 22.2.6.8), so this backend renders it as an optional ` +
587
+ `${cppRegExpNativeTypes['exec-result']}; this call's result carries "${representationKey(carrier ?? payload)}"`);
588
+ }
589
+ return `gea::runtime::regex::exec(*${receiverText}, ${inputText})`;
590
+ };
591
+ /**
592
+ * The five `String.prototype` members whose argument may be a regular
593
+ * expression, rendered here rather than in `emit-prototype-string.ts` because
594
+ * what they need is this file's carrier knowledge, not that file's arity
595
+ * table.
596
+ *
597
+ * Each answers `null` when the call's first argument is NOT a pattern, and the
598
+ * string-shaped rendering there carries on unchanged -- `s.split(',')` is
599
+ * untouched by any of this. `match` and `search` have no string-argument form
600
+ * to fall back to (ECMA-262 22.1.3.11 / 22.1.3.13 both `RegExpCreate` a
601
+ * non-RegExp argument first), so they refuse by name when handed one.
602
+ *
603
+ * `matchAll` is not here. See `regexpStringMemberRefusals`.
604
+ */
605
+ const patternArgumentText = (ctx, argument) => {
606
+ if (!argument || regexpRoleOf(argument.representation) !== 'pattern')
607
+ return null;
608
+ // The runtime takes the pattern by `const Pattern&` and the carrier is a
609
+ // `shared_ptr`, so the dereference is the whole of the impedance -- no copy,
610
+ // and `lastIndex` mutation stays visible to every other holder.
611
+ return `*${operandText(ctx, argument)}`;
612
+ };
613
+ const requirePatternArgument = (ctx, member, clause, args) => {
614
+ const pattern = patternArgumentText(ctx, args[0]);
615
+ if (pattern === null) {
616
+ throw createCppEmitBlockedError(`host-invocation:String.prototype.${member}`, `"String.prototype.${member}" argument 0 carries "${args[0] ? representationKey(args[0].representation) : 'nothing'}"; ECMA-262 ${clause} ` +
617
+ 'RegExpCreates a non-RegExp argument, and constructing a pattern out of an arbitrary value at a call site is a coercion this backend does not render');
618
+ }
619
+ if (args.length !== 1) {
620
+ throw createCppEmitBlockedError(`host-invocation:String.prototype.${member}`, `"String.prototype.${member}" is spelled for its one argument (ECMA-262 ${clause}); this call passes ${args.length}`);
621
+ }
622
+ return pattern;
623
+ };
624
+ /** ECMA-262 22.1.3.11 `String.prototype.match(regexp)` -> 22.2.6.8, answering `RegExpMatchArray | null`. */
625
+ export const regexpMatchText = (ctx, receiverText, args, result) => {
626
+ const pattern = requirePatternArgument(ctx, 'match', '22.1.3.11', args);
627
+ const carrier = result?.representation;
628
+ const payload = carrier === undefined ? null : carrier.kind === 'optional' ? carrier.payload : carrier;
629
+ if (payload !== null && regexpRoleOf(payload) !== 'match-result') {
630
+ throw createCppEmitBlockedError('host-invocation:String.prototype.match', `"String.prototype.match" answers a RegExpMatchArray or \`null\` (ECMA-262 22.1.3.11 step 3), so this backend renders it as an optional ` +
631
+ `${cppRegExpNativeTypes['match-result']}; this call's result carries "${representationKey(carrier ?? payload)}"`);
632
+ }
633
+ return `gea::runtime::string::matchByPattern(${receiverText}, ${pattern})`;
634
+ };
635
+ /** ECMA-262 22.1.3.13 `String.prototype.search(regexp)` -> 22.2.6.11, answering the index of the first match or -1. */
636
+ export const regexpSearchText = (ctx, receiverText, args) => `gea::runtime::string::search(${receiverText}, ${requirePatternArgument(ctx, 'search', '22.1.3.13', args)})`;
637
+ /**
638
+ * ECMA-262 22.1.3.23 `String.prototype.split(separator)` -> 22.2.6.14, when
639
+ * the separator is a pattern -- `null` when it is not, so the string form
640
+ * renders unchanged.
641
+ *
642
+ * The spec APPENDS every capture group to the output (step 19.d), so
643
+ * `'a1b'.split(/(\d)/)` is three elements, not two. That is in the runtime's
644
+ * `splitByPattern`, which is why the element carrier is checked here: an
645
+ * array of anything but strings would mean the plan and the runtime disagree
646
+ * about what a split produces.
647
+ */
648
+ export const regexpSplitText = (ctx, receiverText, args, result) => {
649
+ const pattern = patternArgumentText(ctx, args[0]);
650
+ if (pattern === null)
651
+ return null;
652
+ if (args.length !== 1) {
653
+ throw createCppEmitBlockedError('host-invocation:String.prototype.split', `"String.prototype.split" with a RegExp separator is spelled for that one argument (ECMA-262 22.1.3.23); this call passes ${args.length} ` +
654
+ '-- the optional `limit` parameter (step 5) is not rendered');
655
+ }
656
+ const carrier = result?.representation;
657
+ if (carrier !== undefined && (carrier.kind !== 'array-object' || carrier.element.kind !== 'string')) {
658
+ throw createCppEmitBlockedError('host-invocation:String.prototype.split', `"String.prototype.split" answers an array of strings; this call's result carries "${representationKey(carrier)}"`);
659
+ }
660
+ return `gea::runtime::string::splitByPattern(${receiverText}, ${pattern})`;
661
+ };
662
+ /**
663
+ * ECMA-262 22.1.3.18 `replace` / 22.1.3.20 `replaceAll` with a pattern
664
+ * searchValue -- `null` when the searchValue is a string, so the two-string
665
+ * form renders unchanged.
666
+ *
667
+ * The replacement may be a CALLBACK (22.2.6.11 step 14.a), or any value that
668
+ * `toStringText` can provably convert before 22.1.3.19 `GetSubstitution`
669
+ * interprets `$&`, `` $` ``, `$'`, `$n`, `$<name>` and `$$`. The two resulting
670
+ * carriers are real overloads of the ported `replaceByPattern`, selected by
671
+ * C++ overload resolution; a carrier whose ToString can run unknown user code
672
+ * remains refused.
673
+ *
674
+ * `replaceAll` renders a DIFFERENT runtime entry point, and that is 22.1.3.20
675
+ * step 2: a non-global RegExp is a TypeError there, and which pattern object
676
+ * reaches this call site is not a fact any emitter can read, so the check
677
+ * lives in `replaceAllByPattern`.
678
+ */
679
+ export const regexpReplaceText = (member, ctx, receiverText, args) => {
680
+ const pattern = patternArgumentText(ctx, args[0]);
681
+ if (pattern === null)
682
+ return null;
683
+ const replacement = args[1];
684
+ if (args.length !== 2 || !replacement) {
685
+ throw createCppEmitBlockedError(`host-invocation:String.prototype.${member}`, `"String.prototype.${member}" is spelled for its search value and replacement (ECMA-262 ${member === 'replace' ? '22.1.3.18' : '22.1.3.20'}); ` +
686
+ `this call passes ${args.length}`);
687
+ }
688
+ const carrier = replacement.representation;
689
+ const substitution = carrier.kind === 'function-value-dispatch'
690
+ ? operandText(ctx, replacement)
691
+ : toStringText(operandText(ctx, replacement), carrier, ctx.classes, ctx.deriver);
692
+ if (substitution === null) {
693
+ throw createCppEmitBlockedError(`conversion:${representationKey(carrier)}->string`, `"String.prototype.${member}"'s replacement carries "${representationKey(carrier)}"; ECMA-262 ${member === 'replace' ? '22.1.3.18' : '22.1.3.20'} ` +
694
+ 'takes either a callable (invoked per match) or a value it ToStrings into a substitution template, and ToString of an arbitrary value is what ' +
695
+ 'this backend has no box for');
696
+ }
697
+ const spelling = member === 'replace' ? 'replaceByPattern' : 'replaceAllByPattern';
698
+ return `gea::runtime::string::${spelling}(${receiverText}, ${pattern}, ${substitution})`;
699
+ };
700
+ /**
701
+ * The one String member with a regular-expression argument that this backend
702
+ * refuses, and the true reason.
703
+ *
704
+ * Read by `emit-prototype-string.ts`'s refusal table so there is one authority
705
+ * for it.
706
+ */
707
+ export function matchAllRefusal() {
708
+ return ('ECMA-262 22.1.3.12 matchAll(regexp) answers a RegExpStringIterator -- a first-class iterator OBJECT, which is a value this backend does not mint ' +
709
+ '(emit-iterator.ts lowers only the fused for-of cursor, never a standalone iterator). The pattern itself is fully native here: `for (const m of ' +
710
+ 's.matchAll(re))` needs the cursor lowering, not a regular-expression carrier. Until then, the same walk is `while ((m = re.exec(s)) !== null)` on a ' +
711
+ 'global pattern, which this backend renders');
712
+ }
713
+ /**
714
+ * `new String(x)` -- the ECMAScript String WRAPPER OBJECT (ECMA-262 22.1.5),
715
+ * kept in this file alongside the three regular-expression carriers above
716
+ * rather than a file of its own: all four are native-record-ref types this
717
+ * backend intercepts EARLY, at the identical two dispatch points in
718
+ * `emit-properties.ts` (right after `regexpMember`/`regexpStoreRefusal`),
719
+ * for the identical architectural reason -- nothing here may fall through to
720
+ * the generic struct-member path. Deliberately separate from
721
+ * `emit-prototype-string.ts`, which is `String.prototype` over this
722
+ * backend's PRIMITIVE `string` carrier, not this rarer OBJECT
723
+ * `new String(x)` allocates -- one with identity that can carry own
724
+ * properties no primitive can (`escapedString.isEscaped = true`, hono's
725
+ * `utils/html.ts`, the case this carrier exists for).
726
+ *
727
+ * `gea::runtime::StringObject`'s ambient body (`interface String` in
728
+ * `lib.es5.d.ts`) survives `declaredBodyOf`'s method stripping with a real
729
+ * data member (`length`) AND a number index signature -- the same
730
+ * "plausible-looking struct that is not the real layout" shape
731
+ * `RegExpExecArray` warns about in `derive.ts`'s own comment. The generic
732
+ * struct-member path would happily emit `receiver->length`, and
733
+ * `gea::runtime::StringObject` has no such field (see its doc comment in
734
+ * `runtime/gea_runtime.h`: `length` is ECMA-262 22.1.4's own READ-ONLY view
735
+ * over `[[StringData]]`, not a second, driftable copy of it).
736
+ *
737
+ * The bigger landmine is the NUMBER index signature: `String`'s derived
738
+ * shape lays out as `record-with-index` with a NUMBER-domain sidecar
739
+ * (`[index: number]: string`), and `emitRecordIndexSidecarStore`/
740
+ * `recordIndexSidecarReadText` (`emit-carrier-members.ts`) run for ANY
741
+ * `native-record-ref` whose shape has one, over ANY constant key that does
742
+ * not name a declared field, with no domain check ahead of the subscript
743
+ * conversion. A STRING key like `isEscaped` reaching that path is coerced
744
+ * with `Number('isEscaped')` (`NaN`) and throws a "does not spell a numeric
745
+ * key" refusal unrelated to what the program wrote. So the two functions
746
+ * below must fully own EVERY constant key on a String-object receiver, not
747
+ * just `length`, so nothing falls through into a sidecar keyed by the wrong
748
+ * domain -- unlike `regexpMemberText`/`regexpStoreRefusal` above, which only
749
+ * intercept a refusal and let everything else fall through.
750
+ *
751
+ * A constant, non-`length` key (`isEscaped`, `callbacks`) is routed through
752
+ * the identical `gea::nativeDynamicGet`/`nativeDynamicSet` machinery
753
+ * `nativeSidecarGetText`/`emitNativeSidecarSet` (`emit-dynamic-properties.ts`)
754
+ * already use for a COMPUTED key on any other native-record-ref type --
755
+ * reusing their `boxedValueText`/`unboxedReadText` rather than duplicating
756
+ * the box/unbox logic. Those two functions skip a constant key outright
757
+ * (their own doc comment: "a constant key names a declared member"), true
758
+ * for every native-record-ref type before this one and false for `String`,
759
+ * whose whole point is accepting arbitrary, program-chosen constant keys as
760
+ * dynamic properties.
761
+ */
762
+ /** Whether a carrier is the String wrapper-object native type, or `null`/anything else. */
763
+ export const isStringObjectCarrier = (representation) => representation.kind === 'native-record-ref' && representation.native === cppStringObjectNativeType;
764
+ /**
765
+ * A `[[Get]]` off a String object, or `null` when the receiver is not one --
766
+ * in which case `emitGet` carries on unchanged.
767
+ *
768
+ * `length` is a real field computed off `StringObject::value`, not stored
769
+ * separately (see the struct's own doc comment). A computed numeric key is
770
+ * indexed character access (ECMA-262 22.1.5.1's exotic `[[GetOwnProperty]]`),
771
+ * a real spec'd capability this backend has not built a renderer for, and is
772
+ * refused by name -- the same posture taken above for `RegExp.prototype
773
+ * .compile`. Every other CONSTANT key is a dynamic own property, routed
774
+ * through the native dynamic-property sidecar directly (see this section's
775
+ * header comment for why it cannot defer to `nativeSidecarGetText`, which
776
+ * only fires for a computed key).
777
+ */
778
+ export const stringObjectMemberText = (ctx, receiver, key, resultRepresentation) => {
779
+ if (!isStringObjectCarrier(receiver.representation))
780
+ return null;
781
+ const receiverText = operandText(ctx, receiver);
782
+ // A claim deciding whether this is the `length` accessor versus a dynamic
783
+ // own property (below) -- must not admit a render-time-minted key text.
784
+ const staticKey = ctx.staticKeyTexts.get(key.value);
785
+ if (staticKey === undefined) {
786
+ throw createCppEmitBlockedError(`property-access:${representationKey(receiver.representation)}:get:true`, `a String-object property access keyed by a "${representationKey(key.representation)}" carrier has no ToPropertyKey conversion here; a computed ` +
787
+ 'numeric key would be indexed character access (ECMA-262 22.1.5.1), which this backend does not render for the wrapper object -- ' +
788
+ "`String.prototype` methods over the primitive `string` carrier are `emit-prototype-string.ts`'s");
789
+ }
790
+ if (staticKey === 'length')
791
+ return `static_cast<double>(${receiverText}->value.size())`;
792
+ const site = 'a "get" on a String-object own property';
793
+ const read = `gea::nativeDynamicGet(${receiverText}, ${propertyKeyText(ctx, key, site)})`;
794
+ return unboxedReadText(resultRepresentation ?? { kind: 'dynamic', reason: 'declared-any-never-narrowed' }, read, site);
795
+ };
796
+ /**
797
+ * A store into a String object -- `null`/no-op when the receiver is not one,
798
+ * in which case `emitFieldStoreLines` carries on unchanged. Unlike
799
+ * `regexpStoreRefusal` above, this function OWNS every constant key for a
800
+ * String-object receiver and returns `true` for all of them.
801
+ *
802
+ * `length` is refused: ECMA-262 22.1.4.1 makes it a read-only accessor, never
803
+ * a data property a program can write. A computed key is refused for the
804
+ * identical reason the GET side refuses one: indexed character mutation has
805
+ * no renderer here. Every other constant key is an own-property write,
806
+ * routed through `gea::nativeDynamicSet` directly.
807
+ */
808
+ export const emitStringObjectSet = (ctx, lines, operation) => {
809
+ if (!isStringObjectCarrier(operation.receiver.representation))
810
+ return false;
811
+ const receiverText = operandText(ctx, operation.receiver);
812
+ // A claim deciding whether this write targets `length` (refused, below)
813
+ // versus a dynamic own property -- must not admit a render-time-minted key.
814
+ const staticKey = ctx.staticKeyTexts.get(operation.key.value);
815
+ if (staticKey === undefined) {
816
+ throw createCppEmitBlockedError(`property-access:${representationKey(operation.receiver.representation)}:set:true`, `a String-object property write keyed by a "${representationKey(operation.key.representation)}" carrier has no ToPropertyKey conversion here; ` +
817
+ 'indexed character mutation (ECMA-262 22.1.5.1) is not rendered for the wrapper object');
818
+ }
819
+ if (staticKey === 'length') {
820
+ throw createCppEmitBlockedError(`property-access:${representationKey(operation.receiver.representation)}:set:false`, '"length" on a String object is a read-only accessor (ECMA-262 22.1.4.1); ECMAScript itself refuses this write with no observable effect ' +
821
+ 'in sloppy mode and throws in strict mode, and this backend does not render either outcome for it');
822
+ }
823
+ const site = 'a "set" on a String-object own property';
824
+ lines.push(`gea::nativeDynamicSet(${receiverText}, ${propertyKeyText(ctx, operation.key, site)}, ${boxedValueText(ctx, operation.value, site)});`);
825
+ if (operation.result) {
826
+ // The store's own result is the receiver threaded onward, exactly as
827
+ // `emitNativeSidecarSet` (`emit-dynamic-properties.ts`) reconciles for the
828
+ // identical computed-key case -- a store publishes the object it wrote
829
+ // into, not a success boolean.
830
+ const produced = operation.result.representation;
831
+ const threaded = alignedValueText(ctx, 'prototype/emit-prototype-regexp.ts:707', operation.receiver.representation, produced, receiverText);
832
+ if (threaded === null) {
833
+ throw createCppEmitBlockedError(`conversion:${representationKey(operation.receiver.representation)}->${representationKey(produced)}`, `${site} publishes a "${produced.kind}" carrier as the assignment's own value, and this backend cannot spell a String-object receiver as one`);
834
+ }
835
+ lines.push(`${defineValue(ctx, operation.result)} = ${threaded};`);
836
+ }
837
+ return true;
838
+ };
839
+ /**
840
+ * The runtime text that stringifies a String-object carrier down to this
841
+ * backend's plain `std::string`, or `null` for anything else.
842
+ *
843
+ * The one real datum on `gea::runtime::StringObject` -- see its doc comment
844
+ * in `runtime/gea_runtime.h` -- so this is a field read, not a call:
845
+ * ECMA-262 22.1.3.34/22.1.5.4 (`toString`/`valueOf`, `thisStringValue`) both
846
+ * answer exactly `[[StringData]]` with no transformation.
847
+ *
848
+ * `emit-narrowing.ts` keeps a small, deliberately duplicated twin
849
+ * (`stringObjectStringifyText`) for the one native wrapper-to-primitive route;
850
+ * it cannot import this helper because this file already imports
851
+ * `convertedValueText` from there. This is not a dynamic boundary coercion.
852
+ */
853
+ export const stringObjectToStringText = (heldRepresentation, text) => isStringObjectCarrier(heldRepresentation) ? `${text}->value` : null;