@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,904 @@
1
+ import { nodeOfOperation, operationOfResult, withoutSpecialization } from '../../identity/ids.js';
2
+ import { recordLayoutPolicyOf } from '../../projection/fields.js';
3
+ import { noInstantiationFacts } from '../../ir/instantiation.js';
4
+ import { observesEveryCallableIdentity } from '../../ir/callable-identity-demand.js';
5
+ import { hostCallName, hostMemberOf, statedHostIntrinsicLength } from './host/host-members.js';
6
+ import { representationKey } from '../../representation/model.js';
7
+ import { cppBodyName, cppConstructName, cppNarrowedIntegerType, cppStringLiteral, cppTypeOf, cppUndefinedIn } from './types.js';
8
+ import { hostBuiltinFunctionIdentityText, hostClassValueText, hostFunctionValueText, hostJsonMemberValueText, hostMemberValueText } from './host/emit-host-value.js';
9
+ import { createConversionNodes } from '../../conversion/nodes.js';
10
+ import { createCppConversionRegistry } from './conversions.js';
11
+ export const createCppEmitBlockedError = (kind, reason) => Object.assign(new Error(`cpp emission refuses to lower "${kind}": ${reason}`), { cppEmitBlocked: true, kind });
12
+ export const isCppEmitBlockedError = (error) => error instanceof Error && error.cppEmitBlocked === true;
13
+ /**
14
+ * The standard `Symbol.<name>` identity encoded by a `sym(declaration)`
15
+ * property key, read straight off the key TEXT.
16
+ *
17
+ * A record field's key arrives as text and never as an operand
18
+ * (`derive.ts`'s `recordFieldKeyOf` mints it), so a reader that only has a
19
+ * layout cannot go through `wellKnownSymbolMemberOf` below. Both spellings of
20
+ * the question resolve against the one census the frontend published
21
+ * (`host-protocols.ts`'s `wellKnownSymbolDeclarationsOf`), which is what keeps
22
+ * "which declaration is `Symbol.match`" a single answer.
23
+ */
24
+ export const wellKnownSymbolMemberOfKey = (wellKnownSymbols, key) => {
25
+ for (const [declaration, member] of wellKnownSymbols) {
26
+ if (key === `sym(${declaration})`)
27
+ return member;
28
+ }
29
+ return null;
30
+ };
31
+ /** The standard `Symbol.<name>` identity encoded by a static `sym(declaration)` property key. */
32
+ export const wellKnownSymbolMemberOf = (ctx, operand) => {
33
+ const key = ctx.staticKeyTexts.get(operand.value);
34
+ if (key === undefined)
35
+ return null;
36
+ return wellKnownSymbolMemberOfKey(ctx.wellKnownSymbols, key);
37
+ };
38
+ /** The index a body with no capture information at all reads as: every owner closes over nothing. */
39
+ export const emptyCaptureIndex = {
40
+ of: () => ({ kind: 'none' }),
41
+ isBoxed: () => false,
42
+ isCaptured: () => false,
43
+ requiresEarlyBox: () => false,
44
+ readsReceiver: () => false
45
+ };
46
+ /**
47
+ * The ABI a capturing body itself reads through, as opposed to the one its
48
+ * callers push.
49
+ *
50
+ * A caller of a callable carrier -- `abiOfCallee`, `emitCall`'s own receiver
51
+ * check, the thunk's own external signature (`translation-unit.ts`'s
52
+ * `thunkOf`) -- always consults the *real*, unmodified ABI: an arrow still
53
+ * takes no receiver argument at its call sites, full stop. Only the body's
54
+ * own frame needs to know that a receiver it declares no ABI slot for is
55
+ * nonetheless available, because a nested arrow's `this` captured it from the
56
+ * enclosing method. Overriding `.receiver` here, in one place, is what lets
57
+ * `emitReceiver` read it exactly as it already reads an ordinary method's own
58
+ * `this` -- the capture only moves where the value comes from, not how the
59
+ * body asks for it.
60
+ */
61
+ export const effectiveAbiOf = (abi, admission) => abi && admission.kind === 'ok' && admission.layout.receiver ? { ...abi, receiver: admission.layout.receiver } : abi;
62
+ /** Every deferred direct callee this body's `call` operations resolved to, straight off `CallOperation.target` -- see `EmitContext.directCallees`'s doc. */
63
+ export const directCalleesOf = (body, abiOfCallable) => {
64
+ const directCallees = new Map();
65
+ const directCalleeAbis = new Map();
66
+ for (const block of body.blocks.values()) {
67
+ for (const operation of block.operations) {
68
+ if (operation.kind !== 'call' || operation.target?.kind !== 'direct')
69
+ continue;
70
+ directCallees.set(operation.callee.value, cppBodyName(operation.target.functionId));
71
+ const abi = abiOfCallable(operation.target.functionId);
72
+ if (abi !== null)
73
+ directCalleeAbis.set(operation.callee.value, abi);
74
+ }
75
+ }
76
+ return { directCallees, directCalleeAbis };
77
+ };
78
+ export const createEmitContext = (abi, owner, placements, classes, hosts, deriver, bodyFacts, wellKnownSymbols = new Map(), captures = emptyCaptureIndex, symbolKeys = new Map(), templateObjects = new Map(), directCallableBindings = new Map(), virtualDispatch = new Map(), narrowedFormals = new Set(), repeatedConstructors = new Map(), dyingArguments = new Set(), instantiation = noInstantiationFacts, abiOfCallable = () => null, hostMethodAliases = new Map(), callableMemberCandidates = new Map(), borrowableMemberBodies = new Set(), stableBorrowEntries = new Map(), printerDrift = [],
79
+ // A context built without the program's census (the value-contract
80
+ // checks) gets one over the same tables with nothing pre-minted: the
81
+ // registry answers every pair the eager graph would have, one node later.
82
+ conversions = null, nativeSelections = undefined, callableIdentityDemand = observesEveryCallableIdentity, nativeIntegrityRestricted = true, fixedFieldStateConstant = false) => {
83
+ const admission = captures.of(owner);
84
+ const layouts = recordLayoutPolicyOf(deriver, classes);
85
+ // The thirty-three `EmitBodyPrepassFacts` collections: minted once, here, and
86
+ // handed to `ctx` (read-only) and to the caller's `prepass` (mutable) as
87
+ // the SAME instances -- see that type's own doc for why a fact this late
88
+ // still needs a mutable handle at all.
89
+ const hoistedResults = new Set();
90
+ const sharedStringLayouts = new Map();
91
+ const reusedStringLengths = new Map();
92
+ const loopInvariantValues = new Set();
93
+ const numericCalls = new Map();
94
+ const numericCallOnly = new Set();
95
+ const integerValues = new Set();
96
+ const integerBindings = new Set();
97
+ const typeQueryValues = new Set();
98
+ const typeQueryBindings = new Set();
99
+ const typeQueryComparisons = new Map();
100
+ const remainderForms = new Map();
101
+ const deadValues = new Set();
102
+ const unreadValues = new Set();
103
+ const booleanConstants = new Map();
104
+ const localIterators = new Set();
105
+ const callArgumentOnly = new Set();
106
+ const prototypeMethodReads = new Map();
107
+ const lazyCalleeReads = new Set();
108
+ const directCallReceivers = new Map();
109
+ const virtualCallees = new Map();
110
+ const unionMethodReads = new Map();
111
+ const unionMemberTypeofReads = new Map();
112
+ const reactiveOrigins = new Map();
113
+ const reactiveBindingOrigins = new Map();
114
+ const reactiveFieldReads = new Map();
115
+ const formalCells = new Map();
116
+ const narrowedFormalValues = new Set();
117
+ const directBindingSinks = new Map();
118
+ const forwardedBindings = new Map();
119
+ const capacityHints = new Map();
120
+ const fillLoops = new Map();
121
+ const denseArrays = [];
122
+ const denseAccesses = new Map();
123
+ const denseGroups = new Map();
124
+ const denseLengths = new Map();
125
+ const deferrable = new Set();
126
+ const ctx = {
127
+ abi: effectiveAbiOf(abi, admission),
128
+ abiOfCallable,
129
+ owner,
130
+ placements,
131
+ classes,
132
+ captures,
133
+ deriver,
134
+ layouts,
135
+ ...(nativeSelections === undefined ? {} : { nativeSelectionHelpers: nativeSelections }),
136
+ conversions: conversions ?? createConversionNodes({ registry: createCppConversionRegistry(layouts), nodes: new Map() }),
137
+ valueNames: new Map(),
138
+ ownedValues: new Set(),
139
+ ownedDyingValues: bodyFacts.ownedDyingValues,
140
+ consumingFormalConversions: bodyFacts.consumingFormalConversions,
141
+ bindingWriteCounts: bodyFacts.bindingWriteCounts,
142
+ formalCells,
143
+ constantTexts: new Map(),
144
+ staticKeyTexts: bodyFacts.staticKeyTexts,
145
+ hosts,
146
+ wellKnownSymbols,
147
+ reactiveFieldReads,
148
+ thunkValues: bodyFacts.thunkValues,
149
+ directCallees: bodyFacts.directCallees,
150
+ directCalleeAbis: bodyFacts.directCalleeAbis,
151
+ directCallReceivers,
152
+ virtualCallees,
153
+ virtualCalleesUsed: new Set(),
154
+ unionMethodReads,
155
+ unionMethodReadsUsed: new Set(),
156
+ unionMemberTypeofReads,
157
+ protocolNextResults: new Map(),
158
+ dynamicIteratorSteps: new Map(),
159
+ dynamicIteratorDoneStates: new Map(),
160
+ stringMetadataNames: new Map(),
161
+ receiverValues: bodyFacts.receiverValues,
162
+ constructorOf: bodyFacts.constructorOf,
163
+ generatorBody: bodyFacts.generatorBody,
164
+ virtualDispatch,
165
+ directCallableBindings,
166
+ callableMemberCandidates,
167
+ borrowableMemberBodies,
168
+ stableBorrowEntries,
169
+ stableBorrowActuals: bodyFacts.stableBorrowActuals,
170
+ repeatedConstructors,
171
+ dyingArguments,
172
+ hostMethodAliases,
173
+ instantiation,
174
+ callableIdentityDemand,
175
+ nativeIntegrityRestricted,
176
+ fixedFieldStateConstant,
177
+ functionSourceReads: bodyFacts.functionSourceReads,
178
+ functionSourceSnapshotNames: bodyFacts.functionSourceSnapshotNames,
179
+ callCallees: bodyFacts.callCallees,
180
+ calleeOnlyValues: bodyFacts.calleeOnlyValues,
181
+ conversionSources: bodyFacts.conversionSources,
182
+ recordFieldSources: bodyFacts.recordFieldSources,
183
+ reactiveOrigins,
184
+ reactiveBindingOrigins,
185
+ printerDrift,
186
+ hostMemberReads: bodyFacts.hostMemberReads,
187
+ hostClassReads: bodyFacts.hostClassReads,
188
+ classObjectReads: bodyFacts.classObjectReads,
189
+ hostFunctionReads: bodyFacts.hostFunctionReads,
190
+ hostNamespaceReads: bodyFacts.hostNamespaceReads,
191
+ hostNamespaceValues: bodyFacts.hostNamespaceValues,
192
+ hoistedResults,
193
+ sharedStringLayouts,
194
+ prototypeMethodReads,
195
+ lazyCalleeReads,
196
+ bindingNames: new Map(),
197
+ deadValues,
198
+ unreadValues,
199
+ booleanConstants,
200
+ localIterators,
201
+ deferrable,
202
+ reusedStringLengths,
203
+ callArgumentOnly,
204
+ classTableRoots: bodyFacts.classTableRoots,
205
+ pendingClassTableLines: new Map(),
206
+ deferredTexts: new Map(),
207
+ pendingPacks: new Map(),
208
+ capacityHints,
209
+ fillLoops,
210
+ narrowedFormals,
211
+ narrowedFormalValues,
212
+ numericCalls,
213
+ numericCallOnly,
214
+ integerValues,
215
+ integerBindings,
216
+ typeQueryValues,
217
+ typeQueryBindings,
218
+ typeQueryComparisons,
219
+ loopInvariantValues,
220
+ remainderForms,
221
+ denseArrays,
222
+ denseAccesses,
223
+ denseLengths,
224
+ denseIndices: new Map(),
225
+ denseGroups,
226
+ computeOrigins: bodyFacts.computeOrigins,
227
+ propertyReadOrigins: bodyFacts.propertyReadOrigins,
228
+ bindingReadDeclarations: bodyFacts.bindingReadDeclarations,
229
+ valueCellReads: bodyFacts.valueCellReads,
230
+ declaredBindings: new Set(),
231
+ directBindingSinks,
232
+ forwardedBindings,
233
+ declarations: [],
234
+ symbolKeys,
235
+ templateObjects,
236
+ nextValueOrdinal: 0,
237
+ nextBindingOrdinal: 0
238
+ };
239
+ return {
240
+ ctx,
241
+ prepass: {
242
+ hoistedResults,
243
+ sharedStringLayouts,
244
+ reusedStringLengths,
245
+ loopInvariantValues,
246
+ numericCalls,
247
+ numericCallOnly,
248
+ integerValues,
249
+ integerBindings,
250
+ typeQueryValues,
251
+ typeQueryBindings,
252
+ typeQueryComparisons,
253
+ remainderForms,
254
+ deadValues,
255
+ unreadValues,
256
+ booleanConstants,
257
+ localIterators,
258
+ callArgumentOnly,
259
+ prototypeMethodReads,
260
+ lazyCalleeReads,
261
+ directCallReceivers,
262
+ virtualCallees,
263
+ unionMethodReads,
264
+ unionMemberTypeofReads,
265
+ reactiveOrigins,
266
+ reactiveBindingOrigins,
267
+ reactiveFieldReads,
268
+ formalCells,
269
+ narrowedFormalValues,
270
+ directBindingSinks,
271
+ forwardedBindings,
272
+ capacityHints,
273
+ fillLoops,
274
+ denseArrays,
275
+ denseAccesses,
276
+ denseGroups,
277
+ denseLengths,
278
+ deferrable
279
+ }
280
+ };
281
+ };
282
+ /**
283
+ * Mints this result's name and records the declaration it needs.
284
+ *
285
+ * Throws on a second definition: SSA form makes that an internal-consistency
286
+ * bug, not a missing feature. `spelling` overrides the type only where the
287
+ * carrier a value is *read* as differs from the one its result declares -- a
288
+ * receiver read through the ABI's declared receiver slot, for instance.
289
+ */
290
+ /**
291
+ * `long long` where the integer census narrowed this value, and the carrier's
292
+ * own spelling everywhere else.
293
+ *
294
+ * An explicit spelling always wins: a caller that named the type knows
295
+ * something this does not.
296
+ */
297
+ export const storageTypeOf = (ctx, value, representation) => ctx.typeQueryValues.has(value) ? 'gea::Value::Tag' : ctx.integerValues.has(value) ? cppNarrowedIntegerType : cppTypeOf(representation);
298
+ /**
299
+ * Whether a value's rendered text is a `long long`, from every storage that
300
+ * can make it one: the value census (`integerValues`), the cell a read names
301
+ * (`integerBindings`, through `bindingReadDeclarations`), or the narrowed
302
+ * formal a parameter reads. `storageTypeOf` answers only the first, which is
303
+ * right for a value's OWN declaration -- a read of an integer cell is spelled
304
+ * as the cell's name and declares nothing -- and wrong for a consumer choosing
305
+ * an overload by the text's type: `examples/apps/weather` indexed its arrays
306
+ * with `long long` loop counters through `elementAt(double)`, converting the
307
+ * index to a double and back on every read, 47 times.
308
+ */
309
+ export const isIntegerStorageValue = (ctx, value) => {
310
+ if (ctx.integerValues.has(value) || ctx.narrowedFormalValues.has(value))
311
+ return true;
312
+ const declaration = ctx.bindingReadDeclarations.get(value);
313
+ return declaration !== undefined && ctx.integerBindings.has(declaration) && !ctx.captures.isBoxed(declaration);
314
+ };
315
+ /**
316
+ * One capture slot's initializer, cast to the field the environment declares.
317
+ *
318
+ * The struct's field is `cppTypeOf(slot.representation)` -- the CARRIER -- and
319
+ * a cell the integer census narrowed is held in a `long long`. A braced init
320
+ * list forbids that conversion ([dcl.init.list] admits no narrowing), so the
321
+ * pair that reads fine everywhere else is a hard error here, exactly as it is
322
+ * for an array literal's elements (`emit-arrays.ts`'s `packElementText`).
323
+ */
324
+ export const captureFieldText = (ctx, declaration, representation, text) => ctx.integerBindings.has(declaration) && cppTypeOf(representation) !== cppNarrowedIntegerType
325
+ ? `static_cast<${cppTypeOf(representation)}>(${text})`
326
+ : text;
327
+ export const defineValue = (ctx, result, spelling) => {
328
+ if (ctx.valueNames.has(result.id))
329
+ throw new Error(`ir value ${result.id} is defined twice in one body, which SSA form forbids`);
330
+ if (spelling === undefined && result.representation.kind === 'void') {
331
+ throw createCppEmitBlockedError(`physical-cpp-type:${representationKey(result.representation)}`, `tries to define storage for void result ${result.id}, which has no value carrier`);
332
+ }
333
+ const name = `v${ctx.nextValueOrdinal}`;
334
+ ctx.nextValueOrdinal += 1;
335
+ ctx.valueNames.set(result.id, name);
336
+ ctx.declarations.push({ name, type: spelling ?? storageTypeOf(ctx, result.id, result.representation) });
337
+ if (spelling === undefined)
338
+ ctx.ownedValues.add(result.id);
339
+ return name;
340
+ };
341
+ /**
342
+ * Mints this result's name without hoisting a declaration for it.
343
+ *
344
+ * For a value some other C++ construct already declares -- the catch clause's
345
+ * own parameter is the one case today (`CatchBindingOperation`). The region's
346
+ * own `catch (const gea::Value& vN)` text IS this value's declaration;
347
+ * hoisting a second one under the same name would redeclare it.
348
+ */
349
+ export const defineValueBoundElsewhere = (ctx, result) => {
350
+ if (ctx.valueNames.has(result.id))
351
+ throw new Error(`ir value ${result.id} is defined twice in one body, which SSA form forbids`);
352
+ const name = `v${ctx.nextValueOrdinal}`;
353
+ ctx.nextValueOrdinal += 1;
354
+ ctx.valueNames.set(result.id, name);
355
+ return name;
356
+ };
357
+ /**
358
+ * Publishes this result under storage that already exists, rather than under a
359
+ * fresh temporary of its own.
360
+ *
361
+ * The one use is a read of a HOST OBJECT (`native-handle`) out of its cell. In
362
+ * the source language that read is not a copy: `const ctx = Display.ctx` binds
363
+ * a reference to one object, and `ctx.fillStyle = c` then `ctx.fillText(...)`
364
+ * are two operations on that same object. Minting a temporary and assigning the
365
+ * cell into it makes each read a fresh C++ VALUE, and every host type that
366
+ * carries state behind its handle -- `CanvasRenderingContext2D` holds
367
+ * `batchDepth_`, `presentRecording_`, `fillStyle_`, `fontSizePx_` and the
368
+ * present-command buffer -- then loses whatever the previous statement set on
369
+ * it, silently and with no diagnostic. The cell IS the object, so the read
370
+ * names the cell.
371
+ */
372
+ export const defineValueAlias = (ctx, result, storage) => {
373
+ if (ctx.valueNames.has(result.id))
374
+ throw new Error(`ir value ${result.id} is defined twice in one body, which SSA form forbids`);
375
+ ctx.valueNames.set(result.id, storage);
376
+ };
377
+ /** Records a local binding cell's declaration, for the same reason values are hoisted. */
378
+ export const declareCell = (ctx, name, type) => {
379
+ ctx.declarations.push({ name, type });
380
+ };
381
+ /**
382
+ * The expression a deferred value stands for, or `null` when it has storage of
383
+ * its own.
384
+ *
385
+ * A withheld array literal materializes here rather than at the point it was
386
+ * withheld: `gea::arrayOf` builds the same Array exotic object the pushed form
387
+ * did, as one expression, so a consumer that genuinely wants the object gets
388
+ * it and only the bulk-insert renderer -- which drains it immediately -- gets
389
+ * to skip building it at all.
390
+ */
391
+ const deferredText = (ctx, value) => {
392
+ const text = ctx.deferredTexts.get(value);
393
+ if (text !== undefined)
394
+ return text;
395
+ const pack = ctx.pendingPacks.get(value);
396
+ if (pack === undefined)
397
+ return null;
398
+ return `gea::arrayOf<${pack.elementType}>({${pack.elements.join(', ')}})`;
399
+ };
400
+ /**
401
+ * Whether a value renders as the expression that computes it rather than as a
402
+ * cell of its own -- `emitOperation`'s withholding, or a whole withheld array
403
+ * literal. Such a value is a prvalue at its use: it has no storage anyone could
404
+ * move FROM, and `std::move` around it is either redundant (gcc's
405
+ * -Wredundant-move / -Wpessimizing-move, both errors under the boards' -Werror)
406
+ * or, when the withheld expression happens to name a field, a move out of that
407
+ * field's storage.
408
+ */
409
+ export const isDeferredValue = (ctx, value) => deferredText(ctx, value) !== null;
410
+ /** The one name a value was minted under. Reading an undefined value is a dominance bug in the body, not a rendering choice. */
411
+ export const nameOfValue = (ctx, value) => {
412
+ const deferred = deferredText(ctx, value);
413
+ if (deferred !== null)
414
+ return deferred;
415
+ const name = ctx.valueNames.get(value);
416
+ if (name === undefined) {
417
+ const state = [
418
+ ctx.deadValues.has(value) ? 'dead' : null,
419
+ ctx.deferrable.has(value) ? 'deferrable' : null,
420
+ ctx.unreadValues.has(value) ? 'unread' : null
421
+ ].filter((fact) => fact !== null);
422
+ throw new Error(`ir value ${value} is read before it is defined in body ${ctx.owner}${state.length === 0 ? '' : ` (${state.join(', ')})`}`);
423
+ }
424
+ return name;
425
+ };
426
+ /**
427
+ * A host method is not a value.
428
+ *
429
+ * `storage.getItem` names no C++ symbol on its own -- the host states a
430
+ * spelling for the *call*, `gea::host::storage::getItem(k)`, and there
431
+ * is nothing to bind the bare access to. So the access publishes no name, and
432
+ * any use of it other than as a callee is refused here, by name, rather than
433
+ * crashing on a value that was never minted.
434
+ */
435
+ export const operandText = (ctx, operand) => {
436
+ const host = ctx.hostMemberReads.get(operand.value);
437
+ if (host) {
438
+ // Unless the read asks for no call at all. A builtin whose overloads name
439
+ // no single convention is carried as its identity half, and the function
440
+ // OBJECT is a thing this backend can build even where the frame is not:
441
+ // `Array.from.name` reads a fact ECMA-262 states, and the spec's own
442
+ // `length` for it is stated beside the other host facts. Where it is not
443
+ // stated there is nothing to fall back to -- a value read has no census
444
+ // arity behind it -- so that refuses below with the rest.
445
+ if (operand.representation.kind === 'callable-identity') {
446
+ const length = statedHostIntrinsicLength(host.protocol, host.member);
447
+ if (length !== null)
448
+ return hostBuiltinFunctionIdentityText(host.protocol, host.member, length);
449
+ throw createCppEmitBlockedError(`host-invocation:${host.protocol}.${host.member}:value`, `"${host.protocol}.${host.member}" is read as a function object with no calling convention, and no host row states its own length`);
450
+ }
451
+ // Otherwise the read IS a function object, and the host's own call
452
+ // template is what it calls -- rendered into a captureless thunk over the
453
+ // slot's convention, the same closing a free host function's read already
454
+ // gets. `hostMemberValueText` states which template shapes fill from bare
455
+ // formals and which cannot.
456
+ // `JSON` is dispatched by protocol name BEFORE the template fill, exactly
457
+ // as `hostCallText` dispatches it before the same fill for a real call:
458
+ // its two rows carry a placeholder `emit`, not a template, because their
459
+ // C++ is generated per call site. Filling from that placeholder would
460
+ // splice the placeholder's own comment text in where the call belongs.
461
+ if (host.protocol === 'JSON') {
462
+ const json = hostJsonMemberValueText(host.member, operand.representation);
463
+ if (json !== null)
464
+ return json;
465
+ throw createCppEmitBlockedError(`host-invocation:JSON.${host.member}:value`, `"JSON.${host.member}" read as a value renders a thunk only over a carrier "gea_runtime.h" declares its own ` +
466
+ `gea_json_read/gea_json_write for; this slot carries "${representationKey(operand.representation)}", whose overload is ` +
467
+ 'generated per CALL site and so does not exist for a read');
468
+ }
469
+ const row = hostMemberOf(ctx.hosts.members, host.protocol, host.member);
470
+ if (row) {
471
+ const thunk = hostMemberValueText(operand.representation, row, recordLayoutPolicyOf(ctx.deriver, ctx.classes));
472
+ if (thunk !== null)
473
+ return thunk;
474
+ }
475
+ throw createCppEmitBlockedError(`host-invocation:${host.protocol}.${host.member}:value`, `"${host.protocol}.${host.member}" is a host method used as a value carried as "${representationKey(operand.representation)}", and the ` +
476
+ 'captureless thunk over its own call template that renders one does not apply to that shape; hostMemberValueText ' +
477
+ '(host/emit-host-value.ts) states the shapes it declines');
478
+ }
479
+ const hostClass = ctx.hostClassReads.get(operand.value);
480
+ if (hostClass !== undefined) {
481
+ const called = hostClassValueText(operand.representation, hostClass.linkageName);
482
+ if (called !== null)
483
+ return called;
484
+ throw createCppEmitBlockedError(`host-invocation:${hostClass.linkageName}:value`, `"${hostClass.linkageName}" is a host class used as a value; the host states spellings for constructing it and for its own class ` +
485
+ `members, and none for the class itself`);
486
+ }
487
+ const classObject = ctx.classObjectReads.get(operand.value);
488
+ if (classObject !== undefined) {
489
+ throw createCppEmitBlockedError('native-boundary:uncensused-class-object', `"${classObject}" is a program class this compilation introduces no constructor object for -- a generic the program never instantiates ` +
490
+ 'is not censused -- so its name can be tested against and constructed through, and there is no object of it to read, store or pass');
491
+ }
492
+ const hostNamespace = ctx.hostNamespaceReads.get(operand.value);
493
+ if (hostNamespace !== undefined) {
494
+ throw createCppEmitBlockedError(`host-invocation:${hostNamespace}:value`, `"${hostNamespace}" is a host namespace used as a value; it is a path to the host's spellings, and no object of that name ` +
495
+ 'exists at run time to be read, stored or passed');
496
+ }
497
+ const hostFunction = ctx.hostFunctionReads.get(operand.value);
498
+ if (hostFunction !== undefined) {
499
+ const wrapped = hostFunctionValueText(operand.representation, hostFunction);
500
+ if (wrapped !== null)
501
+ return wrapped;
502
+ throw createCppEmitBlockedError(`host-invocation:${hostCallName(hostFunction)}:value`, `"${hostCallName(hostFunction)}" is a host function used as a value, and the captureless thunk over its own ABI that renders one does not apply here; hostFunctionValueText (host/emit-host-value.ts) states the two cases it declines`);
503
+ }
504
+ const prototypeMethod = ctx.prototypeMethodReads.get(operand.value);
505
+ if (prototypeMethod) {
506
+ throw createCppEmitBlockedError(`property-access:${prototypeMethod.receiverKind}:get:false:value`, `"${prototypeMethod.member}" is a String/Number/Array/Promise.prototype method used as a value; this backend fuses it with its call and never materializes it as a first-class function`);
507
+ }
508
+ return nameOfValue(ctx, operand.value);
509
+ };
510
+ /**
511
+ * The receiver a deferred prototype-method call renders on.
512
+ *
513
+ * The mirror of `hostMemberReceiverText` for the other deferral family, and
514
+ * here for the same reason: the access that recorded the read produced no C++,
515
+ * so it had no occasion to print anything, and the record it leaves behind
516
+ * names the operand rather than a spelling of it.
517
+ */
518
+ export const prototypeMethodReceiverText = (ctx, receiver) => {
519
+ if (receiver.kind === 'none')
520
+ return '';
521
+ const text = operandText(ctx, receiver.operand);
522
+ return receiver.kind === 'match-elements' ? `gea::runtime::regex::matchElements(${text})` : text;
523
+ };
524
+ /** One dense window's element pointer: the array's own storage, named once at the preheader. */
525
+ export const cppDensePointerName = (ordinal) => `gea_dense_${ordinal}`;
526
+ /** The row a dense window indexes, when the array is itself an element of another: `grid[i]`, taken once at the preheader. */
527
+ export const cppDenseRowName = (ordinal) => `gea_dense_row_${ordinal}`;
528
+ /** One loop's dense-window condition. Loop-invariant by construction, which is what lets the backend version the loop on it. */
529
+ export const cppDenseFlagName = (group) => `gea_dense_ok_${group}`;
530
+ /** A wrapped window's own length, read once at the preheader -- see `DenseLoopPlan.lengths`. */
531
+ export const cppDenseLengthName = (ordinal) => `gea_dense_len_${ordinal}`;
532
+ /** The reciprocal of that length, built once at the preheader rather than re-checked by `gea::preparedDivisor` on every turn. */
533
+ export const cppDenseDivisorName = (ordinal) => `gea_dense_div_${ordinal}`;
534
+ /** The formal this body declares for one ABI position. `translation-unit.ts`'s `formalsOf` spells the same names. */
535
+ export const cppFormalName = (ordinal) => `gea_arg_${ordinal}`;
536
+ /** The formal a body declares for the receiver. `translation-unit.ts`'s `formalsOf` spells the same name. */
537
+ export const cppReceiverName = 'gea_this';
538
+ /** The thunk that adapts one function body to the environment-passing invoke pointer a callable carrier holds. */
539
+ export const cppThunkName = (functionId) => `${cppBodyName(functionId)}_thunk`;
540
+ /** The thunk that adapts one class's construct function to the environment-passing construct pointer a constructor carrier holds. */
541
+ export const cppConstructThunkName = (declaration) => `${cppConstructName(declaration)}_thunk`;
542
+ /**
543
+ * The same pointer for a pre-`class` JavaScript constructor FUNCTION, whose
544
+ * construction has no separate construct function to adapt: one body serves
545
+ * both entry points, so the thunk itself is where the instance is allocated
546
+ * (`translation-unit.ts`'s `constructThunkOf`). Keyed by the function rather
547
+ * than by a declaration, because that is the identity the carrier's allocation
548
+ * site names (`emit-callable.ts`'s `emitAllocateCallable`).
549
+ */
550
+ export const cppConstructedThunkName = (functionId) => `${cppBodyName(functionId)}_construct_thunk`;
551
+ /**
552
+ * The environment struct one capturing function's closure allocates.
553
+ *
554
+ * One struct per capturing function, not one shared layout: two closures
555
+ * capture different cells in general, and a shared struct would need every
556
+ * field every closure ever captures, most of them unused in most instances.
557
+ */
558
+ export const cppEnvironmentStructName = (functionId) => `${cppBodyName(functionId)}_env`;
559
+ /** One captured cell's field inside its function's environment struct, in capture order. `translation-unit.ts`'s thunk unpacking spells the same name. */
560
+ export const cppCaptureFieldName = (index) => `c${index}`;
561
+ /** The captured-receiver's own field, kept apart from `cppCaptureFieldName` because it has no capture-order index -- there is at most one per environment. */
562
+ export const cppCaptureReceiverFieldName = 'crecv';
563
+ /** The thunk's own `void*` formal, named only when a body actually has an environment to unpack. */
564
+ export const cppEnvironmentParamName = 'gea_env';
565
+ /** The local the thunk casts `cppEnvironmentParamName` to, so the body call and the field reads inside a captured body share one pointer. */
566
+ export const cppEnvironmentLocalName = 'gea_e';
567
+ /** The thunk's own one-pointer stack storage, which a captured state small enough to travel inside the carrier's pointer is copied back into. */
568
+ export const cppEnvironmentSlotName = 'gea_env_slot';
569
+ /**
570
+ * The environment actual a capturing accessor's body is called with, read in
571
+ * place out of the object that carries it.
572
+ *
573
+ * An accessor is reached by NAME off the shape, so unlike a closure it has no
574
+ * carrier to hold its captures: the object carries them
575
+ * (`cppRecordAccessorEnvironmentName`, packed at the allocation). Reading it
576
+ * back is an EXPRESSION -- `gea::storedEnvironment` casts the member in place
577
+ * rather than copying an inline environment into a stack slot the way a
578
+ * thunk's `unpackEnvironment` must -- which is what lets every accessor call
579
+ * site, including the ones that render a whole call as one expression
580
+ * (`emit-iterator.ts`), pass it without first emitting statements.
581
+ */
582
+ export const storedEnvironmentText = (body, member) => `gea::storedEnvironment<${cppEnvironmentStructName(body)}>(${member})`;
583
+ /**
584
+ * The payload needed to read a property or invoke a nullable carrier.
585
+ * Optional chaining guards this access, but a TypeScript non-null assertion
586
+ * erases and proves nothing at runtime. Check presence before unwrapping so
587
+ * `a!.b` and `(a?.b)!.c` throw on absence instead of dereferencing a default
588
+ * payload. Name the payload once even when a recipe uses it twice.
589
+ */
590
+ export const unwrapPresentValue = (ctx, lines, operand) => {
591
+ if (operand.representation.kind !== 'optional')
592
+ return operand;
593
+ const value = `${operand.value}:present`;
594
+ // The narrowed view's own deferral is already stated by `hostMemberReadsOf`,
595
+ // which names the `<value>:present` twin of every read it claims -- the same
596
+ // unconditional statement `hostClassReadsOf` makes just below, and for the
597
+ // same reason: if a value IS a deferred host member then so is the value
598
+ // proven present, and nothing reads the twin unless a narrowing minted one.
599
+ if (ctx.hostMemberReads.has(operand.value))
600
+ return { value, representation: operand.representation.payload };
601
+ // The narrowed view's own identity is already stated by
602
+ // `emit-bindings.ts`'s `hostClassReadsOf`, so this only has to hand it back.
603
+ if (ctx.hostClassReads.has(value))
604
+ return { value, representation: operand.representation.payload };
605
+ if (!ctx.valueNames.has(value)) {
606
+ const name = `v${ctx.nextValueOrdinal}`;
607
+ ctx.nextValueOrdinal += 1;
608
+ ctx.valueNames.set(value, name);
609
+ ctx.declarations.push({ name, type: cppTypeOf(operand.representation.payload) });
610
+ lines.push(`if (!(${operandText(ctx, operand)}).has_value()) gea::host::throwGetPropertyOfNullish<void>();`);
611
+ lines.push(`${name} = *${operandText(ctx, operand)};`);
612
+ }
613
+ return { value, representation: operand.representation.payload };
614
+ };
615
+ /**
616
+ * The arguments a call actually passes, padded out to the frame the callee
617
+ * declares.
618
+ *
619
+ * A JavaScript call may pass fewer arguments than the function has parameters,
620
+ * and the parameters it skipped are `undefined` -- so a parameter that may be
621
+ * omitted is carried as an `optional`, and the frame still has a slot for it.
622
+ * C++ has no such rule: `construct()` against a
623
+ * `ConstructorObject<T(Optional<double>, Optional<double>, ...)>` is "too few
624
+ * arguments", full stop. `new Quaternion()` against `constructor(w = 1, x = 0,
625
+ * y = 0, z = 0)` is exactly that call.
626
+ *
627
+ * So the absence is passed, not assumed. Only a slot whose own carrier states
628
+ * the absence `undefined` can hold an omitted argument; a slot that cannot is
629
+ * refused by name rather than default-constructed into whatever its carrier
630
+ * happens to allow -- an `optional` tagged `null` would answer a later
631
+ * `=== null` with `true`, which is a wrong answer and not a spelling gap. A
632
+ * rest slot is refused here too: what a caller owes a rest parameter is an
633
+ * allocated array, and building one is lowering's, not this line's.
634
+ *
635
+ * Shared between the generic callable-carrier invoke path (`emit-callable.ts`)
636
+ * and the plugin-stated host construct-template path (`emit-host-invoke.ts`'s
637
+ * `nativeHandleInvocationText`): a host that states a fixed-arity construct
638
+ * template for a protocol whose checker signature has a trailing optional
639
+ * parameter (`new MediaRecorder(stream)` against `new (stream, options?)`)
640
+ * needs the identical padding a generic constructor carrier already gets --
641
+ * without it, only the call sites that happen to pass every optional argument
642
+ * explicitly would emit, and the ones that rely on the parameter's own
643
+ * optionality would refuse for no reason the host template states.
644
+ */
645
+ export const paddedArguments = (abi, args, what) => {
646
+ const supplied = abi.receiver === null ? args.length : args.length - 1;
647
+ if (supplied >= abi.parameters.length)
648
+ return args;
649
+ const padding = abi.parameters.slice(supplied).map((parameter, offset) => {
650
+ const position = supplied + offset;
651
+ if (abi.restFrom !== null && position >= abi.restFrom) {
652
+ // An omitted rest argument list IS the empty array -- ECMA-262 10.2.11
653
+ // binds the rest parameter to a fresh Array of the arguments beyond the
654
+ // fixed ones, and there are none. That is not lowering's judgement to
655
+ // make; it is the language's answer, and `virtual-methods.ts`'s adapter
656
+ // already spells it this way for the identical omission. Only an array
657
+ // carrier is filled: anything else really is a shape this line cannot
658
+ // build. `it.next()` against `lib.es5.d.ts`'s own
659
+ // `next(...args: [] | [TNext])` is the case.
660
+ if (parameter.value.kind === 'array-object')
661
+ return `gea::makeRef<gea::ArrayObject<${cppTypeOf(parameter.value.element)}>>()`;
662
+ throw createCppEmitBlockedError(`call-abi:${what}:rest-parameter`, `omits the rest parameter at position ${position}, which the caller must allocate`);
663
+ }
664
+ // A `dynamic` slot states the absence the same way it states every other
665
+ // value: `gea::Value()` is `undefined` (gea_runtime.h -- "a
666
+ // default-constructed box is `undefined`"), which is exactly what
667
+ // ECMA-262 10.2.1 binds an omitted argument to. So the box needs no
668
+ // optional around it to hold one, which is the same fact `optionalOf`
669
+ // (representation/optional.ts) states when it declines to wrap one.
670
+ // A slot that spends absence on `null` as well -- `f(x: T | null = null)`,
671
+ // a three-armed union (`normalize/parameter-slot.ts`) -- states omission by
672
+ // its `undefined` ARM, since a default-constructed union holds its first
673
+ // arm, which is not necessarily that one. `ArmType` names the arm's own C++
674
+ // type so the empty value is spelled once, here, rather than re-derived
675
+ // from the representation.
676
+ const omitted = cppUndefinedIn(parameter.value);
677
+ if (omitted === null) {
678
+ throw createCppEmitBlockedError(`call-abi:${what}:omitted-argument`, `omits the argument at position ${position}, whose "${representationKey(parameter.value)}" slot cannot hold the \`undefined\` the ` +
679
+ 'language binds an unpassed parameter to');
680
+ }
681
+ return omitted;
682
+ });
683
+ return [...args, ...padding];
684
+ };
685
+ /**
686
+ * The identifier this unit uses for one `Symbol.for` key, minting it on first
687
+ * ask.
688
+ *
689
+ * The ordinal, not the sanitized text, is what makes the name unique: two
690
+ * different keys can sanitize identically (`gea.d.dirty` and `gea/d/dirty`),
691
+ * and a name collision between two distinct symbols would be a silently wrong
692
+ * program rather than a build error. The text is still in the name because a
693
+ * reader of the emitted C++ should be able to see which key a static is.
694
+ */
695
+ export const internSymbolKey = (symbolKeys, key) => {
696
+ const existing = symbolKeys.get(key);
697
+ if (existing !== undefined)
698
+ return existing;
699
+ let sanitized = '';
700
+ for (const character of key) {
701
+ const ok = (character >= 'a' && character <= 'z') || (character >= 'A' && character <= 'Z') || (character >= '0' && character <= '9');
702
+ sanitized += ok ? character : '_';
703
+ }
704
+ const name = `gea_symbol_${sanitized}_${symbolKeys.size}`;
705
+ symbolKeys.set(key, name);
706
+ return name;
707
+ };
708
+ /**
709
+ * The namespace-scope definitions for every key this unit interned.
710
+ *
711
+ * `inline` so a split build's units share one object rather than one each --
712
+ * and even where they do not (a key only one unit interns), correctness does
713
+ * not depend on it: the initializer goes THROUGH `gea::symbolFor`, so two
714
+ * separate statics for one key still resolve to the same registry entry.
715
+ *
716
+ * Emitted ahead of every body, because C++ requires a name to be declared
717
+ * before it is used and these are used from inside bodies.
718
+ */
719
+ export const symbolKeyDefinitions = (symbolKeys) => [...symbolKeys].map(([key, name]) => `inline const gea::Symbol ${name} = gea::symbolFor(${cppStringLiteral(key)});`);
720
+ /**
721
+ * Reserves this site's accessor and records its definition.
722
+ *
723
+ * The `static` inside the accessor is what makes the object per-site: it is
724
+ * initialized on the first call and every later call returns the SAME object,
725
+ * which is exactly `GetTemplateObject`'s per-Parse-Node cache (ECMA-262
726
+ * 13.2.8.3) and the property a tag's own `WeakMap` cache depends on. A
727
+ * function-local `static` rather than a namespace-scope object because the
728
+ * initializer builds a `shared_ptr` graph, and a namespace-scope one would run
729
+ * during static initialization, before the runtime this unit links against is
730
+ * necessarily up.
731
+ *
732
+ * `inline` so a split build's units share one definition instead of one each --
733
+ * and unlike an interned symbol key, that sharing is load-bearing rather than
734
+ * an optimization: two copies of one site's object would be two objects, which
735
+ * is the one thing this may not be.
736
+ */
737
+ export const internTemplateObject = (templateObjects, operation, holder, body) => {
738
+ const site = operation.lineage;
739
+ if (site === null) {
740
+ throw createCppEmitBlockedError(`runtime-helper:allocation:template-object:${representationKey(operation.result.representation)}`, 'a template object cites no semantic result, so there is no per-site identity to key its one static on');
741
+ }
742
+ // GetTemplateObject is keyed by the Parse Node, not by a monomorphized body
743
+ // copy and not by the representation view through which that copy reaches
744
+ // it. Strip the specialization suffix from the operation's source node;
745
+ // keeping either suffix or `representationKey` here creates two objects for
746
+ // one source site and breaks tag caches.
747
+ const key = withoutSpecialization(nodeOfOperation(operationOfResult(site)));
748
+ const existing = templateObjects.get(key);
749
+ if (existing !== undefined) {
750
+ if (existing.holder !== holder) {
751
+ throw createCppEmitBlockedError(`runtime-helper:allocation:template-object:${representationKey(operation.result.representation)}`, `one tagged-template parse site reached incompatible carrier views "${existing.holder}" and "${holder}"; ` +
752
+ 'GetTemplateObject requires one identity-preserving carrier for every specialization');
753
+ }
754
+ return existing.name;
755
+ }
756
+ const name = `gea_template_object_${templateObjects.size}`;
757
+ const text = [
758
+ `inline const ${holder}& ${name}() {`,
759
+ ` static const ${holder} gea_template = []() {`,
760
+ ...body.map((line) => ` ${line}`),
761
+ ' }();',
762
+ ' return gea_template;',
763
+ '}'
764
+ ].join('\n');
765
+ templateObjects.set(key, { name, text, holder });
766
+ return name;
767
+ };
768
+ /** The namespace-scope definitions for every tagged-template site this unit reached, emitted ahead of the bodies that call them. */
769
+ export const templateObjectDefinitions = (templateObjects) => [...templateObjects.values()].map((definition) => definition.text);
770
+ // `bindingReference` moved to its own file when this one crossed the
771
+ // architecture gate's 1200-line limit. Re-exported here because it is the same
772
+ // question every caller was already asking of this module -- "what C++ name
773
+ // does this declaration have here" -- and moving the import sites would have
774
+ // been a rename dressed up as a refactor.
775
+ export { bindingReference } from './emit-binding-reference.js';
776
+ /**
777
+ * Invariant 5 (invariant 5: no write during render): the printer's context is
778
+ * immutable for the duration of a body.
779
+ *
780
+ * A FACT written while statements render makes what a later statement emits
781
+ * depend on render ORDER rather than on the program -- the sharp end of which
782
+ * is `emit-properties.ts`'s `gea_string_metadata_${ctx.prototypeMethodReads
783
+ * .size}`, a struct whose NAME is however many prototype reads happened to be
784
+ * registered before it. Section 2.7's shrink (every fact field off
785
+ * `EmitContext`, leaving naming, interning, spelling tables and buffers) is
786
+ * what makes the invariant structural; until then this is the instrument that
787
+ * says which fields are left.
788
+ *
789
+ * A grep cannot answer that question: most `ctx.<collection>.set(...)` sites
790
+ * are reached from `emitBody`'s PREPASS (`admitDenseWindows`, the census
791
+ * reconciliation, the direct-callee walk), which runs before any operation
792
+ * renders and is exactly where a fact is supposed to be settled. Only a seal
793
+ * taken at the block loop tells the two apart, and it names the field and
794
+ * carries a stack to the site.
795
+ *
796
+ * Off unless `GEA_SEAL_EMIT_CONTEXT` is set, and it restores the context it
797
+ * sealed, so a run that enumerates violations is a run of the same printer.
798
+ */
799
+ const renderMutableEmitContextFields = new Set([
800
+ // Naming and interning -- 2.7 keeps both, and both are minted as an
801
+ // operation renders by construction.
802
+ 'valueNames',
803
+ 'bindingNames',
804
+ 'symbolKeys',
805
+ 'templateObjects',
806
+ // Output buffers. `ownedValues` is one despite reading like a fact: see
807
+ // `emit.ts`'s note at the formal-argument seeding -- membership is not
808
+ // independent of the naming machinery that grows it.
809
+ 'declarations',
810
+ 'printerDrift',
811
+ 'pendingClassTableLines',
812
+ 'deferredTexts',
813
+ 'pendingPacks',
814
+ 'ownedValues',
815
+ // Render bookkeeping, not a fact: `declaredBindings` is which declarations
816
+ // have ALREADY emitted their one declaring statement, so a later write is a
817
+ // plain assignment. Its whole content is what has been printed so far, which
818
+ // is what a buffer is.
819
+ 'declaredBindings',
820
+ // Naming again, by the same test as `valueNames`: what these two hold is the
821
+ // C++ NAME of a scratch local this render minted for a dynamic iterator --
822
+ // `v<ordinal>` from `nextValueOrdinal`, declared into `declarations` on the
823
+ // same line that records it. A name that does not exist until something is
824
+ // printed cannot be settled before printing, and nothing about the body is
825
+ // being decided here: WHICH values are dynamic iterator records is the
826
+ // carrier's own answer, asked afresh at every use.
827
+ 'dynamicIteratorDoneStates',
828
+ 'dynamicIteratorSteps',
829
+ // The same test a third time, for the iterator-record path the two above are
830
+ // the dynamic twin of: what `protocolNextResults` holds is the NAME of the
831
+ // once-only `next()` result local, plus the accessor that reads its two
832
+ // fields back. `emitIteratorNext` mints and declares it, `emitIteratorDone`
833
+ // reads the same local instead of calling `next()` again -- which is a
834
+ // caching decision about the text, not about the body.
835
+ 'protocolNextResults',
836
+ // A wrapped dense window's subscript companion, minted and declared beside
837
+ // the read that needed it (`denseRemainderCompanion`). WHICH accesses a
838
+ // window admits is `admitDenseWindows`' prepass answer; this is only what
839
+ // that access's index is spelled as.
840
+ 'denseIndices',
841
+ // The same test again: `gea_string_metadata_<N>` is a local this render
842
+ // minted and declared, and `<N>` is how many it had minted before -- which
843
+ // is why the ordinal now counts THIS table rather than however many
844
+ // prototype reads happened to be registered, and why
845
+ // `scripts/normalize-emitted.mjs` renumbers it positionally like `v<N>`.
846
+ 'stringMetadataNames',
847
+ // PROOF, the fourth category, and the only one that cannot be settled even
848
+ // in principle: each records that a deferred read was CONSUMED by a call,
849
+ // and `emitBody` refuses on any entry still unconsumed once the body has
850
+ // finished. "Did the rest of this body call it" is a question about the
851
+ // render, asked after the render, so it is answered during one by
852
+ // construction. WHICH reads are deferred is the settled fact
853
+ // (`virtualCallees`, `unionMethodReads`); this is only what became of them.
854
+ 'virtualCalleesUsed',
855
+ 'unionMethodReadsUsed',
856
+ // The one the seal had simply never been told about -- which meant it could
857
+ // only pass on programs that happen not to reach this write, so a green run
858
+ // under `GEA_SEAL_EMIT_CONTEXT` proved less than it looked like it did.
859
+ //
860
+ // `constantTexts` is the FOLDING READER half of what used to be one map.
861
+ // `staticKeyTexts` was split out of it precisely because this half keeps
862
+ // growing during a render -- a `typeof` whose operand's tag is known folds
863
+ // to a literal here as it is spelled -- so it is a superset of the settled
864
+ // constants in exactly the place where a superset would turn a computed key
865
+ // into a static one. Every claim asks `staticKeyTexts`; this one exists so a
866
+ // later fold can reuse text an earlier one produced.
867
+ 'constantTexts'
868
+ ]);
869
+ const mapMutators = new Set(['set', 'delete', 'clear']);
870
+ const setMutators = new Set(['add', 'delete', 'clear']);
871
+ const sealedCollection = (field, collection, mutators) => new Proxy(collection, {
872
+ get: (target, property) => {
873
+ if (typeof property === 'string' && mutators.has(property)) {
874
+ return () => {
875
+ throw new Error(`EmitContext.${field}.${property} written during render (invariant 5: no write during render)`);
876
+ };
877
+ }
878
+ const value = Reflect.get(target, property, target);
879
+ return typeof value === 'function' ? value.bind(target) : value;
880
+ }
881
+ });
882
+ /** Seals every fact collection on `ctx` for the caller's render, and returns the undo. */
883
+ export const sealFactFieldsForRender = (ctx) => {
884
+ if (process.env['GEA_SEAL_EMIT_CONTEXT'] === undefined)
885
+ return () => { };
886
+ const fields = ctx;
887
+ const original = new Map();
888
+ for (const [field, value] of Object.entries(fields)) {
889
+ if (renderMutableEmitContextFields.has(field))
890
+ continue;
891
+ if (value instanceof Map) {
892
+ original.set(field, value);
893
+ fields[field] = sealedCollection(field, value, mapMutators);
894
+ }
895
+ else if (value instanceof Set) {
896
+ original.set(field, value);
897
+ fields[field] = sealedCollection(field, value, setMutators);
898
+ }
899
+ }
900
+ return () => {
901
+ for (const [field, value] of original)
902
+ fields[field] = value;
903
+ };
904
+ };