@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,69 @@
1
+ import type { DefineOwnPropertyOperation, GetOperation, IrBody, IrOperand, IrResult, SetOperation } from '../../../ir/model.js';
2
+ import type { DeclarationId, IrValueId } from '../../../identity/ids.js';
3
+ import { type EmitContext, type HostMemberRead, type PrototypeMethodRead } from '../emit-context.js';
4
+ import { type HostSpellings } from './host-members.js';
5
+ import type { HostMethodAlias } from './host-method-aliases.js';
6
+ /** A declaration-bound host method can share a native carrier with ordinary language objects. */
7
+ export declare const declaredHostMethodRead: (ctx: EmitContext, operation: GetOperation) => boolean;
8
+ /**
9
+ * Whether a native-handle member read is a host intrinsic's own REFLECTION
10
+ * method (`Math.hasOwnProperty`) rather than a member of its protocol.
11
+ *
12
+ * Stated once; `nativeHostMemberText` and the prototype-read walk both ask it.
13
+ * Gated on the protocol actually being classified, so an unclassified
14
+ * native-handle protocol still falls through to the ordinary "claimed by no
15
+ * host member table" refusal rather than silently answering here.
16
+ */
17
+ export declare const deferredIntrinsicReflectionClaim: (hosts: HostSpellings, staticKeyTexts: ReadonlyMap<IrValueId, string>, receiver: IrOperand, key: IrOperand) => PrototypeMethodRead | null;
18
+ export declare const nativeHostMemberText: (ctx: EmitContext, receiver: IrOperand, key: IrOperand, result: IrResult | null) => string | null;
19
+ /**
20
+ * A write to a data property of a host object.
21
+ *
22
+ * The mirror of `nativeHandleMemberText`'s read, and keyed the same way: by the
23
+ * carrier the host stated, falling back to the declared protocol name for a
24
+ * singleton that has no type of its own. A host object is not a struct this
25
+ * compiler lays out, so a write is the host's own spelling with `{value}`
26
+ * filled in -- never a `->` member assignment into a layout that does not
27
+ * exist.
28
+ *
29
+ * Every failure is refused by name, and none of them is answered by inventing
30
+ * a spelling. A member no table claims, a member claimed read-only, a
31
+ * non-constant key: each is a boundary this compiler was told nothing about,
32
+ * and a guess there writes to a symbol the host never declared.
33
+ */
34
+ export declare const emitNativeHostStore: (ctx: EmitContext, lines: string[], operation: SetOperation | DefineOwnPropertyOperation, label: string) => boolean;
35
+ /**
36
+ * Every deferred host member read of one body, decided from settled facts
37
+ * alone -- the census half of `nativeHostMemberText` and `declaredHostMethodRead`.
38
+ *
39
+ * This is the same question those two answer while they render, asked of the
40
+ * IR before anything renders: which `get` publishes a value that is a host
41
+ * METHOD reached but not materialised. Every input is settled -- the receiver's
42
+ * carrier, the key's constant text, the unioned `HostSpellings`, and
43
+ * `hostClassReads` -- so nothing here waits on a line being printed.
44
+ *
45
+ * This is the ONLY place the question is answered. `nativeHostMemberText` and
46
+ * `declaredHostMethodRead` do not re-test it -- they ask this map and then
47
+ * spell whichever answer it gave, which is what keeps one fact to one
48
+ * authority rather than two implementations that happen to agree. The
49
+ * call-site-arity carve-out is stated here for the same reason: it is part of
50
+ * "is this read deferred", not part of how either answer is printed.
51
+ *
52
+ * What this does NOT reproduce is `emitGet`'s branch LADDER -- whether some
53
+ * resolver AHEAD of `nativeHostMemberText` claims the same `get` first. That
54
+ * was checked rather than assumed, once, during the move: the walk ran beside
55
+ * the render-time map it replaced across both emitted sets (154 corpus + 281
56
+ * runtime), and no read the printer recorded was missing or different, with
57
+ * every one of the 1027 extras the `<value>:present` twin below. That was
58
+ * migration evidence, not a standing guarantee -- the guarantee is that
59
+ * nothing else decides any more.
60
+ *
61
+ * The one place the census must anticipate the ladder is the optional
62
+ * receiver: `emitGet` unwraps `a?.b` and re-enters with the proven-present
63
+ * view, so a read off an `optional` carrier records the `<value>:present`
64
+ * operand `unwrapPresentValue` mints, not the optional itself. The twin is
65
+ * stated unconditionally for the same reason `hostClassReadsOf` states its
66
+ * own: if a value IS a deferred host member then so is the value proven
67
+ * present, and the twin is not an SSA value any walk could otherwise observe.
68
+ */
69
+ export declare const hostMemberReadsOf: (body: IrBody, hosts: HostSpellings, staticKeyTexts: ReadonlyMap<IrValueId, string>, hostClassReads: ReadonlyMap<IrValueId, unknown>, hostMethodAliases: ReadonlyMap<DeclarationId, HostMethodAlias>) => ReadonlyMap<IrValueId, HostMemberRead>;
@@ -0,0 +1,533 @@
1
+ import { allOperationsOf } from '../../../ir/model.js';
2
+ import { operandsOfIrOperation } from '../../../ir/queries.js';
3
+ import { callSiteHostReadIsDeferred, hostReceiverProtocolOf } from '../../../representation/host-templates.js';
4
+ import { createCppEmitBlockedError, defineValue, operandText } from '../emit-context.js';
5
+ import { fillHostTemplate, hostIntrinsicLengthOf, hostMemberOf } from './host-members.js';
6
+ import { staticKeyTextOf } from '../emit-properties.js';
7
+ import { objectShapePrototypeMethods } from '../../../projection/callee.js';
8
+ import { cppStringLiteral } from '../types.js';
9
+ import { boxedValueText, propertyKeyText, unboxedReadText } from '../emit-dynamic-properties.js';
10
+ import { intrinsicMemberValueOf } from './emit-host-object.js';
11
+ import { hostPrototypeMethodSignatureText, hostPrototypeMethodValueText } from './emit-host-value.js';
12
+ import { alignedValueText } from '../emit-narrowing.js';
13
+ /** A declaration-bound host method can share a native carrier with ordinary language objects. */
14
+ export const declaredHostMethodRead = (ctx, operation) => {
15
+ const binding = operation.hostMethod;
16
+ if (!binding)
17
+ return false;
18
+ // Asked, not re-derived: `hostMemberReadsOf` claims exactly the bindings
19
+ // whose row is a method, so a binding it declined is one the host table
20
+ // states no implementation for -- which is worth saying by name here, where
21
+ // the protocol and member the program wrote are in hand.
22
+ if (ctx.hostMemberReads.has(operation.result.id))
23
+ return true;
24
+ throw createCppEmitBlockedError(`host-invocation:${binding.protocol}.${binding.member}`, `the resolved host method "${binding.protocol}.${binding.member}" has no implementation`);
25
+ };
26
+ /**
27
+ * A host object's data properties, in both directions.
28
+ *
29
+ * A host object is not a struct this compiler lays out: its members are the
30
+ * host's own implementation, reached by a spelling the host defines and states
31
+ * in a `HostMemberTable`. Both directions live here together, because they are
32
+ * one question asked twice -- which table claims this member, under which key --
33
+ * and answering it in two files is how a read and a write come to disagree
34
+ * about what a protocol is called.
35
+ */
36
+ /**
37
+ * A host method with no fixed ABI (`arity: 'call-site'` -- `Array.from`,
38
+ * `Array.isArray`), read as a bare VALUE rather than called: `describe(Array.from,
39
+ * 'name')` (`test/runtime/static-intrinsic-reflection.runtime.js`) passes it as
40
+ * an ordinary argument.
41
+ *
42
+ * ECMA-262 gives `Array.from` a real function object with its own `name`/`length`
43
+ * data properties (10.2.4 `SetFunctionName`/`SetFunctionLength`) -- but its
44
+ * overload set has no single physical parameter frame for THIS backend's native
45
+ * callable convention to capture (the same "unjoinable overload set" reason
46
+ * `emit-callable.ts`'s `emitConstruct` already names for `Date`/`RegExp`/typed
47
+ * arrays), so it cannot be a native `CallableObject` value. This is one of the
48
+ * four sanctioned dynamic boundaries: a genuinely dynamic JS boundary
49
+ * (`docs/ARCHITECTURE.md`) with no native representation, not a typed value
50
+ * boxed to dodge a native answer.
51
+ *
52
+ * The box is real, not a stub that happens to answer two properties: it IS a
53
+ * `gea::Value::Tag::Function`, and `Value::ownDescriptor` (`gea_dynamic_proxy.h`)
54
+ * already reads a Function box's reflection from `functionProperties_` -- so
55
+ * setting `name`/`length` there, with ECMA-262's own attributes for a builtin's
56
+ * own name/length (10.2.4: non-writable, non-enumerable, configurable), makes
57
+ * `Object.getOwnPropertyDescriptor(Array.from, 'name'|'length')` answer through
58
+ * the SAME runtime path an ordinary dynamic function does, with no runtime
59
+ * change needed. The underlying callable is never invoked by anything this
60
+ * probe's own reflection questions reach -- `describe` never calls its `obj`
61
+ * argument -- so a captureless no-op stub is what it wraps; a program that DID
62
+ * call it back would need a real per-member ABI this table does not have.
63
+ */
64
+ const dynamicHostFunctionValueText = (protocol, member, arity) => {
65
+ const nameProperty = `gea::PropertyDescriptor{.hasValue = true, .hasWritable = true, .hasEnumerable = true, .hasConfigurable = true, ` +
66
+ `.value = gea::Value::box(gea::Value::Tag::String, std::string(${cppStringLiteral(member)})), ` +
67
+ '.writable = false, .enumerable = false, .configurable = true}';
68
+ const lengthProperty = `gea::PropertyDescriptor{.hasValue = true, .hasWritable = true, .hasEnumerable = true, .hasConfigurable = true, ` +
69
+ `.value = gea::Value::box(gea::Value::Tag::Number, static_cast<double>(${arity ?? 0})), ` +
70
+ '.writable = false, .enumerable = false, .configurable = true}';
71
+ return ('([&]() -> gea::Value { ' +
72
+ 'auto __gea_fn = gea::Value::box(gea::Value::Tag::Function, gea::CallableObject<void()>(+[](void*) {}, nullptr)); ' +
73
+ `__gea_fn.functionProperties()->defineOwnProperty(gea::PropertyKey::string("name"), ${nameProperty}); ` +
74
+ `__gea_fn.functionProperties()->defineOwnProperty(gea::PropertyKey::string("length"), ${lengthProperty}); ` +
75
+ `return __gea_fn; })() /* "${protocol}.${member}" -- see dynamicHostFunctionValueText */`);
76
+ };
77
+ /** Asked of `representation/host-templates.ts`, which the IR's host-template routing asks too. */
78
+ const nativeHostProtocol = (receiver) => hostReceiverProtocolOf(receiver.representation);
79
+ /**
80
+ * Whether a native-handle member read is a host intrinsic's own REFLECTION
81
+ * method (`Math.hasOwnProperty`) rather than a member of its protocol.
82
+ *
83
+ * Stated once; `nativeHostMemberText` and the prototype-read walk both ask it.
84
+ * Gated on the protocol actually being classified, so an unclassified
85
+ * native-handle protocol still falls through to the ordinary "claimed by no
86
+ * host member table" refusal rather than silently answering here.
87
+ */
88
+ export const deferredIntrinsicReflectionClaim = (hosts, staticKeyTexts, receiver, key) => {
89
+ const hostProtocol = nativeHostProtocol(receiver);
90
+ if (hostProtocol === null)
91
+ return null;
92
+ const staticKey = staticKeyTexts.get(key.value);
93
+ if (staticKey === undefined || !objectShapePrototypeMethods.has(staticKey))
94
+ return null;
95
+ if (!hosts.intrinsicMembers.has(hostProtocol.protocol))
96
+ return null;
97
+ return {
98
+ receiverKind: 'native-handle-shape',
99
+ member: staticKey,
100
+ receiver: { kind: 'none' },
101
+ receiverElement: null,
102
+ intrinsicProtocol: hostProtocol.protocol
103
+ };
104
+ };
105
+ export const nativeHostMemberText = (ctx, receiver, key, result) => {
106
+ const hostProtocol = nativeHostProtocol(receiver);
107
+ if (hostProtocol === null)
108
+ return null;
109
+ const representation = receiver.representation;
110
+ const protocol = representation.kind === 'native-handle' ? representation.protocol : hostProtocol.protocol;
111
+ // Members are keyed by the carrier when the host stated one, and by the
112
+ // declared name when it did not (`Console`, `Storage`, `JSON` -- singletons
113
+ // with no type of their own). This is what removes the inheritance miss this
114
+ // function's own comment below records: `HTMLElement.getAttribute` and
115
+ // `Element.getAttribute` are one key once both carry `NodeHandle`, so there
116
+ // is no step for a flat lookup to fail to walk. Diagnostics below keep
117
+ // naming `protocol`, because that is the name the program wrote.
118
+ const memberProtocol = hostProtocol.protocol;
119
+ // A claim, not a fold: this decides whether the access is a STATIC member at
120
+ // all (falls through to the computed-key path below when it is not), so it
121
+ // must not see a key text `constantTexts` only holds because the render
122
+ // minted it (e.g. a folded `typeof` result reaching here via a computed key).
123
+ const staticKey = ctx.staticKeyTexts.get(key.value);
124
+ if (staticKey === undefined) {
125
+ const computed = representation.kind === 'native-handle' ? computedNativeHandleGetText(ctx, receiver, key, result, protocol, memberProtocol) : null;
126
+ if (computed !== null)
127
+ return computed;
128
+ if (!hostProtocol.strict)
129
+ return null;
130
+ // No specific member name survives past this point -- the key is
131
+ // genuinely computed -- so the subject is the receiver's own computed-get
132
+ // capability, exactly `ir/certify.ts`'s own `property-access` spelling.
133
+ throw createCppEmitBlockedError('property-access:native-handle:get:true', `a "${protocol}" host handle has no runtime member table; a property access keyed by a non-constant key has no rendering`);
134
+ }
135
+ // Deferred, and NOT decided here: `hostMemberReadsOf` settled which reads
136
+ // are deferred host members before this body rendered a line, and this asks
137
+ // it. The tests that used to stand in this function -- is the row a method,
138
+ // is this the call-site-arity carve-out -- moved there whole rather than
139
+ // being repeated at both ends; what is left in this file is the two
140
+ // SPELLINGS and the refusals that name a host table.
141
+ if (result !== null && ctx.hostMemberReads.has(result.id))
142
+ return '';
143
+ // `hasOwnProperty`/`propertyIsEnumerable` reached off a native-handle
144
+ // receiver (`Math.hasOwnProperty(...)`, or `Object.prototype.hasOwnProperty
145
+ // .call(Math, ...)` after the borrowed-call rewrite retargets its receiver
146
+ // to `Math`) -- the identical deferred GET-then-CALL split
147
+ // `objectShapePrototypeMemberRead` makes for a record/class-ref receiver,
148
+ // for the identical reason: neither name is a row `hostMemberOf` could ever
149
+ // claim (they are `Object.prototype`'s own, not `Math`'s), and answering
150
+ // them from `Math`'s static reflection table is this file's own subject.
151
+ // Gated on the protocol actually being classified (`intrinsicMembers.has`)
152
+ // so an unclassified native-handle protocol still falls through to this
153
+ // function's ordinary "claimed by no host member table" refusal below,
154
+ // rather than this arm silently answering `false` for one whose own
155
+ // members were never read at all.
156
+ if (deferredIntrinsicReflectionClaim(ctx.hosts, ctx.staticKeyTexts, receiver, key) !== null) {
157
+ if (result === null) {
158
+ throw createCppEmitBlockedError(`host-invocation:${protocol}.${staticKey}`, `"${protocol}.${staticKey}" is a host intrinsic's reflection method, and this access publishes no value for its call to consume`);
159
+ }
160
+ return '';
161
+ }
162
+ // A member the host states a spelling for. A data property is a value and
163
+ // renders here; a method is not a value at all -- only its call names a host
164
+ // symbol -- so the access records what was reached and `emitCall` renders it.
165
+ const host = hostMemberOf(ctx.hosts.members, memberProtocol, staticKey);
166
+ // Native records may also be compiler-owned runtime types (Date, RegExp,
167
+ // String objects). Their dedicated emitters and sidecars remain the owner
168
+ // when no authenticated host row claims this key. Native handles, by
169
+ // contrast, have no other storage and retain their fail-closed behavior.
170
+ if (host === undefined && !hostProtocol.strict)
171
+ return null;
172
+ if (host === undefined && memberProtocol.endsWith('.prototype')) {
173
+ const member = ctx.hosts.intrinsicMembers.get(memberProtocol)?.find((candidate) => candidate.name === staticKey);
174
+ const signature = result === null ? null : hostPrototypeMethodSignatureText(result.representation);
175
+ if (member?.kind !== 'method' || signature === null) {
176
+ throw createCppEmitBlockedError(`host-invocation:${protocol}.${staticKey}`, `"${protocol}.${staticKey}" is a prototype member this backend renders only as a reflectable method value; this read is ` +
177
+ (member === undefined ? 'of no such member' : member.kind === 'value' ? 'of a data member' : 'not typed as a callable value'));
178
+ }
179
+ return hostPrototypeMethodValueText(signature, memberProtocol, staticKey, hostIntrinsicLengthOf(memberProtocol, staticKey, member.arity));
180
+ }
181
+ if (host?.kind === 'property') {
182
+ // A member the host states only a write for is refused here rather than
183
+ // read through its store template: `(...).frame = {value}` is not an
184
+ // expression that answers what `view.frame` is, and rendering it as one
185
+ // would emit a write where the program asked for a read.
186
+ if (host.emit === null) {
187
+ throw createCppEmitBlockedError(`host-invocation:${protocol}.${staticKey}`, `"${protocol}.${staticKey}" is claimed as a host property with no read spelling, so this access has nothing to render`);
188
+ }
189
+ // A class member has no receiver to render, the same fact and the same
190
+ // reason the 'method' branch below already states: the host names the
191
+ // class outright (`gea::host::StringConstructor::fromCharCode`, a
192
+ // qualified static symbol with no `{receiver}` slot to fill), and a
193
+ // template that does not name one is filled fine with `null`. Asking
194
+ // `operandText` for the class's own value unconditionally -- this used
195
+ // to -- refused every such property by name (`host-class-value`) even
196
+ // though nothing here reads the receiver's text: `String.fromCharCode`
197
+ // is a property access on the `String` class object, not on an instance.
198
+ const receiverText = ctx.hostClassReads.has(receiver.value) ? null : operandText(ctx, receiver);
199
+ const filled = fillHostTemplate(host.emit, receiverText, []);
200
+ if (filled === null) {
201
+ throw createCppEmitBlockedError(`host-invocation:${protocol}.${staticKey}`, `the "${protocol}.${staticKey}" host template names a slot this access cannot fill`);
202
+ }
203
+ // The template owns its native result carrier. Inferring it from the
204
+ // property name claimed Array.prototype's ArrayObject was a NativeHandle
205
+ // and refused a read whose source and destination actually agree.
206
+ if (host.resultRepresentation !== undefined && result !== null) {
207
+ const converted = alignedValueText(ctx, 'host/emit-host-properties.ts:239', host.resultRepresentation, result.representation, filled);
208
+ if (converted !== null)
209
+ return converted;
210
+ }
211
+ // A builtin function read as a VALUE (`const alias = Math.imul`) is a copy
212
+ // of the host's one static `CallableObject`, and a copy mints no identity
213
+ // (`gea_runtime.h`). Two such reads compared unequal to each other and to
214
+ // the builtin itself. `identified()` mints on the static first, so every
215
+ // copy shares it. A read that is only ever CALLED (`Math.pow(x)`, the
216
+ // ordinary spelling of every builtin call) is left alone: identity is
217
+ // observable only where the value goes somewhere other than a call, and
218
+ // the minted identity is a `Ref` every copy would otherwise count in and
219
+ // out of on the hot call path.
220
+ const kind = result?.representation.kind;
221
+ const callable = kind === 'function-value-dispatch' ||
222
+ kind === 'function' ||
223
+ kind === 'function-and-constructor' ||
224
+ kind === 'constructor-value-dispatch';
225
+ if (callable && result !== null && !ctx.calleeOnlyValues.has(result.id))
226
+ return `${filled}.identified()`;
227
+ return filled;
228
+ }
229
+ if (host?.kind === 'method') {
230
+ if (result === null) {
231
+ throw createCppEmitBlockedError(`host-invocation:${protocol}.${staticKey}`, `"${protocol}.${staticKey}" is a host method, and this access publishes no value for its call to consume`);
232
+ }
233
+ // Reaching here means `hostMemberReadsOf` did NOT claim the read, and for
234
+ // a host method row that leaves exactly one answer: a call-site-arity row
235
+ // (`arity: 'call-site'`) read bare into a `dynamic` destination --
236
+ // `describe(Array.from, 'name')` -- has no native callable convention to
237
+ // fuse with, and is boxed as a function value instead (see
238
+ // `dynamicHostFunctionValueText`'s own comment for why that is sanctioned).
239
+ // The same row read into a NATIVE destination is deferred, and that
240
+ // distinction is stated once, where the claim is made.
241
+ const arity = ctx.hosts.intrinsicMembers.get(memberProtocol)?.find((candidate) => candidate.name === staticKey)?.arity ?? null;
242
+ return dynamicHostFunctionValueText(protocol, staticKey, arity);
243
+ }
244
+ // Nothing claims this member, and there is no spelling to invent for it.
245
+ //
246
+ // This used to interpolate `gea::host::<protocol>::<key>` here, for the
247
+ // singleton members that really do have such a symbol (`Math::pow` and
248
+ // friends). Those are `coreHostMembers` rows now, resolved by the
249
+ // `property` branch above, because the interpolation could not tell them
250
+ // apart from anything else: it answered for EVERY unclaimed member of EVERY
251
+ // native-handle protocol. `Promise.resolve` and `Math.acos` are claimed
252
+ // protocols with no such symbol; `HTMLElement.getAttribute` is a member the
253
+ // table declares one inheritance step away, on `Element`, which
254
+ // `hostMemberOf`'s flat `<protocol>.<member>` lookup does not walk up to.
255
+ // All three were spelled anyway and all three failed in clang as "no member
256
+ // named ... in namespace 'gea::host'", which names neither the access that
257
+ // caused it nor the table that failed to claim it.
258
+ //
259
+ // So this refuses by name instead, at the layer that knows both. The
260
+ // registry deciding which members have an implementation is `hostMembers`
261
+ // itself -- the same shape `emit-host-invoke.ts` gives the call half, where
262
+ // an unregistered protocol refuses against `hostInvocations` rather than
263
+ // being handed a constructed symbol.
264
+ throw createCppEmitBlockedError(`host-invocation:${protocol}.${staticKey}`, `"${protocol}.${staticKey}" is claimed by no host member table -- neither this backend's own (host-members.ts) nor any ` +
265
+ "plugin's states a spelling for it, so there is no host symbol to name");
266
+ };
267
+ /**
268
+ * A write to a data property of a host object.
269
+ *
270
+ * The mirror of `nativeHandleMemberText`'s read, and keyed the same way: by the
271
+ * carrier the host stated, falling back to the declared protocol name for a
272
+ * singleton that has no type of its own. A host object is not a struct this
273
+ * compiler lays out, so a write is the host's own spelling with `{value}`
274
+ * filled in -- never a `->` member assignment into a layout that does not
275
+ * exist.
276
+ *
277
+ * Every failure is refused by name, and none of them is answered by inventing
278
+ * a spelling. A member no table claims, a member claimed read-only, a
279
+ * non-constant key: each is a boundary this compiler was told nothing about,
280
+ * and a guess there writes to a symbol the host never declared.
281
+ */
282
+ export const emitNativeHostStore = (ctx, lines, operation, label) => {
283
+ const representation = operation.receiver.representation;
284
+ const hostProtocol = nativeHostProtocol(operation.receiver);
285
+ if (hostProtocol === null)
286
+ return false;
287
+ const protocol = representation.kind === 'native-handle' ? representation.protocol : hostProtocol.protocol;
288
+ const memberProtocol = hostProtocol.protocol;
289
+ const receiverText = ctx.hostClassReads.has(operation.receiver.value) ? null : operandText(ctx, operation.receiver);
290
+ // A claim, not a fold: this decides whether the store is a STATIC member at
291
+ // all (falls through to the computed-key store below when it is not), so it
292
+ // must not see a key text `constantTexts` only holds because the render
293
+ // minted it (e.g. a folded `typeof` result reaching here via a computed key).
294
+ if (!ctx.staticKeyTexts.has(operation.key.value)) {
295
+ if (representation.kind === 'native-handle' && emitComputedNativeHandleStore(ctx, lines, operation, label, receiverText))
296
+ return true;
297
+ if (!hostProtocol.strict)
298
+ return false;
299
+ }
300
+ const staticKey = staticKeyTextOf(ctx, operation.key, `a "${label}" operation on a "${protocol}" host handle`);
301
+ const host = hostMemberOf(ctx.hosts.members, memberProtocol, staticKey);
302
+ if (host === undefined && !hostProtocol.strict)
303
+ return false;
304
+ if (host?.kind !== 'property' || host.store === null) {
305
+ throw createCppEmitBlockedError(`host-invocation:${protocol}.${staticKey}.write`, `writing "${protocol}.${staticKey}" is claimed by no host member table as a settable property, so there is no host symbol to assign through`);
306
+ }
307
+ const filled = fillHostTemplate(host.store, receiverText, [], null, operandText(ctx, operation.value));
308
+ if (filled === null) {
309
+ throw createCppEmitBlockedError(`host-invocation:${protocol}.${staticKey}.write`, `the "${protocol}.${staticKey}" host store template names a slot this write cannot fill`);
310
+ }
311
+ lines.push(`${filled};`);
312
+ // Threaded onward as the receiver, for the reason every other store branch
313
+ // states: a store has no failure to report, and what a consumer reads next
314
+ // is the object written into.
315
+ if (operation.result) {
316
+ // A store threads its receiver onward. When that receiver IS the host
317
+ // object there is no value to name, and the result's own identity is
318
+ // already stated by `emit-bindings.ts`'s `hostClassReadsOf`.
319
+ if (!ctx.hostClassReads.has(operation.receiver.value))
320
+ lines.push(`${defineValue(ctx, operation.result)} = ${receiverText};`);
321
+ }
322
+ return true;
323
+ };
324
+ /**
325
+ * A COMPUTED key on a namespace-shaped native-handle (`Math`, and any other
326
+ * classified intrinsic with no host C++ type of its own): `obj[name]` where
327
+ * `name` is a runtime string or symbol.
328
+ *
329
+ * A host singleton has no runtime member table, so the dispatch is the static
330
+ * one this compiler already owns -- the protocol's classified member list
331
+ * (`intrinsicMembers`), each member's value spelled by
332
+ * `intrinsicMemberValueOf` -- rendered as a name comparison chain. The result
333
+ * is a `gea::Value` by construction and that is not the forbidden shortcut:
334
+ * the checker itself types `Math[k]` with a runtime `k` as `any` (the union
335
+ * of a number constant and forty function objects is a value whose static
336
+ * type genuinely depends on the key), and only a `dynamic` destination is
337
+ * rendered here; any other published carrier is refused by name.
338
+ *
339
+ * In front of the static chain sits `gea::detail::hostIntrinsicSidecar`, the
340
+ * one per-protocol table a program can CHANGE at runtime -- the dynamic-
341
+ * property sidecar every native type gets rather than a box (see
342
+ * `gea::runtime::regex::Pattern`'s). A computed write to a writable member or
343
+ * a fresh key lands there and shadows the static answer; a computed delete of
344
+ * a configurable member marks it removed; a non-writable member ignores the
345
+ * store and a non-configurable one refuses the delete, exactly as ECMA-262's
346
+ * ordinary [[Set]]/[[Delete]] answer for the attributes the member has. What
347
+ * the sidecar does NOT reach is a CONSTANT-key read (`Math.pow`), which
348
+ * renders the host symbol directly: a program that writes `Math['pow'] = f`
349
+ * through a runtime key and then calls `Math.pow` by name still calls the
350
+ * host's. test262's `verifyProperty` restores what it writes and reads back
351
+ * through the same computed path, so the two never disagree there.
352
+ */
353
+ const namespaceIntrinsicMembersOf = (ctx, receiver) => {
354
+ if (receiver.representation.kind !== 'native-handle' || receiver.representation.native !== null)
355
+ return null;
356
+ return ctx.hosts.intrinsicMembers.get(receiver.representation.protocol) ?? null;
357
+ };
358
+ const computedNativeHandleGetText = (ctx, receiver, key, result, protocol, memberProtocol) => {
359
+ const members = namespaceIntrinsicMembersOf(ctx, receiver);
360
+ if (members === null)
361
+ return null;
362
+ const site = `a computed "get" on a "${protocol}" host handle`;
363
+ if (result === null) {
364
+ // Same subject as `nativeHostMemberText`'s own computed-key refusal above:
365
+ // a computed `[[Get]]` on a native-handle receiver, keyed generically
366
+ // rather than by member -- no member name survives a genuinely computed key.
367
+ throw createCppEmitBlockedError('property-access:native-handle:get:true', `${site} publishes no value for its consumer to read`);
368
+ }
369
+ const arms = members
370
+ .map((member) => `if (__gea_name == ${cppStringLiteral(member.name)}) return ${intrinsicMemberValueOf(ctx, memberProtocol, member, site).value};`)
371
+ .join(' ');
372
+ const read = `([&]() -> gea::Value { const gea::PropertyKey __gea_key = ${propertyKeyText(ctx, key, site)}; ` +
373
+ `auto& __gea_side = gea::detail::hostIntrinsicSidecar(${cppStringLiteral(memberProtocol)}); ` +
374
+ `if (__gea_side.hasOverride(__gea_key)) return __gea_side.get(__gea_key); if (__gea_side.isRemoved(__gea_key)) return gea::Value{}; ` +
375
+ `if (!__gea_key.isSymbol()) { const std::string& __gea_name = __gea_key.text(); ${arms} } return gea::Value{}; })()`;
376
+ return unboxedReadText(result.representation, read, site);
377
+ };
378
+ const emitComputedNativeHandleStore = (ctx, lines, operation, label, receiverText) => {
379
+ const members = namespaceIntrinsicMembersOf(ctx, operation.receiver);
380
+ if (members === null || operation.receiver.representation.kind !== 'native-handle')
381
+ return false;
382
+ const { protocol } = operation.receiver.representation;
383
+ const site = `a computed "${label}" on a "${protocol}" host handle`;
384
+ // A non-writable member ignores the write (10.1.9.2 step 2.a, sloppy mode's
385
+ // silent half); a writable one keeps its attributes through the override
386
+ // (`setMember`); a key the table lacks becomes an ordinary property.
387
+ const arms = members
388
+ .map((member) => {
389
+ const fixed = intrinsicMemberValueOf(ctx, protocol, member, site);
390
+ const store = fixed.writable
391
+ ? `__gea_side.setMember(__gea_key, __gea_written, true, ${String(fixed.enumerable)}, ${String(fixed.configurable)});`
392
+ : '';
393
+ return `if (__gea_name == ${cppStringLiteral(member.name)}) { ${store} return; }`;
394
+ })
395
+ .join(' ');
396
+ lines.push(`{ const gea::PropertyKey __gea_key = ${propertyKeyText(ctx, operation.key, site)}; ` +
397
+ `auto& __gea_side = gea::detail::hostIntrinsicSidecar(${cppStringLiteral(protocol)}); ` +
398
+ `const gea::Value __gea_written = ${boxedValueText(ctx, operation.value, site)}; ` +
399
+ `[&]() { if (!__gea_key.isSymbol()) { const std::string& __gea_name = __gea_key.text(); ${arms} } __gea_side.set(__gea_key, __gea_written); }(); }`);
400
+ if (operation.result) {
401
+ // A store threads its receiver onward. When that receiver IS the host
402
+ // object there is no value to name, and the result's own identity is
403
+ // already stated by `emit-bindings.ts`'s `hostClassReadsOf`.
404
+ if (!ctx.hostClassReads.has(operation.receiver.value))
405
+ lines.push(`${defineValue(ctx, operation.result)} = ${receiverText};`);
406
+ }
407
+ return true;
408
+ };
409
+ /**
410
+ * Every deferred host member read of one body, decided from settled facts
411
+ * alone -- the census half of `nativeHostMemberText` and `declaredHostMethodRead`.
412
+ *
413
+ * This is the same question those two answer while they render, asked of the
414
+ * IR before anything renders: which `get` publishes a value that is a host
415
+ * METHOD reached but not materialised. Every input is settled -- the receiver's
416
+ * carrier, the key's constant text, the unioned `HostSpellings`, and
417
+ * `hostClassReads` -- so nothing here waits on a line being printed.
418
+ *
419
+ * This is the ONLY place the question is answered. `nativeHostMemberText` and
420
+ * `declaredHostMethodRead` do not re-test it -- they ask this map and then
421
+ * spell whichever answer it gave, which is what keeps one fact to one
422
+ * authority rather than two implementations that happen to agree. The
423
+ * call-site-arity carve-out is stated here for the same reason: it is part of
424
+ * "is this read deferred", not part of how either answer is printed.
425
+ *
426
+ * What this does NOT reproduce is `emitGet`'s branch LADDER -- whether some
427
+ * resolver AHEAD of `nativeHostMemberText` claims the same `get` first. That
428
+ * was checked rather than assumed, once, during the move: the walk ran beside
429
+ * the render-time map it replaced across both emitted sets (154 corpus + 281
430
+ * runtime), and no read the printer recorded was missing or different, with
431
+ * every one of the 1027 extras the `<value>:present` twin below. That was
432
+ * migration evidence, not a standing guarantee -- the guarantee is that
433
+ * nothing else decides any more.
434
+ *
435
+ * The one place the census must anticipate the ladder is the optional
436
+ * receiver: `emitGet` unwraps `a?.b` and re-enters with the proven-present
437
+ * view, so a read off an `optional` carrier records the `<value>:present`
438
+ * operand `unwrapPresentValue` mints, not the optional itself. The twin is
439
+ * stated unconditionally for the same reason `hostClassReadsOf` states its
440
+ * own: if a value IS a deferred host member then so is the value proven
441
+ * present, and the twin is not an SSA value any walk could otherwise observe.
442
+ */
443
+ export const hostMemberReadsOf = (body, hosts, staticKeyTexts, hostClassReads, hostMethodAliases) => {
444
+ const reads = new Map();
445
+ // A direct numeric host call consumes the spelling, not a callable value.
446
+ // Defer its property read only when every use has that same property: a
447
+ // first-class alias, reflected value, receiver or argument still materializes.
448
+ const numericRestCallees = new Set();
449
+ const materializedUses = new Set();
450
+ for (const block of body.blocks.values()) {
451
+ for (const operation of allOperationsOf(block)) {
452
+ if (operation.kind === 'call' && operation.numericRestHostCall !== undefined) {
453
+ numericRestCallees.add(operation.callee.value);
454
+ if (operation.receiver)
455
+ materializedUses.add(operation.receiver.value);
456
+ for (const argument of operation.arguments)
457
+ materializedUses.add(argument.value);
458
+ }
459
+ else {
460
+ for (const operand of operandsOfIrOperation(operation))
461
+ materializedUses.add(operand.value);
462
+ }
463
+ }
464
+ }
465
+ for (const region of body.iteratorCloseRegions ?? [])
466
+ materializedUses.add(region.iterator.value);
467
+ for (const value of materializedUses)
468
+ numericRestCallees.delete(value);
469
+ const presentView = (receiver) => receiver.representation.kind === 'optional'
470
+ ? { value: `${receiver.value}:present`, representation: receiver.representation.payload }
471
+ : receiver;
472
+ const receiverOf = (receiver) => (hostClassReads.has(receiver.value) ? null : presentView(receiver));
473
+ for (const block of body.blocks.values()) {
474
+ for (const operation of allOperationsOf(block)) {
475
+ if (operation.kind === 'get') {
476
+ const binding = operation.hostMethod;
477
+ if (binding !== undefined) {
478
+ if (hostMemberOf(hosts.members, binding.protocol, binding.member)?.kind === 'method')
479
+ reads.set(operation.result.id, { ...binding, receiver: receiverOf(operation.receiver) });
480
+ continue;
481
+ }
482
+ const receiver = presentView(operation.receiver);
483
+ const hostProtocol = nativeHostProtocol(receiver);
484
+ if (hostProtocol === null)
485
+ continue;
486
+ const staticKey = staticKeyTexts.get(operation.key.value);
487
+ if (staticKey === undefined)
488
+ continue;
489
+ const memberProtocol = hostProtocol.protocol;
490
+ // `Math.hasOwnProperty` and friends are `Object.prototype`'s own, not
491
+ // this protocol's, and `nativeHostMemberText` hands them to the
492
+ // prototype channel before ever asking `hostMemberOf`.
493
+ if (objectShapePrototypeMethods.has(staticKey) && hosts.intrinsicMembers.has(memberProtocol))
494
+ continue;
495
+ const host = hostMemberOf(hosts.members, memberProtocol, staticKey);
496
+ const numericRest = host?.kind === 'property' && host.numericRestCall !== undefined && numericRestCallees.has(operation.result.id);
497
+ if (host?.kind !== 'method' && !numericRest)
498
+ continue;
499
+ // The one host method that is NOT deferred: a call-site-arity row read
500
+ // bare into a `dynamic` destination has no native callable convention
501
+ // to fuse with, and is boxed as a function value instead
502
+ // (`dynamicHostFunctionValueText`). Declining it here is what lets the
503
+ // printer ask this census which of the two spellings to render rather
504
+ // than repeat the test.
505
+ if (!callSiteHostReadIsDeferred(operation.result.representation) && host?.kind === 'method' && host.arity === 'call-site')
506
+ continue;
507
+ reads.set(operation.result.id, {
508
+ protocol: memberProtocol,
509
+ member: staticKey,
510
+ receiver: receiverOf(operation.receiver)
511
+ });
512
+ }
513
+ else if (operation.kind === 'binding-read') {
514
+ // A cell that holds one host method forever is read as that member.
515
+ const alias = hostMethodAliases.get(operation.declaration);
516
+ if (alias !== undefined)
517
+ reads.set(operation.result.id, { ...alias, receiver: null });
518
+ }
519
+ else if (operation.kind === 'convert') {
520
+ // Optional chaining narrows and widens the callee between its read,
521
+ // its presence test and its call; the deferred invocation travels
522
+ // through every one of those SSA views.
523
+ const inherited = reads.get(operation.source.value);
524
+ if (inherited !== undefined)
525
+ reads.set(operation.result.id, inherited);
526
+ }
527
+ }
528
+ }
529
+ // The proven-present view of a deferred read is the same deferred read.
530
+ for (const [value, read] of [...reads])
531
+ reads.set(`${value}:present`, read);
532
+ return reads;
533
+ };
@@ -0,0 +1,4 @@
1
+ import type { CallOperation } from '../../../ir/model.js';
2
+ import { type EmitContext } from '../emit-context.js';
3
+ /** Reflect over native data storage. Unsupported layouts must not enter a boxed host call implicitly. */
4
+ export declare const nativeReflectCallText: (ctx: EmitContext, operation: CallOperation, spelling: string) => string | null;