@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,819 @@
1
+ /** The one string that identifies a call spelling -- for a diagnostic, and as the key its preamble is stated under. */
2
+ export const hostCallName = (spelling) => (spelling.kind === 'path' ? spelling.text : spelling.emit);
3
+ export const noHostNamespaces = Object.freeze({
4
+ roots: new Set(),
5
+ typeofs: new Map(),
6
+ methods: new Map(),
7
+ properties: new Map(),
8
+ propertySetters: new Map()
9
+ });
10
+ /**
11
+ * Whether a path names a namespace rather than a member of one.
12
+ *
13
+ * Asked of the member tables' own keys: `navigator.bluetooth` is a namespace
14
+ * exactly because members are stated under it. A prefix test rather than a
15
+ * separate list, so a path cannot be a namespace here and have no members
16
+ * there.
17
+ */
18
+ export const isHostNamespacePath = (namespaces, path) => {
19
+ if (namespaces.roots.has(path))
20
+ return true;
21
+ const prefix = `${path}.`;
22
+ for (const key of namespaces.methods.keys())
23
+ if (key.startsWith(prefix))
24
+ return true;
25
+ for (const key of namespaces.properties.keys())
26
+ if (key.startsWith(prefix))
27
+ return true;
28
+ return false;
29
+ };
30
+ /**
31
+ * The members this backend states a spelling for on its own.
32
+ *
33
+ * Only the surface a *language* runtime owns. `console` is not ECMA-262 --
34
+ * `lib.dom.d.ts` is where TypeScript declares it -- but it is present in every
35
+ * JavaScript host there is, and a compiler that cannot render `console.log`
36
+ * cannot compile ordinary TypeScript. `localStorage` is claimed on the same
37
+ * ground: a key-value store over strings, with no document and no node tree
38
+ * behind it.
39
+ *
40
+ * What is NOT here is the document, the element tree, and JSX. Those are a
41
+ * host's object model rather than the language's, so the plugin that installs
42
+ * that host states them (`plugins/gea/host.ts`) and this backend never learns
43
+ * their spellings. The split is not cosmetic: it is what keeps a claim and the
44
+ * text that renders it in one place. A protocol claimed here whose template
45
+ * lived elsewhere would be two authorities over one question, and the drift
46
+ * between them is silent -- preflight certifies, emission refuses by name.
47
+ */
48
+ const nativeHandleProperty = (protocol, emit) => ({
49
+ kind: 'property',
50
+ store: null,
51
+ emit,
52
+ resultRepresentation: { kind: 'native-handle', protocol, version: 1, native: null, bases: [], call: null, construct: null }
53
+ });
54
+ export const coreHostMembers = new Map([
55
+ // Atomics is a finite language primitive, not an any-shaped Node shim. The
56
+ // call-site renderer verifies the concrete typed-array element carrier and
57
+ // names the one native operation; methods omitted here fail at the property.
58
+ ...['load', 'store', 'add', 'sub', 'and', 'or', 'xor', 'exchange', 'compareExchange', 'isLockFree', 'wait', 'notify'].map((member) => [`Atomics.${member}`, { kind: 'method', emit: '/* atomics call-site renderer */', arity: 'call-site' }]),
59
+ // `console`. Only `log`/`error` are claimed -- the two members any real
60
+ // corpus program actually calls (`citations.md` section 2a) -- not
61
+ // `lib.dom.d.ts`'s full ~18-member interface. `{args}` is the one join of
62
+ // every call argument's ToString text, computed by
63
+ // `emit-tostring.ts`'s `consoleArgumentsText` before this template is
64
+ // filled (`emit-host-invoke.ts`'s `hostCallText`); there is no `{receiver}`
65
+ // because `console`, like `document`, is a singleton whose identity a
66
+ // call never needs to name.
67
+ // `TextEncoder`/`TextDecoder` (Encoding Standard), keyed by the CARRIER the
68
+ // backend states for each in `core-globals.ts`'s `coreNativeTypes` -- the
69
+ // same key `nativeHandleMemberText` builds (`native ?? protocol`) and the
70
+ // same one an installed host's rows are filed under. Each `emit` names a
71
+ // real member of the class `runtime/gea_runtime.h` defines, so clang checks
72
+ // every one of them.
73
+ //
74
+ // What is NOT here is `TextEncoder.encodeInto`: it writes into a caller's
75
+ // view and answers a `{ read, written }` record, and neither half has an
76
+ // implementation behind it. With no row it refuses BY NAME at its own
77
+ // access, which is the whole point of the table being the single authority.
78
+ ['gea::runtime::textcodec::TextEncoder.encoding', { kind: 'property', emit: '{receiver}.encoding', store: null }],
79
+ ['gea::runtime::textcodec::TextEncoder.encode', { kind: 'method', emit: '{receiver}.encode({args})', arity: 'pass-through' }],
80
+ ['gea::runtime::textcodec::TextDecoder.encoding', { kind: 'property', emit: '{receiver}.encoding', store: null }],
81
+ ['gea::runtime::textcodec::TextDecoder.fatal', { kind: 'property', emit: '{receiver}.fatal', store: null }],
82
+ ['gea::runtime::textcodec::TextDecoder.ignoreBOM', { kind: 'property', emit: '{receiver}.ignoreBOM', store: null }],
83
+ // `pass-through`, not a fixed arity, and for the reason that arm exists:
84
+ // both members declare a single OPTIONAL parameter, so a call site legally
85
+ // passes one argument or none, and either fixed number would refuse half of
86
+ // them. The runtime states one overload per real shape (`encode()` /
87
+ // `encode(string)`, `decode()` / `decode(view)`), so which one a call means
88
+ // is C++'s own overload resolution over the argument the program actually
89
+ // wrote -- and a shape no overload covers is a clang error naming the
90
+ // member, never a silently different answer.
91
+ ['gea::runtime::textcodec::TextDecoder.decode', { kind: 'method', emit: '{receiver}.decode({args})', arity: 'pass-through' }],
92
+ ['Console.log', { kind: 'method', emit: 'gea::host::console::log({args})', arity: 'variadic' }],
93
+ ['Console.error', { kind: 'method', emit: 'gea::host::console::error({args})', arity: 'variadic' }],
94
+ // `console.info` is Node's own alias of `console.log` (see the runtime's own
95
+ // `info` overloads for the citation), so this row buys a real member rather
96
+ // than a second severity: `@hono/node-server` writes one on the recoverable
97
+ // client-abort path and refused by name until it existed.
98
+ ['Console.info', { kind: 'method', emit: 'gea::host::console::info({args})', arity: 'variadic' }],
99
+ // `localStorage`. `gea::host::storage` is a singleton table rather than a
100
+ // per-handle one, so no template here names a `{receiver}`.
101
+ ['Storage.getItem', { kind: 'method', emit: 'gea::host::storage::getItem({arg0})', arity: 1 }],
102
+ ['Storage.setItem', { kind: 'method', emit: 'gea::host::storage::setItem({arg0}, {arg1})', arity: 2 }],
103
+ ['Storage.removeItem', { kind: 'method', emit: 'gea::host::storage::removeItem({arg0})', arity: 1 }],
104
+ // `JSON`. Neither member has a single fixed-arity C++ spelling the way
105
+ // every other entry here does -- `stringify`/`parse`'s real signature
106
+ // depends on the STATIC type of the value/assertion at each individual
107
+ // call site, which is exactly what a boxed `gea::Value`-shaped template
108
+ // slot cannot express without reintroducing the boxing this compiler
109
+ // forbids. `emit` is never read: `hostCallText` (emit-host-invoke.ts)
110
+ // recognizes `protocol === 'JSON'` and dispatches to `emit-json.ts`'s
111
+ // `jsonCallText` before it ever reaches this template's fill step.
112
+ ['JSON.stringify', { kind: 'method', emit: '/* unused: see emit-json.ts */', arity: 1 }],
113
+ ['JSON.parse', { kind: 'method', emit: '/* unused: see emit-json.ts */', arity: 1 }],
114
+ // `Math`, `Date` and `String`'s own singleton members -- three of the
115
+ // protocols `manifest.ts` claims in `nativeProtocols`, and the three whose
116
+ // members `gea_runtime.h` actually implements one by one, inside `namespace
117
+ // gea::host::Math` / `::DateConstructor` / `::StringConstructor`. Every
118
+ // `emit` below names a symbol that header really declares; none is derived
119
+ // from the protocol string, so a member the header does not declare cannot
120
+ // be spelled by accident.
121
+ //
122
+ // `property`, not `method`, and the distinction is exactly the one this
123
+ // file's own header draws. `storage.getItem` is a `method` because it names
124
+ // no C++ symbol on its own -- only the call has a spelling. `Math.floor` is
125
+ // the opposite: `gea::host::Math::floor` is a real `const
126
+ // gea::CallableObject<double(double)>` object, so the access loads a value
127
+ // and the *call* goes through that callable carrier rather than through any
128
+ // template here. Rendering it as a `method` would defer the call to a free
129
+ // function the runtime does not have.
130
+ //
131
+ // Listing them is what makes this table the single authority for "what does
132
+ // this member render to". Until they were listed, `nativeHandleMemberText`
133
+ // (emit-properties.ts) interpolated `gea::host::<protocol>::<key>` for them
134
+ // -- and, having no way to tell a member with a real symbol from one with
135
+ // none, for every unclaimed member of every other native-handle protocol
136
+ // too. `Promise.resolve` and `Math.acos` are the two the corpus actually
137
+ // reached that way: both sit on protocols `manifest.ts` claims, neither has
138
+ // any symbol behind it, and both emitted C++ that clang rejected with "no
139
+ // member named ... in namespace 'gea::host'" -- naming neither the access
140
+ // nor this table.
141
+ // `Math.toString()` -- ECMA-262 defines no own `toString` for `Math`
142
+ // (21.3), so it inherits `Object.prototype.toString` (20.1.3.6), whose
143
+ // builtin-tag walk reads `Math[Symbol.toStringTag]` (21.3.1.28.1's own
144
+ // "Math" literal) with no [[Call]] of anything else. The result is
145
+ // therefore a compile-time constant with no receiver read at all -- the
146
+ // same shape `promiseToStringText` (emit-prototype-invoke.ts) answers for
147
+ // `Promise.prototype.toString`, for the identical reason (neither
148
+ // `[Symbol.toStringTag]` nor an own `toString` is ever overridden for
149
+ // these). Borrowed Object.prototype.toString calls use ObjectTag and its
150
+ // native @@toStringTag lookup instead of this direct member path.
151
+ ['Math.toString', { kind: 'method', emit: 'std::string("[object Math]")', arity: 0 }],
152
+ ['Math.floor', { kind: 'property', store: null, emit: 'gea::host::Math::floor' }],
153
+ ['Math.round', { kind: 'property', store: null, emit: 'gea::host::Math::round' }],
154
+ ['Math.sin', { kind: 'property', store: null, emit: 'gea::host::Math::sin' }],
155
+ ['Math.cos', { kind: 'property', store: null, emit: 'gea::host::Math::cos' }],
156
+ ['Math.sqrt', { kind: 'property', store: null, emit: 'gea::host::Math::sqrt' }],
157
+ ['Math.abs', { kind: 'property', store: null, emit: 'gea::host::Math::abs' }],
158
+ ['Math.ceil', { kind: 'property', store: null, emit: 'gea::host::Math::ceil' }],
159
+ ['Math.pow', { kind: 'property', store: null, emit: 'gea::host::Math::pow' }],
160
+ ['Math.atan2', { kind: 'property', store: null, emit: 'gea::host::Math::atan2' }],
161
+ ['Math.random', { kind: 'property', store: null, emit: 'gea::host::Math::random' }],
162
+ ['Math.tan', { kind: 'property', store: null, emit: 'gea::host::Math::tan' }],
163
+ ['Math.asin', { kind: 'property', store: null, emit: 'gea::host::Math::asin' }],
164
+ ['Math.acos', { kind: 'property', store: null, emit: 'gea::host::Math::acos' }],
165
+ ['Math.atan', { kind: 'property', store: null, emit: 'gea::host::Math::atan' }],
166
+ ['Math.sinh', { kind: 'property', store: null, emit: 'gea::host::Math::sinh' }],
167
+ ['Math.log', { kind: 'property', store: null, emit: 'gea::host::Math::log' }],
168
+ // All three retain their array-parameter callable values. Direct numeric
169
+ // max/min calls can additionally borrow a stack sequence without allocating
170
+ // the rest array; aliases and spreads keep the ordinary value spelling.
171
+ ['Math.max', { kind: 'property', store: null, emit: 'gea::host::Math::max', numericRestCall: 'gea::host::Math::maxDirect({args})' }],
172
+ ['Math.min', { kind: 'property', store: null, emit: 'gea::host::Math::min', numericRestCall: 'gea::host::Math::minDirect({args})' }],
173
+ ['Math.hypot', { kind: 'property', store: null, emit: 'gea::host::Math::hypot' }],
174
+ // The sixteen `Math` members `gea_runtime.h` did not have. `cbrt` is v1's
175
+ // (`gea::runtime::math::cbrt`, stdlib.cpp); the other fifteen are written
176
+ // against ECMA-262 §21.3.2 there, because v1's own `gea::runtime::math`
177
+ // namespace has none of them and its boxed `Math` object is an empty record.
178
+ // Each row names a symbol that header really declares, in the same
179
+ // `CallableObject<double(double)>` shape as the rows above -- `imul` is the
180
+ // one binary member.
181
+ ['Math.cbrt', { kind: 'property', store: null, emit: 'gea::host::Math::cbrt' }],
182
+ ['Math.sign', { kind: 'property', store: null, emit: 'gea::host::Math::sign' }],
183
+ ['Math.trunc', { kind: 'property', store: null, emit: 'gea::host::Math::trunc' }],
184
+ ['Math.exp', { kind: 'property', store: null, emit: 'gea::host::Math::exp' }],
185
+ ['Math.expm1', { kind: 'property', store: null, emit: 'gea::host::Math::expm1' }],
186
+ ['Math.log10', { kind: 'property', store: null, emit: 'gea::host::Math::log10' }],
187
+ ['Math.log1p', { kind: 'property', store: null, emit: 'gea::host::Math::log1p' }],
188
+ ['Math.log2', { kind: 'property', store: null, emit: 'gea::host::Math::log2' }],
189
+ ['Math.cosh', { kind: 'property', store: null, emit: 'gea::host::Math::cosh' }],
190
+ ['Math.tanh', { kind: 'property', store: null, emit: 'gea::host::Math::tanh' }],
191
+ ['Math.acosh', { kind: 'property', store: null, emit: 'gea::host::Math::acosh' }],
192
+ ['Math.asinh', { kind: 'property', store: null, emit: 'gea::host::Math::asinh' }],
193
+ ['Math.atanh', { kind: 'property', store: null, emit: 'gea::host::Math::atanh' }],
194
+ ['Math.fround', { kind: 'property', store: null, emit: 'gea::host::Math::fround' }],
195
+ ['Math.clz32', { kind: 'property', store: null, emit: 'gea::host::Math::clz32' }],
196
+ ['Math.imul', { kind: 'property', store: null, emit: 'gea::host::Math::imul' }],
197
+ // `readonly PI: number` -- a data property, and the one member here that is
198
+ // not a callable at all.
199
+ ['Math.PI', { kind: 'property', store: null, emit: 'gea::host::Math::PI' }],
200
+ ['Math.LN2', { kind: 'property', store: null, emit: 'gea::host::Math::LN2' }],
201
+ // The six siblings PI/LN2 never had rows for -- see `gea_runtime.h`'s own
202
+ // comment on the identical gap in its `Math` namespace.
203
+ ['Math.E', { kind: 'property', store: null, emit: 'gea::host::Math::E' }],
204
+ ['Math.LN10', { kind: 'property', store: null, emit: 'gea::host::Math::LN10' }],
205
+ ['Math.LOG2E', { kind: 'property', store: null, emit: 'gea::host::Math::LOG2E' }],
206
+ ['Math.LOG10E', { kind: 'property', store: null, emit: 'gea::host::Math::LOG10E' }],
207
+ ['Math.SQRT1_2', { kind: 'property', store: null, emit: 'gea::host::Math::SQRT1_2' }],
208
+ ['Math.SQRT2', { kind: 'property', store: null, emit: 'gea::host::Math::SQRT2' }],
209
+ ['DateConstructor.now', { kind: 'property', store: null, emit: 'gea::host::DateConstructor::now' }],
210
+ // The prototype slot is a handle of its own protocol (`Date.prototype@1`,
211
+ // registered by `bindHostObjectClosure` beside the constructor): reading it
212
+ // hands the program a namespace-shaped intrinsic, not a Date instance.
213
+ ['DateConstructor.prototype', nativeHandleProperty('Date.prototype', 'gea::NativeHandle<gea_native_protocol_Date_prototype_v1>{}')],
214
+ ['StringConstructor.prototype', nativeHandleProperty('String.prototype', 'gea::NativeHandle<gea_native_protocol_String_prototype_v1>{}')],
215
+ ['NumberConstructor.prototype', nativeHandleProperty('Number.prototype', 'gea::NativeHandle<gea_native_protocol_Number_prototype_v1>{}')],
216
+ // The same slot, widened from Date/String/Number to RegExp, Boolean and
217
+ // Object -- `RegExp.prototype@1`/`Boolean.prototype@1`/`Object.prototype@1`
218
+ // (native-protocols.ts) are claimed rows, so each has a tag struct in
219
+ // `gea_runtime.h` for this handle to name.
220
+ ['RegExpConstructor.prototype', nativeHandleProperty('RegExp.prototype', 'gea::NativeHandle<gea_native_protocol_RegExp_prototype_v1>{}')],
221
+ [
222
+ 'BooleanConstructor.prototype',
223
+ nativeHandleProperty('Boolean.prototype', 'gea::NativeHandle<gea_native_protocol_Boolean_prototype_v1>{}')
224
+ ],
225
+ ['ObjectConstructor.prototype', nativeHandleProperty('Object.prototype', 'gea::NativeHandle<gea_native_protocol_Object_prototype_v1>{}')],
226
+ // `Date.parse` / `Date.UTC` -- ECMA-262 21.4.3.2 / 21.4.3.4.
227
+ //
228
+ // `call-site`, not a fixed-arity template, because `Date.UTC` takes one to
229
+ // seven arguments and an `arity: number` row can state only one of those.
230
+ // `dateConstructorCallText` (emit-prototype-date.ts) is the renderer, keyed
231
+ // off this protocol in `emit-host-invoke.ts`'s `hostMemberRenderers` -- the
232
+ // same mechanism `Promise.resolve` and `Symbol.for` already use.
233
+ //
234
+ // `now` above stays a `property`: it is a real readable
235
+ // `gea::CallableObject<double()>`, so the access loads it and the call goes
236
+ // through that carrier, exactly as `Math.floor` does.
237
+ [
238
+ 'DateConstructor.parse',
239
+ { kind: 'method', emit: '/* unused: see dateConstructorCallText, emit-prototype-date.ts */', arity: 'call-site' }
240
+ ],
241
+ [
242
+ 'DateConstructor.UTC',
243
+ { kind: 'method', emit: '/* unused: see dateConstructorCallText, emit-prototype-date.ts */', arity: 'call-site' }
244
+ ],
245
+ // `Number.isInteger`/`Number.isFinite` -- ECMA-262 21.1.2.3 / 21.1.2.2.
246
+ //
247
+ // `method`, not `property`, and for the reason `Promise.resolve` is: there
248
+ // is no readable `CallableObject` behind them and there could not be one.
249
+ // `lib.es2015.core.d.ts` declares both `(number: unknown) => boolean`, so a
250
+ // callable carrier would have to name a parameter the declaration says is
251
+ // `unknown` -- which is to say it would have to box a number to ask whether
252
+ // it is an integer. The call has a spelling, the member on its own does not,
253
+ // and `gea::host::NumberConstructor`'s overload set refuses in clang for any
254
+ // carrier it cannot answer for rather than answering `false` for a value
255
+ // that is in fact an integer.
256
+ ['NumberConstructor.isInteger', { kind: 'method', emit: 'gea::host::NumberConstructor::isInteger({arg0})', arity: 1 }],
257
+ ['BigIntConstructor.asIntN', { kind: 'method', emit: 'gea::host::BigIntConstructor::asIntN({arg0}, {arg1})', arity: 2 }],
258
+ ['BigIntConstructor.asUintN', { kind: 'method', emit: 'gea::host::BigIntConstructor::asUintN({arg0}, {arg1})', arity: 2 }],
259
+ ['NumberConstructor.isFinite', { kind: 'method', emit: 'gea::host::NumberConstructor::isFinite({arg0})', arity: 1 }],
260
+ // `isNaN`/`isSafeInteger` -- ECMA-262 21.1.2.4 / 21.1.2.5, `method` for the
261
+ // identical reason: both are declared `(number: unknown) => boolean`, so
262
+ // there is no callable carrier to read, and the overload set in
263
+ // `gea_runtime.h` refuses in clang for any carrier it cannot answer for.
264
+ ['NumberConstructor.isNaN', { kind: 'method', emit: 'gea::host::NumberConstructor::isNaN({arg0})', arity: 1 }],
265
+ ['NumberConstructor.isSafeInteger', { kind: 'method', emit: 'gea::host::NumberConstructor::isSafeInteger({arg0})', arity: 1 }],
266
+ // `Number.parseInt` / `Number.parseFloat` -- 21.1.2.13 / 21.1.2.12, which the
267
+ // specification defines as *the same function objects* the globals name.
268
+ // `method`, not `property`: the runtime spells them as free functions, since
269
+ // `parseInt`'s second parameter is optional and a `CallableObject`'s C++
270
+ // signature is one fixed arity. `arity: 2` is the declaration's own frame --
271
+ // `parseInt(string, radix?)` -- and the absent radix arrives as the `0` the
272
+ // clause's step 7 means by "absent", not as a guess.
273
+ ['NumberConstructor.parseInt', { kind: 'method', emit: 'gea::host::NumberConstructor::parseInt({arg0}, {arg1})', arity: 2 }],
274
+ ['NumberConstructor.parseFloat', { kind: 'method', emit: 'gea::host::NumberConstructor::parseFloat({arg0})', arity: 1 }],
275
+ // The five `NumberConstructor` data properties -- 21.1.2.1 `EPSILON`, .6
276
+ // `MAX_SAFE_INTEGER`, .7 `MAX_VALUE`, .8 `MIN_SAFE_INTEGER`, .9 `MIN_VALUE`.
277
+ // `property` like `Math.PI`, and for the same reason: each is a value the
278
+ // access loads, not a call.
279
+ ['NumberConstructor.EPSILON', { kind: 'property', store: null, emit: 'gea::host::NumberConstructor::EPSILON' }],
280
+ ['NumberConstructor.MAX_SAFE_INTEGER', { kind: 'property', store: null, emit: 'gea::host::NumberConstructor::MAX_SAFE_INTEGER' }],
281
+ ['NumberConstructor.MIN_SAFE_INTEGER', { kind: 'property', store: null, emit: 'gea::host::NumberConstructor::MIN_SAFE_INTEGER' }],
282
+ ['NumberConstructor.MAX_VALUE', { kind: 'property', store: null, emit: 'gea::host::NumberConstructor::MAX_VALUE' }],
283
+ ['NumberConstructor.MIN_VALUE', { kind: 'property', store: null, emit: 'gea::host::NumberConstructor::MIN_VALUE' }],
284
+ ['NumberConstructor.POSITIVE_INFINITY', { kind: 'property', store: null, emit: 'gea::host::NumberConstructor::POSITIVE_INFINITY' }],
285
+ ['NumberConstructor.NEGATIVE_INFINITY', { kind: 'property', store: null, emit: 'gea::host::NumberConstructor::NEGATIVE_INFINITY' }],
286
+ ['NumberConstructor.NaN', { kind: 'property', store: null, emit: 'std::numeric_limits<double>::quiet_NaN()' }],
287
+ // `Array.isArray` -- 23.1.2.2. The one `ArrayConstructor` member wired here:
288
+ // it asks what a value IS rather than building or reading one, so it needs
289
+ // no array runtime beyond the tag `gea::Value` already carries.
290
+ // ...and `call-site`, because the answer IS the argument's carrier: an
291
+ // `array-object` is `true` with nothing read, a record/dictionary/string is
292
+ // `false`, a TAGGED UNION is its own discriminant, and only the dynamic box
293
+ // needs the runtime's tag. A fixed `{arg0}` template handed the union
294
+ // straight to C++, which has no overload for one. See `isArrayText`
295
+ // (emit-host-invoke.ts).
296
+ ['ArrayConstructor.isArray', { kind: 'method', emit: '/* unused: see isArrayText, emit-host-invoke.ts */', arity: 'call-site' }],
297
+ ['ArrayConstructor.from', { kind: 'method', emit: '/* unused: see arrayFromText, emit-host-invoke.ts */', arity: 'call-site' }],
298
+ // `Array.prototype` READ AS A VALUE -- `describe(Array.prototype, 'join')`
299
+ // (test/runtime/static-intrinsic-reflection.runtime.js) passes it as an
300
+ // ordinary argument. Its stable native identity owns the intrinsic method
301
+ // descriptors in the same sidecar used for other array properties.
302
+ [
303
+ 'ArrayConstructor.prototype',
304
+ {
305
+ kind: 'property',
306
+ store: null,
307
+ emit: 'gea::arrayPrototypeObject()',
308
+ resultRepresentation: {
309
+ kind: 'array-object',
310
+ element: { kind: 'dynamic', reason: 'declared-any-never-narrowed' },
311
+ ownership: 'shared-refcount',
312
+ extension: null
313
+ }
314
+ }
315
+ ],
316
+ ['Int8ArrayConstructor.from', { kind: 'method', emit: '/* unused: see typedArrayFromText, emit-host-invoke.ts */', arity: 'call-site' }],
317
+ ['Uint8ArrayConstructor.from', { kind: 'method', emit: '/* unused: see typedArrayFromText, emit-host-invoke.ts */', arity: 'call-site' }],
318
+ [
319
+ 'Uint8ClampedArrayConstructor.from',
320
+ { kind: 'method', emit: '/* unused: see typedArrayFromText, emit-host-invoke.ts */', arity: 'call-site' }
321
+ ],
322
+ ['Int16ArrayConstructor.from', { kind: 'method', emit: '/* unused: see typedArrayFromText, emit-host-invoke.ts */', arity: 'call-site' }],
323
+ [
324
+ 'Uint16ArrayConstructor.from',
325
+ { kind: 'method', emit: '/* unused: see typedArrayFromText, emit-host-invoke.ts */', arity: 'call-site' }
326
+ ],
327
+ ['Int32ArrayConstructor.from', { kind: 'method', emit: '/* unused: see typedArrayFromText, emit-host-invoke.ts */', arity: 'call-site' }],
328
+ [
329
+ 'Uint32ArrayConstructor.from',
330
+ { kind: 'method', emit: '/* unused: see typedArrayFromText, emit-host-invoke.ts */', arity: 'call-site' }
331
+ ],
332
+ [
333
+ 'Float32ArrayConstructor.from',
334
+ { kind: 'method', emit: '/* unused: see typedArrayFromText, emit-host-invoke.ts */', arity: 'call-site' }
335
+ ],
336
+ [
337
+ 'Float64ArrayConstructor.from',
338
+ { kind: 'method', emit: '/* unused: see typedArrayFromText, emit-host-invoke.ts */', arity: 'call-site' }
339
+ ],
340
+ ['StringConstructor.fromCharCode', { kind: 'property', store: null, emit: 'gea::host::StringConstructor::fromCharCode' }],
341
+ // `Promise.resolve` -- ECMA-262 27.2.4.7. `PromiseConstructor@1` is claimed
342
+ // in `manifest.ts`'s own `nativeProtocols` beside `Math`/`Date`/`String`
343
+ // because `Promise` is the language's, not a host's; until this row it was
344
+ // the one such claim with nothing at all behind it, which is exactly the
345
+ // drift this file's header warns about -- a protocol claimed in one place
346
+ // whose spelling lives in another, or in this case nowhere.
347
+ //
348
+ // `method`, not `property`: `Math.floor` loads one `CallableObject` that
349
+ // already exists, and `Promise.resolve` cannot, because the promise it
350
+ // mints is typed by the call's own payload. `gea::host::PromiseConstructor::
351
+ // resolve` is a free function TEMPLATE in `gea_runtime.h` (beside
352
+ // `ErrorConstructor::create`, for the identical reason: a payload is
353
+ // routinely a `gea_record_type_N` this header cannot name), so only the
354
+ // call has a spelling and `promiseResolveText` states it.
355
+ //
356
+ // `allSettled`, `any` and the remaining combinators still have no
357
+ // implementation and no row, so they refuse by name at the access -- the
358
+ // corpus census behind that choice, and the one `Promise.all` site it found,
359
+ // are in citations.md. `reject`, `all` and `race` have since each been given
360
+ // a real renderer, listed below.
361
+ ['PromiseConstructor.resolve', { kind: 'method', emit: '/* unused: see promiseResolveText, emit-host-invoke.ts */', arity: 'call-site' }],
362
+ [
363
+ 'PromiseConstructor.reject',
364
+ { kind: 'method', emit: '/* unused: see promiseConstructorText, emit-host-invoke.ts */', arity: 'call-site' }
365
+ ],
366
+ // `Promise.all` -- 27.2.4.1. Same `call-site` reason as `resolve`: the array
367
+ // it fulfils with is typed by the call's own elements, and the per-element
368
+ // `PromiseResolve` is a carrier question only the emitter can answer, so the
369
+ // renderer hands the runtime a lambda rather than a fixed spelling.
370
+ ['PromiseConstructor.all', { kind: 'method', emit: '/* unused: see promiseAllText, emit-host-invoke.ts */', arity: 'call-site' }],
371
+ // `Promise.race` -- 27.2.4.5, `call-site` for the same reason `all` is: the
372
+ // promise it mints is typed by the call's own `Awaited<T>` and the per-element
373
+ // registration is a carrier question only the emitter can answer, so the
374
+ // renderer hands the runtime an adopter lambda rather than a fixed spelling.
375
+ ['PromiseConstructor.race', { kind: 'method', emit: '/* unused: see promiseRaceText, emit-host-invoke.ts */', arity: 'call-site' }],
376
+ // `Symbol.for` -- ECMA-262 20.4.2.2. `call-site` because a LITERAL key does
377
+ // not render as a call at all: `symbolMemberText` (emit-host-invoke.ts)
378
+ // interns it into the unit's own table and the access becomes a reference to
379
+ // one namespace-scope `inline const gea::Symbol`, evaluated once. A computed
380
+ // key has no literal to intern and renders as the `gea::symbolFor(k)` call
381
+ // this row would otherwise template -- one member, two spellings, which is
382
+ // precisely what a fixed `emit` string cannot say.
383
+ ['SymbolConstructor.for', { kind: 'method', emit: '/* unused: see symbolMemberText, emit-host-invoke.ts */', arity: 'call-site' }],
384
+ // `Symbol.keyFor` -- 20.4.2.6. One fixed spelling, so an ordinary row: the
385
+ // registry lookup is a runtime question about a symbol whose value is not
386
+ // known here, and it answers `Optional<std::string>` because an unregistered
387
+ // symbol's key is `undefined`, not `""`.
388
+ ['SymbolConstructor.keyFor', { kind: 'method', emit: 'gea::symbolKeyFor({arg0})', arity: 1 }],
389
+ // The well-known symbols this backend has an id for -- ECMA-262 6.1.5.1.
390
+ // Data properties, so `kind: 'property'` with no store: `Symbol.dispose` IS
391
+ // a value, and reading it neither calls anything nor can be assigned to.
392
+ //
393
+ // Reading one is all a row here claims. `Symbol.iterator` being readable
394
+ // does not make a `for...of` over an arbitrary object work, and the
395
+ // operations that consume these symbols refuse at their own sites exactly as
396
+ // they did before -- which is why the rows are per member rather than a
397
+ // blanket claim over `SymbolConstructor`.
398
+ [
399
+ 'SymbolConstructor.asyncIterator',
400
+ { kind: 'property', store: null, emit: 'gea::wellKnownSymbol(gea::detail::WellKnownSymbol::AsyncIterator)' }
401
+ ],
402
+ ['SymbolConstructor.iterator', { kind: 'property', store: null, emit: 'gea::wellKnownSymbol(gea::detail::WellKnownSymbol::Iterator)' }],
403
+ // `Symbol.match` and `Symbol.toPrimitive` are readable for the same reason
404
+ // `Symbol.iterator` above is, and the RUNTIME already implements both
405
+ // behaviours in full: `isRegExp` (gea_runtime.h) does the 22.2.7.4 `@@match`
406
+ // read through `wellKnownSymbol(WellKnownSymbol::Match)`, and
407
+ // `dynamicToPrimitive`/`dynamicToNumber` (gea_dynamic_proxy.h) run 7.1.1's
408
+ // `@@toPrimitive` dispatch. Only this table was missing the rows, so
409
+ // `exotic[Symbol.toPrimitive] = ...` and `regexLike[Symbol.match]` were
410
+ // refused at the property read while the machinery behind them was sitting
411
+ // there complete.
412
+ //
413
+ // This table is still an arbitrary SUBSET of the runtime's own
414
+ // `WellKnownSymbol` enum -- `hasInstance`, `isConcatSpreadable`, `matchAll`,
415
+ // `replace`, `search`, `species`, `split` and `unscopables` remain absent
416
+ // with no stated reason. Each needs the same one-line row plus evidence that
417
+ // whatever consumes it exists; they are left out here rather than added
418
+ // blind, because a readable property whose behaviour is not implemented
419
+ // turns a clean refusal into a wrong answer.
420
+ ['SymbolConstructor.match', { kind: 'property', store: null, emit: 'gea::wellKnownSymbol(gea::detail::WellKnownSymbol::Match)' }],
421
+ [
422
+ 'SymbolConstructor.toPrimitive',
423
+ { kind: 'property', store: null, emit: 'gea::wellKnownSymbol(gea::detail::WellKnownSymbol::ToPrimitive)' }
424
+ ],
425
+ [
426
+ 'SymbolConstructor.toStringTag',
427
+ { kind: 'property', store: null, emit: 'gea::wellKnownSymbol(gea::detail::WellKnownSymbol::ToStringTag)' }
428
+ ],
429
+ ['SymbolConstructor.dispose', { kind: 'property', store: null, emit: 'gea::wellKnownSymbol(gea::detail::WellKnownSymbol::Dispose)' }],
430
+ [
431
+ 'SymbolConstructor.asyncDispose',
432
+ { kind: 'property', store: null, emit: 'gea::wellKnownSymbol(gea::detail::WellKnownSymbol::AsyncDispose)' }
433
+ ],
434
+ // `Object`'s statics. Every row is `call-site` and every one of them has to
435
+ // be, for one reason each spelling shares: what these render depends on the
436
+ // RECEIVER'S CARRIER at the individual site, which no fixed template can
437
+ // name.
438
+ //
439
+ // `Object.keys(shape)` where `shape`'s fields the checker already knows is a
440
+ // constant -- the field list, written out, with no runtime walk at all --
441
+ // and `Object.keys(anything)` where the program declared `anything` to be
442
+ // `any` is a real enumeration of a real ordered own-property table
443
+ // (`gea::host::ObjectConstructor::keys`, gea_runtime.h). One member, two
444
+ // spellings, decided by the argument: exactly what `SymbolConstructor.for`'s
445
+ // own row above describes for a literal vs. a computed key, and exactly what
446
+ // a fixed `emit` string cannot say. `objectMemberText` (emit-host-invoke.ts)
447
+ // states all of them and refuses by name for a carrier neither arm covers.
448
+ //
449
+ // The claim is per MEMBER, never per protocol: `Object.create`,
450
+ // `Object.setPrototypeOf`, `Object.defineProperties`
451
+ // and the rest have no row here, so each refuses
452
+ // at its own access with its own name. See `manifest.ts`'s
453
+ // `ObjectConstructor@1` entry for why each is absent. `Object.getPrototypeOf`
454
+ // is claimed below despite that entry's own comment predating it: the
455
+ // `[[Prototype]]` slot this backend's `DynamicObject` already carries and
456
+ // honours (`instanceof`/`in` already walk it) is a real answer, not the
457
+ // unmodeled `Object.prototype` INTRINSIC that comment is about -- see
458
+ // `getPrototypeOfText`, `emit-host-object.ts`. `Object.prototype` ITSELF is a
459
+ // separate row above this block, under the `.prototype` widening
460
+ // (`ObjectConstructor.prototype`) -- a reflection-only handle, not the
461
+ // intrinsic object `getPrototypeOfText` still refuses to fabricate.
462
+ ['ObjectConstructor.keys', { kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }],
463
+ ['ObjectConstructor.values', { kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }],
464
+ ['ObjectConstructor.entries', { kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }],
465
+ [
466
+ 'ObjectConstructor.getOwnPropertyNames',
467
+ { kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }
468
+ ],
469
+ ['ObjectConstructor.assign', { kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }],
470
+ // `Object.create(null)` -- the one-argument, null-prototype form; see `createText` (emit-host-object.ts) for what renders and what still refuses.
471
+ [
472
+ 'ObjectConstructor.fromEntries',
473
+ { kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }
474
+ ],
475
+ ['ObjectConstructor.create', { kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }],
476
+ [
477
+ 'ObjectConstructor.defineProperty',
478
+ { kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }
479
+ ],
480
+ [
481
+ 'ObjectConstructor.getOwnPropertyDescriptor',
482
+ { kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }
483
+ ],
484
+ ['ObjectConstructor.freeze', { kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }],
485
+ ['ObjectConstructor.isFrozen', { kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }],
486
+ ['ObjectConstructor.seal', { kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }],
487
+ ['ObjectConstructor.isSealed', { kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }],
488
+ [
489
+ 'ObjectConstructor.preventExtensions',
490
+ { kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }
491
+ ],
492
+ [
493
+ 'ObjectConstructor.isExtensible',
494
+ { kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }
495
+ ],
496
+ ['ObjectConstructor.hasOwn', { kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }],
497
+ ['ObjectConstructor.is', { kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }],
498
+ [
499
+ 'ObjectConstructor.getPrototypeOf',
500
+ { kind: 'method', emit: '/* unused: see objectMemberText, emit-host-invoke.ts */', arity: 'call-site' }
501
+ ],
502
+ // `ArrayBuffer.isView` is a carrier test: typed arrays and DataViews are
503
+ // views, while the backing ArrayBuffer and every other stated carrier are
504
+ // not. The call-site renderer owns that distinction.
505
+ [
506
+ 'ArrayBufferConstructor.isView',
507
+ { kind: 'method', emit: '/* unused: see isArrayBufferViewText, emit-host-invoke.ts */', arity: 'call-site' }
508
+ ],
509
+ // `PropertyDescriptor`'s own six fields -- ECMA-262 6.1.7.1, and the whole
510
+ // of the interface `lib.es5.d.ts` declares. `property`, not `method`: a
511
+ // descriptor field IS a value, unlike `Object.keys`, which names a symbol
512
+ // only at its call.
513
+ //
514
+ // Every row names a member of `gea::PropertyDescriptor` itself, because that
515
+ // is what the carrier is: `gea::NativeHandle` is specialized for this
516
+ // protocol's tag onto the real descriptor (see that specialization in
517
+ // `gea_runtime.h`), so `{receiver}.value` is a struct member load and not an
518
+ // id lookup into a store.
519
+ //
520
+ // `value` is declared `any`, which derives `dynamic` and carries
521
+ // `gea::Value` -- the same type the descriptor field already is, so the read
522
+ // is a plain member load. A descriptor that states no value holds a
523
+ // default-constructed `gea::Value`, which IS `undefined`: the right answer
524
+ // rather than a coincidence.
525
+ //
526
+ // `writable`/`enumerable`/`configurable` are declared `boolean | undefined`,
527
+ // so the plan selects `gea::Optional<bool>` and the read has to PRODUCE one.
528
+ // The descriptor's own `has*` flag is exactly that presence bit (6.2.6
529
+ // distinguishes "states false" from "states nothing"), so the ternary below
530
+ // is not a widening bolted on -- it is the same fact spelled in the carrier
531
+ // the checker asked for. Emitting the bare `bool` instead type-checked in
532
+ // this table and disagreed with the plan at the use site, which is the
533
+ // checker-vs-physical-carrier defect this compiler exists to not have.
534
+ // `{receiver}` repeats, which is safe: an operand's text is a value name or
535
+ // a literal, never an expression with an effect to run twice.
536
+ //
537
+ // Every row is READ-ONLY. A write would have to reconcile an
538
+ // `Optional<bool>` back onto a `bool` plus its flag, and nothing in the
539
+ // corpus mutates a descriptor in place -- a program builds a literal and
540
+ // passes it to `defineProperty`. So a write refuses by name rather than
541
+ // carrying a reconciliation with no call site to check it.
542
+ //
543
+ // `get`/`set` have NO ROW AT ALL, so a read of either refuses by name.
544
+ // `gea::PropertyDescriptor` stores an accessor as a native `std::function`
545
+ // -- which is what lets `gea::runtime::object::get` actually invoke one --
546
+ // and the program's own carrier for `(() => any) | undefined` is a
547
+ // `gea::CallableObject`. Those are different physical types, and a row
548
+ // spelling the member anyway would emit the descriptor's field where the
549
+ // plan wants the callable. Converting between them is real work with a real
550
+ // question in it (how the receiver reaches the getter), and it is not done
551
+ // here -- see `objectMemberText`'s matching refusal for an accessor
552
+ // descriptor passed to `defineProperty`.
553
+ ['PropertyDescriptor.value', { kind: 'property', emit: '{receiver}.value', store: null }],
554
+ [
555
+ 'PropertyDescriptor.writable',
556
+ {
557
+ kind: 'property',
558
+ emit: '({receiver}.hasWritable ? gea::Optional<bool>({receiver}.writable) : gea::Optional<bool>())',
559
+ store: null
560
+ }
561
+ ],
562
+ [
563
+ 'PropertyDescriptor.enumerable',
564
+ {
565
+ kind: 'property',
566
+ emit: '({receiver}.hasEnumerable ? gea::Optional<bool>({receiver}.enumerable) : gea::Optional<bool>())',
567
+ store: null
568
+ }
569
+ ],
570
+ [
571
+ 'PropertyDescriptor.configurable',
572
+ {
573
+ kind: 'property',
574
+ emit: '({receiver}.hasConfigurable ? gea::Optional<bool>({receiver}.configurable) : gea::Optional<bool>())',
575
+ store: null
576
+ }
577
+ ]
578
+ ]);
579
+ /**
580
+ * The ambient FREE FUNCTIONS the language itself defines on the global object,
581
+ * to the C++ each is -- the `hostFunctions` half of what `coreHostMembers` is
582
+ * to `hostMembers`.
583
+ *
584
+ * These are ECMAScript's, not any host's, so they belong here and not in a
585
+ * plugin package: `parseInt` is defined by ECMA-262 §19.2.5 and is present in
586
+ * every conforming environment, gea or otherwise. Before this table they had
587
+ * no claim anywhere, so `projection/bindings.ts` fell through to the ordinary
588
+ * external-cell case and `translation-unit.ts` declared `extern
589
+ * gea::CallableObject<double(std::string, gea::Optional<double>)> parseInt;`
590
+ * -- a global VARIABLE no object file defines. That passes a `-fsyntax-only`
591
+ * check, never links, and (if something does define the symbol) calls through
592
+ * a null invoke pointer. `plugins/model.ts`'s own `hostFunctions` comment
593
+ * describes exactly that failure for the host case.
594
+ *
595
+ * `parseInt` and `parseFloat` name `NumberConstructor`'s functions rather than
596
+ * twins of their own, because ECMA-262 21.1.2.13 and 21.1.2.12 define
597
+ * `Number.parseInt`/`Number.parseFloat` as *the same function objects* as the
598
+ * globals. `isNaN`/`isFinite` do get their own spellings, because the global
599
+ * pair and the `Number` pair are genuinely different functions -- see
600
+ * `gea::host::globalIsNaN` in `gea_runtime.h`.
601
+ */
602
+ export const coreHostFunctions = new Map([
603
+ ['parseInt', 'gea::host::NumberConstructor::parseInt'],
604
+ ['parseFloat', 'gea::host::NumberConstructor::parseFloat'],
605
+ ['isNaN', 'gea::host::globalIsNaN'],
606
+ ['isFinite', 'gea::host::globalIsFinite']
607
+ ]);
608
+ /**
609
+ * The ambient CONSTANTS the language defines on the global object, to the text
610
+ * each read renders.
611
+ *
612
+ * `NaN` (ECMA-262 §19.1.1) and `Infinity` (§19.1.2) are `declare var`s in
613
+ * `lib.es5.d.ts`, so without a claim here they were placed as ordinary
614
+ * external cells and the unit emitted `extern double NaN;` -- again a symbol
615
+ * nothing defines. A constant is the right storage rather than a function or a
616
+ * cell: neither name is readable-and-writable in any meaningful sense (both
617
+ * are non-writable, non-configurable properties of the global object), so
618
+ * every read is the value, spelled inline, exactly as
619
+ * `BindingStorage`'s `host-constant` describes for an Objective-C enumerator.
620
+ *
621
+ * `undefined` (§19.1.3) is not here: TypeScript treats it as a keyword with
622
+ * its own type rather than a binding this projection ever asks about, so it
623
+ * needs no cell and has none.
624
+ */
625
+ export const coreHostConstants = new Map([
626
+ ['NaN', 'std::numeric_limits<double>::quiet_NaN()'],
627
+ ['Infinity', 'std::numeric_limits<double>::infinity()']
628
+ ]);
629
+ /**
630
+ * The member a protocol states, looked up in the table this compilation built.
631
+ *
632
+ * The table is passed rather than imported: a plugin installs host protocols of
633
+ * its own, and a lookup that read a module-level map could only ever see this
634
+ * file's half of the answer.
635
+ */
636
+ export const hostMemberOf = (table, protocol, member) => table.get(`${protocol}.${member}`);
637
+ /**
638
+ * A builtin method's own `length` where ECMA-262 states one that the
639
+ * declaration's required-parameter count does not reproduce. `lib.d.ts`
640
+ * marks `setFullYear(year, month?, date?)` with two optionals, so the census
641
+ * reads a required arity of 1; 21.4.4.22 gives the function `length` 3. The
642
+ * spec's number is a host fact, stated here beside the other host facts, and
643
+ * consulted before the census's arity by every reflection reader.
644
+ */
645
+ const hostIntrinsicLengths = new Map([
646
+ ['Date.prototype.setFullYear', 3],
647
+ ['Date.prototype.setHours', 4],
648
+ ['Date.prototype.setMinutes', 3],
649
+ ['Date.prototype.setMonth', 2],
650
+ ['Date.prototype.setSeconds', 2],
651
+ ['Date.prototype.setUTCFullYear', 3],
652
+ ['Date.prototype.setUTCHours', 4],
653
+ ['Date.prototype.setUTCMinutes', 3],
654
+ ['Date.prototype.setUTCMonth', 2],
655
+ ['Date.prototype.setUTCSeconds', 2],
656
+ ['Date.prototype.toJSON', 1],
657
+ ['Number.prototype.toExponential', 1],
658
+ ['Number.prototype.toFixed', 1],
659
+ ['Number.prototype.toPrecision', 1],
660
+ ['Number.prototype.toString', 1],
661
+ // `X.prototype.constructor.length` is the constructor's own `length`.
662
+ ['Date.prototype.constructor', 7],
663
+ ['String.prototype.constructor', 1],
664
+ ['Number.prototype.constructor', 1],
665
+ // 23.1.2.1: `Array.from` is one function of length 1 whatever the four
666
+ // `lib.d.ts` overloads say. It is read as a VALUE rather than called, so
667
+ // there is no census arity behind it to fall back to -- see
668
+ // `statedHostIntrinsicLength` below.
669
+ ['ArrayConstructor.from', 1]
670
+ ]);
671
+ /**
672
+ * The spec's own `length` for a builtin, or `null` where none is stated here.
673
+ *
674
+ * Separated from `hostIntrinsicLengthOf` because a builtin read as a VALUE has
675
+ * no census arity to fall back to: `0` would be a fabricated answer, and the
676
+ * reader refuses by name instead. Same map, so the two readers cannot drift.
677
+ */
678
+ export const statedHostIntrinsicLength = (protocol, member) => hostIntrinsicLengths.get(`${protocol}.${member}`) ?? null;
679
+ export const hostIntrinsicLengthOf = (protocol, member, censusArity) => statedHostIntrinsicLength(protocol, member) ?? censusArity ?? 0;
680
+ /**
681
+ * Fills a template's `{receiver}`, `{argN}`, and `{args}` slots.
682
+ *
683
+ * Scanned rather than pattern-matched: a RegExp is forbidden under this
684
+ * directory, and rightly so -- the emitted spelling of a program is not a place
685
+ * for a pattern language whose failure mode is a silently different match.
686
+ *
687
+ * `{args}` is separate from `{argN}` rather than a positional index into the
688
+ * same `args` array: a variadic call has no fixed positions to index, only
689
+ * one already-joined value the caller (`hostCallText`) computed ahead of time
690
+ * (see `consoleArgumentsText`, emit-tostring.ts). It is checked before the
691
+ * `{arg` prefix test below on purpose -- the literal slot name `args` itself
692
+ * starts with the three characters `arg`, so an unordered check would read it
693
+ * as an argument index, fail `Number.isInteger` on the leftover `"s"`, and
694
+ * refuse a template that is actually well-formed.
695
+ *
696
+ * Returns `null` when the template names a slot the call site did not supply,
697
+ * so the caller refuses by name instead of emitting a hole.
698
+ */
699
+ /**
700
+ * Whether `{...}` here is meant as a slot at all.
701
+ *
702
+ * A slot is spelled in bare alphanumerics -- `receiver`, `args`, `value`,
703
+ * `arg0` -- and a brace-delimited run of C++ never is: a lambda body, a
704
+ * compound statement and an aggregate initializer all contain whitespace or
705
+ * punctuation. So this is what separates "the table misspelled a slot", which
706
+ * must be refused by name, from "the template contains C++", which must be
707
+ * copied through. Measured against every installed row before being relied on:
708
+ * 12 of 1044 templates carry a non-slot brace and none of them is ambiguous.
709
+ *
710
+ * Hand-rolled rather than a character class because no RegExp literal may
711
+ * appear under `targets/cpp` -- see `scripts/architecture.mjs`.
712
+ */
713
+ const isSlotSpelling = (slot) => {
714
+ if (slot.length === 0)
715
+ return false;
716
+ for (const character of slot) {
717
+ const isDigit = character >= '0' && character <= '9';
718
+ const isLower = character >= 'a' && character <= 'z';
719
+ const isUpper = character >= 'A' && character <= 'Z';
720
+ if (!isDigit && !isLower && !isUpper)
721
+ return false;
722
+ }
723
+ return true;
724
+ };
725
+ export const fillHostTemplate = (emit, receiver, args, variadicArgs = null, value = null) => {
726
+ const out = [];
727
+ let index = 0;
728
+ while (index < emit.length) {
729
+ const open = emit.indexOf('{', index);
730
+ if (open < 0) {
731
+ out.push(emit.slice(index));
732
+ break;
733
+ }
734
+ const close = emit.indexOf('}', open);
735
+ if (close < 0) {
736
+ out.push(emit.slice(index));
737
+ break;
738
+ }
739
+ out.push(emit.slice(index, open));
740
+ const slot = emit.slice(open + 1, close);
741
+ if (slot === 'receiver') {
742
+ if (receiver === null)
743
+ return null;
744
+ out.push(receiver);
745
+ }
746
+ else if (slot === 'args') {
747
+ if (variadicArgs === null)
748
+ return null;
749
+ out.push(variadicArgs);
750
+ }
751
+ else if (slot === 'value') {
752
+ if (value === null)
753
+ return null;
754
+ out.push(value);
755
+ }
756
+ else if (slot.startsWith('arg')) {
757
+ const ordinal = Number(slot.slice(3));
758
+ const argument = Number.isInteger(ordinal) ? args[ordinal] : undefined;
759
+ if (argument === undefined)
760
+ return null;
761
+ out.push(argument);
762
+ }
763
+ else if (isSlotSpelling(slot)) {
764
+ // A slot spelling this filler does not know is a defect in this table,
765
+ // not in the program being compiled, and rendering the braces through
766
+ // into C++ would turn it into a confusing clang error instead of a named
767
+ // one.
768
+ return null;
769
+ }
770
+ else {
771
+ // Not a slot at all: a host template is C++ text, and C++ text
772
+ // legitimately contains braces. Twelve of the Apple rows spell a whole
773
+ // lambda -- `([&]() { id __gea_view = ...; })()` -- and treating that
774
+ // opening brace as a slot made the row unfillable, which surfaced as
775
+ // "names a slot this call cannot fill" for a template that named no slot
776
+ // there at all.
777
+ //
778
+ // Only the brace itself is consumed, never the span it appeared to open.
779
+ // A C++ block CONTAINS slots -- `...initWithCallback:std::function<void()>({arg0})...`
780
+ // sits inside a lambda body -- and skipping to the matching-looking `}`
781
+ // swallowed them: `{arg0}` was copied through verbatim and reached clang
782
+ // as an undeclared identifier. Advancing one character keeps the scan
783
+ // inside the block, where the real slots are.
784
+ out.push('{');
785
+ index = open + 1;
786
+ continue;
787
+ }
788
+ index = close + 1;
789
+ }
790
+ return out.join('');
791
+ };
792
+ /**
793
+ * How many arguments a host template consumes, read from the template itself.
794
+ *
795
+ * The template is the authority on this and nothing else is: it names
796
+ * `{arg0}`, `{arg1}`, ... exactly as many times as the host spelling needs, and
797
+ * `fillHostTemplate` refuses a slot the call cannot fill. Taking the count from
798
+ * the declared parameter list instead would be a second answer to the same
799
+ * question, free to drift from the text that actually gets rendered -- and a
800
+ * declared optional parameter the spelling does not mention would make the two
801
+ * disagree immediately.
802
+ */
803
+ export const templateArity = (emit) => {
804
+ let highest = -1;
805
+ let index = 0;
806
+ while (index < emit.length) {
807
+ const open = emit.indexOf('{arg', index);
808
+ if (open < 0)
809
+ break;
810
+ const close = emit.indexOf('}', open);
811
+ if (close < 0)
812
+ break;
813
+ const ordinal = Number(emit.slice(open + 4, close));
814
+ if (Number.isInteger(ordinal) && ordinal > highest)
815
+ highest = ordinal;
816
+ index = close + 1;
817
+ }
818
+ return highest + 1;
819
+ };