@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,42 @@
1
+ import type { IrOperand, IrResult } from '../../../ir/model.js';
2
+ import { type EmitContext } from '../emit-context.js';
3
+ /**
4
+ * `String.prototype`, as this backend renders it.
5
+ *
6
+ * The mechanism -- a deferred `[[Get]]` fused with the call that follows it --
7
+ * is `emit-prototype-invoke.ts`'s, and its header states why a String method
8
+ * cannot be materialized as a first-class value. What lives here is only the
9
+ * table: which members are claimed, at which arities, over which argument
10
+ * carriers, and which are refused BY NAME with what missing.
11
+ *
12
+ * Every runtime function named below is `gea::runtime::string`'s, which is a
13
+ * port of v1 geatsc's own `src/targets/cpp/runtime/string.cpp` -- the shipping
14
+ * implementation, not a re-derivation. That port is also what settles the
15
+ * index space: v1 indexes in UTF-16 CODE UNITS over UTF-8 storage, which is
16
+ * what ECMA-262 specifies and what node answers, and `.length` moved with it
17
+ * (`emit-carrier-members.ts`).
18
+ */
19
+ /** A native scalar primitive may preserve its refined result locally. The
20
+ * primitive producer publishes expression and storage together; ordinary
21
+ * Number ABI positions still receive its exact implicit double conversion. */
22
+ export interface NativeScalarCall {
23
+ readonly expression: string;
24
+ readonly resultStorage: 'gea::runtime::string::CodeUnit';
25
+ }
26
+ /** The one signature every member's renderer has. `result` is read only by the two members whose ECMA-262 result is `undefined` out of range. */
27
+ export type StringCallRenderer = (ctx: EmitContext, receiverText: string, args: readonly IrOperand[], result: IrResult | null, metadata?: string) => string | NativeScalarCall;
28
+ /** `emit-carrier-members.ts`'s `stringMemberText` defers exactly these keys off a `string` receiver -- one authority for "is this method implemented", never two lists that could drift. */
29
+ export declare const stringMethods: ReadonlyMap<string, StringCallRenderer>;
30
+ export declare const stringPrototypeMethods: ReadonlySet<string>;
31
+ /**
32
+ * Members this backend states a REASON for not implementing, rather than
33
+ * letting them fall into the generic "here is the list of what is implemented"
34
+ * refusal.
35
+ *
36
+ * A member is here when the gap is a specific missing thing a reader would
37
+ * otherwise have to guess at -- a Unicode table, a regular-expression engine,
38
+ * a locale database. The distinction matters: "not built yet" and "cannot be
39
+ * built without X" are different answers, and only the second one tells you
40
+ * what to build.
41
+ */
42
+ export declare const stringMemberRefusals: ReadonlyMap<string, string>;
@@ -0,0 +1,252 @@
1
+ import { representationKey } from '../../../representation/model.js';
2
+ import { createCppEmitBlockedError, operandText } from '../emit-context.js';
3
+ import { toStringText } from '../emit-tostring.js';
4
+ import { matchAllRefusal, regexpMatchText, regexpReplaceText, regexpSearchText, regexpSplitText } from './emit-prototype-regexp.js';
5
+ const stringMethodShapes = new Map([
6
+ ['substring', { clause: '22.1.3.24', arities: [1, 2], carriers: ['number', 'number'] }],
7
+ ['substr', { clause: 'B.2.3.1', arities: [1, 2], carriers: ['number', 'number'] }],
8
+ ['slice', { clause: '22.1.3.22', arities: [1, 2], carriers: ['number', 'number'] }],
9
+ ['trim', { clause: '22.1.3.32', arities: [0], carriers: [] }],
10
+ ['trimStart', { clause: '22.1.3.34', arities: [0], carriers: [] }],
11
+ ['trimEnd', { clause: '22.1.3.33', arities: [0], carriers: [] }],
12
+ ['toLowerCase', { clause: '22.1.3.29', arities: [0], carriers: [] }],
13
+ ['toUpperCase', { clause: '22.1.3.31', arities: [0], carriers: [] }],
14
+ ['charCodeAt', { clause: '22.1.3.3', arities: [1], carriers: ['number'] }],
15
+ ['charAt', { clause: '22.1.3.2', arities: [1], carriers: ['number'] }],
16
+ ['indexOf', { clause: '22.1.3.9', arities: [1, 2], carriers: ['string', 'number'] }],
17
+ ['lastIndexOf', { clause: '22.1.3.10', arities: [1, 2], carriers: ['string', 'number'] }],
18
+ ['includes', { clause: '22.1.3.8', arities: [1, 2], carriers: ['string', 'number'] }],
19
+ ['startsWith', { clause: '22.1.3.23', arities: [1, 2], carriers: ['string', 'number'] }],
20
+ ['endsWith', { clause: '22.1.3.7', arities: [1, 2], carriers: ['string', 'number'] }],
21
+ ['padStart', { clause: '22.1.3.16', arities: [1, 2], carriers: ['number', 'string'] }],
22
+ ['padEnd', { clause: '22.1.3.15', arities: [1, 2], carriers: ['number', 'string'] }],
23
+ ['repeat', { clause: '22.1.3.17', arities: [1], carriers: ['number'] }],
24
+ ['localeCompare', { clause: '22.1.3.12', arities: [1], carriers: ['string'] }],
25
+ // The three members `lib.es5.d.ts` declares over `string | RegExp`. These
26
+ // rows are the STRING form only; the pattern form is rendered by
27
+ // `emit-prototype-regexp.ts` and asked first (see `shapedStringMethodText`).
28
+ ['split', { clause: '22.1.3.21', arities: [1], carriers: ['string'] }],
29
+ ['replace', { clause: '22.1.3.18', arities: [2], carriers: ['string', 'string'] }],
30
+ ['replaceAll', { clause: '22.1.3.20', arities: [2], carriers: ['string', 'string'] }]
31
+ ]);
32
+ const carrierMatches = (operand, wanted) => wanted === 'string'
33
+ ? operand.representation.kind === 'string'
34
+ : (operand.representation.kind === 'scalar' && operand.representation.domain === 'number') || isOptionalNumber(operand.representation);
35
+ /**
36
+ * Whether a carrier is `T | undefined` over a number -- ECMA-262's OWN
37
+ * spelling for "this parameter was not supplied", not a caller's mistake.
38
+ * `String.prototype.slice`/`substring`'s numeric parameters are declared
39
+ * optional in `lib.es5.d.ts`, so a call that forwards an already-optional
40
+ * local (`s.slice(maybeStart)`) hands this renderer `optional(scalar(number),
41
+ * undefined)` rather than a bare number -- the value genuinely may be absent
42
+ * at RUNTIME, which an omitted argument (a different arity, handled by the
43
+ * overload set above) cannot express. `numericDefaultText` below is what
44
+ * turns the flag back into ECMA-262's own default for the position.
45
+ */
46
+ const isOptionalNumber = (representation) => representation.kind === 'optional' &&
47
+ representation.absence === 'undefined' &&
48
+ representation.payload.kind === 'scalar' &&
49
+ representation.payload.domain === 'number';
50
+ /**
51
+ * The C++ text for a `number`-shaped argument, materializing an absent
52
+ * `optional` into the ECMA-262 default ToIntegerOrInfinity(undefined) already
53
+ * gives its position -- 0 for a leading index (22.1.3.22 step 4, 22.1.3.24
54
+ * step 4) and `+Infinity` for a trailing one (22.1.3.22 step 3: "If end is
55
+ * undefined, let relativeEnd be len"). `+Infinity` is not a guess: it is the
56
+ * exact sentinel the runtime's own single-argument `slice` overload
57
+ * (gea_runtime.h) already passes for a genuinely OMITTED end, so a present-
58
+ * but-undefined end renders through the identical downstream clamp to `len`
59
+ * rather than a second, possibly-disagreeing spelling of the same default.
60
+ */
61
+ const numericArgumentText = (ctx, operand, position) => {
62
+ const text = operandText(ctx, operand);
63
+ if (!isOptionalNumber(operand.representation))
64
+ return text;
65
+ const fallback = position === 0 ? '0.0' : 'std::numeric_limits<double>::infinity()';
66
+ return `(${text}.has_value() ? *${text} : ${fallback})`;
67
+ };
68
+ /**
69
+ * A carrier the runtime overload does not take is refused by name here rather
70
+ * than handed to C++ to reject: the specification COERCES it (ToString /
71
+ * ToIntegerOrInfinity of an arbitrary value), and coercion of an arbitrary
72
+ * value is exactly what this backend has no box for.
73
+ *
74
+ * The check reads the ARGUMENT OPERAND's own resolved carrier, never the
75
+ * declared ABI parameter's. `lib.es5.d.ts` declares `split(separator: string |
76
+ * RegExp)` and `replace(searchValue: string | RegExp, ...)`, so the declared
77
+ * parameter is a `tagged-union` at every call site including the ones that
78
+ * pass a plain string -- the checker's ABI states what is LEGAL to pass, not
79
+ * what this call passes. Reading the operand is what lets a string separator
80
+ * render natively while a RegExp one refuses by name instead of being forced
81
+ * through a carrier this file does not implement.
82
+ */
83
+ const shapedStringMethodText = (member, shape) => (ctx, receiverText, args, result, metadata) => {
84
+ // The three members `lib.es5.d.ts` declares over `string | RegExp` are
85
+ // asked of `emit-prototype-regexp.ts` first, and it answers `null` for a
86
+ // string argument so the shaped rendering below is reached unchanged. This
87
+ // is what replaced the union refusal that used to stand here: a RegExp
88
+ // member of the declared union is now rendered, not named as missing.
89
+ const byPattern = member === 'split'
90
+ ? regexpSplitText(ctx, receiverText, args, result)
91
+ : member === 'replace' || member === 'replaceAll'
92
+ ? regexpReplaceText(member, ctx, receiverText, args)
93
+ : null;
94
+ if (byPattern !== null)
95
+ return byPattern;
96
+ if (!shape.arities.includes(args.length)) {
97
+ throw createCppEmitBlockedError(`runtime-helper:element:${member}:string`, `"String.prototype.${member}" is spelled for ${shape.arities.join(' or ')} argument(s) (ECMA-262 ${shape.clause}); this call passes ${args.length}`);
98
+ }
99
+ const rendered = [];
100
+ for (let index = 0; index < args.length; index += 1) {
101
+ const argument = args[index];
102
+ const wanted = shape.carriers[index];
103
+ // ReplaceValue is specified as `callable ? callback : ToString(value)`.
104
+ // The checker overload describes its common string case, while the
105
+ // operand still records the concrete non-callable value this call uses.
106
+ // Reuse the language's one ToString table so numbers and other proven
107
+ // carriers reach GetSubstitution without a dynamic box.
108
+ const replacementText = argument && wanted === 'string' && (member === 'replace' || member === 'replaceAll') && index === 1
109
+ ? toStringText(operandText(ctx, argument), argument.representation, ctx.classes, ctx.deriver)
110
+ : null;
111
+ if (!argument || !wanted || (!carrierMatches(argument, wanted) && replacementText === null)) {
112
+ throw createCppEmitBlockedError(`runtime-helper:element:${member}:string`, `"String.prototype.${member}" argument ${index} carries ` +
113
+ `"${argument ? representationKey(argument.representation) : 'nothing'}", and this backend spells it only for a ${wanted ?? 'declared'} carrier` +
114
+ (wanted === 'string' && argument && argument.representation.kind === 'tagged-union'
115
+ ? ' -- the declared parameter is a union, and this call passes an operand carried as the union itself rather than as one resolved arm, ' +
116
+ 'so neither the string spelling nor the RegExp one above can be selected'
117
+ : ''));
118
+ }
119
+ rendered.push(wanted === 'number' ? numericArgumentText(ctx, argument, index) : (replacementText ?? operandText(ctx, argument)));
120
+ }
121
+ if (member === 'charCodeAt' && metadata !== undefined) {
122
+ return {
123
+ expression: `gea::runtime::string::charCodeAtWithMetadata(${[receiverText, ...rendered, `${metadata}_units`, `${metadata}_basic_latin`, `${metadata}.cursor`].join(', ')})`,
124
+ resultStorage: 'gea::runtime::string::CodeUnit'
125
+ };
126
+ }
127
+ return `gea::runtime::string::${shape.spelling ?? member}(${[receiverText, ...rendered].join(', ')})`;
128
+ };
129
+ /**
130
+ * `at` and `codePointAt` -- the two String members whose ECMA-262 result is
131
+ * `undefined` when the index is out of range (22.1.3.1 step 7, 22.1.3.4 step
132
+ * 5), rather than the empty string (`charAt`) or NaN (`charCodeAt`).
133
+ *
134
+ * `undefined` is a real value here, not an absence to shrug at, so the runtime
135
+ * returns a `gea::Optional<T>` and this checks that the plan agrees before
136
+ * rendering: an `Optional`-producing expression assigned into a bare `T` does
137
+ * not compile, and an `Optional` silently unwrapped would answer the payload
138
+ * type's zero for an out-of-range read. If the plan gave the result a
139
+ * non-optional carrier, the disagreement is upstream and is refused by name
140
+ * rather than papered over at the C++ boundary.
141
+ */
142
+ const optionalResultMethodText = (member, clause, payload) => (ctx, receiverText, args, result) => {
143
+ const index = args[0];
144
+ if (args.length !== 1 || !index) {
145
+ throw createCppEmitBlockedError(`runtime-helper:element:${member}:string`, `"String.prototype.${member}" is spelled for its one index argument (ECMA-262 ${clause}); this call passes ${args.length}`);
146
+ }
147
+ if (!carrierMatches(index, 'number')) {
148
+ throw createCppEmitBlockedError(`runtime-helper:element:${member}:string`, `"String.prototype.${member}"'s index argument carries a "${representationKey(index.representation)}" carrier, not a number scalar`);
149
+ }
150
+ // A call with NO result at all passes: `s.at(0);` in statement position
151
+ // discards the value and `emitCall` renders it as a bare expression
152
+ // statement, so there is no carrier to disagree with.
153
+ const carrier = result?.representation;
154
+ const payloadMatches = carrier === undefined ||
155
+ (carrier.kind === 'optional' &&
156
+ (payload === 'string'
157
+ ? carrier.payload.kind === 'string'
158
+ : carrier.payload.kind === 'scalar' && carrier.payload.domain === 'number'));
159
+ if (!payloadMatches) {
160
+ throw createCppEmitBlockedError(`conversion:optional(${payload})->${carrier ? representationKey(carrier) : 'nothing'}`, `"String.prototype.${member}" answers \`undefined\` for an out-of-range index (ECMA-262 ${clause}), so this backend renders it as an ` +
161
+ `optional ${payload}; this call's result carries "${carrier ? representationKey(carrier) : 'nothing'}", and narrowing the absence away here would ` +
162
+ "answer the payload type's zero for a read the program can observe as absent");
163
+ }
164
+ return `gea::runtime::string::${member}(${receiverText}, ${operandText(ctx, index)})`;
165
+ };
166
+ /**
167
+ * ECMA-262 22.1.3.5 `String.prototype.concat(...strings)`.
168
+ *
169
+ * `concat`'s checker signature is `(...strings: string[]): string` -- a rest
170
+ * parameter -- so `ir/lower.ts`'s `packRestArguments` has already packed every
171
+ * call argument into one `array-object` before this runs, exactly as it has
172
+ * for `Array.prototype.push`. So the rendering takes the packed array rather
173
+ * than a C++ argument per source argument, and the runtime overload mirrors
174
+ * that: v1 spells this as a brace-init list because v1's emitter still has the
175
+ * physical arguments at this point; this backend does not, and inventing them
176
+ * back would mean unpacking a runtime array at compile time.
177
+ *
178
+ * The packed element carrier is checked rather than assumed: a non-string
179
+ * element would be a value the specification ToStrings, and ToString of an
180
+ * arbitrary value is what this backend has no box for.
181
+ */
182
+ const concatText = (ctx, receiverText, args) => {
183
+ const packed = args[0];
184
+ if (args.length !== 1 || !packed) {
185
+ throw createCppEmitBlockedError('runtime-helper:element:concat:string', '"String.prototype.concat" expects its rest argument already packed into one array-object by ir/lower.ts\'s packRestArguments; ' +
186
+ `this call arrives with ${args.length} operand(s)`);
187
+ }
188
+ if (packed.representation.kind !== 'array-object' || packed.representation.element.kind !== 'string') {
189
+ throw createCppEmitBlockedError('runtime-helper:element:concat:string', `"String.prototype.concat"'s packed rest argument carries "${representationKey(packed.representation)}"; this backend spells it only for an ` +
190
+ 'array-object of strings, because ECMA-262 22.1.3.5 ToStrings every other argument and ToString of an arbitrary value has no box here');
191
+ }
192
+ return `gea::runtime::string::concat(${receiverText}, ${operandText(ctx, packed)})`;
193
+ };
194
+ /** Primitive String `toString`/`valueOf` both return the receiver unchanged. */
195
+ const identityText = (member) => (_ctx, receiverText, args) => {
196
+ if (args.length !== 0) {
197
+ throw createCppEmitBlockedError(`runtime-helper:element:${member}:string`, `"String.prototype.${member}" takes no arguments; this call passes ${args.length}`);
198
+ }
199
+ return receiverText;
200
+ };
201
+ /** `emit-carrier-members.ts`'s `stringMemberText` defers exactly these keys off a `string` receiver -- one authority for "is this method implemented", never two lists that could drift. */
202
+ export const stringMethods = new Map([
203
+ ['concat', concatText],
204
+ ['toString', identityText('toString')],
205
+ ['valueOf', identityText('valueOf')],
206
+ // The two members that take a regular expression and NOTHING else: ECMA-262
207
+ // 22.1.3.11 and 22.1.3.13 both `RegExpCreate` a non-RegExp argument first,
208
+ // so there is no string-shaped form to fall back to and these do not go
209
+ // through `shapedStringMethodText` at all.
210
+ ['match', (ctx, receiverText, args, result) => regexpMatchText(ctx, receiverText, args, result)],
211
+ ['search', (ctx, receiverText, args) => regexpSearchText(ctx, receiverText, args)],
212
+ ['at', optionalResultMethodText('at', '22.1.3.1', 'string')],
213
+ ['codePointAt', optionalResultMethodText('codePointAt', '22.1.3.4', 'number')],
214
+ ...[...stringMethodShapes].map(([member, shape]) => [member, shapedStringMethodText(member, shape)])
215
+ ]);
216
+ export const stringPrototypeMethods = new Set(stringMethods.keys());
217
+ /**
218
+ * Members this backend states a REASON for not implementing, rather than
219
+ * letting them fall into the generic "here is the list of what is implemented"
220
+ * refusal.
221
+ *
222
+ * A member is here when the gap is a specific missing thing a reader would
223
+ * otherwise have to guess at -- a Unicode table, a regular-expression engine,
224
+ * a locale database. The distinction matters: "not built yet" and "cannot be
225
+ * built without X" are different answers, and only the second one tells you
226
+ * what to build.
227
+ */
228
+ export const stringMemberRefusals = new Map([
229
+ [
230
+ 'normalize',
231
+ "ECMA-262 22.1.3.13 normalize(form) applies a Unicode Normalization Form (NFC/NFD/NFKC/NFKD), which needs the Unicode Character Database's " +
232
+ 'canonical-decomposition and combining-class tables. Neither this runtime nor v1 carries them, and normalizing without them would return a ' +
233
+ 'string that is not normalized while claiming it is -- so this is refused rather than approximated by an identity function that happens to be ' +
234
+ 'correct for ASCII'
235
+ ],
236
+ ['matchAll', matchAllRefusal()],
237
+ [
238
+ 'toLocaleLowerCase',
239
+ 'ECMA-262 22.1.3.30 / ECMA-402 is the LOCALE-SENSITIVE case conversion (a Turkish locale maps I to a dotless lowercase form, which toLowerCase ' +
240
+ 'explicitly must not do). There is no locale database here, and rendering it as toLowerCase would silently answer the locale-independent ' +
241
+ 'mapping for a call that asked for the other one'
242
+ ],
243
+ [
244
+ 'toLocaleUpperCase',
245
+ 'ECMA-262 22.1.3.31 / ECMA-402 is the LOCALE-SENSITIVE case conversion; see toLocaleLowerCase -- there is no locale database here'
246
+ ],
247
+ [
248
+ 'localeCompare$options',
249
+ 'ECMA-402 localeCompare(that, locales, options) selects a collation; this runtime has no ICU and no collation table, so only the one-argument ' +
250
+ 'form is rendered, and even that one is a code-unit ordering rather than a collation (see gea::runtime::string::localeCompare)'
251
+ ]
252
+ ]);
@@ -0,0 +1,25 @@
1
+ import type { IrBody } from '../../../ir/model.js';
2
+ import type { IrValueId } from '../../../identity/ids.js';
3
+ import type { EmitContext, PrototypeMethodRead } from '../emit-context.js';
4
+ /**
5
+ * Every deferred prototype-method read in one body, settled before the body
6
+ * renders a line.
7
+ *
8
+ * This composes; it decides nothing. Each carrier's own resolver already IS
9
+ * the authority for what a deferred read on that carrier is, so the claim was
10
+ * lifted out of the resolver as a function and there are exactly two callers
11
+ * of it: this walk, which records the fact, and the resolver, which spells the
12
+ * answer. Nothing here re-tests a predicate that lives in a resolver, and a
13
+ * new carrier is reachable only by adding its claim to both ends -- which is
14
+ * the whole point (invariant 5: no write during render).
15
+ *
16
+ * The order is `emitGet`'s own ladder order, so a receiver two claims could
17
+ * both answer resolves the way the printer resolves it. The claims are keyed
18
+ * on disjoint carrier kinds almost everywhere; where they are not -- the four
19
+ * `Object.prototype` reflection claims -- the ladder is what separates them.
20
+ *
21
+ * `hostMemberReads` is asked first because `declaredHostMethodRead` preempts
22
+ * every branch below it: a read the host tables already claimed is a host
23
+ * member, never a prototype method.
24
+ */
25
+ export declare const prototypeMethodReadsOf: (ctx: EmitContext, body: IrBody) => ReadonlyMap<IrValueId, PrototypeMethodRead>;
@@ -0,0 +1,182 @@
1
+ import { allOperationsOf } from '../../../ir/model.js';
2
+ import { deferredArrayMethodClaim, deferredDictionaryMethodClaim, deferredIteratorMethodClaim, deferredKeyedCollectionMethodClaim, deferredPromiseMethodClaim, deferredScalarMethodClaim, deferredStringMethodClaim, deferredTypedArrayMethodClaim } from '../emit-carrier-members.js';
3
+ import { deferredArrayBufferMethodClaim, deferredDataViewMethodClaim } from '../emit-buffers.js';
4
+ import { deferredTypedArrayUnionMethodClaim, deferredUnionToStringClaim } from '../emit-union-properties.js';
5
+ import { isDeclaredStringPrototypeKey } from '../emit-carrier-members.js';
6
+ import { objectPrototypeMemberNames } from '../../../representation/record-fields.js';
7
+ import { deferredCallableShapeMethodClaim } from '../emit-dynamic-properties.js';
8
+ import { deferredDynamicObjectMethodClaim, deferredObjectShapeMethodClaim } from '../host/object-protocol.js';
9
+ import { deferredIntrinsicReflectionClaim } from '../host/emit-host-properties.js';
10
+ import { deferredDateMethodClaim } from './emit-prototype-date.js';
11
+ import { deferredNativeErrorMethodClaim } from './emit-prototype-error.js';
12
+ import { deferredRegexpMethodClaim } from './emit-prototype-regexp.js';
13
+ /**
14
+ * Every deferred prototype-method read in one body, settled before the body
15
+ * renders a line.
16
+ *
17
+ * This composes; it decides nothing. Each carrier's own resolver already IS
18
+ * the authority for what a deferred read on that carrier is, so the claim was
19
+ * lifted out of the resolver as a function and there are exactly two callers
20
+ * of it: this walk, which records the fact, and the resolver, which spells the
21
+ * answer. Nothing here re-tests a predicate that lives in a resolver, and a
22
+ * new carrier is reachable only by adding its claim to both ends -- which is
23
+ * the whole point (invariant 5: no write during render).
24
+ *
25
+ * The order is `emitGet`'s own ladder order, so a receiver two claims could
26
+ * both answer resolves the way the printer resolves it. The claims are keyed
27
+ * on disjoint carrier kinds almost everywhere; where they are not -- the four
28
+ * `Object.prototype` reflection claims -- the ladder is what separates them.
29
+ *
30
+ * `hostMemberReads` is asked first because `declaredHostMethodRead` preempts
31
+ * every branch below it: a read the host tables already claimed is a host
32
+ * member, never a prototype method.
33
+ */
34
+ export const prototypeMethodReadsOf = (ctx, body) => {
35
+ const reads = new Map();
36
+ // `emitGet` re-enters itself with the proven-present view of an optional
37
+ // receiver, so that view -- not the optional -- is the operand every claim
38
+ // below sees at render time. `unwrapPresentValue` is the render-side twin of
39
+ // this line; it additionally MINTS the unwrap, which is a spelling, not a
40
+ // fact.
41
+ const presentView = (receiver) => receiver.representation.kind === 'optional'
42
+ ? { value: `${receiver.value}:present`, representation: receiver.representation.payload }
43
+ : receiver;
44
+ for (const block of body.blocks.values()) {
45
+ for (const operation of allOperationsOf(block)) {
46
+ if (operation.kind !== 'get')
47
+ continue;
48
+ if (ctx.hostMemberReads.has(operation.result.id))
49
+ continue;
50
+ const receiver = presentView(operation.receiver);
51
+ const claim = claimOf(ctx, receiver, operation) ?? mixedUnionClaimOf(ctx, receiver, operation);
52
+ if (claim !== null)
53
+ reads.set(operation.result.id, claim);
54
+ }
55
+ }
56
+ return reads;
57
+ };
58
+ /** The ladder itself, over one receiver operand -- asked of a whole value and, by `mixedUnionClaimOf`, of one arm of one. */
59
+ const claimOf = (ctx, receiver, operation) => {
60
+ const key = operation.key;
61
+ const texts = ctx.staticKeyTexts;
62
+ return (deferredTypedArrayUnionMethodClaim(texts, receiver, key) ??
63
+ deferredUnionToStringClaim(ctx, receiver, key) ??
64
+ deferredArrayMethodClaim(texts, receiver, key) ??
65
+ deferredTypedArrayMethodClaim(texts, receiver, key) ??
66
+ deferredArrayBufferMethodClaim(texts, receiver, key) ??
67
+ deferredDataViewMethodClaim(texts, receiver, key) ??
68
+ deferredStringMethodClaim(texts, receiver, key) ??
69
+ deferredScalarMethodClaim(texts, receiver, key) ??
70
+ deferredRegexpMethodClaim(texts, receiver, key) ??
71
+ deferredPromiseMethodClaim(texts, receiver, key) ??
72
+ deferredIteratorMethodClaim(texts, receiver, key) ??
73
+ deferredKeyedCollectionMethodClaim(texts, receiver, key) ??
74
+ deferredDateMethodClaim(texts, receiver, key) ??
75
+ deferredNativeErrorMethodClaim(texts, receiver, key) ??
76
+ deferredIntrinsicReflectionClaim(ctx.hosts, texts, receiver, key) ??
77
+ deferredDictionaryMethodClaim(texts, receiver, key) ??
78
+ deferredObjectShapeMethodClaim(ctx, { ...operation, receiver }) ??
79
+ deferredCallableShapeMethodClaim(texts, receiver, key) ??
80
+ deferredDynamicObjectMethodClaim(texts, receiver, key));
81
+ };
82
+ /**
83
+ * A prototype-method read off a HETEROGENEOUS tagged union.
84
+ *
85
+ * `deferredTypedArrayUnionMethodClaim` above claims a union whose every arm
86
+ * means the same thing by the member. This claims the other kind:
87
+ * `(query(t, k) as string[]).join` reads `join` off `string | string[] |
88
+ * Record<string, string> | Record<string, string[]>`, where exactly one arm
89
+ * has an `Array.prototype.join` and the rest have nothing callable of that
90
+ * name at all. Each arm that answers keeps its OWN recorded read -- asked of
91
+ * the same ladder, so no arm is answered by a second copy of a rule -- and the
92
+ * arms that cannot answer are recorded as `null`.
93
+ *
94
+ * `null` is admitted only where the arm PROVABLY has no callable member of
95
+ * that name (`armHasNoCallableMember`), never merely because this backend
96
+ * renders nothing for it: the difference between "the language answers
97
+ * undefined here" and "this member is not implemented yet" is the difference
98
+ * between the TypeError JavaScript throws and a wrong answer, so an arm this
99
+ * cannot prove refuses the whole claim and the read keeps its named refusal.
100
+ *
101
+ * Claimed only at a call fusion, which is what makes the throw exact: a read
102
+ * that is not called can observe the `undefined`, and this claim is consulted
103
+ * only through `prototypeMethodCallText`.
104
+ */
105
+ const mixedUnionClaimOf = (ctx, receiver, operation) => {
106
+ const carrier = receiver.representation;
107
+ if (carrier.kind !== 'tagged-union')
108
+ return null;
109
+ const member = ctx.staticKeyTexts.get(operation.key.value);
110
+ if (member === undefined || objectPrototypeMemberNames.has(member))
111
+ return null;
112
+ const arms = [];
113
+ let answered = 0;
114
+ for (const arm of carrier.arms) {
115
+ const armClaim = claimOf(ctx, { value: receiver.value, representation: arm.value }, operation);
116
+ if (armClaim !== null) {
117
+ arms.push(armClaim);
118
+ answered += 1;
119
+ continue;
120
+ }
121
+ if (!armHasNoCallableMember(arm.value, member))
122
+ return null;
123
+ arms.push(null);
124
+ }
125
+ if (answered === 0)
126
+ return null;
127
+ return {
128
+ receiverKind: 'mixed-union',
129
+ member,
130
+ receiver: { kind: 'operand', operand: receiver },
131
+ receiverElement: null,
132
+ mixedUnionCarrier: carrier,
133
+ mixedUnionArms: arms
134
+ };
135
+ };
136
+ /**
137
+ * Whether this arm PROVABLY holds no callable under this name.
138
+ *
139
+ * Only three shapes can be proven here, and each is proven from a table this
140
+ * backend already owns rather than from the absence of a renderer:
141
+ *
142
+ * - a `string` arm: `String.prototype`'s own member set is the modelled one
143
+ * (`isDeclaredStringPrototypeKey`), so a name outside it reads `undefined`;
144
+ * - a `dictionary` arm: the read is an ENTRY, whose carrier is the table's own
145
+ * value carrier, and a value carrier that can never be callable can never be
146
+ * called -- a number-keyed table additionally has no such key at all;
147
+ * - `null`/`undefined` arms, which throw on the property read itself and are
148
+ * already rendered that way by `armRuntimeFieldText`.
149
+ *
150
+ * Everything else -- a record, a class, a dynamic value, a callable, anything
151
+ * with a sidecar -- can hold a callable this backend has simply not rendered,
152
+ * and answers `false`.
153
+ */
154
+ const armHasNoCallableMember = (arm, member) => {
155
+ if (arm.kind === 'string')
156
+ return !isDeclaredStringPrototypeKey(member);
157
+ // A dictionary can genuinely HOLD this key -- `Record<string, string>` admits
158
+ // a "join" entry -- so absence is not what is proven here. What is proven is
159
+ // that whatever it holds is not callable, and JavaScript's answer to calling
160
+ // a non-callable is the same TypeError as calling an absent one.
161
+ if (arm.kind === 'dictionary')
162
+ return arm.key === 'number' || !mayBeCallable(arm.value);
163
+ return false;
164
+ };
165
+ const mayBeCallable = (representation) => {
166
+ // A union is callable if ANY arm is, and an optional if its payload is:
167
+ // `Record<string, string | string[]>` holds neither a function nor a
168
+ // container of one, and answering that needs the carrier looked THROUGH
169
+ // rather than judged by its top kind.
170
+ if (representation.kind === 'tagged-union')
171
+ return representation.arms.some((arm) => mayBeCallable(arm.value));
172
+ if (representation.kind === 'optional')
173
+ return mayBeCallable(representation.payload);
174
+ return (representation.kind === 'dynamic' ||
175
+ representation.kind === 'function' ||
176
+ representation.kind === 'function-family' ||
177
+ representation.kind === 'function-value-family' ||
178
+ representation.kind === 'function-value-dispatch' ||
179
+ representation.kind === 'function-and-constructor' ||
180
+ representation.kind === 'generic-function-set' ||
181
+ representation.kind === 'callable-identity');
182
+ };
@@ -0,0 +1,140 @@
1
+ import type { DeclarationId, FunctionId, RegionId } from '../../identity/ids.js';
2
+ import type { ClassLayout } from '../../projection/classes.js';
3
+ import type { IrBody } from '../../ir/model.js';
4
+ import type { ReactiveCellPlan } from './host/host-members.js';
5
+ /**
6
+ * Which reactive fields one body READS, and through which receiver.
7
+ *
8
+ * A JSX slot whose value is computed -- `class={done ? 'a' : 'b'}` -- reaches
9
+ * the emitter as a call of a thunk (`plugins/gea/reactive-slots.ts`), and the
10
+ * caller has to subscribe that thunk to every field the expression depends on.
11
+ * The caller cannot see inside the callee's body, and the two are emitted
12
+ * independently and in no guaranteed order, so the answer is computed here,
13
+ * once, over the whole IR before any body is rendered.
14
+ *
15
+ * `source` is what the caller needs in order to NAME the owning object, and
16
+ * there are exactly two shapes a slot expression uses:
17
+ *
18
+ * - `binding` -- a module-scope store (`todo.done1`). Its cell is a global
19
+ * with a stable C++ name, reachable from any body, which is what makes
20
+ * subscribing from the caller possible at all.
21
+ * - `receiver` -- the component's own field (`this.count`). The thunk's
22
+ * receiver and the enclosing template's receiver are the same object, so
23
+ * the caller subscribes through its own.
24
+ *
25
+ * Any other receiver -- a parameter, a local, a field of a field -- is NOT
26
+ * recorded. The caller has no expression for such an object, and inventing one
27
+ * would subscribe the wrong instance; the slot keeps its once-only behaviour
28
+ * and is a stated gap rather than a binding to the wrong owner.
29
+ *
30
+ * TRANSITIVE through a call whose callee this IR closed (`CallOperation.
31
+ * closedCallee`), and it has to be. A GETTER is spelled exactly like a field --
32
+ * `{reader.pageNumberLabel}` beside `{reader.openLabel}` -- but lowers to a
33
+ * call, so a body-only reading found no dependency, `emit-jsx.ts` fell through
34
+ * to the once-only `leafText`, and the slot froze at whatever it read on the
35
+ * first render. The e-reader's page counter said "1 / 1" for a fourteen-hundred
36
+ * page book, for the life of the program.
37
+ *
38
+ * What made the old reading "honest" was NAMEABILITY, not locality, and that is
39
+ * preserved: a callee dependency on a module-scope store is kept as it stands
40
+ * (a global cell is reachable from any frame), while one on the callee's own
41
+ * `this` is re-pointed through the receiver THIS call passes -- and dropped
42
+ * when that receiver is not a shape the caller can name, which is the same test
43
+ * the direct pass applies to its own reads. So the widening still never
44
+ * subscribes to the wrong object; it only stops missing the right one.
45
+ *
46
+ * Over-subscribing is the failure this trades INTO, and for a VALUE slot it is
47
+ * benign: a slot that re-renders when a field its callee read changes without
48
+ * changing the slot's value re-renders to the same text, and every apply there
49
+ * is idempotent. For a NODE slot it is not -- re-running takes the subtree
50
+ * down and builds it again, which repaints -- so that census is narrowed; see
51
+ * `ReactiveDependencyCensus` below.
52
+ */
53
+ export interface ReactiveDependency {
54
+ /** The struct that DECLARES the field, which is what a member pointer must name. */
55
+ readonly struct: string;
56
+ readonly key: string;
57
+ /**
58
+ * `true` when the subscription goes through the field's COMPANION revision
59
+ * cell rather than the field itself -- an array field, whose own carrier
60
+ * cannot be a cell. See `records.ts`'s `cppReactiveRevisionFieldName`.
61
+ */
62
+ readonly revision: boolean;
63
+ readonly source: {
64
+ readonly kind: 'receiver';
65
+ } | {
66
+ readonly kind: 'binding';
67
+ readonly declaration: DeclarationId;
68
+ };
69
+ }
70
+ /**
71
+ * The two dependency censuses, one per kind of thing a subscription re-runs.
72
+ *
73
+ * `all` is the whole-program reading described at the top of this file: every
74
+ * cell a body reads, transitively through the calls it closed. It is what a
75
+ * VALUE slot wants -- a text, a prop, a style member, a class entry -- because
76
+ * re-running one of those writes the same value again when nothing moved, and
77
+ * over-subscribing there costs a comparison.
78
+ *
79
+ * `node` is the same census with one term narrowed, and it exists because for
80
+ * a NODE child the trade `all` makes is not benign. Re-running a node binding
81
+ * takes the subtree down and builds it again, which is a structural change to
82
+ * the tree, which repaints the viewport. An App whose single ternary child
83
+ * picks one of seven screens subscribes, under `all`, to every cell every
84
+ * screen reads -- so tapping a footswitch inside the chain screen rebuilt all
85
+ * 44 of its nodes and repainted 502x410 pixels, although the condition that
86
+ * selects the screen never moved.
87
+ *
88
+ * The narrowing is two rules, and both are about what is ALREADY bound
89
+ * somewhere else.
90
+ *
91
+ * - A body's OWN reads are all kept. A component invocation's props record is
92
+ * built in the thunk, so `<Row value={store.x}/>` reads `x` here, and a
93
+ * prop that changes really does mean a different subtree.
94
+ * - A dependency carried in FROM a callee is kept only when it selects
95
+ * control flow in that callee -- it reaches a branch condition there, so it
96
+ * can change which node the callee returns -- and only when the callee is
97
+ * not itself a lifted JSX slot (`CallEdge.lifted`). A read that merely
98
+ * flows into the callee's own JSX is dropped, and so is a branch inside a
99
+ * slot the callee binds on its own node: in both cases the position that
100
+ * changes has a subscription of its own, and re-running the outer binding
101
+ * rebuilds everything above it to reach a node that would have updated
102
+ * itself.
103
+ *
104
+ * What survives the second rule is the one shape with no binding of its own: a
105
+ * component whose BODY branches on a cell to choose which root it returns.
106
+ */
107
+ export interface ReactiveDependencyCensus {
108
+ readonly all: ReadonlyMap<FunctionId | RegionId, readonly ReactiveDependency[]>;
109
+ readonly node: ReadonlyMap<FunctionId | RegionId, readonly ReactiveDependency[]>;
110
+ }
111
+ export declare const reactiveDependenciesOfBodies: (bodies: readonly IrBody[], classes: ReadonlyMap<DeclarationId, ClassLayout>, reactive: ReactiveCellPlan) => ReactiveDependencyCensus;
112
+ /**
113
+ * Which RECORD fields a JSX site actually binds, keyed by struct name.
114
+ *
115
+ * The elements of a reactive array are only worth celling when a rendered row
116
+ * reads them -- `records.ts` cells exactly this set. Celling every element
117
+ * record of every array field instead is not merely wasteful, it is wrong:
118
+ * `Signal<T>` is not the field's declared carrier, so a struct that is also
119
+ * read by something carrier-sensitive stops compiling. `gea-bench` holds both
120
+ * `rows` (rendered) and `items` (parsed out of JSON), and celling `Item.id`
121
+ * made `gea_json_read(reader, out.id)` an error -- a real defect found by the
122
+ * corpus, not a hypothetical.
123
+ *
124
+ * Two shapes reach a JSX slot, and both are recorded:
125
+ *
126
+ * - a DIRECT read -- `id={cell.id}` -- whose `get` result is the operand of
127
+ * an `element-prop`/`element-child`, possibly through the record that a
128
+ * `style={{...}}` object is built up as.
129
+ * - a THUNK read -- `width={cell.filled ? a : b}`, which
130
+ * `plugins/gea/reactive-slots.ts` rewrites to an immediately-called arrow.
131
+ * The operand is then the CALL, and the fields live in the callee's own
132
+ * body, which is a separate `IrBody`. The callee is recognised by its
133
+ * `allocate-callable` defining the callee operand -- the shape only an
134
+ * IIFE has -- and its body is swept in a second pass.
135
+ *
136
+ * Deliberately computed WITHOUT consulting `ReactiveCellPlan.celled`: that map
137
+ * is derived from this one, so asking it here would be a cycle. This answers
138
+ * the prior question -- what does the program bind -- and celling follows.
139
+ */
140
+ export declare const reactiveBoundRecordFields: (bodies: readonly IrBody[]) => ReadonlyMap<string, ReadonlySet<string>>;