@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,133 @@
1
+ import type { CallOperation, ConstructOperation, IrOperand } from '../../../ir/model.js';
2
+ import type { Representation } from '../../../representation/model.js';
3
+ import type { IrValueId } from '../../../identity/ids.js';
4
+ import { type EmitContext, type PrototypeMethodRead } from '../emit-context.js';
5
+ /**
6
+ * `Date.prototype` and the `Date` constructor.
7
+ *
8
+ * The C++ half is `gea::runtime::Date` (`runtime/gea_runtime.h`), ported from
9
+ * v1 geatsc's own `targets/cpp/runtime/date.h` + `date.cpp`. This file is the
10
+ * compiler half: which members are claimed, what each one's call renders to,
11
+ * and -- just as important -- what each unclaimed member's refusal says.
12
+ *
13
+ * ## Why the spelling lives here and not in a plugin package
14
+ *
15
+ * `Date` is an ECMAScript builtin declared by `lib.es5.d.ts`, not a gea host
16
+ * protocol. Nothing installs it; the language has it. So its C++ spelling is
17
+ * the backend's own -- the same place `Promise<T>`, the eight TypedArray views
18
+ * and the four keyed collections keep theirs -- and never the gea plugin's
19
+ * `nativeTypes` table, which is the authority for what a HOST implements.
20
+ *
21
+ * ## Why a Date is a `native-record-ref` and not a `native-handle`
22
+ *
23
+ * `representation/derive.ts` already selected `native-record-ref` for the
24
+ * `Date` interface before this port existed (measured: `native-record-ref(
25
+ * type|3,shared-refcount,)` on a two-line `new Date(0)` probe); all the
26
+ * `DateDeclarationPolicy` adds is the `native` field, which names
27
+ * `gea::runtime::Date` as the struct so `records.ts` emits none of its own.
28
+ * A `native-handle` would be wrong for a reason the model states out loud:
29
+ * `types.ts`'s `carriesAbsence` calls every handle a carrier with an empty
30
+ * state, so `representation/optional.ts` collapses `T | null` onto the handle
31
+ * itself -- and a Date has no empty value for `null` to be spelled as.
32
+ *
33
+ * ## Deferral, exactly as String/Array/Map do it
34
+ *
35
+ * `lib.es5.d.ts` gives an interface method no `this` parameter, so there is no
36
+ * receiver-carrying calling convention a first-class method value could be
37
+ * built from (`emit-prototype-string.ts`'s own comment states this). The
38
+ * `[[Get]]` therefore records which member was reached off which receiver and
39
+ * renders nothing; the call that follows renders the whole fused expression.
40
+ * `datePrototypeMethods` is the one authority for which keys may defer, so a
41
+ * member that defers is always a member `dateCallText` can render.
42
+ */
43
+ /**
44
+ * The C++ type a Date is carried in.
45
+ *
46
+ * One constant, read by three places that must not disagree: `compiler.ts`
47
+ * installs it as the `DateDeclarationPolicy`'s answer, `types.ts` spells it
48
+ * from the carrier's own `native` field, and `isDateCarrier` below recognizes
49
+ * it again at every member access and construction.
50
+ */
51
+ export declare const cppDateType = "gea::runtime::Date";
52
+ /** Whether a carrier is a Date -- the `native-record-ref` whose stated native type is `gea::runtime::Date`. */
53
+ export declare const isDateCarrier: (representation: Representation) => representation is Extract<Representation, {
54
+ kind: "native-record-ref";
55
+ }>;
56
+ /** Every zero-argument getter, each named exactly as `gea::runtime::Date` spells it. */
57
+ export declare const dateGetters: readonly string[];
58
+ /** The zero-argument string forms. `toLocale*` are not here: they take arguments this backend refuses rather than ignores. */
59
+ export declare const dateStringForms: readonly string[];
60
+ /** Each setter, with the maximum number of arguments `lib.es5.d.ts` declares for it. */
61
+ export declare const dateSetters: ReadonlyMap<string, number>;
62
+ /**
63
+ * The keys `dateMemberText` may defer -- one authority for "is this method
64
+ * implemented", exactly as `stringPrototypeMethods` is for its family.
65
+ *
66
+ * `toJSON` is deferred even though its ordinary carrier refuses: the refusal
67
+ * is a property of the CALL's published result, so it has to be reached at the
68
+ * call to be stated accurately, and refusing at the access would say "not
69
+ * implemented" about something that is.
70
+ */
71
+ export declare const datePrototypeMethods: ReadonlySet<string>;
72
+ /**
73
+ * `Date.prototype` members this backend states no rendering for, each with the
74
+ * reason -- "not built yet" and "cannot be built without X" are different
75
+ * answers, and only the second tells you what to build.
76
+ */
77
+ export declare const dateMemberRefusals: ReadonlyMap<string, string>;
78
+ /**
79
+ * A `[[Get]]` off a Date receiver: defer a claimed method, refuse anything
80
+ * else by name.
81
+ *
82
+ * A NON-constant key answers `null` rather than refusing, so the access falls
83
+ * through to `emit-dynamic-properties.ts`'s native sidecar -- `d[k]` on a Date
84
+ * keeps the native carrier and reads the expando table keyed on this object's
85
+ * own address, which is the sanctioned answer for a native type that needs
86
+ * arbitrary properties (`gea::runtime::regex::Pattern` is the reference
87
+ * implementation, and `gea::runtime::Date` declares the same
88
+ * `gea_readOwnField`/`gea_writeOwnField`/`gea_ownFieldKeys` protocol). Boxing
89
+ * the Date to make such an access compile is the forbidden shortcut.
90
+ */
91
+ /** Whether a Date member read is a deferred `Date.prototype` method read. Stated once; the renderer and the prototype-read walk both ask it. */
92
+ export declare const deferredDateMethodClaim: (staticKeyTexts: ReadonlyMap<IrValueId, string>, receiver: IrOperand, key: IrOperand) => PrototypeMethodRead | null;
93
+ export declare const dateMemberText: (ctx: EmitContext, receiver: IrOperand, key: IrOperand, result: string | null) => string | null;
94
+ /** The call text for a deferred `Date.prototype` read. */
95
+ export declare const dateCallText: (ctx: EmitContext, member: string, receiverText: string, operation: CallOperation) => string;
96
+ /**
97
+ * `new Date(...)` -- ECMA-262 21.4.2.1.
98
+ *
99
+ * The fourth member of `emit-callable.ts`'s `emitTypedArrayConstruct` /
100
+ * `emitArrayConstruct` / `emitKeyedCollectionConstruct` family, and here for
101
+ * the identical structural reason: `DateConstructor`'s checker overload set is
102
+ * `new ()`, `new (value: number | string)`, `new (value: number | string |
103
+ * Date)` and `new (year, monthIndex, ...)`, which have no single physical
104
+ * frame, so `representation/host-abi.ts`'s `widestSubsumingAbi` correctly
105
+ * refuses to join them and `derive.ts` leaves `.construct` null. This reads
106
+ * the construction's own arguments instead.
107
+ *
108
+ * Four forms render, one per constructor `gea::runtime::Date` declares:
109
+ * zero arguments (now), one number (a time value), one string (parsed), and
110
+ * two-to-seven numbers (local calendar components). `new Date(someDate)` --
111
+ * the copy overload -- is refused BY NAME rather than rendered as a copy: it
112
+ * is `ToPrimitive(value)` per 21.4.2.1 step 4, and a shared_ptr copy would
113
+ * alias the ORIGINAL, so a mutation through one would be observable through
114
+ * the other. That is a silently different program, not a missing one.
115
+ */
116
+ export declare const emitDateConstruct: (ctx: EmitContext, lines: string[], operation: ConstructOperation, result: Extract<Representation, {
117
+ kind: "native-record-ref";
118
+ }>) => void;
119
+ /**
120
+ * `Date.parse(s)` and `Date.UTC(...)` -- ECMA-262 21.4.3.2 / 21.4.3.4.
121
+ *
122
+ * Registered as the `DateConstructor` protocol's call-site renderer
123
+ * (`emit-host-invoke.ts`'s `hostMemberRenderers`), for the reason that
124
+ * mechanism exists: `Date.UTC` takes one to seven arguments, and the fixed
125
+ * `arity` a `hostMembers` template row states cannot express that.
126
+ *
127
+ * `Date.now()` is deliberately NOT here. It is a real readable
128
+ * `gea::CallableObject<double()>` in `gea_runtime.h`, so its row stays a
129
+ * `property` and its call goes through that callable carrier -- rendering it
130
+ * as a free function here would be a second spelling of a member that already
131
+ * has one.
132
+ */
133
+ export declare const dateConstructorCallText: (ctx: EmitContext, member: string, operation: CallOperation) => string;
@@ -0,0 +1,515 @@
1
+ import { representationKey } from '../../../representation/model.js';
2
+ import { createCppEmitBlockedError, defineValue, operandText } from '../emit-context.js';
3
+ import { cppRecordFieldName, cppTypeOf } from '../types.js';
4
+ import { toNumberText } from '../emit-tonumber.js';
5
+ /**
6
+ * `Date.prototype` and the `Date` constructor.
7
+ *
8
+ * The C++ half is `gea::runtime::Date` (`runtime/gea_runtime.h`), ported from
9
+ * v1 geatsc's own `targets/cpp/runtime/date.h` + `date.cpp`. This file is the
10
+ * compiler half: which members are claimed, what each one's call renders to,
11
+ * and -- just as important -- what each unclaimed member's refusal says.
12
+ *
13
+ * ## Why the spelling lives here and not in a plugin package
14
+ *
15
+ * `Date` is an ECMAScript builtin declared by `lib.es5.d.ts`, not a gea host
16
+ * protocol. Nothing installs it; the language has it. So its C++ spelling is
17
+ * the backend's own -- the same place `Promise<T>`, the eight TypedArray views
18
+ * and the four keyed collections keep theirs -- and never the gea plugin's
19
+ * `nativeTypes` table, which is the authority for what a HOST implements.
20
+ *
21
+ * ## Why a Date is a `native-record-ref` and not a `native-handle`
22
+ *
23
+ * `representation/derive.ts` already selected `native-record-ref` for the
24
+ * `Date` interface before this port existed (measured: `native-record-ref(
25
+ * type|3,shared-refcount,)` on a two-line `new Date(0)` probe); all the
26
+ * `DateDeclarationPolicy` adds is the `native` field, which names
27
+ * `gea::runtime::Date` as the struct so `records.ts` emits none of its own.
28
+ * A `native-handle` would be wrong for a reason the model states out loud:
29
+ * `types.ts`'s `carriesAbsence` calls every handle a carrier with an empty
30
+ * state, so `representation/optional.ts` collapses `T | null` onto the handle
31
+ * itself -- and a Date has no empty value for `null` to be spelled as.
32
+ *
33
+ * ## Deferral, exactly as String/Array/Map do it
34
+ *
35
+ * `lib.es5.d.ts` gives an interface method no `this` parameter, so there is no
36
+ * receiver-carrying calling convention a first-class method value could be
37
+ * built from (`emit-prototype-string.ts`'s own comment states this). The
38
+ * `[[Get]]` therefore records which member was reached off which receiver and
39
+ * renders nothing; the call that follows renders the whole fused expression.
40
+ * `datePrototypeMethods` is the one authority for which keys may defer, so a
41
+ * member that defers is always a member `dateCallText` can render.
42
+ */
43
+ /**
44
+ * The C++ type a Date is carried in.
45
+ *
46
+ * One constant, read by three places that must not disagree: `compiler.ts`
47
+ * installs it as the `DateDeclarationPolicy`'s answer, `types.ts` spells it
48
+ * from the carrier's own `native` field, and `isDateCarrier` below recognizes
49
+ * it again at every member access and construction.
50
+ */
51
+ export const cppDateType = 'gea::runtime::Date';
52
+ /** Whether a carrier is a Date -- the `native-record-ref` whose stated native type is `gea::runtime::Date`. */
53
+ export const isDateCarrier = (representation) => representation.kind === 'native-record-ref' && representation.native === cppDateType;
54
+ /**
55
+ * Every argument of every Date member is a `number` -- ECMA-262 21.4.4 runs
56
+ * each one through ToNumber, and `lib.es5.d.ts` declares each `number`. An
57
+ * argument carrying anything else is refused by name rather than converted:
58
+ * the conversion this backend would have to render is ToNumber of a value
59
+ * whose carrier says it is not one, and answering NaN for it silently would
60
+ * turn a wrong argument into an Invalid Date instead of a diagnostic.
61
+ */
62
+ const numericArgumentText = (ctx, argument, member, position) => {
63
+ const carrier = argument.representation;
64
+ if (carrier.kind === 'scalar' && carrier.domain === 'number')
65
+ return operandText(ctx, argument);
66
+ const converted = toNumberText(operandText(ctx, argument), carrier) ?? recordToNumberText(ctx, operandText(ctx, argument), carrier);
67
+ if (converted === null) {
68
+ throw createCppEmitBlockedError(`host-invocation:Date.prototype.${member}`, `"Date.prototype.${member}" argument ${position} carries "${representationKey(carrier)}", not a number scalar; ` +
69
+ 'ECMA-262 21.4.4 applies ToNumber to it, and this backend states no such conversion here');
70
+ }
71
+ return converted;
72
+ };
73
+ /**
74
+ * ToNumber of a compiler-laid-out record -- ECMA-262 7.1.4 step 2 through
75
+ * ToPrimitive with hint number (7.1.1.1): `valueOf` is called first when the
76
+ * record carries one, `toString` otherwise, and the primitive it returns is
77
+ * converted. A record whose method is not a zero-argument callable, or that
78
+ * carries neither, is `null` here: the former has a frame this cannot call
79
+ * without arguments, and the latter reaches `Object.prototype.toString`'s
80
+ * `"[object Object]"` -- NaN, but by way of a prototype chain this record
81
+ * does not carry, so it is refused rather than guessed.
82
+ */
83
+ const recordToNumberText = (ctx, text, carrier) => {
84
+ // A `record` carries its fields inline; an anchored literal (a
85
+ // `native-record-ref` with no host native -- `{ valueOf: function () {
86
+ // return this.n } }`, anchored because its method reads `this`) names a
87
+ // shape whose layout the sealed table answers, through the same authority
88
+ // the struct bodies come from.
89
+ // (Asked of the deriver directly rather than through `records.ts`, which
90
+ // imports this renderer's own consumers -- a cycle Node resolves as a
91
+ // temporal-dead-zone crash at load.)
92
+ const body = carrier.kind === 'native-record-ref' && carrier.native === null ? ctx.deriver.layoutOf(carrier.shapeId) : null;
93
+ const fields = carrier.kind === 'record'
94
+ ? carrier.fields
95
+ : body !== null && (body.kind === 'record' || body.kind === 'record-with-index')
96
+ ? body.fields
97
+ : null;
98
+ if (fields === null)
99
+ return null;
100
+ for (const method of ['valueOf', 'toString']) {
101
+ const field = fields.find((candidate) => candidate.key === method && candidate.required);
102
+ if (!field)
103
+ continue;
104
+ const abi = field.value.kind === 'function-value-dispatch' || field.value.kind === 'function' ? field.value.abi : null;
105
+ if (abi === null)
106
+ return null;
107
+ // ToPrimitive calls the method with NO arguments. A convention whose only
108
+ // formal is the rest slot (a body reading `arguments` -- test262's
109
+ // `arg-coercion-order.js` records them) receives an empty pack, spelled as
110
+ // `virtual-methods.ts` spells an omitted rest: a fresh array of the slot's
111
+ // own element carrier. Any positional formal is a frame this cannot fill.
112
+ const rest = abi.restFrom === 0 && abi.parameters.length === 1 ? (abi.parameters[0] ?? null) : null;
113
+ if (rest !== null && rest.value.kind !== 'array-object')
114
+ return null;
115
+ if (rest === null && abi.parameters.length !== 0)
116
+ return null;
117
+ // A method reading `this` declares the receiver, and ToPrimitive calls it
118
+ // ON this very record: the argument is the receiver, so its own carrier
119
+ // must be the one the frame declares. Any other receiver is a frame this
120
+ // site cannot fill.
121
+ if (abi.receiver !== null && representationKey(abi.receiver) !== representationKey(carrier))
122
+ return null;
123
+ const actuals = [
124
+ ...(abi.receiver === null ? [] : [text]),
125
+ ...(rest === null || rest.value.kind !== 'array-object' ? [] : [`gea::makeRef<gea::ArrayObject<${cppTypeOf(rest.value.element)}>>()`])
126
+ ];
127
+ const call = `${text}->${cppRecordFieldName(method)}.call(${actuals.join(', ')})`;
128
+ // A method answering nothing is still CALLED -- for its effects, and for
129
+ // the throw it may be -- and its result is ToNumber(undefined).
130
+ if (abi.result.kind === 'void')
131
+ return `(${call}, gea::host::detail::toNumberUndefined())`;
132
+ return toNumberText(call, abi.result);
133
+ }
134
+ return null;
135
+ };
136
+ /**
137
+ * A member taking no arguments at all -- every getter, and the string forms
138
+ * that are not locale-sensitive.
139
+ *
140
+ * An argument is refused rather than dropped. `d.getFullYear(1)` is legal
141
+ * TypeScript for none of these, so a call that passes one is a call this
142
+ * renderer is not reading correctly, and rendering it as the zero-argument
143
+ * form would hide that.
144
+ */
145
+ const nullaryText = (_ctx, receiverText, args, member) => {
146
+ if (args.length !== 0) {
147
+ throw createCppEmitBlockedError(`host-invocation:Date.prototype.${member}`, `"Date.prototype.${member}" takes no arguments; this call passes ${args.length}`);
148
+ }
149
+ return `${receiverText}->${member}()`;
150
+ };
151
+ /**
152
+ * A setter, whose trailing parameters are optional in `lib.es5.d.ts` and
153
+ * default to "keep the current field" in the C++ (each defaults to NaN, which
154
+ * `Date::setFields` reads as "keep" -- v1's own rule).
155
+ *
156
+ * An omitted trailing optional argument never reaches `operation.arguments`
157
+ * at all, so passing exactly what the call passes is what makes
158
+ * `d.setHours(1)` and `d.setHours(1, 2, 3, 4)` both render correctly. The
159
+ * ZERO-argument form is refused: `d.setDate()` is `ToNumber(undefined)`, which
160
+ * is NaN, which invalidates the date -- v1 renders that by defaulting its
161
+ * first parameter to NaN too, but a program that reaches it has almost
162
+ * certainly lost an argument, and this backend does not have the `undefined`
163
+ * operand to prove the call really meant it.
164
+ */
165
+ const setterText = (maximum) => (ctx, receiverText, args, member) => {
166
+ if (args.length === 0) {
167
+ throw createCppEmitBlockedError(`host-invocation:Date.prototype.${member}`, `"Date.prototype.${member}" takes 1 to ${maximum} argument(s); this call passes none` +
168
+ ' -- the argument-less form is ToNumber(undefined), which is an Invalid Date rather than this operation');
169
+ }
170
+ // An argument past the last the clause names is evaluated by the caller
171
+ // and never coerced: 21.4.4.23 step 2 onward reads exactly its own
172
+ // operands. Its operand is already a computed value here, so leaving it
173
+ // out of the frame is the whole of "ignored".
174
+ const received = args.slice(0, maximum);
175
+ // Every ToNumber runs in argument order, before the C++ member sees any
176
+ // of them (steps 2..5 of each setter), and a function call's argument
177
+ // evaluation order is unspecified in C++ -- so the conversions are
178
+ // sequenced as named locals. A frame of plain numbers keeps the direct
179
+ // spelling: nothing there can observe an order.
180
+ const numbers = received.map((argument, index) => numericArgumentText(ctx, argument, member, index));
181
+ if (received.every((argument) => argument.representation.kind === 'scalar' && argument.representation.domain === 'number')) {
182
+ return `${receiverText}->${member}(${numbers.join(', ')})`;
183
+ }
184
+ // The time value is read BEFORE any argument is coerced (each setter's
185
+ // step 3 `Let t be dateObject.[[DateValue]]` precedes its ToNumber steps;
186
+ // test262 `date-value-read-before-tonumber-when-date-is-{valid,invalid}.js`):
187
+ // a `valueOf` that calls `setTime` on this very date is observed by the
188
+ // coercion and forgotten by the setter, whose result derives from `t`. So
189
+ // `t` is read first and put back before the member computes from it -- and
190
+ // an invalid `t` returns NaN WITHOUT writing (step 5 precedes the store),
191
+ // so a time value the coercion installed on an Invalid Date stays. The two
192
+ // full-year setters are the exception the language states (21.4.4.21 step
193
+ // 5: "If t is NaN, set t to +0"): they proceed from the value read first,
194
+ // and the member computes +0 from the NaN put back.
195
+ const locals = numbers.map((number, index) => `const double __gea_n${index} = ${number}; `).join('');
196
+ return (`([&]() -> double { const double __gea_t = ${receiverText}->getTime(); ${locals}` +
197
+ `${member === 'setFullYear' || member === 'setUTCFullYear' ? '' : 'if (std::isnan(__gea_t)) return __gea_t; '}${receiverText}->setTime(__gea_t); ` +
198
+ `return ${receiverText}->${member}(${numbers.map((_, index) => `__gea_n${index}`).join(', ')}); })()`);
199
+ };
200
+ /**
201
+ * `toLocaleString` / `toLocaleDateString` / `toLocaleTimeString` --
202
+ * ECMA-262 21.4.4.38-40.
203
+ *
204
+ * The zero-argument form renders; a call passing `locales`/`options` refuses
205
+ * BY NAME. This runtime carries no ECMA-402 locale data, so honoring them is
206
+ * impossible, and accepting and ignoring them (which is what v1 does, through
207
+ * a variadic template) answers a different format than the program asked for
208
+ * -- a green result concealing a degraded path.
209
+ */
210
+ const localeText = (_ctx, receiverText, args, member) => {
211
+ if (args.length !== 0) {
212
+ throw createCppEmitBlockedError(`host-invocation:Date.prototype.${member}`, `"Date.prototype.${member}" is implemented only in its argument-less form; this call passes ${args.length} ` +
213
+ '(`locales`/`options`), and this runtime carries no ECMA-402 locale data to honor them with -- accepting and ' +
214
+ 'ignoring them would answer a different format than the call asked for');
215
+ }
216
+ return `${receiverText}->${member}()`;
217
+ };
218
+ /**
219
+ * `Date.prototype.toJSON` -- ECMA-262 21.4.4.37.
220
+ *
221
+ * Step 3 answers **null** when the time value is not finite, and step 4
222
+ * answers the ISO string otherwise -- so the member's real result type is
223
+ * `string | null`. `lib.es5.d.ts` declares it `string`, so the checker
224
+ * publishes a bare `string` carrier for every ordinary call, and `std::string`
225
+ * has no null. Rendering it there would answer `""` or `"null"` for an Invalid
226
+ * Date: a wrong answer rather than a missing one.
227
+ *
228
+ * The refusal is therefore conditional on the CARRIER the checker actually
229
+ * published, not on the member's name: a result carried as an optional over a
230
+ * string renders, because that carrier can hold the absence the clause
231
+ * specifies.
232
+ *
233
+ * MEASURED: with stock `lib.es5.d.ts` that branch is unreachable, and every
234
+ * direct `d.toJSON()` refuses. A `const s: string | null = d.toJSON()`
235
+ * annotation does NOT reach it -- the carrier published for the CALL is the
236
+ * declared `string`, and the annotation applies to the binding downstream of
237
+ * it. The branch is kept for a declaration that publishes the clause's real
238
+ * `string | null`, and is written here rather than left implicit so the
239
+ * refusal above stays a statement about the carrier and not about the member.
240
+ *
241
+ * `JSON.stringify(d)` is unaffected and answers node's bytes exactly: it never
242
+ * reaches this renderer, because the null is expressible in the DOCUMENT --
243
+ * `gea_runtime.h`'s own `gea_json_write` overload writes `null` for a
244
+ * non-finite time value.
245
+ */
246
+ const toJsonText = (ctx, receiverText, args, result) => {
247
+ if (args.length > 1) {
248
+ throw createCppEmitBlockedError('host-invocation:Date.prototype.toJSON', `"Date.prototype.toJSON" takes at most one key argument; this call passes ${args.length}`);
249
+ }
250
+ if (result.kind === 'optional' && result.payload.kind === 'string') {
251
+ return `(std::isfinite(${receiverText}->getTime()) ? ${cppTypeOf(result)}(${receiverText}->toISOString()) : ${cppTypeOf(result)}())`;
252
+ }
253
+ void ctx;
254
+ throw createCppEmitBlockedError('host-invocation:Date.prototype.toJSON', `"Date.prototype.toJSON" publishes a "${representationKey(result)}" result, and ECMA-262 21.4.4.37 step 3 answers null for a ` +
255
+ 'non-finite time value. `lib.es5.d.ts` declares the member `string`, which is a carrier with no null, so rendering it ' +
256
+ 'would answer an empty string for an Invalid Date instead of the specified null. A call whose result is carried as an ' +
257
+ 'optional over a string renders');
258
+ };
259
+ /** Every zero-argument getter, each named exactly as `gea::runtime::Date` spells it. */
260
+ export const dateGetters = [
261
+ 'getTime',
262
+ 'valueOf',
263
+ 'getFullYear',
264
+ 'getMonth',
265
+ 'getDate',
266
+ 'getDay',
267
+ 'getHours',
268
+ 'getMinutes',
269
+ 'getSeconds',
270
+ 'getMilliseconds',
271
+ 'getTimezoneOffset',
272
+ 'getUTCFullYear',
273
+ 'getUTCMonth',
274
+ 'getUTCDate',
275
+ 'getUTCDay',
276
+ 'getUTCHours',
277
+ 'getUTCMinutes',
278
+ 'getUTCSeconds',
279
+ 'getUTCMilliseconds'
280
+ ];
281
+ /** The zero-argument string forms. `toLocale*` are not here: they take arguments this backend refuses rather than ignores. */
282
+ export const dateStringForms = ['toISOString', 'toString', 'toDateString', 'toTimeString', 'toUTCString'];
283
+ /** Each setter, with the maximum number of arguments `lib.es5.d.ts` declares for it. */
284
+ export const dateSetters = new Map([
285
+ ['setTime', 1],
286
+ ['setFullYear', 3],
287
+ ['setMonth', 2],
288
+ ['setDate', 1],
289
+ ['setHours', 4],
290
+ ['setMinutes', 3],
291
+ ['setSeconds', 2],
292
+ ['setMilliseconds', 1],
293
+ ['setUTCFullYear', 3],
294
+ ['setUTCMonth', 2],
295
+ ['setUTCDate', 1],
296
+ ['setUTCHours', 4],
297
+ ['setUTCMinutes', 3],
298
+ ['setUTCSeconds', 2],
299
+ ['setUTCMilliseconds', 1]
300
+ ]);
301
+ const dateMethods = new Map([
302
+ ...dateGetters.map((member) => [member, nullaryText]),
303
+ ...dateStringForms.map((member) => [member, nullaryText]),
304
+ ...[...dateSetters].map(([member, maximum]) => [member, setterText(maximum)]),
305
+ ['toLocaleString', localeText],
306
+ ['toLocaleDateString', localeText],
307
+ ['toLocaleTimeString', localeText]
308
+ ]);
309
+ /**
310
+ * The keys `dateMemberText` may defer -- one authority for "is this method
311
+ * implemented", exactly as `stringPrototypeMethods` is for its family.
312
+ *
313
+ * `toJSON` is deferred even though its ordinary carrier refuses: the refusal
314
+ * is a property of the CALL's published result, so it has to be reached at the
315
+ * call to be stated accurately, and refusing at the access would say "not
316
+ * implemented" about something that is.
317
+ */
318
+ export const datePrototypeMethods = new Set([...dateMethods.keys(), 'toJSON']);
319
+ /**
320
+ * `Date.prototype` members this backend states no rendering for, each with the
321
+ * reason -- "not built yet" and "cannot be built without X" are different
322
+ * answers, and only the second tells you what to build.
323
+ */
324
+ export const dateMemberRefusals = new Map([
325
+ [
326
+ 'getYear',
327
+ 'ECMA-262 B.2.3.1, an Annex B legacy member (the year minus 1900). `gea::runtime::Date` could carry it, but ' +
328
+ '`lib.es5.d.ts` does not declare it on `Date` at all, so no ordinary TypeScript program can reach it and there is ' +
329
+ 'nothing here to be right about'
330
+ ],
331
+ ['setYear', 'ECMA-262 B.2.3.2, the Annex B twin of `getYear` and undeclared in `lib.es5.d.ts` for the same reason'],
332
+ [
333
+ 'toGMTString',
334
+ 'ECMA-262 B.2.3.3, an Annex B alias of `toUTCString` that `lib.es5.d.ts` does not declare; write `toUTCString`, which is implemented'
335
+ ],
336
+ [
337
+ 'constructor',
338
+ "reading a Date's constructor yields the `Date` constructor OBJECT, and this backend has no first-class value for a " +
339
+ 'native constructor -- `new Date(...)` is rendered at the construction, not through a materialized callable'
340
+ ]
341
+ ]);
342
+ /**
343
+ * A `[[Get]]` off a Date receiver: defer a claimed method, refuse anything
344
+ * else by name.
345
+ *
346
+ * A NON-constant key answers `null` rather than refusing, so the access falls
347
+ * through to `emit-dynamic-properties.ts`'s native sidecar -- `d[k]` on a Date
348
+ * keeps the native carrier and reads the expando table keyed on this object's
349
+ * own address, which is the sanctioned answer for a native type that needs
350
+ * arbitrary properties (`gea::runtime::regex::Pattern` is the reference
351
+ * implementation, and `gea::runtime::Date` declares the same
352
+ * `gea_readOwnField`/`gea_writeOwnField`/`gea_ownFieldKeys` protocol). Boxing
353
+ * the Date to make such an access compile is the forbidden shortcut.
354
+ */
355
+ /** Whether a Date member read is a deferred `Date.prototype` method read. Stated once; the renderer and the prototype-read walk both ask it. */
356
+ export const deferredDateMethodClaim = (
357
+ // Every caller passes `ctx.staticKeyTexts`; named for that so nobody hands
358
+ // this the render-widened `ctx.constantTexts` by mistake.
359
+ staticKeyTexts, receiver, key) => {
360
+ if (!isDateCarrier(receiver.representation))
361
+ return null;
362
+ const staticKey = staticKeyTexts.get(key.value);
363
+ if (staticKey === undefined || !datePrototypeMethods.has(staticKey))
364
+ return null;
365
+ return { receiverKind: 'date', member: staticKey, receiver: { kind: 'operand', operand: receiver }, receiverElement: null };
366
+ };
367
+ export const dateMemberText = (ctx, receiver, key, result) => {
368
+ const carrier = receiver.representation;
369
+ if (!isDateCarrier(carrier))
370
+ return null;
371
+ // A claim, not a fold: this decides whether the access is a STATIC member at
372
+ // all (falls through to the dynamic sidecar below when it is not), so it
373
+ // must not see a key text `constantTexts` only holds because the render
374
+ // minted it (e.g. a folded `typeof` result reaching here via `d[typeof x]`).
375
+ const staticKey = ctx.staticKeyTexts.get(key.value);
376
+ if (staticKey === undefined)
377
+ return null;
378
+ if (deferredDateMethodClaim(ctx.staticKeyTexts, receiver, key) === null) {
379
+ const stated = dateMemberRefusals.get(staticKey);
380
+ throw createCppEmitBlockedError(`property-access:${representationKey(carrier)}:get:false`, stated !== undefined
381
+ ? `"${staticKey}" is a Date member this backend states no rendering for: ${stated}`
382
+ : `"${staticKey}" is not a member of \`Date.prototype\` this backend implements -- only ` +
383
+ `${[...datePrototypeMethods].sort().join(', ')} are`);
384
+ }
385
+ if (carrier.ownership !== 'shared-refcount') {
386
+ throw createCppEmitBlockedError(`host-invocation:Date.prototype.${staticKey}`, `a Date receiver carries ownership "${carrier.ownership}"; a Date is a MUTABLE object whose setters must be observable ` +
387
+ 'through every reference to it, so this backend renders member calls only through the shared identity');
388
+ }
389
+ if (result === null) {
390
+ throw createCppEmitBlockedError(`host-invocation:Date.prototype.${staticKey}`, `"${staticKey}" is a Date.prototype method, and this access publishes no value for its call to consume`);
391
+ }
392
+ // The read itself is recorded by the prototype-read walk, which asked the
393
+ // same claim before this body rendered.
394
+ return '';
395
+ };
396
+ /** The call text for a deferred `Date.prototype` read. */
397
+ export const dateCallText = (ctx, member, receiverText, operation) => {
398
+ if (member === 'toJSON') {
399
+ // A call with no published result cannot be asked what carrier it means to
400
+ // hold the ISO string in, and `toJSON`'s whole refusal is about that
401
+ // carrier (see `toJsonText`), so an unpublished one refuses rather than
402
+ // being guessed at.
403
+ if (!operation.result) {
404
+ throw createCppEmitBlockedError('host-invocation:Date.prototype.toJSON', '"Date.prototype.toJSON" publishes no result, and its rendering is decided by the result carrier');
405
+ }
406
+ return toJsonText(ctx, receiverText, operation.arguments, operation.result.representation);
407
+ }
408
+ const render = dateMethods.get(member);
409
+ if (!render) {
410
+ throw createCppEmitBlockedError(`host-invocation:Date.prototype.${member}`, `"${member}" was recorded as a deferred Date.prototype read but this file renders no call for it`);
411
+ }
412
+ return render(ctx, receiverText, operation.arguments, member);
413
+ };
414
+ /**
415
+ * `new Date(...)` -- ECMA-262 21.4.2.1.
416
+ *
417
+ * The fourth member of `emit-callable.ts`'s `emitTypedArrayConstruct` /
418
+ * `emitArrayConstruct` / `emitKeyedCollectionConstruct` family, and here for
419
+ * the identical structural reason: `DateConstructor`'s checker overload set is
420
+ * `new ()`, `new (value: number | string)`, `new (value: number | string |
421
+ * Date)` and `new (year, monthIndex, ...)`, which have no single physical
422
+ * frame, so `representation/host-abi.ts`'s `widestSubsumingAbi` correctly
423
+ * refuses to join them and `derive.ts` leaves `.construct` null. This reads
424
+ * the construction's own arguments instead.
425
+ *
426
+ * Four forms render, one per constructor `gea::runtime::Date` declares:
427
+ * zero arguments (now), one number (a time value), one string (parsed), and
428
+ * two-to-seven numbers (local calendar components). `new Date(someDate)` --
429
+ * the copy overload -- is refused BY NAME rather than rendered as a copy: it
430
+ * is `ToPrimitive(value)` per 21.4.2.1 step 4, and a shared_ptr copy would
431
+ * alias the ORIGINAL, so a mutation through one would be observable through
432
+ * the other. That is a silently different program, not a missing one.
433
+ */
434
+ export const emitDateConstruct = (ctx, lines, operation, result) => {
435
+ if (result.ownership !== 'shared-refcount') {
436
+ throw createCppEmitBlockedError('host-invocation:Date.construct', `a Date allocation carries ownership "${result.ownership}", but this emitter only spells std::make_shared for "shared-refcount"`);
437
+ }
438
+ const name = defineValue(ctx, operation.result);
439
+ const args = operation.arguments;
440
+ if (args.length === 0) {
441
+ lines.push(`${name} = gea::makeRef<${cppDateType}>();`);
442
+ return;
443
+ }
444
+ const first = args[0];
445
+ if (args.length === 1 && first) {
446
+ const carrier = first.representation;
447
+ if (carrier.kind === 'string') {
448
+ lines.push(`${name} = gea::makeRef<${cppDateType}>(${operandText(ctx, first)});`);
449
+ return;
450
+ }
451
+ if (carrier.kind === 'scalar' && carrier.domain === 'number') {
452
+ lines.push(`${name} = gea::makeRef<${cppDateType}>(${operandText(ctx, first)});`);
453
+ return;
454
+ }
455
+ throw createCppEmitBlockedError('host-invocation:Date.construct', `constructs a Date from a single "${representationKey(carrier)}" argument; ECMA-262 21.4.2.1 step 4 applies ` +
456
+ 'ToPrimitive to it, and only a number (a time value) and a string (parsed) are rendered here -- `new Date(otherDate)` ' +
457
+ 'in particular is refused rather than rendered as a pointer copy, which would ALIAS the original instead of copying it');
458
+ }
459
+ if (args.length > 7) {
460
+ throw createCppEmitBlockedError('host-invocation:Date.construct', `constructs a Date from ${args.length} arguments; ECMA-262 21.4.2.1 declares at most seven (year, monthIndex, date, hours, minutes, seconds, ms)`);
461
+ }
462
+ const components = args.map((argument, index) => {
463
+ const carrier = argument.representation;
464
+ if (carrier.kind !== 'scalar' || carrier.domain !== 'number') {
465
+ throw createCppEmitBlockedError('host-invocation:Date.construct', `constructs a Date whose component ${index} carries "${representationKey(carrier)}", not a number scalar; ` +
466
+ 'the calendar-component form of ECMA-262 21.4.2.1 applies ToNumber to each, and this backend states no such conversion here');
467
+ }
468
+ return operandText(ctx, argument);
469
+ });
470
+ lines.push(`${name} = gea::makeRef<${cppDateType}>(${components.join(', ')});`);
471
+ };
472
+ /**
473
+ * `Date.parse(s)` and `Date.UTC(...)` -- ECMA-262 21.4.3.2 / 21.4.3.4.
474
+ *
475
+ * Registered as the `DateConstructor` protocol's call-site renderer
476
+ * (`emit-host-invoke.ts`'s `hostMemberRenderers`), for the reason that
477
+ * mechanism exists: `Date.UTC` takes one to seven arguments, and the fixed
478
+ * `arity` a `hostMembers` template row states cannot express that.
479
+ *
480
+ * `Date.now()` is deliberately NOT here. It is a real readable
481
+ * `gea::CallableObject<double()>` in `gea_runtime.h`, so its row stays a
482
+ * `property` and its call goes through that callable carrier -- rendering it
483
+ * as a free function here would be a second spelling of a member that already
484
+ * has one.
485
+ */
486
+ export const dateConstructorCallText = (ctx, member, operation) => {
487
+ if (member === 'parse') {
488
+ const source = operation.arguments[0];
489
+ if (operation.arguments.length !== 1 || !source) {
490
+ throw createCppEmitBlockedError('host-member-call:DateConstructor.parse', `"Date.parse" takes one string argument (ECMA-262 21.4.3.2); this call passes ${operation.arguments.length}`);
491
+ }
492
+ if (source.representation.kind !== 'string') {
493
+ throw createCppEmitBlockedError('host-member-call:DateConstructor.parse', `"Date.parse" argument 0 carries "${representationKey(source.representation)}", not a string; 21.4.3.2 applies ToString to it, ` +
494
+ 'and this backend states no such conversion here');
495
+ }
496
+ return `${cppDateType}::parse(${operandText(ctx, source)})`;
497
+ }
498
+ if (member === 'UTC') {
499
+ const args = operation.arguments;
500
+ if (args.length === 0 || args.length > 7) {
501
+ throw createCppEmitBlockedError('host-member-call:DateConstructor.UTC', `"Date.UTC" takes one to seven arguments (ECMA-262 21.4.3.4); this call passes ${args.length}`);
502
+ }
503
+ const components = args.map((argument, index) => {
504
+ const carrier = argument.representation;
505
+ if (carrier.kind !== 'scalar' || carrier.domain !== 'number') {
506
+ throw createCppEmitBlockedError('host-member-call:DateConstructor.UTC', `"Date.UTC" argument ${index} carries "${representationKey(carrier)}", not a number scalar; 21.4.3.4 applies ToNumber to each, ` +
507
+ 'and this backend states no such conversion here');
508
+ }
509
+ return operandText(ctx, argument);
510
+ });
511
+ return `${cppDateType}::UTC(${components.join(', ')})`;
512
+ }
513
+ throw createCppEmitBlockedError(`host-member-call:DateConstructor.${member}`, `"DateConstructor.${member}" is claimed with a call-site spelling, and only "parse" and "UTC" have one here ` +
514
+ '-- `now` is a readable callable and renders through its own carrier');
515
+ };
@@ -0,0 +1,13 @@
1
+ import type { IrOperand } from '../../../ir/model.js';
2
+ import type { IrValueId } from '../../../identity/ids.js';
3
+ import type { EmitContext, PrototypeMethodRead } from '../emit-context.js';
4
+ export declare const deferredNativeErrorMethodClaim: (staticKeyTexts: ReadonlyMap<IrValueId, string>, receiver: IrOperand, key: IrOperand) => PrototypeMethodRead | null;
5
+ /**
6
+ * The read half: an Error's `toString` produces no C++ of its own and fuses
7
+ * with the call that follows, exactly as a Date's or a string's method read
8
+ * does. A claimed read that publishes no value has no call to fuse WITH, so
9
+ * it refuses by name rather than rendering nothing into a cell nobody wrote.
10
+ */
11
+ export declare const nativeErrorMemberText: (ctx: EmitContext, receiver: IrOperand, key: IrOperand, result: IrValueId | null) => string | null;
12
+ /** The call half, fused with the read above. */
13
+ export declare const nativeErrorCallText: (member: string, receiverText: string) => string;