@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,1394 @@
1
+ import { nativeReflectFieldTransportOf } from './native-reflect-field.js';
2
+ import { canonicalIndexLiteral } from '../representation/array-index.js';
3
+ import { objectPrototypeMemberNames } from '../representation/record-fields.js';
4
+ import { classLayoutOfCopy } from '../projection/classes.js';
5
+ import { classMemberOf, declaredRecordFieldOf } from '../projection/fields.js';
6
+ import { classPrototypeReadOf } from '../projection/class-prototype.js';
7
+ import { representationKey } from '../representation/model.js';
8
+ import { observesNativeCarrierOnly, operandsOfIrOperation, resultOfIrOperation } from './queries.js';
9
+ import { conversionNodeIdOf } from '../conversion/nodes.js';
10
+ import { nativePayloadTransportMatches } from '../conversion/native-payload-transport.js';
11
+ import { hostTemplateFrameOf, nativeCallFrameOf, receivedCallArguments } from './call-entry.js';
12
+ import { censusClassStaticFieldSlots, staticFieldSlotOf } from './class-static-fields.js';
13
+ import { classConstructorBodyMatches, constructMatchesAbi } from './construct-entry.js';
14
+ import { nativeArrayTransportOf } from './native-array-transport.js';
15
+ import { nativeDictionaryTransportOf } from './native-dictionary-transport.js';
16
+ import { nativeRecordIndexHasPropertyOf, nativeRecordIndexTransportOf } from './native-record-index-transport.js';
17
+ import { nativeSequenceTransportOf } from './native-sequence-transport.js';
18
+ import { nativeCallableBindTransportOf } from './native-callable-bind.js';
19
+ import { hasNativePropertyLayout } from './native-fixed-layout.js';
20
+ import { nativeKeyQueryOf } from './native-key-query.js';
21
+ import { nativeCarrierPredicateOf } from './native-carrier-predicate.js';
22
+ import { nativeMergeTransportMatches } from './native-merge-transport.js';
23
+ import { nativeCallableFlowOf } from './callable-class-flow.js';
24
+ import { nativeSuperInitializationOf } from './native-class-initialization.js';
25
+ import { nativeClassAccessorEntryOf } from './native-class-accessor.js';
26
+ import { nativeClassConstructionOf } from './native-class-construction.js';
27
+ import { nativeHostConstructionOf } from './native-host-construction.js';
28
+ import { closePhysicalClassReflection } from './physical-class-reflection.js';
29
+ import { absentClassArmRead } from './absent-class-arm.js';
30
+ import { nativeAbsentPropertyReadOf } from './native-absent-property.js';
31
+ /**
32
+ * Remove a computed-read candidate whose receiver did not receive a sealed
33
+ * keys-only demand. This is deliberately a post-census operation: the
34
+ * lowering recipe owns finite-key and conversion eligibility, while this
35
+ * authority decides whether the receiver's emitted protocol makes that recipe
36
+ * available. Missing rows fail closed and leave the ordinary dynamic read.
37
+ */
38
+ export const finalizeTypedComputedReads = (bodies, exposure) => {
39
+ const finalized = new Map();
40
+ let changedAny = false;
41
+ for (const [bodyId, body] of bodies) {
42
+ let changed = false;
43
+ const blocks = new Map(body.blocks);
44
+ for (const [blockId, block] of body.blocks) {
45
+ let blockChanged = false;
46
+ const operations = block.operations.map((operation) => {
47
+ if (operation.kind !== 'get' || operation.typedComputedRead === undefined)
48
+ return operation;
49
+ const receiverKey = representationKey(operation.receiver.representation);
50
+ const resultKey = representationKey(operation.result.representation);
51
+ const shapeId = operation.receiver.representation.kind === 'record' ? operation.receiver.representation.shapeId : null;
52
+ const demand = shapeId === null ? undefined : exposure.records.get(shapeId);
53
+ const recipe = operation.typedComputedRead;
54
+ if (exposure.complete &&
55
+ recipe.kind === 'closed-record' &&
56
+ recipe.receiver === receiverKey &&
57
+ recipe.result === resultKey &&
58
+ demand?.level === 'keys-only')
59
+ return operation;
60
+ blockChanged = true;
61
+ changed = true;
62
+ const { typedComputedRead: _typedComputedRead, ...withoutRecipe } = operation;
63
+ return withoutRecipe;
64
+ });
65
+ if (blockChanged)
66
+ blocks.set(blockId, { ...block, operations });
67
+ }
68
+ if (changed)
69
+ changedAny = true;
70
+ finalized.set(bodyId, changed ? { ...body, blocks } : body);
71
+ }
72
+ return changedAny ? finalized : bodies;
73
+ };
74
+ const objectSurfacesOf = (representation) => {
75
+ switch (representation.kind) {
76
+ case 'record':
77
+ case 'record-with-index':
78
+ case 'class-ref':
79
+ case 'native-record-ref':
80
+ case 'array-object':
81
+ case 'keyed-collection':
82
+ case 'dictionary':
83
+ case 'native-handle':
84
+ return [representation];
85
+ case 'borrowed-ref':
86
+ return objectSurfacesOf(representation.referent);
87
+ case 'optional':
88
+ return objectSurfacesOf(representation.payload);
89
+ case 'tagged-union':
90
+ return representation.arms.flatMap((arm) => objectSurfacesOf(arm.value));
91
+ case 'proxy-object':
92
+ return [...objectSurfacesOf(representation.target), ...objectSurfacesOf(representation.handler)];
93
+ default:
94
+ return [];
95
+ }
96
+ };
97
+ /** Direct representation children that may contain another native object surface. */
98
+ const directChildrenOf = (representation, classes, deriver) => {
99
+ switch (representation.kind) {
100
+ case 'optional':
101
+ return [representation.payload];
102
+ case 'borrowed-ref':
103
+ return [representation.referent];
104
+ case 'tagged-union':
105
+ return representation.arms.map((arm) => arm.value);
106
+ case 'function':
107
+ case 'function-family':
108
+ case 'constructor-family':
109
+ case 'constructor-value-dispatch':
110
+ case 'function-value-dispatch':
111
+ case 'function-value-family':
112
+ return callableChildrenOf(representation.abi);
113
+ case 'function-and-constructor':
114
+ return [...callableChildrenOf(representation.call), ...callableChildrenOf(representation.construct)];
115
+ case 'iterator':
116
+ return [representation.element, representation.resume, representation.completion];
117
+ case 'promise':
118
+ return [representation.value];
119
+ case 'native-sequence':
120
+ case 'dense-buffer':
121
+ return [representation.element];
122
+ case 'proxy-object':
123
+ return [representation.target, representation.handler];
124
+ case 'record':
125
+ return [...representation.fields.map((field) => field.value), ...representation.accessors.map((accessor) => accessor.value)];
126
+ case 'record-with-index':
127
+ return [...representation.fields.map((field) => field.value), ...representation.indexes.map((index) => index.value)];
128
+ case 'class-ref': {
129
+ const layout = classes.get(representation.declaration);
130
+ if (layout?.nativeStorage !== undefined) {
131
+ const raw = deriver?.layoutOf(representation.shapeId);
132
+ return [
133
+ ...layout.nativeStorage.fields.map((field) => field.value),
134
+ ...layout.staticFields.flatMap((field) => (field.representation ? [field.representation] : [])),
135
+ ...(raw?.kind === 'record' ? raw.accessors.map((accessor) => accessor.value) : []),
136
+ ...(raw?.kind === 'record-with-index' ? raw.indexes.map((index) => index.value) : [])
137
+ ];
138
+ }
139
+ return [
140
+ ...(layout?.fields.flatMap((field) => (field.representation ? [field.representation] : [])) ?? []),
141
+ ...(layout?.staticFields.flatMap((field) => (field.representation ? [field.representation] : [])) ?? []),
142
+ ...(deriver ? [deriver.layoutOf(representation.shapeId)] : [])
143
+ ];
144
+ }
145
+ case 'native-record-ref':
146
+ return deriver ? [deriver.layoutOf(representation.shapeId)] : [];
147
+ case 'array-object':
148
+ return [representation.element, ...(representation.extension ?? []).map((field) => field.value)];
149
+ case 'dictionary':
150
+ return [representation.value];
151
+ case 'keyed-collection':
152
+ return representation.value ? [representation.key, representation.value] : [representation.key];
153
+ case 'native-handle':
154
+ return [representation.call, representation.construct].flatMap((abi) => (abi ? callableChildrenOf(abi) : []));
155
+ default:
156
+ return [];
157
+ }
158
+ };
159
+ const callableChildrenOf = (abi) => [
160
+ abi.result,
161
+ ...(abi.receiver ? [abi.receiver] : []),
162
+ ...abi.parameters.map((parameter) => parameter.value)
163
+ ];
164
+ /**
165
+ * Publishing a callable publishes its possible return values, not objects
166
+ * merely named by its input convention. Those inputs arrive from the caller;
167
+ * the call operation accounts for their exposure. Decoding an argument into
168
+ * a native frame does not publish that frame's fields back to dynamic code.
169
+ * Keep the full type inventory in directChildrenOf for candidate discovery.
170
+ */
171
+ const publishedChildrenOf = (representation, classes, deriver) => {
172
+ switch (representation.kind) {
173
+ case 'function':
174
+ case 'function-family':
175
+ case 'constructor-family':
176
+ case 'constructor-value-dispatch':
177
+ case 'function-value-dispatch':
178
+ case 'function-value-family':
179
+ return [representation.abi.result];
180
+ case 'function-and-constructor':
181
+ return [representation.call.result, representation.construct.result];
182
+ case 'native-handle':
183
+ return [representation.call, representation.construct].flatMap((abi) => (abi ? [abi.result] : []));
184
+ default:
185
+ return directChildrenOf(representation, classes, deriver);
186
+ }
187
+ };
188
+ const callableAbiOf = (representation) => {
189
+ switch (representation.kind) {
190
+ case 'function':
191
+ case 'function-family':
192
+ case 'function-value-dispatch':
193
+ case 'function-value-family':
194
+ return representation.abi;
195
+ case 'function-and-constructor':
196
+ return representation.call;
197
+ default:
198
+ return null;
199
+ }
200
+ };
201
+ /** A callable value does not publish the values its signature says it could return. */
202
+ const isCallableCarrier = (representation) => {
203
+ switch (representation.kind) {
204
+ case 'function':
205
+ case 'function-family':
206
+ case 'function-value-dispatch':
207
+ case 'function-value-family':
208
+ case 'constructor-family':
209
+ case 'constructor-value-dispatch':
210
+ case 'function-and-constructor':
211
+ return true;
212
+ case 'optional':
213
+ return isCallableCarrier(representation.payload);
214
+ case 'borrowed-ref':
215
+ return isCallableCarrier(representation.referent);
216
+ case 'tagged-union':
217
+ return representation.arms.every((arm) => arm.value.kind === 'undefined' || arm.value.kind === 'null' || isCallableCarrier(arm.value));
218
+ default:
219
+ return false;
220
+ }
221
+ };
222
+ /** Holding a deferred result does not inspect its payload. Actual invocation,
223
+ * stepping, awaiting and publication operations below own that demand. */
224
+ const isDeferredCarrier = (representation) => {
225
+ if (isCallableCarrier(representation) || representation.kind === 'iterator' || representation.kind === 'promise')
226
+ return true;
227
+ if (representation.kind === 'optional')
228
+ return isDeferredCarrier(representation.payload);
229
+ if (representation.kind === 'borrowed-ref')
230
+ return isDeferredCarrier(representation.referent);
231
+ return (representation.kind === 'tagged-union' &&
232
+ representation.arms.every((arm) => arm.value.kind === 'undefined' || arm.value.kind === 'null' || isDeferredCarrier(arm.value)));
233
+ };
234
+ const abiMatches = (left, right) => left.restFrom === right.restFrom &&
235
+ representationKey(left.result) === representationKey(right.result) &&
236
+ (left.receiver === null
237
+ ? right.receiver === null
238
+ : right.receiver !== null && representationKey(left.receiver) === representationKey(right.receiver)) &&
239
+ left.parameters.length === right.parameters.length &&
240
+ left.parameters.every((parameter, index) => {
241
+ const counterpart = right.parameters[index];
242
+ return counterpart !== undefined && representationKey(parameter.value) === representationKey(counterpart.value);
243
+ });
244
+ const constantsOf = (operations) => {
245
+ const result = new Map();
246
+ for (const operation of operations)
247
+ if (operation.kind === 'constant')
248
+ result.set(String(operation.result.id), operation);
249
+ return result;
250
+ };
251
+ const keyOf = (operand, constants) => {
252
+ if (!operand)
253
+ return null;
254
+ const constant = constants.get(String(operand.value));
255
+ return constant && (constant.literal === 'string' || constant.literal === 'number') ? constant.text : null;
256
+ };
257
+ const receiverOf = (operation) => {
258
+ switch (operation.kind) {
259
+ case 'get':
260
+ case 'set':
261
+ case 'delete':
262
+ case 'has-property':
263
+ case 'define-own-property':
264
+ case 'own-property-keys':
265
+ case 'get-iterator':
266
+ return operation.receiver;
267
+ default:
268
+ return null;
269
+ }
270
+ };
271
+ const keyOperandOf = (operation) => {
272
+ switch (operation.kind) {
273
+ case 'get':
274
+ case 'set':
275
+ case 'delete':
276
+ case 'has-property':
277
+ case 'define-own-property':
278
+ return operation.key;
279
+ default:
280
+ return null;
281
+ }
282
+ };
283
+ const extendsClass = (classes, candidate, ancestor) => {
284
+ const seen = new Set();
285
+ let current = candidate;
286
+ while (current !== null && !seen.has(current)) {
287
+ if (current === ancestor)
288
+ return true;
289
+ seen.add(current);
290
+ current = classes.get(current)?.base ?? null;
291
+ }
292
+ return false;
293
+ };
294
+ const valueRepresentationOf = (operation) => {
295
+ switch (operation.kind) {
296
+ case 'get':
297
+ return operation.result.representation;
298
+ case 'set':
299
+ case 'define-own-property':
300
+ return operation.value.representation;
301
+ default:
302
+ return null;
303
+ }
304
+ };
305
+ /**
306
+ * A write the emitter lands in the declared member's own storage, converting
307
+ * the value through the census node for exactly `value -> field` -- the
308
+ * mirror of the read side's payload-transport allowance.
309
+ *
310
+ * three's uniform stores are the shape: `uniforms.tEquirect.value = texture`
311
+ * (`WebGLCubeRenderTarget`), `uniforms.map.value = material.map`
312
+ * (`WebGLMaterials`), the shadow-map and background uniforms. The uniform
313
+ * record's `value` is a native sum of every carrier the program writes into
314
+ * it, and the stored `Texture` enters it through
315
+ * `gea::native-sum::inject-alternative` -- `Sum::ofArm<k>(ref)`, which neither
316
+ * allocates, nor touches a field protocol, nor changes the payload it wraps.
317
+ * Treated as an unproven slot, each such store published the written value's
318
+ * whole carrier graph although the emitted C++ is one typed member
319
+ * assignment; a later dynamic use of the uniform is censused on the sum
320
+ * carrier itself and reaches every arm from there.
321
+ *
322
+ * A `define-own-property` qualifies only with the default data descriptor --
323
+ * for this allowance AND for the exact-carrier and static-slot proofs beside
324
+ * it. That is the emitter's own condition (`emit-properties.ts`'s
325
+ * `isDefaultDataDescriptor`) for taking the ordinary member store. Any other
326
+ * descriptor has no native member spelling at all: `emitFieldStoreLines`
327
+ * admits it only into a `dictionary` table or a record's index sidecar, and
328
+ * `recordIndexSidecarTableOf` declines a key the struct declares, so a
329
+ * declared slot's non-default definition is either refused at emission or
330
+ * lands in a sidecar whose non-disjoint spelling
331
+ * (`emitRecordIndexSidecarStore`) boxes the value into a
332
+ * `gea::PropertyDescriptor` for `gea_defineOwnField`. Neither is the typed
333
+ * member store this census would otherwise be certifying.
334
+ */
335
+ const storesIntoDeclaredSlot = (operation) => operation.kind === 'set' ||
336
+ (operation.kind === 'define-own-property' &&
337
+ operation.attributes.writable &&
338
+ operation.attributes.enumerable &&
339
+ operation.attributes.configurable);
340
+ const callMatchesAbi = (operation, abi) => {
341
+ const resultMatches = abi.result.kind === 'void'
342
+ ? operation.result === null
343
+ : operation.result !== null && representationKey(operation.result.representation) === representationKey(abi.result);
344
+ const receiverMatches = abi.receiver === null
345
+ ? operation.receiver === null
346
+ : operation.receiver !== null && representationKey(operation.receiver.representation) === representationKey(abi.receiver);
347
+ return (resultMatches &&
348
+ receiverMatches &&
349
+ operation.arguments.length === abi.parameters.length &&
350
+ operation.arguments.every((argument, index) => representationKey(argument.representation) === representationKey(abi.parameters[index].value)));
351
+ };
352
+ const promote = (rows, representation, reason, classes, deriver, visited = new Set(), publishedChildrenCache = new Map(), observe) => {
353
+ const work = [];
354
+ const enqueueNativeChildren = (value, childReason, parent = null) => {
355
+ const directSurfaces = objectSurfacesOf(value);
356
+ if (directSurfaces.length > 0) {
357
+ for (const surface of directSurfaces)
358
+ work.push({ value: surface, reason: childReason, parent });
359
+ return;
360
+ }
361
+ const pending = [value];
362
+ const pendingSeen = new Set();
363
+ while (pending.length > 0) {
364
+ const next = pending.pop();
365
+ if (!next)
366
+ continue;
367
+ const identity = representationKey(next);
368
+ if (pendingSeen.has(identity))
369
+ continue;
370
+ pendingSeen.add(identity);
371
+ const surfaces = objectSurfacesOf(next);
372
+ if (surfaces.length > 0) {
373
+ for (const surface of surfaces)
374
+ work.push({ value: surface, reason: childReason, parent });
375
+ }
376
+ else {
377
+ const children = publishedChildrenCache.get(identity) ?? publishedChildrenOf(next, classes, deriver);
378
+ publishedChildrenCache.set(identity, children);
379
+ pending.push(...children);
380
+ }
381
+ }
382
+ };
383
+ enqueueNativeChildren(representation, reason);
384
+ while (work.length > 0) {
385
+ const item = work.pop();
386
+ if (!item)
387
+ continue;
388
+ const surfaces = objectSurfacesOf(item.value);
389
+ for (const surface of surfaces) {
390
+ const key = representationKey(surface);
391
+ observe?.(key, item.parent);
392
+ const row = rows.get(key) ?? { level: 'keys-only', reasons: new Set(), representations: new Set() };
393
+ row.level = 'full';
394
+ row.reasons.add(item.reason);
395
+ row.representations.add(key);
396
+ rows.set(key, row);
397
+ // A base hook is needed to service the exposed descendant's inherited
398
+ // fields. That support does not publish an arbitrary base instance and
399
+ // therefore cannot expose sibling subclasses. Keep separate expansion
400
+ // states: a later actual base escape must still visit its descendants.
401
+ const expansion = `${item.inheritedProtocolOnly ? 'inherited' : 'instances'}:${key}`;
402
+ if (visited.has(expansion))
403
+ continue;
404
+ visited.add(expansion);
405
+ if (surface.kind === 'class-ref') {
406
+ for (const [declaration, layout] of classes) {
407
+ if (declaration === surface.declaration || !layout.instance)
408
+ continue;
409
+ if (extendsClass(classes, surface.declaration, declaration))
410
+ work.push({
411
+ value: layout.instance,
412
+ reason: `${item.reason}:inherited-protocol`,
413
+ parent: key,
414
+ inheritedProtocolOnly: true
415
+ });
416
+ else if (!item.inheritedProtocolOnly && extendsClass(classes, declaration, surface.declaration))
417
+ work.push({ value: layout.instance, reason: `${item.reason}:class-family`, parent: key });
418
+ }
419
+ }
420
+ const identity = representationKey(surface);
421
+ const children = publishedChildrenCache.get(identity) ?? publishedChildrenOf(surface, classes, deriver);
422
+ publishedChildrenCache.set(identity, children);
423
+ for (const child of children)
424
+ enqueueNativeChildren(child, `${item.reason}:nested`, key);
425
+ }
426
+ }
427
+ };
428
+ const declaredFieldOf = (surface, key, classes, deriver) => {
429
+ if (deriver) {
430
+ const field = declaredRecordFieldOf(deriver, surface, key, classes);
431
+ if (field !== null)
432
+ return field;
433
+ }
434
+ if (surface.kind === 'record' || surface.kind === 'record-with-index')
435
+ return surface.fields.find((field) => field.key === key) ?? null;
436
+ // `declaredRecordFieldOf` (`projection/fields.ts`) answers for `record`,
437
+ // `record-with-index`, `class-ref` and `native-record-ref` -- it has no
438
+ // case for `array-object` at all. An interface's own fields ADDED on top
439
+ // of the Array it extends (`NodeArray<T> extends ReadonlyArray<T>,
440
+ // ReadonlyTextRange` puts `pos`/`end`/`hasTrailingComma` on every node
441
+ // list -- see `representation/model.ts`'s doc on `array-object.extension`)
442
+ // therefore came back `null` from the deriver-first branch above whenever a
443
+ // deriver was available, which is every real compilation, and every such
444
+ // read fell through to the fully unrestricted `unproven-native-slot-value`
445
+ // path even though the extension sidecar is exactly as closed a field list
446
+ // as an ordinary record's. Fall back to the array's own sidecar, which the
447
+ // deriver never had authority over in the first place.
448
+ if (surface.kind === 'array-object')
449
+ return surface.extension?.find((field) => field.key === key) ?? null;
450
+ return null;
451
+ };
452
+ /**
453
+ * A named GET off a surface `declaredFieldOf` HAS authority over
454
+ * (`hasDeclaredFieldAuthority`) for a key that names no declared field,
455
+ * method or accessor there, but that the language itself guarantees is
456
+ * present through `Object.prototype` -- `.toString`, `.hasOwnProperty`,
457
+ * `.constructor`, and the rest of `objectPrototypeMemberNames`
458
+ * (`representation/record-fields.ts`, the identical closed list
459
+ * `classFamilyLacksKey` already trusts to say a key is not a real absence).
460
+ *
461
+ * `knownNativeMemberReadOf` cannot answer this: it is deliberately restricted
462
+ * to surfaces WITHOUT field authority, because for an authoritative surface a
463
+ * *found* field whose carrier disagrees is a real defect that must keep its
464
+ * promotion. This is a different sub-case -- the authority was asked and said
465
+ * "no such OWN field, method or accessor" -- which is precisely what is true
466
+ * of every ordinary object's inherited `Object.prototype` members: they are
467
+ * never own fields, so no struct member could ever have named them, and the
468
+ * struct's silence is not evidence of anything unproven. The result carrier
469
+ * is the same evidence `knownNativeMemberReadOf` already leans on: a `get`
470
+ * the checker resolved to a concrete, non-`any` type proves the read already
471
+ * settled on a value nothing here needs to invent.
472
+ *
473
+ * A plain assignment cannot ever reach this (guarded by `operation.kind ===
474
+ * 'get'` at the call site): shadowing one of these names with an own
475
+ * property is a real write this proof does not cover, and stays unproven.
476
+ */
477
+ const objectPrototypeMemberReadOf = (surface, key, value) => hasDeclaredFieldAuthority(surface) && objectPrototypeMemberNames.has(key) && value.kind !== 'dynamic' && value.kind !== 'unresolved';
478
+ /**
479
+ * Whether `declaredRecordFieldOf` -- the authority `declaredFieldOf` delegates
480
+ * to -- can answer about this surface's members AT ALL.
481
+ *
482
+ * It reads a record's own fields, a class's layout, and the shape behind a
483
+ * `native-record-ref`. For every other native surface it returns null, and the
484
+ * named-slot test below could not tell that answer apart from "this object has
485
+ * no such member" -- so a member read off `Math`, an array, a typed array or a
486
+ * Map was filed as an unproven slot value.
487
+ */
488
+ const hasDeclaredFieldAuthority = (surface) => surface.kind === 'record' || surface.kind === 'record-with-index' || surface.kind === 'class-ref' || surface.kind === 'native-record-ref';
489
+ const primitiveLeaf = (representation) => representation.kind === 'undefined' ||
490
+ representation.kind === 'null' ||
491
+ representation.kind === 'scalar' ||
492
+ representation.kind === 'string';
493
+ /**
494
+ * A read result that can hold no object, so it publishes none. The frame
495
+ * census types `arguments[ 100 ]` exactly `undefined` when no closed caller
496
+ * fills that position; the element such a read never returns owes no protocol.
497
+ */
498
+ const holdsNoObject = (representation) => {
499
+ if (representation.kind === 'optional')
500
+ return primitiveLeaf(representation.payload);
501
+ if (representation.kind === 'tagged-union')
502
+ return representation.arms.every((arm) => primitiveLeaf(arm.value));
503
+ return primitiveLeaf(representation);
504
+ };
505
+ /**
506
+ * A read of a declared member off a native surface no field authority covers.
507
+ *
508
+ * This is `knownClassMemberReadOf`'s argument, made available to the carriers
509
+ * that have no `ClassLayout` to consult: reading a member the carrier declares
510
+ * hands back that member's own carrier, so the read proves nothing is unproven
511
+ * -- it publishes no field of the receiver, and the value it produces is the
512
+ * one the declaration already stated.
513
+ *
514
+ * The evidence that the key names a declared member is the RESULT CARRIER. A
515
+ * key naming nothing on a typed receiver is typed `any` by the checker and
516
+ * arrives here as `dynamic`, and a member the representation layer could not
517
+ * resolve arrives as `unresolved`; either one keeps the promotion. Receivers
518
+ * that are themselves dynamic never reach this test at all, because
519
+ * `objectSurfacesOf` yields them no surface.
520
+ *
521
+ * Restricted to surfaces with no field authority ON PURPOSE. Where one exists
522
+ * and says the declared carrier differs from the value's, that is a real
523
+ * carrier disagreement about storage the compiler owns, and it must keep its
524
+ * promotion; this answers only the case where nothing was ever asked.
525
+ *
526
+ * What this cost: `Object.defineProperty` read off `ObjectConstructor` returns
527
+ * a callable whose signature the checker instantiated with `Material`, and
528
+ * promoting that callable walks its ABI -- so reading the member promoted the
529
+ * class in its signature. The three.js app had ~1,350 such reads.
530
+ */
531
+ const knownNativeMemberReadOf = (surface, key, value) => !hasDeclaredFieldAuthority(surface) &&
532
+ !(surface.kind === 'array-object' && canonicalIndexLiteral(key) !== null) &&
533
+ value.kind !== 'dynamic' &&
534
+ value.kind !== 'unresolved';
535
+ const knownClassMemberReadOf = (surface, key, classes) => {
536
+ if (surface.kind !== 'class-ref')
537
+ return false;
538
+ const seen = new Set();
539
+ let declaration = surface.declaration;
540
+ while (declaration !== null && !seen.has(declaration)) {
541
+ seen.add(declaration);
542
+ const layout = classes.get(declaration);
543
+ if (!layout)
544
+ return false;
545
+ if (layout.methods.some((member) => member.key === key) || layout.accessors.some((member) => member.key === key))
546
+ return true;
547
+ if (layout.fields.some((member) => member.key === key))
548
+ return false;
549
+ declaration = layout.base;
550
+ }
551
+ return false;
552
+ };
553
+ /**
554
+ * Sealed reflection exposure census. Every emitted candidate is seeded as
555
+ * `keys-only`; only dynamic/unknown boundaries promote it to `full`.
556
+ */
557
+ export const reflectionExposureOf = (bodies, classes, deriver, options) => {
558
+ const rows = new Map();
559
+ const directChildrenCache = new Map();
560
+ const publishedChildrenCache = new Map();
561
+ const propertyLayoutCache = new Map();
562
+ const nativePropertyLayoutOf = (representation) => hasNativePropertyLayout(representation, deriver, classes, new Set(), propertyLayoutCache);
563
+ const certifiedComputedReadOf = (operation) => {
564
+ if (operation.kind !== 'get' || operation.typedComputedRead?.kind !== 'closed-record')
565
+ return false;
566
+ return (operation.receiver.representation.kind === 'record' &&
567
+ operation.typedComputedRead.receiver === representationKey(operation.receiver.representation) &&
568
+ operation.typedComputedRead.result === representationKey(operation.result.representation));
569
+ };
570
+ const expandedFull = new Set();
571
+ const unrestricted = new Set();
572
+ const fieldOperations = new Map();
573
+ const origins = [];
574
+ const affecting = new Map();
575
+ const parents = new Map();
576
+ let currentOperation = null;
577
+ const promoteFull = (representation, reason, carrier = representation) => {
578
+ const origin = origins.length;
579
+ if (options.trace)
580
+ origins.push({ reason, carrier, operation: currentOperation });
581
+ const observe = (key, parent) => {
582
+ unrestricted.add(key);
583
+ if (!options.trace)
584
+ return;
585
+ const entries = affecting.get(key) ?? new Set();
586
+ entries.add(origin);
587
+ affecting.set(key, entries);
588
+ if (parent !== null) {
589
+ const sources = parents.get(key) ?? new Set();
590
+ sources.add(parent);
591
+ parents.set(key, sources);
592
+ }
593
+ };
594
+ promote(rows, representation, reason, classes, deriver, expandedFull, publishedChildrenCache, observe);
595
+ };
596
+ /**
597
+ * Retain the protocol for this surface itself without claiming that its
598
+ * fields/children are dynamically published. A sealed Array/Map/callable
599
+ * field can require its own hooks while the containing class is accessed
600
+ * only through fixed native slots; propagating the layout-proof failure into
601
+ * every child would turn that independent demand into a false escape.
602
+ * Actual dynamic reads, calls, conversions and publications continue to use
603
+ * `promoteFull`, which closes the entire reachable carrier graph.
604
+ */
605
+ const markFullOnly = (representation, reason) => {
606
+ const pending = [representation];
607
+ const seen = new Set();
608
+ while (pending.length > 0) {
609
+ const value = pending.pop();
610
+ if (!value)
611
+ continue;
612
+ const identity = representationKey(value);
613
+ if (seen.has(identity))
614
+ continue;
615
+ seen.add(identity);
616
+ const surfaces = objectSurfacesOf(value);
617
+ if (surfaces.length > 0) {
618
+ for (const surface of surfaces) {
619
+ const key = representationKey(surface);
620
+ const row = rows.get(key) ?? { level: 'keys-only', reasons: new Set(), representations: new Set() };
621
+ row.level = 'full';
622
+ row.reasons.add(reason);
623
+ unrestricted.add(key);
624
+ row.representations.add(key);
625
+ rows.set(key, row);
626
+ }
627
+ continue;
628
+ }
629
+ const children = publishedChildrenCache.get(identity) ?? publishedChildrenOf(value, classes, deriver);
630
+ publishedChildrenCache.set(identity, children);
631
+ pending.push(...children);
632
+ }
633
+ };
634
+ /**
635
+ * A `ClassName.KEY` slot the whole-program static-field census gave native
636
+ * storage of exactly this carrier.
637
+ *
638
+ * `declaredFieldOf` has no answer for a `constructor-family`: a class layout
639
+ * records the static fields a class BODY declares, and the dominant static
640
+ * idiom in ordinary JavaScript writes them from module scope instead
641
+ * (`Color.NAMES = _colorKeywords`, `Object3D.DEFAULT_UP = ...`). Reading that
642
+ * silence as "this key names no slot" promoted the assigned VALUE to a full
643
+ * dynamic field protocol -- 296 boxes for the colour-keyword table alone,
644
+ * from one assignment -- while the target was already storing it in a typed
645
+ * `gea::Ref` global with no `gea::Value` anywhere in sight.
646
+ *
647
+ * The census is the authority that publishes that storage, so it is what
648
+ * gets asked, rather than a shape test invented here that could disagree
649
+ * with the slot actually emitted. It refuses a computed key, a key no
650
+ * `constant` accounts for, a static method or accessor, and any pair of
651
+ * writes whose carriers disagree -- so a slot it answers for is one carrier,
652
+ * fixed, and the equality below is the whole proof.
653
+ */
654
+ const staticFieldSlots = censusClassStaticFieldSlots(bodies, classes);
655
+ const nativeStaticSlotHolds = (receiver, key, value) => {
656
+ if (value === null)
657
+ return false;
658
+ if (receiver.kind === 'optional')
659
+ return nativeStaticSlotHolds(receiver.payload, key, value);
660
+ if (receiver.kind === 'borrowed-ref')
661
+ return nativeStaticSlotHolds(receiver.referent, key, value);
662
+ if (receiver.kind !== 'constructor-family')
663
+ return false;
664
+ const slot = staticFieldSlotOf(staticFieldSlots, classes, receiver.members, key);
665
+ return slot !== null && representationKey(slot) === representationKey(value);
666
+ };
667
+ const promoteNamedField = (receiver, key, operation) => {
668
+ const origin = origins.length;
669
+ if (options.trace)
670
+ origins.push({ reason: 'named-field-operation', carrier: receiver, operation });
671
+ const surfaces = new Map(objectSurfacesOf(receiver).map((surface) => [representationKey(surface), surface]));
672
+ for (const surface of [...surfaces.values()]) {
673
+ if (surface.kind !== 'class-ref')
674
+ continue;
675
+ for (const layout of classes.values())
676
+ if (layout.instance &&
677
+ (extendsClass(classes, surface.declaration, layout.declaration) || extendsClass(classes, layout.declaration, surface.declaration)))
678
+ surfaces.set(representationKey(layout.instance), layout.instance);
679
+ }
680
+ for (const [identity, surface] of surfaces) {
681
+ const row = rows.get(identity) ?? { level: 'keys-only', reasons: new Set(), representations: new Set() };
682
+ row.level = 'full';
683
+ row.reasons.add('named-field-operation');
684
+ row.representations.add(identity);
685
+ rows.set(identity, row);
686
+ const fields = fieldOperations.get(identity) ?? new Map();
687
+ const uses = fields.get(key) ?? new Set();
688
+ const nativeReflect = operation.kind === 'call'
689
+ ? nativeReflectFieldTransportOf(operation, declaredFieldOf(surface, key, classes, deriver), deriver)
690
+ : null;
691
+ if (nativeReflect)
692
+ uses.add(nativeReflect);
693
+ else if (operation.kind === 'get' ||
694
+ (operation.kind === 'compute' && operation.operator === 'ObjectTag') ||
695
+ (operation.kind === 'call' &&
696
+ (operation.intrinsicReflection === 'get' || operation.intrinsicReflection === 'getOwnPropertyDescriptor')))
697
+ uses.add('read');
698
+ else if (operation.kind === 'set' || (operation.kind === 'call' && operation.intrinsicReflection === 'set'))
699
+ uses.add('write');
700
+ else if (operation.kind === 'define-own-property')
701
+ uses.add('define');
702
+ fields.set(key, uses);
703
+ fieldOperations.set(identity, fields);
704
+ if (options.trace) {
705
+ const entries = affecting.get(identity) ?? new Set();
706
+ entries.add(origin);
707
+ affecting.set(identity, entries);
708
+ }
709
+ // A named read can publish that field's object, never every sibling's.
710
+ if (operation.kind === 'get' ||
711
+ (operation.kind === 'call' &&
712
+ (operation.intrinsicReflection === 'get' || operation.intrinsicReflection === 'getOwnPropertyDescriptor') &&
713
+ nativeReflect === null)) {
714
+ const field = declaredFieldOf(surface, key, classes, deriver);
715
+ if (field)
716
+ promoteFull(field.value, 'named-field-result');
717
+ else if (surface.kind === 'array-object' &&
718
+ canonicalIndexLiteral(key) !== null &&
719
+ operation.result !== null &&
720
+ !holdsNoObject(operation.result.representation))
721
+ promoteFull(surface.element, 'indexed-array-field-result');
722
+ }
723
+ }
724
+ };
725
+ const carriesCallable = (representation, seen = new Set()) => {
726
+ const identity = representationKey(representation);
727
+ if (seen.has(identity))
728
+ return false;
729
+ seen.add(identity);
730
+ if (callableAbiOf(representation) !== null ||
731
+ representation.kind === 'constructor-family' ||
732
+ representation.kind === 'constructor-value-dispatch')
733
+ return true;
734
+ if (objectSurfacesOf(representation).length > 0)
735
+ return false;
736
+ const children = directChildrenCache.get(identity) ?? directChildrenOf(representation, classes, deriver);
737
+ directChildrenCache.set(identity, children);
738
+ return children.some((child) => carriesCallable(child, seen));
739
+ };
740
+ const candidates = new Map();
741
+ // A retained function value can be inspected without its body ever running.
742
+ // Use the callable census's complete entry/escape result, recomputed for this
743
+ // exact program, rather than treating allocation as execution or trusting a
744
+ // stale flag attached before another caller was added. Layout and ABI lookup
745
+ // below still retain every body; only impossible execution contributes no
746
+ // dynamic-operation demand.
747
+ const callableReads = [];
748
+ const enteredBodies = options.shakeComplete
749
+ ? nativeCallableFlowOf(bodies, options.placements ?? new Map(), classes, options.conversions, options.trace ? (operation, reason) => callableReads.push({ operation, reason }) : undefined, deriver).enteredBodies
750
+ : null;
751
+ const operations = bodies
752
+ .filter((body) => enteredBodies === null || enteredBodies.has(body.owner))
753
+ .flatMap((body) => body.blockOrder.flatMap((blockId) => {
754
+ const block = body.blocks.get(blockId);
755
+ return block ? [...block.operations, block.terminator] : [];
756
+ }));
757
+ // `GEA_REFLECTION_DEBUG=<representation-key substring>` names, on stderr,
758
+ // every body the callable flow left un-entered (so its operations count for
759
+ // no demand at all) and the final row of every surface whose key contains
760
+ // the substring. A struct emitted WITHOUT the own-field protocol while an
761
+ // emitted body deletes or writes an expando on it is exactly this pair
762
+ // disagreeing, and neither side says so on its own: the emitter renders the
763
+ // body because reachability kept it, the census skipped it because the flow
764
+ // never saw a call enter it.
765
+ const reflectionWatch = process.env.GEA_REFLECTION_DEBUG;
766
+ if (reflectionWatch !== undefined && enteredBodies !== null)
767
+ for (const body of bodies)
768
+ if (!enteredBodies.has(body.owner))
769
+ console.error(`[REFLECTION-UNENTERED] source=${String(body.sourceOwner)} owner=${String(body.owner)}`);
770
+ // A template-backed intrinsic does not materialize its callee as a JS
771
+ // callable. Do not infer a publication of the intrinsic ABI's return type
772
+ // from a value used exclusively by sealed native definitions.
773
+ // lower-invocation publishes intrinsicReflection only for an authenticated
774
+ // template callee. Its actual field effects are handled below; its unused
775
+ // function-value ABI cannot expose the descriptor that template constructs.
776
+ const nativeTemplateCallee = (operation) => operation.kind === 'call' &&
777
+ (operation.fixedDataDefinition?.nativeFieldProtocol === 'unused' || operation.intrinsicReflection !== undefined);
778
+ const nativeDefinitionCallees = new Set();
779
+ for (const operation of operations)
780
+ if (operation.kind === 'call' && nativeTemplateCallee(operation))
781
+ nativeDefinitionCallees.add(operation.callee.value);
782
+ for (const operation of operations)
783
+ for (const operand of operandsOfIrOperation(operation))
784
+ if (!(operation.kind === 'call' &&
785
+ nativeTemplateCallee(operation) &&
786
+ operand.value === operation.callee.value &&
787
+ operation.receiver?.value !== operand.value &&
788
+ !operation.arguments.some((argument) => argument.value === operand.value)))
789
+ nativeDefinitionCallees.delete(operand.value);
790
+ // `options.representations` is the complete sealed plan, including ABI
791
+ // entries whose callable object was shaken away. A callable ABI is an
792
+ // external publication boundary only when a final IR value actually
793
+ // carries it. Results and operands cover allocation, parameter/binding,
794
+ // field, call, return, capture and conversion paths; a body ABI alone is
795
+ // intentionally not evidence that its function object escaped.
796
+ const materializedRepresentations = new Set();
797
+ const observedValues = new Set();
798
+ for (const operation of operations) {
799
+ const result = resultOfIrOperation(operation);
800
+ if (result && !nativeDefinitionCallees.has(result.id))
801
+ materializedRepresentations.add(representationKey(result.representation));
802
+ for (const operand of operandsOfIrOperation(operation)) {
803
+ if (!nativeDefinitionCallees.has(operand.value))
804
+ materializedRepresentations.add(representationKey(operand.representation));
805
+ observedValues.add(operand.value);
806
+ }
807
+ }
808
+ const bodyByFunction = new Map();
809
+ const bodyByOperation = new Map();
810
+ for (const body of bodies) {
811
+ for (const block of body.blocks.values())
812
+ for (const operation of [...block.operations, block.terminator])
813
+ bodyByOperation.set(operation, body);
814
+ if (body.abi === null)
815
+ continue;
816
+ const key = String(body.sourceOwner);
817
+ bodyByFunction.set(key, bodyByFunction.has(key) ? null : body);
818
+ }
819
+ const knownCallFunctionIds = (operation) => {
820
+ if (operation.argumentsAreSpread || operation.closedCallee === undefined)
821
+ return null;
822
+ return operation.closedCallee.kind === 'exact' ? [operation.closedCallee.functionId] : operation.closedCallee.functionIds;
823
+ };
824
+ const closedCallOperations = new Set();
825
+ for (const operation of operations) {
826
+ if (operation.kind !== 'call')
827
+ continue;
828
+ const functionIds = knownCallFunctionIds(operation);
829
+ if (functionIds === null ||
830
+ functionIds.length === 0 ||
831
+ !functionIds.every((functionId) => {
832
+ const body = bodyByFunction.get(String(functionId));
833
+ return (body !== undefined &&
834
+ body !== null &&
835
+ body.abi !== null &&
836
+ (operation.closedFrame === undefined ? callMatchesAbi(operation, body.abi) : abiMatches(operation.closedFrame.abi, body.abi)));
837
+ }))
838
+ continue;
839
+ closedCallOperations.add(operation);
840
+ }
841
+ const closedConstructOperations = new Set();
842
+ for (const operation of operations) {
843
+ if (operation.kind !== 'construct')
844
+ continue;
845
+ if (nativeClassConstructionOf(operation, classes, (id) => bodyByFunction.get(String(id)), options.conversions) !== null) {
846
+ closedConstructOperations.add(operation);
847
+ continue;
848
+ }
849
+ // A host constructor has no compiler-owned body for the loop below to
850
+ // walk, so its frame is the whole proof, exactly as for a sealed native
851
+ // call: `new WeakMap()` in three's `WebGLProperties` publishes a fresh
852
+ // empty collection, not the texture/material bags it will later hold.
853
+ // See `nativeHostConstructionOf` for what stays open.
854
+ if (nativeHostConstructionOf(operation, options.conversions) !== null) {
855
+ closedConstructOperations.add(operation);
856
+ continue;
857
+ }
858
+ const targets = operation.target.kind === 'exact'
859
+ ? [operation.target.target]
860
+ : operation.target.kind === 'closed-family'
861
+ ? operation.target.targets
862
+ : null;
863
+ if (targets === null || targets.length === 0)
864
+ continue;
865
+ let closed = true;
866
+ for (const target of targets) {
867
+ if (target.kind === 'function') {
868
+ const body = bodyByFunction.get(String(target.functionId));
869
+ const classLayouts = [...classes.values()].filter((layout) => layout.constructor === target.functionId);
870
+ if (body === undefined || body === null) {
871
+ closed = false;
872
+ break;
873
+ }
874
+ if (classLayouts.length > 0) {
875
+ // Written class constructors use the class body ABI (`this`/
876
+ // instance receiver, void result), while the class allocation owns
877
+ // the receiver-less construct ABI used by this operation.
878
+ if (!classLayouts.every((layout) => layout.construct !== null &&
879
+ constructMatchesAbi(operation, layout.construct, options.conversions) &&
880
+ classConstructorBodyMatches(layout, body))) {
881
+ closed = false;
882
+ break;
883
+ }
884
+ continue;
885
+ }
886
+ // The entry census can also publish a receiver-free call convention
887
+ // when the ordinary constructor's explicit Object return always wins.
888
+ // Reflection must consume the same entry the printer will invoke.
889
+ const entry = operation.entry;
890
+ const constructAbi = entry?.kind === 'explicit-object-return' &&
891
+ entry.functionId === target.functionId &&
892
+ body.abi !== null &&
893
+ abiMatches(entry.abi, body.abi)
894
+ ? entry.abi
895
+ : body.construct;
896
+ if (!target.constructable || constructAbi === null || !constructMatchesAbi(operation, constructAbi, options.conversions)) {
897
+ closed = false;
898
+ break;
899
+ }
900
+ continue;
901
+ }
902
+ const layout = classLayoutOfCopy(classes, target.classDeclaration);
903
+ // An implicit-source-constructor target is emitted only for a class with
904
+ // no written constructor. Its class construct ABI is the complete
905
+ // convention; accepting a layout that also names a constructor would
906
+ // silently bypass that body and turn a closed result into a guess.
907
+ if (layout === undefined ||
908
+ layout.constructor !== null ||
909
+ layout.construct === null ||
910
+ !constructMatchesAbi(operation, layout.construct, options.conversions)) {
911
+ closed = false;
912
+ break;
913
+ }
914
+ }
915
+ if (closed)
916
+ closedConstructOperations.add(operation);
917
+ }
918
+ const unwrappedCallableAbi = (representation) => {
919
+ if (representation.kind === 'optional')
920
+ return unwrappedCallableAbi(representation.payload);
921
+ if (representation.kind === 'borrowed-ref')
922
+ return unwrappedCallableAbi(representation.referent);
923
+ return callableAbiOf(representation);
924
+ };
925
+ // An adapter invokes a compiler-owned source body through its own sealed
926
+ // convention. Its FunctionId alone cannot certify the adapted call frame;
927
+ // follow the conversion's transport proof and check the held entry instead.
928
+ //
929
+ // The frame is the whole proof here, and `closedValue` is deliberately not
930
+ // required beside it. Naming a compiler-owned body is what DISPATCH needs;
931
+ // what this census needs is whether the operands cross a dynamic boundary,
932
+ // and an exact frame already answers that: every argument, the receiver and
933
+ // the result agree with the callee's own stated convention, so each one is
934
+ // held in its declared native carrier and none is published as a `Value`.
935
+ // Requiring a FunctionId beside it asked a question a sealed native member
936
+ // can never answer -- `CallOperation.closedCallee` names "compiler-owned
937
+ // body identity only" -- so `[].push(n)`, `map.get(k)`, `str.split(s)`,
938
+ // `Math.min(a, b)` and `pattern.exec(s)` each read as an open boundary and
939
+ // promoted their receiver and every argument to an unrestricted field
940
+ // protocol. That was 2,480 of the three.js app's 4,193 `unknown-call-boundary`
941
+ // origins, every one of them with a frame that already matched exactly.
942
+ //
943
+ // A callee stating no native convention still fails `abi !== null` -- a
944
+ // `dynamic` callee has no ABI to match -- an inexact frame still fails, and
945
+ // a compiler-owned body contributes its own operations to this same census
946
+ // whether or not a call site names it. So nothing here trusts a body it has
947
+ // not walked; it trusts the convention the carrier already states.
948
+ for (const operation of operations) {
949
+ if (operation.kind !== 'call' || operation.argumentsAreSpread || closedCallOperations.has(operation))
950
+ continue;
951
+ // A call the printer spells from a host template never enters the callee's
952
+ // declared convention, so that convention is not its frame; the template's
953
+ // own is (`hostTemplateFrameOf`), and where it answers it alone decides.
954
+ const template = hostTemplateFrameOf(operation, options.conversions, deriver, classes);
955
+ if (template !== undefined) {
956
+ if (template)
957
+ closedCallOperations.add(operation);
958
+ continue;
959
+ }
960
+ const abi = unwrappedCallableAbi(operation.callee.representation);
961
+ // `native-transfer`, not the value identity provenance and the native
962
+ // class-initialization entry ask for: this census's question is whether an
963
+ // operand crosses a dynamic boundary, and an argument the conversion census
964
+ // carries into its formal in native storage crosses none, whoever's value
965
+ // the body ends up holding.
966
+ if (abi !== null && nativeCallFrameOf(operation, abi, observedValues, options.conversions, 'native-transfer') !== undefined)
967
+ closedCallOperations.add(operation);
968
+ }
969
+ const collectCandidate = (representation) => {
970
+ const rootKey = representationKey(representation);
971
+ const descendants = [];
972
+ const descendantKeys = new Set();
973
+ const pending = [representation];
974
+ const pendingSeen = new Set();
975
+ while (pending.length > 0) {
976
+ const next = pending.pop();
977
+ if (!next)
978
+ continue;
979
+ const identity = representationKey(next);
980
+ if (pendingSeen.has(identity))
981
+ continue;
982
+ pendingSeen.add(identity);
983
+ const surfaces = objectSurfacesOf(next);
984
+ if (surfaces.length > 0) {
985
+ for (const surface of surfaces) {
986
+ const key = representationKey(surface);
987
+ if (key !== rootKey && !descendantKeys.has(key)) {
988
+ descendantKeys.add(key);
989
+ descendants.push(surface);
990
+ }
991
+ if (candidates.has(key))
992
+ continue;
993
+ candidates.set(key, surface);
994
+ // Candidate discovery must publish a row even when this nested
995
+ // surface never appears as a separate root in the emission inventory.
996
+ // A missing row makes consumers retain the unrestricted protocol.
997
+ if (!rows.has(key))
998
+ rows.set(key, { level: 'keys-only', reasons: new Set(), representations: new Set([key]) });
999
+ if (!nativePropertyLayoutOf(surface))
1000
+ markFullOnly(surface, 'unproven-layout-protocol');
1001
+ const children = directChildrenCache.get(key) ?? directChildrenOf(surface, classes, deriver);
1002
+ directChildrenCache.set(key, children);
1003
+ pending.push(...children);
1004
+ }
1005
+ }
1006
+ else {
1007
+ const children = directChildrenCache.get(identity) ?? directChildrenOf(next, classes, deriver);
1008
+ directChildrenCache.set(identity, children);
1009
+ pending.push(...children);
1010
+ }
1011
+ }
1012
+ return descendants;
1013
+ };
1014
+ const seededRoots = new Set();
1015
+ for (const representation of options.representations) {
1016
+ const identity = representationKey(representation);
1017
+ if (seededRoots.has(identity))
1018
+ continue;
1019
+ seededRoots.add(identity);
1020
+ const surfaces = objectSurfacesOf(representation);
1021
+ if (surfaces.length === 0) {
1022
+ if (!materializedRepresentations.has(identity))
1023
+ continue;
1024
+ // Inventory includes both sides of the convention. Publication follows
1025
+ // the outgoing side only; an input type is not an exposed object.
1026
+ for (const child of collectCandidate(representation)) {
1027
+ const key = representationKey(child);
1028
+ const row = rows.get(key) ?? { level: 'keys-only', reasons: new Set(), representations: new Set() };
1029
+ row.representations.add(key);
1030
+ if (!nativePropertyLayoutOf(child)) {
1031
+ row.level = 'full';
1032
+ row.reasons.add('unproven-layout-protocol');
1033
+ markFullOnly(child, 'unproven-layout-protocol');
1034
+ }
1035
+ rows.set(key, row);
1036
+ }
1037
+ // A signature is an inventory entry, not an outgoing object. Calls,
1038
+ // conversions and publications below own demand for callable outputs;
1039
+ // even an unknown callable can be discarded without creating its result.
1040
+ if (!isDeferredCarrier(representation))
1041
+ promoteFull(representation, 'unproven-carrier-boundary');
1042
+ }
1043
+ for (const surface of surfaces) {
1044
+ collectCandidate(surface);
1045
+ const key = representationKey(surface);
1046
+ const row = rows.get(key) ?? { level: 'keys-only', reasons: new Set(), representations: new Set() };
1047
+ row.representations.add(key);
1048
+ if (!nativePropertyLayoutOf(surface)) {
1049
+ row.level = 'full';
1050
+ row.reasons.add('unproven-layout-protocol');
1051
+ }
1052
+ rows.set(key, row);
1053
+ if (!nativePropertyLayoutOf(surface))
1054
+ markFullOnly(surface, 'unproven-layout-protocol');
1055
+ }
1056
+ }
1057
+ const constants = constantsOf(operations);
1058
+ const typedReturnValues = new Set();
1059
+ for (const body of bodies) {
1060
+ // The body publishes its exact native ABI result. How callers expose it
1061
+ // is owned by their call/conversion operations, including unknown calls;
1062
+ // requiring a known direct invocation here conflates those boundaries.
1063
+ if (body.abi === null)
1064
+ continue;
1065
+ for (const blockId of body.blockOrder) {
1066
+ const block = body.blocks.get(blockId);
1067
+ if (block?.terminator.kind === 'return' && block.terminator.value !== null && body.abi.result.kind !== 'void') {
1068
+ if (representationKey(block.terminator.value.representation) === representationKey(body.abi.result))
1069
+ typedReturnValues.add(String(block.terminator.value.value));
1070
+ }
1071
+ }
1072
+ }
1073
+ for (const operation of operations) {
1074
+ currentOperation = operation;
1075
+ if (operation.kind === 'compute' && operation.form === 'unary' && operation.operator === 'ObjectTag') {
1076
+ // The authenticated algorithm reads one well-known symbol. It neither
1077
+ // reads ordinary toString nor publishes unrelated fields or tag objects.
1078
+ const tagDeclaration = [...(options.wellKnownSymbols ?? [])].find(([, name]) => name === 'toStringTag')?.[0];
1079
+ const receiver = operation.operands[0];
1080
+ if (tagDeclaration !== undefined && receiver !== undefined) {
1081
+ if (deriver && nativeRecordIndexHasPropertyOf(deriver, receiver.representation, { kind: 'symbol' }))
1082
+ continue;
1083
+ promoteNamedField(receiver.representation, `sym(${tagDeclaration})`, operation);
1084
+ continue;
1085
+ }
1086
+ // Without the symbol census, retain the ordinary unknown-operation
1087
+ // demand below: an absent authority is not proof of an absent property.
1088
+ }
1089
+ if (operation.kind === 'get' && nativeDefinitionCallees.has(operation.result.id))
1090
+ continue;
1091
+ if (nativeAbsentPropertyReadOf(operation) !== null)
1092
+ continue;
1093
+ if (nativeKeyQueryOf(operation, nativePropertyLayoutOf))
1094
+ continue;
1095
+ if (nativeArrayTransportOf(operation, keyOf(keyOperandOf(operation), constants)))
1096
+ continue;
1097
+ if (nativeDictionaryTransportOf(operation))
1098
+ continue;
1099
+ if (nativeRecordIndexTransportOf(operation, deriver, options.conversions, keyOf(keyOperandOf(operation), constants)))
1100
+ continue;
1101
+ if (nativeSequenceTransportOf(operation))
1102
+ continue;
1103
+ if (nativeCallableBindTransportOf(operation))
1104
+ continue;
1105
+ if (nativeClassAccessorEntryOf(operation, keyOf(keyOperandOf(operation), constants), classes, (id) => bodyByFunction.get(String(id)), options.conversions))
1106
+ continue;
1107
+ if ((operation.kind === 'get' || operation.kind === 'set') && operation.receiver.representation.kind === 'class-ref') {
1108
+ const key = keyOf(operation.key, constants);
1109
+ const member = key === null ? null : classMemberOf(classes, operation.receiver.representation.declaration, key);
1110
+ if (member?.kind === 'accessor') {
1111
+ // The native entry proof above owns safe accessor transport. An
1112
+ // adapting/unknown half must retain both its receiver and its actual
1113
+ // payload convention, even if the get result itself is erased.
1114
+ promoteFull(operation.receiver.representation, 'unproven-accessor-entry');
1115
+ const id = operation.kind === 'get' ? member.accessor.getter : member.accessor.setter;
1116
+ const frame = id === null ? null : bodyByFunction.get(String(id))?.abi;
1117
+ if (operation.kind === 'get') {
1118
+ if (frame)
1119
+ promoteFull(frame.result, 'unproven-accessor-result');
1120
+ promoteFull(operation.result.representation, 'unproven-accessor-result');
1121
+ }
1122
+ else {
1123
+ promoteFull(operation.value.representation, 'unproven-accessor-argument');
1124
+ for (const parameter of frame?.parameters ?? [])
1125
+ promoteFull(parameter.value, 'unproven-accessor-argument');
1126
+ }
1127
+ continue;
1128
+ }
1129
+ }
1130
+ if (operation.kind === 'merge-live-arm-rebuild' && options.conversions && nativeMergeTransportMatches(operation, options.conversions))
1131
+ continue;
1132
+ const receiver = receiverOf(operation);
1133
+ if (receiver) {
1134
+ const key = keyOf(keyOperandOf(operation), constants);
1135
+ // A computed key three's `Material.setValues`/`Texture.setValues` shape
1136
+ // hands the census a finite, closed-forward name set for
1137
+ // (`PropertyOperation.provenKeyTexts`'s own comment has the full
1138
+ // contract) is an UPPER bound on the key, proven from every closed
1139
+ // caller and checked against the sealed host-mutation census's own
1140
+ // obligations -- never license to assume more than that proof. `null`
1141
+ // here (no hook, a refused proof, or a surviving-obligation check that
1142
+ // failed) means exactly what it meant before this field existed:
1143
+ // publish the whole reachable carrier graph.
1144
+ const provenKeyTexts = (operation.kind === 'get' || operation.kind === 'set') && operation.provenKeyTexts && operation.provenKeyTexts.length > 0
1145
+ ? operation.provenKeyTexts
1146
+ : null;
1147
+ if (key === null &&
1148
+ operation.kind !== 'own-property-keys' &&
1149
+ !(operation.kind === 'get-iterator' && operation.protocol === 'enumerate') &&
1150
+ !certifiedComputedReadOf(operation)) {
1151
+ if (provenKeyTexts) {
1152
+ // `promoteNamedField` already fans a `class-ref` receiver out across
1153
+ // its whole family (bases and subclasses) -- exactly what a key
1154
+ // that can name a member declared on ANY of them needs: `this` is
1155
+ // typed `Material` but `color`/`shininess` are declared only on
1156
+ // `MeshPhongMaterial`.
1157
+ for (const name of provenKeyTexts)
1158
+ promoteNamedField(receiver.representation, name, operation);
1159
+ }
1160
+ else
1161
+ promoteFull(receiver.representation, 'runtime-computed-property-key');
1162
+ }
1163
+ else if (key !== null && operation.kind !== 'get' && operation.kind !== 'set' && operation.kind !== 'define-own-property')
1164
+ promoteNamedField(receiver.representation, key, operation);
1165
+ else if (key !== null) {
1166
+ const value = valueRepresentationOf(operation);
1167
+ const surfaces = objectSurfacesOf(receiver.representation);
1168
+ // A `constructor-family` has no object SURFACE at all -- no struct, so
1169
+ // nothing for a field protocol to be published on -- which is why the
1170
+ // surface walk below cannot reach it and why its slot proof is asked of
1171
+ // the receiver itself.
1172
+ // A non-default descriptor is never a native slot write, whatever the
1173
+ // carriers say -- see `storesIntoDeclaredSlot` -- so the exact-carrier
1174
+ // and static-slot proofs below are asked only of a write that takes the
1175
+ // ordinary member store.
1176
+ const exact = value !== null &&
1177
+ !(operation.kind === 'define-own-property' && !storesIntoDeclaredSlot(operation)) &&
1178
+ (nativeStaticSlotHolds(receiver.representation, key, value) ||
1179
+ (operation.kind === 'get' && classPrototypeReadOf(classes, receiver.representation, key, value) !== null) ||
1180
+ (surfaces.length > 0 &&
1181
+ surfaces.every((surface) => {
1182
+ const field = declaredFieldOf(surface, key, classes, deriver);
1183
+ return ((field !== null &&
1184
+ (representationKey(field.value) === representationKey(value) ||
1185
+ (operation.kind === 'get' &&
1186
+ nativePayloadTransportMatches(field.value, value, options.conversions?.nodeById(conversionNodeIdOf(field.value, value)))) ||
1187
+ (storesIntoDeclaredSlot(operation) &&
1188
+ nativePayloadTransportMatches(value, field.value, options.conversions?.nodeById(conversionNodeIdOf(value, field.value)))))) ||
1189
+ (operation.kind === 'get' &&
1190
+ (knownClassMemberReadOf(surface, key, classes) ||
1191
+ knownNativeMemberReadOf(surface, key, value) ||
1192
+ absentClassArmRead(receiver.representation, surface, key, value, classes) ||
1193
+ objectPrototypeMemberReadOf(surface, key, value))));
1194
+ })));
1195
+ if (!exact) {
1196
+ promoteNamedField(receiver.representation, key, operation);
1197
+ if (value)
1198
+ promoteFull(value, 'unproven-native-slot-value');
1199
+ }
1200
+ }
1201
+ continue;
1202
+ }
1203
+ if (operation.kind === 'convert' && operation.result.representation.kind === 'dynamic') {
1204
+ promoteFull(operation.source.representation, 'object-to-dynamic-conversion');
1205
+ continue;
1206
+ }
1207
+ if (operation.kind === 'convert') {
1208
+ const node = options.conversions?.nodeById(operation.conversionUse);
1209
+ if (node !== null &&
1210
+ node !== undefined &&
1211
+ representationKey(node.source) === representationKey(operation.source.representation) &&
1212
+ representationKey(node.target) === representationKey(operation.result.representation) &&
1213
+ (node.capability.kind === 'identity' ||
1214
+ ((node.capability.kind === 'atom' || node.capability.kind === 'static' || node.capability.kind === 'class-family') &&
1215
+ node.capability.materializer.nativeFieldProtocol === 'unused')))
1216
+ continue;
1217
+ // A converted callable receives the target convention's inputs. Unless
1218
+ // the conversion proved native-only transport above, its adapter may
1219
+ // publish those inputs to a dynamic source listener. That publication
1220
+ // happens inside generated adapter code, not in a separate IR call.
1221
+ const targetAbi = unwrappedCallableAbi(operation.result.representation);
1222
+ if (targetAbi !== null) {
1223
+ if (targetAbi.receiver !== null)
1224
+ promoteFull(targetAbi.receiver, 'callable-adapter-input');
1225
+ for (const parameter of targetAbi.parameters)
1226
+ promoteFull(parameter.value, 'callable-adapter-input');
1227
+ }
1228
+ }
1229
+ if (observesNativeCarrierOnly(operation))
1230
+ continue;
1231
+ if (operation.kind === 'phi' &&
1232
+ operation.incoming.every((incoming) => representationKey(incoming.value.representation) === representationKey(operation.result.representation)))
1233
+ continue;
1234
+ // A representation-preserving conversion is a typed identity transfer.
1235
+ // It does not invoke a native dynamic protocol, even when the source and
1236
+ // destination are borrowed/optional wrappers around the same carrier.
1237
+ // Other conversions stay at the generic boundary below until their
1238
+ // conversion authority publishes a stronger closed proof.
1239
+ if (operation.kind === 'convert' &&
1240
+ representationKey(operation.source.representation) === representationKey(operation.result.representation))
1241
+ continue;
1242
+ if (operation.kind === 'spread-copy') {
1243
+ promoteFull(operation.source.representation, 'dynamic-spread-source');
1244
+ promoteFull(operation.receiver.representation, 'dynamic-spread-target');
1245
+ continue;
1246
+ }
1247
+ if (operation.kind === 'call') {
1248
+ if (operation.intrinsicReflection && !operation.argumentsAreSpread) {
1249
+ const target = operation.arguments[0];
1250
+ const property = operation.arguments[1];
1251
+ if (target && property) {
1252
+ // Native ABI transport does not erase Reflect's actual field access.
1253
+ const key = keyOf(property, constants);
1254
+ if (key === null)
1255
+ promoteFull(target.representation, 'reflect-runtime-key');
1256
+ else
1257
+ promoteNamedField(target.representation, key, operation);
1258
+ promoteFull(property.representation, 'reflect-key-coercion');
1259
+ if (operation.intrinsicReflection === 'set' && operation.arguments[2]) {
1260
+ const surfaces = objectSurfacesOf(target.representation);
1261
+ const native = key !== null &&
1262
+ surfaces.length > 0 &&
1263
+ surfaces.every((surface) => nativeReflectFieldTransportOf(operation, declaredFieldOf(surface, key, classes, deriver)) === 'native-write');
1264
+ if (!native)
1265
+ promoteFull(operation.arguments[2].representation, 'reflect-written-value');
1266
+ }
1267
+ continue;
1268
+ }
1269
+ }
1270
+ if (operation.fixedDataDefinition !== undefined) {
1271
+ if (operation.fixedDataDefinition.nativeFieldProtocol === 'unused')
1272
+ continue;
1273
+ // The recipe explicitly records missing authentication or a conversion
1274
+ // that needs native field reflection. A matching ABI cannot cancel it.
1275
+ for (const value of operandsOfIrOperation(operation))
1276
+ promoteFull(value.representation, 'unproven-fixed-data-definition');
1277
+ if (operation.result)
1278
+ promoteFull(operation.result.representation, 'unproven-fixed-data-definition-result');
1279
+ continue;
1280
+ }
1281
+ // A call that reads only its argument's carrier exposes nothing inside
1282
+ // it. `Array.isArray` is the whole family so far; its ambient parameter
1283
+ // is `any`, which is why it otherwise reads here as the most open
1284
+ // boundary a program can have.
1285
+ if (nativeCarrierPredicateOf(operation))
1286
+ continue;
1287
+ // CallOperation has no authenticated host-path fact. Unknown calls may
1288
+ // inspect or mutate every native receiver/argument they receive.
1289
+ // A matching call elsewhere cannot certify this operation's ABI.
1290
+ if (closedCallOperations.has(operation))
1291
+ continue;
1292
+ // A native fixed frame cannot inspect trailing arguments it does not
1293
+ // receive. Their evaluation is already represented by preceding IR;
1294
+ // retaining its effects does not publish the resulting values here.
1295
+ for (const value of [operation.callee, operation.receiver, ...receivedCallArguments(operation)])
1296
+ if (value)
1297
+ promoteFull(value.representation, 'unknown-call-boundary');
1298
+ if (operation.result)
1299
+ promoteFull(operation.result.representation, 'unknown-call-result');
1300
+ continue;
1301
+ }
1302
+ if (operation.kind === 'construct' && closedConstructOperations.has(operation))
1303
+ continue;
1304
+ if (operation.kind === 'super-initialize' &&
1305
+ nativeSuperInitializationOf(operation, bodyByOperation.get(operation), classes, (id) => bodyByFunction.get(String(id)), options.conversions) !== null)
1306
+ continue;
1307
+ if (operation.kind === 'construct') {
1308
+ // The fresh object is an output boundary just like an unknown call's
1309
+ // result. It is not listed by operandsOfIrOperation because construct
1310
+ // operands intentionally exclude the result value.
1311
+ promoteFull(operation.result.representation, 'unknown-operation-boundary:construct-result');
1312
+ }
1313
+ if (operation.kind === 'binding-write') {
1314
+ const placement = options.placements?.get(operation.declaration);
1315
+ const local = placement?.storage.kind === 'local' || placement?.storage.kind === 'region';
1316
+ if (!local ||
1317
+ placement?.representation === null ||
1318
+ placement === undefined ||
1319
+ representationKey(placement.representation) !== representationKey(operation.value.representation))
1320
+ promoteFull(operation.value.representation, 'unproven-binding-publication');
1321
+ continue;
1322
+ }
1323
+ if (operation.kind === 'return' && operation.value !== null && typedReturnValues.has(String(operation.value.value)))
1324
+ continue;
1325
+ for (const operand of operandsOfIrOperation(operation))
1326
+ if (objectSurfacesOf(operand.representation).length > 0 ||
1327
+ carriesCallable(operand.representation) ||
1328
+ isDeferredCarrier(operand.representation))
1329
+ promoteFull(operand.representation, `unknown-operation-boundary:${operation.kind}`);
1330
+ // An unknown iterator/await can produce an object independently from its
1331
+ // input's representation. Inventory is not a substitute for this edge.
1332
+ if ((operation.kind === 'iterator-next' || operation.kind === 'await') && operation.result !== null)
1333
+ promoteFull(operation.result.representation, `unknown-operation-result:${operation.kind}`);
1334
+ }
1335
+ currentOperation = null;
1336
+ if (!options.shakeComplete) {
1337
+ for (const representation of options.representations)
1338
+ promoteFull(representation, 'missing-shake-facts');
1339
+ for (const representation of candidates.values())
1340
+ promoteFull(representation, 'missing-shake-facts');
1341
+ }
1342
+ if (reflectionWatch !== undefined)
1343
+ for (const [key, row] of rows)
1344
+ if (key.includes(reflectionWatch))
1345
+ console.error(`[REFLECTION-ROW] ${key} level=${row.level} reasons=${[...row.reasons].join(',')}`);
1346
+ const byRepresentation = new Map();
1347
+ for (const [key, row] of rows)
1348
+ byRepresentation.set(key, Object.freeze({
1349
+ level: row.level,
1350
+ ...(unrestricted.has(key) ? {} : { fieldOperations: fieldOperations.get(key) ?? new Map() }),
1351
+ reasons: new Set(row.reasons),
1352
+ representations: new Set(row.representations)
1353
+ }));
1354
+ const classesOut = new Map();
1355
+ const recordsOut = new Map();
1356
+ const joinFields = (left, right) => {
1357
+ if (left.fieldOperations === undefined || right.fieldOperations === undefined)
1358
+ return undefined;
1359
+ const fields = new Map();
1360
+ for (const demand of [left, right])
1361
+ for (const [key, uses] of demand.fieldOperations) {
1362
+ const joined = fields.get(key) ?? new Set();
1363
+ for (const use of uses)
1364
+ joined.add(use);
1365
+ fields.set(key, joined);
1366
+ }
1367
+ return fields;
1368
+ };
1369
+ const join = (left, right) => left === undefined
1370
+ ? right
1371
+ : {
1372
+ level: left.level === 'full' || right.level === 'full' ? 'full' : 'keys-only',
1373
+ ...(joinFields(left, right) === undefined ? {} : { fieldOperations: joinFields(left, right) }),
1374
+ reasons: new Set([...left.reasons, ...right.reasons]),
1375
+ representations: new Set([...left.representations, ...right.representations])
1376
+ };
1377
+ for (const representation of candidates.values()) {
1378
+ const demand = byRepresentation.get(representationKey(representation));
1379
+ if (!demand)
1380
+ continue;
1381
+ if (representation.kind === 'class-ref')
1382
+ classesOut.set(representation.declaration, join(classesOut.get(representation.declaration), demand));
1383
+ else if (representation.kind === 'record' || representation.kind === 'record-with-index' || representation.kind === 'native-record-ref')
1384
+ recordsOut.set(representation.shapeId, join(recordsOut.get(representation.shapeId), demand));
1385
+ }
1386
+ const exposure = {
1387
+ classes: classesOut,
1388
+ records: recordsOut,
1389
+ byRepresentation,
1390
+ complete: options.shakeComplete,
1391
+ ...(options.trace ? { boundaries: { origins, affecting, parents, callableReads } } : {})
1392
+ };
1393
+ return options.physicalClasses ? closePhysicalClassReflection(exposure, options.physicalClasses) : exposure;
1394
+ };