@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,444 @@
1
+ import { narrowedOperandView } from '../conversion/operand-view.js';
2
+ import { abiKey } from '../representation/model.js';
3
+ import { hostMemberOf } from '../targets/cpp/host/host-members.js';
4
+ import { classMemberOf, classMethodOverrideOf, classStaticMemberOf } from './fields.js';
5
+ import { callableBuiltinIsUnshadowed, callableMutationFactsOf } from '../semantics/callable-origins.js';
6
+ import { operandOf, resultOf } from '../semantics/model/operands.js';
7
+ /**
8
+ * What a callee carrier says about the frame a call fills.
9
+ *
10
+ * These queries are asked twice in the pipeline -- once when a call lowers
11
+ * (`ir/lower-invocation.ts`) and once when the slot census states which
12
+ * carrier each argument must arrive in (`projection/slots.ts`). They live
13
+ * here, below both, so the two cannot drift: a lowering that packed
14
+ * arguments against one reading of a callee and a census that checked them
15
+ * against another would be two authorities over one convention.
16
+ */
17
+ /** The convention a callable carrier states, or `null` for a carrier that states none. */
18
+ export const abiOfCallee = (representation) => {
19
+ switch (representation.kind) {
20
+ case 'function':
21
+ case 'function-family':
22
+ case 'function-value-family':
23
+ case 'function-value-dispatch':
24
+ case 'constructor-family':
25
+ case 'constructor-value-dispatch':
26
+ return representation.abi;
27
+ case 'function-and-constructor':
28
+ return representation.call;
29
+ default:
30
+ return null;
31
+ }
32
+ };
33
+ /**
34
+ * The `[[Construct]]` convention a callee carries, which is the frame
35
+ * `super(...)` and `new` fill.
36
+ *
37
+ * Distinct from `abiOfCallee` for exactly one carrier: a value that is both
38
+ * callable and constructible states two conventions, and a construction fills
39
+ * the constructing one. Reusing `abiOfCallee` there would pack the arguments
40
+ * against a `[[Call]]` signature the base's initialization never reads.
41
+ */
42
+ export const constructAbiOfCallee = (representation) => {
43
+ if (representation.kind === 'function-and-constructor')
44
+ return representation.construct;
45
+ return abiOfCallee(representation);
46
+ };
47
+ /**
48
+ * The convention a method VALUE carries when a receiver-less slot takes it:
49
+ * the source states a receiver and the slot states the identical convention
50
+ * without one. Such a value is bound to the object it was read from before it
51
+ * enters the slot (`ir/lower-operands.ts`'s `enter`, minting a detached
52
+ * `bind-callable`); `null` for any other pair.
53
+ */
54
+ export const detachedMethodAbiOf = (source, target) => {
55
+ const from = abiOfCallee(source);
56
+ const to = abiOfCallee(target);
57
+ if (from === null || to === null || from.receiver === null || to.receiver !== null)
58
+ return null;
59
+ return abiKey({ ...from, receiver: null }) === abiKey(to) ? from : null;
60
+ };
61
+ /**
62
+ * Whether a rest slot's carrier is a fixed-arity tuple: a record whose keys
63
+ * are exactly `0..n-1` in order. Such a rest slot is filled field by field,
64
+ * never by a runtime-sized array.
65
+ */
66
+ export const isClosedContiguousTupleRecord = (representation) => representation.kind === 'record' &&
67
+ representation.accessors.length === 0 &&
68
+ representation.fields.length > 0 &&
69
+ representation.fields.every((field, index) => field.key === String(index));
70
+ /**
71
+ * The value a body's `return` hands back, given the convention's own result:
72
+ * the payload of an async function's promise, the completion of a generator's
73
+ * cursor, and otherwise the result itself.
74
+ */
75
+ export const returnPayloadOf = (result) => result.kind === 'promise' ? result.value : result.kind === 'iterator' ? result.completion : result;
76
+ /**
77
+ * The source function a method read as a VALUE names: `host.readFile` read
78
+ * off a class instance, or `Host.create` off its constructor, is the member
79
+ * declaration's own body -- provenance `callableOriginsOf` cannot carry,
80
+ * since it follows allocations and the cells that alias them, and a method
81
+ * is never allocated. `null` for a read that is not that: a computed key, a
82
+ * receiver that is no class, a member that is a field or an accessor, or a
83
+ * value whose convention states no receiver (a bound callable, an arrow
84
+ * field), which the read cannot have produced from a method body.
85
+ *
86
+ * Asked by the property lowering, which records the receiver a method value
87
+ * must be bound to (`LoweringProgram.methodValueReceivers`), and by the
88
+ * `Function.prototype.bind` rewrite below, which binds the same body.
89
+ */
90
+ export const methodValueOriginOf = (classes, receiver, key, representation) => {
91
+ if (abiOfCallee(representation)?.receiver === null)
92
+ return null;
93
+ const isStatic = receiver.kind === 'constructor-family';
94
+ const declarations = receiver.kind === 'class-ref' ? [receiver.declaration] : isStatic ? receiver.members : [];
95
+ for (const declaration of declarations) {
96
+ if (!isStatic && classMethodOverrideOf(classes, declaration, key))
97
+ return null;
98
+ const site = isStatic ? classStaticMemberOf(classes, declaration, key) : classMemberOf(classes, declaration, key);
99
+ if (site?.kind === 'method' && site.method.callable)
100
+ return site.method.callable;
101
+ }
102
+ return null;
103
+ };
104
+ /** `methodValueOriginOf` for a property read operation, from the carriers the plan selected. */
105
+ const methodValueOriginOfRead = (input, producer) => {
106
+ if (producer.family !== 'property' || producer.internalMethod !== 'get' || producer.keyIsComputed)
107
+ return null;
108
+ const key = operandOf(producer, 'key');
109
+ const receiver = operandOf(producer, 'receiver');
110
+ const value = resultOf(producer, 'value');
111
+ if (!key || key.source.kind !== 'constant' || !receiver || receiver.source.kind !== 'result' || !value)
112
+ return null;
113
+ const held = input.plan.selected.get(receiver.source.result);
114
+ const read = input.plan.selected.get(value.id);
115
+ return held && read ? methodValueOriginOf(input.classes, held, key.source.text, read) : null;
116
+ };
117
+ const callAbiOfCallableReceiver = (representation) => {
118
+ switch (representation.kind) {
119
+ case 'function':
120
+ case 'function-family':
121
+ case 'function-value-family':
122
+ case 'function-value-dispatch':
123
+ return representation.abi;
124
+ case 'function-and-constructor':
125
+ return representation.call;
126
+ default:
127
+ return null;
128
+ }
129
+ };
130
+ const bindAbiOfCallableReceiver = (representation) => {
131
+ switch (representation.kind) {
132
+ case 'function':
133
+ case 'function-family':
134
+ case 'function-value-family':
135
+ case 'function-value-dispatch':
136
+ return representation.abi;
137
+ default:
138
+ return null;
139
+ }
140
+ };
141
+ const memberNames = ['call', 'apply', 'bind'];
142
+ export const deferredCalleeOf = (input, operation) => {
143
+ if (operation.internalMethod !== 'call' || operation.optionalChain)
144
+ return null;
145
+ const callee = operandOf(operation, 'callee');
146
+ if (!callee || callee.source.kind !== 'result')
147
+ return null;
148
+ const producerId = input.graph.results.get(callee.source.result);
149
+ const producer = producerId === undefined ? undefined : input.graph.operations.get(producerId);
150
+ if (!producer || producer.family !== 'property' || producer.internalMethod !== 'get' || producer.keyIsComputed)
151
+ return null;
152
+ const key = operandOf(producer, 'key');
153
+ if (!key || key.source.kind !== 'constant')
154
+ return null;
155
+ const keyText = key.source.text;
156
+ const member = memberNames.find((name) => name === keyText);
157
+ if (!member)
158
+ return null;
159
+ const receiver = operandOf(producer, 'receiver');
160
+ if (!receiver || receiver.source.kind !== 'result')
161
+ return null;
162
+ const representation = input.plan.selected.get(receiver.source.result);
163
+ if (!representation)
164
+ return null;
165
+ const receiverProducerId = input.graph.results.get(receiver.source.result);
166
+ const receiverProducer = receiverProducerId === undefined ? undefined : input.graph.operations.get(receiverProducerId);
167
+ const functionId = input.callableOrigins.get(receiver.source.result) ?? (receiverProducer ? methodValueOriginOfRead(input, receiverProducer) : null);
168
+ const facts = callableMutationFactsOf(input.graph, input.plan, input.callableOrigins);
169
+ if (!callableBuiltinIsUnshadowed(facts, functionId, member))
170
+ return null;
171
+ // Read off the receiver's own carrier, which is what decides how the call
172
+ // renders -- see `DeferredCallee.frame`.
173
+ const frame = representation.kind === 'dynamic' ? 'boxed' : 'native';
174
+ if (member === 'bind') {
175
+ // `functionId` names the checker-authenticated DECLARATION a `dynamic`
176
+ // receiver's own-property facts are read off -- needed only to recover a
177
+ // boxed Function's native ABI (`emit-callable.ts`'s `bindCallable`, the
178
+ // `operation.source.representation.kind === 'dynamic'` branch). A
179
+ // `function-value-dispatch` receiver already carries its own physical
180
+ // ABI on the representation itself and needs no such lookup: a bind
181
+ // chained off ANOTHER bind's result (`bound.bind(...)`) has no known
182
+ // origin -- `callableOriginsOf` traces identity through ordinary
183
+ // allocations and bindings, never through a prior `.bind()` -- and
184
+ // unconditionally refusing for `functionId === null` bailed out of the
185
+ // native fast path for exactly that non-dynamic, well-typed case, onto
186
+ // an ordinary property-read whose STATIC checker type (`.bind`'s own
187
+ // generic signature, `thisArg: T` inferred from the call's actual
188
+ // argument) is a completely different, wrong convention for calling the
189
+ // already-typed receiver directly.
190
+ const abi = representation.kind === 'dynamic'
191
+ ? functionId !== null && !input.constructs.has(functionId)
192
+ ? (input.abis.get(functionId) ?? null)
193
+ : null
194
+ : bindAbiOfCallableReceiver(representation);
195
+ return abi ? { member, receiver, abi, functionId, frame, receiverCarrier: representation } : null;
196
+ }
197
+ if (functionId === null && representation.kind !== 'function-value-dispatch')
198
+ return null;
199
+ const abi = representation.kind === 'dynamic' && functionId !== null
200
+ ? (input.abis.get(functionId) ?? null)
201
+ : callAbiOfCallableReceiver(representation);
202
+ return abi ? { member, receiver, abi, functionId, frame, receiverCarrier: representation } : null;
203
+ };
204
+ /**
205
+ * `hasOwnProperty`/`propertyIsEnumerable` reached as instance methods off a
206
+ * known-shape receiver (`record`/`class-ref`/a `native-record-ref` naming no
207
+ * native type) -- the two ambient `Object.prototype` members the C++
208
+ * backend's object-shape protocol (`targets/cpp/host/object-protocol.ts`'s
209
+ * `objectShapePrototypeMemberRead`) claims regardless of the receiver's own
210
+ * layout: the GET renders nothing and the CALL fuses receiver, key and field
211
+ * list into one expression, never going through `Object.prototype`'s
212
+ * declared `(v: PropertyKey) => boolean` convention. `calleeRenderingOf`
213
+ * below is the ONE authority for whether a call renders from a template or a
214
+ * convention, so it states this claim too, rather than leaving the printer
215
+ * as a second, silent authority the census cannot see: a census that let
216
+ * this call's ABI apply would convert a literal string key into the
217
+ * `PropertyKey` tagged union, which `objectShapeCallText` explicitly refuses.
218
+ */
219
+ export const objectShapePrototypeMethods = new Set(['hasOwnProperty', 'propertyIsEnumerable']);
220
+ /** A direct read of a host callable whose numeric rest frame need not escape to an array. */
221
+ export const numericRestHostCallOf = (input, operation) => {
222
+ if (operation.internalMethod !== 'call' || operation.optionalChain || !input.hostMembers)
223
+ return null;
224
+ const callee = operandOf(operation, 'callee');
225
+ if (callee?.source.kind !== 'result')
226
+ return null;
227
+ const producerId = input.graph.results.get(callee.source.result);
228
+ const producer = producerId === undefined ? undefined : input.graph.operations.get(producerId);
229
+ if (producer?.family !== 'property' || producer.internalMethod !== 'get' || producer.keyIsComputed)
230
+ return null;
231
+ const receiver = operandOf(producer, 'receiver');
232
+ const key = operandOf(producer, 'key');
233
+ if (receiver?.source.kind !== 'result' || key?.source.kind !== 'constant')
234
+ return null;
235
+ const held = input.plan.selected.get(receiver.source.result);
236
+ if (held?.kind !== 'native-handle')
237
+ return null;
238
+ const protocol = held.native ?? held.protocol;
239
+ const member = key.source.text;
240
+ const host = hostMemberOf(input.hostMembers, protocol, member);
241
+ return host?.kind === 'property' && host.numericRestCall !== undefined ? { protocol, member } : null;
242
+ };
243
+ /**
244
+ * Declarations written exactly once, from a direct read of a host METHOD --
245
+ * `var __isArray = Array.isArray`, the shape test262's propertyHelper and any
246
+ * program guarding a later monkey-patch names a builtin through.
247
+ *
248
+ * `targets/cpp/host/host-method-aliases.ts` proves the identical fact, but
249
+ * over the LOWERED ir, for the printer to fold a read of the cell back into a
250
+ * bare host-member name. `calleeRenderingOf` needs the same fact one stage
251
+ * earlier, over the semantic graph and its sealed plan -- before lowering
252
+ * builds a call's argument `convert`s -- because a call through such a cell
253
+ * renders as a host call-site template exactly like `Array.isArray(v)`
254
+ * itself, and a template's arguments enter their OWN carrier
255
+ * (`invocationSlot`'s `host-overload`), never the `dynamic` an ordinary
256
+ * callable's declared-`any` formal would otherwise ask the census for. Both
257
+ * live on the sealed plan, which is why this can answer without waiting for
258
+ * a lowered body: a `native-handle` receiver and a host member table are
259
+ * exactly what the plan and `hosts.members` already state.
260
+ */
261
+ export const hostMethodAliasDeclarations = (graph, plan, deriver, hostMembers) => {
262
+ const methodReads = new Set();
263
+ for (const operation of graph.operations.values()) {
264
+ if (operation.family !== 'property' || operation.internalMethod !== 'get' || operation.keyIsComputed)
265
+ continue;
266
+ const key = operandOf(operation, 'key');
267
+ if (!key || key.source.kind !== 'constant')
268
+ continue;
269
+ const receiver = operandOf(operation, 'receiver');
270
+ if (!receiver)
271
+ continue;
272
+ const held = receiver.source.kind === 'result'
273
+ ? (plan.selected.get(receiver.source.result) ?? null)
274
+ : receiver.source.kind === 'constant'
275
+ ? deriver.derive(receiver.type)
276
+ : null;
277
+ if (held === null)
278
+ continue;
279
+ const view = narrowedOperandView(held, receiver, deriver);
280
+ const carrier = view.kind === 'borrowed-ref' ? view.referent : view;
281
+ if (carrier.kind !== 'native-handle')
282
+ continue;
283
+ const protocol = carrier.native ?? carrier.protocol;
284
+ if (hostMemberOf(hostMembers, protocol, key.source.text)?.kind !== 'method')
285
+ continue;
286
+ const result = resultOf(operation, 'value');
287
+ if (result)
288
+ methodReads.add(result.id);
289
+ }
290
+ const writeCounts = new Map();
291
+ const written = new Set();
292
+ for (const operation of graph.operations.values()) {
293
+ if (operation.family !== 'binding' || (operation.action !== 'write' && operation.action !== 'initialize'))
294
+ continue;
295
+ writeCounts.set(operation.declaration, (writeCounts.get(operation.declaration) ?? 0) + 1);
296
+ // `var x = Array.isArray` publishes an `initialize` whose operand is the
297
+ // `initializer`; a later `x = ...` is a `write` of a `value`.
298
+ const value = operandOf(operation, 'initializer') ?? operandOf(operation, 'value');
299
+ if (value?.source.kind === 'result' && methodReads.has(value.source.result))
300
+ written.add(operation.declaration);
301
+ }
302
+ const aliases = new Set();
303
+ for (const declaration of written)
304
+ if (writeCounts.get(declaration) === 1)
305
+ aliases.add(declaration);
306
+ return aliases;
307
+ };
308
+ const templateReceiverKinds = new Set([
309
+ 'native-handle',
310
+ 'string',
311
+ 'scalar',
312
+ 'array-object',
313
+ 'typed-array',
314
+ 'keyed-collection',
315
+ 'promise',
316
+ 'iterator',
317
+ 'dictionary',
318
+ 'array-buffer',
319
+ 'shared-array-buffer',
320
+ 'data-view',
321
+ 'dense-buffer',
322
+ 'native-sequence',
323
+ 'proxy-object',
324
+ 'dynamic',
325
+ 'optional',
326
+ 'tagged-union',
327
+ 'symbol'
328
+ ]);
329
+ export const calleeRenderingOf = (input, operation) => {
330
+ // `Object.keys`/`getOwnPropertyNames`/`getOwnPropertySymbols`/`Reflect.ownKeys`
331
+ // are already checker-authenticated above this call
332
+ // (`intrinsic-property-call.ts`'s `intrinsicPropertyCallOf`, gated on
333
+ // standard-library provenance for both the owner and the member, with no
334
+ // global host-mutation taint) -- `operation.intrinsicOwnKeys` IS that
335
+ // authentication, not a guess about this callee's shape. Without this, the
336
+ // generic receiver-kind walk below has to answer for the OWNER of the
337
+ // property read (`Object`/`Reflect` itself) rather than the call's real
338
+ // subject, and neither read as a `template` receiver: the ambient
339
+ // `ObjectConstructor`/`Reflect` singleton is never given a `native-handle`
340
+ // tag the way `Math`/`Date`/`JSON` are (`host-protocols.ts` binds those by a
341
+ // plugin-supplied native-protocol table; `Object`'s own statics are answered
342
+ // by this backend's dedicated `[[OwnPropertyKeys]]` primitives in
343
+ // `targets/cpp/host/object-protocol.ts` instead, which never registers a
344
+ // handle tag for the receiver `Object` itself). Falling through to
345
+ // `'callable'` published the intrinsic's *declared* `(o: object) => string[]`
346
+ // ABI as the call's convention, whose vacuous `object` parameter this
347
+ // program models soundly on its own (an empty `record`, per
348
+ // `representation/derive.ts`'s `deriveObject`) but which the generic
349
+ // argument-conversion path cannot honor without erasing the real argument's
350
+ // type to match it -- exactly the "intrinsic accepts any object, so the
351
+ // argument becomes dynamic" defect this authentication exists to prevent.
352
+ // `lower-invocation.ts` already licenses `intrinsicOwnKeys` through to the
353
+ // IR ONLY when this function answers `'template'`
354
+ // (`operation.intrinsicOwnKeys && calleeRenderingOf(...) === 'template'`) --
355
+ // so answering it here, directly from the same authenticated fact, closes
356
+ // the license this function was always supposed to grant instead of gating
357
+ // it behind a receiver classification that was never going to recognize it.
358
+ if (operation.intrinsicOwnKeys)
359
+ return 'template';
360
+ // `Object.defineProperty` on a closed data descriptor is the same shape of
361
+ // authenticated fact, one call later: `intrinsic-data-definition.ts`'s
362
+ // `intrinsicDataDefinitionTargetOf` (consumed by `producers/invocations.ts`
363
+ // as `operation.intrinsicDataDefinition`, alongside the host-mutation
364
+ // census's own `operation.intrinsicMutation === 'object-define-property'`)
365
+ // has ALREADY proven the receiver is not published by this call and the
366
+ // descriptor names only `value`/`writable`/`enumerable`/`configurable`.
367
+ // `lower-invocation.ts`'s `fixedDataDefinition` is written to consume
368
+ // exactly that pair through `fixedDataDefinitionRecipeOf`, gated on this
369
+ // function answering `'template'` -- but nothing here ever did, so every
370
+ // authenticated call still fell through to the generic receiver-kind walk
371
+ // below. `Object` itself is not a `native-handle` (same reason
372
+ // `intrinsicOwnKeys` names above), so it answered `'callable'`, publishing
373
+ // `defineProperty`'s OWN ambient `(o, p, attributes: PropertyDescriptor &
374
+ // ThisType<any>) => any` signature as the call's ABI -- `PropertyDescriptor`
375
+ // types `value` as `any`, so THAT declared signature, not the literal
376
+ // descriptor each call site actually writes, became the carrier: three's
377
+ // `Object3D` constructor defines `position`/`rotation`/`quaternion`/`scale`
378
+ // this way, and every one of those `Object.defineProperty` call sites
379
+ // selected a `dynamic` `.value` field for a descriptor whose own literal
380
+ // states a concrete `Vector3`/`Euler`/`Quaternion`. Answering `'template'`
381
+ // here closes the same license `intrinsicOwnKeys` closes above, from the
382
+ // same authenticated fact, instead of a receiver classification that was
383
+ // never going to recognize `Object` as one either.
384
+ if (operation.intrinsicMutation === 'object-define-property' && operation.intrinsicDataDefinition === true)
385
+ return 'template';
386
+ const callee = operandOf(operation, 'callee');
387
+ if (!callee)
388
+ return 'callable';
389
+ if (callee.source.kind === 'parameter' || callee.source.kind === 'constant')
390
+ return 'callable';
391
+ if (callee.source.kind !== 'result')
392
+ return 'callable';
393
+ const producerId = input.graph.results.get(callee.source.result);
394
+ const producer = producerId === undefined ? undefined : input.graph.operations.get(producerId);
395
+ if (!producer)
396
+ return 'callable';
397
+ if (producer.family === 'binding' && producer.action === 'read') {
398
+ // A host FUNCTION is called through the convention its declaration
399
+ // states -- the printer's host-function path fills that frame with
400
+ // `argumentText` like any callable -- so its arguments have slots. A
401
+ // host class, singleton or namespace read is a member path the printer
402
+ // spells from a template.
403
+ const storage = input.placements.get(producer.declaration)?.storage.kind;
404
+ if (storage === 'host-class' || storage === 'host-singleton' || storage === 'host-namespace')
405
+ return 'template';
406
+ // A cell that holds one host METHOD forever (`var __isArray =
407
+ // Array.isArray`) is the same template shape one indirection later --
408
+ // see `hostMethodAliasDeclarations`.
409
+ return input.hostMethodAliasDeclarations.has(producer.declaration) ? 'template' : 'callable';
410
+ }
411
+ if (producer.family !== 'property' || producer.internalMethod !== 'get')
412
+ return 'callable';
413
+ if (producer.hostMethod !== undefined)
414
+ return 'template';
415
+ const receiver = operandOf(producer, 'receiver');
416
+ if (!receiver)
417
+ return 'callable';
418
+ const held = receiver.source.kind === 'result'
419
+ ? (input.plan.selected.get(receiver.source.result) ?? null)
420
+ : receiver.source.kind === 'constant'
421
+ ? input.deriver.derive(receiver.type)
422
+ : null;
423
+ if (held === null)
424
+ return 'template';
425
+ const view = narrowedOperandView(held, receiver, input.deriver);
426
+ // A receiver with no storage (`undefined`/`null`, the carrier of a branch
427
+ // flow analysis proved dead) registers no template read at all, so the
428
+ // printer falls through to the callable path and the ABI's slots apply.
429
+ const carrier = view.kind === 'borrowed-ref' ? view.referent : view;
430
+ // `hasOwnProperty`/`propertyIsEnumerable` off a shape the object-shape
431
+ // protocol claims (see `objectShapePrototypeMethods`'s own comment) render
432
+ // from a template no matter which of those shapes the receiver is, ahead
433
+ // of the general per-kind answer below -- a `record`/`class-ref` is not in
434
+ // `templateReceiverKinds` at all (its OTHER members are real ABI calls),
435
+ // and a `native-record-ref` naming no native type answers 'callable' next.
436
+ const key = operandOf(producer, 'key');
437
+ const staticKey = key?.source.kind === 'constant' ? key.source.text : null;
438
+ const knownObjectShape = carrier.kind === 'record' || carrier.kind === 'class-ref' || (carrier.kind === 'native-record-ref' && carrier.native === null);
439
+ if (staticKey !== null && knownObjectShape && objectShapePrototypeMethods.has(staticKey))
440
+ return 'template';
441
+ if (carrier.kind === 'native-record-ref')
442
+ return carrier.native === null ? 'callable' : 'template';
443
+ return templateReceiverKinds.has(carrier.kind) ? 'template' : 'callable';
444
+ };
@@ -0,0 +1,28 @@
1
+ import type { DeclarationId } from '../identity/ids.js';
2
+ import type { ClassLayout } from './classes.js';
3
+ /** A member installed on the native class prototype or an inherited prototype.
4
+ * This proves presence only. Missing names still require runtime lookup.
5
+ */
6
+ export declare const classPrototypeMemberIsPresent: (classes: ReadonlyMap<DeclarationId, ClassLayout>, declaration: DeclarationId, key: string) => boolean;
7
+ /**
8
+ * Whether a SYMBOL key could name a member this carrier's own layout declares
9
+ * -- a symbol-keyed field, accessor or prototype method, on the shape itself or
10
+ * anywhere up a class's base chain.
11
+ *
12
+ * It exists so `k in o` can be answered for a key that is a symbol VALUE rather
13
+ * than a name the program spelled. A compiler-owned object with shared identity
14
+ * carries a dynamic-property sidecar that answers own-key membership for any
15
+ * runtime key, symbols included, and a symbol cannot reach an inherited
16
+ * STRING-named member the way an arbitrary string can -- the two key spaces are
17
+ * physically disjoint here (`types.ts`'s `sym(<declaration>)` marker). So when
18
+ * this answers `false`, the sidecar is not merely one source of the answer: it
19
+ * is the WHOLE answer, and `in` over that receiver is exactly its verdict.
20
+ *
21
+ * When it answers `true`, the layout owns a symbol-keyed slot with its own
22
+ * presence bit that the sidecar knows nothing about, and which of the two holds
23
+ * the key is undecidable without knowing WHICH symbol -- so the site refuses by
24
+ * name instead, rather than consulting one half and calling it the answer.
25
+ */
26
+ export declare const symbolKeyedMemberIsDeclared: (classes: ReadonlyMap<DeclarationId, ClassLayout>, fields: readonly {
27
+ readonly key: string;
28
+ }[] | null, declaration: DeclarationId | null) => boolean;
@@ -0,0 +1,58 @@
1
+ import { symbolPropertyKeyDeclarationOf } from '../semantics/model/structural-types.js';
2
+ /** A member installed on the native class prototype or an inherited prototype.
3
+ * This proves presence only. Missing names still require runtime lookup.
4
+ */
5
+ export const classPrototypeMemberIsPresent = (classes, declaration, key) => {
6
+ const seen = new Set();
7
+ let current = declaration;
8
+ while (current && !seen.has(current)) {
9
+ seen.add(current);
10
+ const layout = classes.get(current);
11
+ if (!layout)
12
+ return false;
13
+ if (layout.methods.some((method) => method.key === key && method.callable !== null) ||
14
+ layout.accessors.some((accessor) => accessor.key === key && (accessor.getter !== null || accessor.setter !== null)))
15
+ return true;
16
+ current = layout.base;
17
+ }
18
+ return false;
19
+ };
20
+ /**
21
+ * Whether a SYMBOL key could name a member this carrier's own layout declares
22
+ * -- a symbol-keyed field, accessor or prototype method, on the shape itself or
23
+ * anywhere up a class's base chain.
24
+ *
25
+ * It exists so `k in o` can be answered for a key that is a symbol VALUE rather
26
+ * than a name the program spelled. A compiler-owned object with shared identity
27
+ * carries a dynamic-property sidecar that answers own-key membership for any
28
+ * runtime key, symbols included, and a symbol cannot reach an inherited
29
+ * STRING-named member the way an arbitrary string can -- the two key spaces are
30
+ * physically disjoint here (`types.ts`'s `sym(<declaration>)` marker). So when
31
+ * this answers `false`, the sidecar is not merely one source of the answer: it
32
+ * is the WHOLE answer, and `in` over that receiver is exactly its verdict.
33
+ *
34
+ * When it answers `true`, the layout owns a symbol-keyed slot with its own
35
+ * presence bit that the sidecar knows nothing about, and which of the two holds
36
+ * the key is undecidable without knowing WHICH symbol -- so the site refuses by
37
+ * name instead, rather than consulting one half and calling it the answer.
38
+ */
39
+ export const symbolKeyedMemberIsDeclared = (classes, fields, declaration) => {
40
+ const isSymbolKey = (entry) => symbolPropertyKeyDeclarationOf(entry.key) !== null;
41
+ if (fields !== null && fields.some(isSymbolKey))
42
+ return true;
43
+ const seen = new Set();
44
+ let current = declaration;
45
+ while (current && !seen.has(current)) {
46
+ seen.add(current);
47
+ const layout = classes.get(current);
48
+ if (!layout)
49
+ return true;
50
+ if (layout.fields.some(isSymbolKey) ||
51
+ layout.methods.some(isSymbolKey) ||
52
+ layout.accessors.some(isSymbolKey) ||
53
+ (layout.methodOverrides ?? []).some(isSymbolKey))
54
+ return true;
55
+ current = layout.base;
56
+ }
57
+ return false;
58
+ };
@@ -0,0 +1,5 @@
1
+ import type { DeclarationId } from '../identity/ids.js';
2
+ import { type Representation } from '../representation/model.js';
3
+ import type { ClassLayout } from './classes.js';
4
+ /** Native, method-only prototype identity reads do not expose instance fields. */
5
+ export declare const classPrototypeReadOf: (classes: ReadonlyMap<DeclarationId, ClassLayout>, receiver: Representation, key: string, value: Representation) => ClassLayout | null;
@@ -0,0 +1,23 @@
1
+ import { representationKey } from '../representation/model.js';
2
+ /** Native, method-only prototype identity reads do not expose instance fields. */
3
+ export const classPrototypeReadOf = (classes, receiver, key, value) => {
4
+ if (key !== 'prototype' || receiver.kind !== 'constructor-family' || receiver.members.length !== 1 || value.kind !== 'class-ref')
5
+ return null;
6
+ const layout = classes.get(receiver.members[0]);
7
+ if (!layout ||
8
+ layout.instance?.kind !== 'class-ref' ||
9
+ layout.prototypeUnsupportedUses?.length ||
10
+ representationKey(layout.instance) !== representationKey(value))
11
+ return null;
12
+ const seen = new Set();
13
+ for (let declaration = layout.declaration; declaration !== null;) {
14
+ if (seen.has(declaration))
15
+ return null;
16
+ seen.add(declaration);
17
+ const ancestor = classes.get(declaration);
18
+ if (!ancestor || ancestor.nativeBase !== null)
19
+ return null;
20
+ declaration = ancestor.base;
21
+ }
22
+ return layout;
23
+ };
@@ -0,0 +1,26 @@
1
+ import type { DeclarationId, OperationId } from '../identity/ids.js';
2
+ import type { RepresentationDeriver } from '../representation/derive.js';
3
+ import { type RecordField } from '../representation/model.js';
4
+ import type { SealedRepresentationPlan } from '../representation/plan.js';
5
+ import type { SemanticGraph } from '../semantics/model/graph.js';
6
+ import type { ClassLayout } from './classes.js';
7
+ import type { SlotCensus } from './slots.js';
8
+ /** Physical slots are separate from the flattened checker view and overlay evidence. */
9
+ export interface NativeClassStorage {
10
+ readonly fields: readonly RecordField[];
11
+ readonly omittedOverlays: readonly string[];
12
+ }
13
+ /**
14
+ * Keep an overlay until every native access through that ancestor has a
15
+ * descendant-storage dispatch path. An unused overlay needs no such bridge.
16
+ * Runtime-key accesses use the object's own-property protocol. That protocol
17
+ * dispatches on the concrete instance and needs its real fields, not a copy
18
+ * of every possible descendant field in an ancestor.
19
+ */
20
+ export declare const nativeClassFieldUsesOf: (graph: SemanticGraph, plan: SealedRepresentationPlan, deriver: RepresentationDeriver, classes: ReadonlyMap<DeclarationId, ClassLayout>, slots: SlotCensus, ownerDispatchedReads?: ReadonlySet<OperationId>) => ReadonlyMap<DeclarationId, ReadonlySet<string>>;
21
+ /**
22
+ * Real inherited properties keep one slot. Synthetic fields without a native
23
+ * ancestor access are removed; real descendant declarations then own their
24
+ * own storage. Unclassified shape members retain the existing layout.
25
+ */
26
+ export declare const projectNativeClassStorage: (classes: ReadonlyMap<DeclarationId, ClassLayout>, deriver: RepresentationDeriver, uses: ReadonlyMap<DeclarationId, ReadonlySet<string>>) => ReadonlyMap<DeclarationId, NativeClassStorage>;