@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,556 @@
1
+ import { representationKey } from '../../representation/model.js';
2
+ import { isNativeError } from './error-types.js';
3
+ import { operandText } from './emit-context.js';
4
+ import { recordLayoutPolicyOf } from '../../projection/fields.js';
5
+ import { cppBodyName, cppConstantLiteral, cppRecordFieldName } from './types.js';
6
+ import { memberAccessOperator } from './emit-carrier-members.js';
7
+ import { cppDateType, isDateCarrier } from './prototype/emit-prototype-date.js';
8
+ /**
9
+ * ToString of a value, spelled from the carrier it actually arrived in.
10
+ *
11
+ * Both callers -- an explicit `String(x)` and a template expression's
12
+ * substitution -- run the same abstract operation, so they read the same table
13
+ * rather than two that could disagree about what `String(true)` is.
14
+ *
15
+ * `null` is returned for a carrier this has no conversion for; the caller
16
+ * names the refusal, because what it can say about *why* the value is there
17
+ * differs between a call argument and a substitution.
18
+ */
19
+ export const toStringText = (text, carrier, classes, deriver,
20
+ /**
21
+ * Whether this is `String(x)` itself rather than the ToString an operator
22
+ * performs. ECMA-262 22.1.1.1 special-cases exactly that call: a symbol
23
+ * argument answers its SymbolDescriptiveString, while ToString of a symbol
24
+ * (`\`${s}\``, `s + ""`) throws a TypeError. The distinction is the caller's
25
+ * to state, so the implicit sites keep refusing a symbol rather than
26
+ * silently printing what only the explicit call may.
27
+ */
28
+ explicit = false,
29
+ /**
30
+ * `Array.prototype.join`'s own ToString (ECMA-262 23.1.3.18 step 3.d) is the
31
+ * SAME abstract operation with one capability toggled: a `null`/`undefined`
32
+ * element contributes the empty string rather than the text "null"/"undefined"
33
+ * every other caller of this table needs (`String(undefined)`, `\`${x}\``,
34
+ * `"" + x` all print the text). `joinText` (`prototype/emit-prototype-array.ts`)
35
+ * is the only caller that sets this.
36
+ */
37
+ nullishJoinsEmpty = false) => toStringTextOver(text, carrier, recordLayoutPolicyOf(deriver, classes), explicit, nullishJoinsEmpty);
38
+ /**
39
+ * The `[[Call]]` convention a stored member holds, for the four carriers whose
40
+ * C++ spelling is a `gea::CallableObject` and which therefore expose `.call()`.
41
+ *
42
+ * `function-and-constructor` is deliberately absent: it spells a
43
+ * `CallableConstructorObject`, a different type, and a member that is BOTH is
44
+ * a built-in constructor rather than an ordinary method. A `recursive`
45
+ * dispatch is absent for the same fail-closed reason -- its spelling is the
46
+ * wrapper struct's name, not the callable template.
47
+ */
48
+ const storedCallAbiOf = (member) => {
49
+ if (member.kind === 'function' || member.kind === 'function-family')
50
+ return member.abi;
51
+ if (member.kind === 'function-value-family')
52
+ return member.optional ? null : member.abi;
53
+ if (member.kind === 'function-value-dispatch')
54
+ return member.recursive ? null : member.abi;
55
+ return null;
56
+ };
57
+ /**
58
+ * ECMA-262 7.1.1.1 `OrdinaryToPrimitive(O, string)` over a record's OWN
59
+ * `toString` member -- the first of the two method names that algorithm tries.
60
+ *
61
+ * This is the native answer to "a statically typed object needs a dynamic
62
+ * capability": the shape declares `toString`, its carrier states the exact
63
+ * convention, and the call is an ordinary indirect call through the struct
64
+ * member. Boxing the record to reach a dynamic ToString would be the forbidden
65
+ * shortcut, and answering `[object Object]` for a shape that declares the
66
+ * method is the silently-wrong one.
67
+ *
68
+ * The gate is what makes the answer exact rather than probable, and every part
69
+ * of it is load-bearing:
70
+ *
71
+ * - The member must be a REQUIRED data field. An optional one may be absent at
72
+ * run time, and OrdinaryToPrimitive then skips to `valueOf`, which this does
73
+ * not render.
74
+ * - The convention must take no receiver and no arguments. A receiver in the
75
+ * ABI means the compiler proved the body reads `this` and the physical slot
76
+ * expects it first (`captures.ts`'s `readsReceiver`); a leaf that has only
77
+ * an expression for the object, not an operand, cannot bind one, so it
78
+ * refuses instead of calling with the wrong frame.
79
+ * - The result must be `string` or a `scalar`, which is a STATIC proof that it
80
+ * is not an Object -- exactly the test step 3.c of OrdinaryToPrimitive
81
+ * applies at run time before it accepts the value. Any other result carrier
82
+ * would have to fall through to `valueOf`.
83
+ *
84
+ * Anything outside that returns `null`, which keeps the previous refusal
85
+ * rather than substituting a wrong constant.
86
+ */
87
+ const ownToStringCallText = (text, fields, ownership, layouts, explicit) => {
88
+ const field = fields.find((candidate) => candidate.key === 'toString');
89
+ if (field === undefined || !field.required)
90
+ return null;
91
+ const abi = storedCallAbiOf(field.value);
92
+ if (abi === null || abi.receiver !== null || abi.restFrom !== null || abi.parameters.length !== 0)
93
+ return null;
94
+ if (abi.result.kind !== 'string' && abi.result.kind !== 'scalar')
95
+ return null;
96
+ return toStringTextOver(`(${text}${memberAccessOperator(ownership)}${cppRecordFieldName('toString')}).call()`, abi.result, layouts, explicit);
97
+ };
98
+ /**
99
+ * The same table over the one `RecordLayoutPolicy` every reader of record
100
+ * shapes shares (`projection/fields.ts`). The conversion registry's `coercion`
101
+ * entry (`conversions.ts`) decides whether a ToString is INSTALLED for a
102
+ * carrier by asking this very function for a placeholder -- so the census's
103
+ * "is there a conversion" and the printer's "what is its text" cannot
104
+ * disagree: a carrier this returns `null` for is a `never` coercion node, and
105
+ * a carrier it renders is rendered by exactly this text.
106
+ */
107
+ export const toStringTextOver = (text, carrier, layouts, explicit = false, nullishJoinsEmpty = false) => {
108
+ if (carrier.kind === 'string')
109
+ return text;
110
+ if (carrier.kind === 'symbol')
111
+ return explicit ? `gea::symbolToString(${text})` : null;
112
+ // A Date. ECMA-262 7.1.17 ToString of an object is ToPrimitive with hint
113
+ // string, which for a Date is OrdinaryToPrimitive trying `toString` first --
114
+ // 21.4.4.41, the member `gea::runtime::Date` already implements. So
115
+ // `${d}`, `String(d)` and `"x" + d` all answer exactly `d.toString()`, and
116
+ // this states that once rather than leaving the implicit spellings refused
117
+ // while the explicit one renders. v1 does the same thing, in the same place:
118
+ // its `gea_cpp_to_string(const gea::runtime::Date&)` overload, whose own
119
+ // comment says a Date without it "stringifies to [object Object]".
120
+ //
121
+ // CAVEAT, and it is this backend's only ToString divergence from node: the
122
+ // string carries no " (Zone Name)" suffix -- 21.4.4.41.7 step 8 makes that
123
+ // suffix implementation-defined and permits an empty one, node prints it,
124
+ // and this does not. It is the same divergence `d.toString()` already has
125
+ // (probe `.scratch/probes/date-zonename`), applied to a second spelling of
126
+ // the same operation, not a new one.
127
+ // The Date test lives inside the `native-record-ref` branch below, because
128
+ // that is what a Date IS in this backend and `isDateCarrier`'s type guard
129
+ // narrows the NEGATIVE branch to exclude every native record, not just the
130
+ // non-Date ones -- which made every later branch blind to the kind.
131
+ // ECMA-262 23.1.3.18 `join` step 3.d contributes the EMPTY string for a
132
+ // `null`/`undefined` element -- not the text every other caller of this
133
+ // table needs -- so a `nullishJoinsEmpty` caller gets the join-specific
134
+ // answer for a receiver whose element carrier IS exactly `null`/`undefined`
135
+ // (never any other member `undefined`, e.g. a genuinely missing struct
136
+ // field mid-record, which is not this operation).
137
+ if (carrier.kind === 'null')
138
+ return nullishJoinsEmpty ? cppConstantLiteral('', 'string', { kind: 'string' }) : 'gea::host::detail::toStringNull()';
139
+ if (carrier.kind === 'undefined')
140
+ return nullishJoinsEmpty ? cppConstantLiteral('', 'string', { kind: 'string' }) : 'gea::host::detail::toStringUndefined()';
141
+ if (carrier.kind === 'scalar') {
142
+ // The cast is not cosmetic. `int32`/`uint32` lower to fixed-width integer
143
+ // types, and an integer argument converts to BOTH `double` and `bool` at
144
+ // the same rank -- the overload call would be ambiguous and fail to
145
+ // compile. Naming the domain's own type at the call site is what picks the
146
+ // intended overload rather than leaving it to be resolved by accident.
147
+ if (carrier.domain === 'boolean')
148
+ return `gea::host::detail::toString(static_cast<bool>(${text}))`;
149
+ if (carrier.domain === 'bigint')
150
+ return `(${text}).toString()`;
151
+ return `gea::host::detail::toString(static_cast<double>(${text}))`;
152
+ }
153
+ // A caught exception is the one place a `dynamic` carrier's own runtime tag
154
+ // is read back rather than assumed: `catch (e) { String(e) }` is real,
155
+ // ordinary TypeScript (both `spread.ts` and the Dialer example use exactly
156
+ // this), and `e`'s checker type -- `unknown` -- is one of the four
157
+ // legitimate dynamic boundaries, not a value this emitter boxed on its own
158
+ // initiative. `gea::host::detail::toString(const gea::Value&)`
159
+ // tag-switches, mirroring `toBoolean(const gea::Value&)`.
160
+ if (carrier.kind === 'dynamic')
161
+ return `gea::host::detail::toString(${text})`;
162
+ // An optional DOES know which absence it holds. `Representation`'s own
163
+ // `optional` variant carries `absence: 'null' | 'undefined'` -- it has to,
164
+ // because `x === null` and `x === undefined` are different questions over
165
+ // one `gea::Optional<T>` -- so the two answers the language gives
166
+ // (`String(null)` is "null", `String(undefined)` is "undefined") are both
167
+ // derivable here. This branch previously refused with "the carrier has lost
168
+ // the distinction", and the refusal text it printed
169
+ // (`optional(string,null)`) contained the very tag it claimed was missing.
170
+ //
171
+ // `text` is an SSA value name (`emit-context.ts`'s `nameOfValue` mints
172
+ // `vN`), never an expression with an effect, so naming it twice in one
173
+ // conditional reads one local twice rather than running anything twice.
174
+ if (carrier.kind === 'optional') {
175
+ const present = toStringTextOver(`(*${text})`, carrier.payload, layouts, explicit, nullishJoinsEmpty);
176
+ if (present === null)
177
+ return null;
178
+ const absent = nullishJoinsEmpty
179
+ ? cppConstantLiteral('', 'string', { kind: 'string' })
180
+ : carrier.absence === 'null'
181
+ ? 'gea::host::detail::toStringNull()'
182
+ : 'gea::host::detail::toStringUndefined()';
183
+ return `(${text}.has_value() ? std::string(${present}) : std::string(${absent}))`;
184
+ }
185
+ // A tagged union is a statically known, finite set of arms with a runtime
186
+ // discriminant, which is exactly what ToString needs: ECMA-262 7.1.17 is
187
+ // applied per arm, and the arm is selected by the discriminant the carrier
188
+ // already stores. `gea::TaggedUnion<Arms...>` exposes `is<I>()` and
189
+ // `get<I>()` over the arm's position -- the same index `arms` is ordered by
190
+ // -- so this is a conditional chain over positions, not a box.
191
+ //
192
+ // The final arm is the `else`, with no test of its own: the discriminant is
193
+ // always one of `0..arity-1`, so testing it would add a branch that can
194
+ // never be taken and leave the chain with no value on the impossible path.
195
+ if (carrier.kind === 'tagged-union') {
196
+ const arms = [];
197
+ for (const [index, arm] of carrier.arms.entries()) {
198
+ const converted = toStringTextOver(`${text}.get<${index}>()`, arm.value, layouts, explicit, nullishJoinsEmpty);
199
+ if (converted === null)
200
+ return null;
201
+ arms.push(`std::string(${converted})`);
202
+ }
203
+ const last = arms[arms.length - 1];
204
+ if (last === undefined)
205
+ return null;
206
+ let chain = last;
207
+ for (let index = arms.length - 2; index >= 0; index -= 1) {
208
+ chain = `${text}.is<${index}>() ? ${arms[index]} : ${chain}`;
209
+ }
210
+ return `(${chain})`;
211
+ }
212
+ // ECMA-262 7.1.17: ToString of an object is ToPrimitive(hint string), which
213
+ // for an ordinary object (`OrdinaryToPrimitive`) tries `toString()` first --
214
+ // the Date case above is exactly that, for the one class this backend wrote
215
+ // by hand. A `class-ref` is a program-declared class this backend PROJECTED
216
+ // from TypeScript, and the identical rule applies, decided at compile time
217
+ // rather than run: a class that installs its own `toString` needs that
218
+ // METHOD actually invoked, which is a real call this leaf has no
219
+ // `EmitContext`/receiver-binding machinery to build (`text` is a receiver
220
+ // expression, not something a bound-method call can be assembled around
221
+ // here) -- refused rather than answered wrong. A class with no own
222
+ // `toString` anywhere up its `extends` chain has a decidable answer with NO
223
+ // call at all: 20.1.3.6's `OrdinaryToPrimitive`-independent tag walk lands
224
+ // on the literal `builtinTag` "Object" for every ordinary object that is
225
+ // not one of the handful of exotic/boxed kinds the spec special-cases by
226
+ // name (Array, Function, Error, Boolean, Number, String, Date, RegExp,
227
+ // Arguments) -- and none of those is ever represented as `class-ref` in
228
+ // this backend (each has its own dedicated representation kind), so a
229
+ // `class-ref` can never BE one. The constant is per the CLASS, not per
230
+ // instance: `class Foo {}; Object.prototype.toString.call(new Foo())` is
231
+ // `"[object Object]"`, not `"[object Foo]"` -- `Symbol.toStringTag` is the
232
+ // only thing that changes the tag, and `declaresOwnToString`'s own comment
233
+ // says why that one is out of reach here too.
234
+ if (carrier.kind === 'class-ref') {
235
+ if (!(layouts.classMethodFor?.(carrier.declaration, 'toString') ?? false))
236
+ return cppConstantLiteral('[object Object]', 'string', { kind: 'string' });
237
+ // The class DOES declare its own `toString`, so 7.1.17 says that method
238
+ // runs -- and a zero-argument instance method nothing overrides is a
239
+ // direct call on its own body, the very same C++ `p.toString()` already
240
+ // emits (`gea_body_<method>(receiver)`), so this is the same call reached
241
+ // by a different spelling rather than a second convention for it. The
242
+ // result goes back through this table because `toString` is declared to
243
+ // return a string in every case that matters and a `scalar` in the ones
244
+ // that do not, and ToString of THAT is what the caller asked for.
245
+ // `classDirectMethodFor` answers `null` for an overridden key, and this
246
+ // keeps refusing there: picking the base's body for a derived instance is
247
+ // the wrong answer, not a missing one.
248
+ const direct = layouts.classDirectMethodFor?.(carrier.declaration, 'toString') ?? null;
249
+ if (direct === null)
250
+ return null;
251
+ return toStringTextOver(`${cppBodyName(direct.callable)}(${text})`, direct.result, layouts, explicit);
252
+ }
253
+ // ECMA-262 25.1.5.15: `ArrayBuffer.prototype` defines a `get
254
+ // [Symbol.toStringTag]` returning the literal "ArrayBuffer", and defines no
255
+ // own `toString`/`valueOf` of its own. So ToPrimitive(hint string) falls
256
+ // through OrdinaryToPrimitive's `toString` lookup to the inherited
257
+ // `Object.prototype.toString`, whose own algorithm (19.1.3.6 step 16) reads
258
+ // that tag back -- giving a fixed, class-INDEPENDENT answer with no method
259
+ // call needed, the same shape the `class-ref` case above resolves at
260
+ // compile time for a class with no own `toString`. `hono`'s `BodyInit`
261
+ // union (`request.ts`'s cached-body arm) is a real caller: `${body}` where
262
+ // `body` narrows to a bare `ArrayBuffer` reaches exactly this.
263
+ if (carrier.kind === 'array-buffer')
264
+ return cppConstantLiteral('[object ArrayBuffer]', 'string', { kind: 'string' });
265
+ if (carrier.kind === 'shared-array-buffer')
266
+ return cppConstantLiteral('[object SharedArrayBuffer]', 'string', { kind: 'string' });
267
+ // ECMA-262 23.1.3.36 gives Array its inherited `toString` through
268
+ // `Array.prototype.join`. The runtime's `array::join` already implements the
269
+ // required comma separator, hole handling and per-element ToString. Admit
270
+ // exactly the element carriers that renderer accepts, so an array whose
271
+ // elements need arbitrary user-code coercion still refuses here instead of
272
+ // being boxed or guessed.
273
+ if (carrier.kind === 'array-object' && (carrier.element.kind === 'string' || carrier.element.kind === 'scalar')) {
274
+ return `gea::runtime::array::join(${text})`;
275
+ }
276
+ // ECMA-262 23.2.3.18 gives TypedArray the same comma-joined ToString shape
277
+ // as Array, without holes or nullish elements. Every typed-array carrier in
278
+ // this backend stores Number elements, so the runtime overload converts each
279
+ // one through Number::toString while preserving the native view.
280
+ if (carrier.kind === 'typed-array')
281
+ return `gea::runtime::array::join(${text})`;
282
+ // A plain object -- an object literal, an interface, a host-declared struct.
283
+ // The `class-ref` case above already argues this exact answer from 20.1.3.6:
284
+ // an ordinary object with no own `toString` anywhere reachable falls through
285
+ // OrdinaryToPrimitive to `Object.prototype.toString`, whose builtinTag walk
286
+ // lands on the literal "Object" for everything that is not one of the nine
287
+ // exotic kinds the spec names -- none of which is ever carried as a record.
288
+ // The guard is the same guard, asked of the record's own members instead of
289
+ // a class's prototype chain: a shape that declares `toString` needs that
290
+ // method invoked, which this leaf cannot build a call for, so it refuses.
291
+ //
292
+ // hono reaches this constantly: `${c.req.raw}` and `console.error(err)` over
293
+ // an interface-typed value are both a ToString of a record.
294
+ if (carrier.kind === 'record' || carrier.kind === 'record-with-index') {
295
+ return carrier.fields.some((field) => field.key === 'toString')
296
+ ? ownToStringCallText(text, carrier.fields, carrier.ownership, layouts, explicit)
297
+ : cppConstantLiteral('[object Object]', 'string', { kind: 'string' });
298
+ }
299
+ if (carrier.kind === 'native-record-ref') {
300
+ if (isNativeError(carrier))
301
+ return `(${text})->toString()`;
302
+ // A Date. ECMA-262 7.1.17 ToString of an object is ToPrimitive with hint
303
+ // string, which for a Date is OrdinaryToPrimitive trying `toString` first
304
+ // -- 21.4.4.41, the member `gea::runtime::Date` already implements. So
305
+ // `${d}`, `String(d)` and `"x" + d` all answer exactly `d.toString()`, and
306
+ // this states that once rather than leaving the implicit spellings refused
307
+ // while the explicit one renders. v1 does the same thing, in the same
308
+ // place: its `gea_cpp_to_string(const gea::runtime::Date&)` overload,
309
+ // whose own comment says a Date without it "stringifies to
310
+ // [object Object]".
311
+ //
312
+ // CAVEAT, and it is this backend's only ToString divergence from node: the
313
+ // string carries no " (Zone Name)" suffix -- 21.4.4.41.7 step 8 makes that
314
+ // suffix implementation-defined and permits an empty one, node prints it,
315
+ // and this does not. It is the same divergence `d.toString()` already has,
316
+ // applied to a second spelling of the same operation, not a new one.
317
+ if (carrier.native === cppDateType)
318
+ return `${text}->toString()`;
319
+ const fields = layouts.forShape(carrier.shapeId);
320
+ if (fields === null)
321
+ return null;
322
+ return fields.some((field) => field.key === 'toString')
323
+ ? ownToStringCallText(text, fields, carrier.ownership, layouts, explicit)
324
+ : cppConstantLiteral('[object Object]', 'string', { kind: 'string' });
325
+ }
326
+ // ECMA-262 27.2.5.5: `Promise.prototype[Symbol.toStringTag]` is the literal
327
+ // "Promise", and `Promise.prototype` defines no own `toString`/`valueOf`, so
328
+ // ToPrimitive(hint string) falls through to `Object.prototype.toString`,
329
+ // which reads that tag back (20.1.3.6 step 15). Class-independent, no call
330
+ // -- the identical shape as `array-buffer` just above.
331
+ if (carrier.kind === 'promise')
332
+ return cppConstantLiteral('[object Promise]', 'string', { kind: 'string' });
333
+ return null;
334
+ };
335
+ /**
336
+ * ToString over a list of operands, folded with `separator` inserted between
337
+ * every pair -- the one machine behind two different joins: a template
338
+ * literal's own adjacency (`separator: null`, `templateText` below) and
339
+ * `console.log`'s single-space rule (`separator: 'std::string(" ")'`,
340
+ * `consoleArgumentsText` below). Both need the identical per-operand
341
+ * ToString and identical empty/singleton handling; only what sits between
342
+ * pieces differs, so one function states the fold once instead of two copies
343
+ * that could quietly disagree about what an empty operand list means.
344
+ *
345
+ * `null` is returned when an operand's carrier has no ToString, and the
346
+ * caller names which one refused -- what differs between a template
347
+ * substitution and a call argument is what the caller can say about *why*
348
+ * the value is there, not the conversion rule itself.
349
+ *
350
+ * `emit.ts` has two callers today: a template literal's own chunks
351
+ * (`templateText` below, `separator: null`) and the string-concatenation `+`
352
+ * fold (`emit.ts`'s "`+` is string concatenation..." branch, also
353
+ * `separator: null` via `templateText`) -- both pass `operation.operands`
354
+ * directly, which is why one binary-`+`'s two operands and an N-piece
355
+ * template's chunks fold identically here.
356
+ */
357
+ const joinedToStringText = (ctx, operands, separator) => {
358
+ const pieces = [];
359
+ for (const operand of operands) {
360
+ const converted = toStringText(operandText(ctx, operand), operand.representation, ctx.classes, ctx.deriver);
361
+ if (converted === null)
362
+ return { refused: operand.representation };
363
+ pieces.push(converted);
364
+ }
365
+ // No operands is the empty string: a template with no text and no
366
+ // substitution, or `console.log()` with no arguments, both say nothing.
367
+ const first = pieces[0];
368
+ if (first === undefined)
369
+ return { text: cppConstantLiteral('', 'string', { kind: 'string' }) };
370
+ // The first piece is forced to `std::string` so the fold is string
371
+ // concatenation rather than pointer arithmetic between two `const char *`.
372
+ if (pieces.length === 1)
373
+ return { text: `std::string(${first})` };
374
+ const separated = separator === null ? pieces : pieces.flatMap((piece, index) => (index === 0 ? [piece] : [separator, piece]));
375
+ return { text: `gea::concatStrings({${separated.join(', ')}})` };
376
+ };
377
+ /**
378
+ * The value appended by a proven in-place string update.
379
+ *
380
+ * Rebuilding `oldS + suffix` with `concatStrings` copies `oldS` before
381
+ * assigning the result back. The write emitters remove that first operand;
382
+ * this helper preserves the efficient single-piece spelling, including the
383
+ * `char` overload for one printable ASCII byte.
384
+ */
385
+ const stringAppendSuffixText = (ctx, operands) => {
386
+ const only = operands.length === 1 ? operands[0] : undefined;
387
+ if (only !== undefined) {
388
+ const text = ctx.constantTexts.get(only.value);
389
+ const code = text?.length === 1 ? text.charCodeAt(0) : 0;
390
+ if (code >= 0x20 && code <= 0x7e && text !== "'" && text !== '\\')
391
+ return `'${text}'`;
392
+ return operandText(ctx, only);
393
+ }
394
+ return `gea::concatStrings({${operands.map((operand) => operandText(ctx, operand)).join(', ')}})`;
395
+ };
396
+ /**
397
+ * Append a suffix without allocating its multi-piece concatenation first.
398
+ * Deferred string-addition subtrees are flattened into their leaves, then the
399
+ * runtime reserves and appends them directly. Its alias path snapshots pieces
400
+ * that view the target, preserving self-append across a possible reallocation.
401
+ */
402
+ export const stringAppendStatement = (ctx, target, operands) => {
403
+ const leaves = [];
404
+ const collect = (operand) => {
405
+ const origin = ctx.computeOrigins.get(operand.value);
406
+ if (operand.representation.kind === 'string' &&
407
+ ctx.deferredTexts.has(operand.value) &&
408
+ origin?.form === 'binary' &&
409
+ origin.operator === '+' &&
410
+ origin.operands.every((part) => part.representation.kind === 'string')) {
411
+ for (const part of origin.operands)
412
+ collect(part);
413
+ }
414
+ else
415
+ leaves.push(operand);
416
+ };
417
+ for (const operand of operands)
418
+ collect(operand);
419
+ if (leaves.length === 1)
420
+ return `${target} += ${stringAppendSuffixText(ctx, leaves)};`;
421
+ return `gea::appendStrings(${target}, {${leaves.map((operand) => operandText(ctx, operand)).join(', ')}});`;
422
+ };
423
+ /**
424
+ * A template expression, as one concatenation.
425
+ *
426
+ * Lowering already put the operands in the order the language concatenates
427
+ * them -- literal chunk, substitution, literal chunk, ... -- so this only has
428
+ * to run ToString over each and fold with no separator, which is what an
429
+ * empty `separator` in `joinedToStringText` means. The chunks arrive carrying
430
+ * `string` and pass through unchanged, which is why one rule covers both
431
+ * kinds of piece.
432
+ */
433
+ export const templateText = (ctx, operation) => {
434
+ const leaves = [];
435
+ const collect = (operand) => {
436
+ const origin = ctx.computeOrigins.get(operand.value);
437
+ if (operand.representation.kind === 'string' &&
438
+ ctx.deferredTexts.has(operand.value) &&
439
+ origin?.form === 'binary' &&
440
+ origin.operator === '+' &&
441
+ origin.operands.every((part) => part.representation.kind === 'string')) {
442
+ // Only a single-use, effect-free deferred subtree can lose its temporary.
443
+ // Numeric additions and already-materialized string snapshots stay leaves.
444
+ for (const part of origin.operands)
445
+ collect(part);
446
+ }
447
+ else
448
+ leaves.push(operand);
449
+ };
450
+ for (const operand of operation.operands)
451
+ collect(operand);
452
+ return joinedToStringText(ctx, leaves, null);
453
+ };
454
+ /**
455
+ * `console.log`/`console.error`'s own join rule. ECMA-262 leaves `console`
456
+ * entirely host-defined, but every runtime that implements one (Node, every
457
+ * browser devtools console) stringifies each argument and separates the
458
+ * pieces with exactly one space. v2 has no per-call-site C++ template
459
+ * mechanism in the `host-members.ts` model -- a template there fills one
460
+ * fixed textual shape with pre-rendered strings, it cannot emit a variadic
461
+ * C++ template -- so the join happens here, before the joined text is
462
+ * substituted into the `{args}` slot (`host-members.ts`/`emit-host-invoke.ts`).
463
+ *
464
+ * `operation.arguments` at the call site is guaranteed to be N individual
465
+ * operands here, not one packed `array-object`: `ir/lower.ts`'s
466
+ * `lowerInvocation` skips `packRestArguments` for exactly this callee shape
467
+ * (a method call whose receiver is a `native-handle`) -- see `lower.ts`'s
468
+ * `calleeReceiverIsNativeHandle`.
469
+ */
470
+ export const consoleArgumentsText = (ctx, operands) => {
471
+ // A Date argument is refused HERE even though `toStringText` renders one,
472
+ // and the two are not in disagreement: they are different operations.
473
+ // `String(d)` and `${d}` are ECMA-262 7.1.17 and answer `d.toString()`;
474
+ // node's `console.log(d)` does not run ToString at all -- it inspects, and
475
+ // `util.inspect` prints a Date as its ISO form. Measured:
476
+ // `console.log(new Date(0))` prints `1970-01-01T00:00:00.000Z`, while
477
+ // `console.log(String(new Date(0)))` prints `Thu Jan 01 1970 ...`. Rendering
478
+ // the ToString here would print the second where node prints the first --
479
+ // a green line with the wrong text in it, which is the one outcome this
480
+ // backend refuses to produce.
481
+ for (const operand of operands) {
482
+ if (carrierWithADate(operand.representation) !== null)
483
+ return { refused: operand.representation };
484
+ }
485
+ return joinedToStringText(ctx, operands, 'std::string(" ")');
486
+ };
487
+ /** The Date inside a carrier -- itself, an optional's payload, or a union arm -- or `null`. */
488
+ const carrierWithADate = (carrier) => {
489
+ if (isDateCarrier(carrier))
490
+ return carrier;
491
+ if (carrier.kind === 'optional')
492
+ return carrierWithADate(carrier.payload);
493
+ if (carrier.kind === 'tagged-union') {
494
+ for (const arm of carrier.arms) {
495
+ const found = carrierWithADate(arm.value);
496
+ if (found !== null)
497
+ return found;
498
+ }
499
+ }
500
+ return null;
501
+ };
502
+ /**
503
+ * The carrier that actually has no ToString, which is not always the one the
504
+ * caller was holding.
505
+ *
506
+ * `optional` and `tagged-union` convert by descending into their payload/arms,
507
+ * so when one of those refuses it is because something *inside* it did. Naming
508
+ * the wrapper would say something false about the backend -- "no ToString for
509
+ * an optional" when optionals convert fine and the payload is a `Map` -- so
510
+ * this walks down to the first sub-carrier with no conversion of its own and
511
+ * lets the message name that.
512
+ */
513
+ const unconvertibleToStringCarrier = (carrier, classes, deriver) => {
514
+ if (carrier.kind === 'optional')
515
+ return unconvertibleToStringCarrier(carrier.payload, classes, deriver);
516
+ if (carrier.kind === 'tagged-union') {
517
+ for (const arm of carrier.arms) {
518
+ if (toStringText('x', arm.value, classes, deriver) === null)
519
+ return unconvertibleToStringCarrier(arm.value, classes, deriver);
520
+ }
521
+ }
522
+ return carrier;
523
+ };
524
+ /** Why a carrier has no ToString, for a refusal message. */
525
+ export const toStringRefusal = (outer, classes, deriver) => {
526
+ // A Date has a ToString and still reaches this function, from exactly one
527
+ // caller: `consoleArgumentsText`, which refuses it on purpose. Saying "not
528
+ // implemented" about a member that IS implemented would send the reader to
529
+ // build something that exists, so the reason it was actually refused for is
530
+ // the one printed.
531
+ const date = carrierWithADate(outer);
532
+ if (date !== null) {
533
+ return (`console.log of a "${representationKey(date)}" carrier is refused: node does not ToString a console argument, it ` +
534
+ 'inspects it, and `util.inspect` prints a Date as its ISO form -- `console.log(new Date(0))` is ' +
535
+ '`1970-01-01T00:00:00.000Z`, not the `Thu Jan 01 1970 ...` that ToString answers. Write `String(d)`, `` `${d}` `` or ' +
536
+ '`d.toISOString()` and the intended one renders');
537
+ }
538
+ const carrier = unconvertibleToStringCarrier(outer, classes, deriver);
539
+ const within = representationKey(carrier) === representationKey(outer) ? '' : ` (inside a "${representationKey(outer)}")`;
540
+ // A `class-ref` reaching this message is one that DOES declare its own
541
+ // `toString` (`declaresOwnToString`) -- the one class-ref shape `toStringText`
542
+ // still refuses, since calling that method needs a real bound-method call
543
+ // this leaf cannot build. Every other class-ref converts (the ECMA-262
544
+ // "Object" tag), so it is named specifically rather than folded into the
545
+ // generic list below, which would tell the reader a strictly false thing:
546
+ // that no class ever converts.
547
+ if (carrier.kind === 'class-ref') {
548
+ return (`ToString of a "${representationKey(carrier)}" carrier${within} needs its own declared \`toString\` method actually ` +
549
+ 'called, which this backend cannot build here (no bound-method call site to assemble from a bare receiver expression) -- ' +
550
+ 'a class with no own `toString` converts to the ECMA-262 "[object Object]" tag instead');
551
+ }
552
+ return carrier.kind === 'scalar' && carrier.domain === 'bigint'
553
+ ? `ToString of a bigint${within} needs arbitrary-precision digits, which are not implemented`
554
+ : `ToString of a "${representationKey(carrier)}" carrier${within} is not implemented; only string, number, boolean, ` +
555
+ 'null, undefined, a class with no own `toString`, an optional of those and a tagged union of those convert without a box';
556
+ };
@@ -0,0 +1,49 @@
1
+ import { type Representation } from '../../representation/model.js';
2
+ import { type UnionMemberTypeofAnswer } from './emit-context.js';
3
+ /** The string `typeof` yields for one carrier, or `null` when the table has no answer for it. */
4
+ export declare const typeofTextFor: (representation: Representation) => string | null;
5
+ /**
6
+ * The expression that yields `typeof operand`.
7
+ *
8
+ * `quote` is passed in rather than imported so this file states no opinion about
9
+ * how a C++ string literal is spelled; the one authority for that already exists
10
+ * and this asks it.
11
+ *
12
+ * The operand arrives as a THUNK, not as text, because for most carriers this
13
+ * function never asks for it: the answer is settled by the carrier, and
14
+ * rendering the operand to hand it over would demand a value the question does
15
+ * not depend on. That is not a saving -- it is the difference between an
16
+ * answer and a refusal for anything a program can name but not hold. `typeof
17
+ * deviceInfo !== 'undefined'` is the shape that proved it: the host states
18
+ * that namespace exists, the answer is `"object"` before the program runs, and
19
+ * eagerly rendering the operand refused the whole program for using a
20
+ * namespace as a value it never used it as.
21
+ */
22
+ export declare const typeofExpression: (representation: Representation, operand: () => string, quote: (text: string) => string, dynamic?: (text: string) => string) => string | null;
23
+ /**
24
+ * Whether this backend can answer `typeof` for a carrier.
25
+ *
26
+ * Implemented by asking `typeofExpression` rather than by re-listing the kinds
27
+ * it handles: a second list would be a second authority, and the two would
28
+ * eventually disagree about a nested carrier -- an optional over a boxed value
29
+ * is unanswerable for a reason the outer kind cannot see. The operand text and
30
+ * the quoting are placeholders because only the presence of an answer is being
31
+ * asked about, not its spelling.
32
+ */
33
+ export declare const typeofIsAnswerable: (representation: Representation) => boolean;
34
+ /** Null signals a string that typeof can never produce, not a fallback tag. */
35
+ export declare const typeofTagLiteral: (text: string) => string | null;
36
+ export declare const typeofTagText: (representation: Representation, operand: () => string) => string;
37
+ /** The string form; see `unionMemberDispatchText`. `std::string` for the reason `typeofText` states. */
38
+ export declare const unionMemberTypeofText: (answers: readonly UnionMemberTypeofAnswer[], operand: string, member: string) => string;
39
+ /** The tag form, for a result only equality tests consume; see `typeofTagText`. */
40
+ export declare const unionMemberTypeofTagText: (answers: readonly UnionMemberTypeofAnswer[], operand: string, member: string) => string;
41
+ /**
42
+ * The C++ expression for `typeof operand`, or a refusal naming the carrier it
43
+ * has no answer for.
44
+ *
45
+ * The refusal is by name and not a fallback, because the fallback would be a
46
+ * guess: a `typeof` that returns the wrong string is a narrowing that silently
47
+ * takes the wrong branch, which is worse than a program that does not build.
48
+ */
49
+ export declare const typeofText: (representation: Representation, operand: () => string) => string;