@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,671 @@
1
+ import { isNativeCallableCarrier, ownershipOfGeneratedCarrier, propertyKeyText } from '../emit-dynamic-properties.js';
2
+ import { intrinsicMemberValueOf } from './emit-host-object.js';
3
+ import { objectShapePrototypeMethods } from '../../../projection/callee.js';
4
+ import { representationKey } from '../../../representation/model.js';
5
+ import { createCppEmitBlockedError, operandText } from '../emit-context.js';
6
+ import { classMemberOf, lazyArrowFieldPlanOf, lazyMaterializedFieldText } from '../class-layout.js';
7
+ import { alignedValueText, widenedStoreText } from '../emit-narrowing.js';
8
+ import { memberAccessOperator } from '../emit-carrier-members.js';
9
+ import { declaredFieldRepresentationOf, enumerationOrdered, recordFieldsOfShape } from '../records.js';
10
+ import { cppRecordFieldAttributesName, cppRecordFieldKeyIsSymbol, cppRecordFieldName, cppRecordFieldPresenceName, cppStringLiteral, cppTypeOf } from '../types.js';
11
+ /**
12
+ * The object primitives every `Object` static is defined in terms of.
13
+ *
14
+ * ECMA-262 does not define ten independent operations. It defines three --
15
+ * `[[OwnPropertyKeys]]` filtered by `[[Enumerable]]`, `Get(o, key)` and
16
+ * `Set(o, key, v)` -- and then writes each static as a loop over them.
17
+ * `Object.assign` is the clearest case (7.3.25 is literally "for each own
18
+ * enumerable key of source: Set(target, key, Get(source, key))"), but
19
+ * `Object.keys`, `values`, `entries`, `hasOwn` and `fromEntries` are the same
20
+ * three in different arrangements, and so are `{...spread}`, rest
21
+ * destructuring, `for...in` and `JSON.stringify` of a plain object.
22
+ *
23
+ * So this file states the three once and `emit-host-object.ts` spells each
24
+ * member as the loop it is. The alternative -- which is what was here before
25
+ * -- is ten renderers that each rediscover the receiver question, agree on the
26
+ * refusal (`refuseObjectCarrier` was already shared) and disagree on
27
+ * everything else: `keys` and `values` grew a static arm, `entries`, `assign`
28
+ * and `defineProperty` refused every known shape outright, and the refusal
29
+ * they printed explained enumeration even when the member was not enumerating
30
+ * anything. `Object.assign(this, opts)` in hono's own constructor refused with
31
+ * "a class instance's own enumerable keys are the fields its constructor
32
+ * actually assigned" -- a true sentence about the SOURCE position, printed for
33
+ * a failure in the TARGET position, where nothing enumerates the class at all.
34
+ *
35
+ * ## The two arms
36
+ *
37
+ * Each primitive has a static arm and a dynamic one, and neither is the
38
+ * other's fallback.
39
+ *
40
+ * The static arm renders against a carrier whose fields the checker knows. The
41
+ * key list is a compile-time constant, `Get` is a struct member read and `Set`
42
+ * is a struct member store -- the loop is unrolled at emission because its
43
+ * bounds are known, which is the same move `Object.values` already made when
44
+ * it emitted a braced `std::vector` rather than a runtime walk.
45
+ *
46
+ * The dynamic arm renders against a value the program itself declared `any`.
47
+ * There the loop belongs to the runtime, because its bounds are only known
48
+ * there, and `gea::host::ObjectConstructor` states each member as one call.
49
+ *
50
+ * ## The third arm, which is not this file's
51
+ *
52
+ * Every struct this backend emits also carries the three primitives as
53
+ * methods: `gea_ownFieldKeys`, `gea_readOwnField` and `gea_writeOwnField`
54
+ * (`records.ts`'s `renderFieldDispatcher`). That is the same three operations
55
+ * for the case where the OBJECT is statically known and the KEY is not, and it
56
+ * shares this file's enumeration order through `enumerationOrdered` so the two
57
+ * cannot answer a different key sequence for one struct. Nothing here calls
58
+ * it: when the key is known too, a direct member access is what the dispatcher
59
+ * would find anyway, without the round trip through `gea::Value` it takes to
60
+ * carry a field past a `PropertyKey`.
61
+ */
62
+ /** Whether a carrier is the genuine dynamic boundary these renderers walk a real table for. */
63
+ export const isDynamicCarrier = (representation) => representation.kind === 'dynamic';
64
+ export const refuseObjectCarrier = (member, representation, detail) => {
65
+ // `Object.*` renders through this file's own [[OwnPropertyKeys]]/Get/Set
66
+ // primitives, never through the (unreached) `own-property-keys` IR op, so
67
+ // whether a carrier admits one of these statics is a target RULE over the
68
+ // call -- the same shape as Atomics/JSON/Reflect's own `host-member-call`.
69
+ throw createCppEmitBlockedError(`host-member-call:ObjectConstructor.${member}`, `"Object.${member}" of a "${representationKey(representation)}" carrier has no rendering: ${detail}`);
70
+ };
71
+ /**
72
+ * A known shape's own field list, whichever way the carrier names it.
73
+ *
74
+ * A `record` carries its fields inline; a `native-record-ref` and a
75
+ * `class-ref` carry a `shapeId` and nothing else (`representation/model.ts`),
76
+ * so their list comes from `recordFieldsOfShape` -- the SAME authority
77
+ * `cppRecordDeclarations` builds the struct body from. That identity is the
78
+ * point: the C++ struct's members and the key list this enumerates have to be
79
+ * one answer, and asking the deriver is what makes them one rather than two
80
+ * that agree today.
81
+ *
82
+ * `native !== null` returns nothing on purpose. A host-stated struct's own
83
+ * enumerable properties are the host's to define -- this compiler emits no
84
+ * definition for it and cannot know whether the C++ members it was told about
85
+ * are the JavaScript object's own keys -- so it refuses rather than reporting
86
+ * a member list as a key list.
87
+ */
88
+ const knownShapeFieldsOf = (ctx, representation) => {
89
+ if (representation.kind === 'record' || representation.kind === 'record-with-index')
90
+ return representation.fields;
91
+ if (representation.kind === 'class-ref')
92
+ return recordFieldsOfShape(ctx.deriver, representation.shapeId);
93
+ if (representation.kind !== 'native-record-ref' || representation.native !== null)
94
+ return null;
95
+ return recordFieldsOfShape(ctx.deriver, representation.shapeId);
96
+ };
97
+ /**
98
+ * The refusal every member shares for a receiver that is neither a known shape
99
+ * nor a declared dynamic value.
100
+ *
101
+ * Stated once so the ten members cannot drift into ten different explanations
102
+ * of the same fact, and phrased as what is missing rather than as what was
103
+ * asked -- a `dictionary` receiver is a gap in the container, not in the call.
104
+ *
105
+ * `position` names which of the call's objects failed, because these members
106
+ * take more than one and a refusal that does not say which is a report nobody
107
+ * can act on: `Object.assign(target, source)` refusing "of a class-ref
108
+ * carrier" left a reader to guess whether the class was the thing being
109
+ * enumerated or the thing being written into, and those have different cures.
110
+ */
111
+ export const refuseObjectReceiver = (member, representation, position) => {
112
+ const at = position === '' ? '' : ` (the ${position})`;
113
+ // Every `dictionary` -- string-, number- and symbol-keyed alike -- gets a
114
+ // view of its own from `objectViewFrom` and never reaches this function; a
115
+ // member with no arm written for one refuses through `refuseDictionaryArm`
116
+ // instead, which is the "sound but unwritten" channel and not this one.
117
+ if (representation.kind === 'record-with-index') {
118
+ return refuseObjectCarrier(member, representation, `the shape${at} carries named fields AND an index-signature sidecar, so its own keys are two lists that have to be ` +
119
+ 'interleaved in one creation order -- which neither half records, and picking either order would be a guess');
120
+ }
121
+ if (representation.kind === 'native-record-ref' && representation.native !== null) {
122
+ return refuseObjectCarrier(member, representation, `the struct${at} is the host's own ("${representation.native}"), so which of its C++ members are the JavaScript ` +
123
+ "object's own enumerable keys is the host's to state and this compiler emits no definition for it");
124
+ }
125
+ if (representation.kind === 'native-record-ref' || representation.kind === 'class-ref') {
126
+ return refuseObjectCarrier(member, representation, `the shape "${representation.shapeId}"${at} derives no record layout, so there is no field list to enumerate -- ` +
127
+ 'the carrier it does derive is what says why');
128
+ }
129
+ if (isNativeCallableCarrier(representation.kind)) {
130
+ // A Function object DOES have an own-property table -- its identity's, the
131
+ // one `callableDynamicGet`/`callableDynamicSet` already read and write --
132
+ // so this is `refuseDictionaryArm`'s kind of gap: the carrier can carry the
133
+ // operation and this member's arm for it is missing. Enumerating one is the
134
+ // half nobody has written: `name`, `length` and `prototype` are installed
135
+ // lazily by the runtime rather than being present from the start, so a key
136
+ // list taken off the table today would report a different set depending on
137
+ // what the program had already read.
138
+ return refuseObjectCarrier(member, representation, `a Function object's own properties${at} live in its identity-owned table, which "Object.assign" writes into and this ` +
139
+ 'member has no arm for -- enumerating one additionally needs the lazily installed name/length/prototype facts to be ' +
140
+ 'materialised first, which nothing here does');
141
+ }
142
+ return refuseObjectCarrier(member, representation, `only a record (whose fields the checker already knows) and a value the program itself declared dynamic have an ` +
143
+ `own-property enumeration; nothing else${at} carries one, and inventing one would answer for a value that has no properties at all`);
144
+ };
145
+ /** The caller supplies the value produced by its certified conversion. */
146
+ export const setOwnCallableText = (receiver, key, value) => `gea::callableDynamicSet(${receiver}, gea::PropertyKey::string(${cppStringLiteral(key)}), ${value});`;
147
+ /**
148
+ * The receiver question, answered once.
149
+ *
150
+ * Every member of this family asks it and none of them may answer it
151
+ * differently, which is the reason this returns a view rather than a boolean:
152
+ * a member that tested `isDynamic` itself and then re-derived the field list
153
+ * is two answers to one question, and that is how `assign` came to refuse a
154
+ * shape `keys` renders.
155
+ */
156
+ export const objectViewOf = (ctx, member, operand, position) => objectViewFrom(ctx, member, operand.representation, operandText(ctx, operand), position);
157
+ /**
158
+ * The same question asked of a carrier and a spelling rather than an operand,
159
+ * for the one caller that has neither: a TAGGED UNION receiver is enumerated
160
+ * arm by arm (`emit-host-object.ts`'s `overCarrier`), and an arm is a
161
+ * representation plus a `get<N>()` text, never an operand of its own.
162
+ */
163
+ export const objectViewFrom = (ctx, member, representation, receiver, position) => {
164
+ // `Object.getOwnPropertyDescriptor` (and every other call that mints
165
+ // `T | undefined`) hands its own result STRAIGHT to a later `Object.*`
166
+ // call -- `Object.getOwnPropertyNames(d)`, `hasOwnProperty.call(d, ...)` --
167
+ // with no narrowing in between, since TypeScript's own ambient signatures
168
+ // type the parameter as a bare object and `@ts-nocheck` (or a real type
169
+ // error nobody who writes this pattern actually hits, because the value is
170
+ // never really absent at that call site) suppresses the mismatch. A
171
+ // property ACCESS already unwraps this the same way (`emit-context.ts`'s
172
+ // `assertPresence`); this is that identical deref-or-throw, spelled as one
173
+ // EXPRESSION rather than a statement, because this function hands back a
174
+ // receiver TEXT with no statement list to push into. Recursing after the
175
+ // unwrap means every arm below -- known, dynamic, dictionary -- sees the
176
+ // PAYLOAD's own representation, never the optional wrapper.
177
+ if (representation.kind === 'optional') {
178
+ const payload = representation.payload;
179
+ const unwrapped = `(${receiver}.has_value() ? *${receiver} : gea::host::throwGetPropertyOfNullish<${cppTypeOf(payload)}>())`;
180
+ return objectViewFrom(ctx, member, payload, unwrapped, position);
181
+ }
182
+ if (isDynamicCarrier(representation))
183
+ return { kind: 'dynamic', receiver };
184
+ if (representation.kind === 'dictionary') {
185
+ // Dereferenced here, once: the runtime overloads take the table by
186
+ // reference and a `shared-refcount` dictionary is held behind a `gea::Ref`.
187
+ //
188
+ // A NUMBER-keyed table is admitted here too, alongside string and symbol:
189
+ // `gea::NumericDictionary<V>` stores each entry under its canonical
190
+ // `Number::toString` spelling (`canonicalKey`, gea_runtime.h) the moment it
191
+ // is written, via the SAME spec-correct `gea::host::detail::toString(double)`
192
+ // this backend already uses for template-literal number interpolation --
193
+ // 1e21, -0 and NaN included. So its own keys are exactly as sound to
194
+ // enumerate as a string-keyed table's; there is no unrenderable spelling
195
+ // left to refuse. What each MEMBER still needs is its own runtime overload
196
+ // over `NumericDictionary<V>` (`ownEnumerableKeysText`/`valuesOfView`/
197
+ // `entriesOfView` below) -- a member with none yet refuses through
198
+ // `refuseDictionaryArm`, the "sound but unwritten" channel, rather than
199
+ // through this file no longer being able to see the table at all.
200
+ const table = memberAccessOperator(representation.ownership) === '->' ? `(*${receiver})` : receiver;
201
+ return { kind: 'dictionary', representation, receiver: table, value: representation.value };
202
+ }
203
+ const fields = knownShapeFieldsOf(ctx, representation);
204
+ if (fields === null)
205
+ return refuseObjectReceiver(member, representation, position);
206
+ // Ownership rather than carrier kind decides `.` against `->`: the three
207
+ // kinds `knownShapeFieldsOf` admits are all struct members, and only how the
208
+ // struct is held differs between them.
209
+ return { kind: 'known', representation, fields, receiver, accessor: memberAccessOperator(ownershipOfGeneratedCarrier(representation)) };
210
+ };
211
+ /**
212
+ * The refusal for a member that HAS a sound dictionary rendering nobody has
213
+ * written yet, stated by name.
214
+ *
215
+ * Kept apart from `refuseObjectReceiver` for the reason this file's header
216
+ * gives about `freeze` and `defineProperty`: "this carrier cannot be
217
+ * enumerated" and "this carrier can, and this member's arm for it is missing"
218
+ * are different facts with different cures, and reporting the second as the
219
+ * first sends a reader to the wrong one.
220
+ */
221
+ export const refuseDictionaryArm = (member, view, detail) => refuseObjectCarrier(member, view.representation, `the receiver is a dictionary, whose own keys this backend CAN enumerate -- ${detail}`);
222
+ /** The C++ that names one field of a known view, with no unwrapping of any kind. */
223
+ const fieldText = (view, field) => `${view.receiver}${view.accessor}${cppRecordFieldName(field.key)}`;
224
+ /**
225
+ * PRIMITIVE 1a -- `[[Enumerable]]`: whether this field is an own key at all,
226
+ * as C++ that answers at run time, or `null` when it statically is one.
227
+ *
228
+ * A field the declaration makes OPTIONAL is not statically present: `{ a: 1 }`
229
+ * typed `{ a: number; b?: number }` has one own key, not two, and treating a
230
+ * fixed list of both as the key set would report a property that is not there.
231
+ * So an optional field answers from the independent presence bit emitted next
232
+ * to its value. This remains exact for `undefined`, `null`, and dynamic value
233
+ * carriers because none of those values doubles as property absence.
234
+ */
235
+ export const ownKeyPresenceText = (member, view, field) => {
236
+ void member;
237
+ // A required TypeScript member starts present, but is still an ordinary
238
+ // configurable data property until its descriptor says otherwise. Every
239
+ // generated fixed field consequently has a physical bit; returning `null`
240
+ // here would make a deleted required key reappear in Object.keys/hasOwn.
241
+ return `${view.receiver}${view.accessor}${cppRecordFieldPresenceName(field.key)}`;
242
+ };
243
+ /**
244
+ * PRIMITIVE 1 -- `[[OwnPropertyKeys]]`, filtered to own enumerable string keys.
245
+ *
246
+ * ECMA-262 10.1.11.1 order, from the same authority the emitted struct's own
247
+ * `gea_ownFieldKeys` uses (`enumerationOrdered`) -- two lists of one object's
248
+ * own keys that could disagree is exactly the shape this compiler keeps
249
+ * finding. A view whose fields are all statically present renders as a flat
250
+ * constant; one with an optional field renders as the push loop, with the
251
+ * optionals IN PLACE rather than appended after the required ones, since a
252
+ * present optional occupies its own creation position.
253
+ */
254
+ /** A known view's fields in enumeration order -- the one place that order is decided, so a member's keys and its values cannot disagree about it. */
255
+ export const ownKeyFields = (view) => enumerationOrdered(view.fields, (field) => field.key);
256
+ export const ownEnumerableKeysText = (member, view, dynamicCall) => {
257
+ if (view.kind === 'dynamic')
258
+ return `gea::host::ObjectConstructor::${dynamicCall}(${view.receiver})`;
259
+ // `keys` (7.3.23) and `getOwnPropertyNames` (10.1.11) are two calls over a
260
+ // dictionary, and were one until the table could hold a non-enumerable key.
261
+ // Their whole difference IS such a key, so while `Object.defineProperty` on
262
+ // a dictionary could not retain one the two sequences were identical and
263
+ // this arm answered both with the enumerable list -- correct then, and a
264
+ // silently short `getOwnPropertyNames` the moment a table has one. Every
265
+ // other carrier in `keysText` already splits on the member for this reason.
266
+ if (view.kind === 'dictionary') {
267
+ // Object.keys/getOwnPropertyNames are string-only. A SymbolDictionary has
268
+ // real own keys, but none in this projection; returning an empty native
269
+ // array preserves them for symbol-aware operations instead of converting
270
+ // their descriptions into strings.
271
+ if (view.representation.key === 'symbol')
272
+ return 'gea::host::ObjectConstructor::staticKeys({})';
273
+ return `gea::host::ObjectConstructor::${member === 'keys' ? 'keysOf' : 'ownPropertyNamesOf'}(${view.receiver})`;
274
+ }
275
+ const ownership = ownershipOfGeneratedCarrier(view.representation);
276
+ // Every generated shared object can acquire own properties through a
277
+ // dynamic view. The runtime owns the complete enumeration because it joins
278
+ // the struct dispatcher with that object's identity-keyed expando table;
279
+ // emitting only the compile-time field list would make Object.keys disagree
280
+ // with the reads and writes that already use the same sidecar.
281
+ if (ownership === 'shared-refcount') {
282
+ if (member === 'getOwnPropertyNames') {
283
+ // This is intentionally a runtime-owned merge: generated slots and the
284
+ // identity sidecar must be globally ordered before symbols are filtered.
285
+ return `gea::host::ObjectConstructor::staticKeys(gea::nativeOwnPropertyNames(${view.receiver}))`;
286
+ }
287
+ return `gea::host::ObjectConstructor::staticKeys(gea::nativeDynamicKeys(${view.receiver}))`;
288
+ }
289
+ const ordered = ownKeyFields(view);
290
+ const presences = ordered.map((field) => {
291
+ const present = ownKeyPresenceText(member, view, field);
292
+ const enumerable = `${view.receiver}${view.accessor}${cppRecordFieldAttributesName(field.key)}.enumerable`;
293
+ return { field, presence: present === null ? enumerable : `(${present} && ${enumerable})` };
294
+ });
295
+ const pushes = presences.map(({ field, presence }) => {
296
+ const literal = cppStringLiteral(field.key);
297
+ const push = `__gea_keys.push_back(${literal});`;
298
+ return `if (${presence}) ${push}`;
299
+ });
300
+ return `([&]() { std::vector<std::string> __gea_keys; ${pushes.join(' ')} return gea::host::ObjectConstructor::staticKeys(__gea_keys); })()`;
301
+ };
302
+ /**
303
+ * PRIMITIVE 2 -- `Get(o, key)` for one own key of a known view.
304
+ *
305
+ * Presence is stored separately, so the field's value carrier comes through
306
+ * unchanged. In particular, a present `undefined` stays `undefined`; it is not
307
+ * unwrapped or confused with the missing-key state.
308
+ *
309
+ * There is no dynamic arm. A per-key get on a value the runtime owns is a
310
+ * `gea::runtime::object::get` call, and no member here needs one: the dynamic
311
+ * arm of every member in this family expresses its whole loop as a single
312
+ * runtime call, so the iteration and the get stay on the same side.
313
+ */
314
+ export const getOwnValue = (ctx, view, field) => {
315
+ const raw = fieldText(view, field);
316
+ // A qualifying arrow-function class field's storage starts empty
317
+ // (`class-layout.ts`'s `censusLazyArrowFields`) until something reads it.
318
+ // `emit-properties.ts`'s ordinary property `get` is the choke point for a
319
+ // normal access, but this function is the SAME choke point for every
320
+ // `Object.*` static built out of it (`values`, `entries`, `assign`, spread,
321
+ // `getOwnPropertyDescriptor`'s literal-key arm) -- each of those reads this
322
+ // field's CURRENT value too, through this door instead, and would otherwise
323
+ // hand back the empty sentinel a fresh instance starts with rather than the
324
+ // real callable. `classMemberOf`'s owner is the DECLARING class, exactly as
325
+ // `emit-properties.ts`'s own version of this lookup requires for an
326
+ // inherited field.
327
+ const site = view.representation.kind === 'class-ref' ? classMemberOf(ctx.classes, view.representation.declaration, field.key) : null;
328
+ const plan = site?.kind === 'field' ? lazyArrowFieldPlanOf(ctx.classes, site.owner, field.key) : null;
329
+ const text = plan === null ? raw : lazyMaterializedFieldText(view.receiver, view.accessor, field.key, plan);
330
+ return { text, representation: field.value };
331
+ };
332
+ /**
333
+ * Why a known target has no home for a key, in the target's own terms.
334
+ *
335
+ * A class says more about this than a record can: `classMemberOf` distinguishes
336
+ * a key that resolves to an accessor (real storage exists, behind a call this
337
+ * does not make), a method (on the prototype, never an own property), a class
338
+ * whose members nothing published (a gap upstream, not a missing property) and
339
+ * a key the chain genuinely does not declare. Collapsing those into one
340
+ * "no such field" would send three different defects to the same wrong cure.
341
+ */
342
+ const missingTargetKeyDetail = (ctx, view, key) => {
343
+ if (view.representation.kind !== 'class-ref') {
344
+ return (`the target declares no field "${key}", and ECMAScript's Set would CREATE an own property there -- a struct ` +
345
+ 'whose members are fixed at compile time has nowhere to put one, which is what a dynamic-property sidecar exists for');
346
+ }
347
+ const site = classMemberOf(ctx.classes, view.representation.declaration, key);
348
+ if (site === null) {
349
+ return (`class ${view.representation.declaration} declares no "${key}" anywhere on its chain, and ECMAScript's Set ` +
350
+ 'would CREATE an own property there -- which a fixed-layout struct can only answer through a dynamic-property sidecar');
351
+ }
352
+ if (site.kind === 'accessor') {
353
+ return (`"${key}" is an accessor on class ${site.owner}, so writing it is a CALL rather than a store, and this renderer ` +
354
+ 'states the store only -- routing it through the setter is a real feature and not this one');
355
+ }
356
+ if (site.kind === 'method') {
357
+ return (`"${key}" is a method on class ${site.owner}'s prototype, which is not an own property of the instance at all, ` +
358
+ 'so a store into it would install a shadowing own field the language never had');
359
+ }
360
+ return (`class ${site.owner} published no members, so whether it declares "${key}" is unknown here -- the gap is in what ` +
361
+ 'reached this stage, not in the program');
362
+ };
363
+ /**
364
+ * PRIMITIVE 3 -- `Set(o, key, v)` into one own key of a known view.
365
+ *
366
+ * The store's own carrier comes from `declaredFieldRepresentationOf`, the one
367
+ * authority `emitFieldStore` and `emitFieldInits` already ask, so this cannot
368
+ * become a second opinion about what a field holds; and the value is
369
+ * reconciled against it through `convertedValueText`, the same one an ordinary
370
+ * store uses. A pair with no installed conversion refuses by naming both
371
+ * carriers rather than assigning across and leaving clang to reject it.
372
+ *
373
+ * There is no dynamic arm here either, and for the same reason as `Get`.
374
+ */
375
+ export const setOwnText = (ctx, member, view, key, value) => {
376
+ const held = declaredFieldRepresentationOf(ctx.deriver, view.representation, key, ctx.classes);
377
+ if (held === null) {
378
+ const ownership = ownershipOfGeneratedCarrier(view.representation);
379
+ if (ownership === 'shared-refcount') {
380
+ const boxed = widenedStoreText({ kind: 'dynamic', reason: 'declared-any-never-narrowed' }, value.representation, value.text);
381
+ if (boxed !== null) {
382
+ return `gea::nativeDynamicSet(${view.receiver}, gea::PropertyKey::string(${cppStringLiteral(key)}), ${boxed});`;
383
+ }
384
+ }
385
+ throw createCppEmitBlockedError(`property-access:${representationKey(view.representation)}:set:false`, `"Object.${member}" cannot store "${key}": ${missingTargetKeyDetail(ctx, view, key)}`);
386
+ }
387
+ const converted = alignedValueText(ctx, 'host/object-protocol.ts:468', value.representation, held, value.text);
388
+ if (converted === null) {
389
+ throw createCppEmitBlockedError(`conversion:${representationKey(value.representation)}->${representationKey(held)}`, `"Object.${member}" would store a "${representationKey(value.representation)}" into the field "${key}", which is held ` +
390
+ `as "${representationKey(held)}", and no installed conversion performs that -- the two carriers are a disagreement ` +
391
+ 'upstream of this call, not something a store may paper over');
392
+ }
393
+ const write = `${view.receiver}${view.accessor}${cppRecordFieldName(key)} = ${converted};`;
394
+ const field = view.fields.find((candidate) => candidate.key === key);
395
+ const writes = field ? `${write} ${view.receiver}${view.accessor}${cppRecordFieldPresenceName(key)} = true;` : write;
396
+ const ownership = ownershipOfGeneratedCarrier(view.representation);
397
+ if (ownership !== 'shared-refcount')
398
+ return writes;
399
+ const present = field === undefined ? 'false' : `${view.receiver}${view.accessor}${cppRecordFieldPresenceName(key)}`;
400
+ const writable = field === undefined ? 'false' : `${view.receiver}${view.accessor}${cppRecordFieldAttributesName(key)}.writable`;
401
+ return `if ((${present} ? (${writable} && gea::nativeOwnFieldsWritable(${view.receiver})) : gea::nativeIsExtensible(${view.receiver}))) { ${writes} }`;
402
+ };
403
+ /**
404
+ * `hasOwnProperty`/`propertyIsEnumerable` reached as INSTANCE methods off a
405
+ * known-shape receiver (`record`/`native-record-ref`/`class-ref`) -- the
406
+ * method-call spelling of the identical question `Object.hasOwn` already
407
+ * answers off the same layout (`hasOwnText` above).
408
+ *
409
+ * Left unclaimed, the checker still resolves `{ a: 1 }.hasOwnProperty` (every
410
+ * object type structurally carries `Object.prototype`), and the record's own
411
+ * field list has no member of that name -- so the generic dynamic-property
412
+ * sidecar (`emit-dynamic-properties.ts`'s `nativeSidecarGetText`) answered it
413
+ * instead, BOXING a statically known fact into a `gea::Value`-carried
414
+ * `CallableObject` purely to call it once. That is the forbidden shortcut the
415
+ * "no boxing" rule names: the record's own layout is a typed fact, and it has
416
+ * no business inside a box just because the member that reads it is an
417
+ * ambient `Object.prototype` declaration rather than one the record's own
418
+ * shape states.
419
+ *
420
+ * Deferred exactly the way `dictionaryPrototypeMemberRead`
421
+ * (`emit-carrier-members.ts`) defers `hasOwnProperty` off a dictionary: the
422
+ * GET renders nothing, and the CALL that follows fuses receiver, key and
423
+ * field list into one expression (`objectShapeCallText` below).
424
+ *
425
+ * The set itself lives in `projection/callee.ts`: the slot census's
426
+ * `calleeRenderingOf` states the identical claim (a call through one of
427
+ * these names renders from a template, not `Object.prototype`'s declared
428
+ * convention) so the two do not drift into a printer that claims one set of
429
+ * calls and a census that converts arguments for a different one.
430
+ */
431
+ /**
432
+ * The claim, asked at the `[[Get]]`.
433
+ *
434
+ * Gated on the receiver representation BEFORE `objectViewFrom` is ever asked:
435
+ * that function THROWS for a receiver it cannot enumerate (a `dictionary`
436
+ * already has its own claim; a `dynamic` receiver is a genuine boundary whose
437
+ * `hasOwnProperty` really does need the runtime table), and this claim must
438
+ * answer `false` for those rather than refuse a program this file was never
439
+ * meant to gate.
440
+ */
441
+ /**
442
+ * Whether a known-shape receiver's `hasOwnProperty`/`propertyIsEnumerable` is
443
+ * a deferred `Object.prototype` read, and what the call needs from it.
444
+ *
445
+ * Stated once; the renderer below and the prototype-read walk both ask it.
446
+ * `objectViewFrom` is the authority for what a known shape's fields and member
447
+ * accessor are, so it is asked here rather than re-derived -- with an empty
448
+ * receiver TEXT, because the `known` arm's `fields` and `accessor` do not
449
+ * depend on it and the receiver is spelled at the call from the operand this
450
+ * record carries.
451
+ */
452
+ export const deferredObjectShapeMethodClaim = (ctx, operation) => {
453
+ const staticKey = ctx.staticKeyTexts.get(operation.key.value);
454
+ if (staticKey === undefined || !objectShapePrototypeMethods.has(staticKey))
455
+ return null;
456
+ const representation = operation.receiver.representation;
457
+ const known = representation.kind === 'record' ||
458
+ representation.kind === 'class-ref' ||
459
+ (representation.kind === 'native-record-ref' && representation.native === null);
460
+ if (!known)
461
+ return null;
462
+ const view = objectViewFrom(ctx, staticKey, representation, '', 'receiver');
463
+ if (view.kind !== 'known')
464
+ return null;
465
+ return {
466
+ receiverKind: 'object-shape',
467
+ member: staticKey,
468
+ receiver: { kind: 'operand', operand: operation.receiver },
469
+ receiverElement: null,
470
+ objectShapeFields: view.fields,
471
+ objectShapeAccessor: view.accessor
472
+ };
473
+ };
474
+ export const objectShapePrototypeMemberRead = (ctx, operation) => {
475
+ return deferredObjectShapeMethodClaim(ctx, operation) !== null;
476
+ };
477
+ /**
478
+ * The presence text `hasOwnText`'s own `ownKeyPresenceText` renders, spelled
479
+ * without an `ObjectView`: the call site only carries the fields and accessor
480
+ * `objectShapePrototypeMemberRead` snapshotted at the read, not the receiver's
481
+ * full representation the view type demands.
482
+ */
483
+ const shapeKeyPresenceText = (receiver, accessor, field, member) => {
484
+ const present = `${receiver}${accessor}${cppRecordFieldPresenceName(field.key)}`;
485
+ return member === 'propertyIsEnumerable'
486
+ ? `(${present} && ${receiver}${accessor}${cppRecordFieldAttributesName(field.key)}.enumerable)`
487
+ : present;
488
+ };
489
+ /**
490
+ * The call text for a deferred `hasOwnProperty`/`propertyIsEnumerable` read.
491
+ *
492
+ * A literal key answers at compile time, exactly as `Object.hasOwn` does for
493
+ * one. A key only known at runtime dispatches over the SAME finite field set
494
+ * a static receiver's own computed key already switches over
495
+ * (`emit-dynamic-properties.ts`'s `constructorFamilyComputedGetText` is the
496
+ * reference for the shape): every field the layout declares gets one `if`
497
+ * arm, and a key naming none of them is not an own property. Only a string
498
+ * key is admitted -- ToPropertyKey of anything else is a question `hasOwnText`
499
+ * above refuses too, and a record's fields are never symbol- or number-keyed.
500
+ *
501
+ * Presence and enumerability are separate native metadata. defineProperty
502
+ * can make a present fixed field non-enumerable without moving its value to
503
+ * a dynamic sidecar; the query must read that stored attribute too.
504
+ */
505
+ export const objectShapeCallText = (ctx, member, receiver, accessor, fields, args) => {
506
+ const key = args[0];
507
+ if (key === undefined) {
508
+ throw createCppEmitBlockedError(`host-member-call:Object.prototype.${member}`, `"Object.prototype.${member}" was called with no key`);
509
+ }
510
+ // A claim, not a fold: this decides whether the answer is the compile-time
511
+ // constant below or the runtime switch further down, so it must not see a
512
+ // key text `constantTexts` only holds because the render minted it (e.g. a
513
+ // folded `typeof` result reaching here as the tested key).
514
+ const spelled = ctx.staticKeyTexts.get(key.value);
515
+ if (spelled !== undefined) {
516
+ const field = fields.find((candidate) => candidate.key === spelled);
517
+ return field === undefined ? 'false' : shapeKeyPresenceText(receiver, accessor, field, member);
518
+ }
519
+ if (key.representation.kind === 'symbol') {
520
+ // The identical declared-field dispatch `records.ts`'s field dispatcher
521
+ // uses for a computed `obj[k]` read: a program's own `unique symbol`
522
+ // binding is not a compile-time text (`spelled` above only catches a
523
+ // COMPUTED KEY the checker resolved at normalize time,
524
+ // `properties.ts`'s `keyOf`/`symbolMemberKeyOf` -- an ordinary CALL
525
+ // ARGUMENT such as `p.hasOwnProperty(keyA)` is never one), so a
526
+ // symbol-keyed field is matched by the id its cell registered
527
+ // (`gea::detail::registerDeclaredSymbol`) rather than by name.
528
+ const symbolFields = fields.filter((field) => cppRecordFieldKeyIsSymbol(field.key));
529
+ if (symbolFields.length > 0) {
530
+ const keyText = propertyKeyText(ctx, key, `an "Object.prototype.${member}" call`);
531
+ const arms = symbolFields
532
+ .map((field) => `if (__gea_key.symbolId() == gea::detail::declaredSymbolId(${cppStringLiteral(field.key)})) return ` +
533
+ `${shapeKeyPresenceText(receiver, accessor, field, member)};`)
534
+ .join(' ');
535
+ return `([&]() -> bool { const gea::PropertyKey __gea_key = ${keyText}; ${arms} return false; })()`;
536
+ }
537
+ }
538
+ if (key.representation.kind !== 'string') {
539
+ throw createCppEmitBlockedError(`host-member-call:Object.prototype.${member}`, `"Object.prototype.${member}" received a key carried as "${representationKey(key.representation)}" rather than a ` +
540
+ 'string, and ToPropertyKey of anything else runs ToPrimitive, which this backend does not perform');
541
+ }
542
+ if (fields.length === 0)
543
+ return 'false';
544
+ const runtimeKey = operandText(ctx, key);
545
+ const arms = fields
546
+ .map((field) => `if (__gea_key == ${cppStringLiteral(field.key)}) return ${shapeKeyPresenceText(receiver, accessor, field, member)};`)
547
+ .join(' ');
548
+ return `([&]() -> bool { const std::string& __gea_key = ${runtimeKey}; ${arms} return false; })()`;
549
+ };
550
+ /**
551
+ * `hasOwnProperty`/`propertyIsEnumerable` off a `native-handle` receiver
552
+ * (`Math.hasOwnProperty(...)`, or `Object.prototype.hasOwnProperty.call(Math,
553
+ * ...)` after the borrowed-call rewrite), for the SAME finite own-member list
554
+ * `getOwnPropertyDescriptorText`'s native-handle arm reads
555
+ * (`ctx.hosts.intrinsicMembers`) -- see that table's own comment for where it
556
+ * comes from and why it is never hand-listed here.
557
+ *
558
+ * `propertyIsEnumerable` needs no key at all: ECMA-262 specifies every own
559
+ * member of a host intrinsic non-enumerable, whether it is a data constant
560
+ * (21.3.1) or a builtin method (10.2.4) -- so the honest answer is `false`
561
+ * unconditionally, the same fact `emitNativeHandleEnumerateIterator`
562
+ * (`emit-iterator.ts`) already renders as an always-empty `for`-`in` walk.
563
+ * Asking `hasOwnProperty` first and `false` never matters because
564
+ * `propertyIsEnumerable` of an ABSENT key is `false` too -- one constant
565
+ * covers both cases of ECMA-262 20.1.3.7's own two-step definition.
566
+ *
567
+ * `hasOwnProperty` is real membership: a literal key folds against the list
568
+ * at compile time, and a runtime key becomes a switch over it, mirroring
569
+ * `objectShapeCallText`'s own two arms for a record receiver.
570
+ */
571
+ /**
572
+ * `fn.hasOwnProperty(k)` / `fn.propertyIsEnumerable(k)`: the callable's own
573
+ * properties are its one shared function-object table, with the `name`/
574
+ * `length` facts installed first so both answer for them (10.2.10: present,
575
+ * non-enumerable) exactly as `callableDynamicGet` sees them.
576
+ */
577
+ export const callableShapeCallText = (ctx, member, receiver, args) => {
578
+ const key = args[0];
579
+ if (key === undefined) {
580
+ throw createCppEmitBlockedError(`host-member-call:Object.prototype.${member}`, `"Object.prototype.${member}" was called with no key`);
581
+ }
582
+ const site = `"Object.prototype.${member}" of a callable`;
583
+ const test = member === 'propertyIsEnumerable' ? '__gea_own != nullptr && __gea_own->enumerable' : '__gea_own != nullptr';
584
+ return (`([&]() -> bool { const auto& __gea_callable = ${receiver}; ` +
585
+ 'gea::installCallableOwnFacts(__gea_callable.functionObjectIdentity(), __gea_callable.name(), __gea_callable.length()); ' +
586
+ `const gea::PropertyDescriptor* __gea_own = __gea_callable.functionObjectIdentity()->properties->ownProperty(${propertyKeyText(ctx, key, site)}); ` +
587
+ `return ${test}; })()`);
588
+ };
589
+ export const nativeHandleShapeCallText = (ctx, member, protocol, args) => {
590
+ if (member === 'propertyIsEnumerable')
591
+ return 'false';
592
+ const members = ctx.hosts.intrinsicMembers.get(protocol) ?? [];
593
+ const key = args[0];
594
+ if (key === undefined) {
595
+ throw createCppEmitBlockedError(`host-member-call:Object.prototype.${member}`, `"Object.prototype.${member}" was called with no key`);
596
+ }
597
+ const site = `"Object.prototype.${member}" of a host intrinsic`;
598
+ // A claim, not a fold: this decides whether a non-configurable member folds
599
+ // to a compile-time constant below or falls through to the sidecar dispatch,
600
+ // so it must not see a key text `constantTexts` only holds because the
601
+ // render minted it (e.g. a folded `typeof` result reaching here as the key).
602
+ const spelled = ctx.staticKeyTexts.get(key.value);
603
+ const named = spelled === undefined ? undefined : members.find((candidate) => candidate.name === spelled);
604
+ // A non-configurable member can neither be deleted nor overridden, so its
605
+ // membership is a compile-time fact. Every other key -- a configurable
606
+ // member, or a name the table lacks -- is answered by the intrinsic's
607
+ // dynamic-property sidecar first (`hostIntrinsicSidecar`, gea_runtime.h):
608
+ // test262's `isConfigurable` deletes the member and then asks exactly this
609
+ // question, and an answer read off the static table alone would say the
610
+ // deleted member is still there.
611
+ if (named !== undefined && !intrinsicMemberValueOf(ctx, protocol, named, site).configurable)
612
+ return 'true';
613
+ if (members.length === 0)
614
+ return 'false';
615
+ const arms = members.map((candidate) => `__gea_name == ${cppStringLiteral(candidate.name)}`).join(' || ');
616
+ return (`([&]() -> bool { const gea::PropertyKey __gea_key = ${propertyKeyText(ctx, key, site)}; ` +
617
+ `auto& __gea_side = gea::detail::hostIntrinsicSidecar(${cppStringLiteral(protocol)}); ` +
618
+ `if (__gea_side.hasOverride(__gea_key)) return true; if (__gea_side.isRemoved(__gea_key)) return false; ` +
619
+ `if (__gea_key.isSymbol()) return false; const std::string& __gea_name = __gea_key.text(); return ${arms}; })()`);
620
+ };
621
+ /**
622
+ * `hasOwnProperty` off a receiver the program itself declared dynamic (a
623
+ * `--dynamic-fallback` boxed value carrying a real `gea::DynamicObject`).
624
+ *
625
+ * `objectShapePrototypeMemberRead` above deliberately answers `false` for one
626
+ * of these (`known` excludes `'dynamic'`) rather than claim it, and its own
627
+ * comment says why: "a `dynamic` receiver is a genuine boundary whose
628
+ * `hasOwnProperty` really does need the runtime table". This is that table --
629
+ * `gea::runtime::object::hasOwnProperty` (gea_runtime.h) already implements
630
+ * 20.1.3.7's OWN-half-only membership test for an arbitrary `gea::Value`
631
+ * receiver, generically, for any key. Left unclaimed, this member falls
632
+ * through to `dynamicGetText` (`emit-dynamic-properties.ts`), which reads
633
+ * "hasOwnProperty" as an ordinary property THROUGH the object's real
634
+ * `[[Prototype]]` chain -- correct for a program-defined member, but wrong
635
+ * for this one, because this runtime never links a `DynamicObject` to an
636
+ * `Object.prototype` analogue: the chain a user constructor builds
637
+ * (`instance` -> `Ctor.prototype` -> `null`) has no entry that could ever
638
+ * answer an ambient `Object.prototype` method, so the read comes back
639
+ * `undefined` and calling it aborts.
640
+ *
641
+ * `propertyIsEnumerable` is deliberately left unclaimed here: nothing in this
642
+ * file states which `PropertyDescriptor.enumerable` bit a THIRD idiom
643
+ * (`Object.prototype.propertyIsEnumerable.call(...)`) should read against a
644
+ * `DynamicObject`, and no probe in this codebase exercises it yet -- adding
645
+ * it un-exercised would be a guess, not an answer.
646
+ */
647
+ export const dynamicObjectPrototypeMethods = new Set(['hasOwnProperty']);
648
+ /** The claim, asked at the `[[Get]]` -- the dynamic-receiver twin of `objectShapePrototypeMemberRead` above. */
649
+ export const deferredDynamicObjectMethodClaim = (staticKeyTexts, receiver, key) => {
650
+ const staticKey = staticKeyTexts.get(key.value);
651
+ if (staticKey === undefined || !dynamicObjectPrototypeMethods.has(staticKey))
652
+ return null;
653
+ if (receiver.representation.kind !== 'dynamic')
654
+ return null;
655
+ return { receiverKind: 'dynamic-object', member: staticKey, receiver: { kind: 'operand', operand: receiver }, receiverElement: null };
656
+ };
657
+ export const dynamicObjectPrototypeMemberRead = (ctx, operation) => deferredDynamicObjectMethodClaim(ctx.staticKeyTexts, operation.receiver, operation.key) !== null;
658
+ /**
659
+ * The call text for a deferred `hasOwnProperty` read off a dynamic receiver.
660
+ *
661
+ * Only a string key is admitted, for the identical reason `objectShapeCallText`
662
+ * and `nativeHandleShapeCallText` above refuse anything else: ToPropertyKey of
663
+ * a non-string runs ToPrimitive, which this backend does not perform.
664
+ */
665
+ export const dynamicObjectCallText = (ctx, member, receiver, args) => {
666
+ const key = args[0];
667
+ if (key === undefined) {
668
+ throw createCppEmitBlockedError(`host-member-call:Object.prototype.${member}`, `"Object.prototype.${member}" was called with no key`);
669
+ }
670
+ return `gea::runtime::object::hasOwnProperty(${receiver}, ${propertyKeyText(ctx, key, `"Object.prototype.${member}" of a dynamic receiver`)})`;
671
+ };